on xenial help sign in
Merge
a7b4d04Albert Astals
Bottombar/Bottombar.qml+1−1
@@ -122,7 +122,7 @@ Item {
122 id: dragArea
122 id: dragArea
123 objectName: "hudDragArea"
123 objectName: "hudDragArea"
124 width: parent.width
124 width: parent.width
125− height: distanceThreshold
125+ height: shell.edgeSize
126 anchors.bottom: parent.bottom
126 anchors.bottom: parent.bottom
127
127
128 distanceThreshold: units.gu(8)
128 distanceThreshold: units.gu(8)
Components/ApplicationManagerWrapper.qml+13−30
@@ -18,19 +18,20 @@ import QtQuick 2.0
18import Unity.Application 0.1
18import Unity.Application 0.1
19
19
20Item {
20Item {
21− id: applicationManager
21+ id: root
22
22
23 property alias mainStageApplications: mainStageModel
23 property alias mainStageApplications: mainStageModel
24 property alias sideStageApplications: sideStageModel
24 property alias sideStageApplications: sideStageModel
25 property variant mainStageFocusedApplication: null
25 property variant mainStageFocusedApplication: null
26 property variant sideStageFocusedApplication: null
26 property variant sideStageFocusedApplication: null
27 property bool sideStageEnabled: true
27 property bool sideStageEnabled: true
28− signal focusRequested(string desktopFile)
29 property bool keyboardVisible: ApplicationManager.keyboardVisible
28 property bool keyboardVisible: ApplicationManager.keyboardVisible
30 property int keyboardHeight: ApplicationManager.keyboardHeight
29 property int keyboardHeight: ApplicationManager.keyboardHeight
31
30
32 property bool fake: ApplicationManager.fake ? ApplicationManager.fake : false
31 property bool fake: ApplicationManager.fake ? ApplicationManager.fake : false
33
32
33+ signal focusRequested(string appId)
34+
34 ApplicationsModelStageFiltered {
35 ApplicationsModelStageFiltered {
35 id: mainStageModel
36 id: mainStageModel
36 stage: ApplicationInfo.MainStage
37 stage: ApplicationInfo.MainStage
@@ -62,6 +63,16 @@ Item {
62 }
63 }
63 }
64 }
64 }
65 }
66+
67+ onFocusRequested: {
68+ // if no side stage enabled, override application's stage parameter
69+ var app = ApplicationManager.findApplication(appId);
70+ if (app && app.stage === ApplicationInfo.SideStage && !sideStageEnabled) {
71+ app.stage = ApplicationInfo.MainStage;
72+ }
73+
74+ root.focusRequested(appId);
75+ }
65 }
76 }
66
77
67 function activateApplication(desktopFile, argument) {
78 function activateApplication(desktopFile, argument) {
@@ -155,32 +166,4 @@ Item {
155 }
166 }
156 return desktopFile.substring(left+1, right);
167 return desktopFile.substring(left+1, right);
157 }
168 }
158−
159− Connections {
160− target: ApplicationManager
161− onFocusRequested: {
162− // FIXME: hardcoded mapping from ApplicationManager.FavoriteApplications
163− // enum to desktop files
164− var desktopFile
165− if (favoriteApplication == ApplicationManager.CameraApplication) {
166− desktopFile = "/usr/share/applications/camera-app.desktop"
167− } else if (favoriteApplication == ApplicationManager.GalleryApplication) {
168− desktopFile = "/usr/share/applications/gallery-app.desktop"
169− } else if (favoriteApplication == ApplicationManager.ShareApplication) {
170− desktopFile = "/usr/share/applications/share-app.desktop"
171− } else if (favoriteApplication == ApplicationManager.BrowserApplication) {
172− desktopFile = "/usr/share/applications/webbrowser-app.desktop"
173− } else if (favoriteApplication == ApplicationManager.PhoneApplication) {
174− desktopFile = "/usr/share/applications/phone-app.desktop"
175− } else if (favoriteApplication == ApplicationManager.DialerApplication) {
176− desktopFile = "/usr/share/applications/dialer-app.desktop"
177− } else if (favoriteApplication == ApplicationManager.MessagingApplication) {
178− desktopFile = "/usr/share/applications/messaging-app.desktop"
179− } else if (favoriteApplication == ApplicationManager.AddressbookApplication) {
180− desktopFile = "/usr/share/applications/address-book-app.desktop"
181− }
182−
183− applicationManager.focusRequested(desktopFile);
184− }
185− }
186}
169}
Components/Carousel.qml+5−4
@@ -72,7 +72,7 @@ Item {
72 id: listView
72 id: listView
73
73
74 property real minimumTileWidth: 0
74 property real minimumTileWidth: 0
75− property real newContentX: -1
75+ property real newContentX: disabledNewContentX
76 property real pathItemCount: referenceWidth / referenceTileWidth
76 property real pathItemCount: referenceWidth / referenceTileWidth
77 property real tileAspectRatio: 1
77 property real tileAspectRatio: 1
78
78
@@ -100,6 +100,7 @@ Item {
100 readonly property real kMiddleIndex: (realWidth / 2) / tileWidth - 0.5
100 readonly property real kMiddleIndex: (realWidth / 2) / tileWidth - 0.5
101 readonly property real kXBeginningEnd: 1 / tileWidth + kMiddleIndex / gapToMiddlePhase
101 readonly property real kXBeginningEnd: 1 / tileWidth + kMiddleIndex / gapToMiddlePhase
102 readonly property real maximumItemTranslation: (listView.tileWidth * 3) / listView.scaleFactor
102 readonly property real maximumItemTranslation: (listView.tileWidth * 3) / listView.scaleFactor
103+ readonly property real disabledNewContentX: -carousel.drawBuffer - 1
103 readonly property real realContentWidth: contentWidth - 2 * carousel.drawBuffer
104 readonly property real realContentWidth: contentWidth - 2 * carousel.drawBuffer
104 readonly property real realContentX: contentX + carousel.drawBuffer
105 readonly property real realContentX: contentX + carousel.drawBuffer
105 readonly property real realPathItemCount: Math.min(realWidth / tileWidth, pathItemCount)
106 readonly property real realPathItemCount: Math.min(realWidth / tileWidth, pathItemCount)
@@ -192,7 +193,7 @@ Item {
192 onMovementStarted: {
193 onMovementStarted: {
193 stepAnimation.stop()
194 stepAnimation.stop()
194 newContentXAnimation.stop()
195 newContentXAnimation.stop()
195− newContentX = -1
196+ newContentX = disabledNewContentX
196 }
197 }
197 onMovementEnded: {
198 onMovementEnded: {
198 if (realContentX > 0 && realContentX < realContentWidth - realWidth)
199 if (realContentX > 0 && realContentX < realContentWidth - realWidth)
@@ -228,7 +229,7 @@ Item {
228 easing.type: Easing.InOutQuad
229 easing.type: Easing.InOutQuad
229 }
230 }
230 ScriptAction {
231 ScriptAction {
231− script: listView.newContentX = -1
232+ script: listView.newContentX = listView.disabledNewContentX
232 }
233 }
233 }
234 }
234
235
@@ -253,7 +254,7 @@ Item {
253 readonly property bool explicitScale: (!listView.moving ||
254 readonly property bool explicitScale: (!listView.moving ||
254 listView.realContentX <= 0 ||
255 listView.realContentX <= 0 ||
255 listView.realContentX >= listView.realContentWidth - listView.realWidth) &&
256 listView.realContentX >= listView.realContentWidth - listView.realWidth) &&
256− listView.newContentX < 0 &&
257+ listView.newContentX === listView.disabledNewContentX &&
257 index === listView.selectedIndex
258 index === listView.selectedIndex
258 readonly property real cachedTiles: listView.realPathItemCount + carousel.drawBuffer / listView.tileWidth
259 readonly property real cachedTiles: listView.realPathItemCount + carousel.drawBuffer / listView.tileWidth
259 readonly property real distance: listView.continuousIndex - index
260 readonly property real distance: listView.continuousIndex - index
Components/DragHandle.qml−1
@@ -208,5 +208,4 @@ EdgeDragArea {
208
208
209 d.previousStatus = status;
209 d.previousStatus = status;
210 }
210 }
211−
212}
211}
Components/FilterGrid.qml+2−1
@@ -57,6 +57,8 @@ Item {
57 property alias delegate: iconTileGrid.delegate
57 property alias delegate: iconTileGrid.delegate
58 property alias cellWidth: iconTileGrid.cellWidth
58 property alias cellWidth: iconTileGrid.cellWidth
59 property alias cellHeight: iconTileGrid.cellHeight
59 property alias cellHeight: iconTileGrid.cellHeight
60+ property alias delegateCreationBegin: iconTileGrid.delegateCreationBegin
61+ property alias delegateCreationEnd: iconTileGrid.delegateCreationEnd
60 readonly property alias flicking: iconTileGrid.flicking
62 readonly property alias flicking: iconTileGrid.flicking
61 readonly property alias moving: iconTileGrid.moving
63 readonly property alias moving: iconTileGrid.moving
62 readonly property alias pressDelay: iconTileGrid.pressDelay
64 readonly property alias pressDelay: iconTileGrid.pressDelay
@@ -102,6 +104,5 @@ Item {
102 model: root.model
104 model: root.model
103 limit: (filter && !filterAnimation.running) ? collapsedRowCount * iconTileGrid.columns : -1
105 limit: (filter && !filterAnimation.running) ? collapsedRowCount * iconTileGrid.columns : -1
104 }
106 }
105−
106 }
107 }
107}
108}
Components/LazyImage.qml+24−11
@@ -27,8 +27,8 @@ Item {
27 // TODO convert into enums when available in QML
27 // TODO convert into enums when available in QML
28 property string scaleTo
28 property string scaleTo
29
29
30− property real initialWidth: units.gu(10)
30+ property real initialWidth: scaleTo == "width" || scaleTo == "fit" ? width : units.gu(10)
31− property real initialHeight: units.gu(10)
31+ property real initialHeight: scaleTo == "height" || scaleTo == "fit" ? height : units.gu(10)
32
32
33 property alias sourceSize: image.sourceSize
33 property alias sourceSize: image.sourceSize
34 property alias fillMode: image.fillMode
34 property alias fillMode: image.fillMode
@@ -52,7 +52,7 @@ Item {
52 id: placeholder
52 id: placeholder
53 objectName: "placeholder"
53 objectName: "placeholder"
54 color: "#22FFFFFF"
54 color: "#22FFFFFF"
55− anchors.fill: parent
55+ anchors.fill: shape
56 visible: opacity != 0
56 visible: opacity != 0
57
57
58 ActivityIndicator {
58 ActivityIndicator {
@@ -79,7 +79,10 @@ Item {
79 UbuntuShape {
79 UbuntuShape {
80 id: shape
80 id: shape
81 objectName: "shape"
81 objectName: "shape"
82+ height: root.initialHeight
83+ width: root.initialWidth
82− anchors.fill: parent
84+ anchors.centerIn: root.scaleTo == "fit" ? parent : undefined
85+
83 opacity: 0
86 opacity: 0
84 visible: opacity != 0
87 visible: opacity != 0
85
88
@@ -88,16 +91,19 @@ Item {
88 objectName: "image"
91 objectName: "image"
89
92
90 property url nextSource
93 property url nextSource
94+ property string format: image.implicitWidth > image.implicitHeight ? "landscape" : "portrait"
91
95
92− width: root.scaleTo == "height" ? implicitWidth * root.height / implicitHeight : implicitWidth
93− height: root.scaleTo == "width" ? implicitHeight * root.width / implicitWidth : implicitHeight
94− fillMode: Image.PreserveAspectCrop
96+ fillMode: Image.PreserveAspectFit
95 asynchronous: true
97 asynchronous: true
96 cache: false
98 cache: false
97 horizontalAlignment: Image.AlignHCenter
99 horizontalAlignment: Image.AlignHCenter
98 verticalAlignment: Image.AlignVCenter
100 verticalAlignment: Image.AlignVCenter
99− sourceSize.width: root.scaleTo == "width" ? root.width : 0
101+ sourceSize.width: root.scaleTo == "width" ? root.width
102+ : root.scaleTo == "fit" && root.width < root.height ? root.width
103+ : undefined
100− sourceSize.height: root.scaleTo == "height" ? root.height : 0
104+ sourceSize.height: root.scaleTo == "height" ? root.height
105+ : root.scale == "fit" && root.height < root.width ? root.height
106+ : undefined
101 }
107 }
102 }
108 }
103
109
@@ -117,9 +123,14 @@ Item {
117 State {
123 State {
118 name: "ready"
124 name: "ready"
119 when: image.status === Image.Ready && image.source != ""
125 when: image.status === Image.Ready && image.source != ""
120− PropertyChanges { target: root; implicitWidth: image.width; implicitHeight: image.height }
126+ PropertyChanges { target: root; implicitWidth: shape.width; implicitHeight: shape.height }
121− PropertyChanges { target: shape; opacity: 1 }
122 PropertyChanges { target: placeholder; opacity: 0 }
127 PropertyChanges { target: placeholder; opacity: 0 }
128+ PropertyChanges { target: shape; opacity: 1
129+ width: root.scaleTo == "width" || (root.scaleTo == "fit" && image.format == "landscape") ? root.width
130+ : root.scaleTo == "" ? image.implicitWidth : image.implicitWidth * height / image.implicitHeight
131+ height: root.scaleTo == "height" || (root.scaleTo == "fit" && image.format == "portrait") ? root.height
132+ : root.scaleTo == "" ? image.implicitHeight : image.implicitHeight * width / image.implicitWidth
133+ }
123 },
134 },
124 State {
135 State {
125 name: "error"
136 name: "error"
@@ -138,6 +149,7 @@ Item {
138 ParallelAnimation {
149 ParallelAnimation {
139 NumberAnimation { target: shape; property: "opacity"; easing.type: Easing.Linear }
150 NumberAnimation { target: shape; property: "opacity"; easing.type: Easing.Linear }
140 UbuntuNumberAnimation { target: root; properties: "implicitWidth,implicitHeight" }
151 UbuntuNumberAnimation { target: root; properties: "implicitWidth,implicitHeight" }
152+ UbuntuNumberAnimation { target: shape; properties: "width,height" }
141 NumberAnimation {
153 NumberAnimation {
142 targets: [placeholder, activity, errorImage]; property: "opacity";
154 targets: [placeholder, activity, errorImage]; property: "opacity";
143 easing.type: Easing.Linear; duration: UbuntuAnimation.SnapDuration
155 easing.type: Easing.Linear; duration: UbuntuAnimation.SnapDuration
@@ -157,6 +169,7 @@ Item {
157 easing.type: Easing.Linear; duration: UbuntuAnimation.SnapDuration
169 easing.type: Easing.Linear; duration: UbuntuAnimation.SnapDuration
158 }
170 }
159 UbuntuNumberAnimation { target: root; properties: "implicitWidth,implicitHeight" }
171 UbuntuNumberAnimation { target: root; properties: "implicitWidth,implicitHeight" }
172+ UbuntuNumberAnimation { target: shape; properties: "width,height" }
160 }
173 }
161 PropertyAction { target: shape; property: "visible" }
174 PropertyAction { target: shape; property: "visible" }
162 }
175 }
Components/ListItems/Header.qml+1−1
@@ -28,7 +28,7 @@ Item {
28
28
29 signal clicked(variant mouse)
29 signal clicked(variant mouse)
30
30
31− height: units.gu(4.5)
31+ height: units.gu(5)
32
32
33 Item {
33 Item {
34 anchors {
34 anchors {
Components/ResponsiveGridView.qml+2
@@ -39,6 +39,8 @@ Item {
39 readonly property alias flicking: gridView.flicking
39 readonly property alias flicking: gridView.flicking
40 readonly property alias moving: gridView.moving
40 readonly property alias moving: gridView.moving
41 readonly property alias pressDelay: gridView.pressDelay
41 readonly property alias pressDelay: gridView.pressDelay
42+ property alias delegateCreationBegin: gridView.delegateCreationBegin
43+ property alias delegateCreationEnd: gridView.delegateCreationEnd
42
44
43 function contentHeightForRows(rows) {
45 function contentHeightForRows(rows) {
44 return rows * cellHeight + verticalSpacing
46 return rows * cellHeight + verticalSpacing
Components/Stage.qml+5
@@ -84,6 +84,11 @@ Showable {
84 }
84 }
85 }
85 }
86
86
87+ Connections {
88+ target: applicationManager
89+ onFocusRequested: activateApplication(appId)
90+ }
91+
87 /* Keep a reference to the focused application so that we can safely
92 /* Keep a reference to the focused application so that we can safely
88 unfocus it when the stage is not fully shown and refocus it when the stage
93 unfocus it when the stage is not fully shown and refocus it when the stage
89 is fully shown again.
94 is fully shown again.
Components/Tile.qml+6−63
@@ -18,70 +18,13 @@ import QtQuick 2.0
18import Ubuntu.Components 0.1
18import Ubuntu.Components 0.1
19
19
20AbstractButton {
20AbstractButton {
21− id: root
22− property alias source: image.source
21+ property url source
23− property alias fillMode: image.fillMode
22+ property int fillMode: Image.PreserveAspectCrop
24− property alias horizontalAlignment: image.horizontalAlignment
23+ property int horizontalAlignment: Text.AlignHCenter
25− property alias verticalAlignment: image.verticalAlignment
24+ property string text
26− property alias text: label.text
27 property int imageWidth
25 property int imageWidth
28 property int imageHeight
26 property int imageHeight
27+ property int maximumLineCount: 1
29
28
30− UbuntuShape {
29+ style: TileStyle {}
31− id: icon
32− anchors {
33− top: parent.top
34− horizontalCenter: parent.horizontalCenter
35− }
36− radius: "medium"
37− width: imageWidth
38− height: imageHeight
39− image: Image {
40− id: image
41− objectName: "image"
42− sourceSize { width: icon.width; height: icon.height }
43− asynchronous: true
44− cache: false
45− }
46− }
47−
48− UbuntuShape {
49− id: borderPressed
50− objectName: "borderPressed"
51−
52− anchors.fill: icon
53− radius: "medium"
54− borderSource: "radius_pressed.sci"
55− opacity: root.pressed ? 1.0 : 0.0
56− Behavior on opacity { NumberAnimation { duration: 200; easing.type: Easing.OutQuint } }
57− }
58−
59− Item {
60− anchors {
61− left: parent.left
62− right: parent.right
63− top: icon.bottom
64− }
65− height: units.gu(2)
66−
67− Label {
68− id: label
69− objectName: "label"
70− anchors {
71− baseline: parent.bottom
72− left: parent.left
73− right: parent.right
74− leftMargin: units.gu(1)
75− rightMargin: units.gu(1)
76− }
77−
78− color: Theme.palette.selected.backgroundText
79− opacity: 0.9
80− style: Text.Raised
81− styleColor: "black"
82− fontSize: "small"
83− elide: Text.ElideMiddle
84− horizontalAlignment: Text.AlignHCenter
85− }
86− }
87}
30}
Components/TileStyle.qmlnew file+81
@@ -0,0 +1,81 @@
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+Item {
21+ id: tile
22+
23+ anchors.fill: parent
24+
25+ UbuntuShape {
26+ id: icon
27+ anchors {
28+ top: parent.top
29+ horizontalCenter: parent.horizontalCenter
30+ }
31+ radius: "medium"
32+ width: styledItem.imageWidth
33+ height: styledItem.imageHeight
34+ image: Image {
35+ id: image
36+ objectName: "image"
37+ sourceSize { width: icon.width; height: icon.height }
38+ asynchronous: true
39+ cache: false
40+ source: styledItem.source
41+ fillMode: styledItem.fillMode
42+ horizontalAlignment: Image.AlignHCenter
43+ verticalAlignment: Image.AlignVCenter
44+ }
45+ }
46+
47+ UbuntuShape {
48+ id: borderPressed
49+ objectName: "borderPressed"
50+
51+ anchors.fill: icon
52+ radius: "medium"
53+ borderSource: "radius_pressed.sci"
54+ opacity: styledItem.pressed ? 1.0 : 0.0
55+ Behavior on opacity { NumberAnimation { duration: 200; easing.type: Easing.OutQuint } }
56+ }
57+
58+ Label {
59+ id: label
60+ objectName: "label"
61+ anchors {
62+ baseline: icon.bottom
63+ baselineOffset: units.gu(2)
64+ left: parent.left
65+ right: parent.right
66+ leftMargin: units.gu(1)
67+ rightMargin: units.gu(1)
68+ }
69+
70+ color: Theme.palette.selected.backgroundText
71+ opacity: 0.9
72+ style: Text.Raised
73+ styleColor: "black"
74+ fontSize: "small"
75+ elide: Text.ElideMiddle
76+ horizontalAlignment: styledItem.horizontalAlignment
77+ text: styledItem.text
78+ wrapMode: Text.Wrap
79+ maximumLineCount: styledItem.maximumLineCount
80+ }
81+}
Components/VolumeControl.qml+1−1
@@ -28,7 +28,7 @@ Item {
28 busName: "com.canonical.indicator.sound"
28 busName: "com.canonical.indicator.sound"
29 objectPath: "/com/canonical/indicator/sound"
29 objectPath: "/com/canonical/indicator/sound"
30
30
31− property variant actionObject: action("scroll")
31+ property variant actionObject: action("volume")
32 }
32 }
33
33
34 function volumeUp() {
34 function volumeUp() {
Dash/Apps/AppPreview.qml+70−123
@@ -16,153 +16,101 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import Ubuntu.Components 0.1
18import Ubuntu.Components 0.1
19−import Ubuntu.Components.ListItems 0.1 as ListItem
19+import Ubuntu.Components.ListItems 0.1 as ListItems
20−import Ubuntu.DownloadDaemonListener 0.1
21import ".."
20import ".."
21+import "../Generic"
22+import "../Previews"
22import "../../Components"
23import "../../Components"
23
24
24−DashPreview {
25+GenericPreview {
25 id: root
26 id: root
26
27
27 signal sendUserReview(string review)
28 signal sendUserReview(string review)
28
29
29− title: root.previewData.title
30+ previewImages: previewImagesComponent
31+ description: descriptionComponent
32+ header: headerComponent
30
33
31− header: ListView {
34+ // TODO: Ratings are not yet complete... enable this once they work
32− spacing: units.gu(1)
35+ //ratings: ratingsComponent
33− orientation: ListView.Horizontal
34− height: units.gu(22)
35− anchors {
36− left: parent.left
37− right: parent.right
38− margins: units.gu(1)
39− }
40− model: previewData.infoMap["more-screenshots"] != null ? previewData.infoMap["more-screenshots"].value : [previewData.image]
41
36
42− delegate: UbuntuShape {
37+ Component {
43− id: shape
38+ id: previewImagesComponent
39+ ListView {
40+ id: previewImageListView
41+ spacing: units.gu(1)
42+ orientation: ListView.Horizontal
43+ height: units.gu(22)
44+ model: previewData.infoMap["more-screenshots"] != null ? previewData.infoMap["more-screenshots"].value : [previewData.image]
45+ cacheBuffer: width * 3
46+
47+ LazyImage {
48+ objectName: "placeholderScreenshot"
44− anchors {
49+ anchors {
45− top: parent.top
50+ top: parent.top
46− bottom: parent.bottom
51+ bottom: parent.bottom
52+ }
53+ scaleTo: "height"
54+ source: "broken_image"
55+ initialWidth: units.gu(13)
56+ visible: previewImageListView.count == 0
47 }
57 }
48− width: units.gu(12)
58+
49− radius: "medium"
59+ delegate: LazyImage {
50− borderSource: ""
60+ id: shape
51− image: Image {
61+ anchors {
52− asynchronous: true
62+ top: parent.top
53− sourceSize { width: shape.width; height: shape.height }
63+ bottom: parent.bottom
64+ }
54 source: modelData ? modelData : ""
65 source: modelData ? modelData : ""
55− fillMode: Image.PreserveAspectCrop
66+ scaleTo: "height"
67+ initialWidth: units.gu(13)
56 }
68 }
57 }
69 }
58 }
70 }
59
71
60 Component {
72 Component {
61− id: buttonsComponent
73+ id: headerComponent
62−
74+ Header {
63− GridView {
64− id: buttonsGrid
65− objectName: "gridButtons"
75+ objectName: "previewHeader"
66−
76+ title: previewData.title
67− property int numOfRows: (count + 1) / 2
77+ icon: previewData.appIcon
68− property int spacing: units.gu(1)
78+ subtitle: root.previewData.infoMap["publisher"] ? root.previewData.infoMap["publisher"].value : ""
69− height: Math.max(units.gu(5), units.gu(5)*numOfRows + spacing*(numOfRows - 1))
79+ rating: Math.round(root.previewData.rating * 10)
70−
80+ reviews: root.previewData.numRatings
71− interactive: false
81+ rated: root.previewData.infoMap["rated"] ? root.previewData.infoMap["rated"].value : 0
72− cellWidth: Math.max(units.gu(9), width / 2)
73− cellHeight: buttonHeight + spacing
74− property int buttonWidth: count > 1 ? Math.max(0, width / 2 - spacing) : width
75− property int buttonHeight: units.gu(5)
76−
77− delegate: Button {
78− width: Math.max(units.gu(4), buttonsGrid.buttonWidth)
79− height: buttonsGrid.buttonHeight
80− color: Theme.palette.selected.foreground
81− text: modelData.displayName
82− iconSource: modelData.iconHint
83− iconPosition: "right"
84− onClicked: root.previewData.execute(modelData.id, { })
85− }
86 }
82 }
87 }
83 }
88
84
89 Component {
85 Component {
90− id: progressComponent
86+ id: descriptionComponent
91−
87+ Column {
92− ProgressBar {
93− id: progressBar
94− objectName: "progressBar"
95− value: 0
96− maximumValue: 100
97− height: units.gu(5)
88+ spacing: units.gu(1)
98−
99− property var model
100−
101− DownloadTracker {
102− service: "com.canonical.applications.Downloader"
103− dbusPath: root.previewData.infoMap["progressbar_source"] ? root.previewData.infoMap["progressbar_source"].value : ""
104−
105− onProgress: {
106− var percentage = parseInt(received * 100 / total);
107− progressBar.value = percentage;
108− }
109−
110− onFinished: {
111− root.previewData.execute(progressBar.model[0].id, { })
112− }
113
89
114− onError: {
90+ Label {
115− root.previewData.execute(progressBar.model[1].id, { "error": error });
91+ anchors { left: parent.left; right: parent.right }
116− }
92+ text: root.previewData.description
93+ fontSize: "medium"
94+ color: Theme.palette.selected.backgroundText
95+ opacity: .6
96+ wrapMode: Text.WordWrap
97+ style: Text.Raised
98+ styleColor: "black"
117 }
99 }
118−
119− }
120− }
121−
122− buttons: Loader {
123− anchors {
124− left: parent.left
125− right: parent.right
126− }
127−
128− sourceComponent: root.previewData.infoMap["show_progressbar"] ? progressComponent : buttonsComponent
129−
130− onLoaded: {
131− item.model = root.previewData.actions;
132 }
100 }
133 }
101 }
134
102
135− body: Column {
103+ Component {
136− spacing: units.gu(1)
104+ id: ratingsComponent
137−
138− AppInfo {
139− objectName: "appInfo"
140− anchors { left: parent.left; right: parent.right }
141−
142− appName: root.previewData.title
143− icon: root.previewData.appIcon
144− rating: Math.round(root.previewData.rating * 10)
145− reviews: root.previewData.numRatings
146− rated: root.previewData.infoMap["rated"] ? root.previewData.infoMap["rated"].value : 0
147− }
148−
149− Label {
150− anchors { left: parent.left; right: parent.right }
151− text: root.previewData.description
152− fontSize: "medium"
153− color: Theme.palette.selected.backgroundText
154− opacity: .6
155− wrapMode: Text.WordWrap
156− style: Text.Raised
157− styleColor: "black"
158− }
159−
160 Column {
105 Column {
106+ id: columnReviewRating
107+ objectName: "columnReviewRating"
161 visible: root.previewData.rating >= 0
108 visible: root.previewData.rating >= 0
162− anchors { left: parent.left; right: parent.right }
163− spacing: parent.spacing
164
109
110+ spacing: units.gu(1)
111+ height: childrenRect.height
112+
165− ListItem.ThinDivider { }
113+ ListItems.ThinDivider { }
166
114
167 Item {
115 Item {
168 anchors { left: parent.left; right: parent.right }
116 anchors { left: parent.left; right: parent.right }
@@ -188,13 +136,12 @@ DashPreview {
188 }
136 }
189 }
137 }
190
138
191− ListItem.ThinDivider { }
139+ ListItems.ThinDivider { }
192
140
193− AppReviews {
141+ Reviews {
194 id: appReviews
142 id: appReviews
195 objectName: "appReviews"
143 objectName: "appReviews"
196− // TODO: This should make this visible when the feature for reviews/comments is complete.
144+
197− visible: false
198 anchors { left: parent.left; right: parent.right }
145 anchors { left: parent.left; right: parent.right }
199
146
200 model: root.previewData.infoMap["comments"] ? root.previewData.infoMap["comments"].value : undefined
147 model: root.previewData.infoMap["comments"] ? root.previewData.infoMap["comments"].value : undefined
Dash/Apps/AppsAvailableForDownloadModel.qmldeleted−81
@@ -1,81 +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"
19−
20−ListModel {
21− ListElement {
22− uri: "application://evernote.desktop"
23− icon: "../../graphics/applicationIcons/evernote.png"
24− category: 0
25− mimetype: "application/x-desktop"
26− title: "Evernote"
27− comment: ""
28− dndUri: "file:///usr/share/applications/evernote.desktop"
29− metadata: ""
30− }
31− ListElement {
32− uri: "application://map.desktop"
33− icon: "../../graphics/applicationIcons/map.png"
34− category: 0
35− mimetype: "application/x-desktop"
36− title: "Map"
37− comment: ""
38− dndUri: "file:///usr/share/applications/map.desktop"
39− metadata: ""
40− }
41− ListElement {
42− uri: "application://pinterest.desktop"
43− icon: "../../graphics/applicationIcons/pinterest.png"
44− category: 0
45− mimetype: "application/x-desktop"
46− title: "Pinterest"
47− comment: ""
48− dndUri: "file:///usr/share/applications/pinterest.desktop"
49− metadata: ""
50− }
51− ListElement {
52− uri: "application://soundcloud.desktop"
53− icon: "../../graphics/applicationIcons/soundcloud.png"
54− category: 0
55− mimetype: "application/x-desktop"
56− title: "Soundcloud"
57− comment: ""
58− dndUri: "file:///usr/share/applications/soundcloud.desktop"
59− metadata: ""
60− }
61− ListElement {
62− uri: "application://wikipedia.desktop"
63− icon: "../../graphics/applicationIcons/wikipedia.png"
64− category: 0
65− mimetype: "application/x-desktop"
66− title: "Wikipedia"
67− comment: ""
68− dndUri: "file:///usr/share/applications/wikipedia.desktop"
69− metadata: ""
70− }
71− ListElement {
72− uri: "application://youtube.desktop"
73− icon: "../../graphics/applicationIcons/youtube.png"
74− category: 0
75− mimetype: "application/x-desktop"
76− title: "Youtube"
77− comment: ""
78− dndUri: "file:///usr/share/applications/youtube.desktop"
79− metadata: ""
80− }
81−}
Dash/Apps/DashPluginFilterGrid.qmlnew 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
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+import "../Generic"
21+
22+GenericFilterGrid {
23+ id: filtergrid
24+
25+ delegate: Tile {
26+ id: tile
27+ objectName: "delegate" + index
28+ width: filtergrid.cellWidth
29+ height: filtergrid.cellHeight
30+ text: model.title
31+ imageWidth: filtergrid.iconWidth
32+ imageHeight: filtergrid.iconHeight
33+ source: model.icon
34+
35+ style: FlatTileStyle {
36+ disabled: model.rendererHints['scope_disabled'] === 1;
37+ }
38+
39+ onClicked: {
40+ var data = { model: model }
41+ filtergrid.clicked(index, data, tile.y)
42+ }
43+
44+ onPressAndHold: {
45+ var data = { model: model }
46+ filtergrid.pressAndHold(index, data, tile.y)
47+ }
48+ }
49+}
Dash/Apps/FrequentlyUsedAppsModel.qml+20−20
@@ -18,93 +18,93 @@ 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: "application:///usr/share/applications/facebook-webapp.desktop"
71+ uri: "appid://com.ubuntu.developer.webapps.webapp-facebook/webapp-facebook/current-user-version"
72 icon: "../../graphics/applicationIcons/facebook.png"
72 icon: "../../graphics/applicationIcons/facebook.png"
73 category: 0
73 category: 0
74 mimetype: "application/x-desktop"
74 mimetype: "application/x-desktop"
75 title: "Facebook"
75 title: "Facebook"
76 comment: ""
76 comment: ""
77− dndUri: "file:///usr/share/applications/facebook-webapp.desktop"
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: "application:///usr/share/applications/gmail-webapp.desktop"
91+ uri: "appid://com.ubuntu.developer.webapps.webapp-gmail/webapp-gmail/current-user-version"
92 icon: "../../graphics/applicationIcons/gmail.png"
92 icon: "../../graphics/applicationIcons/gmail.png"
93 category: 0
93 category: 0
94 mimetype: "application/x-desktop"
94 mimetype: "application/x-desktop"
95 title: "GMail"
95 title: "GMail"
96 comment: ""
96 comment: ""
97− dndUri: "file:///usr/share/applications/gmail-webapp.desktop"
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+9−5
@@ -39,9 +39,7 @@ AbstractButton {
39 property bool terminationModeEnabled: false
39 property bool terminationModeEnabled: false
40
40
41 onClicked: {
41 onClicked: {
42− if (terminationModeEnabled)
42+ if (!terminationModeEnabled)
43− requestedApplicationTermination(application)
44− else
45 requestedApplicationActivation(application)
43 requestedApplicationActivation(application)
46 }
44 }
47
45
@@ -123,9 +121,10 @@ AbstractButton {
123 }
121 }
124
122
125 CloseIcon {
123 CloseIcon {
124+ objectName: "closeIcon " + model.name
126 anchors {
125 anchors {
127− right: shapedApplicationImage.right
126+ left: shapedApplicationImage.left
128− rightMargin: -units.gu(1)
127+ leftMargin: -units.gu(1)
129 top: parent.top
128 top: parent.top
130 topMargin: -units.gu(1)
129 topMargin: -units.gu(1)
131 }
130 }
@@ -133,5 +132,10 @@ AbstractButton {
133 width: units.gu(6)
132 width: units.gu(6)
134 id: closeIcon
133 id: closeIcon
135 enabled: root.terminationModeEnabled
134 enabled: root.terminationModeEnabled
135+
136+ MouseArea {
137+ anchors { fill: parent; margins: -units.gu(1) }
138+ onClicked: requestedApplicationTermination(application)
139+ }
136 }
140 }
137}
141}
Dash/Dash.qml+3
@@ -22,6 +22,9 @@ import "../Components"
22
22
23Showable {
23Showable {
24 id: dash
24 id: dash
25+ objectName: "dash"
26+
27+ visible: shown
25
28
26 property alias contentProgress: dashContent.contentProgress
29 property alias contentProgress: dashContent.contentProgress
27 property string showScopeOnLoaded: "home.scope"
30 property string showScopeOnLoaded: "home.scope"
Dash/DashContent.qml+6−6
@@ -83,7 +83,7 @@ Item {
83 id: dashContentList
83 id: dashContentList
84 objectName: "dashContentList"
84 objectName: "dashContentList"
85
85
86− interactive: dashContent.scopes.loaded
86+ interactive: dashContent.scopes.loaded && !currentItem.previewShown && !currentItem.moving
87
87
88 anchors.fill: parent
88 anchors.fill: parent
89 model: dashContent.model
89 model: dashContent.model
@@ -116,6 +116,9 @@ Item {
116 source: scopeMapper.map(scope.id)
116 source: scopeMapper.map(scope.id)
117 objectName: scope.id + " loader"
117 objectName: scope.id + " loader"
118
118
119+ readonly property bool previewShown: item.previewShown
120+ readonly property bool moving: item.moving
121+
119 // these are needed for autopilot tests
122 // these are needed for autopilot tests
120 readonly property string scopeId: scope.id
123 readonly property string scopeId: scope.id
121 readonly property bool isCurrent: ListView.isCurrentItem
124 readonly property bool isCurrent: ListView.isCurrentItem
@@ -123,7 +126,7 @@ Item {
123
126
124 onLoaded: {
127 onLoaded: {
125 item.scope = Qt.binding(function() { return scope })
128 item.scope = Qt.binding(function() { return scope })
126− item.isCurrent = Qt.binding(function() { return ListView.isCurrentItem })
129+ item.isCurrent = Qt.binding(function() { return visible && ListView.isCurrentItem })
127 item.searchHistory = Qt.binding(function() { return shell.searchHistory })
130 item.searchHistory = Qt.binding(function() { return shell.searchHistory })
128 dashContentList.movementStarted.connect(item.movementStarted)
131 dashContentList.movementStarted.connect(item.movementStarted)
129 dashContent.positionedAtBeginning.connect(item.positionedAtBeginning)
132 dashContent.positionedAtBeginning.connect(item.positionedAtBeginning)
@@ -135,10 +138,7 @@ Item {
135 onEndReached: contentEndReached()
138 onEndReached: contentEndReached()
136 onPreviewShownChanged: {
139 onPreviewShownChanged: {
137 if (item.previewShown) {
140 if (item.previewShown) {
138− previewShown()
141+ dashContent.previewShown()
139− dashContentList.interactive = false
140− } else {
141− dashContentList.interactive = true
142 }
142 }
143 }
143 }
144 }
144 }
Dash/DashMusic.qmldeleted−96
@@ -1,96 +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−import "../Components/ListItems" as ListItems
21−import "Music"
22−
23−ScopeView {
24− id: scopeView
25−
26− property var categoryNames: [
27− i18n.tr("Featured"),
28− i18n.tr("Recent"),
29− i18n.tr("New Releases"),
30− i18n.tr("Top Charting")
31− ]
32−
33− onIsCurrentChanged: {
34− pageHeader.resetSearch();
35− }
36−
37− onMovementStarted: categoryView.showHeader()
38−
39− Binding {
40− target: scopeView.scope
41− property: "searchQuery"
42− value: pageHeader.searchQuery
43− }
44−
45− Connections {
46− target: panel
47− onSearchClicked: if (isCurrent) {
48− pageHeader.triggerSearch()
49− categoryView.showHeader()
50− }
51− }
52−
53− function getRenderer(categoryId) {
54− switch (categoryId) {
55− case "featured": return "Music/MusicCarousel.qml"
56− default: return "Music/MusicFilterGrid.qml"
57− }
58− }
59−
60− ScopeListView {
61− id: categoryView
62− anchors.fill: parent
63− model: scopeView.categories
64−
65− onAtYEndChanged: if (atYEnd) endReached()
66− onMovingChanged: if (moving && atYEnd) endReached()
67−
68− delegate: ListItems.Base {
69− id: base
70− highlightWhenPressed: false
71−
72− property string categoryId: model.categoryId
73−
74− Loader {
75− anchors { top: parent.top; left: parent.left; right: parent.right }
76− source: scopeView.getRenderer(base.categoryId)
77− onLoaded: {
78− item.model = results
79− }
80− }
81− }
82−
83− sectionProperty: "name"
84− sectionDelegate: ListItems.Header {
85− width: categoryView.width
86− text: i18n.tr(section)
87− }
88− pageHeader: PageHeader {
89− id: pageHeader
90− width: categoryView.width
91− text: i18n.tr("Music")
92− searchEntryEnabled: true
93− searchHistory: scopeView.searchHistory
94− }
95− }
96−}
Dash/DashPreview.qml+99−93
@@ -22,20 +22,20 @@ Rectangle {
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 string title: ""
27 property real previewWidthRatio: 0.5
27 property real previewWidthRatio: 0.5
28
28
29+ property Component previewImages
29 property Component header
30 property Component header
30− property Component buttons
31+ property Component actions
31− property Component body
32+ property Component description
33+ property Component ratings
32
34
33− readonly property bool narrowMode: width <= height
35+ readonly property bool narrowMode: width <= height * 1.5
36+ readonly property int columnWidth: narrowMode ? contentRow.width : (contentRow.width / 3) - contentRow.spacing
34 readonly property int contentSpacing: units.gu(3)
37 readonly property int contentSpacing: units.gu(3)
35
38
36− signal close()
37− signal previewImageClicked()
38−
39 color: Qt.rgba(0, 0, 0, .3)
39 color: Qt.rgba(0, 0, 0, .3)
40 clip: true
40 clip: true
41
41
@@ -61,87 +61,32 @@ Rectangle {
61 anchors.fill: parent
61 anchors.fill: parent
62 }
62 }
63
63
64− Item {
65− id: headerRow
66− height: units.gu(4)
67− anchors {
68− top: parent.top
69− left: parent.left
70− right: parent.right
71− margins: root.contentSpacing
72− }
73−
74− MouseArea {
75− anchors {
76− fill: parent
77− leftMargin: -root.contentSpacing
78− rightMargin: -root.contentSpacing
79− topMargin: -root.contentSpacing
80− }
81−
82− onClicked: root.close();
83− }
84−
85− Item {
86− id: labelItem
87− anchors {
88− fill: parent
89− rightMargin: closePreviewImage.width + spacing
90− }
91−
92− property int spacing: units.gu(2)
93−
94− Label {
95− id: title
96− objectName: "titleLabel"
97− anchors {
98− left: parent.left
99− right: parent.right
100− }
101−
102− elide: Text.ElideRight
103− fontSize: "x-large"
104− font.weight: Font.Light
105− color: Theme.palette.selected.backgroundText
106− opacity: 0.9
107− text: root.title
108− style: Text.Raised
109− styleColor: "black"
110− }
111− Image {
112− id: closePreviewImage
113− source: "graphics/tablet/icon_close_preview.png"
114− width: units.gu(4)
115− height: units.gu(1.5)
116− anchors {
117− bottom: title.bottom
118− bottomMargin: units.dp(7)
119− left: parent.left
120− leftMargin: title.paintedWidth + labelItem.spacing
121− }
122− }
123− }
124− }
125
64
126 Row {
65 Row {
127 id: contentRow
66 id: contentRow
128 anchors {
67 anchors {
129 left: parent.left
68 left: parent.left
69+ top: parent.top
130 right: parent.right
70 right: parent.right
131− top: headerRow.bottom
132 bottom: parent.bottom
71 bottom: parent.bottom
72+ topMargin: root.contentSpacing
73+ leftMargin: root.contentSpacing
133− margins: root.contentSpacing
74+ rightMargin: root.contentSpacing
134 }
75 }
76+ height: childrenRect.height
135
77
136 spacing: units.gu(2)
78 spacing: units.gu(2)
137
79
80+
138 Flickable {
81 Flickable {
139 id: leftFlickable
82 id: leftFlickable
140 objectName: "leftFlickable"
83 objectName: "leftFlickable"
84+ anchors {
141− anchors.top: parent.top
85+ top: parent.top
142− anchors.bottom: parent.bottom
86+ bottom: parent.bottom
143− width: root.narrowMode ? contentRow.width : contentRow.width * root.previewWidthRatio
87+ }
88+ width: root.columnWidth
144− contentHeight: leftColumn.height
89+ contentHeight: leftColumn.height + root.contentSpacing
145 anchors.bottomMargin: root.keyboardSize
90 anchors.bottomMargin: root.keyboardSize
146 clip: true
91 clip: true
147
92
@@ -150,33 +95,44 @@ Rectangle {
150 Column {
95 Column {
151 id: leftColumn
96 id: leftColumn
152 objectName: "leftColumn"
97 objectName: "leftColumn"
98+ height: childrenRect.height
99+ spacing: root.contentSpacing
153 anchors {
100 anchors {
154 left: parent.left
101 left: parent.left
155 right: parent.right
102 right: parent.right
156 }
103 }
157− height: childrenRect.height
104+ }
158− spacing: units.gu(1)
105+ }
159
106
160− Loader {
107+ Flickable {
161− id: headerLoader
108+ id: centerFlickable
162− anchors.left: parent.left
109+ anchors {
163− anchors.right: parent.right
110+ top: parent.top
164− sourceComponent: root.header
111+ bottom: parent.bottom
165− }
112+ }
166− Loader {
113+ width: root.columnWidth
167− id: buttonLoader
114+ contentHeight: centerColumn.height
115+ clip: true
116+
117+ Column {
118+ id: centerColumn
119+ objectName: "centerColumn"
120+ height: childrenRect.height
121+ anchors {
168− anchors.left: parent.left
122+ left: parent.left
169− anchors.right: parent.right
123+ right: parent.right
170− sourceComponent: root.buttons
171 }
124 }
125+ spacing: root.contentSpacing
172 }
126 }
173 }
127 }
174
128
175 Flickable {
129 Flickable {
176 id: rightFlickable
130 id: rightFlickable
131+ anchors {
177− anchors.top: parent.top
132+ top: parent.top
178− anchors.bottom: parent.bottom
133+ bottom: parent.bottom
179− width: narrowMode ? 0 : (contentRow.width - leftColumn.width - contentRow.spacing)
134+ }
135+ width: root.columnWidth
180 contentHeight: rightColumn.height
136 contentHeight: rightColumn.height
181 clip: true
137 clip: true
182
138
@@ -193,9 +149,59 @@ Rectangle {
193 }
149 }
194
150
195 Loader {
151 Loader {
152+ id: previewImageLoader
153+ parent: leftColumn
154+ sourceComponent: root.previewImages
155+ anchors {
156+ left: parent.left
157+ right: parent.right
158+ }
159+ }
160+
161+ Loader {
162+ id: ratingsLoader
196 parent: root.narrowMode ? leftColumn : rightColumn
163 parent: root.narrowMode ? leftColumn : rightColumn
164+ anchors {
165+ left: parent.left
166+ right: parent.right
167+ }
168+ sourceComponent: root.ratings
169+ }
170+
171+ Loader {
172+ id: descriptionLoader
173+ parent: root.narrowMode ? leftColumn : centerColumn
174+ anchors {
175+ left: parent.left
176+ right: parent.right
177+ }
178+ sourceComponent: root.description
179+ }
180+
181+ Loader {
182+ id: actionsLoader
183+ parent: root.narrowMode ? leftColumn : centerColumn
184+ anchors {
197− anchors.left: parent.left
185+ left: parent.left
186+ right: parent.right
187+ }
188+ sourceComponent: root.actions
189+ }
190+
191+ Loader {
192+ id: headerLoader
193+ parent: root.narrowMode ? leftColumn : centerColumn
194+ anchors {
195+ left: parent.left
198− anchors.right: parent.right
196+ right: parent.right
197+ }
199− sourceComponent: root.body
198+ sourceComponent: root.header
199+ }
200+
201+ MouseArea {
202+ id: waitingForActionMouseArea
203+ objectName: "waitingForActionMouseArea"
204+ anchors.fill: parent
205+ enabled: false
200 }
206 }
201}
207}
Dash/DashVideos.qmldeleted−201
@@ -1,201 +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−import "../Components/ListItems" as ListItems
21−import "Video"
22−
23−ScopeView {
24− id: scopeView
25− property alias previewShown: previewLoader.onScreen
26−
27− property var categoryNames: [
28− i18n.tr("Featured"),
29− i18n.tr("Recent"),
30− i18n.tr("New Releases"),
31− i18n.tr("Popular Online")
32− ]
33−
34− onIsCurrentChanged: {
35− pageHeader.resetSearch();
36− }
37−
38− onMovementStarted: categoryView.showHeader()
39−
40− Binding {
41− target: scopeView.scope
42− property: "searchQuery"
43− value: pageHeader.searchQuery
44− }
45−
46− Connections {
47− target: panel
48− onSearchClicked: if (isCurrent) {
49− pageHeader.triggerSearch()
50− categoryView.showHeader()
51− }
52− }
53−
54− function getRenderer(categoryId) {
55− switch (categoryId) {
56− case "featured": return "Video/VideosCarousel.qml"
57− default: return "Video/VideosFilterGrid.qml"
58− }
59− }
60−
61− OpenEffect {
62− id: effect
63− anchors {
64− fill: parent
65− bottomMargin: -bottomOverflow
66− }
67− sourceItem: categoryView
68−
69− enabled: gap > 0.0
70−
71− topGapPx: (1 - gap) * positionPx
72− topOpacity: Math.max(0, (1 - gap * 1.2))
73− bottomGapPx: positionPx + gap * (targetBottomGapPx - positionPx)
74− bottomOverflow: units.gu(6)
75− bottomOpacity: 1 - (gap * 0.8)
76−
77− property int targetBottomGapPx: height - units.gu(8) - bottomOverflow
78− property real gap: previewLoader.open ? 1.0 : 0.0
79−
80− Behavior on gap {
81− NumberAnimation {
82− duration: 200
83− easing.type: Easing.InOutQuad
84− onRunningChanged: {
85− if (!previewLoader.open && !running) {
86− previewLoader.onScreen = false;
87− }
88− }
89− }
90− }
91− }
92−
93− ScopeListView {
94− id: categoryView
95− anchors.fill: parent
96− model: scopeView.categories
97− forceNoClip: previewLoader.onScreen
98−
99− onAtYEndChanged: if (atYEnd) endReached()
100− onMovingChanged: if (moving && atYEnd) endReached()
101−
102− delegate: ListItems.Base {
103− id: base
104− highlightWhenPressed: false
105− property string categoryId: model.categoryId
106−
107− Loader {
108− id: loader
109− anchors { top: parent.top; left: parent.left; right: parent.right }
110− source: scopeView.getRenderer(base.categoryId)
111− onLoaded: {
112− item.model = results
113− }
114−
115− Connections {
116− target: loader.item
117− onClicked: {
118− var dataItem;
119− // VideosCarousel and VideosFilterGrid have different
120− // clicked signals, accomodate for that
121− if (categoryId == "featured") {
122− var fileUri = delegateItem.model.uri.replace(/^[^:]+:/, "")
123− dataItem = {fileUri: fileUri, nfoUri: delegateItem.model.comment}
124− } else {
125− dataItem = data;
126− }
127− if (dataItem.nfoUri != "") {
128− previewLoader.videoData = dataItem;
129− previewLoader.open = true;
130− effect.positionPx = mapToItem(categoryView, 0, itemY).y;
131− }
132− }
133− }
134− }
135− }
136−
137− sectionProperty: "name"
138− sectionDelegate: ListItems.Header {
139− width: categoryView.width
140− text: i18n.tr(section)
141− }
142−
143− pageHeader: PageHeader {
144− id: pageHeader
145− width: categoryView.width
146− text: i18n.tr("Videos")
147− searchEntryEnabled: true
148− searchHistory: scopeView.searchHistory
149− }
150− }
151−
152− Loader {
153− id: previewLoader
154− height: effect.bottomGapPx - effect.topGapPx
155− anchors {
156− top: parent.top
157− topMargin: effect.topGapPx
158− left: parent.left
159− right: parent.right
160− }
161− sourceComponent: onScreen ? previewComponent : undefined
162−
163− property bool open: false
164− property bool onScreen: false
165− property var videoData
166−
167−
168− onOpenChanged: {
169− if (open) {
170− onScreen = true;
171− }
172− }
173−
174− onLoaded: {
175− item.item = videoData;
176− }
177− }
178−
179− Component {
180− id: previewComponent
181−
182− VideoPreview {
183− id: preview
184− anchors.fill: parent
185− onClose: open = false;
186− }
187− }
188−
189− // TODO: Move as InverseMouseArea to DashPreview
190− MouseArea {
191− enabled: previewLoader.onScreen
192− anchors {
193− fill: parent
194− topMargin: effect.bottomGapPx
195− }
196− onClicked: {
197− previewLoader.open = false;
198− }
199− }
200−
201−}
Dash/Generic/FlatTileStyle.qmlnew file+79
@@ -0,0 +1,79 @@
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+Item {
21+ id: tile
22+
23+ property bool disabled: false
24+
25+ anchors.fill: parent
26+
27+ Image {
28+ id: icon
29+ objectName: "image"
30+ width: styledItem.imageWidth
31+ height: styledItem.imageHeight
32+
33+ anchors.horizontalCenter: parent.horizontalCenter
34+
35+ sourceSize { width: width; height: height }
36+ asynchronous: true
37+ cache: false
38+ source: styledItem.source
39+ fillMode: styledItem.fillMode
40+ opacity: tile.disabled ? 0.3 : 1.0
41+ horizontalAlignment: Image.AlignHCenter
42+ verticalAlignment: Image.AlignVCenter
43+ }
44+
45+ UbuntuShape {
46+ id: borderPressed
47+ objectName: "borderPressed"
48+
49+ anchors.fill: icon
50+ radius: "medium"
51+ borderSource: "radius_pressed.sci"
52+ opacity: styledItem.pressed ? 1.0 : 0.0
53+ Behavior on opacity { NumberAnimation { duration: 200; easing.type: Easing.OutQuint } }
54+ }
55+
56+ Label {
57+ id: label
58+ objectName: "label"
59+ anchors {
60+ baseline: icon.bottom
61+ baselineOffset: units.gu(2)
62+ left: parent.left
63+ right: parent.right
64+ leftMargin: units.gu(1)
65+ rightMargin: units.gu(1)
66+ }
67+
68+ color: Theme.palette.selected.backgroundText
69+ opacity: 0.9
70+ style: Text.Raised
71+ styleColor: "black"
72+ fontSize: "small"
73+ elide: Text.ElideMiddle
74+ horizontalAlignment: styledItem.horizontalAlignment
75+ text: styledItem.text
76+ wrapMode: Text.Wrap
77+ maximumLineCount: styledItem.maximumLineCount
78+ }
79+}
Dash/Generic/GenericFilterGrid.qml−3
@@ -39,11 +39,8 @@ FilterGrid {
39 text: model.title
39 text: model.title
40 imageWidth: filtergrid.iconWidth
40 imageWidth: filtergrid.iconWidth
41 imageHeight: filtergrid.iconHeight
41 imageHeight: filtergrid.iconHeight
42−
43 source: model.icon
42 source: model.icon
44
43
45− fillMode: Image.PreserveAspectCrop
46−
47 onClicked: {
44 onClicked: {
48 var data = { model: model }
45 var data = { model: model }
49 filtergrid.clicked(index, data, tile.y)
46 filtergrid.clicked(index, data, tile.y)
Dash/Generic/GenericPreview.qml+161−70
@@ -16,90 +16,181 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import Ubuntu.Components 0.1
18import Ubuntu.Components 0.1
19+import Ubuntu.Components.ListItems 0.1 as ListItems
20+import Ubuntu.DownloadDaemonListener 0.1
19import "../../Components"
21import "../../Components"
20−import "../../Components/ListItems" as ListItems
21import ".."
22import ".."
23+import "../Previews"
22
24
23DashPreview {
25DashPreview {
24 id: genericPreview
26 id: genericPreview
25
27
26− title: previewData.title
28+ previewImages: previewImagesComponent
27− previewWidthRatio: 0.6
29+ header: headerComponent
28−
30+ actions: (previewData.infoMap !== undefined && previewData.infoMap["show_progressbar"]) ? progressComponent : actionsComponent
29− property url url: previewData.image
31+ description: descriptionComponent
30−
32+
31− header: UbuntuShape {
33+ Component {
32− id: urlLoader
34+ id: previewImagesComponent
33− anchors.left: parent.left
35+
34− anchors.right: parent.right
36+ LazyImage {
35− height: width * previewImage.sourceSize.height / previewImage.sourceSize.width
37+ objectName: "genericPreviewImage"
36− radius: "medium"
38+ anchors {
37− image: Image {
39+ left: parent.left
38− id: previewImage
40+ right: parent.right
39− asynchronous: true
41+ }
42+ scaleTo: "width"
40− source: genericPreview.url
43+ source: genericPreview.previewData.image
41− fillMode: Image.PreserveAspectCrop
44+ initialHeight: width
45+ }
46+ }
47+
48+ Component {
49+ id: headerComponent
50+ Header {
51+ title: previewData.title
52+ subtitle: previewData.subtitle
42 }
53 }
43 }
54 }
44
55
45− buttons: GridView {
56+ Component {
46− id: buttons
57+ id: actionsComponent
58+
59+ Column {
60+ id: buttonList
61+ spacing: units.gu(1)
62+ Repeater {
63+ objectName: "buttonList"
47− model: genericPreview.previewData.actions
64+ model: previewData.actions
48−
65+
49− property int numOfRows: (count + 1) / 2
50− property int spacing: units.gu(1)
51− height: Math.max(units.gu(4), units.gu(4)*numOfRows + spacing*(numOfRows - 1))
52−
53− cellWidth: Math.max(units.gu(9), width / 2)
54− cellHeight: buttonHeight + spacing
55− property int buttonWidth: Math.max(0, width / 2 - spacing)
56− property int buttonHeight: units.gu(4)
57−
58− delegate: Button {
66+ delegate: Button {
59− width: Math.max(units.gu(4), buttons.buttonWidth)
67+ objectName: "button" + index
68+ width: parent.width
60− height: buttons.buttonHeight
69+ height: buttonList.buttonHeight
61− color: "#dd4814"
70+ color: Theme.palette.selected.foreground
62− text: modelData.displayName
71+ text: modelData.displayName
63− iconSource: modelData.iconHint
72+ iconSource: modelData.iconHint
64− iconPosition: "right"
73+ iconPosition: "right"
65− visible: true
66− onClicked: {
74+ onClicked: {
67− genericPreview.previewData.execute(modelData.id, { })
75+ previewData.execute(modelData.id, { })
76+ genericPreview.showProcessingAction = true;
77+ }
78+ }
68 }
79 }
69 }
80 }
70− focus: false
71 }
81 }
72− body: Column {
82+
83+ Component {
84+ id: progressComponent
85+
86+ ProgressBar {
87+ id: progressBar
88+ objectName: "progressBar"
89+ value: 0
90+ maximumValue: 100
73− spacing: units.gu(2)
91+ height: units.gu(5)
74−
92+
75− Label {
93+ property var model: previewData.actions
76− anchors { left: parent.left; right: parent.right }
94+
77− visible: text != ""
95+ DownloadTracker {
78− fontSize: "medium"
96+ service: "com.canonical.applications.Downloader"
79− opacity: 0.6
97+ dbusPath: previewData.infoMap["progressbar_source"] ? previewData.infoMap["progressbar_source"].value : ""
80− color: "white"
98+
81− text: previewData.subtitle.replace(/[\r\n]+/g, "<br />")
99+ onProgress: {
82− style: Text.Raised
100+ var percentage = parseInt(received * 100 / total);
83− styleColor: "black"
101+ progressBar.value = percentage;
84− wrapMode: Text.WordWrap
102+ }
85− textFormat: Text.RichText
103+
86− // FIXME: workaround for https://bugreports.qt-project.org/browse/QTBUG-33020
104+ onFinished: {
87− onWidthChanged: { wrapMode = Text.NoWrap; wrapMode = Text.WordWrap }
105+ previewData.execute(progressBar.model[0].id, { })
106+ }
107+
108+ onError: {
109+ previewData.execute(progressBar.model[1].id, { "error": error });
110+ }
111+ }
112+
88 }
113 }
114+ }
89
115
116+ Component {
117+ id: descriptionComponent
118+ Column {
119+ spacing: units.gu(2)
120+
90− Label {
121+ Label {
122+ id: descriptionLabel
91− anchors { left: parent.left; right: parent.right }
123+ anchors { left: parent.left; right: parent.right }
92− visible: text != ""
124+ visible: text != ""
93− fontSize: "small"
125+ fontSize: "small"
94− opacity: 0.6
126+ opacity: 0.6
95− color: "white"
127+ color: "white"
96− text: previewData.description.replace(/[\r\n]+/g, "<br />")
128+ text: previewData.description.replace(/[\r\n]/g, "<br />")
97− style: Text.Raised
129+ style: Text.Raised
98− styleColor: "black"
130+ styleColor: "black"
99− wrapMode: Text.WordWrap
131+ wrapMode: Text.WordWrap
100− textFormat: Text.RichText
132+ textFormat: Text.RichText
101− // FIXME: workaround for https://bugreports.qt-project.org/browse/QTBUG-33020
133+ // FIXME: workaround for https://bugreports.qt-project.org/browse/QTBUG-33020
102− onWidthChanged: { wrapMode = Text.NoWrap; wrapMode = Text.WordWrap }
134+ onWidthChanged: { wrapMode = Text.NoWrap; wrapMode = Text.WordWrap }
135+ }
136+
137+ Column {
138+ objectName: "infoHintColumn"
139+ anchors {
140+ left: parent.left
141+ right: parent.right
142+ }
143+ Repeater {
144+ objectName: "infoHintRepeater"
145+ model: previewData.infoHints
146+
147+ delegate: Item {
148+ objectName: "infoHintItem" + index
149+ width: parent.width
150+ height: units.gu(5)
151+ Row {
152+ width: parent.width
153+ spacing: units.gu(1)
154+ property int columnWidth: (width - spacing) / 2
155+ anchors.verticalCenter: parent.verticalCenter
156+
157+ Label {
158+ objectName: "displayNameLabel"
159+ visible: valueLabel.visible
160+ fontSize: "small"
161+ opacity: 0.9
162+ color: "white"
163+ horizontalAlignment: Text.AlignLeft
164+ width: parent.columnWidth
165+ text: modelData.displayName
166+ style: Text.Raised
167+ styleColor: "black"
168+ }
169+ Label {
170+ id: valueLabel
171+ objectName: "valueLabel"
172+ visible: modelData.value != ""
173+ fontSize: "small"
174+ opacity: 0.6
175+ color: "white"
176+ horizontalAlignment: Text.AlignRight
177+ width: parent.columnWidth
178+ text: modelData.value ? modelData.value : ""
179+ style: Text.Raised
180+ styleColor: "black"
181+ wrapMode: Text.WordWrap
182+ }
183+ }
184+ ListItems.ThinDivider {
185+ anchors {
186+ left: parent.left
187+ bottom: parent.bottom
188+ right: parent.right
189+ }
190+ }
191+ }
192+ }
193+ }
103 }
194 }
104 }
195 }
105}
196}
Dash/Generic/WeatherFilterGrid.qmlnew 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
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+GenericFilterGrid {
22+ id: filtergrid
23+
24+ delegateHeight: units.gu(11.5)
25+
26+ delegate: Tile {
27+ id: tile
28+ objectName: "delegate" + index
29+ width: filtergrid.cellWidth
30+ height: filtergrid.cellHeight
31+ text: model.title
32+ imageWidth: filtergrid.iconWidth
33+ imageHeight: filtergrid.iconHeight
34+ source: model.icon
35+ maximumLineCount: 2
36+
37+ style: FlatTileStyle {}
38+
39+ onClicked: {
40+ var data = { model: model }
41+ filtergrid.clicked(index, data, tile.y)
42+ }
43+
44+ onPressAndHold: {
45+ var data = { model: model }
46+ filtergrid.pressAndHold(index, data, tile.y)
47+ }
48+ }
49+}
Dash/GenericScopeView.qml+47−1
@@ -24,6 +24,8 @@ ScopeView {
24 readonly property alias previewShown: previewLoader.onScreen
24 readonly property alias previewShown: previewLoader.onScreen
25 property bool enableHeightBehaviorOnNextCreation: false
25 property bool enableHeightBehaviorOnNextCreation: false
26
26
27+ moving: categoryView.moving
28+
27 onIsCurrentChanged: {
29 onIsCurrentChanged: {
28 pageHeader.resetSearch();
30 pageHeader.resetSearch();
29 previewLoader.open = false;
31 previewLoader.open = false;
@@ -57,6 +59,7 @@ ScopeView {
57 target: scopeView.scope
59 target: scopeView.scope
58 onShowDash: previewLoader.open = false;
60 onShowDash: previewLoader.open = false;
59 onHideDash: previewLoader.open = false;
61 onHideDash: previewLoader.open = false;
62+ onActivated: previewLoader.closePreviewSpinner();
60 }
63 }
61
64
62 ScopeListView {
65 ScopeListView {
@@ -72,6 +75,7 @@ ScopeView {
72 property string expandedCategoryId: ""
75 property string expandedCategoryId: ""
73
76
74 delegate: ListItems.Base {
77 delegate: ListItems.Base {
78+ id: baseItem
75 highlightWhenPressed: false
79 highlightWhenPressed: false
76
80
77 readonly property bool expandable: rendererLoader.item ? rendererLoader.item.expandable : false
81 readonly property bool expandable: rendererLoader.item ? rendererLoader.item.expandable : false
@@ -97,6 +101,7 @@ ScopeView {
97 // TODO: the running apps grid doesn't support standard scope results model yet
101 // TODO: the running apps grid doesn't support standard scope results model yet
98 item.firstModel = Qt.binding(function() { return results.firstModel })
102 item.firstModel = Qt.binding(function() { return results.firstModel })
99 item.secondModel = Qt.binding(function() { return results.secondModel })
103 item.secondModel = Qt.binding(function() { return results.secondModel })
104+ item.canEnableTerminationMode = Qt.binding(function() { return scopeView.isCurrent })
100 } else {
105 } else {
101 item.model = Qt.binding(function() { return results })
106 item.model = Qt.binding(function() { return results })
102 }
107 }
@@ -107,6 +112,7 @@ ScopeView {
107 item.filter = shouldFilter;
112 item.filter = shouldFilter;
108 }
113 }
109 }
114 }
115+ updateDelegateCreationRange();
110 }
116 }
111
117
112 Component.onDestruction: {
118 Component.onDestruction: {
@@ -163,6 +169,33 @@ ScopeView {
163 }
169 }
164 }
170 }
165 }
171 }
172+ onContentYChanged: rendererLoader.updateDelegateCreationRange();
173+ onHeightChanged: rendererLoader.updateDelegateCreationRange();
174+ }
175+
176+ function updateDelegateCreationRange() {
177+ // Do not update the range if we are overshooting up or down, since we'll come back
178+ // to the stable position and delete/create items without any reason
179+ if (categoryView.contentY < categoryView.originY) {
180+ return;
181+ } else if (categoryView.contentY + categoryView.height > categoryView.contentHeight) {
182+ return;
183+ }
184+
185+ if (item.hasOwnProperty("delegateCreationBegin")) {
186+ if (baseItem.y + baseItem.height <= 0) {
187+ // Not visible (item at top of the list)
188+ item.delegateCreationBegin = baseItem.height
189+ item.delegateCreationEnd = baseItem.height
190+ } else if (baseItem.y >= categoryView.height) {
191+ // Not visible (item at bottom of the list)
192+ item.delegateCreationBegin = 0
193+ item.delegateCreationEnd = 0
194+ } else {
195+ item.delegateCreationBegin = Math.max(-baseItem.y, 0)
196+ item.delegateCreationEnd = Math.min(categoryView.height + item.delegateCreationBegin, baseItem.height)
197+ }
198+ }
166 }
199 }
167 }
200 }
168 }
201 }
@@ -207,8 +240,15 @@ ScopeView {
207 switch (rendererId) {
240 switch (rendererId) {
208 case "grid": {
241 case "grid": {
209 switch (contentType) {
242 switch (contentType) {
210− case "video": return "Generic/GenericFilterGridPotrait.qml";
243+ case "video": return "Video/VideoFilterGrid.qml";
211 case "music": return "Music/MusicFilterGrid.qml";
244 case "music": return "Music/MusicFilterGrid.qml";
245+ case "apps": {
246+ if (rendererHint == "toggled")
247+ return "Apps/DashPluginFilterGrid.qml";
248+ else
249+ return "Generic/GenericFilterGrid.qml";
250+ }
251+ case "weather": return "Generic/WeatherFilterGrid.qml";
212 default: return "Generic/GenericFilterGrid.qml";
252 default: return "Generic/GenericFilterGrid.qml";
213 }
253 }
214 }
254 }
@@ -306,6 +346,12 @@ ScopeView {
306 onLoaded: {
346 onLoaded: {
307 item.previewData = Qt.binding(function() { return previewLoader.previewData })
347 item.previewData = Qt.binding(function() { return previewLoader.previewData })
308 }
348 }
349+
350+ function closePreviewSpinner() {
351+ if(item) {
352+ item.showProcessingAction = false;
353+ }
354+ }
309 }
355 }
310
356
311 // TODO: Move as InverseMouseArea to DashPreview
357 // TODO: Move as InverseMouseArea to DashPreview
Dash/Movie/MoviePreview.qmlnew file+71
@@ -0,0 +1,71 @@
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 ".."
20+import "../Generic"
21+import "../../Components"
22+import "../Previews"
23+
24+GenericPreview {
25+ id: root
26+
27+ property bool ready: previewData ? true : false
28+ property url url: ready ? previewData.image : ""
29+
30+ previewImages: previewImageComponent
31+ header: headerComponent
32+
33+ Component {
34+ id: previewImageComponent
35+ LazyImage {
36+ anchors.left: parent.left
37+ anchors.right: parent.right
38+ scaleTo: "width"
39+ visible: height > 0
40+ source: root.url
41+ initialHeight: width * 10 / 16
42+
43+ Image {
44+ objectName: "playButton"
45+ anchors.centerIn: parent
46+ readonly property bool bigButton: parent.width > units.gu(40)
47+ width: bigButton ? units.gu(8) : units.gu(4.5)
48+ height: width
49+ source: "../graphics/play_button%1%2.png".arg(previewImageMouseArea.pressed ? "_active" : "").arg(bigButton ? "_big" : "")
50+ }
51+
52+ MouseArea {
53+ id: previewImageMouseArea
54+ anchors.fill: parent
55+ onClicked: {
56+ Qt.openUrlExternally(previewData.result.uri);
57+ }
58+ }
59+ }
60+ }
61+
62+ Component {
63+ id: headerComponent
64+ Header {
65+ title: previewData.title
66+ rating: Math.round(previewData.rating * 10)
67+ reviews: previewData.numRatings
68+ rated: previewData.infoMap["rated"] ? previewData.infoMap["rated"].value : 0
69+ }
70+ }
71+}
Dash/Music/MusicFilterGrid.qml+21−22
@@ -16,42 +16,41 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import "../../Components"
18import "../../Components"
19+import "../Generic"
19
20
20−FilterGrid {
21+GenericFilterGrid {
21− id: filterGrid
22+ id: filtergrid
22
23
23− minimumHorizontalSpacing: units.gu(2)
24− maximumNumberOfColumns: 5
25− delegateWidth: units.gu(17)
24+ delegateWidth: units.gu(11)
26− delegateHeight: iconHeight + units.gu(3.5)
25+ delegateHeight: units.gu(16)
27− verticalSpacing: units.gu(2)
28
26
29− readonly property int iconWidth: (width / columns) * 0.8
27+ iconWidth: units.gu(11)
30− readonly property int iconHeight: iconWidth
28+ iconHeight: units.gu(11)
31
29
32− signal clicked(int index, var delegateItem, real itemY)
33− signal pressAndHold(int index, var delegateItem, real itemY)
34−
35− delegate: AlbumTile {
30+ delegate: Tile {
36 id: tile
31 id: tile
37 objectName: "delegate" + index
32 objectName: "delegate" + index
38− width: filterGrid.cellWidth
33+ width: filtergrid.cellWidth
39− height: filterGrid.cellHeight
34+ height: filtergrid.cellHeight
40− iconWidth: filterGrid.iconWidth
41− iconHeight: filterGrid.iconHeight
42−
43− artist: model.title
44− album: model.comment
35+ text: model.comment
36+ imageWidth: filtergrid.iconWidth
37+ imageHeight: filtergrid.iconHeight
45 source: model.icon
38 source: model.icon
39+ maximumLineCount: 2
40+ horizontalAlignment: Text.AlignLeft
41+
42+ style: MusicTileStyle {
43+ artist: model.title
44+ }
46
45
47 onClicked: {
46 onClicked: {
48 var data = { model: model }
47 var data = { model: model }
49− filterGrid.clicked(index, data, tile.y)
48+ filtergrid.clicked(index, data, tile.y)
50 }
49 }
51
50
52 onPressAndHold: {
51 onPressAndHold: {
53 var data = { model: model }
52 var data = { model: model }
54− filterGrid.pressAndHold(index, data, tile.y)
53+ filtergrid.pressAndHold(index, data, tile.y)
55 }
54 }
56 }
55 }
57}
56}
Dash/Music/MusicTileStyle.qmlnew file+102
@@ -0,0 +1,102 @@
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+Item {
21+ id: tile
22+
23+ property alias artist: artistLabel.text
24+
25+ anchors.fill: parent
26+
27+ UbuntuShape {
28+ id: icon
29+ anchors {
30+ top: parent.top
31+ horizontalCenter: parent.horizontalCenter
32+ }
33+ radius: "medium"
34+ width: styledItem.imageWidth
35+ height: styledItem.imageHeight
36+ image: Image {
37+ id: image
38+ objectName: "image"
39+ sourceSize { width: icon.width; height: icon.height }
40+ asynchronous: true
41+ cache: false
42+ source: styledItem.source
43+ fillMode: styledItem.fillMode
44+ horizontalAlignment: Image.AlignHCenter
45+ verticalAlignment: Image.AlignVCenter
46+ }
47+ }
48+
49+ UbuntuShape {
50+ id: borderPressed
51+ objectName: "borderPressed"
52+
53+ anchors.fill: icon
54+ radius: "medium"
55+ borderSource: "radius_pressed.sci"
56+ opacity: styledItem.pressed ? 1.0 : 0.0
57+ Behavior on opacity { NumberAnimation { duration: 200; easing.type: Easing.OutQuint } }
58+ }
59+
60+ Label {
61+ id: label
62+ objectName: "label"
63+ anchors {
64+ baseline: icon.bottom
65+ baselineOffset: units.gu(2)
66+ left: icon.left
67+ right: parent.right
68+ rightMargin: units.gu(1)
69+ leftMargin: units.dp(2)
70+ }
71+
72+ color: Theme.palette.selected.backgroundText
73+ opacity: 0.9
74+ style: Text.Raised
75+ styleColor: "black"
76+ fontSize: "small"
77+ font.weight: Font.Bold
78+ elide: Text.ElideRight
79+ horizontalAlignment: styledItem.horizontalAlignment
80+ text: styledItem.text
81+ wrapMode: Text.Wrap
82+ maximumLineCount: styledItem.maximumLineCount
83+ }
84+
85+ Label {
86+ id: artistLabel
87+ anchors {
88+ top: label.bottom
89+ left: label.left
90+ right: label.right
91+ rightMargin: units.gu(1)
92+ }
93+
94+ color: Theme.palette.selected.backgroundText
95+ opacity: 0.9
96+ style: Text.Raised
97+ styleColor: "black"
98+ fontSize: "x-small"
99+ elide: Text.ElideMiddle
100+ horizontalAlignment: styledItem.horizontalAlignment
101+ }
102+}
Dash/PreviewDelegateMapper.qml+1
@@ -22,6 +22,7 @@ QtObject {
22 readonly property string appPreview: "Apps/AppPreview.qml"
22 readonly property string appPreview: "Apps/AppPreview.qml"
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 }
26 }
26 }
27 }
27
28
Dash/Previews/Header.qmlnew file+109
@@ -0,0 +1,109 @@
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 title: titleLabel.text
25+ property alias subtitle: subtitleLabel.text
26+ property alias rating: ratingStars.rating
27+ property int rated: 0
28+ property int reviews: 0
29+
30+ spacing: units.gu(2)
31+ height: imageShape.visible ? imageShape.height : contentColumn.height
32+
33+ UbuntuShape {
34+ id: imageShape
35+ width: height
36+ height: Math.max(units.gu(6), contentColumn.height)
37+ visible: image.source.toString().length > 0
38+ image: Image {
39+ id: image
40+ sourceSize { width: imageShape.width; height: imageShape.height }
41+ asynchronous: true
42+ fillMode: Image.PreserveAspectFit
43+ }
44+ }
45+
46+ Column {
47+ id: contentColumn
48+ spacing: units.gu(1)
49+ width: parent.width - x
50+
51+ Label {
52+ id: titleLabel
53+ objectName: "titleLabel"
54+ fontSize: "large"
55+ color: "white"
56+ style: Text.Raised
57+ styleColor: "black"
58+ opacity: .9
59+ width: parent.width
60+ elide: Text.ElideRight
61+ }
62+
63+ Label {
64+ id: subtitleLabel
65+ objectName: "subtitleLabel"
66+ fontSize: "medium"
67+ color: "white"
68+ style: Text.Raised
69+ styleColor: "black"
70+ opacity: .6
71+ visible: text.length > 0
72+ }
73+
74+ Row {
75+ visible: root.rating >= 0
76+ spacing: units.gu(1)
77+
78+ RatingStars {
79+ id: ratingStars
80+ maximumRating: 10
81+ rating: -1
82+ }
83+
84+ Label {
85+ id: ratedLabel
86+ objectName: "ratedLabel"
87+ fontSize: "medium"
88+ color: "white"
89+ style: Text.Raised
90+ styleColor: "black"
91+ opacity: .6
92+ //TRANSLATORS: Number of persons who rated this app/video/whatever
93+ text: i18n.tr("(%1)").arg(root.rated)
94+ }
95+
96+ Label {
97+ id: reviewsLabel
98+ objectName: "reviewsLabel"
99+ fontSize: "medium"
100+ color: "white"
101+ style: Text.Raised
102+ styleColor: "black"
103+ opacity: .6
104+ //TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
105+ text: i18n.tr("%1 review", "%1 reviews", root.reviews).arg(root.reviews)
106+ }
107+ }
108+ }
109+}
Dash/Apps/AppReviews.qml → Dash/Previews/Reviews.qmlrenamed

The content is the same.

Dash/ScopeDelegateMapper.qml+2−4
@@ -17,10 +17,8 @@
17import QtQuick 2.0
17import QtQuick 2.0
18
18
19QtObject {
19QtObject {
20− property var scopeDelegateMapping: {"mockmusicmaster.scope": "DashMusic.qml",
21− "applications.scope": "DashApps.qml",
20+ property var scopeDelegateMapping: {"applications.scope": "DashApps.qml",
22− "home.scope": "DashHome.qml",
21+ "home.scope": "DashHome.qml"
23− "mockvideosmaster.scope": "DashVideos.qml"
24 }
22 }
25 property string genericScope: "GenericScopeView.qml"
23 property string genericScope: "GenericScopeView.qml"
26
24
Dash/ScopeListView.qml+5
@@ -20,4 +20,9 @@ import ListViewWithPageHeader 0.1
20ListViewWithPageHeader {
20ListViewWithPageHeader {
21 maximumFlickVelocity: height * 10
21 maximumFlickVelocity: height * 10
22 flickDeceleration: height * 2
22 flickDeceleration: height * 2
23+
24+ Connections {
25+ target: greeter
26+ onShownChanged: if (greeter.shown) showHeader()
27+ }
23}
28}
Dash/ScopeView.qml+12−3
@@ -23,6 +23,7 @@ FocusScope {
23 property SortFilterProxyModel categories: categoryFilter
23 property SortFilterProxyModel categories: categoryFilter
24 property bool isCurrent
24 property bool isCurrent
25 property ListModel searchHistory
25 property ListModel searchHistory
26+ property bool moving: false
26
27
27 signal endReached
28 signal endReached
28 signal movementStarted
29 signal movementStarted
@@ -31,14 +32,22 @@ FocusScope {
31 // FIXME delay the search so that daemons have time to settle, note that
32 // FIXME delay the search so that daemons have time to settle, note that
32 // removing this will break ScopeView::test_changeScope
33 // removing this will break ScopeView::test_changeScope
33 onScopeChanged: {
34 onScopeChanged: {
35+ if (scope) {
34− timer.restart();
36+ timer.restart();
35− scope.activateApplication.connect(activateApp);
37+ scope.activateApplication.connect(activateApp);
38+ }
36 }
39 }
37
40
38 function activateApp(desktopFilePath) {
41 function activateApp(desktopFilePath) {
39 shell.activateApplication(desktopFilePath);
42 shell.activateApplication(desktopFilePath);
40 }
43 }
41
44
45+ Binding {
46+ target: scope
47+ property: "isActive"
48+ value: isCurrent
49+ }
50+
42 Timer {
51 Timer {
43 id: timer
52 id: timer
44 interval: 2000
53 interval: 2000
@@ -47,7 +56,7 @@ FocusScope {
47
56
48 SortFilterProxyModel {
57 SortFilterProxyModel {
49 id: categoryFilter
58 id: categoryFilter
50− model: scope.categories
59+ model: scope ? scope.categories : null
51 dynamicSortFilter: true
60 dynamicSortFilter: true
52 filterRole: Categories.RoleCount
61 filterRole: Categories.RoleCount
53 filterRegExp: /^0$/
62 filterRegExp: /^0$/
Dash/Video/VideosFilterGrid.qml → Dash/Video/VideoFilterGrid.qmlrenamed+17−13
@@ -16,20 +16,16 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import "../../Components"
18import "../../Components"
19+import "../Generic"
19
20
20−FilterGrid {
21+GenericFilterGrid {
21 id: filtergrid
22 id: filtergrid
22
23
23− minimumHorizontalSpacing: units.gu(0.5)
24− maximumNumberOfColumns: 5
25 delegateWidth: units.gu(11)
24 delegateWidth: units.gu(11)
26− delegateHeight: iconHeight + units.gu(2.5)
25+ delegateHeight: units.gu(15)
27− verticalSpacing: units.gu(2)
28
26
29− readonly property int iconWidth: (width / columns) * 0.8
27+ iconWidth: units.gu(11)
30− readonly property int iconHeight: iconWidth * 16 / 11
28+ iconHeight: units.gu(11)
31−
32− signal clicked(int index, var data, real itemY)
33
29
34 delegate: Tile {
30 delegate: Tile {
35 id: tile
31 id: tile
@@ -40,11 +36,19 @@ FilterGrid {
40 imageWidth: filtergrid.iconWidth
36 imageWidth: filtergrid.iconWidth
41 imageHeight: filtergrid.iconHeight
37 imageHeight: filtergrid.iconHeight
42 source: model.icon
38 source: model.icon
43− fillMode: Image.PreserveAspectCrop
39+ maximumLineCount: 2
40+ horizontalAlignment: Text.AlignLeft
41+
42+ style: VideoTileStyle {}
43+
44 onClicked: {
44 onClicked: {
45− var fileUri = model.uri.replace(/^[^:]+:/, "")
45+ var data = { model: model }
46− var data = {fileUri: fileUri, nfoUri: model.comment}
47− filtergrid.clicked(index, data, tile.y);
46+ filtergrid.clicked(index, data, tile.y)
47+ }
48+
49+ onPressAndHold: {
50+ var data = { model: model }
51+ filtergrid.pressAndHold(index, data, tile.y)
48 }
52 }
49 }
53 }
50}
54}
Dash/Video/VideoPreview.qmldeleted−210
@@ -1,210 +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 ".."
20−import "../../Components"
21−
22−DashPreview {
23− id: root
24−
25− property var item
26− property alias ready: nfo.ready
27− property bool playable: fileUri != ""
28− readonly property url fileUri: item ? item.fileUri : ""
29− property url url: item ? item.nfoUri.replace(/\.nfo$/, "-fanart.jpg") : ""
30−
31− VideoInfo {
32− id: nfo
33− source: item ? item.nfoUri : ""
34− }
35−
36− title: nfo.ready ? nfo.video.title : ""
37− previewWidthRatio: 0.6
38−
39− onPreviewImageClicked: {
40− if (playable) {
41− shell.activateApplication('/usr/share/applications/mediaplayer-app.desktop', root.fileUri);
42− }
43− }
44−
45− // TODO: replace this UbuntuShape with the Video component once that lands
46− // with the player.
47− header: UbuntuShape {
48− id: urlLoader
49− anchors.left: parent.left
50− anchors.right: parent.right
51− height: width * previewImage.sourceSize.height / previewImage.sourceSize.width
52− radius: "medium"
53− image: Image {
54− id: previewImage
55− asynchronous: true
56− source: root.url
57− fillMode: Image.PreserveAspectCrop
58− }
59−
60− Image {
61− objectName: "playButton"
62− anchors.centerIn: parent
63− visible: root.playable
64− readonly property bool bigButton: parent.width > units.gu(40)
65− width: bigButton ? units.gu(8) : units.gu(4.5)
66− height: width
67− source: "../graphics/play_button%1%2.png".arg(previewImageMouseArea.pressed ? "_active" : "").arg(bigButton ? "_big" : "")
68− }
69−
70− MouseArea {
71− id: previewImageMouseArea
72− anchors.fill: parent
73− onClicked: root.previewImageClicked()
74− }
75− }
76−
77− buttons: Row {
78− spacing: units.gu(2)
79−
80− property int buttonWidth: Math.min(units.gu(22), (width - spacing) / 2)
81− Button {
82− width: parent.buttonWidth
83− color: Theme.palette.selected.foreground
84− text: nfo.ready && nfo.video.buyPrice != "" ? "Buy for " + nfo.video.buyPrice : ""
85− visible: text != ""
86− iconSource: "graphics/icon_button_amazon.png"
87− iconPosition: "right"
88− }
89− Button {
90− width: parent.buttonWidth
91− color: Theme.palette.selected.foreground
92− text: nfo.ready && nfo.video.buyPrice != "" ? "Rent for " + nfo.video.rentPrice : ""
93− visible: text != ""
94− iconSource: "graphics/icon_button_u1.png"
95− iconPosition: "right"
96− }
97− }
98−
99− body: Column {
100− spacing: units.gu(2)
101− RatingStars {
102− maximumRating: 10 // FIXME: this should happen on the backend side
103− rating: nfo.ready ? nfo.video.rating: 0
104− }
105−
106− Label {
107− text: nfo.ready ? nfo.video.plot : ""
108− color: Theme.palette.selected.backgroundText
109− opacity: .6
110− fontSize: "medium"
111− width: parent.width
112− wrapMode: Text.WordWrap
113− style: Text.Raised
114− styleColor: "black"
115− }
116−
117− Grid {
118− columns: 2
119− spacing: units.gu(1)
120− width: parent.width
121− property int firstColWidth: units.gu(9)
122− property int secondColWidth: width - firstColWidth - spacing
123− Label {
124− visible: directedLabel.visible
125− fontSize: "small"
126− opacity: 0.9
127− color: "white"
128− horizontalAlignment: Text.AlignRight
129− width: parent.firstColWidth
130− text: i18n.tr("Directed by:")
131− style: Text.Raised
132− styleColor: "black"
133− }
134− Label {
135− id: directedLabel
136− visible: text != ""
137− fontSize: "small"
138− opacity: 0.6
139− color: "white"
140− width: parent.secondColWidth
141− text: nfo.ready ? nfo.video.director : ""
142− style: Text.Raised
143− styleColor: "black"
144− wrapMode: Text.WordWrap
145− }
146− Label {
147− visible: starringLabel.visible
148− fontSize: "small"
149− opacity: 0.9
150− horizontalAlignment: Text.AlignRight
151− color: "white"
152− width: parent.firstColWidth
153− text: i18n.tr("Starring:")
154− style: Text.Raised
155− styleColor: "black"
156− }
157− Label {
158− id: starringLabel
159− visible: text != ""
160− fontSize: "small"
161− opacity: 0.6
162− color: "white"
163− width: parent.secondColWidth
164− text: nfo.ready ? nfo.getActors().join(", ") : ""
165− wrapMode: Text.WordWrap
166− style: Text.Raised
167− styleColor: "black"
168− }
169− Label {
170− visible: authorLabel.visible
171− fontSize: "small"
172− opacity: 0.9
173− horizontalAlignment: Text.AlignRight
174− color: "white"
175− width: parent.firstColWidth
176− text: i18n.tr("Author:")
177− style: Text.Raised
178− styleColor: "black"
179− }
180− Label {
181− id: authorLabel
182− visible: text != ""
183− fontSize: "small"
184− opacity: 0.6
185− color: "white"
186− width: parent.secondColWidth
187− text: nfo.ready ? nfo.video.author : ""
188− wrapMode: Text.WordWrap
189− style: Text.Raised
190− styleColor: "black"
191− }
192− }
193−
194− Label {
195− fontSize: "small"
196− opacity: 0.6
197− color: "white"
198− text: {
199− var parts = []
200− if (nfo.ready) {
201− if (nfo.video.year) parts.push(nfo.video.year)
202− if (nfo.video.runtime) parts.push("%1 minutes".arg(nfo.video.runtime))
203− }
204− return parts.join(", ");
205− }
206− style: Text.Raised
207− styleColor: "black"
208− }
209− }
210−}
Dash/Video/VideoTileStyle.qmlnew file+87
@@ -0,0 +1,87 @@
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+Item {
21+ id: tile
22+
23+ anchors.fill: parent
24+
25+ Image {
26+ id: icon
27+ anchors {
28+ top: parent.top
29+ horizontalCenter: parent.horizontalCenter
30+ }
31+ width: styledItem.imageWidth
32+ height: styledItem.imageHeight
33+ source: "graphics/movie_icon_holder.png"
34+
35+ Image {
36+ id: image
37+ objectName: "image"
38+ anchors {
39+ fill: parent;
40+ topMargin: units.gu(2);
41+ bottomMargin: units.gu(2)
42+ }
43+ sourceSize { width: icon.width; height: icon.height }
44+ asynchronous: true
45+ cache: false
46+ source: styledItem.source
47+ fillMode: styledItem.fillMode
48+ horizontalAlignment: Image.AlignHCenter
49+ verticalAlignment: Image.AlignVCenter
50+ }
51+ }
52+
53+ UbuntuShape {
54+ id: borderPressed
55+ objectName: "borderPressed"
56+
57+ anchors.fill: icon
58+ radius: "medium"
59+ borderSource: "radius_pressed.sci"
60+ opacity: styledItem.pressed ? 1.0 : 0.0
61+ Behavior on opacity { NumberAnimation { duration: 200; easing.type: Easing.OutQuint } }
62+ }
63+
64+ Label {
65+ id: label
66+ objectName: "label"
67+ anchors {
68+ baseline: icon.bottom
69+ baselineOffset: units.gu(2)
70+ left: icon.left
71+ right: parent.right
72+ rightMargin: units.gu(1)
73+ leftMargin: units.dp(2)
74+ }
75+
76+ color: Theme.palette.selected.backgroundText
77+ opacity: 0.9
78+ style: Text.Raised
79+ styleColor: "black"
80+ fontSize: "small"
81+ elide: Text.ElideRight
82+ horizontalAlignment: styledItem.horizontalAlignment
83+ text: styledItem.text
84+ wrapMode: Text.Wrap
85+ maximumLineCount: styledItem.maximumLineCount
86+ }
87+}
Dash/Video/graphics/movie_icon_holder@27.pngnew file

Binary file not shown.

Greeter/Clock.qml+31−12
@@ -16,6 +16,7 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import Ubuntu.Components 0.1
18import Ubuntu.Components 0.1
19+import Unity.Indicators 0.1 as Indicators
19
20
20Item {
21Item {
21 id: clock
22 id: clock
@@ -23,17 +24,35 @@ Item {
23 implicitWidth: childrenRect.width
24 implicitWidth: childrenRect.width
24 implicitHeight: childrenRect.height
25 implicitHeight: childrenRect.height
25
26
27+ // Allows to set the current Date. Will be overwritten if active
26− property date __date
28+ property date currentDate
27− property alias __timerInterval: timer.interval
28− readonly property bool __timerRunning: timer.running
29
29
30− Timer {
30+ // If active, time will be updated through the indicators service
31− id: timer
32− interval: 1000 * 60
33− running: clock.enabled && clock.visible && clock.opacity != 0
31+ property bool active: clock.enabled && clock.visible
34− repeat: true
32+
35− triggeredOnStart: true
33+ Component.onCompleted: {
36− onTriggered: __date = new Date
34+ if (active) {
35+ currentDate = new Date()
36+ }
37+ }
38+
39+ Indicators.CachedUnityMenuModel {
40+ id: timeModel
41+ objectName: "timeModel"
42+
43+ busName: "com.canonical.indicator.datetime"
44+ actionsObjectPath: "/com/canonical/indicator/datetime"
45+ menuObjectPath: clock.active ? "/com/canonical/indicator/datetime/phone" : ""
46+
47+ Indicators.RootActionState {
48+ menu: timeModel.model
49+ onUpdated: {
50+ if (timeLabel.text != rightLabel) {
51+ timeLabel.text = rightLabel;
52+ clock.currentDate = new Date();
53+ }
54+ }
55+ }
37 }
56 }
38
57
39 Column {
58 Column {
@@ -47,7 +66,7 @@ Item {
47 font.pixelSize: units.gu(7.5)
66 font.pixelSize: units.gu(7.5)
48 color: "white"
67 color: "white"
49 opacity: 0.5
68 opacity: 0.5
50− text: Qt.formatTime(__date)
69+ text: Qt.formatTime(clock.currentDate)
51 font.weight: Font.Light
70 font.weight: Font.Light
52 }
71 }
53
72
@@ -59,7 +78,7 @@ Item {
59 fontSize: "medium"
78 fontSize: "medium"
60 color: "white"
79 color: "white"
61 opacity: 0.5
80 opacity: 0.5
62− text: Qt.formatDate(__date, Qt.DefaultLocaleLongDate)
81+ text: Qt.formatDate(clock.currentDate, Qt.DefaultLocaleLongDate)
63 font.weight: Font.Light
82 font.weight: Font.Light
64 }
83 }
65 }
84 }
Greeter/Infographics.qml+1−3
@@ -405,7 +405,7 @@ Item {
405 }
405 }
406 }
406 }
407
407
408− Text {
408+ Label {
409 id: notification
409 id: notification
410 objectName: "label"
410 objectName: "label"
411
411
@@ -419,13 +419,11 @@ Item {
419 anchors.centerIn: parent
419 anchors.centerIn: parent
420
420
421 text: infographic.model.label
421 text: infographic.model.label
422− font.pixelSize: notification.height / 12
423
422
424 wrapMode: Text.WordWrap
423 wrapMode: Text.WordWrap
425 horizontalAlignment: Text.AlignHCenter
424 horizontalAlignment: Text.AlignHCenter
426 verticalAlignment: Text.AlignVCenter
425 verticalAlignment: Text.AlignVCenter
427 color: "white"
426 color: "white"
428− font.weight: Font.Light
429
427
430 PropertyAnimation {
428 PropertyAnimation {
431 id: increaseOpacity
429 id: increaseOpacity
Greeter/PinLockscreen.qml+5
@@ -32,6 +32,8 @@ Column {
32 signal entered(string passphrase)
32 signal entered(string passphrase)
33 signal cancel()
33 signal cancel()
34
34
35+ property bool entryEnabled: true
36+
35 function clear(playAnimation) {
37 function clear(playAnimation) {
36 pinentryField.text = "";
38 pinentryField.text = "";
37 if (playAnimation) {
39 if (playAnimation) {
@@ -140,6 +142,7 @@ Column {
140 width: root.padWidth / 3
142 width: root.padWidth / 3
141 height: root.padHeight / 4
143 height: root.padHeight / 4
142 text: index + 1
144 text: index + 1
145+ enabled: entryEnabled
143
146
144 onClicked: {
147 onClicked: {
145 pinentryField.text = pinentryField.text + text;
148 pinentryField.text = pinentryField.text + text;
@@ -161,6 +164,7 @@ Column {
161 height: root.padHeight / 4
164 height: root.padHeight / 4
162 text: "0"
165 text: "0"
163 onClicked: pinentryField.text = pinentryField.text + text
166 onClicked: pinentryField.text = pinentryField.text + text
167+ enabled: entryEnabled
164 }
168 }
165
169
166 PinPadButton {
170 PinPadButton {
@@ -169,6 +173,7 @@ Column {
169 height: root.padHeight / 4
173 height: root.padHeight / 4
170 iconName: "erase"
174 iconName: "erase"
171 onClicked: pinentryField.text = pinentryField.text.substring(0, pinentryField.text.length-1)
175 onClicked: pinentryField.text = pinentryField.text.substring(0, pinentryField.text.length-1)
176+ enabled: entryEnabled
172 }
177 }
173 }
178 }
174 }
179 }
Notifications/Notification.qml+9−5
@@ -34,11 +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, 0, 0, 0.85)
38+ color: Qt.rgba(0.132, 0.117, 0.109, 0.97)
39 opacity: 0
39 opacity: 0
40+ radius: "medium"
40
41
41 clip: true
42 clip: true
43+ visible: type != Notification.PlaceHolder
42
44
43 UnityMenuModelPaths {
45 UnityMenuModelPaths {
44 id: paths
46 id: paths
@@ -128,6 +130,8 @@ UbuntuShape {
128 id: labelColumn
130 id: labelColumn
129 width: parent.width - x
131 width: parent.width - x
130
132
133+ anchors.verticalCenter: (icon.visible && !bodyLabel.visible) ? icon.verticalCenter : undefined
134+
131 Label {
135 Label {
132 id: summaryLabel
136 id: summaryLabel
133
137
@@ -190,8 +194,8 @@ UbuntuShape {
190 left: parent.left
194 left: parent.left
191 right: parent.right
195 right: parent.right
192 }
196 }
193− visible: notification.type == Notification.SnapDecision
197+ visible: notification.type == Notification.SnapDecision && actionRepeater.count > 0
194− height: units.gu(4)
198+ height: units.gu(5)
195
199
196 property real buttonWidth: (width - contentColumn.spacing) / 2
200 property real buttonWidth: (width - contentColumn.spacing) / 2
197 property bool expanded
201 property bool expanded
@@ -282,7 +286,7 @@ UbuntuShape {
282 }
286 }
283
287
284 text: loader.actionLabel
288 text: loader.actionLabel
285− height: units.gu(4)
289+ height: units.gu(5)
286 gradient: UbuntuColors.greyGradient
290 gradient: UbuntuColors.greyGradient
287 onClicked: notification.notification.invokeAction(loader.actionId)
291 onClicked: notification.notification.invokeAction(loader.actionId)
288 }
292 }
Notifications/NotificationMenuItemFactory.qml+8−9
@@ -41,19 +41,14 @@ Loader {
41 if (component !== undefined) {
41 if (component !== undefined) {
42 return component;
42 return component;
43 }
43 }
44− } else {
45− if (menuData.isSeparator) {
46− return divMenu;
47− }
48 }
44 }
49− return standardMenu;
50 }
45 }
51
46
52 Component {
47 Component {
53 id: textfield
48 id: textfield
54
49
55 Column {
50 Column {
56− spacing: units.gu(.5)
51+ spacing: units.gu(2)
57
52
58 anchors.left: parent.left; anchors.right: parent.right
53 anchors.left: parent.left; anchors.right: parent.right
59
54
@@ -63,8 +58,6 @@ Loader {
63 }
58 }
64
59
65 Label {
60 Label {
66− fontSize: "medium"
67− color: "white"
68 text: menuData.label
61 text: menuData.label
69 }
62 }
70
63
@@ -72,7 +65,7 @@ Loader {
72 id: textfield
65 id: textfield
73
66
74 anchors.left: parent.left; anchors.right: parent.right
67 anchors.left: parent.left; anchors.right: parent.right
75−
68+ height: units.gu(5)
76 onTextChanged: {
69 onTextChanged: {
77 menuModel.changeState(menuIndex, text);
70 menuModel.changeState(menuIndex, text);
78 }
71 }
@@ -85,8 +78,14 @@ Loader {
85 PinLockscreen {
78 PinLockscreen {
86 anchors.left: parent.left; anchors.right: parent.right
79 anchors.left: parent.left; anchors.right: parent.right
87
80
81+ Component.onCompleted: {
82+ menuModel.loadExtendedAttributes(menuIndex, {'x-canonical-pin-length': 'int'});
83+ pinLength = menuData.ext.xCanonicalPinLength;
84+ }
85+
88 onEntered: {
86 onEntered: {
89 menuModel.changeState(menuIndex, passphrase);
87 menuModel.changeState(menuIndex, passphrase);
88+ entryEnabled = false;
90 }
89 }
91
90
92 onCancel: {
91 onCancel: {
Panel/IndicatorRow.qml+51−12
@@ -27,6 +27,8 @@ Item {
27 property alias row: row
27 property alias row: row
28 property QtObject indicatorsModel: null
28 property QtObject indicatorsModel: null
29 property var visibleIndicators: defined
29 property var visibleIndicators: defined
30+ property int overFlowWidth: width
31+ property bool showAll: false
30
32
31 width: units.gu(40)
33 width: units.gu(40)
32 height: units.gu(3)
34 height: units.gu(3)
@@ -42,6 +44,15 @@ Item {
42 }
44 }
43 }
45 }
44
46
47+ Timer {
48+ id: allVisible
49+ interval: 1000
50+
51+ onTriggered: {
52+ showAll = false;
53+ }
54+ }
55+
45 Row {
56 Row {
46 id: row
57 id: row
47
58
@@ -54,16 +65,31 @@ Item {
54 objectName: "rowRepeater"
65 objectName: "rowRepeater"
55 model: indicatorsModel ? indicatorsModel : undefined
66 model: indicatorsModel ? indicatorsModel : undefined
56
67
68+ property int lastCount: 0
69+ onCountChanged: {
70+ if (lastCount < count) {
71+ showAll = true;
72+ allVisible.start();
73+ }
74+ lastCount = count;
75+ }
76+
57 Item {
77 Item {
58 id: itemWrapper
78 id: itemWrapper
59 height: indicatorRow.height
79 height: indicatorRow.height
60 width: indicatorItem.width
80 width: indicatorItem.width
61 visible: indicatorItem.indicatorVisible
81 visible: indicatorItem.indicatorVisible
82+ opacity: 1.0
83+ y: 0
84+ state: "standard"
62
85
63 property int ownIndex: index
86 property int ownIndex: index
64 property alias highlighted: indicatorItem.highlighted
87 property alias highlighted: indicatorItem.highlighted
65 property alias dimmed: indicatorItem.dimmed
88 property alias dimmed: indicatorItem.dimmed
66
89
90+ property bool hidden: !showAll && !indicatorItem.highlighted && (indicatorRow.state == "locked" || indicatorRow.state == "commit")
91+ property bool overflow: row.width - itemWrapper.x > overFlowWidth
92+
67 IndicatorItem {
93 IndicatorItem {
68 id: indicatorItem
94 id: indicatorItem
69 height: parent.height
95 height: parent.height
@@ -87,22 +113,35 @@ Item {
87 }
113 }
88 indicatorRow.visibleIndicators[model.identifier] = indicatorVisible;
114 indicatorRow.visibleIndicators[model.identifier] = indicatorVisible;
89 indicatorRow.visibleIndicatorsChanged();
115 indicatorRow.visibleIndicatorsChanged();
116+
117+ if (indicatorVisible) {
118+ showAll = true;
119+ allVisible.start();
120+ }
90 }
121 }
91 }
122 }
92
123
93− opacity: {
124+ states: [
94− if (!indicatorItem.highlighted && (indicatorRow.state == "locked" || indicatorRow.state == "commit")) {
125+ State {
95− return 0.0;
126+ name: "standard"
96− } else {
127+ when: !hidden && !overflow
97− return 1.0;
128+ },
129+ State {
130+ name: "overflow"
131+ when: hidden || overflow
132+ PropertyChanges { target: itemWrapper; opacity: 0.0 }
98 }
133 }
99− }
134+ ]
100− Behavior on opacity {
135+
136+ transitions: [
137+ Transition {
101− StandardAnimation {
138+ StandardAnimation {
102− // flow away from current index
139+ target: itemWrapper
103− duration: (rowRepeater.count - Math.abs(indicatorRow.currentItemIndex - index)) * (500/rowRepeater.count)
140+ property: "opacity"
141+ duration: 300
104− }
142+ }
105− }
143+ }
144+ ]
106 }
145 }
107 }
146 }
108 }
147 }
Panel/Indicators.qml+2
@@ -29,6 +29,8 @@ Showable {
29 property real openedHeight: units.gu(71)
29 property real openedHeight: units.gu(71)
30 property int panelHeight: units.gu(3)
30 property int panelHeight: units.gu(3)
31 property bool pinnedMode: true //should be set true if indicators menu can cover whole screen
31 property bool pinnedMode: true //should be set true if indicators menu can cover whole screen
32+ property alias overFlowWidth: indicatorRow.overFlowWidth
33+ property alias showAll: indicatorRow.showAll
32
34
33 property int hintValue
35 property int hintValue
34 readonly property int lockThreshold: openedHeight / 2
36 readonly property int lockThreshold: openedHeight / 2
Panel/Indicators/client/IndicatorsList.qml+1−1
@@ -45,7 +45,7 @@ Page {
45 anchors.right: parent.right
45 anchors.right: parent.right
46 objectName: identifier
46 objectName: identifier
47
47
48− text: title
48+ text: identifier
49
49
50 onClicked: {
50 onClicked: {
51 var new_page = Qt.createComponent("IndicatorsPage.qml");
51 var new_page = Qt.createComponent("IndicatorsPage.qml");
Panel/Panel.qml+3−2
@@ -73,6 +73,7 @@ Item {
73
73
74 Indicators {
74 Indicators {
75 id: indicatorsMenu
75 id: indicatorsMenu
76+ objectName: "indicators"
76
77
77 anchors.right: parent.right
78 anchors.right: parent.right
78 y: panelBackground.y
79 y: panelBackground.y
@@ -82,6 +83,7 @@ Item {
82 panelHeight: __panelMinusSeparatorLineHeight
83 panelHeight: __panelMinusSeparatorLineHeight
83 openedHeight: parent.height + (pinnedMode ? 0 : root.panelHeight)
84 openedHeight: parent.height + (pinnedMode ? 0 : root.panelHeight)
84 pinnedMode: !fullscreenMode
85 pinnedMode: !fullscreenMode
86+ overFlowWidth: search.state=="hidden" ? parent.width : parent.width - search.width
85
87
86 property real unitProgress: (height - panelHeight) / (openedHeight - panelHeight)
88 property real unitProgress: (height - panelHeight) / (openedHeight - panelHeight)
87 }
89 }
@@ -120,14 +122,13 @@ Item {
120 return "hidden";
122 return "hidden";
121 }
123 }
122 }
124 }
123− if (root.searchVisible) {
125+ if (root.searchVisible && !indicatorsMenu.showAll) {
124 return "visible";
126 return "visible";
125 }
127 }
126
128
127 return "hidden";
129 return "hidden";
128 }
130 }
129
131
130− width: units.gu(13)
131 height: __panelMinusSeparatorLineHeight
132 height: __panelMinusSeparatorLineHeight
132 anchors {
133 anchors {
133 top: panelBackground.top
134 top: panelBackground.top
Panel/SearchIndicator.qml+9−8
@@ -21,7 +21,7 @@ import "../Components"
21Item {
21Item {
22 id: search
22 id: search
23
23
24− width: units.gu(9)
24+ width: container.width + units.gu(2)
25 height: units.gu(3)
25 height: units.gu(3)
26
26
27 property string headerText: i18n.tr("Search")
27 property string headerText: i18n.tr("Search")
@@ -34,21 +34,24 @@ Item {
34 onClicked: search.clicked()
34 onClicked: search.clicked()
35 }
35 }
36
36
37− Item {
37+ Row {
38 id: container
38 id: container
39 objectName: "container"
39 objectName: "container"
40
40
41− width: parent.width
42 height: parent.height
41 height: parent.height
42+ width: childrenRect.width
43+ anchors {
44+ left: parent.left
45+ leftMargin: units.gu(1)
46+ }
47+ spacing: units.gu(1)
43
48
44− Behavior on opacity { StandardAnimation {} }
49+ Behavior on opacity { StandardAnimation { duration: 300 } }
45
50
46 Image {
51 Image {
47 id: icon
52 id: icon
48 source: "graphics/search.png"
53 source: "graphics/search.png"
49 anchors.verticalCenter: parent.verticalCenter
54 anchors.verticalCenter: parent.verticalCenter
50− anchors.left: parent.left
51− anchors.leftMargin: units.gu(1)
52 }
55 }
53
56
54 Label {
57 Label {
@@ -56,8 +59,6 @@ Item {
56 color: Qt.rgba(0.8, 0.8, 0.8, 1.0)
59 color: Qt.rgba(0.8, 0.8, 0.8, 1.0)
57 fontSize: "small"
60 fontSize: "small"
58 font.capitalization: Font.AllUppercase
61 font.capitalization: Font.AllUppercase
59− anchors.left: icon.right
60− anchors.leftMargin: units.gu(1)
61 anchors.verticalCenter: parent.verticalCenter
62 anchors.verticalCenter: parent.verticalCenter
62 }
63 }
63 }
64 }
Shell.qml+62−46
@@ -99,17 +99,6 @@ FocusScope {
99 }
99 }
100 }
100 }
101
101
102− Connections {
103− target: applicationManager
104− ignoreUnknownSignals: true
105− onFocusRequested: {
106− // TODO: this should be protected to only unlock for certain applications / certain usecases
107− // potentially only in connection with a notification
108− greeter.hide();
109− shell.activateApplication(desktopFile);
110− }
111− }
112−
113 function activateApplication(desktopFile, argument) {
102 function activateApplication(desktopFile, argument) {
114 if (applicationManager) {
103 if (applicationManager) {
115 // For newly started applications, as it takes them time to draw their first frame
104 // For newly started applications, as it takes them time to draw their first frame
@@ -160,10 +149,6 @@ FocusScope {
160 }
149 }
161 }
150 }
162
151
163− OSKController {
164− anchors.fill: parent // as needs to know the geometry of the shell
165− }
166−
167 VolumeControl {
152 VolumeControl {
168 id: volumeControl
153 id: volumeControl
169 }
154 }
@@ -405,7 +390,7 @@ FocusScope {
405
390
406 width: shell.edgeSize
391 width: shell.edgeSize
407 direction: Direction.Leftwards
392 direction: Direction.Leftwards
408− enabled: edgeDemo.dashEnabled
393+ enabled: greeter.showProgress == 0 && edgeDemo.dashEnabled
409 property bool haveApps: mainStage.applications.count > 0 || sideStage.applications.count > 0
394 property bool haveApps: mainStage.applications.count > 0 || sideStage.applications.count > 0
410
395
411 maxTotalDragDistance: haveApps ? parent.width : parent.width * 0.7
396 maxTotalDragDistance: haveApps ? parent.width : parent.width * 0.7
@@ -472,6 +457,26 @@ FocusScope {
472
457
473 dragHandleWidth: shell.edgeSize
458 dragHandleWidth: shell.edgeSize
474
459
460+ property var previousMainApp: null
461+ property var previousSideApp: null
462+
463+ function removeApplicationFocus() {
464+ greeter.previousMainApp = applicationManager.mainStageFocusedApplication;
465+ greeter.previousSideApp = applicationManager.sideStageFocusedApplication;
466+ applicationManager.unfocusCurrentApplication();
467+ }
468+
469+ function restoreApplicationFocus() {
470+ if (greeter.previousMainApp) {
471+ applicationManager.focusApplication(greeter.previousMainApp);
472+ greeter.previousMainApp = null;
473+ }
474+ if (greeter.previousSideApp) {
475+ applicationManager.focusApplication(greeter.previousSideApp);
476+ greeter.previousSideApp = null;
477+ }
478+ }
479+
475 onShownChanged: {
480 onShownChanged: {
476 if (shown) {
481 if (shown) {
477 lockscreen.reset();
482 lockscreen.reset();
@@ -482,6 +487,9 @@ FocusScope {
482 greeter.selected(0);
487 greeter.selected(0);
483 }
488 }
484 greeter.forceActiveFocus();
489 greeter.forceActiveFocus();
490+ removeApplicationFocus();
491+ } else {
492+ restoreApplicationFocus();
485 }
493 }
486 }
494 }
487
495
@@ -498,6 +506,29 @@ FocusScope {
498 launcher.tease();
506 launcher.tease();
499 }
507 }
500 }
508 }
509+
510+ Connections {
511+ target: applicationManager
512+ ignoreUnknownSignals: true
513+ // If any app is focused when greeter is open, it's due to a user action
514+ // like a snap decision (say, an incoming call).
515+ // TODO: these should be protected to only unlock for certain applications / certain usecases
516+ // potentially only in connection with a notification.
517+ onMainStageFocusedApplicationChanged: {
518+ if (greeter.shown && applicationManager.mainStageFocusedApplication) {
519+ greeter.previousMainApp = null // make way for new focused app
520+ greeter.previousSideApp = null
521+ greeter.hide()
522+ }
523+ }
524+ onSideStageFocusedApplicationChanged: {
525+ if (greeter.shown && applicationManager.sideStageFocusedApplication) {
526+ greeter.previousMainApp = null // make way for new focused app
527+ greeter.previousSideApp = null
528+ greeter.hide()
529+ }
530+ }
531+ }
501 }
532 }
502
533
503 InputFilterArea {
534 InputFilterArea {
@@ -510,34 +541,11 @@ FocusScope {
510 id: powerConnection
541 id: powerConnection
511 target: Powerd
542 target: Powerd
512
543
513− property var previousMainApp: null
514− property var previousSideApp: null
515−
516− function setFocused(focused) {
517− if (!focused) {
518− powerConnection.previousMainApp = applicationManager.mainStageFocusedApplication;
519− powerConnection.previousSideApp = applicationManager.sideStageFocusedApplication;
520− applicationManager.unfocusCurrentApplication();
521− } else {
522− if (powerConnection.previousMainApp) {
523− applicationManager.focusApplication(powerConnection.previousMainApp);
524− powerConnection.previousMainApp = null;
525− }
526− if (powerConnection.previousSideApp) {
527− applicationManager.focusApplication(powerConnection.previousSideApp);
528− powerConnection.previousSideApp = null;
529− }
530− }
531− }
532−
533 onDisplayPowerStateChange: {
544 onDisplayPowerStateChange: {
534 // We ignore any display-off signals when the proximity sensor
545 // We ignore any display-off signals when the proximity sensor
535 // is active. This usually indicates something like a phone call.
546 // is active. This usually indicates something like a phone call.
536 if (status == Powerd.Off && (flags & Powerd.UseProximity) == 0) {
547 if (status == Powerd.Off && (flags & Powerd.UseProximity) == 0) {
537− powerConnection.setFocused(false);
538 greeter.showNow();
548 greeter.showNow();
539− } else if (status == Powerd.On) {
540− powerConnection.setFocused(true);
541 }
549 }
542
550
543 // No reason to chew demo CPU when user isn't watching
551 // No reason to chew demo CPU when user isn't watching
@@ -550,13 +558,9 @@ FocusScope {
550 }
558 }
551
559
552 function showHome() {
560 function showHome() {
561+ var animate = !greeter.shown && !stages.shown
553 greeter.hide()
562 greeter.hide()
554− // Animate if moving between application and dash
555− if (!stages.shown) {
556− dash.setCurrentScope("home.scope", true, false)
563+ dash.setCurrentScope("home.scope", animate, false)
557− } else {
558− dash.setCurrentScope("home.scope", false, false)
559− }
560 stages.hide()
564 stages.hide()
561 }
565 }
562
566
@@ -575,7 +579,7 @@ FocusScope {
575 contentEnabled: edgeDemo.panelContentEnabled
579 contentEnabled: edgeDemo.panelContentEnabled
576 }
580 }
577 fullscreenMode: shell.fullscreenMode
581 fullscreenMode: shell.fullscreenMode
578− searchVisible: !greeter.shown && !lockscreen.shown
582+ searchVisible: !greeter.shown && !lockscreen.shown && dash.shown
579
583
580 InputFilterArea {
584 InputFilterArea {
581 anchors {
585 anchors {
@@ -694,10 +698,17 @@ FocusScope {
694 PropertyChanges { target: notifications; width: units.gu(38) }
698 PropertyChanges { target: notifications; width: units.gu(38) }
695 }
699 }
696 ]
700 ]
701+
702+ InputFilterArea {
703+ anchors { left: parent.left; right: parent.right }
704+ height: parent.contentHeight
705+ blockInput: height > 0
706+ }
697 }
707 }
698 }
708 }
699
709
700 focus: true
710 focus: true
711+ onFocusChanged: if (!focus) forceActiveFocus();
701
712
702 InputFilterArea {
713 InputFilterArea {
703 anchors {
714 anchors {
@@ -725,6 +736,11 @@ FocusScope {
725 value: "unity8"
736 value: "unity8"
726 }
737 }
727
738
739+ OSKController {
740+ anchors.topMargin: panel.panelHeight
741+ anchors.fill: parent // as needs to know the geometry of the shell
742+ }
743+
728 //FIXME: This should be handled in the input stack, keyboard shouldnt propagate
744 //FIXME: This should be handled in the input stack, keyboard shouldnt propagate
729 MouseArea {
745 MouseArea {
730 anchors.bottom: parent.bottom
746 anchors.bottom: parent.bottom
data/unity8.confnew file+9
@@ -0,0 +1,9 @@
1+description "Unity Shell v8"
2+author "Ricardo Mendoza <ricmm@ubuntu.com>"
3+
4+start on ((xsession SESSION=ubuntu-touch) or (xsession SESSION=ubuntu-touch-surfaceflinger)) and started dbus
5+stop on desktop-end
6+
7+respawn
8+
9+exec ${BINARY:-unity8} $ARGS
debian/changelog+303
@@ -1,3 +1,306 @@
1+unity8 (7.83+13.10.20131016.2-0ubuntu1) saucy; urgency=low
2+
3+ [ Loïc Minier ]
4+ * Merge ~lool/unity8/drop-setcap-conf. Drop unity8-setcap.conf as this
5+ breaks desktop installs (no boot-hook event is emitted, boot
6+ stalls); add maintscript snippet to rm_conffile on upgrades; this
7+ boot-hook is now shipped under a different name in lxc-android-
8+ config.
9+
10+ [ Michał Sawicz ]
11+ * Ship a camera-app.desktop file and use a custom XDG_DATA_DIRS for
12+ testing.
13+
14+ [ Ubuntu daily release ]
15+ * Automatic snapshot from revision 472
16+
17+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Wed, 16 Oct 2013 23:15:48 +0000
18+
19+unity8 (7.83+13.10.20131016.1-0ubuntu1) saucy; urgency=low
20+
21+ [ Diego Sarmentero ]
22+ * Disable Preview interaction until the scope responds.
23+
24+ [ Albert Astals ]
25+ * Hide placeholder notification.
26+
27+ [ Ubuntu daily release ]
28+ * Automatic snapshot from revision 469
29+
30+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Wed, 16 Oct 2013 17:29:36 +0000
31+
32+unity8 (7.83+13.10.20131016-0ubuntu1) saucy; urgency=low
33+
34+ [ Loïc Minier ]
35+ * Add upstart job to copy unity8 to a new tmpfs, setcap it, and bind-
36+ mount it back; this is an ugly hack to set CAP_SYS_RESOURCE until we
37+ have a root-helper for it.
38+
39+ [ Michal Hruby ]
40+ * Enable definition of scope back references in overridden results.
41+
42+ [ Ubuntu daily release ]
43+ * Automatic snapshot from revision 466
44+
45+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Wed, 16 Oct 2013 11:29:52 +0000
46+
47+unity8 (7.83+13.10.20131015.4-0ubuntu1) saucy; urgency=low
48+
49+ [ Michał Sawicz ]
50+ * Replace ubuntu-touch-session's unity8.conf upstart job.
51+ * Revert r440 that made the dash collapse animation worse, rather than
52+ better.
53+
54+ [ om26er@ubuntu.com ]
55+ * close the app only when the close button is tapped, not the entire
56+ thumbnail
57+
58+ [ Nick Dedekind ]
59+ * Added missing Unity.Indicator mock objects causing qmltests to fail.
60+ Approved by: Michał Sawicz.
61+
62+ [ Christopher Lee ]
63+ * Launch unity8 for autopilot with upstart, and bring unity8 session
64+ over from session-manager-touch.
65+
66+ [ Pawel Stolowski ]
67+ * Temporarily disable category_order changed signal handling.
68+
69+ [ Daniel d'Andrada ]
70+ * OSKController area shouldn't cover the indicators' bar Since ubuntu-
71+ keyboard surface area doesn't cover the indicators' bar,
72+ OSKController should follow suit. Otherwise the OSKContoller's
73+ internal InputFilterArea (and others) wouldn't perfectly overlap the
74+ graphical keyboard rendered by ubuntu-keyboard (i.e. the opaque part
75+ of ubuntu-keyboard's surface).
76+
77+ [ Michael Zanetti ]
78+ * Initialize initialHeight/Width to height/width depending on scaleTo
79+ add checks for initialWidth/Height in the tests change sizes in
80+ tests to something else than the default for initialWidth/Height in
81+ order to catch failures there more easily
82+
83+ [ Omer Akram ]
84+ * Only show search indicator while the Dash is focued.
85+ * Add 2dp left margin for music and video tiles' title.
86+
87+ [ Nicolas d'Offay ]
88+ * Changed Infographics to use Ubuntu font.
89+
90+ [ Ubuntu daily release ]
91+ * Automatic snapshot from revision 463
92+
93+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Tue, 15 Oct 2013 11:05:04 +0000
94+
95+unity8 (7.82+13.10.20131011.2-0ubuntu1) saucy; urgency=low
96+
97+ [ Michał Sawicz ]
98+ * Work around Mir not delivering input to shell after restart, if the
99+ device isn't reinitialized.
100+
101+ [ Albert Astals ]
102+ * Remove unused DashMusic/DashVideos.
103+ * Don't let the user change between scopes if the current one is
104+ moving up/down.
105+ * Fix two uninitialized variable uses reported by valgrind ==17988==
106+ Conditional jump or move depends on uninitialised value(s) ==17988==
107+ at 0x13839F3A: AccountsService::updateDemoEdges()
108+ (AccountsService.cpp:74) ==17988== by 0x13839DA5:
109+ AccountsService::setUser(QString const&) (AccountsService.cpp:45)
110+ ==17988== by 0x1383F67B:
111+ AccountsService::qt_metacall(QMetaObject::Call, int, void**)
112+ (moc_AccountsService.cpp:192) ==17988== by 0x496143D:
113+ StoreProperty(QV8Engine*, QObject*, QQmlPropertyData*,
114+ v8::Handle<v8::Value>) (in /usr/lib/arm-linux-
115+ gnueabihf/libQt5Qml.so.5.0.2) ==17988== ==17988== Conditional jump
116+ or move depends on uninitialised value(s) ==17988== at 0x1383A0F6:
117+ AccountsService::updateStatsWelcomeScreen() (AccountsService.cpp:92)
118+ ==17988== by 0x13839DB1: AccountsService::setUser(QString const&)
119+ (AccountsService.cpp:47) ==17988== by 0x1383F67B:
120+ AccountsService::qt_metacall(QMetaObject::Call, int, void**)
121+ (moc_AccountsService.cpp:192) ==17988== by 0x496143D:
122+ StoreProperty(QV8Engine*, QObject*, QQmlPropertyData*,
123+ v8::Handle<v8::Value>) (in /usr/lib/arm-linux-
124+ gnueabihf/libQt5Qml.so.5.0.2)
125+ * Fix unitialized variable in Scope ==18457== Conditional jump or move
126+ depends on uninitialised value(s) ==18457== at 0x15AD1FD6:
127+ Scope::setActive(bool) (scope.cpp:165) ==18457== by 0x15B0023D:
128+ Scope::qt_metacall(QMetaObject::Call, int, void**)
129+ (moc_scope.cpp:478) ==18457== by 0x48B709F:
130+ QQmlPropertyPrivate::write(QObject*, QQmlPropertyData const&,
131+ QVariant const&, QQmlContextData*,
132+ QFlags<QQmlPropertyPrivate::WriteFlag>) (in /usr/lib/arm-linux-
133+ gnueabihf/libQt5Qml.so.5.0.2)
134+ * Fix crash on the phone For some reason i'm getting v8 crashes
135+ without this when shuting down unity-mir
136+
137+ [ Gerry Boland ]
138+ * Use focusRequested signal from AppManager. WM: AppManager has new
139+ signal to ask shell to request focus for app - use it to properly
140+ animate and focus the app. If app wants to be side stage, but no
141+ side stage available, override the application stage.
142+
143+ [ Nick Dedekind ]
144+ * Only use the root action state as a unitymenumodel ActionStateParser
145+ when needed.
146+
147+ [ Andrea Cimitan ]
148+ * Move the close app icon on top left.
149+ * The header of category list is already on screen after unlock
150+
151+ [ Michael Zanetti ]
152+ * Make the greeter's clock update in sync with the indicators.
153+
154+ [ Omer Akram ]
155+ * Increase dash header height to 5gu.
156+
157+ [ Nicolas d'Offay ]
158+ * Standardised expansion speed in scopes.
159+
160+ [ Ubuntu daily release ]
161+ * Automatic snapshot from revision 449
162+
163+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Fri, 11 Oct 2013 17:26:34 +0000
164+
165+unity8 (7.82+13.10.20131011.1-0ubuntu1) saucy; urgency=low
166+
167+ [ Michał Sawicz ]
168+ * Fix frequent application IDs and drop old AppsAvailableForDownload
169+ model.
170+ * Unrevert r388 now that we have fixed the infinite loop it was
171+ causing in Qt.
172+
173+ [ Steve Langasek ]
174+ * Don't keep a long-lived connection open to upstart when we only use
175+ it for two events, one at load time and one at unload time.
176+
177+ [ Lars Uebernickel ]
178+ * VolumeControl: use 'volume' instead of 'scroll' action The volume
179+ action doesn't show a notification.
180+
181+ [ Michael Terry ]
182+ * Disable DragHandle on right side of screen while the greeter is
183+ animating
184+
185+ [ Marcus Tomlinson ]
186+ * Added missing "enabled" property to "progressMenu" component in the
187+ menu item factory.
188+
189+ [ Michael Zanetti ]
190+ * Add scaleTo: "fit" mode support to LazyImage
191+
192+ [ Andrea Cimitan ]
193+ * Add music and video renderers
194+ * Use shell.edgeSize for BottomBar's EdgeDragArea, detecting gestures
195+ only when they are within the edgeSize.
196+
197+ [ Nick Dedekind ]
198+ * Removed greeter "toHome" animation (LP#1092976) (LP: #1092976)
199+ * Only show Snap Decision notification actions when available.
200+
201+ [ Albert Astals ]
202+ * Dash: Set delegate creation range for inner itemviewss If it's above
203+ the list viewport we set it to the end of the list to precache the
204+ last items It it's below the list viewport we set it to the
205+ beginning to precache the first items Otherwise we set it to the
206+ part of the viewport in the view Approved by: Michał Sawicz.
207+
208+ [ Ubuntu daily release ]
209+ * Automatic snapshot from revision 435
210+
211+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Fri, 11 Oct 2013 09:05:30 +0000
212+
213+unity8 (7.82+13.10.20131010-0ubuntu1) saucy; urgency=low
214+
215+ [ David Callé ]
216+ * Small logic change in preview descriptions line breaks. Multiple new
217+ lines are now replaced by multiple br tags.
218+
219+ [ Nick Dedekind ]
220+ * Use indicator identifier for indicators-client list item label.
221+ * Make sure overflow indicators are hidden and not the search label.
222+
223+ [ Mirco Müller ]
224+ * Tweaks to notifications to improve spec-compliance. - updated
225+ notifications-qmltest to reflect the use of a variant-map for the
226+ hints - made text-fields as heigh as buttons - made the summary
227+ align horizontally to the icon - updated button-height and bubble-
228+ background.
229+
230+ [ Pawel Stolowski ]
231+ * Handle category_order_changes signal from scopes (used in Home only)
232+ and reorder categories accordingly.
233+ * Implementation of albumart image provider for audio content.
234+
235+ [ Michael Terry ]
236+ * Hide the greeter when an app is focused, fixing snap decisions
237+ launching an app in the greeter (like receiving a call).
238+
239+ [ Michael Zanetti ]
240+ * Launcher - remove support for pinning items in the backend After the
241+ latest design changes, recent apps is everything that is contained
242+ in the ApplicationManager. So no need for storing anything else than
243+ pinned apps in the config.
244+
245+ [ Michał Sawicz ]
246+ * Remove the mir socket before starting unity8 during autopilot tests.
247+
248+ [ Ubuntu daily release ]
249+ * Automatic snapshot from revision 420
250+
251+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Thu, 10 Oct 2013 04:15:13 +0000
252+
253+unity8 (7.82+13.10.20131008.1-0ubuntu1) saucy; urgency=low
254+
255+ [ Michal Hruby ]
256+ * Add Scope::isActive property and corresponding tests. (LP: #1230352)
257+
258+ [ Daniel d'Andrada ]
259+ * Move OSKController to the front as it will now also block input
260+ meant to the OSK That's in the unity-mir implementation. The
261+ SurfaceFlinger one is still an empty noop. Currently, when the OSK
262+ is up, both shell and OSK get user input, thus we need the
263+ OSKController to shield our shell components from them. (LP:
264+ #1236773)
265+
266+ [ Michał Sawicz ]
267+ * Add Scope::isActive property and corresponding tests. (LP: #1230352)
268+ * Force focus back on shell in case it loses it for some reason.
269+
270+ [ Ubuntu daily release ]
271+ * Automatic snapshot from revision 409
272+
273+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Tue, 08 Oct 2013 19:14:20 +0000
274+
275+unity8 (7.82+13.10.20131008-0ubuntu1) saucy; urgency=low
276+
277+ [ Michał Sawicz ]
278+ * update previews to match design. (LP: #1224555)
279+ * Add an InputFilterArea in Notifications. (LP: #1233411, #1235215)
280+
281+ [ Ying-Chun Liu ]
282+ * update previews to match design. (LP: #1224555)
283+
284+ [ Albert Astals ]
285+ * Unrevert 376 by reverting r395 and a small fix to fix the cpu
286+ hogging issue . (LP: #1124567)
287+
288+ [ Michael Terry ]
289+ * Add Showable.showNow() method and use it in Shell to immediately
290+ show greeter when we blank the screen rather than animating it. (LP:
291+ #1233564)
292+
293+ [ Michael Zanetti ]
294+ * update previews to match design. (LP: #1224555)
295+
296+ [ Diego Sarmentero ]
297+ * update previews to match design. (LP: #1224555)
298+
299+ [ Ubuntu daily release ]
300+ * Automatic snapshot from revision 404
301+
302+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Tue, 08 Oct 2013 02:57:55 +0000
303+
1unity8 (7.82+13.10.20131007-0ubuntu1) saucy; urgency=low
304unity8 (7.82+13.10.20131007-0ubuntu1) saucy; urgency=low
2
305
3 [ Michał Sawicz ]
306 [ Michał Sawicz ]
debian/control+5
@@ -26,6 +26,7 @@ Build-Depends: cmake,
26 libupstart-dev,
26 libupstart-dev,
27 libusermetricsoutput1-dev,
27 libusermetricsoutput1-dev,
28 libxcb1-dev,
28 libxcb1-dev,
29+ libglib2.0-dev,
29 pkg-config,
30 pkg-config,
30 python:any (>= 2.7),
31 python:any (>= 2.7),
31 python-setuptools,
32 python-setuptools,
@@ -41,6 +42,7 @@ Build-Depends: cmake,
41 qtdeclarative5-test-plugin,
42 qtdeclarative5-test-plugin,
42 qtdeclarative5-ubuntu-ui-toolkit-plugin,
43 qtdeclarative5-ubuntu-ui-toolkit-plugin,
43 qtdeclarative5-xmllistmodel-plugin,
44 qtdeclarative5-xmllistmodel-plugin,
45+ libqt5xmlpatterns5-dev,
44 ttf-ubuntu-font-family,
46 ttf-ubuntu-font-family,
45Standards-Version: 3.9.4
47Standards-Version: 3.9.4
46Homepage: http://launchpad.net/unity
48Homepage: http://launchpad.net/unity
@@ -76,10 +78,13 @@ Depends: gsettings-desktop-schemas,
76 unity8-fake-env | qtubuntu-shell,
78 unity8-fake-env | qtubuntu-shell,
77 unity8-private (= ${binary:Version}),
79 unity8-private (= ${binary:Version}),
78 unity8-private | unity-launcher-impl,
80 unity8-private | unity-launcher-impl,
81+# for setcap:
82+ libcap2-bin,
79 ${misc:Depends},
83 ${misc:Depends},
80 ${shlibs:Depends},
84 ${shlibs:Depends},
81Recommends: ${unity-default-masterscopes},
85Recommends: ${unity-default-masterscopes},
82Breaks: indicator-network (<< 0.5.1)
86Breaks: indicator-network (<< 0.5.1)
87+Replaces: ubuntu-touch-session (<< 0.82~)
83Description: Unity 8 shell
88Description: Unity 8 shell
84 The Unity 8 shell is the primary user interface for Ubuntu devices.
89 The Unity 8 shell is the primary user interface for Ubuntu devices.
85
90
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+1
@@ -13,3 +13,4 @@ usr/share/unity8/Panel
13usr/share/unity8/Shell.qml
13usr/share/unity8/Shell.qml
14usr/share/unity8/SideStage
14usr/share/unity8/SideStage
15usr/share/unity8/graphics
15usr/share/unity8/graphics
16+data/unity8.conf usr/share/upstart/sessions/
debian/unity8.maintscriptnew file+1
@@ -0,0 +1 @@
1+rm_conffile /etc/init/boot-hooks/unity8-setcap.conf
main.cpp+1
@@ -177,6 +177,7 @@ int startShell(int argc, const char** argv, void* server)
177
177
178 int result = application->exec();
178 int result = application->exec();
179
179
180+ delete view;
180 delete mouseTouchAdaptor;
181 delete mouseTouchAdaptor;
181 delete application;
182 delete application;
182
183
plugins/AccountsService/AccountsService.cpp+3−1
@@ -24,7 +24,9 @@
24AccountsService::AccountsService(QObject* parent)
24AccountsService::AccountsService(QObject* parent)
25 : QObject(parent),
25 : QObject(parent),
26 m_service(new AccountsServiceDBusAdaptor(this)),
26 m_service(new AccountsServiceDBusAdaptor(this)),
27− m_user(qgetenv("USER"))
27+ m_user(qgetenv("USER")),
28+ m_demoEdges(false),
29+ m_statsWelcomeScreen(false)
28{
30{
29 connect(m_service, SIGNAL(propertiesChanged(const QString &, const QString &, const QStringList &)),
31 connect(m_service, SIGNAL(propertiesChanged(const QString &, const QString &, const QStringList &)),
30 this, SLOT(propertiesChanged(const QString &, const QString &, const QStringList &)));
32 this, SLOT(propertiesChanged(const QString &, const QString &, const QStringList &)));
plugins/Unity/CMakeLists.txt+1−1
@@ -6,7 +6,7 @@ add_subdirectory(Indicators)
6# Dependencies
6# Dependencies
7include(FindPkgConfig)
7include(FindPkgConfig)
8pkg_check_modules(QTDEE REQUIRED libdee-qt5>=3.2)
8pkg_check_modules(QTDEE REQUIRED libdee-qt5>=3.2)
9−pkg_check_modules(UNITYCORE REQUIRED unity-core-6.0)
9+pkg_check_modules(UNITYCORE REQUIRED unity-core-6.0>=7.1.1)
10
10
11include_directories(
11include_directories(
12 ${CMAKE_CURRENT_SOURCE_DIR}
12 ${CMAKE_CURRENT_SOURCE_DIR}
plugins/Unity/Indicators/indicatorsmanager.cpp+20−24
@@ -47,34 +47,13 @@ public:
47IndicatorsManager::IndicatorsManager(QObject* parent)
47IndicatorsManager::IndicatorsManager(QObject* parent)
48 : QObject(parent)
48 : QObject(parent)
49 , m_loaded(false)
49 , m_loaded(false)
50− , m_upstart(NULL)
51{
50{
52− auto upstartsession = qgetenv("UPSTART_SESSION");
53− if (!upstartsession.isNull()) {
54− DBusConnection * conn = NULL;
55− conn = dbus_connection_open(upstartsession.constData(), NULL);
56− if (conn != NULL) {
57− m_upstart = nih_dbus_proxy_new(NULL, conn,
58− NULL,
59− DBUS_PATH_UPSTART,
60− NULL, NULL);
61− dbus_connection_unref(conn);
62− }
63− }
64−
65− if (m_upstart != NULL) {
66− m_upstart->auto_start = FALSE;
67− }
68}
51}
69
52
70IndicatorsManager::~IndicatorsManager()
53IndicatorsManager::~IndicatorsManager()
71{
54{
72 unload();
55 unload();
73
56
74− if (m_upstart != NULL) {
75− nih_unref(m_upstart, NULL);
76− m_upstart = NULL;
77− }
78}
57}
79
58
80void IndicatorsManager::load()
59void IndicatorsManager::load()
@@ -235,17 +214,34 @@ void IndicatorsManager::setLoaded(bool loaded)
235 m_loaded = loaded;
214 m_loaded = loaded;
236 Q_EMIT loadedChanged(m_loaded);
215 Q_EMIT loadedChanged(m_loaded);
237
216
238− if (m_upstart != NULL) {
217+ auto upstartsession = qgetenv("UPSTART_SESSION");
218+ NihDBusProxy * upstart = NULL;
219+
220+ if (!upstartsession.isNull()) {
221+ DBusConnection * conn = NULL;
222+ conn = dbus_connection_open(upstartsession.constData(), NULL);
223+ if (conn != NULL) {
224+ upstart = nih_dbus_proxy_new(NULL, conn,
225+ NULL,
226+ DBUS_PATH_UPSTART,
227+ NULL, NULL);
228+ dbus_connection_unref(conn);
229+ }
230+ }
231+
232+ if (upstart != NULL) {
239 int event_sent = 0;
233 int event_sent = 0;
240 if (m_loaded) {
234 if (m_loaded) {
241− event_sent = upstart_emit_event_sync(NULL, m_upstart, "indicator-services-start", NULL, 0);
235+ event_sent = upstart_emit_event_sync(NULL, upstart, "indicator-services-start", NULL, 0);
242 } else {
236 } else {
243− event_sent = upstart_emit_event_sync(NULL, m_upstart, "indicator-services-end", NULL, 0);
237+ event_sent = upstart_emit_event_sync(NULL, upstart, "indicator-services-end", NULL, 0);
244 }
238 }
245
239
246 if (event_sent != 0) {
240 if (event_sent != 0) {
247 qWarning() << "Unable to send indicator event to Upstart";
241 qWarning() << "Unable to send indicator event to Upstart";
248 }
242 }
243+ nih_unref(upstart, NULL);
244+ upstart = NULL;
249 }
245 }
250 }
246 }
251}
247}
plugins/Unity/Indicators/indicatorsmanager.h−1
@@ -71,7 +71,6 @@ private:
71 QHash<QString, IndicatorData*> m_indicatorsData;
71 QHash<QString, IndicatorData*> m_indicatorsData;
72 QSharedPointer<QFileSystemWatcher> m_fsWatcher;
72 QSharedPointer<QFileSystemWatcher> m_fsWatcher;
73 bool m_loaded;
73 bool m_loaded;
74− NihDBusProxy * m_upstart;
75};
74};
76
75
77#endif // INDICATORS_MANAGER_H
76#endif // INDICATORS_MANAGER_H
plugins/Unity/Indicators/qml/MenuItemFactory.qml+1
@@ -115,6 +115,7 @@ Item {
115 text: menu && menu.label ? menu.label : ""
115 text: menu && menu.label ? menu.label : ""
116 icon: menu ? menu.icon : ""
116 icon: menu ? menu.icon : ""
117 value : menu ? menu.actionState : 0.0
117 value : menu ? menu.actionState : 0.0
118+ enabled: menu ? menu.sensitive : false
118 }
119 }
119 }
120 }
120
121
plugins/Unity/Indicators/rootactionstate.cpp+15−1
@@ -57,7 +57,7 @@ void RootActionState::setMenu(UnityMenuModel* menu)
57 connect(m_menu, SIGNAL(rowsRemoved(const QModelIndex&, int, int)), SLOT(onModelRowsRemoved(const QModelIndex&, int, int)));
57 connect(m_menu, SIGNAL(rowsRemoved(const QModelIndex&, int, int)), SLOT(onModelRowsRemoved(const QModelIndex&, int, int)));
58 connect(m_menu, SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&, const QVector<int>&)), SLOT(onModelDataChanged(const QModelIndex&, const QModelIndex&, const QVector<int>&)));
58 connect(m_menu, SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&, const QVector<int>&)), SLOT(onModelDataChanged(const QModelIndex&, const QModelIndex&, const QVector<int>&)));
59
59
60− m_menu->setActionStateParser(this);
60+ connect(m_menu, SIGNAL(destroyed()), SLOT(reset()));
61 }
61 }
62 updateActionState();
62 updateActionState();
63 Q_EMIT menuChanged();
63 Q_EMIT menuChanged();
@@ -92,10 +92,24 @@ void RootActionState::onModelDataChanged(const QModelIndex& topLeft, const QMode
92 }
92 }
93}
93}
94
94
95+void RootActionState::reset()
96+{
97+ m_cachedState.clear();
98+ m_menu = NULL;
99+
100+ Q_EMIT menuChanged();
101+ Q_EMIT updated();
102+}
103+
95void RootActionState::updateActionState()
104void RootActionState::updateActionState()
96{
105{
97 if (m_menu && m_menu->rowCount() > 0) {
106 if (m_menu && m_menu->rowCount() > 0) {
107+ ActionStateParser* oldParser = m_menu->actionStateParser();
108+ m_menu->setActionStateParser(this);
109+
98 m_cachedState = m_menu->get(0, "actionState").toMap();
110 m_cachedState = m_menu->get(0, "actionState").toMap();
111+
112+ m_menu->setActionStateParser(oldParser);
99 } else {
113 } else {
100 m_cachedState.clear();
114 m_cachedState.clear();
101 }
115 }
plugins/Unity/Indicators/rootactionstate.h+1
@@ -77,6 +77,7 @@ private Q_SLOTS:
77 void onModelRowsAdded(const QModelIndex& parent, int start, int end);
77 void onModelRowsAdded(const QModelIndex& parent, int start, int end);
78 void onModelRowsRemoved(const QModelIndex& parent, int start, int end);
78 void onModelRowsRemoved(const QModelIndex& parent, int start, int end);
79 void onModelDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight, const QVector<int>&);
79 void onModelDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight, const QVector<int>&);
80+ void reset();
80
81
81private:
82private:
82 void updateActionState();
83 void updateActionState();
plugins/Unity/Launcher/backend/launcherbackend.cpp−33
@@ -30,12 +30,9 @@
30class LauncherBackendItem
30class LauncherBackendItem
31{
31{
32public:
32public:
33− LauncherBackendItem(): pinned(false) {}
34−
35 QString desktopFile;
33 QString desktopFile;
36 QString displayName;
34 QString displayName;
37 QString icon;
35 QString icon;
38− bool pinned;
39};
36};
40
37
41LauncherBackend::LauncherBackend(QObject *parent):
38LauncherBackend::LauncherBackend(QObject *parent):
@@ -135,32 +132,6 @@ QString LauncherBackend::icon(const QString &appId) const
135 return iconName;
132 return iconName;
136}
133}
137
134
138−bool LauncherBackend::isPinned(const QString &appId) const
139−{
140− LauncherBackendItem *item = m_itemCache.value(appId);
141− if (item) {
142− return item->pinned;
143− }
144− return false;
145−}
146−
147−void LauncherBackend::setPinned(const QString &appId, bool pinned)
148−{
149− if (!m_storedApps.contains(appId)) {
150− return;
151− }
152−
153− LauncherBackendItem *item = m_itemCache.value(appId);
154− if (!item) {
155− item = new LauncherBackendItem();
156− m_itemCache.insert(appId, item);
157− }
158− if (item->pinned != pinned) {
159− item->pinned = pinned;
160− syncToAccounts();
161− }
162−}
163−
164QList<QuickListEntry> LauncherBackend::quickList(const QString &appId) const
135QList<QuickListEntry> LauncherBackend::quickList(const QString &appId) const
165{
136{
166 // TODO: Get static (from .desktop file) and dynamic (from the app itself)
137 // TODO: Get static (from .desktop file) and dynamic (from the app itself)
@@ -233,7 +204,6 @@ void LauncherBackend::syncFromAccounts()
233 if (!m_itemCache.contains(appId)) {
204 if (!m_itemCache.contains(appId)) {
234 m_itemCache.insert(appId, parseDesktopFile(df));
205 m_itemCache.insert(appId, parseDesktopFile(df));
235 }
206 }
236− m_itemCache.value(appId)->pinned = true;
237 }
207 }
238 }
208 }
239 }
209 }
@@ -305,7 +275,6 @@ LauncherBackendItem* LauncherBackend::parseDesktopFile(const QString &desktopFil
305 } else {
275 } else {
306 item->icon = "image://theme/" + iconString;
276 item->icon = "image://theme/" + iconString;
307 }
277 }
308− item->pinned = false;
309 return item;
278 return item;
310}
279}
311
280
@@ -326,7 +295,6 @@ void LauncherBackend::loadFromVariant(const QVariantMap &details)
326 item->desktopFile = details.value("desktopFile").toString();
295 item->desktopFile = details.value("desktopFile").toString();
327 item->displayName = details.value("name").toString();
296 item->displayName = details.value("name").toString();
328 item->icon = details.value("icon").toString();
297 item->icon = details.value("icon").toString();
329− item->pinned = details.value("is-pinned").toBool();
330
298
331 m_itemCache.insert(appId, item);
299 m_itemCache.insert(appId, item);
332 m_storedApps.append(appId);
300 m_storedApps.append(appId);
@@ -340,7 +308,6 @@ QVariantMap LauncherBackend::itemToVariant(const QString &appId) const
340 details.insert("name", item->displayName);
308 details.insert("name", item->displayName);
341 details.insert("icon", item->icon);
309 details.insert("icon", item->icon);
342 details.insert("desktopFile", item->desktopFile);
310 details.insert("desktopFile", item->desktopFile);
343− details.insert("is-pinned", item->pinned);
344 return details;
311 return details;
345}
312}
346
313
plugins/Unity/Launcher/backend/launcherbackend.h−15
@@ -88,21 +88,6 @@ public:
88 */
88 */
89 QString icon(const QString &appId) const;
89 QString icon(const QString &appId) const;
90
90
91− /**
92− * @brief Is the app manually pinned?
93− * @returns true if pinned, otherwise false.
94− */
95− bool isPinned(const QString &appId) const;
96−
97− /**
98− * @brief Change the pinned state of an application.
99− * @param appId The application where the pinned flag should be set.
100− * @param pinned true if pinned, otherwise false.
101− */
102− void setPinned(const QString &appId, bool pinned);
103−
104− //TODO: Fill in getters for all the other things needed from the .desktop file.
105−
106 /**
91 /**
107 * @brief Get the QuickList for an application.
92 * @brief Get the QuickList for an application.
108 * @param appId The ID of the application.
93 * @param appId The ID of the application.
plugins/Unity/Launcher/launchermodel.cpp+3−7
@@ -38,11 +38,7 @@ LauncherModel::LauncherModel(QObject *parent):
38 m_backend->displayName(entry),
38 m_backend->displayName(entry),
39 m_backend->icon(entry),
39 m_backend->icon(entry),
40 this);
40 this);
41− if (m_backend->isPinned(entry)) {
42− item->setPinned(true);
41+ item->setPinned(true);
43− } else {
44− item->setRecent(true);
45− }
46 m_list.append(item);
42 m_list.append(item);
47 }
43 }
48}
44}
@@ -129,11 +125,12 @@ void LauncherModel::pin(const QString &appId, int index)
129 if (currentIndex >= 0) {
125 if (currentIndex >= 0) {
130 if (index == -1 || index == currentIndex) {
126 if (index == -1 || index == currentIndex) {
131 m_list.at(currentIndex)->setPinned(true);
127 m_list.at(currentIndex)->setPinned(true);
132− m_backend->setPinned(appId, true);
133 QModelIndex modelIndex = this->index(currentIndex);
128 QModelIndex modelIndex = this->index(currentIndex);
134 Q_EMIT dataChanged(modelIndex, modelIndex);
129 Q_EMIT dataChanged(modelIndex, modelIndex);
135 } else {
130 } else {
136 move(currentIndex, index);
131 move(currentIndex, index);
132+ // move() will store the list to the backend itself, so just exit at this point.
133+ return;
137 }
134 }
138 } else {
135 } else {
139 if (index == -1) {
136 if (index == -1) {
@@ -144,7 +141,6 @@ void LauncherModel::pin(const QString &appId, int index)
144 m_backend->displayName(appId),
141 m_backend->displayName(appId),
145 m_backend->icon(appId));
142 m_backend->icon(appId));
146 item->setPinned(true);
143 item->setPinned(true);
147− m_backend->setPinned(appId, true);
148 m_list.insert(index, item);
144 m_list.insert(index, item);
149 endInsertRows();
145 endInsertRows();
150 }
146 }
plugins/Unity/categories.cpp+72−17
@@ -90,9 +90,37 @@ void Categories::onCategoriesModelChanged(unity::glib::Object<DeeModel> model)
90 delete model;
90 delete model;
91 }
91 }
92 m_results.clear();
92 m_results.clear();
93+ m_categoryOrder.clear();
94+
93 setModel(model);
95 setModel(model);
94}
96}
95
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+
96void
124void
97Categories::setUnityScope(const unity::dash::Scope::Ptr& scope)
125Categories::setUnityScope(const unity::dash::Scope::Ptr& scope)
98{
126{
@@ -101,9 +129,11 @@ Categories::setUnityScope(const unity::dash::Scope::Ptr& scope)
101 // no need to call this, we'll get notified
129 // no need to call this, we'll get notified
102 //setModel(m_unityScope->categories()->model());
130 //setModel(m_unityScope->categories()->model());
103
131
104− m_categoriesChangedConnection.disconnect();
132+ m_signals.disconnectAll();
105− m_categoriesChangedConnection =
106− m_unityScope->categories()->model.changed.connect(sigc::mem_fun(this, &Categories::onCategoriesModelChanged));
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));
107}
137}
108
138
109void
139void
@@ -111,7 +141,9 @@ Categories::onCountChanged()
111{
141{
112 CategoryResults* results = qobject_cast<CategoryResults*>(sender());
142 CategoryResults* results = qobject_cast<CategoryResults*>(sender());
113 if (results) {
143 if (results) {
144+ if (!m_updatedCategories.contains(results->categoryIndex())) {
114− m_updatedCategories << results->categoryIndex();
145+ m_updatedCategories << results->categoryIndex();
146+ }
115 m_timer.start();
147 m_timer.start();
116 }
148 }
117}
149}
@@ -142,7 +174,8 @@ Categories::onEmitCountChanged()
142 roles.append(Categories::RoleCount);
174 roles.append(Categories::RoleCount);
143 Q_FOREACH(int categoryIndex, m_updatedCategories) {
175 Q_FOREACH(int categoryIndex, m_updatedCategories) {
144 if (!m_results.contains(categoryIndex)) continue;
176 if (!m_results.contains(categoryIndex)) continue;
177+ const int realIndex = m_categoryOrder.indexOf(categoryIndex);
145− QModelIndex changedIndex = index(categoryIndex);
178+ const QModelIndex changedIndex = index(realIndex);
146 Q_EMIT dataChanged(changedIndex, changedIndex, roles);
179 Q_EMIT dataChanged(changedIndex, changedIndex, roles);
147 }
180 }
148 m_updatedCategories.clear();
181 m_updatedCategories.clear();
@@ -196,48 +229,70 @@ Categories::data(const QModelIndex& index, int role) const
196 return QVariant();
229 return QVariant();
197 }
230 }
198
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+
199 switch (role) {
252 switch (role) {
200 case RoleCategoryId:
253 case RoleCategoryId:
201− return DeeListModel::data(index, CategoryColumn::ID);
254+ return DeeListModel::data(realIndex, CategoryColumn::ID);
202 case RoleName:
255 case RoleName:
203− return DeeListModel::data(index, CategoryColumn::DISPLAY_NAME);
256+ return DeeListModel::data(realIndex, CategoryColumn::DISPLAY_NAME);
204 case RoleIcon:
257 case RoleIcon:
205− return DeeListModel::data(index, CategoryColumn::ICON_HINT);
258+ return DeeListModel::data(realIndex, CategoryColumn::ICON_HINT);
206 case RoleRenderer:
259 case RoleRenderer:
207− return DeeListModel::data(index, CategoryColumn::RENDERER_NAME);
260+ return DeeListModel::data(realIndex, CategoryColumn::RENDERER_NAME);
208 case RoleContentType:
261 case RoleContentType:
209 {
262 {
210− auto hints = DeeListModel::data(index, CategoryColumn::HINTS).toHash();
263+ auto hints = DeeListModel::data(realIndex, CategoryColumn::HINTS).toHash();
211 return hints.contains("content-type") ? hints["content-type"] : QVariant(QString("default"));
264 return hints.contains("content-type") ? hints["content-type"] : QVariant(QString("default"));
212 }
265 }
213 case RoleRendererHint:
266 case RoleRendererHint:
214 {
267 {
215− auto hints = DeeListModel::data(index, CategoryColumn::HINTS).toHash();
268+ auto hints = DeeListModel::data(realIndex, CategoryColumn::HINTS).toHash();
216 return hints.contains("renderer-hint") ? hints["renderer-hint"] : QVariant(QString());
269 return hints.contains("renderer-hint") ? hints["renderer-hint"] : QVariant(QString());
217 }
270 }
218 case RoleProgressSource:
271 case RoleProgressSource:
219 {
272 {
220− auto hints = DeeListModel::data(index, CategoryColumn::HINTS).toHash();
273+ auto hints = DeeListModel::data(realIndex, CategoryColumn::HINTS).toHash();
221 return hints.contains("progress-source") ? hints["progress-source"] : QVariant();
274 return hints.contains("progress-source") ? hints["progress-source"] : QVariant();
222 }
275 }
223 case RoleHints:
276 case RoleHints:
224− return DeeListModel::data(index, CategoryColumn::HINTS);
277+ return DeeListModel::data(realIndex, CategoryColumn::HINTS);
225 case RoleResults:
278 case RoleResults:
226 if (m_overriddenCategories.size() > 0)
279 if (m_overriddenCategories.size() > 0)
227 {
280 {
228− auto id = DeeListModel::data(index, CategoryColumn::ID).toString();
281+ auto id = DeeListModel::data(realIndex, CategoryColumn::ID).toString();
229 if (m_overriddenCategories.find(id) != m_overriddenCategories.end())
282 if (m_overriddenCategories.find(id) != m_overriddenCategories.end())
230 return QVariant::fromValue(m_overriddenCategories[id]);
283 return QVariant::fromValue(m_overriddenCategories[id]);
231 }
284 }
232− return QVariant::fromValue(getResults(index.row()));
285+ return QVariant::fromValue(getResults(realRow));
233 case RoleCount:
286 case RoleCount:
234 if (m_overriddenCategories.size() > 0)
287 if (m_overriddenCategories.size() > 0)
235 {
288 {
236− auto id = DeeListModel::data(index, CategoryColumn::ID).toString();
289+ auto id = DeeListModel::data(realIndex, CategoryColumn::ID).toString();
237 if (m_overriddenCategories.find(id) != m_overriddenCategories.end())
290 if (m_overriddenCategories.find(id) != m_overriddenCategories.end())
291+ {
238 return QVariant::fromValue(m_overriddenCategories[id]->rowCount());
292 return QVariant::fromValue(m_overriddenCategories[id]->rowCount());
293+ }
239 }
294 }
240− return QVariant::fromValue(getResults(index.row())->rowCount());
295+ return QVariant::fromValue(getResults(realRow)->rowCount());
241 default:
296 default:
242 return QVariant();
297 return QVariant();
243 }
298 }
plugins/Unity/categories.h+10−1
@@ -32,6 +32,9 @@
32#include <QSet>
32#include <QSet>
33#include <QTimer>
33#include <QTimer>
34
34
35+// local
36+#include "signalslist.h"
37+
35class Categories : public DeeListModel
38class Categories : public DeeListModel
36{
39{
37 Q_OBJECT
40 Q_OBJECT
@@ -71,6 +74,7 @@ private Q_SLOTS:
71
74
72private:
75private:
73 void onCategoriesModelChanged(unity::glib::Object<DeeModel> model);
76 void onCategoriesModelChanged(unity::glib::Object<DeeModel> model);
77+ void onCategoryOrderChanged(const std::vector<unsigned int>& cat_order);
74
78
75 DeeListModel* getResults(int index) const;
79 DeeListModel* getResults(int index) const;
76
80
@@ -80,7 +84,12 @@ private:
80 QHash<int, QByteArray> m_roles;
84 QHash<int, QByteArray> m_roles;
81 QMap<QString, QAbstractItemModel*> m_overriddenCategories;
85 QMap<QString, QAbstractItemModel*> m_overriddenCategories;
82 mutable QMap<int, DeeListModel*> m_results;
86 mutable QMap<int, DeeListModel*> m_results;
83− sigc::connection m_categoriesChangedConnection;
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;
84};
93};
85
94
86#endif // CATEGORIES_H
95#endif // CATEGORIES_H
plugins/Unity/categoryresults.cpp+2−1
@@ -81,8 +81,9 @@ CategoryResults::data(const QModelIndex& index, int role) const
81 case RoleIconHint: {
81 case RoleIconHint: {
82 QString giconString(DeeListModel::data(index, ResultsColumn::ICON_HINT).toString());
82 QString giconString(DeeListModel::data(index, ResultsColumn::ICON_HINT).toString());
83 if (giconString.isEmpty()) {
83 if (giconString.isEmpty()) {
84+ QString mimetype(DeeListModel::data(index, ResultsColumn::MIMETYPE).toString());
84 QString uri(DeeListModel::data(index, ResultsColumn::URI).toString());
85 QString uri(DeeListModel::data(index, ResultsColumn::URI).toString());
85− QString thumbnailerUri(uriToThumbnailerProviderString(uri));
86+ QString thumbnailerUri(uriToThumbnailerProviderString(uri, mimetype, DeeListModel::data(index, ResultsColumn::METADATA).toHash()));
86 if (!thumbnailerUri.isNull()) {
87 if (!thumbnailerUri.isNull()) {
87 return QVariant::fromValue(thumbnailerUri);
88 return QVariant::fromValue(thumbnailerUri);
88 }
89 }
plugins/Unity/iconutils.cpp+24−3
@@ -25,6 +25,7 @@
25
25
26#define BASE_THEME_ICON_URI "image://theme/"
26#define BASE_THEME_ICON_URI "image://theme/"
27#define BASE_THUMBNAILER_URI "image://thumbnailer/"
27#define BASE_THUMBNAILER_URI "image://thumbnailer/"
28+#define BASE_ALBUMART_URI "image://albumart/"
28
29
29QString gIconToDeclarativeImageProviderString(QString const &giconString)
30QString gIconToDeclarativeImageProviderString(QString const &giconString)
30{
31{
@@ -91,11 +92,31 @@ QString gIconToDeclarativeImageProviderString(QString const &giconString)
91 return result;
92 return result;
92}
93}
93
94
94−QString uriToThumbnailerProviderString(QString const &uri)
95+QString uriToThumbnailerProviderString(QString const &uri, QString const &mimetype, QVariantHash const &metadata)
95{
96{
96 if (uri.startsWith(QLatin1String("file:///"))) {
97 if (uri.startsWith(QLatin1String("file:///"))) {
98+ bool isAudio = mimetype.startsWith(QLatin1String("audio/"));
99+ QString thumbnailerUri;
100+ if (isAudio) {
101+ thumbnailerUri = BASE_ALBUMART_URI;
102+ if (metadata.contains("content")) {
103+ QVariantHash contentHash = metadata["content"].toHash();
104+ if (contentHash.contains("content")) { // nested content in Home?
105+ contentHash = contentHash["content"].toHash();
106+ }
107+ if (contentHash.contains("album") &&
108+ contentHash.contains("artist")) {
109+ const QString album = contentHash["album"].toString();
110+ const QString artist = contentHash["artist"].toString();
111+ thumbnailerUri.append(QUrl::toPercentEncoding(artist));
112+ thumbnailerUri.append("/");
113+ thumbnailerUri.append(QUrl::toPercentEncoding(album));
114+ }
115+ }
116+ } else {
97− QString thumbnailerUri(BASE_THUMBNAILER_URI);
117+ thumbnailerUri = BASE_THUMBNAILER_URI;
98− thumbnailerUri.append(uri.midRef(7));
118+ thumbnailerUri.append(uri.midRef(7));
119+ }
99 return thumbnailerUri;
120 return thumbnailerUri;
100 }
121 }
101
122
plugins/Unity/iconutils.h+2−1
@@ -21,8 +21,9 @@
21#define ICONUTILS_H
21#define ICONUTILS_H
22
22
23#include <QString>
23#include <QString>
24+#include <QVariant>
24
25
25QString gIconToDeclarativeImageProviderString(QString const &giconString);
26QString gIconToDeclarativeImageProviderString(QString const &giconString);
26−QString uriToThumbnailerProviderString(QString const &uri);
27+QString uriToThumbnailerProviderString(QString const &uri, QString const &mimetype, QVariantHash const &metadata);
27
28
28#endif
29#endif
plugins/Unity/preview.cpp+1−1
@@ -113,7 +113,7 @@ QString Preview::image() const
113 return result;
113 return result;
114 } else {
114 } else {
115 QString sourceMedia(QString::fromStdString(m_unityPreview->image_source_uri()));
115 QString sourceMedia(QString::fromStdString(m_unityPreview->image_source_uri()));
116− QString thumbnailUri(uriToThumbnailerProviderString(sourceMedia));
116+ QString thumbnailUri(uriToThumbnailerProviderString(sourceMedia, m_result->mimeType(), m_result->metadata().toHash()));
117 if (!thumbnailUri.isNull()) return thumbnailUri;
117 if (!thumbnailUri.isNull()) return thumbnailUri;
118 }
118 }
119 } else {
119 } else {
plugins/Unity/scope.cpp+54−7
@@ -28,6 +28,7 @@
28
28
29// Qt
29// Qt
30#include <QUrl>
30#include <QUrl>
31+#include <QUrlQuery>
31#include <QDebug>
32#include <QDebug>
32#include <QtGui/QDesktopServices>
33#include <QtGui/QDesktopServices>
33#include <QQmlEngine>
34#include <QQmlEngine>
@@ -40,9 +41,12 @@
40
41
41Scope::Scope(QObject *parent) : QObject(parent)
42Scope::Scope(QObject *parent) : QObject(parent)
42 , m_formFactor("phone")
43 , m_formFactor("phone")
44+ , m_isActive(false)
43 , m_searchInProgress(false)
45 , m_searchInProgress(false)
44{
46{
45 m_categories.reset(new Categories(this));
47 m_categories.reset(new Categories(this));
48+
49+ connect(this, &Scope::isActiveChanged, this, &Scope::scopeIsActiveChanged);
46}
50}
47
51
48QString Scope::id() const
52QString Scope::id() const
@@ -110,6 +114,11 @@ QString Scope::formFactor() const
110 return m_formFactor;
114 return m_formFactor;
111}
115}
112
116
117+bool Scope::isActive() const
118+{
119+ return m_isActive;
120+}
121+
113Filters* Scope::filters() const
122Filters* Scope::filters() const
114{
123{
115 return m_filters.get();
124 return m_filters.get();
@@ -127,10 +136,12 @@ void Scope::setSearchQuery(const QString& search_query)
127 if (m_searchQuery.isNull() || search_query != m_searchQuery) {
136 if (m_searchQuery.isNull() || search_query != m_searchQuery) {
128 m_searchQuery = search_query;
137 m_searchQuery = search_query;
129 m_cancellable.Renew();
138 m_cancellable.Renew();
130− m_searchInProgress = true;
131 m_unityScope->Search(search_query.toStdString(), std::bind(&Scope::onSearchFinished, this, _1, _2, _3), m_cancellable);
139 m_unityScope->Search(search_query.toStdString(), std::bind(&Scope::onSearchFinished, this, _1, _2, _3), m_cancellable);
132 Q_EMIT searchQueryChanged();
140 Q_EMIT searchQueryChanged();
141+ if (!m_searchInProgress) {
142+ m_searchInProgress = true;
133− Q_EMIT searchInProgressChanged();
143+ Q_EMIT searchInProgressChanged();
144+ }
134 }
145 }
135}
146}
136
147
@@ -152,6 +163,13 @@ void Scope::setFormFactor(const QString& form_factor) {
152 }
163 }
153}
164}
154
165
166+void Scope::setActive(const bool active) {
167+ if (active != m_isActive) {
168+ m_isActive = active;
169+ Q_EMIT isActiveChanged(m_isActive);
170+ }
171+}
172+
155unity::dash::LocalResult Scope::createLocalResult(const QVariant &uri, const QVariant &icon_hint,
173unity::dash::LocalResult Scope::createLocalResult(const QVariant &uri, const QVariant &icon_hint,
156 const QVariant &category, const QVariant &result_type,
174 const QVariant &category, const QVariant &result_type,
157 const QVariant &mimetype, const QVariant &title,
175 const QVariant &mimetype, const QVariant &title,
@@ -186,7 +204,13 @@ void Scope::preview(const QVariant &uri, const QVariant &icon_hint, const QVaria
186 const QVariant &result_type, const QVariant &mimetype, const QVariant &title,
204 const QVariant &result_type, const QVariant &mimetype, const QVariant &title,
187 const QVariant &comment, const QVariant &dnd_uri, const QVariant &metadata)
205 const QVariant &comment, const QVariant &dnd_uri, const QVariant &metadata)
188{
206{
207+ QVariant real_metadata(metadata);
208+ // handle overridden results, since QML doesn't support defining maps
209+ if (metadata.type() == QVariant::String) {
210+ real_metadata = QVariant::fromValue(subscopeUriToMetadataHash(metadata.toString()));
211+ }
212+
189− auto res = createLocalResult(uri, icon_hint, category, result_type, mimetype, title, comment, dnd_uri, metadata);
213+ auto res = createLocalResult(uri, icon_hint, category, result_type, mimetype, title, comment, dnd_uri, real_metadata);
190 m_previewCancellable.Renew();
214 m_previewCancellable.Renew();
191
215
192 // canned queries don't have previews, must be activated
216 // canned queries don't have previews, must be activated
@@ -204,6 +228,7 @@ void Scope::cancelActivation()
204
228
205void Scope::onActivated(unity::dash::LocalResult const& result, unity::dash::ScopeHandledType type, unity::glib::HintsMap const& hints)
229void Scope::onActivated(unity::dash::LocalResult const& result, unity::dash::ScopeHandledType type, unity::glib::HintsMap const& hints)
206{
230{
231+ Q_EMIT activated();
207 // note: we will not get called on SHOW_PREVIEW, instead UnityCore will signal preview_ready.
232 // note: we will not get called on SHOW_PREVIEW, instead UnityCore will signal preview_ready.
208 switch (type)
233 switch (type)
209 {
234 {
@@ -237,6 +262,7 @@ void Scope::onActivated(unity::dash::LocalResult const& result, unity::dash::Sco
237
262
238void Scope::onPreviewReady(unity::dash::LocalResult const& /* result */, unity::dash::Preview::Ptr const& preview)
263void Scope::onPreviewReady(unity::dash::LocalResult const& /* result */, unity::dash::Preview::Ptr const& preview)
239{
264{
265+ Q_EMIT activated();
240 auto prv = Preview::newFromUnityPreview(preview);
266 auto prv = Preview::newFromUnityPreview(preview);
241 // is this the best solution? QML may need to keep more than one preview instance around, so we can't own it.
267 // is this the best solution? QML may need to keep more than one preview instance around, so we can't own it.
242 // passing it by value is not possible.
268 // passing it by value is not possible.
@@ -306,6 +332,7 @@ void Scope::setUnityScope(const unity::dash::Scope::Ptr& scope)
306 m_unityScope->visible.changed.connect(sigc::mem_fun(this, &Scope::visibleChanged));
332 m_unityScope->visible.changed.connect(sigc::mem_fun(this, &Scope::visibleChanged));
307 m_unityScope->shortcut.changed.connect(sigc::mem_fun(this, &Scope::shortcutChanged));
333 m_unityScope->shortcut.changed.connect(sigc::mem_fun(this, &Scope::shortcutChanged));
308 m_unityScope->connected.changed.connect(sigc::mem_fun(this, &Scope::connectedChanged));
334 m_unityScope->connected.changed.connect(sigc::mem_fun(this, &Scope::connectedChanged));
335+ m_unityScope->results_dirty.changed.connect(sigc::mem_fun(this, &Scope::resultsDirtyToggled));
309
336
310 /* FIXME: signal should be forwarded instead of calling the handler directly */
337 /* FIXME: signal should be forwarded instead of calling the handler directly */
311 m_unityScope->activated.connect(sigc::mem_fun(this, &Scope::onActivated));
338 m_unityScope->activated.connect(sigc::mem_fun(this, &Scope::onActivated));
@@ -332,13 +359,31 @@ void Scope::synchronizeStates()
332 /* Forward local states to m_unityScope */
359 /* Forward local states to m_unityScope */
333 if (!m_searchQuery.isNull()) {
360 if (!m_searchQuery.isNull()) {
334 m_cancellable.Renew();
361 m_cancellable.Renew();
335− m_searchInProgress = true;
336 m_unityScope->Search(m_searchQuery.toStdString(), std::bind(&Scope::onSearchFinished, this, _1, _2, _3), m_cancellable);
362 m_unityScope->Search(m_searchQuery.toStdString(), std::bind(&Scope::onSearchFinished, this, _1, _2, _3), m_cancellable);
363+ if (!m_searchInProgress) {
364+ m_searchInProgress = true;
337− Q_EMIT searchInProgressChanged();
365+ Q_EMIT searchInProgressChanged();
366+ }
338 }
367 }
339 }
368 }
340}
369}
341
370
371+void Scope::scopeIsActiveChanged()
372+{
373+ if (!isActive() || !m_unityScope || !m_unityScope->results_dirty()) return;
374+
375+ // force new search
376+ synchronizeStates();
377+}
378+
379+void Scope::resultsDirtyToggled(bool results_dirty)
380+{
381+ if (!results_dirty || !isActive()) return;
382+
383+ // force new search
384+ synchronizeStates();
385+}
386+
342void Scope::onSearchFinished(std::string const& /* query */, unity::glib::HintsMap const& hints, unity::glib::Error const& err)
387void Scope::onSearchFinished(std::string const& /* query */, unity::glib::HintsMap const& hints, unity::glib::Error const& err)
343{
388{
344 QString hint;
389 QString hint;
@@ -346,8 +391,10 @@ void Scope::onSearchFinished(std::string const& /* query */, unity::glib::HintsM
346 GError* error = const_cast<unity::glib::Error&>(err);
391 GError* error = const_cast<unity::glib::Error&>(err);
347
392
348 if (!err || !g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
393 if (!err || !g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
394+ if (m_searchInProgress) {
349− m_searchInProgress = false;
395+ m_searchInProgress = false;
350− Q_EMIT searchInProgressChanged();
396+ Q_EMIT searchInProgressChanged();
397+ }
351 } else {
398 } else {
352 // no need to check the results hint, we're still searching
399 // no need to check the results hint, we're still searching
353 return;
400 return;
plugins/Unity/scope.h+8
@@ -54,6 +54,7 @@ class Scope : public QObject
54 Q_PROPERTY(QString searchQuery READ searchQuery WRITE setSearchQuery NOTIFY searchQueryChanged)
54 Q_PROPERTY(QString searchQuery READ searchQuery WRITE setSearchQuery NOTIFY searchQueryChanged)
55 Q_PROPERTY(QString noResultsHint READ noResultsHint WRITE setNoResultsHint NOTIFY noResultsHintChanged)
55 Q_PROPERTY(QString noResultsHint READ noResultsHint WRITE setNoResultsHint NOTIFY noResultsHintChanged)
56 Q_PROPERTY(QString formFactor READ formFactor WRITE setFormFactor NOTIFY formFactorChanged)
56 Q_PROPERTY(QString formFactor READ formFactor WRITE setFormFactor NOTIFY formFactorChanged)
57+ Q_PROPERTY(bool isActive READ isActive WRITE setActive NOTIFY isActiveChanged)
57
58
58public:
59public:
59 explicit Scope(QObject *parent = 0);
60 explicit Scope(QObject *parent = 0);
@@ -73,11 +74,13 @@ public:
73 QString searchQuery() const;
74 QString searchQuery() const;
74 QString noResultsHint() const;
75 QString noResultsHint() const;
75 QString formFactor() const;
76 QString formFactor() const;
77+ bool isActive() const;
76
78
77 /* setters */
79 /* setters */
78 void setSearchQuery(const QString& search_query);
80 void setSearchQuery(const QString& search_query);
79 void setNoResultsHint(const QString& hint);
81 void setNoResultsHint(const QString& hint);
80 void setFormFactor(const QString& form_factor);
82 void setFormFactor(const QString& form_factor);
83+ void setActive(const bool);
81
84
82 Q_INVOKABLE void activate(const QVariant &uri, const QVariant &icon_hint, const QVariant &category,
85 Q_INVOKABLE void activate(const QVariant &uri, const QVariant &icon_hint, const QVariant &category,
83 const QVariant &result_type, const QVariant &mimetype, const QVariant &title,
86 const QVariant &result_type, const QVariant &mimetype, const QVariant &title,
@@ -106,6 +109,7 @@ Q_SIGNALS:
106 void searchQueryChanged();
109 void searchQueryChanged();
107 void noResultsHintChanged();
110 void noResultsHintChanged();
108 void formFactorChanged();
111 void formFactorChanged();
112+ void isActiveChanged(bool);
109 void filtersChanged();
113 void filtersChanged();
110
114
111 // signals triggered by activate(..) or preview(..) requests.
115 // signals triggered by activate(..) or preview(..) requests.
@@ -113,11 +117,13 @@ Q_SIGNALS:
113 void showDash();
117 void showDash();
114 void hideDash();
118 void hideDash();
115 void gotoUri(const QString &uri);
119 void gotoUri(const QString &uri);
120+ void activated();
116
121
117 void activateApplication(const QString &desktop);
122 void activateApplication(const QString &desktop);
118
123
119private Q_SLOTS:
124private Q_SLOTS:
120 void synchronizeStates();
125 void synchronizeStates();
126+ void scopeIsActiveChanged();
121 void onSearchFinished(std::string const &, unity::glib::HintsMap const &, unity::glib::Error const&);
127 void onSearchFinished(std::string const &, unity::glib::HintsMap const &, unity::glib::Error const&);
122
128
123private:
129private:
@@ -129,6 +135,7 @@ private:
129 void onActivated(unity::dash::LocalResult const& result, unity::dash::ScopeHandledType type, unity::glib::HintsMap const& hints);
135 void onActivated(unity::dash::LocalResult const& result, unity::dash::ScopeHandledType type, unity::glib::HintsMap const& hints);
130 void onPreviewReady(unity::dash::LocalResult const& result, unity::dash::Preview::Ptr const& preview);
136 void onPreviewReady(unity::dash::LocalResult const& result, unity::dash::Preview::Ptr const& preview);
131 void fallbackActivate(const QString& uri);
137 void fallbackActivate(const QString& uri);
138+ void resultsDirtyToggled(bool);
132
139
133 unity::dash::Scope::Ptr m_unityScope;
140 unity::dash::Scope::Ptr m_unityScope;
134 std::unique_ptr<Categories> m_categories;
141 std::unique_ptr<Categories> m_categories;
@@ -136,6 +143,7 @@ private:
136 QString m_searchQuery;
143 QString m_searchQuery;
137 QString m_noResultsHint;
144 QString m_noResultsHint;
138 QString m_formFactor;
145 QString m_formFactor;
146+ bool m_isActive;
139 bool m_searchInProgress;
147 bool m_searchInProgress;
140 unity::glib::Cancellable m_cancellable;
148 unity::glib::Cancellable m_cancellable;
141 unity::glib::Cancellable m_previewCancellable;
149 unity::glib::Cancellable m_previewCancellable;
plugins/Unity/variantutils.cpp+31
@@ -17,6 +17,10 @@
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
18 */
19
19
20+#include <QUrl>
21+#include <QUrlQuery>
22+#include <QStringList>
23+
20#include <deelistmodel.h>
24#include <deelistmodel.h>
21#include "variantutils.h"
25#include "variantutils.h"
22
26
@@ -49,3 +53,30 @@ QVariantHash convertToQVariantHash(const unity::glib::HintsMap& var)
49 }
53 }
50 return hash;
54 return hash;
51}
55}
56+
57+/* This will translate uris in the form of:
58+ * "subscope:master.scope/sub.scope?foo=bar"
59+ * into a QVariantHash that can be passed as a metadata field to scope.
60+ */
61+QVariantHash subscopeUriToMetadataHash(const QString &metadata_string)
62+{
63+ QUrl metadata_url(metadata_string);
64+ if (metadata_url.scheme() == QLatin1String("subscope")) {
65+ QString subscope_uri(metadata_url.toString(QUrl::RemoveScheme | QUrl::RemoveQuery));
66+ QVariantHash new_metadata;
67+ QUrlQuery query(metadata_url.query());
68+ QList<QPair<QString,QString>> queryItems(query.queryItems());
69+ for (auto it = queryItems.begin(); it != queryItems.end(); ++it) {
70+ new_metadata[it->first] = QVariant::fromValue(it->second);
71+ }
72+ QStringList parts(subscope_uri.split(QChar('/')));
73+ for (int i = parts.size() - 1; i >= 0; i--) {
74+ QVariantHash inner;
75+ inner["scope-id"] = QVariant::fromValue(parts[i]);
76+ inner["content"] = QVariant::fromValue(new_metadata);
77+ new_metadata = inner;
78+ }
79+ return new_metadata;
80+ }
81+ return QVariantHash();
82+}
plugins/Unity/variantutils.h+3−1
@@ -28,6 +28,8 @@
28
28
29unity::glib::HintsMap convertToHintsMap(const QHash<QString, QVariant> &val);
29unity::glib::HintsMap convertToHintsMap(const QHash<QString, QVariant> &val);
30unity::glib::HintsMap convertToHintsMap(const QVariant &var);
30unity::glib::HintsMap convertToHintsMap(const QVariant &var);
31−QVariantHash convertToQVariantHash(const unity::glib::HintsMap& var);
31+QVariantHash convertToQVariantHash(const unity::glib::HintsMap &var);
32+/* used in tests, so we have to export it */
33+Q_DECL_EXPORT QVariantHash subscopeUriToMetadataHash(const QString &metadata_string);
32
34
33#endif
35#endif
plugins/Utils/CMakeLists.txt+12−1
@@ -1,11 +1,19 @@
1+# Dependencies
2+include(FindPkgConfig)
3+
4+pkg_search_module(GIO REQUIRED gio-2.0)
5+
1include_directories(
6include_directories(
2 ${CMAKE_CURRENT_SOURCE_DIR}
7 ${CMAKE_CURRENT_SOURCE_DIR}
3 ${CMAKE_CURRENT_BINARY_DIR}
8 ${CMAKE_CURRENT_BINARY_DIR}
4 ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
9 ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
10+ ${GIO_INCLUDE_DIRS}
5)
11)
6
12
7set(QMLPLUGIN_SRC
13set(QMLPLUGIN_SRC
14+ albumartprovider.cpp
8 applicationpaths.h
15 applicationpaths.h
16+ mediaartcache.cpp
9 qlimitproxymodelqml.cpp
17 qlimitproxymodelqml.cpp
10 qsortfilterproxymodelqml.cpp
18 qsortfilterproxymodelqml.cpp
11 ubuntuwindow.cpp
19 ubuntuwindow.cpp
@@ -16,13 +24,16 @@ set(QMLPLUGIN_SRC
16add_library(Utils-qml SHARED
24add_library(Utils-qml SHARED
17 ${QMLPLUGIN_SRC}
25 ${QMLPLUGIN_SRC}
18 )
26 )
27+
28+target_link_libraries(Utils-qml ${GIO_LDFLAGS})
29+
19# Because this is an internal support library, we want
30# Because this is an internal support library, we want
20# to expose all symbols in it. Consider changing this
31# to expose all symbols in it. Consider changing this
21# either to a static library or just using the
32# either to a static library or just using the
22# files directly in targets.
33# files directly in targets.
23set_target_properties(Utils-qml PROPERTIES COMPILE_FLAGS -fvisibility=default)
34set_target_properties(Utils-qml PROPERTIES COMPILE_FLAGS -fvisibility=default)
24
35
25−qt5_use_modules(Utils-qml Qml Quick DBus)
36+qt5_use_modules(Utils-qml Qml Quick DBus Network XmlPatterns)
26
37
27# export the qmldir qmltypes and plugin files
38# export the qmldir qmltypes and plugin files
28export_qmlfiles(Utils Utils)
39export_qmlfiles(Utils Utils)
plugins/Utils/albumartprovider.cppnew file+231
@@ -0,0 +1,231 @@
1+/*
2+ * Copyright 2013 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU Lesser General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ * Authors: Jussi Pakkanen <jussi.pakkanen@canonical.com>
17+ * Pawel Stolowski <pawel.stolowski@canonical.com>
18+*/
19+
20+#include "albumartprovider.h"
21+#include <QString>
22+#include <QNetworkAccessManager>
23+#include <QEventLoop>
24+#include <QNetworkRequest>
25+#include <QNetworkReply>
26+#include <QXmlQuery>
27+#include <QTemporaryFile>
28+#include <QBuffer>
29+#include <QDebug>
30+#include <QFile>
31+#include <QStringList>
32+#include <QByteArray>
33+#include <QImage>
34+#include <QUrl>
35+
36+using namespace std;
37+
38+const std::string AlbumArtProvider::DEFAULT_ALBUM_ART = "/usr/share/unity/icons/album_missing.png";
39+const std::string AlbumArtProvider::UNITY_LENS_SCHEMA = "com.canonical.Unity.Lenses";
40+
41+AlbumArtProvider::AlbumArtProvider()
42+ : QQuickImageProvider(QQmlImageProviderBase::Image, QQmlImageProviderBase::ForceAsynchronousImageLoading),
43+ m_settings(nullptr)
44+{
45+ auto schemas = g_settings_list_schemas();
46+ if (schemas) {
47+ for (int i = 0; schemas[i]; i++) {
48+ if (g_strcmp0(schemas[i], UNITY_LENS_SCHEMA.c_str()) == 0) {
49+ m_settings = g_settings_new(UNITY_LENS_SCHEMA.c_str());
50+ break;
51+ }
52+ }
53+ }
54+ if (m_settings == nullptr) {
55+ qWarning() << "Missing" << QString::fromStdString(UNITY_LENS_SCHEMA) << "schema";
56+ }
57+}
58+
59+AlbumArtProvider::~AlbumArtProvider()
60+{
61+ if (m_settings)
62+ g_object_unref(m_settings);
63+}
64+
65+std::string AlbumArtProvider::get_lastfm_url(const albuminfo &ai) {
66+ QString artist = QString::fromStdString(ai.artist);
67+ QString album = QString::fromStdString(ai.album);
68+
69+ /// @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
71+ /// to it should be done ASAP.
72+ QString request = QString("http://ws.audioscrobbler.com/1.0/album/%1/%2/info.xml").arg(artist)
73+ .arg(album)
74+ .toHtmlEscaped();
75+ QScopedPointer<QNetworkAccessManager> am(new QNetworkAccessManager);
76+ QNetworkReply *reply = am->get(QNetworkRequest(QUrl(request)));
77+ QEventLoop loop;
78+ QObject::connect(am.data(), &QNetworkAccessManager::finished, &loop, &QEventLoop::quit);
79+ loop.exec();
80+
81+ if (reply->error() != QNetworkReply::NoError) {
82+ qWarning() << "Error getting the XML:" << reply->errorString();
83+ return "";
84+ }
85+
86+ QXmlQuery query;
87+ QBuffer tmp;
88+ tmp.setData(reply->readAll());
89+ tmp.open(QIODevice::ReadOnly);
90+ query.bindVariable("reply", &tmp);
91+ query.setQuery("doc($reply)/album/coverart/large[1]/text()");
92+ QString image;
93+ query.evaluateTo(&image);
94+ image = image.trimmed();
95+
96+ // return empty if last.fm tries to offer their default
97+ // fallback artwork
98+ if (image.contains("catalogue/noimage")) {
99+ return "";
100+ }
101+
102+ return image.toStdString();
103+}
104+
105+bool AlbumArtProvider::download_and_store(const std::string &image_url, const std::string &output_file) {
106+ QString url = QString::fromStdString(image_url);
107+ QString fileName = QString::fromStdString(output_file);
108+
109+ QScopedPointer<QNetworkAccessManager> am(new QNetworkAccessManager);
110+ QNetworkReply *reply = am->get(QNetworkRequest(QUrl(url)));
111+ QEventLoop loop;
112+ QObject::connect(am.data(), &QNetworkAccessManager::finished, &loop, &QEventLoop::quit);
113+ loop.exec();
114+
115+ if (reply->error() != QNetworkReply::NoError) {
116+ qWarning() << "Error getting the image:" << reply->errorString();
117+ return false;
118+ }
119+
120+ QFile file(fileName);
121+ if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
122+ qWarning() << "Could not open file for writing:" << file.errorString();
123+ return false;
124+ }
125+ if (file.write(reply->readAll()) == -1){
126+ qWarning() << "Could not write the image:" << file.error();
127+ return false;
128+ }
129+
130+ return true;
131+}
132+
133+void AlbumArtProvider::fix_format(const std::string &fname) {
134+ // MediaArtSpec requires jpg. Convert to it if necessary.
135+ FILE *f = fopen(fname.c_str(), "r");
136+ if(!f)
137+ return;
138+ unsigned char buf[2];
139+ fread(buf, 1, 2, f);
140+ fclose(f);
141+ if(buf[0] == 0xff && buf[1] == 0xd8) {
142+ return;
143+ }
144+ QImage im(fname.c_str());
145+ im.save(fname.c_str(), "JPEG");
146+}
147+
148+std::string AlbumArtProvider::get_image(const std::string &artist, const std::string &album) {
149+ albuminfo info;
150+
151+ info.artist = artist;
152+ info.album = album;
153+
154+ if(info.album.empty() || info.artist.empty()) {
155+ return DEFAULT_ALBUM_ART;
156+ }
157+ if(cache.has_art(info.artist, info.album)) {
158+ // Image may have expired from cache between these two lines.
159+ // It might expire before we return. C'est la vie.
160+ return cache.get_art_file(info.artist, info.album);
161+ }
162+
163+ if (m_settings != nullptr && g_strcmp0(g_settings_get_string(m_settings, "remote-content-search"), "all") !=0) {
164+ qDebug() << "Remote content disabled";
165+ return DEFAULT_ALBUM_ART;
166+ }
167+
168+ std::string image_url = get_lastfm_url(info);
169+ if(image_url.empty()) {
170+ return DEFAULT_ALBUM_ART;
171+ }
172+ QTemporaryFile tempFile;
173+ tempFile.open();
174+ tempFile.setAutoRemove(true);
175+ QString fname = tempFile.fileName();
176+ std::string tmpname = fname.toUtf8().data();
177+
178+ if(!download_and_store(image_url, tmpname)) {
179+ return DEFAULT_ALBUM_ART;
180+ }
181+ fix_format(tmpname.c_str());
182+ QFile f(fname);
183+ if(!f.open(QIODevice::ReadWrite)) {
184+ return DEFAULT_ALBUM_ART;
185+ }
186+ QByteArray arr = f.readAll();
187+ f.close();
188+
189+ cache.add_art(info.artist, info.album, arr.data(), arr.size());
190+ try {
191+ std::string res = cache.get_art_file(info.artist, info.album);
192+ if(res.empty())
193+ return DEFAULT_ALBUM_ART;
194+ return res;
195+ } catch(...) {
196+ }
197+ return DEFAULT_ALBUM_ART;
198+}
199+
200+QImage AlbumArtProvider::requestImage(const QString &id, QSize *realSize, const QSize &requestedSize) {
201+ Q_UNUSED(requestedSize)
202+
203+ const QStringList parts = id.split("/");
204+ if (parts.size() != 2) {
205+ qWarning() << "Invalid albumart uri:" << id;
206+ return QImage(QString::fromStdString(DEFAULT_ALBUM_ART));
207+ }
208+ const std::string artist = QUrl::fromPercentEncoding(parts[0].toUtf8()).toStdString();
209+ const std::string album = QUrl::fromPercentEncoding(parts[1].toUtf8()).toStdString();
210+
211+ std::string tgt_path;
212+ try {
213+ tgt_path = get_image(artist, album);
214+ if(!tgt_path.empty()) {
215+ QString tgt(tgt_path.c_str());
216+ QImage image;
217+ image.load(tgt);
218+ // FIXME: Rescale to requested size preserving aspect.
219+ *realSize = image.size();
220+ return image;
221+ }
222+ } catch(std::exception &e) {
223+ qDebug() << "Album art loader failed: " << e.what();
224+ } catch(...) {
225+ qDebug() << "Unknown error when generating image.";
226+ }
227+
228+ QImage fallback(QString::fromStdString(DEFAULT_ALBUM_ART));
229+ *realSize = fallback.size();
230+ return fallback;
231+}
plugins/Utils/albumartprovider.hnew file+56
@@ -0,0 +1,56 @@
1+/*
2+ * Copyright 2013 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU Lesser General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ * Authors: Jussi Pakkanen <jussi.pakkanen@canonical.com>
17+*/
18+
19+#ifndef ALBUMART_PROVIDER_H_
20+#define ALBUMART_PROVIDER_H_
21+
22+#include <string>
23+#include <stdexcept>
24+#include <QQuickImageProvider>
25+#include <gio/gio.h>
26+
27+#include "mediaartcache.h"
28+
29+struct albuminfo {
30+ std::string artist;
31+ std::string album;
32+};
33+
34+class AlbumArtProvider : public QQuickImageProvider
35+{
36+public:
37+ AlbumArtProvider();
38+ ~AlbumArtProvider();
39+ QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize);
40+
41+ std::string get_image(const std::string &artist, const std::string &album);
42+
43+ const static std::string DEFAULT_ALBUM_ART;
44+ const static std::string UNITY_LENS_SCHEMA;
45+private:
46+ MediaArtCache cache;
47+ GSettings *m_settings;
48+
49+ void fix_format(const std::string &fname);
50+
51+ std::string get_lastfm_url(const albuminfo &ai);
52+
53+ bool download_and_store(const std::string &image_url, const std::string &output_file);
54+};
55+
56+#endif
plugins/Utils/mediaartcache.cppnew file+178
@@ -0,0 +1,178 @@
1+/*
2+ * This file is part of the Ubuntu TV Media Scanner
3+ * Copyright (C) 2012-2013 Canonical Ltd.
4+ *
5+ * This program is free software: you can redistribute it and/or modify
6+ * it under the terms of the GNU Lesser General Public License version 3 as
7+ * published by the Free Software Foundation.
8+ *
9+ * This program is distributed in the hope that it will be useful,
10+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+ * GNU Lesser General Public License for more details.
13+ *
14+ * You should have received a copy of the GNU Lesser General Public License
15+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
16+ *
17+ * Authored by: Jussi Pakkanen <jussi.pakkanen@canonical.com>
18+ */
19+
20+#include"mediaartcache.h"
21+
22+#include<dirent.h>
23+#include<sys/stat.h>
24+#include<fcntl.h>
25+#include<unistd.h>
26+#include<errno.h>
27+#include<stdio.h>
28+#include<string.h>
29+#include<stdlib.h>
30+#include<assert.h>
31+#include<utime.h>
32+
33+#include<glib.h>
34+
35+#include<vector>
36+#include<algorithm>
37+#include<stdexcept>
38+
39+using namespace std;
40+
41+static string md5(const string &str) {
42+ const unsigned char *buf = (const unsigned char *)str.c_str();
43+ char *normalized = g_utf8_normalize((const gchar*)buf, str.size(), G_NORMALIZE_ALL);
44+ string final;
45+ gchar *result;
46+
47+ if(normalized) {
48+ buf = (const unsigned char*)normalized;
49+ }
50+ gssize bytes = str.length();
51+
52+ result = g_compute_checksum_for_data(G_CHECKSUM_MD5, buf, bytes);
53+ final = result;
54+ g_free((gpointer)normalized);
55+ g_free(result);
56+ return final;
57+}
58+
59+MediaArtCache::MediaArtCache() {
60+ string xdg_base = g_get_user_cache_dir();
61+
62+ if (xdg_base == "") {
63+ string s("Could not determine cache dir.");
64+ throw runtime_error(s);
65+ }
66+ int ec = mkdir(xdg_base.c_str(), S_IRUSR | S_IWUSR | S_IXUSR);
67+ if (ec < 0 && errno != EEXIST) {
68+ string s("Could not create base dir.");
69+ throw runtime_error(s);
70+ }
71+ root_dir = xdg_base + "/media-art";
72+ ec = mkdir(root_dir.c_str(), S_IRUSR | S_IWUSR | S_IXUSR);
73+ if (ec < 0 && errno != EEXIST) {
74+ string s("Could not create cache dir.");
75+ throw runtime_error(s);
76+ }
77+}
78+
79+bool MediaArtCache::has_art(const std::string &artist, const std::string &album) const {
80+ string fname = get_art_file(artist, album);
81+ return access(fname.c_str(), R_OK) == 0;
82+}
83+
84+void MediaArtCache::add_art(const std::string &artist, const std::string &album,
85+ char *data, unsigned int datalen) {
86+ string abs_fname = get_full_filename(artist, album);
87+ GError *err = nullptr;
88+ if(!g_file_set_contents(abs_fname.c_str(), data, datalen, &err)) {
89+ string e("Could not write file ");
90+ e += abs_fname;
91+ e += ": ";
92+ e += err->message;
93+ g_error_free(err);
94+ throw runtime_error(e);
95+ }
96+}
97+
98+string MediaArtCache::get_art_file(const std::string &artist, const std::string &album) const {
99+ string abs_fname = get_full_filename(artist, album);
100+
101+ if (access(abs_fname.c_str(), R_OK) == 0) {
102+ utime(abs_fname.c_str(), nullptr); // update access times to current time
103+ return abs_fname;
104+ }
105+ return "";
106+}
107+
108+std::string MediaArtCache::get_full_filename(const std::string &artist, const std::string & album) const {
109+ return root_dir + "/" + compute_base_name(artist, album);
110+}
111+
112+
113+std::string MediaArtCache::compute_base_name(const std::string &artist, const std::string &album) const {
114+ string type = "album";
115+ string h1 = md5(artist);
116+ string h2 = md5(album);
117+ return type + "-" + h1 + "-" + h2 + ".jpg";
118+}
119+
120+
121+void MediaArtCache::clear() const {
122+ DIR *d = opendir(root_dir.c_str());
123+ if(!d) {
124+ string s = "Something went wrong.";
125+ throw runtime_error(s);
126+ }
127+ struct dirent *entry, *de;
128+ entry = (dirent*)malloc(sizeof(dirent) + NAME_MAX);
129+ while(readdir_r(d, entry, &de) == 0 && de) {
130+ string basename = entry->d_name;
131+ if (basename == "." || basename == "..")
132+ continue;
133+ string fname = root_dir + "/" + basename;
134+ if(remove(fname.c_str()) < 0) {
135+ // This is not really an error worth
136+ // halting everything for.
137+ fprintf(stderr, "Could not delete file %s: %s.\n", fname.c_str(),
138+ strerror(errno));
139+ }
140+ }
141+ free(entry);
142+ closedir(d);
143+}
144+
145+void MediaArtCache::prune() {
146+ vector<pair<double, string>> mtimes;
147+ DIR *d = opendir(root_dir.c_str());
148+ if(!d) {
149+ string s = "Something went wrong.";
150+ throw runtime_error(s);
151+ }
152+ struct dirent *entry, *de;
153+ entry = (dirent*)malloc(sizeof(dirent) + NAME_MAX);
154+ while(readdir_r(d, entry, &de) == 0 && de) {
155+ string basename = entry->d_name;
156+ if (basename == "." || basename == "..")
157+ continue;
158+ string fname = root_dir + "/" + basename;
159+ struct stat sbuf;
160+ if(stat(fname.c_str(), &sbuf) != 0) {
161+ continue;
162+ }
163+ // Use mtime because atime is not guaranteed to work if, for example
164+ // the filesystem is mounted with noatime or relatime.
165+ mtimes.push_back(make_pair(sbuf.st_mtim.tv_sec + sbuf.st_mtim.tv_nsec/1000000000.0, fname));
166+ }
167+ free(entry);
168+ closedir(d);
169+ if (mtimes.size() <= MAX_SIZE)
170+ return;
171+ sort(mtimes.begin(), mtimes.end());
172+ for(size_t i=0; i < mtimes.size()-MAX_SIZE; i++) {
173+ if(remove(mtimes[i].second.c_str()) < 0) {
174+ fprintf(stderr, "Could not remove file %s: %s.\n",
175+ mtimes[i].second.c_str(), strerror(errno));
176+ }
177+ }
178+}
plugins/Utils/mediaartcache.hnew file+54
@@ -0,0 +1,54 @@
1+/*
2+ * This file is part of the Ubuntu TV Media Scanner
3+ * Copyright (C) 2012-2013 Canonical Ltd.
4+ *
5+ * This program is free software: you can redistribute it and/or modify
6+ * it under the terms of the GNU Lesser General Public License version 3 as
7+ * published by the Free Software Foundation.
8+ *
9+ * This program is distributed in the hope that it will be useful,
10+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+ * GNU Lesser General Public License for more details.
13+ *
14+ * You should have received a copy of the GNU Lesser General Public License
15+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
16+ *
17+ * Authored by: Jussi Pakkanen <jussi.pakkanen@canonical.com>
18+ */
19+
20+#ifndef MEDIAARTCACHE_H
21+#define MEDIAARTCACHE_H
22+
23+#include<string>
24+
25+/*
26+ * A class to store thumbnails for files according to
27+ * https://wiki.gnome.org/MediaArtStorageSpec
28+ *
29+ * As this class deals mostly with the filesystem, all
30+ * errors are reported with runtime_error exceptions.
31+ */
32+
33+
34+class MediaArtCache {
35+private:
36+ std::string root_dir;
37+
38+ std::string compute_base_name(const std::string &artist, const std::string &album) const;
39+ std::string get_full_filename(const std::string &artist, const std::string & album) const;
40+
41+public:
42+ static const unsigned int MAX_SIZE = 200;
43+
44+ MediaArtCache();
45+ bool has_art(const std::string &artist, const std::string &album) const;
46+ void add_art(const std::string &artist, const std::string &album,
47+ char *data, unsigned int datalen);
48+ std::string get_art_file(const std::string &artist, const std::string &album) const;
49+ void clear() const;
50+ void prune();
51+ std::string get_cache_dir() const { return root_dir; }
52+};
53+
54+#endif
plugins/Utils/plugin.cpp+20−1
@@ -19,11 +19,12 @@
19// Qt
19// Qt
20#include <QtQml/qqml.h>
20#include <QtQml/qqml.h>
21#include <QtQuick/QQuickWindow>
21#include <QtQuick/QQuickWindow>
22−
22+#include <QDebug>
23// self
23// self
24#include "plugin.h"
24#include "plugin.h"
25
25
26// local
26// local
27+#include "albumartprovider.h"
27#include "applicationpaths.h"
28#include "applicationpaths.h"
28#include "qlimitproxymodelqml.h"
29#include "qlimitproxymodelqml.h"
29#include "qsortfilterproxymodelqml.h"
30#include "qsortfilterproxymodelqml.h"
@@ -46,3 +47,21 @@ void UtilsPlugin::registerTypes(const char *uri)
46 qmlRegisterExtendedType<QQuickWindow, UbuntuWindow>(uri, 0, 1, "Window");
47 qmlRegisterExtendedType<QQuickWindow, UbuntuWindow>(uri, 0, 1, "Window");
47 qmlRegisterSingletonType<ApplicationPaths>(uri, 0, 1, "ApplicationPaths", applicationsPathsSingleton);
48 qmlRegisterSingletonType<ApplicationPaths>(uri, 0, 1, "ApplicationPaths", applicationsPathsSingleton);
48}
49}
50+
51+void UtilsPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
52+{
53+ QQmlExtensionPlugin::initializeEngine(engine, uri);
54+
55+ try
56+ {
57+ engine->addImageProvider(QLatin1String("albumart"), new AlbumArtProvider);
58+ }
59+ catch (const std::runtime_error &e)
60+ {
61+ qWarning() << "Failed to register image provider for albumart:" << e.what();
62+ }
63+ catch (...)
64+ {
65+ qWarning() << "Failed to register image provider for albumart (unknown error)";
66+ }
67+}
plugins/Utils/plugin.h+1
@@ -29,6 +29,7 @@ class UtilsPlugin : public QQmlExtensionPlugin
29
29
30public:
30public:
31 void registerTypes(const char *uri);
31 void registerTypes(const char *uri);
32+ void initializeEngine(QQmlEngine *engine, const char *uri);
32};
33};
33
34
34#endif
35#endif
po/ar.po+34−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11"PO-Revision-Date: 2013-06-26 23:26+0000\n"
11"PO-Revision-Date: 2013-06-26 23:26+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"
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= "
17"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= "
18"3 && n % 100 <= 10 ? 3 : n % 100 >= 11 && n % 100 <= 99 ? 4 : 5;\n"
18"3 && n % 100 <= 10 ? 3 : n % 100 >= 11 && n % 100 <= 99 ? 4 : 5;\n"
19−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
20−"X-Generator: Launchpad (build 16774)\n"
20+"X-Generator: Launchpad (build 16799)\n"
21
21
22#: Applications/applications.js:23
22#: Applications/applications.js:23
23msgid "Phone"
23msgid "Phone"
@@ -87,7 +87,7 @@ msgstr "ويكيبيديا"
87msgid "YouTube"
87msgid "YouTube"
88msgstr "يوتيوب"
88msgstr "يوتيوب"
89
89
90−#: Components/EdgeDemoOverlay.qml:150
90+#: Components/EdgeDemoOverlay.qml:149
91msgid "Skip intro"
91msgid "Skip intro"
92msgstr ""
92msgstr ""
93
93
@@ -133,84 +133,46 @@ msgid ""
133"phone<br><br>Tap anywhere to start"
133"phone<br><br>Tap anywhere to start"
134msgstr ""
134msgstr ""
135
135
136−#: Components/PageHeader.qml:298
136+#: Components/PageHeader.qml:341
137msgid "Recent searches"
137msgid "Recent searches"
138msgstr "عمليات البحث الأخيرة"
138msgstr "عمليات البحث الأخيرة"
139
139
140#. TRANSLATORS: Number of persons who rated this app
140#. TRANSLATORS: Number of persons who rated this app
141+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73
142+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
142#, qt-format
143#, qt-format
143msgid "(%1)"
144msgid "(%1)"
144msgstr ""
145msgstr ""
145
146
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app
148+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
147−#: Dash/Apps/AppInfo.qml:85
149+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
148#, qt-format
150#, qt-format
149msgid "%1 review"
151msgid "%1 review"
150msgid_plural "%1 reviews"
152msgid_plural "%1 reviews"
151msgstr[0] ""
153msgstr[0] ""
152msgstr[1] ""
154msgstr[1] ""
153
155
154−#: Dash/Apps/AppPreview.qml:178
156+#: Dash/Apps/AppPreview.qml:126
155msgid "Rate this"
157msgid "Rate this"
156msgstr ""
158msgstr ""
157
159
158−#: Dash/Apps/AppReviews.qml:74
160+#: Dash/Previews/Reviews.qml:74
159msgid "Add a review"
161msgid "Add a review"
160msgstr ""
162msgstr ""
161
163
162−#: Dash/Apps/AppReviews.qml:86
164+#: Dash/Previews/Reviews.qml:86
163msgid "Review"
165msgid "Review"
164msgstr ""
166msgstr ""
165
167
166−#: Dash/Apps/AppReviews.qml:121
168+#: Dash/Previews/Reviews.qml:121
167msgid "Send"
169msgid "Send"
168msgstr ""
170msgstr ""
169
171
170−#: Dash/Apps/AppReviews.qml:139
172+#: Dash/Previews/Reviews.qml:139
171msgid "Comments:"
173msgid "Comments:"
172msgstr ""
174msgstr ""
173
175
174−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
175−msgid "Featured"
176−msgstr "المميز"
177−
178−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
179−msgid "Recent"
180−msgstr "الحديث"
181−
182−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
183−msgid "New Releases"
184−msgstr "الإصدارات الجديدة"
185−
186−#: Dash/DashMusic.qml:30
187−msgid "Top Charting"
188−msgstr ""
189−
190−#: Dash/DashMusic.qml:91
191−msgid "Music"
192−msgstr "موسيقى"
193−
194−#: Dash/DashVideos.qml:31
195−msgid "Popular Online"
196−msgstr "الشائع على الإنترنت"
197−
198−#: Dash/DashVideos.qml:146
199−msgid "Videos"
200−msgstr "فيديوهات"
201−
202−#: Dash/Video/VideoPreview.qml:130
203−msgid "Directed by:"
204−msgstr "أخرجه:"
205−
206−#: Dash/Video/VideoPreview.qml:153
207−msgid "Starring:"
208−msgstr "النجوم:"
209−
210−#: Dash/Video/VideoPreview.qml:176
211−msgid "Author:"
212−msgstr "المؤلف:"
213−
214#: Greeter/Lockscreen.qml:142
176#: Greeter/Lockscreen.qml:142
215msgid "Emergency Call"
177msgid "Emergency Call"
216msgstr ""
178msgstr ""
@@ -248,7 +210,7 @@ msgstr "تتكلم الآن..."
248msgid "Search"
210msgid "Search"
249msgstr "ابحث"
211msgstr "ابحث"
250
212
251−#: plugins/Unity/scope.cpp:336
213+#: plugins/Unity/scope.cpp:398
252msgid "Sorry, there is nothing that matches your search."
214msgid "Sorry, there is nothing that matches your search."
253msgstr "عذراً، لا يوجد ما يطابق بحثك."
215msgstr "عذراً، لا يوجد ما يطابق بحثك."
254
216
@@ -256,7 +218,25 @@ msgstr "عذراً، لا يوجد ما يطابق بحثك."
256msgid "All"
218msgid "All"
257msgstr ""
219msgstr ""
258
220
259−#: Shell.qml:453
221+#: Shell.qml:438
260#, qt-format
222#, qt-format
261msgid "Please enter %1"
223msgid "Please enter %1"
262msgstr ""
224msgstr ""
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+37−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-04 06:11+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16791)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "Wikipedia"
86msgid "YouTube"
86msgid "YouTube"
87msgstr "YouTube"
87msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr "Omitir la intro"
91msgstr "Omitir la intro"
92
92
@@ -136,84 +136,46 @@ msgstr ""
136"Agora domines los xestos de berbesos y pues usar el teléfonu<br><br>Toca la "
136"Agora domines los xestos de berbesos y pues usar el teléfonu<br><br>Toca la "
137"pantalla pa entamar"
137"pantalla pa entamar"
138
138
139−#: Components/PageHeader.qml:298
139+#: Components/PageHeader.qml:341
140msgid "Recent searches"
140msgid "Recent searches"
141msgstr "Busques recientes"
141msgstr "Busques recientes"
142
142
143#. TRANSLATORS: Number of persons who rated this app
143#. TRANSLATORS: Number of persons who rated this app
144+#. TRANSLATORS: Number of persons who rated this app/video/whatever
144−#: Dash/Apps/AppInfo.qml:73
145+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
145#, qt-format
146#, qt-format
146msgid "(%1)"
147msgid "(%1)"
147msgstr "(%1)"
148msgstr "(%1)"
148
149
149#. TRANSLATORS: Number of persons who wrote reviews for this app
150#. TRANSLATORS: Number of persons who wrote reviews for this app
151+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
150−#: Dash/Apps/AppInfo.qml:85
152+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
151#, qt-format
153#, qt-format
152msgid "%1 review"
154msgid "%1 review"
153msgid_plural "%1 reviews"
155msgid_plural "%1 reviews"
154msgstr[0] "%1 reseña"
156msgstr[0] "%1 reseña"
155msgstr[1] "%1 reseñes"
157msgstr[1] "%1 reseñes"
156
158
157−#: Dash/Apps/AppPreview.qml:178
159+#: Dash/Apps/AppPreview.qml:126
158msgid "Rate this"
160msgid "Rate this"
159msgstr "Valorar esto"
161msgstr "Valorar esto"
160
162
161−#: Dash/Apps/AppReviews.qml:74
163+#: Dash/Previews/Reviews.qml:74
162msgid "Add a review"
164msgid "Add a review"
163msgstr "Amestar una reseña"
165msgstr "Amestar una reseña"
164
166
165−#: Dash/Apps/AppReviews.qml:86
167+#: Dash/Previews/Reviews.qml:86
166msgid "Review"
168msgid "Review"
167msgstr "Revisar"
169msgstr "Revisar"
168
170
169−#: Dash/Apps/AppReviews.qml:121
171+#: Dash/Previews/Reviews.qml:121
170msgid "Send"
172msgid "Send"
171msgstr "Unviar"
173msgstr "Unviar"
172
174
173−#: Dash/Apps/AppReviews.qml:139
175+#: Dash/Previews/Reviews.qml:139
174msgid "Comments:"
176msgid "Comments:"
175msgstr "Comentarios:"
177msgstr "Comentarios:"
176
178
177−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
178−msgid "Featured"
179−msgstr "Destacaos"
180−
181−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
182−msgid "Recent"
183−msgstr "Recientes"
184−
185−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
186−msgid "New Releases"
187−msgstr "Llanzamientos nuevos"
188−
189−#: Dash/DashMusic.qml:30
190−msgid "Top Charting"
191−msgstr "Meyor posicionaes"
192−
193−#: Dash/DashMusic.qml:91
194−msgid "Music"
195−msgstr "Música"
196−
197−#: Dash/DashVideos.qml:31
198−msgid "Popular Online"
199−msgstr "Populares en llinia"
200−
201−#: Dash/DashVideos.qml:146
202−msgid "Videos"
203−msgstr "Vídeos"
204−
205−#: Dash/Video/VideoPreview.qml:130
206−msgid "Directed by:"
207−msgstr "Dirixida por:"
208−
209−#: Dash/Video/VideoPreview.qml:153
210−msgid "Starring:"
211−msgstr "Protagonistes:"
212−
213−#: Dash/Video/VideoPreview.qml:176
214−msgid "Author:"
215−msgstr "Autor:"
216−
217#: Greeter/Lockscreen.qml:142
179#: Greeter/Lockscreen.qml:142
218msgid "Emergency Call"
180msgid "Emergency Call"
219msgstr "Llamada d'emerxencia"
181msgstr "Llamada d'emerxencia"
@@ -251,7 +213,7 @@ msgstr "Falando…"
251msgid "Search"
213msgid "Search"
252msgstr "Guetar"
214msgstr "Guetar"
253
215
254−#: plugins/Unity/scope.cpp:336
216+#: plugins/Unity/scope.cpp:398
255msgid "Sorry, there is nothing that matches your search."
217msgid "Sorry, there is nothing that matches your search."
256msgstr "Sentímoslo, nun hai res que concase cola gueta"
218msgstr "Sentímoslo, nun hai res que concase cola gueta"
257
219
@@ -259,7 +221,28 @@ msgstr "Sentímoslo, nun hai res que concase cola gueta"
259msgid "All"
221msgid "All"
260msgstr "Too"
222msgstr "Too"
261
223
262−#: Shell.qml:453
224+#: Shell.qml:438
263#, qt-format
225#, qt-format
264msgid "Please enter %1"
226msgid "Please enter %1"
265msgstr "Introduz %1"
227msgstr "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+22−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr "Son axtarışlar"
137msgstr "Son axtarışlar"
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr ""
144msgstr ""
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] ""
152msgstr[0] ""
151msgstr[1] ""
153msgstr[1] ""
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr ""
157msgstr ""
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr ""
161msgstr ""
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr ""
165msgstr ""
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr ""
169msgstr ""
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr ""
173msgstr ""
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr ""
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr ""
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr ""
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr ""
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr "Musiqi"
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr ""
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr "Videolar"
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr ""
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr ""
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr ""
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr ""
177msgstr ""
@@ -247,7 +209,7 @@ msgstr "Söylənilir..."
247msgid "Search"
209msgid "Search"
248msgstr "Axtar"
210msgstr "Axtar"
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr "Bağışlayın, amma axtarışınıza heç bir nəticə uyğun gəlmir."
214msgstr "Bağışlayın, amma axtarışınıza heç bir nəticə uyğun gəlmir."
253
215
@@ -255,7 +217,13 @@ msgstr "Bağışlayın, amma axtarışınıza heç bir nəticə uyğun gəlmir."
255msgid "All"
217msgid "All"
256msgstr ""
218msgstr ""
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr ""
223msgstr ""
224+
225+#~ msgid "Music"
226+#~ msgstr "Musiqi"
227+
228+#~ msgid "Videos"
229+#~ msgstr "Videolar"
po/bg.po+28−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +16,8 @@ msgstr ""
16"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
17"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
20−"X-Generator: Launchpad (build 16774)\n"
20+"X-Generator: Launchpad (build 16799)\n"
21
21
22#: Applications/applications.js:23
22#: Applications/applications.js:23
23msgid "Phone"
23msgid "Phone"
@@ -87,7 +87,7 @@ msgstr "Уикипедия"
87msgid "YouTube"
87msgid "YouTube"
88msgstr "YouTube"
88msgstr "YouTube"
89
89
90−#: Components/EdgeDemoOverlay.qml:150
90+#: Components/EdgeDemoOverlay.qml:149
91msgid "Skip intro"
91msgid "Skip intro"
92msgstr ""
92msgstr ""
93
93
@@ -133,84 +133,46 @@ msgid ""
133"phone<br><br>Tap anywhere to start"
133"phone<br><br>Tap anywhere to start"
134msgstr ""
134msgstr ""
135
135
136−#: Components/PageHeader.qml:298
136+#: Components/PageHeader.qml:341
137msgid "Recent searches"
137msgid "Recent searches"
138msgstr "Скорошни търсения"
138msgstr "Скорошни търсения"
139
139
140#. TRANSLATORS: Number of persons who rated this app
140#. TRANSLATORS: Number of persons who rated this app
141+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73
142+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
142#, qt-format
143#, qt-format
143msgid "(%1)"
144msgid "(%1)"
144msgstr ""
145msgstr ""
145
146
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app
148+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
147−#: Dash/Apps/AppInfo.qml:85
149+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
148#, qt-format
150#, qt-format
149msgid "%1 review"
151msgid "%1 review"
150msgid_plural "%1 reviews"
152msgid_plural "%1 reviews"
151msgstr[0] ""
153msgstr[0] ""
152msgstr[1] ""
154msgstr[1] ""
153
155
154−#: Dash/Apps/AppPreview.qml:178
156+#: Dash/Apps/AppPreview.qml:126
155msgid "Rate this"
157msgid "Rate this"
156msgstr ""
158msgstr ""
157
159
158−#: Dash/Apps/AppReviews.qml:74
160+#: Dash/Previews/Reviews.qml:74
159msgid "Add a review"
161msgid "Add a review"
160msgstr ""
162msgstr ""
161
163
162−#: Dash/Apps/AppReviews.qml:86
164+#: Dash/Previews/Reviews.qml:86
163msgid "Review"
165msgid "Review"
164msgstr ""
166msgstr ""
165
167
166−#: Dash/Apps/AppReviews.qml:121
168+#: Dash/Previews/Reviews.qml:121
167msgid "Send"
169msgid "Send"
168msgstr ""
170msgstr ""
169
171
170−#: Dash/Apps/AppReviews.qml:139
172+#: Dash/Previews/Reviews.qml:139
171msgid "Comments:"
173msgid "Comments:"
172msgstr ""
174msgstr ""
173
175
174−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
175−msgid "Featured"
176−msgstr "Най-отличени"
177−
178−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
179−msgid "Recent"
180−msgstr "Най-нови"
181−
182−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
183−msgid "New Releases"
184−msgstr ""
185−
186−#: Dash/DashMusic.qml:30
187−msgid "Top Charting"
188−msgstr ""
189−
190−#: Dash/DashMusic.qml:91
191−msgid "Music"
192−msgstr "Музика"
193−
194−#: Dash/DashVideos.qml:31
195−msgid "Popular Online"
196−msgstr ""
197−
198−#: Dash/DashVideos.qml:146
199−msgid "Videos"
200−msgstr "Видеоклипове"
201−
202−#: Dash/Video/VideoPreview.qml:130
203−msgid "Directed by:"
204−msgstr ""
205−
206−#: Dash/Video/VideoPreview.qml:153
207−msgid "Starring:"
208−msgstr ""
209−
210−#: Dash/Video/VideoPreview.qml:176
211−msgid "Author:"
212−msgstr "Автор:"
213−
214#: Greeter/Lockscreen.qml:142
176#: Greeter/Lockscreen.qml:142
215msgid "Emergency Call"
177msgid "Emergency Call"
216msgstr ""
178msgstr ""
@@ -248,7 +210,7 @@ msgstr ""
248msgid "Search"
210msgid "Search"
249msgstr "Търсене"
211msgstr "Търсене"
250
212
251−#: plugins/Unity/scope.cpp:336
213+#: plugins/Unity/scope.cpp:398
252msgid "Sorry, there is nothing that matches your search."
214msgid "Sorry, there is nothing that matches your search."
253msgstr "Съжаляваме, няма нищо, което да отговаря на вашето търсене."
215msgstr "Съжаляваме, няма нищо, което да отговаря на вашето търсене."
254
216
@@ -256,7 +218,19 @@ msgstr "Съжаляваме, няма нищо, което да отговар
256msgid "All"
218msgid "All"
257msgstr ""
219msgstr ""
258
220
259−#: Shell.qml:453
221+#: Shell.qml:438
260#, qt-format
222#, qt-format
261msgid "Please enter %1"
223msgid "Please enter %1"
262msgstr ""
224msgstr ""
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+37−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "Viquipèdia"
86msgid "YouTube"
86msgid "YouTube"
87msgstr "YouTube"
87msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr "Omet la introducció"
91msgstr "Omet la introducció"
92
92
@@ -138,84 +138,46 @@ msgid ""
138"phone<br><br>Tap anywhere to start"
138"phone<br><br>Tap anywhere to start"
139msgstr ""
139msgstr ""
140
140
141−#: Components/PageHeader.qml:298
141+#: Components/PageHeader.qml:341
142msgid "Recent searches"
142msgid "Recent searches"
143msgstr "Cerques recents"
143msgstr "Cerques recents"
144
144
145#. TRANSLATORS: Number of persons who rated this app
145#. TRANSLATORS: Number of persons who rated this app
146+#. TRANSLATORS: Number of persons who rated this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:73
147+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
147#, qt-format
148#, qt-format
148msgid "(%1)"
149msgid "(%1)"
149msgstr "(%1)"
150msgstr "(%1)"
150
151
151#. TRANSLATORS: Number of persons who wrote reviews for this app
152#. TRANSLATORS: Number of persons who wrote reviews for this app
153+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
152−#: Dash/Apps/AppInfo.qml:85
154+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
153#, qt-format
155#, qt-format
154msgid "%1 review"
156msgid "%1 review"
155msgid_plural "%1 reviews"
157msgid_plural "%1 reviews"
156msgstr[0] "%1 ressenya"
158msgstr[0] "%1 ressenya"
157msgstr[1] "%1 ressenyes"
159msgstr[1] "%1 ressenyes"
158
160
159−#: Dash/Apps/AppPreview.qml:178
161+#: Dash/Apps/AppPreview.qml:126
160msgid "Rate this"
162msgid "Rate this"
161msgstr ""
163msgstr ""
162
164
163−#: Dash/Apps/AppReviews.qml:74
165+#: Dash/Previews/Reviews.qml:74
164msgid "Add a review"
166msgid "Add a review"
165msgstr "Afegiu una ressenya"
167msgstr "Afegiu una ressenya"
166
168
167−#: Dash/Apps/AppReviews.qml:86
169+#: Dash/Previews/Reviews.qml:86
168msgid "Review"
170msgid "Review"
169msgstr "Ressenya"
171msgstr "Ressenya"
170
172
171−#: Dash/Apps/AppReviews.qml:121
173+#: Dash/Previews/Reviews.qml:121
172msgid "Send"
174msgid "Send"
173msgstr "Envia"
175msgstr "Envia"
174
176
175−#: Dash/Apps/AppReviews.qml:139
177+#: Dash/Previews/Reviews.qml:139
176msgid "Comments:"
178msgid "Comments:"
177msgstr "Comentaris:"
179msgstr "Comentaris:"
178
180
179−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
180−msgid "Featured"
181−msgstr "Destacats"
182−
183−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
184−msgid "Recent"
185−msgstr "Recents"
186−
187−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
188−msgid "New Releases"
189−msgstr "Novetats"
190−
191−#: Dash/DashMusic.qml:30
192−msgid "Top Charting"
193−msgstr "El millor de les llistes"
194−
195−#: Dash/DashMusic.qml:91
196−msgid "Music"
197−msgstr "Música"
198−
199−#: Dash/DashVideos.qml:31
200−msgid "Popular Online"
201−msgstr "Popular a la xarxa"
202−
203−#: Dash/DashVideos.qml:146
204−msgid "Videos"
205−msgstr "Vídeos"
206−
207−#: Dash/Video/VideoPreview.qml:130
208−msgid "Directed by:"
209−msgstr "Dirigit per:"
210−
211−#: Dash/Video/VideoPreview.qml:153
212−msgid "Starring:"
213−msgstr "Protagonistes:"
214−
215−#: Dash/Video/VideoPreview.qml:176
216−msgid "Author:"
217−msgstr "Autor:"
218−
219#: Greeter/Lockscreen.qml:142
181#: Greeter/Lockscreen.qml:142
220msgid "Emergency Call"
182msgid "Emergency Call"
221msgstr "Trucada d'emergència"
183msgstr "Trucada d'emergència"
@@ -253,7 +215,7 @@ msgstr "S'està parlant..."
253msgid "Search"
215msgid "Search"
254msgstr "Cerca"
216msgstr "Cerca"
255
217
256−#: plugins/Unity/scope.cpp:336
218+#: plugins/Unity/scope.cpp:398
257msgid "Sorry, there is nothing that matches your search."
219msgid "Sorry, there is nothing that matches your search."
258msgstr "No hi ha res que coincideixi amb la cerca"
220msgstr "No hi ha res que coincideixi amb la cerca"
259
221
@@ -261,7 +223,28 @@ msgstr "No hi ha res que coincideixi amb la cerca"
261msgid "All"
223msgid "All"
262msgstr ""
224msgstr ""
263
225
264−#: Shell.qml:453
226+#: Shell.qml:438
265#, qt-format
227#, qt-format
266msgid "Please enter %1"
228msgid "Please enter %1"
267msgstr "Introduïu %1"
229msgstr "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.ponew file+239
@@ -0,0 +1,239 @@
1+# Czech 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-10-11 12:12+0200\n"
11+"PO-Revision-Date: 2013-10-08 08:09+0000\n"
12+"Last-Translator: Tadeáš Pařík <tadeas.parik@gmail.com>\n"
13+"Language-Team: Czech <cs@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=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
20+
21+#: Applications/applications.js:23
22+msgid "Phone"
23+msgstr "Telefon"
24+
25+#: Applications/applications.js:29
26+msgid "Camera"
27+msgstr "Fotoaparát"
28+
29+#: Applications/applications.js:35
30+msgid "Gallery"
31+msgstr "Galerie"
32+
33+#: Applications/applications.js:40
34+msgid "Facebook"
35+msgstr "Facebook"
36+
37+#: Applications/applications.js:46
38+msgid "Browser"
39+msgstr "Prohlížeč"
40+
41+#: Applications/applications.js:51
42+msgid "Twitter"
43+msgstr "Twitter"
44+
45+#: Applications/applications.js:57
46+msgid "GMail"
47+msgstr "GMail"
48+
49+#: Applications/applications.js:62
50+msgid "Weather"
51+msgstr "Počasí"
52+
53+#: Applications/applications.js:68
54+msgid "Notepad"
55+msgstr "Poznámkový blok"
56+
57+#: Applications/applications.js:74
58+msgid "Calendar"
59+msgstr "Kalendář"
60+
61+#: Applications/applications.js:80
62+msgid "Media Player"
63+msgstr "Přehrávač multimédií"
64+
65+#: Applications/applications.js:86
66+msgid "Evernote"
67+msgstr "Evernote"
68+
69+#: Applications/applications.js:91
70+msgid "Map"
71+msgstr "Mapa"
72+
73+#: Applications/applications.js:96
74+msgid "Pinterest"
75+msgstr "Pinterest"
76+
77+#: Applications/applications.js:101
78+msgid "SoundCloud"
79+msgstr "Hudební Cloud"
80+
81+#: Applications/applications.js:106
82+msgid "Wikipedia"
83+msgstr "Wikipedie"
84+
85+#: Applications/applications.js:111
86+msgid "YouTube"
87+msgstr "YouTube"
88+
89+#: Components/EdgeDemoOverlay.qml:149
90+msgid "Skip intro"
91+msgstr "Přeskočit intro"
92+
93+#: Components/EdgeDemo.qml:112
94+msgid "Right edge"
95+msgstr "Pravý okraj"
96+
97+#: Components/EdgeDemo.qml:113
98+msgid "Try swiping from the right edge to unlock the phone"
99+msgstr "Pokuste se odemknout telefon potažením prstu z pravého okraje."
100+
101+#: Components/EdgeDemo.qml:144
102+msgid "Top edge"
103+msgstr "Horní okraj"
104+
105+#: Components/EdgeDemo.qml:145
106+msgid "Try swiping from the top edge to access the indicators"
107+msgstr "Pokuste se zpřístupnit indikátory potažením prstu z horního okraje"
108+
109+#: Components/EdgeDemo.qml:170
110+msgid "Close"
111+msgstr "Uzavřít"
112+
113+#: Components/EdgeDemo.qml:171
114+msgid "Swipe up again to close the settings screen"
115+msgstr ""
116+
117+#: Components/EdgeDemo.qml:198
118+msgid "Left edge"
119+msgstr "Levý okraj"
120+
121+#: Components/EdgeDemo.qml:199
122+msgid "Swipe from the left to reveal the launcher for quick access to apps"
123+msgstr "Pro rychlý přístup k aplikacím potáhněte prst z levého okraje."
124+
125+#: Components/EdgeDemo.qml:226
126+msgid "Well done"
127+msgstr "Výborně"
128+
129+#: Components/EdgeDemo.qml:227
130+msgid ""
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
133+msgstr ""
134+
135+#: Components/PageHeader.qml:341
136+msgid "Recent searches"
137+msgstr "Poslední vyhledávání"
138+
139+#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
142+#, qt-format
143+msgid "(%1)"
144+msgstr "(%1)"
145+
146+#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
149+#, qt-format
150+msgid "%1 review"
151+msgid_plural "%1 reviews"
152+msgstr[0] "%1 recenze"
153+msgstr[1] "%1 recenze"
154+msgstr[2] "%1 recenzí"
155+
156+#: Dash/Apps/AppPreview.qml:126
157+msgid "Rate this"
158+msgstr "Ohodnoťte to"
159+
160+#: Dash/Previews/Reviews.qml:74
161+msgid "Add a review"
162+msgstr "Přidat recenzi"
163+
164+#: Dash/Previews/Reviews.qml:86
165+msgid "Review"
166+msgstr "Recenze"
167+
168+#: Dash/Previews/Reviews.qml:121
169+msgid "Send"
170+msgstr "Odeslat"
171+
172+#: Dash/Previews/Reviews.qml:139
173+msgid "Comments:"
174+msgstr "Komentáře:"
175+
176+#: Greeter/Lockscreen.qml:142
177+msgid "Emergency Call"
178+msgstr "Tísňové volání"
179+
180+#: Greeter/PassphraseLockscreen.qml:59
181+#, qt-format
182+msgid "Hello %1"
183+msgstr "Ahoj %1"
184+
185+#: Greeter/PassphraseLockscreen.qml:59
186+msgid "Hello"
187+msgstr "Ahoj"
188+
189+#: Hud/HudParametrizedActionsPage.qml:132
190+msgid "Confirm"
191+msgstr "Potvrdit"
192+
193+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
194+msgid "Type or say a command"
195+msgstr "Napište nebo řekněte příkaz"
196+
197+#: Hud/Hud.qml:84
198+msgid "Loading. Please Wait..."
199+msgstr "Načítám. Čekejte prosím..."
200+
201+#: Hud/Hud.qml:89
202+msgid "Speak Now..."
203+msgstr "Mluvte..."
204+
205+#: Hud/Hud.qml:94
206+msgid "Speaking..."
207+msgstr "Mluvte..."
208+
209+#: Panel/SearchIndicator.qml:27
210+msgid "Search"
211+msgstr "Hledat"
212+
213+#: plugins/Unity/scope.cpp:398
214+msgid "Sorry, there is nothing that matches your search."
215+msgstr "Je nám líto, ale nic neodpovídá zadání"
216+
217+#: plugins/Unity/showallfilteroption.cpp:41
218+msgid "All"
219+msgstr "Vše"
220+
221+#: Shell.qml:438
222+#, qt-format
223+msgid "Please enter %1"
224+msgstr "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+37−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11"PO-Revision-Date: 2013-10-06 10:57+0000\n"
11"PO-Revision-Date: 2013-10-06 10:57+0000\n"
12"Last-Translator: SaGrLand <sg@samuel-greef.de>\n"
12"Last-Translator: SaGrLand <sg@samuel-greef.de>\n"
13"Language-Team: German <de@li.org>\n"
13"Language-Team: German <de@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-07 06:14+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16791)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "Wikipedia"
86msgid "YouTube"
86msgid "YouTube"
87msgstr "YouTube"
87msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr "Überspringe Einführung"
91msgstr "Überspringe Einführung"
92
92
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr "Letzte Suchbegriffe"
137msgstr "Letzte Suchbegriffe"
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr "(%1)"
144msgstr "(%1)"
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] "%1 Bewertung"
152msgstr[0] "%1 Bewertung"
151msgstr[1] "%1 Bewertungen"
153msgstr[1] "%1 Bewertungen"
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr "Bewerten"
157msgstr "Bewerten"
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr "Bewertung hinzufügen"
161msgstr "Bewertung hinzufügen"
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr "Bewertung"
165msgstr "Bewertung"
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr "Senden"
169msgstr "Senden"
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr "Kommentare:"
173msgstr "Kommentare:"
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr "Empfehlungen"
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr "Zuletzt verwendet"
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr "Neue Veröffentlichungen"
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr "Top Tabellenplatz"
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr "Musik"
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr "Online Beliebt"
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr "Videos"
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr "Regie:"
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr "Darsteller:"
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr "Autor:"
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr "Notruf"
177msgstr "Notruf"
@@ -247,7 +209,7 @@ msgstr "Sie sprechen …"
247msgid "Search"
209msgid "Search"
248msgstr "Suchen"
210msgstr "Suchen"
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr "Entschuldigung, es wurden keine Treffer erzielt."
214msgstr "Entschuldigung, es wurden keine Treffer erzielt."
253
215
@@ -255,7 +217,28 @@ msgstr "Entschuldigung, es wurden keine Treffer erzielt."
255msgid "All"
217msgid "All"
256msgstr "Alle"
218msgstr "Alle"
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr "Bitte geben Sie %1 ein"
223msgstr "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+22−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr "Πρόσφατες αναζητήσεις"
137msgstr "Πρόσφατες αναζητήσεις"
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr ""
144msgstr ""
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] ""
152msgstr[0] ""
151msgstr[1] ""
153msgstr[1] ""
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr ""
157msgstr ""
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr ""
161msgstr ""
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr ""
165msgstr ""
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr ""
169msgstr ""
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr ""
173msgstr ""
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr ""
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr ""
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr ""
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr ""
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr "Μουσική"
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr ""
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr "Βίντεο"
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr ""
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr ""
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr ""
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr ""
177msgstr ""
@@ -247,7 +209,7 @@ msgstr "Ομιλία..."
247msgid "Search"
209msgid "Search"
248msgstr "Αναζήτηση"
210msgstr "Αναζήτηση"
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr "Λυπούμαστε, δεν υπάρχει τίποτα που να ταιριάζει στην αναζήτησή σας."
214msgstr "Λυπούμαστε, δεν υπάρχει τίποτα που να ταιριάζει στην αναζήτησή σας."
253
215
@@ -255,7 +217,13 @@ msgstr "Λυπούμαστε, δεν υπάρχει τίποτα που να τ
255msgid "All"
217msgid "All"
256msgstr ""
218msgstr ""
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr ""
223msgstr ""
224+
225+#~ msgid "Music"
226+#~ msgstr "Μουσική"
227+
228+#~ msgid "Videos"
229+#~ msgstr "Βίντεο"
po/en_AU.po+37−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "Wikipedia"
86msgid "YouTube"
86msgid "YouTube"
87msgstr "YouTube"
87msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr "Skip intro"
91msgstr "Skip intro"
92
92
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr "Recent searches"
137msgstr "Recent searches"
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr "(%1)"
144msgstr "(%1)"
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] "%1 review"
152msgstr[0] "%1 review"
151msgstr[1] "%1 reviews"
153msgstr[1] "%1 reviews"
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr "Rate this"
157msgstr "Rate this"
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr "Add a review"
161msgstr "Add a review"
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr "Review"
165msgstr "Review"
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr "Send"
169msgstr "Send"
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr "Comments:"
173msgstr "Comments:"
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr "Featured"
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr "Recent"
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr "New Releases"
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr "Top Charting"
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr "Music"
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr "Popular Online"
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr "Videos"
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr "Directed by:"
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr "Starring:"
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr "Author:"
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr "Emergency Call"
177msgstr "Emergency Call"
@@ -247,7 +209,7 @@ msgstr "Speaking..."
247msgid "Search"
209msgid "Search"
248msgstr "Search"
210msgstr "Search"
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr "Sorry, there is nothing that matches your search."
214msgstr "Sorry, there is nothing that matches your search."
253
215
@@ -255,7 +217,28 @@ msgstr "Sorry, there is nothing that matches your search."
255msgid "All"
217msgid "All"
256msgstr ""
218msgstr ""
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr "Please enter %1"
223msgstr "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+37−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "Wikipedia"
86msgid "YouTube"
86msgid "YouTube"
87msgstr "YouTube"
87msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr "Recent searches"
137msgstr "Recent searches"
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr ""
144msgstr ""
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] ""
152msgstr[0] ""
151msgstr[1] ""
153msgstr[1] ""
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr ""
157msgstr ""
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr ""
161msgstr ""
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr ""
165msgstr ""
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr ""
169msgstr ""
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr ""
173msgstr ""
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr "Featured"
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr "Recent"
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr "New Releases"
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr "Top Charting"
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr "Music"
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr "Popular Online"
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr "Videos"
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr "Directed by:"
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr "Starring:"
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr "Author:"
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr ""
177msgstr ""
@@ -247,7 +209,7 @@ msgstr "Speaking..."
247msgid "Search"
209msgid "Search"
248msgstr "Search"
210msgstr "Search"
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr "Sorry, there is nothing that matches your search."
214msgstr "Sorry, there is nothing that matches your search."
253
215
@@ -255,7 +217,28 @@ msgstr "Sorry, there is nothing that matches your search."
255msgid "All"
217msgid "All"
256msgstr ""
218msgstr ""
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr "Please enter %1"
223msgstr "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+16−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr ""
137msgstr ""
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr ""
144msgstr ""
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] ""
152msgstr[0] ""
151msgstr[1] ""
153msgstr[1] ""
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr ""
157msgstr ""
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr ""
161msgstr ""
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr ""
165msgstr ""
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr ""
169msgstr ""
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr ""
173msgstr ""
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr ""
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr ""
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr ""
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr ""
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr ""
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr ""
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr ""
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr ""
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr ""
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr ""
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr ""
177msgstr ""
@@ -247,7 +209,7 @@ msgstr ""
247msgid "Search"
209msgid "Search"
248msgstr ""
210msgstr ""
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr ""
214msgstr ""
253
215
@@ -255,7 +217,7 @@ msgstr ""
255msgid "All"
217msgid "All"
256msgstr ""
218msgstr ""
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr ""
223msgstr ""
po/es.po+37−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11"PO-Revision-Date: 2013-10-02 04:59+0000\n"
11"PO-Revision-Date: 2013-10-02 04:59+0000\n"
12"Last-Translator: Adolfo Jayme Barrientos <fitoschido@gmail.com>\n"
12"Last-Translator: Adolfo Jayme Barrientos <fitoschido@gmail.com>\n"
13"Language-Team: Spanish <es@li.org>\n"
13"Language-Team: Spanish <es@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-03 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16791)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "Wikipedia"
86msgid "YouTube"
86msgid "YouTube"
87msgstr "YouTube"
87msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr "Omitir la introducción"
91msgstr "Omitir la introducción"
92
92
@@ -136,84 +136,46 @@ msgstr ""
136"Ahora domina los gestos de bordes y puede usar el teléfono<br><br>Toque la "
136"Ahora domina los gestos de bordes y puede usar el teléfono<br><br>Toque la "
137"pantalla para comenzar"
137"pantalla para comenzar"
138
138
139−#: Components/PageHeader.qml:298
139+#: Components/PageHeader.qml:341
140msgid "Recent searches"
140msgid "Recent searches"
141msgstr "Búsquedas recientes"
141msgstr "Búsquedas recientes"
142
142
143#. TRANSLATORS: Number of persons who rated this app
143#. TRANSLATORS: Number of persons who rated this app
144+#. TRANSLATORS: Number of persons who rated this app/video/whatever
144−#: Dash/Apps/AppInfo.qml:73
145+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
145#, qt-format
146#, qt-format
146msgid "(%1)"
147msgid "(%1)"
147msgstr "(%1)"
148msgstr "(%1)"
148
149
149#. TRANSLATORS: Number of persons who wrote reviews for this app
150#. TRANSLATORS: Number of persons who wrote reviews for this app
151+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
150−#: Dash/Apps/AppInfo.qml:85
152+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
151#, qt-format
153#, qt-format
152msgid "%1 review"
154msgid "%1 review"
153msgid_plural "%1 reviews"
155msgid_plural "%1 reviews"
154msgstr[0] "%1 reseña"
156msgstr[0] "%1 reseña"
155msgstr[1] "%1 reseñas"
157msgstr[1] "%1 reseñas"
156
158
157−#: Dash/Apps/AppPreview.qml:178
159+#: Dash/Apps/AppPreview.qml:126
158msgid "Rate this"
160msgid "Rate this"
159msgstr "Valorar esto"
161msgstr "Valorar esto"
160
162
161−#: Dash/Apps/AppReviews.qml:74
163+#: Dash/Previews/Reviews.qml:74
162msgid "Add a review"
164msgid "Add a review"
163msgstr "Añadir una reseña"
165msgstr "Añadir una reseña"
164
166
165−#: Dash/Apps/AppReviews.qml:86
167+#: Dash/Previews/Reviews.qml:86
166msgid "Review"
168msgid "Review"
167msgstr "Reseñar"
169msgstr "Reseñar"
168
170
169−#: Dash/Apps/AppReviews.qml:121
171+#: Dash/Previews/Reviews.qml:121
170msgid "Send"
172msgid "Send"
171msgstr "Enviar"
173msgstr "Enviar"
172
174
173−#: Dash/Apps/AppReviews.qml:139
175+#: Dash/Previews/Reviews.qml:139
174msgid "Comments:"
176msgid "Comments:"
175msgstr "Comentarios:"
177msgstr "Comentarios:"
176
178
177−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
178−msgid "Featured"
179−msgstr "Destacados"
180−
181−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
182−msgid "Recent"
183−msgstr "Recientes"
184−
185−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
186−msgid "New Releases"
187−msgstr "Lanzamientos nuevos"
188−
189−#: Dash/DashMusic.qml:30
190−msgid "Top Charting"
191−msgstr "Mejor posicionadas"
192−
193−#: Dash/DashMusic.qml:91
194−msgid "Music"
195−msgstr "Música"
196−
197−#: Dash/DashVideos.qml:31
198−msgid "Popular Online"
199−msgstr "Populares en línea"
200−
201−#: Dash/DashVideos.qml:146
202−msgid "Videos"
203−msgstr "Vídeos"
204−
205−#: Dash/Video/VideoPreview.qml:130
206−msgid "Directed by:"
207−msgstr "Dirigida por:"
208−
209−#: Dash/Video/VideoPreview.qml:153
210−msgid "Starring:"
211−msgstr "Protagonistas:"
212−
213−#: Dash/Video/VideoPreview.qml:176
214−msgid "Author:"
215−msgstr "Autor:"
216−
217#: Greeter/Lockscreen.qml:142
179#: Greeter/Lockscreen.qml:142
218msgid "Emergency Call"
180msgid "Emergency Call"
219msgstr "Llamada de emergencia"
181msgstr "Llamada de emergencia"
@@ -251,7 +213,7 @@ msgstr "Hablando…"
251msgid "Search"
213msgid "Search"
252msgstr "Buscar"
214msgstr "Buscar"
253
215
254−#: plugins/Unity/scope.cpp:336
216+#: plugins/Unity/scope.cpp:398
255msgid "Sorry, there is nothing that matches your search."
217msgid "Sorry, there is nothing that matches your search."
256msgstr "No hay nada que coincida con su búsqueda."
218msgstr "No hay nada que coincida con su búsqueda."
257
219
@@ -259,7 +221,28 @@ msgstr "No hay nada que coincida con su búsqueda."
259msgid "All"
221msgid "All"
260msgstr "Todo"
222msgstr "Todo"
261
223
262−#: Shell.qml:453
224+#: Shell.qml:438
263#, qt-format
225#, qt-format
264msgid "Please enter %1"
226msgid "Please enter %1"
265msgstr "Introduzca %1"
227msgstr "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/fi.po+37−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11"PO-Revision-Date: 2013-10-03 09:21+0000\n"
11"PO-Revision-Date: 2013-10-03 09:21+0000\n"
12"Last-Translator: Jiri Grönroos <Unknown>\n"
12"Last-Translator: Jiri Grönroos <Unknown>\n"
13"Language-Team: Finnish <fi@li.org>\n"
13"Language-Team: Finnish <fi@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-04 06:11+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16791)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "Wikipedia"
86msgid "YouTube"
86msgid "YouTube"
87msgstr "YouTube"
87msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr "Ohita esittely"
91msgstr "Ohita esittely"
92
92
@@ -134,84 +134,46 @@ msgstr ""
134"Hallitset nyt reunaeleet, joten voit aloittaa puhelimen "
134"Hallitset nyt reunaeleet, joten voit aloittaa puhelimen "
135"käytön<br><br>Napauta missä tahansa aloittaaksesi"
135"käytön<br><br>Napauta missä tahansa aloittaaksesi"
136
136
137−#: Components/PageHeader.qml:298
137+#: Components/PageHeader.qml:341
138msgid "Recent searches"
138msgid "Recent searches"
139msgstr "Viimeisimmät haut"
139msgstr "Viimeisimmät haut"
140
140
141#. TRANSLATORS: Number of persons who rated this app
141#. TRANSLATORS: Number of persons who rated this app
142+#. TRANSLATORS: Number of persons who rated this app/video/whatever
142−#: Dash/Apps/AppInfo.qml:73
143+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
143#, qt-format
144#, qt-format
144msgid "(%1)"
145msgid "(%1)"
145msgstr "(%1)"
146msgstr "(%1)"
146
147
147#. TRANSLATORS: Number of persons who wrote reviews for this app
148#. TRANSLATORS: Number of persons who wrote reviews for this app
149+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85
150+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
149#, qt-format
151#, qt-format
150msgid "%1 review"
152msgid "%1 review"
151msgid_plural "%1 reviews"
153msgid_plural "%1 reviews"
152msgstr[0] "%1 arvostelu"
154msgstr[0] "%1 arvostelu"
153msgstr[1] "%1 arvostelua"
155msgstr[1] "%1 arvostelua"
154
156
155−#: Dash/Apps/AppPreview.qml:178
157+#: Dash/Apps/AppPreview.qml:126
156msgid "Rate this"
158msgid "Rate this"
157msgstr "Arvioi tämä"
159msgstr "Arvioi tämä"
158
160
159−#: Dash/Apps/AppReviews.qml:74
161+#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
162msgid "Add a review"
161msgstr "Lisää arvostelu"
163msgstr "Lisää arvostelu"
162
164
163−#: Dash/Apps/AppReviews.qml:86
165+#: Dash/Previews/Reviews.qml:86
164msgid "Review"
166msgid "Review"
165msgstr "Arvostelu"
167msgstr "Arvostelu"
166
168
167−#: Dash/Apps/AppReviews.qml:121
169+#: Dash/Previews/Reviews.qml:121
168msgid "Send"
170msgid "Send"
169msgstr "Lähetä"
171msgstr "Lähetä"
170
172
171−#: Dash/Apps/AppReviews.qml:139
173+#: Dash/Previews/Reviews.qml:139
172msgid "Comments:"
174msgid "Comments:"
173msgstr "Kommentit:"
175msgstr "Kommentit:"
174
176
175−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
176−msgid "Featured"
177−msgstr "Suositellut"
178−
179−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
180−msgid "Recent"
181−msgstr "Viimeisimmät"
182−
183−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
184−msgid "New Releases"
185−msgstr "Uudet julkaisut"
186−
187−#: Dash/DashMusic.qml:30
188−msgid "Top Charting"
189−msgstr "Nousukiidossa"
190−
191−#: Dash/DashMusic.qml:91
192−msgid "Music"
193−msgstr "Musiikki"
194−
195−#: Dash/DashVideos.qml:31
196−msgid "Popular Online"
197−msgstr "Suosittua verkossa"
198−
199−#: Dash/DashVideos.qml:146
200−msgid "Videos"
201−msgstr "Videot"
202−
203−#: Dash/Video/VideoPreview.qml:130
204−msgid "Directed by:"
205−msgstr "Ohjannut:"
206−
207−#: Dash/Video/VideoPreview.qml:153
208−msgid "Starring:"
209−msgstr "Pääosissa:"
210−
211−#: Dash/Video/VideoPreview.qml:176
212−msgid "Author:"
213−msgstr "Tekijä:"
214−
215#: Greeter/Lockscreen.qml:142
177#: Greeter/Lockscreen.qml:142
216msgid "Emergency Call"
178msgid "Emergency Call"
217msgstr "Hätäpuhelu"
179msgstr "Hätäpuhelu"
@@ -249,7 +211,7 @@ msgstr "Puhutaan..."
249msgid "Search"
211msgid "Search"
250msgstr "Hae"
212msgstr "Hae"
251
213
252−#: plugins/Unity/scope.cpp:336
214+#: plugins/Unity/scope.cpp:398
253msgid "Sorry, there is nothing that matches your search."
215msgid "Sorry, there is nothing that matches your search."
254msgstr "Hakuun täsmääviä tuloksia ei löydy."
216msgstr "Hakuun täsmääviä tuloksia ei löydy."
255
217
@@ -257,7 +219,28 @@ msgstr "Hakuun täsmääviä tuloksia ei löydy."
257msgid "All"
219msgid "All"
258msgstr "Kaikki"
220msgstr "Kaikki"
259
221
260−#: Shell.qml:453
222+#: Shell.qml:438
261#, qt-format
223#, qt-format
262msgid "Please enter %1"
224msgid "Please enter %1"
263msgstr "Kirjoita %1"
225msgstr "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+22−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr ""
137msgstr ""
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr ""
144msgstr ""
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] ""
152msgstr[0] ""
151msgstr[1] ""
153msgstr[1] ""
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr ""
157msgstr ""
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr ""
161msgstr ""
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr ""
165msgstr ""
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr ""
169msgstr ""
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr ""
173msgstr ""
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr ""
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr ""
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr ""
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr ""
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr "Tónleikur"
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr ""
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr "Sjónbond"
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr ""
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr ""
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr ""
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr ""
177msgstr ""
@@ -247,7 +209,7 @@ msgstr "Snakkar..."
247msgid "Search"
209msgid "Search"
248msgstr "Leita"
210msgstr "Leita"
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr "Tíanverri er tað einki sum hóskar til tína leiting."
214msgstr "Tíanverri er tað einki sum hóskar til tína leiting."
253
215
@@ -255,7 +217,13 @@ msgstr "Tíanverri er tað einki sum hóskar til tína leiting."
255msgid "All"
217msgid "All"
256msgstr ""
218msgstr ""
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr ""
223msgstr ""
224+
225+#~ msgid "Music"
226+#~ msgstr "Tónleikur"
227+
228+#~ msgid "Videos"
229+#~ msgstr "Sjónbond"
po/fr.po+22−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr ""
137msgstr ""
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr ""
144msgstr ""
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] ""
152msgstr[0] ""
151msgstr[1] ""
153msgstr[1] ""
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr ""
157msgstr ""
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr ""
161msgstr ""
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr ""
165msgstr ""
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr ""
169msgstr ""
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr ""
173msgstr ""
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr ""
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr ""
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr ""
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr ""
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr "Musique"
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr ""
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr "Vidéos"
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr ""
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr ""
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr ""
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr ""
177msgstr ""
@@ -247,7 +209,7 @@ msgstr ""
247msgid "Search"
209msgid "Search"
248msgstr ""
210msgstr ""
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr ""
214msgstr ""
253
215
@@ -255,7 +217,13 @@ msgstr ""
255msgid "All"
217msgid "All"
256msgstr ""
218msgstr ""
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr ""
223msgstr ""
224+
225+#~ msgid "Music"
226+#~ msgstr "Musique"
227+
228+#~ msgid "Videos"
229+#~ msgstr "Vidéos"
po/gd.po+37−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
17"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
18"(n > 2 && n < 20) ? 2 : 3;\n"
18"(n > 2 && n < 20) ? 2 : 3;\n"
19−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
20−"X-Generator: Launchpad (build 16774)\n"
20+"X-Generator: Launchpad (build 16799)\n"
21
21
22#: Applications/applications.js:23
22#: Applications/applications.js:23
23msgid "Phone"
23msgid "Phone"
@@ -87,7 +87,7 @@ msgstr "An Uicipeid"
87msgid "YouTube"
87msgid "YouTube"
88msgstr "YouTube"
88msgstr "YouTube"
89
89
90−#: Components/EdgeDemoOverlay.qml:150
90+#: Components/EdgeDemoOverlay.qml:149
91msgid "Skip intro"
91msgid "Skip intro"
92msgstr "Gearr leum thairis air an ro-ràdh"
92msgstr "Gearr leum thairis air an ro-ràdh"
93
93
@@ -139,18 +139,20 @@ msgid ""
139"phone<br><br>Tap anywhere to start"
139"phone<br><br>Tap anywhere to start"
140msgstr ""
140msgstr ""
141
141
142−#: Components/PageHeader.qml:298
142+#: Components/PageHeader.qml:341
143msgid "Recent searches"
143msgid "Recent searches"
144msgstr "Na lorg thu o chionn goirid"
144msgstr "Na lorg thu o chionn goirid"
145
145
146#. TRANSLATORS: Number of persons who rated this app
146#. TRANSLATORS: Number of persons who rated this app
147+#. TRANSLATORS: Number of persons who rated this app/video/whatever
147−#: Dash/Apps/AppInfo.qml:73
148+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
148#, qt-format
149#, qt-format
149msgid "(%1)"
150msgid "(%1)"
150msgstr "(%1)"
151msgstr "(%1)"
151
152
152#. TRANSLATORS: Number of persons who wrote reviews for this app
153#. TRANSLATORS: Number of persons who wrote reviews for this app
154+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
153−#: Dash/Apps/AppInfo.qml:85
155+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
154#, qt-format
156#, qt-format
155msgid "%1 review"
157msgid "%1 review"
156msgid_plural "%1 reviews"
158msgid_plural "%1 reviews"
@@ -159,66 +161,26 @@ msgstr[1] "%1 lèirmheas"
159msgstr[2] "%1 lèirmheasan"
161msgstr[2] "%1 lèirmheasan"
160msgstr[3] "%1 lèirmheas"
162msgstr[3] "%1 lèirmheas"
161
163
162−#: Dash/Apps/AppPreview.qml:178
164+#: Dash/Apps/AppPreview.qml:126
163msgid "Rate this"
165msgid "Rate this"
164msgstr "Rangaich seo"
166msgstr "Rangaich seo"
165
167
166−#: Dash/Apps/AppReviews.qml:74
168+#: Dash/Previews/Reviews.qml:74
167msgid "Add a review"
169msgid "Add a review"
168msgstr "Cuir lèirmheas ris"
170msgstr "Cuir lèirmheas ris"
169
171
170−#: Dash/Apps/AppReviews.qml:86
172+#: Dash/Previews/Reviews.qml:86
171msgid "Review"
173msgid "Review"
172msgstr "Lèirmheas"
174msgstr "Lèirmheas"
173
175
174−#: Dash/Apps/AppReviews.qml:121
176+#: Dash/Previews/Reviews.qml:121
175msgid "Send"
177msgid "Send"
176msgstr "Cuir"
178msgstr "Cuir"
177
179
178−#: Dash/Apps/AppReviews.qml:139
180+#: Dash/Previews/Reviews.qml:139
179msgid "Comments:"
181msgid "Comments:"
180msgstr "Beachdan"
182msgstr "Beachdan"
181
183
182−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
183−msgid "Featured"
184−msgstr "Brosnaichte"
185−
186−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
187−msgid "Recent"
188−msgstr "O chionn goirid"
189−
190−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
191−msgid "New Releases"
192−msgstr "Air ùr-sgaoileadh"
193−
194−#: Dash/DashMusic.qml:30
195−msgid "Top Charting"
196−msgstr "Gràinnean-mullaich nan cairt"
197−
198−#: Dash/DashMusic.qml:91
199−msgid "Music"
200−msgstr "Ceòl"
201−
202−#: Dash/DashVideos.qml:31
203−msgid "Popular Online"
204−msgstr "Fèill mhòr air air loidhne"
205−
206−#: Dash/DashVideos.qml:146
207−msgid "Videos"
208−msgstr "Videothan"
209−
210−#: Dash/Video/VideoPreview.qml:130
211−msgid "Directed by:"
212−msgstr "Air a stiùireadh le:"
213−
214−#: Dash/Video/VideoPreview.qml:153
215−msgid "Starring:"
216−msgstr "Leis na daoine a leanas:"
217−
218−#: Dash/Video/VideoPreview.qml:176
219−msgid "Author:"
220−msgstr "Ùghdar:"
221−
222#: Greeter/Lockscreen.qml:142
184#: Greeter/Lockscreen.qml:142
223msgid "Emergency Call"
185msgid "Emergency Call"
224msgstr "Gairm èiginn"
186msgstr "Gairm èiginn"
@@ -256,7 +218,7 @@ msgstr "A' bruidhinn..."
256msgid "Search"
218msgid "Search"
257msgstr "Lorg"
219msgstr "Lorg"
258
220
259−#: plugins/Unity/scope.cpp:336
221+#: plugins/Unity/scope.cpp:398
260msgid "Sorry, there is nothing that matches your search."
222msgid "Sorry, there is nothing that matches your search."
261msgstr "Tha sinn duilich ach chan eil dad a' freagairt ris na lorg thu."
223msgstr "Tha sinn duilich ach chan eil dad a' freagairt ris na lorg thu."
262
224
@@ -264,7 +226,28 @@ msgstr "Tha sinn duilich ach chan eil dad a' freagairt ris na lorg thu."
264msgid "All"
226msgid "All"
265msgstr ""
227msgstr ""
266
228
267−#: Shell.qml:453
229+#: Shell.qml:438
268#, qt-format
230#, qt-format
269msgid "Please enter %1"
231msgid "Please enter %1"
270msgstr "Cuir a-steach %1"
232msgstr "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+34−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11"PO-Revision-Date: 2013-10-03 18:49+0000\n"
11"PO-Revision-Date: 2013-10-03 18:49+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"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-04 06:11+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16791)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "Wikipedia"
86msgid "YouTube"
86msgid "YouTube"
87msgstr "YouTube"
87msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr "Saltar introdución"
91msgstr "Saltar introdución"
92
92
@@ -134,84 +134,46 @@ msgstr ""
134"Xa domina os xestos desde os bordos e pode comezar a usar o "
134"Xa domina os xestos desde os bordos e pode comezar a usar o "
135"móbil<br><br>Toque en calquera sitio para comezar"
135"móbil<br><br>Toque en calquera sitio para comezar"
136
136
137−#: Components/PageHeader.qml:298
137+#: Components/PageHeader.qml:341
138msgid "Recent searches"
138msgid "Recent searches"
139msgstr "Buscas recentes"
139msgstr "Buscas recentes"
140
140
141#. TRANSLATORS: Number of persons who rated this app
141#. TRANSLATORS: Number of persons who rated this app
142+#. TRANSLATORS: Number of persons who rated this app/video/whatever
142−#: Dash/Apps/AppInfo.qml:73
143+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
143#, qt-format
144#, qt-format
144msgid "(%1)"
145msgid "(%1)"
145msgstr "(%1)"
146msgstr "(%1)"
146
147
147#. TRANSLATORS: Number of persons who wrote reviews for this app
148#. TRANSLATORS: Number of persons who wrote reviews for this app
149+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85
150+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
149#, qt-format
151#, qt-format
150msgid "%1 review"
152msgid "%1 review"
151msgid_plural "%1 reviews"
153msgid_plural "%1 reviews"
152msgstr[0] "%1 opinión"
154msgstr[0] "%1 opinión"
153msgstr[1] "%1 opinións"
155msgstr[1] "%1 opinións"
154
156
155−#: Dash/Apps/AppPreview.qml:178
157+#: Dash/Apps/AppPreview.qml:126
156msgid "Rate this"
158msgid "Rate this"
157msgstr "Valore isto"
159msgstr "Valore isto"
158
160
159−#: Dash/Apps/AppReviews.qml:74
161+#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
162msgid "Add a review"
161msgstr "Engadir unha opinión"
163msgstr "Engadir unha opinión"
162
164
163−#: Dash/Apps/AppReviews.qml:86
165+#: Dash/Previews/Reviews.qml:86
164msgid "Review"
166msgid "Review"
165msgstr "Opinión"
167msgstr "Opinión"
166
168
167−#: Dash/Apps/AppReviews.qml:121
169+#: Dash/Previews/Reviews.qml:121
168msgid "Send"
170msgid "Send"
169msgstr "Enviar"
171msgstr "Enviar"
170
172
171−#: Dash/Apps/AppReviews.qml:139
173+#: Dash/Previews/Reviews.qml:139
172msgid "Comments:"
174msgid "Comments:"
173msgstr "Comentarios:"
175msgstr "Comentarios:"
174
176
175−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
176−msgid "Featured"
177−msgstr "Destacado"
178−
179−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
180−msgid "Recent"
181−msgstr "Recentes"
182−
183−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
184−msgid "New Releases"
185−msgstr "Novas versións"
186−
187−#: Dash/DashMusic.qml:30
188−msgid "Top Charting"
189−msgstr ""
190−
191−#: Dash/DashMusic.qml:91
192−msgid "Music"
193−msgstr "Música"
194−
195−#: Dash/DashVideos.qml:31
196−msgid "Popular Online"
197−msgstr "Populares en liña"
198−
199−#: Dash/DashVideos.qml:146
200−msgid "Videos"
201−msgstr "Vídeos"
202−
203−#: Dash/Video/VideoPreview.qml:130
204−msgid "Directed by:"
205−msgstr "Dirixido por"
206−
207−#: Dash/Video/VideoPreview.qml:153
208−msgid "Starring:"
209−msgstr "Favoritos"
210−
211−#: Dash/Video/VideoPreview.qml:176
212−msgid "Author:"
213−msgstr "Autor:"
214−
215#: Greeter/Lockscreen.qml:142
177#: Greeter/Lockscreen.qml:142
216msgid "Emergency Call"
178msgid "Emergency Call"
217msgstr "Chamada de emerxencia"
179msgstr "Chamada de emerxencia"
@@ -249,7 +211,7 @@ msgstr "Falando…"
249msgid "Search"
211msgid "Search"
250msgstr "Buscar"
212msgstr "Buscar"
251
213
252−#: plugins/Unity/scope.cpp:336
214+#: plugins/Unity/scope.cpp:398
253msgid "Sorry, there is nothing that matches your search."
215msgid "Sorry, there is nothing that matches your search."
254msgstr "Sentímolo, non hai nada que coincida con esta busca."
216msgstr "Sentímolo, non hai nada que coincida con esta busca."
255
217
@@ -257,7 +219,25 @@ msgstr "Sentímolo, non hai nada que coincida con esta busca."
257msgid "All"
219msgid "All"
258msgstr "Todo"
220msgstr "Todo"
259
221
260−#: Shell.qml:453
222+#: Shell.qml:438
261#, qt-format
223#, qt-format
262msgid "Please enter %1"
224msgid "Please enter %1"
263msgstr "Introduza %1"
225msgstr "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+37−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11"PO-Revision-Date: 2013-10-01 09:19+0000\n"
11"PO-Revision-Date: 2013-10-01 09:19+0000\n"
12"Last-Translator: Yaron <sh.yaron@gmail.com>\n"
12"Last-Translator: Yaron <sh.yaron@gmail.com>\n"
13"Language-Team: Hebrew <he@li.org>\n"
13"Language-Team: Hebrew <he@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "ויקיפדיה"
86msgid "YouTube"
86msgid "YouTube"
87msgstr "YouTube"
87msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr "לדלג על הפתיחה"
91msgstr "לדלג על הפתיחה"
92
92
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr "חיפושים אחרונים"
137msgstr "חיפושים אחרונים"
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr "(%1)"
144msgstr "(%1)"
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] "סקירה %1"
152msgstr[0] "סקירה %1"
151msgstr[1] "%1 סקירות"
153msgstr[1] "%1 סקירות"
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr "דירוג היישום"
157msgstr "דירוג היישום"
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr "הוספת סקירה"
161msgstr "הוספת סקירה"
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr "סקירה"
165msgstr "סקירה"
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr "שליחה"
169msgstr "שליחה"
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr "הערות:"
173msgstr "הערות:"
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr "מומלצים"
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr "אחרונים"
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr "מהדורות חדשות"
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr "בראש הטבלה"
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr "מוזיקה"
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr "פופולריים ברחבי הרשת"
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr "סרטונים"
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr "בוים ע״י:"
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr "בכיכוב:"
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr "יוצר:"
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr "שיחת חירום"
177msgstr "שיחת חירום"
@@ -247,7 +209,7 @@ msgstr "הדיבור מושמע…"
247msgid "Search"
209msgid "Search"
248msgstr "חיפוש"
210msgstr "חיפוש"
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr "שום דבר אינו תואם לחיפוש שלך, עמך הסליחה."
214msgstr "שום דבר אינו תואם לחיפוש שלך, עמך הסליחה."
253
215
@@ -255,7 +217,28 @@ msgstr "שום דבר אינו תואם לחיפוש שלך, עמך הסליחה
255msgid "All"
217msgid "All"
256msgstr ""
218msgstr ""
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr "נא להזין %1"
223msgstr "נא להזין %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+22−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
20−"X-Generator: Launchpad (build 16774)\n"
20+"X-Generator: Launchpad (build 16799)\n"
21
21
22#: Applications/applications.js:23
22#: Applications/applications.js:23
23msgid "Phone"
23msgid "Phone"
@@ -87,7 +87,7 @@ msgstr ""
87msgid "YouTube"
87msgid "YouTube"
88msgstr ""
88msgstr ""
89
89
90−#: Components/EdgeDemoOverlay.qml:150
90+#: Components/EdgeDemoOverlay.qml:149
91msgid "Skip intro"
91msgid "Skip intro"
92msgstr ""
92msgstr ""
93
93
@@ -133,84 +133,46 @@ msgid ""
133"phone<br><br>Tap anywhere to start"
133"phone<br><br>Tap anywhere to start"
134msgstr ""
134msgstr ""
135
135
136−#: Components/PageHeader.qml:298
136+#: Components/PageHeader.qml:341
137msgid "Recent searches"
137msgid "Recent searches"
138msgstr "Nedavne pretrage"
138msgstr "Nedavne pretrage"
139
139
140#. TRANSLATORS: Number of persons who rated this app
140#. TRANSLATORS: Number of persons who rated this app
141+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73
142+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
142#, qt-format
143#, qt-format
143msgid "(%1)"
144msgid "(%1)"
144msgstr ""
145msgstr ""
145
146
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app
148+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
147−#: Dash/Apps/AppInfo.qml:85
149+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
148#, qt-format
150#, qt-format
149msgid "%1 review"
151msgid "%1 review"
150msgid_plural "%1 reviews"
152msgid_plural "%1 reviews"
151msgstr[0] ""
153msgstr[0] ""
152msgstr[1] ""
154msgstr[1] ""
153
155
154−#: Dash/Apps/AppPreview.qml:178
156+#: Dash/Apps/AppPreview.qml:126
155msgid "Rate this"
157msgid "Rate this"
156msgstr ""
158msgstr ""
157
159
158−#: Dash/Apps/AppReviews.qml:74
160+#: Dash/Previews/Reviews.qml:74
159msgid "Add a review"
161msgid "Add a review"
160msgstr ""
162msgstr ""
161
163
162−#: Dash/Apps/AppReviews.qml:86
164+#: Dash/Previews/Reviews.qml:86
163msgid "Review"
165msgid "Review"
164msgstr ""
166msgstr ""
165
167
166−#: Dash/Apps/AppReviews.qml:121
168+#: Dash/Previews/Reviews.qml:121
167msgid "Send"
169msgid "Send"
168msgstr ""
170msgstr ""
169
171
170−#: Dash/Apps/AppReviews.qml:139
172+#: Dash/Previews/Reviews.qml:139
171msgid "Comments:"
173msgid "Comments:"
172msgstr ""
174msgstr ""
173
175
174−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
175−msgid "Featured"
176−msgstr ""
177−
178−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
179−msgid "Recent"
180−msgstr ""
181−
182−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
183−msgid "New Releases"
184−msgstr ""
185−
186−#: Dash/DashMusic.qml:30
187−msgid "Top Charting"
188−msgstr ""
189−
190−#: Dash/DashMusic.qml:91
191−msgid "Music"
192−msgstr "Glazba"
193−
194−#: Dash/DashVideos.qml:31
195−msgid "Popular Online"
196−msgstr ""
197−
198−#: Dash/DashVideos.qml:146
199−msgid "Videos"
200−msgstr "Video"
201−
202−#: Dash/Video/VideoPreview.qml:130
203−msgid "Directed by:"
204−msgstr ""
205−
206−#: Dash/Video/VideoPreview.qml:153
207−msgid "Starring:"
208−msgstr ""
209−
210−#: Dash/Video/VideoPreview.qml:176
211−msgid "Author:"
212−msgstr ""
213−
214#: Greeter/Lockscreen.qml:142
176#: Greeter/Lockscreen.qml:142
215msgid "Emergency Call"
177msgid "Emergency Call"
216msgstr ""
178msgstr ""
@@ -248,7 +210,7 @@ msgstr "Govor..."
248msgid "Search"
210msgid "Search"
249msgstr "Pretraživanje"
211msgstr "Pretraživanje"
250
212
251−#: plugins/Unity/scope.cpp:336
213+#: plugins/Unity/scope.cpp:398
252msgid "Sorry, there is nothing that matches your search."
214msgid "Sorry, there is nothing that matches your search."
253msgstr "Nažalost, ne postoji ništa što odgovara vašoj pretrazi."
215msgstr "Nažalost, ne postoji ništa što odgovara vašoj pretrazi."
254
216
@@ -256,7 +218,13 @@ msgstr "Nažalost, ne postoji ništa što odgovara vašoj pretrazi."
256msgid "All"
218msgid "All"
257msgstr ""
219msgstr ""
258
220
259−#: Shell.qml:453
221+#: Shell.qml:438
260#, qt-format
222#, qt-format
261msgid "Please enter %1"
223msgid "Please enter %1"
262msgstr ""
224msgstr ""
225+
226+#~ msgid "Music"
227+#~ msgstr "Glazba"
228+
229+#~ msgid "Videos"
230+#~ msgstr "Video"
po/hu.po+22−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr "Legutóbbi keresések"
137msgstr "Legutóbbi keresések"
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr ""
144msgstr ""
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] ""
152msgstr[0] ""
151msgstr[1] ""
153msgstr[1] ""
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr ""
157msgstr ""
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr ""
161msgstr ""
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr ""
165msgstr ""
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr ""
169msgstr ""
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr ""
173msgstr ""
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr ""
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr ""
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr ""
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr ""
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr "Zene"
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr ""
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr "Videók"
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr ""
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr ""
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr ""
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr ""
177msgstr ""
@@ -247,7 +209,7 @@ msgstr "Beszéd…"
247msgid "Search"
209msgid "Search"
248msgstr "Keresés"
210msgstr "Keresés"
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr "Elnézést, nincs találat a keresésre."
214msgstr "Elnézést, nincs találat a keresésre."
253
215
@@ -255,7 +217,13 @@ msgstr "Elnézést, nincs találat a keresésre."
255msgid "All"
217msgid "All"
256msgstr ""
218msgstr ""
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr ""
223msgstr ""
224+
225+#~ msgid "Music"
226+#~ msgstr "Zene"
227+
228+#~ msgid "Videos"
229+#~ msgstr "Videók"
po/hy.po+22−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr "Վերջին որոնումներ"
137msgstr "Վերջին որոնումներ"
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr ""
144msgstr ""
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] ""
152msgstr[0] ""
151msgstr[1] ""
153msgstr[1] ""
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr ""
157msgstr ""
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr ""
161msgstr ""
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr ""
165msgstr ""
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr ""
169msgstr ""
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr ""
173msgstr ""
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr ""
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr ""
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr ""
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr ""
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr "Երգեր"
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr ""
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr "Վիդեոներ"
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr ""
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr ""
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr ""
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr ""
177msgstr ""
@@ -247,7 +209,7 @@ msgstr "Խոսում եմ..."
247msgid "Search"
209msgid "Search"
248msgstr "Որոնում"
210msgstr "Որոնում"
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr "Կներերք, բայց Ձեր հարցումով ոչինչ չկար"
214msgstr "Կներերք, բայց Ձեր հարցումով ոչինչ չկար"
253
215
@@ -255,7 +217,13 @@ msgstr "Կներերք, բայց Ձեր հարցումով ոչինչ չկար"
255msgid "All"
217msgid "All"
256msgstr ""
218msgstr ""
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr ""
223msgstr ""
224+
225+#~ msgid "Music"
226+#~ msgstr "Երգեր"
227+
228+#~ msgid "Videos"
229+#~ msgstr "Վիդեոներ"
po/id.po+16−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr ""
137msgstr ""
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr ""
144msgstr ""
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] ""
152msgstr[0] ""
151msgstr[1] ""
153msgstr[1] ""
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr ""
157msgstr ""
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr ""
161msgstr ""
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr ""
165msgstr ""
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr ""
169msgstr ""
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr ""
173msgstr ""
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr ""
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr ""
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr ""
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr ""
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr ""
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr ""
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr ""
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr ""
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr ""
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr ""
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr ""
177msgstr ""
@@ -247,7 +209,7 @@ msgstr ""
247msgid "Search"
209msgid "Search"
248msgstr ""
210msgstr ""
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr ""
214msgstr ""
253
215
@@ -255,7 +217,7 @@ msgstr ""
255msgid "All"
217msgid "All"
256msgstr ""
218msgstr ""
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr ""
223msgstr ""
po/is.po+37−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "Wikipedia"
86msgid "YouTube"
86msgid "YouTube"
87msgstr "YouTube"
87msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr "Hoppa yfir kynningu"
91msgstr "Hoppa yfir kynningu"
92
92
@@ -133,84 +133,46 @@ msgid ""
133"phone<br><br>Tap anywhere to start"
133"phone<br><br>Tap anywhere to start"
134msgstr ""
134msgstr ""
135
135
136−#: Components/PageHeader.qml:298
136+#: Components/PageHeader.qml:341
137msgid "Recent searches"
137msgid "Recent searches"
138msgstr "Nýlegar leitir"
138msgstr "Nýlegar leitir"
139
139
140#. TRANSLATORS: Number of persons who rated this app
140#. TRANSLATORS: Number of persons who rated this app
141+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73
142+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
142#, qt-format
143#, qt-format
143msgid "(%1)"
144msgid "(%1)"
144msgstr "(%1)"
145msgstr "(%1)"
145
146
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app
148+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
147−#: Dash/Apps/AppInfo.qml:85
149+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
148#, qt-format
150#, qt-format
149msgid "%1 review"
151msgid "%1 review"
150msgid_plural "%1 reviews"
152msgid_plural "%1 reviews"
151msgstr[0] "%1 ummæli"
153msgstr[0] "%1 ummæli"
152msgstr[1] "%1 ummæli"
154msgstr[1] "%1 ummæli"
153
155
154−#: Dash/Apps/AppPreview.qml:178
156+#: Dash/Apps/AppPreview.qml:126
155msgid "Rate this"
157msgid "Rate this"
156msgstr "Gefa þessu einkunn"
158msgstr "Gefa þessu einkunn"
157
159
158−#: Dash/Apps/AppReviews.qml:74
160+#: Dash/Previews/Reviews.qml:74
159msgid "Add a review"
161msgid "Add a review"
160msgstr "Gefa umsögn"
162msgstr "Gefa umsögn"
161
163
162−#: Dash/Apps/AppReviews.qml:86
164+#: Dash/Previews/Reviews.qml:86
163msgid "Review"
165msgid "Review"
164msgstr "Umsögn"
166msgstr "Umsögn"
165
167
166−#: Dash/Apps/AppReviews.qml:121
168+#: Dash/Previews/Reviews.qml:121
167msgid "Send"
169msgid "Send"
168msgstr "Senda"
170msgstr "Senda"
169
171
170−#: Dash/Apps/AppReviews.qml:139
172+#: Dash/Previews/Reviews.qml:139
171msgid "Comments:"
173msgid "Comments:"
172msgstr "Athugasemdir:"
174msgstr "Athugasemdir:"
173
175
174−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
175−msgid "Featured"
176−msgstr "Efst á baugi"
177−
178−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
179−msgid "Recent"
180−msgstr "Nýlegt"
181−
182−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
183−msgid "New Releases"
184−msgstr "Nýjar Útgáfur"
185−
186−#: Dash/DashMusic.qml:30
187−msgid "Top Charting"
188−msgstr "Topp Listi"
189−
190−#: Dash/DashMusic.qml:91
191−msgid "Music"
192−msgstr "Tónlist"
193−
194−#: Dash/DashVideos.qml:31
195−msgid "Popular Online"
196−msgstr "Vinsælt á Netinu"
197−
198−#: Dash/DashVideos.qml:146
199−msgid "Videos"
200−msgstr "Myndbönd"
201−
202−#: Dash/Video/VideoPreview.qml:130
203−msgid "Directed by:"
204−msgstr "Leikstýrt af:"
205−
206−#: Dash/Video/VideoPreview.qml:153
207−msgid "Starring:"
208−msgstr "Meðal leikara eru:"
209−
210−#: Dash/Video/VideoPreview.qml:176
211−msgid "Author:"
212−msgstr "Höfundur:"
213−
214#: Greeter/Lockscreen.qml:142
176#: Greeter/Lockscreen.qml:142
215msgid "Emergency Call"
177msgid "Emergency Call"
216msgstr "Neyðarsímtal"
178msgstr "Neyðarsímtal"
@@ -248,7 +210,7 @@ msgstr "Tala..."
248msgid "Search"
210msgid "Search"
249msgstr "Leita"
211msgstr "Leita"
250
212
251−#: plugins/Unity/scope.cpp:336
213+#: plugins/Unity/scope.cpp:398
252msgid "Sorry, there is nothing that matches your search."
214msgid "Sorry, there is nothing that matches your search."
253msgstr "Því miður, það var ekkert sem passaði við leitarorðið þitt."
215msgstr "Því miður, það var ekkert sem passaði við leitarorðið þitt."
254
216
@@ -256,7 +218,28 @@ msgstr "Því miður, það var ekkert sem passaði við leitarorðið þitt."
256msgid "All"
218msgid "All"
257msgstr ""
219msgstr ""
258
220
259−#: Shell.qml:453
221+#: Shell.qml:438
260#, qt-format
222#, qt-format
261msgid "Please enter %1"
223msgid "Please enter %1"
262msgstr ""
224msgstr ""
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+41−56
@@ -7,16 +7,16 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11−"PO-Revision-Date: 2013-09-28 10:05+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"
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-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "Wikipedia"
86msgid "YouTube"
86msgid "YouTube"
87msgstr "YouTube"
87msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr "Salta introduzione"
91msgstr "Salta introduzione"
92
92
@@ -136,85 +136,49 @@ msgid ""
136"You have now mastered the edge gestures and can start using the "
136"You have now mastered the edge gestures and can start using the "
137"phone<br><br>Tap anywhere to start"
137"phone<br><br>Tap anywhere to start"
138msgstr ""
138msgstr ""
139+"I gesti sui bordi sono stati configurati ed è possibile iniziare a usare il "
140+"telefono<br><br>Toccare in un punto qualunque per iniziare"
139
141
140−#: Components/PageHeader.qml:298
142+#: Components/PageHeader.qml:341
141msgid "Recent searches"
143msgid "Recent searches"
142msgstr "Ricerche recenti"
144msgstr "Ricerche recenti"
143
145
144#. TRANSLATORS: Number of persons who rated this app
146#. TRANSLATORS: Number of persons who rated this app
147+#. TRANSLATORS: Number of persons who rated this app/video/whatever
145−#: Dash/Apps/AppInfo.qml:73
148+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
146#, qt-format
149#, qt-format
147msgid "(%1)"
150msgid "(%1)"
148msgstr "(%1)"
151msgstr "(%1)"
149
152
150#. TRANSLATORS: Number of persons who wrote reviews for this app
153#. TRANSLATORS: Number of persons who wrote reviews for this app
154+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
151−#: Dash/Apps/AppInfo.qml:85
155+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
152#, qt-format
156#, qt-format
153msgid "%1 review"
157msgid "%1 review"
154msgid_plural "%1 reviews"
158msgid_plural "%1 reviews"
155msgstr[0] "%1 recensione"
159msgstr[0] "%1 recensione"
156msgstr[1] "%1 recensioni"
160msgstr[1] "%1 recensioni"
157
161
158−#: Dash/Apps/AppPreview.qml:178
162+#: Dash/Apps/AppPreview.qml:126
159msgid "Rate this"
163msgid "Rate this"
160msgstr "Valuta"
164msgstr "Valuta"
161
165
162−#: Dash/Apps/AppReviews.qml:74
166+#: Dash/Previews/Reviews.qml:74
163msgid "Add a review"
167msgid "Add a review"
164msgstr "Aggiungi una recensione"
168msgstr "Aggiungi una recensione"
165
169
166−#: Dash/Apps/AppReviews.qml:86
170+#: Dash/Previews/Reviews.qml:86
167msgid "Review"
171msgid "Review"
168msgstr "Recensisci"
172msgstr "Recensisci"
169
173
170−#: Dash/Apps/AppReviews.qml:121
174+#: Dash/Previews/Reviews.qml:121
171msgid "Send"
175msgid "Send"
172msgstr "Invia"
176msgstr "Invia"
173
177
174−#: Dash/Apps/AppReviews.qml:139
178+#: Dash/Previews/Reviews.qml:139
175msgid "Comments:"
179msgid "Comments:"
176msgstr "Commenti:"
180msgstr "Commenti:"
177
181
178−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
179−msgid "Featured"
180−msgstr "In evidenza"
181−
182−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
183−msgid "Recent"
184−msgstr "Recenti"
185−
186−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
187−msgid "New Releases"
188−msgstr "Nuovi rilasci"
189−
190−#: Dash/DashMusic.qml:30
191−msgid "Top Charting"
192−msgstr "Più votate"
193−
194−#: Dash/DashMusic.qml:91
195−msgid "Music"
196−msgstr "Musica"
197−
198−#: Dash/DashVideos.qml:31
199−msgid "Popular Online"
200−msgstr "Popolari online"
201−
202−#: Dash/DashVideos.qml:146
203−msgid "Videos"
204−msgstr "Video"
205−
206−#: Dash/Video/VideoPreview.qml:130
207−msgid "Directed by:"
208−msgstr "Diretto da:"
209−
210−#: Dash/Video/VideoPreview.qml:153
211−msgid "Starring:"
212−msgstr "Valutazioni:"
213−
214−#: Dash/Video/VideoPreview.qml:176
215−msgid "Author:"
216−msgstr "Autore:"
217−
218#: Greeter/Lockscreen.qml:142
182#: Greeter/Lockscreen.qml:142
219msgid "Emergency Call"
183msgid "Emergency Call"
220msgstr "Chiamata di emergenza"
184msgstr "Chiamata di emergenza"
@@ -252,15 +216,36 @@ msgstr "Sto parlando..."
252msgid "Search"
216msgid "Search"
253msgstr "Cerca"
217msgstr "Cerca"
254
218
255−#: plugins/Unity/scope.cpp:336
219+#: plugins/Unity/scope.cpp:398
256msgid "Sorry, there is nothing that matches your search."
220msgid "Sorry, there is nothing that matches your search."
257msgstr "Nessun risultato corrispondente alla ricerca."
221msgstr "Nessun risultato corrispondente alla ricerca."
258
222
259#: plugins/Unity/showallfilteroption.cpp:41
223#: plugins/Unity/showallfilteroption.cpp:41
260msgid "All"
224msgid "All"
261−msgstr ""
225+msgstr "Tutto"
262
226
263−#: Shell.qml:453
227+#: Shell.qml:438
264#, qt-format
228#, qt-format
265msgid "Please enter %1"
229msgid "Please enter %1"
266msgstr "Inserire %1"
230msgstr "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+16−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr ""
137msgstr ""
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr ""
144msgstr ""
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] ""
152msgstr[0] ""
151msgstr[1] ""
153msgstr[1] ""
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr ""
157msgstr ""
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr ""
161msgstr ""
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr ""
165msgstr ""
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr ""
169msgstr ""
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr ""
173msgstr ""
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr ""
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr ""
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr ""
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr ""
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr ""
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr ""
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr ""
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr ""
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr ""
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr ""
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr ""
177msgstr ""
@@ -247,7 +209,7 @@ msgstr ""
247msgid "Search"
209msgid "Search"
248msgstr ""
210msgstr ""
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr ""
214msgstr ""
253
215
@@ -255,7 +217,7 @@ msgstr ""
255msgid "All"
217msgid "All"
256msgstr ""
218msgstr ""
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr ""
223msgstr ""
po/km.ponew file+248
@@ -0,0 +1,248 @@
1+# Khmer 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-10-11 12:12+0200\n"
11+"PO-Revision-Date: 2013-10-11 08:49+0000\n"
12+"Last-Translator: Khoem Sokhem <khoemsokhem@khmeros.info>\n"
13+"Language-Team: Khmer <km@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-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
20+
21+#: Applications/applications.js:23
22+msgid "Phone"
23+msgstr "ទូរស័ព្ទ"
24+
25+#: Applications/applications.js:29
26+msgid "Camera"
27+msgstr "ម៉ាស៊ីន​ថ​ត"
28+
29+#: Applications/applications.js:35
30+msgid "Gallery"
31+msgstr "វិចិត្រសាល"
32+
33+#: Applications/applications.js:40
34+msgid "Facebook"
35+msgstr "Facebook"
36+
37+#: Applications/applications.js:46
38+msgid "Browser"
39+msgstr "កម្មវិធី​រុករក"
40+
41+#: Applications/applications.js:51
42+msgid "Twitter"
43+msgstr "Twitter"
44+
45+#: Applications/applications.js:57
46+msgid "GMail"
47+msgstr "GMail"
48+
49+#: Applications/applications.js:62
50+msgid "Weather"
51+msgstr "អាកាសធាតុ"
52+
53+#: Applications/applications.js:68
54+msgid "Notepad"
55+msgstr "Notepad"
56+
57+#: Applications/applications.js:74
58+msgid "Calendar"
59+msgstr "ប្រតិទិន"
60+
61+#: Applications/applications.js:80
62+msgid "Media Player"
63+msgstr "កម្មវិធី​ចាក់​មេឌៀ"
64+
65+#: Applications/applications.js:86
66+msgid "Evernote"
67+msgstr "Evernote"
68+
69+#: Applications/applications.js:91
70+msgid "Map"
71+msgstr "ផែនទី"
72+
73+#: Applications/applications.js:96
74+msgid "Pinterest"
75+msgstr "Pinterest"
76+
77+#: Applications/applications.js:101
78+msgid "SoundCloud"
79+msgstr "SoundCloud"
80+
81+#: Applications/applications.js:106
82+msgid "Wikipedia"
83+msgstr "វីគីភីឌៀ"
84+
85+#: Applications/applications.js:111
86+msgid "YouTube"
87+msgstr "YouTube"
88+
89+#: Components/EdgeDemoOverlay.qml:149
90+msgid "Skip intro"
91+msgstr "រំលង​ការ​ណែនាំ"
92+
93+#: Components/EdgeDemo.qml:112
94+msgid "Right edge"
95+msgstr "គែម​ស្ដាំ"
96+
97+#: Components/EdgeDemo.qml:113
98+msgid "Try swiping from the right edge to unlock the phone"
99+msgstr "សាកល្បង​​អូស​ពី​គែម​ស្ដាំ​ ដើម្បី​ដោះ​សោ​ទូរស័ព្ទ"
100+
101+#: Components/EdgeDemo.qml:144
102+msgid "Top edge"
103+msgstr "គែម​ខាង​លើ"
104+
105+#: Components/EdgeDemo.qml:145
106+msgid "Try swiping from the top edge to access the indicators"
107+msgstr "សាកល្បង​អូស​ពី​គែម​ខាង​លើ ដើម្បី​ចូល​ដំណើរការ​សញ្ញា"
108+
109+#: Components/EdgeDemo.qml:170
110+msgid "Close"
111+msgstr "បិទ"
112+
113+#: Components/EdgeDemo.qml:171
114+msgid "Swipe up again to close the settings screen"
115+msgstr "អូស​ឡើង​លើ​ម្ដងទៀត ដើម្បី​បិទ​ការ​កំណត់​អេក្រង់"
116+
117+#: Components/EdgeDemo.qml:198
118+msgid "Left edge"
119+msgstr "គែមឆ្វេង"
120+
121+#: Components/EdgeDemo.qml:199
122+msgid "Swipe from the left to reveal the launcher for quick access to apps"
123+msgstr ""
124+"អូស​ពី​គែម​ឆ្វេង "
125+"ដើម្បី​បង្ហាញ​កម្មវិធី​ចាប់ផ្ដើម​សម្រាប់​ចូល​ដំណើរ​ការ​កម្មវិធី​រហ័ស"
126+
127+#: Components/EdgeDemo.qml:226
128+msgid "Well done"
129+msgstr "ធ្វើ​បាន​ល្អ"
130+
131+#: Components/EdgeDemo.qml:227
132+msgid ""
133+"You have now mastered the edge gestures and can start using the "
134+"phone<br><br>Tap anywhere to start"
135+msgstr ""
136+"ឥឡូវ​អ្នក​បាន​គ្រប់គ្រង​កាយវិការ​គែម "
137+"និង​អាច​ចាប់ផ្ដើម​ប្រើ​ទូរស័ព្ទ​បាន<br><br>ប៉ះ​កន្លែង​ណា​មួយ​ "
138+"ដើម្បី​ចាប់ផ្ដើម"
139+
140+#: Components/PageHeader.qml:341
141+msgid "Recent searches"
142+msgstr "ការ​ស្វែងរក​ថ្មី"
143+
144+#. TRANSLATORS: Number of persons who rated this app
145+#. TRANSLATORS: Number of persons who rated this app/video/whatever
146+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
147+#, qt-format
148+msgid "(%1)"
149+msgstr "(%1)"
150+
151+#. TRANSLATORS: Number of persons who wrote reviews for this app
152+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
153+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
154+#, qt-format
155+msgid "%1 review"
156+msgid_plural "%1 reviews"
157+msgstr[0] "ពិនិត្យ​មើល %1"
158+
159+#: Dash/Apps/AppPreview.qml:126
160+msgid "Rate this"
161+msgstr "វាយតម្លៃ​វា"
162+
163+#: Dash/Previews/Reviews.qml:74
164+msgid "Add a review"
165+msgstr "បន្ថែម​ការ​ពិនិត្យ"
166+
167+#: Dash/Previews/Reviews.qml:86
168+msgid "Review"
169+msgstr "ការ​ពិនិត្យ"
170+
171+#: Dash/Previews/Reviews.qml:121
172+msgid "Send"
173+msgstr "ផ្ញើ"
174+
175+#: Dash/Previews/Reviews.qml:139
176+msgid "Comments:"
177+msgstr "មតិយោបល់៖"
178+
179+#: Greeter/Lockscreen.qml:142
180+msgid "Emergency Call"
181+msgstr "ការ​ហៅ​ពេល​អាសន្ន"
182+
183+#: Greeter/PassphraseLockscreen.qml:59
184+#, qt-format
185+msgid "Hello %1"
186+msgstr "សួស្ដី %1"
187+
188+#: Greeter/PassphraseLockscreen.qml:59
189+msgid "Hello"
190+msgstr "សួស្តី"
191+
192+#: Hud/HudParametrizedActionsPage.qml:132
193+msgid "Confirm"
194+msgstr "បញ្ជាក់"
195+
196+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
197+msgid "Type or say a command"
198+msgstr "បញ្ចូល ឬ​និយាយ​ពាក្យ​បញ្ជា"
199+
200+#: Hud/Hud.qml:84
201+msgid "Loading. Please Wait..."
202+msgstr "សូម​រង់ចាំ កំពុង​ផ្ទុក..."
203+
204+#: Hud/Hud.qml:89
205+msgid "Speak Now..."
206+msgstr "និយាយ​ឥឡូវ..."
207+
208+#: Hud/Hud.qml:94
209+msgid "Speaking..."
210+msgstr "កំពុង​និយាយ..."
211+
212+#: Panel/SearchIndicator.qml:27
213+msgid "Search"
214+msgstr "ស្វែង​រក"
215+
216+#: plugins/Unity/scope.cpp:398
217+msgid "Sorry, there is nothing that matches your search."
218+msgstr "សូម​ទោស មិនមាន​ពាក្យ​ដែល​អ្នក​ស្វែងរក​ទេ​។"
219+
220+#: plugins/Unity/showallfilteroption.cpp:41
221+msgid "All"
222+msgstr "ទាំង​អស់"
223+
224+#: Shell.qml:438
225+#, qt-format
226+msgid "Please enter %1"
227+msgstr "សូម​បញ្ចូល %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+22−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr "ಇತ್ತೀಚಿನ ಹುಡುಕಾಟಗಳು"
137msgstr "ಇತ್ತೀಚಿನ ಹುಡುಕಾಟಗಳು"
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr ""
144msgstr ""
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] ""
152msgstr[0] ""
151msgstr[1] ""
153msgstr[1] ""
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr ""
157msgstr ""
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr ""
161msgstr ""
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr ""
165msgstr ""
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr ""
169msgstr ""
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr ""
173msgstr ""
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr ""
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr ""
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr ""
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr ""
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr "ಸಂಗೀತ"
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr ""
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr "ವೀಡಿಯೋಗಳು"
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr ""
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr ""
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr ""
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr ""
177msgstr ""
@@ -247,7 +209,7 @@ msgstr "ಮಾತನಾಡುತಿದ್ದೀರಿ"
247msgid "Search"
209msgid "Search"
248msgstr "ಹುಡುಕು"
210msgstr "ಹುಡುಕು"
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr "ಕ್ಷಮಿಸಿ ನಿಮ್ಮ ಶೋಧನೆಗೆ ಸರಿಯಾದ ಹೊಂದಾಣಿಕೆಗಳು ದೊರಕುತ್ತಿಲ್ಲ"
214msgstr "ಕ್ಷಮಿಸಿ ನಿಮ್ಮ ಶೋಧನೆಗೆ ಸರಿಯಾದ ಹೊಂದಾಣಿಕೆಗಳು ದೊರಕುತ್ತಿಲ್ಲ"
253
215
@@ -255,7 +217,13 @@ msgstr "ಕ್ಷಮಿಸಿ ನಿಮ್ಮ ಶೋಧನೆಗೆ ಸರಿಯ
255msgid "All"
217msgid "All"
256msgstr ""
218msgstr ""
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr ""
223msgstr ""
224+
225+#~ msgid "Music"
226+#~ msgstr "ಸಂಗೀತ"
227+
228+#~ msgid "Videos"
229+#~ msgstr "ವೀಡಿಯೋಗಳು"
po/ko.po+42−77
@@ -7,92 +7,92 @@ 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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11−"PO-Revision-Date: 2013-06-27 05:59+0000\n"
11+"PO-Revision-Date: 2013-10-10 07:04+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.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"
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-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
23−msgstr ""
23+msgstr "전화"
24
24
25#: Applications/applications.js:29
25#: Applications/applications.js:29
26msgid "Camera"
26msgid "Camera"
27−msgstr ""
27+msgstr "카메라"
28
28
29#: Applications/applications.js:35
29#: Applications/applications.js:35
30msgid "Gallery"
30msgid "Gallery"
31−msgstr ""
31+msgstr "갤러리"
32
32
33#: Applications/applications.js:40
33#: Applications/applications.js:40
34msgid "Facebook"
34msgid "Facebook"
35−msgstr ""
35+msgstr "페이스북"
36
36
37#: Applications/applications.js:46
37#: Applications/applications.js:46
38msgid "Browser"
38msgid "Browser"
39−msgstr ""
39+msgstr "브라우저"
40
40
41#: Applications/applications.js:51
41#: Applications/applications.js:51
42msgid "Twitter"
42msgid "Twitter"
43−msgstr ""
43+msgstr "트위터"
44
44
45#: Applications/applications.js:57
45#: Applications/applications.js:57
46msgid "GMail"
46msgid "GMail"
47−msgstr ""
47+msgstr "지메일"
48
48
49#: Applications/applications.js:62
49#: Applications/applications.js:62
50msgid "Weather"
50msgid "Weather"
51−msgstr ""
51+msgstr "날씨"
52
52
53#: Applications/applications.js:68
53#: Applications/applications.js:68
54msgid "Notepad"
54msgid "Notepad"
55−msgstr ""
55+msgstr "메모장"
56
56
57#: Applications/applications.js:74
57#: Applications/applications.js:74
58msgid "Calendar"
58msgid "Calendar"
59−msgstr ""
59+msgstr "달력"
60
60
61#: Applications/applications.js:80
61#: Applications/applications.js:80
62msgid "Media Player"
62msgid "Media Player"
63−msgstr ""
63+msgstr "미디어 재생기"
64
64
65#: Applications/applications.js:86
65#: Applications/applications.js:86
66msgid "Evernote"
66msgid "Evernote"
67−msgstr ""
67+msgstr "에버노트"
68
68
69#: Applications/applications.js:91
69#: Applications/applications.js:91
70msgid "Map"
70msgid "Map"
71−msgstr ""
71+msgstr "지도"
72
72
73#: Applications/applications.js:96
73#: Applications/applications.js:96
74msgid "Pinterest"
74msgid "Pinterest"
75−msgstr ""
75+msgstr "핀터레스트"
76
76
77#: Applications/applications.js:101
77#: Applications/applications.js:101
78msgid "SoundCloud"
78msgid "SoundCloud"
79−msgstr ""
79+msgstr "사운드클라우드"
80
80
81#: Applications/applications.js:106
81#: Applications/applications.js:106
82msgid "Wikipedia"
82msgid "Wikipedia"
83−msgstr ""
83+msgstr "위키백과"
84
84
85#: Applications/applications.js:111
85#: Applications/applications.js:111
86msgid "YouTube"
86msgid "YouTube"
87−msgstr ""
87+msgstr "유튜브"
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91−msgstr ""
91+msgstr "도입부 건너뛰기"
92
92
93#: Components/EdgeDemo.qml:112
93#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95−msgstr ""
95+msgstr "오른쪽 끝"
96
96
97#: Components/EdgeDemo.qml:113
97#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137−msgstr "요즈음 찿은 것들"
137+msgstr "최근 검색"
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr ""
144msgstr ""
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] ""
152msgstr[0] ""
151msgstr[1] ""
153msgstr[1] ""
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr ""
157msgstr ""
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr ""
161msgstr ""
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr ""
165msgstr ""
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr ""
169msgstr ""
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr ""
173msgstr ""
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr ""
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr ""
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr ""
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr ""
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr "음악"
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr ""
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr ""
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr ""
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr ""
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr ""
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr ""
177msgstr ""
@@ -245,9 +207,9 @@ msgstr ""
245
207
246#: Panel/SearchIndicator.qml:27
208#: Panel/SearchIndicator.qml:27
247msgid "Search"
209msgid "Search"
248−msgstr "찾기"
210+msgstr "검색"
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr ""
214msgstr ""
253
215
@@ -255,7 +217,10 @@ msgstr ""
255msgid "All"
217msgid "All"
256msgstr ""
218msgstr ""
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr ""
223msgstr ""
224+
225+#~ msgid "Music"
226+#~ msgstr "음악"
po/ky.po+22−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr "Соңку издөөлөр"
137msgstr "Соңку издөөлөр"
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr ""
144msgstr ""
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] ""
152msgstr[0] ""
151msgstr[1] ""
153msgstr[1] ""
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr ""
157msgstr ""
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr ""
161msgstr ""
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr ""
165msgstr ""
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr ""
169msgstr ""
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr ""
173msgstr ""
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr ""
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr ""
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr ""
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr ""
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr "Музыка"
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr ""
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr "Видеолор"
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr ""
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr ""
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr ""
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr ""
177msgstr ""
@@ -247,7 +209,7 @@ msgstr "Сүйлөнүүдө..."
247msgid "Search"
209msgid "Search"
248msgstr "Издөө"
210msgstr "Издөө"
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr "Тилекке каршы, сиздин издөөңүзгө эч нерсе дал келген жок."
214msgstr "Тилекке каршы, сиздин издөөңүзгө эч нерсе дал келген жок."
253
215
@@ -255,7 +217,13 @@ msgstr "Тилекке каршы, сиздин издөөңүзгө эч нер
255msgid "All"
217msgid "All"
256msgstr ""
218msgstr ""
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr ""
223msgstr ""
224+
225+#~ msgid "Music"
226+#~ msgstr "Музыка"
227+
228+#~ msgid "Videos"
229+#~ msgstr "Видеолор"
po/lo.po+22−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-03 06:08+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16791)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr "ິYouTube"
87msgstr "ິYouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr ""
137msgstr ""
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr "(%1)"
144msgstr "(%1)"
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] ""
152msgstr[0] ""
151msgstr[1] ""
153msgstr[1] ""
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr ""
157msgstr ""
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr ""
161msgstr ""
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr ""
165msgstr ""
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr "ສົ່ງ"
169msgstr "ສົ່ງ"
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr "ຄໍ່ເຫັນ"
173msgstr "ຄໍ່ເຫັນ"
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr ""
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr ""
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr ""
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr ""
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr "ດົນຕີ"
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr ""
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr "ວິດີໂອ"
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr ""
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr ""
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr ""
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr ""
177msgstr ""
@@ -247,7 +209,7 @@ msgstr "ກໍາລັງເວົ້າ"
247msgid "Search"
209msgid "Search"
248msgstr "ຊອກຫາ"
210msgstr "ຊອກຫາ"
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr ""
214msgstr ""
253
215
@@ -255,7 +217,13 @@ msgstr ""
255msgid "All"
217msgid "All"
256msgstr "ທັງໝົດ"
218msgstr "ທັງໝົດ"
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr "ກະລູນາປ້ອນ %1"
223msgstr "ກະລູນາປ້ອນ %1"
224+
225+#~ msgid "Videos"
226+#~ msgstr "ວິດີໂອ"
227+
228+#~ msgid "Music"
229+#~ msgstr "ດົນຕີ"
po/lv.po+22−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "Vikipēdija"
86msgid "YouTube"
86msgid "YouTube"
87msgstr "YouTube"
87msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr "Nesen veiktās meklēšanas"
137msgstr "Nesen veiktās meklēšanas"
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr ""
144msgstr ""
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] ""
152msgstr[0] ""
151msgstr[1] ""
153msgstr[1] ""
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr ""
157msgstr ""
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr ""
161msgstr ""
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr ""
165msgstr ""
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr ""
169msgstr ""
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr ""
173msgstr ""
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr ""
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr ""
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr ""
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr ""
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr "Mūzika"
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr ""
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr "Video"
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr ""
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr ""
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr ""
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr ""
177msgstr ""
@@ -247,7 +209,7 @@ msgstr "Runa..."
247msgid "Search"
209msgid "Search"
248msgstr "Meklēt"
210msgstr "Meklēt"
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr "Diemžēl nekas neatbilst jūsu meklētajam."
214msgstr "Diemžēl nekas neatbilst jūsu meklētajam."
253
215
@@ -255,7 +217,13 @@ msgstr "Diemžēl nekas neatbilst jūsu meklētajam."
255msgid "All"
217msgid "All"
256msgstr ""
218msgstr ""
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr ""
223msgstr ""
224+
225+#~ msgid "Music"
226+#~ msgstr "Mūzika"
227+
228+#~ msgid "Videos"
229+#~ msgstr "Video"
po/my.po+60−83
@@ -7,92 +7,92 @@ 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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11−"PO-Revision-Date: 2013-06-27 06:47+0000\n"
11+"PO-Revision-Date: 2013-10-09 11:35+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12+"Last-Translator: Pyae Sone <Unknown>\n"
13"Language-Team: Burmese <my@li.org>\n"
13"Language-Team: Burmese <my@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
23−msgstr ""
23+msgstr "ဖုန်း"
24
24
25#: Applications/applications.js:29
25#: Applications/applications.js:29
26msgid "Camera"
26msgid "Camera"
27−msgstr ""
27+msgstr "ကင်မရာ"
28
28
29#: Applications/applications.js:35
29#: Applications/applications.js:35
30msgid "Gallery"
30msgid "Gallery"
31−msgstr ""
31+msgstr "ဓာတ်ပုံသိမ်းထားသည့်နေရာ"
32
32
33#: Applications/applications.js:40
33#: Applications/applications.js:40
34msgid "Facebook"
34msgid "Facebook"
35−msgstr ""
35+msgstr "Facebook"
36
36
37#: Applications/applications.js:46
37#: Applications/applications.js:46
38msgid "Browser"
38msgid "Browser"
39−msgstr ""
39+msgstr "Browser"
40
40
41#: Applications/applications.js:51
41#: Applications/applications.js:51
42msgid "Twitter"
42msgid "Twitter"
43−msgstr ""
43+msgstr "Twitter"
44
44
45#: Applications/applications.js:57
45#: Applications/applications.js:57
46msgid "GMail"
46msgid "GMail"
47−msgstr ""
47+msgstr "ဂျီမေးလ်"
48
48
49#: Applications/applications.js:62
49#: Applications/applications.js:62
50msgid "Weather"
50msgid "Weather"
51−msgstr ""
51+msgstr "ရာသီဥတု"
52
52
53#: Applications/applications.js:68
53#: Applications/applications.js:68
54msgid "Notepad"
54msgid "Notepad"
55−msgstr ""
55+msgstr "Notepad"
56
56
57#: Applications/applications.js:74
57#: Applications/applications.js:74
58msgid "Calendar"
58msgid "Calendar"
59−msgstr ""
59+msgstr "ပြက္ခဒိန်"
60
60
61#: Applications/applications.js:80
61#: Applications/applications.js:80
62msgid "Media Player"
62msgid "Media Player"
63−msgstr ""
63+msgstr "မီဒီယာဖွင့်စက်"
64
64
65#: Applications/applications.js:86
65#: Applications/applications.js:86
66msgid "Evernote"
66msgid "Evernote"
67−msgstr ""
67+msgstr "Evernote"
68
68
69#: Applications/applications.js:91
69#: Applications/applications.js:91
70msgid "Map"
70msgid "Map"
71−msgstr ""
71+msgstr "မြေပုံ"
72
72
73#: Applications/applications.js:96
73#: Applications/applications.js:96
74msgid "Pinterest"
74msgid "Pinterest"
75−msgstr ""
75+msgstr "Pinterest"
76
76
77#: Applications/applications.js:101
77#: Applications/applications.js:101
78msgid "SoundCloud"
78msgid "SoundCloud"
79−msgstr ""
79+msgstr "SoundCloud"
80
80
81#: Applications/applications.js:106
81#: Applications/applications.js:106
82msgid "Wikipedia"
82msgid "Wikipedia"
83−msgstr ""
83+msgstr "ဝီကီပီဒီးယား"
84
84
85#: Applications/applications.js:111
85#: Applications/applications.js:111
86msgid "YouTube"
86msgid "YouTube"
87−msgstr ""
87+msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91−msgstr ""
91+msgstr "မိတ်ဆက်ကိုကျော်မည်"
92
92
93#: Components/EdgeDemo.qml:112
93#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95−msgstr ""
95+msgstr "ညာဖက် အစွန်း"
96
96
97#: Components/EdgeDemo.qml:113
97#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
@@ -100,7 +100,7 @@ msgstr ""
100
100
101#: Components/EdgeDemo.qml:144
101#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103−msgstr ""
103+msgstr "ထိပ် အစွန်း"
104
104
105#: Components/EdgeDemo.qml:145
105#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
@@ -108,7 +108,7 @@ msgstr ""
108
108
109#: Components/EdgeDemo.qml:170
109#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111−msgstr ""
111+msgstr "ပိတ်"
112
112
113#: Components/EdgeDemo.qml:171
113#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
@@ -116,7 +116,7 @@ msgstr ""
116
116
117#: Components/EdgeDemo.qml:198
117#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119−msgstr ""
119+msgstr "ဘယ်​ဖက် အစွန်း"
120
120
121#: Components/EdgeDemo.qml:199
121#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
@@ -124,7 +124,7 @@ msgstr ""
124
124
125#: Components/EdgeDemo.qml:226
125#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127−msgstr ""
127+msgstr "ကောင်းအောင်ပြုလုပ်ခဲ့သည်"
128
128
129#: Components/EdgeDemo.qml:227
129#: Components/EdgeDemo.qml:227
130msgid ""
130msgid ""
@@ -132,83 +132,45 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr "မကြာသေးခင်က ရှာဖွေခြင်း"
137msgstr "မကြာသေးခင်က ရှာဖွေခြင်း"
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143−msgstr ""
144+msgstr "(%1)"
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] ""
152msgstr[0] ""
151msgstr[1] ""
153msgstr[1] ""
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155−msgstr ""
157+msgstr "ဒီဟာကိုအမှတ်ပေးမည်"
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr ""
161msgstr ""
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr ""
165msgstr ""
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167−msgstr ""
169+msgstr "ပို့မည်"
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171−msgstr ""
173+msgstr "မှတ်ချက်များ-"
172−
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr ""
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr ""
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr ""
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr ""
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr "တေးဂီတ"
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr ""
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr "ဗီဒီယိုများ"
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr ""
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr ""
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr ""
212
174
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
@@ -247,7 +209,7 @@ msgstr "ပြောနေသည်"
247msgid "Search"
209msgid "Search"
248msgstr "ရှာဖွေ"
210msgstr "ရှာဖွေ"
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr "ဆောရီး၊ သင်၏ရှာဖွေမူနှင့်တူညီတာဘာမှမရှိပါ။"
214msgstr "ဆောရီး၊ သင်၏ရှာဖွေမူနှင့်တူညီတာဘာမှမရှိပါ။"
253
215
@@ -255,7 +217,22 @@ msgstr "ဆောရီး၊ သင်၏ရှာဖွေမူနှင့
255msgid "All"
217msgid "All"
256msgstr ""
218msgstr ""
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr ""
223msgstr ""
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+22−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr "Siste søk"
137msgstr "Siste søk"
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr ""
144msgstr ""
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] ""
152msgstr[0] ""
151msgstr[1] ""
153msgstr[1] ""
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr ""
157msgstr ""
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr ""
161msgstr ""
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr ""
165msgstr ""
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr ""
169msgstr ""
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr ""
173msgstr ""
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr ""
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr ""
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr ""
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr ""
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr "Musikk"
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr ""
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr "Videoer"
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr ""
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr ""
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr ""
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr ""
177msgstr ""
@@ -247,7 +209,7 @@ msgstr "Snakker …"
247msgid "Search"
209msgid "Search"
248msgstr "Søk"
210msgstr "Søk"
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr "Søket ga ingen treff."
214msgstr "Søket ga ingen treff."
253
215
@@ -255,7 +217,13 @@ msgstr "Søket ga ingen treff."
255msgid "All"
217msgid "All"
256msgstr ""
218msgstr ""
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr ""
223msgstr ""
224+
225+#~ msgid "Music"
226+#~ msgstr "Musikk"
227+
228+#~ msgid "Videos"
229+#~ msgstr "Videoer"
po/nl.po+22−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr "Recente zoekopdrachten"
137msgstr "Recente zoekopdrachten"
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr ""
144msgstr ""
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] ""
152msgstr[0] ""
151msgstr[1] ""
153msgstr[1] ""
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr ""
157msgstr ""
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr ""
161msgstr ""
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr ""
165msgstr ""
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr ""
169msgstr ""
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr ""
173msgstr ""
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr ""
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr ""
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr ""
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr ""
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr "Muziek"
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr ""
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr "Video's"
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr ""
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr ""
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr ""
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr ""
177msgstr ""
@@ -247,7 +209,7 @@ msgstr "Inspreken…"
247msgid "Search"
209msgid "Search"
248msgstr "Zoeken"
210msgstr "Zoeken"
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr "Er is helaas niets dat met uw zoekopdracht overeenkomt."
214msgstr "Er is helaas niets dat met uw zoekopdracht overeenkomt."
253
215
@@ -255,7 +217,13 @@ msgstr "Er is helaas niets dat met uw zoekopdracht overeenkomt."
255msgid "All"
217msgid "All"
256msgstr ""
218msgstr ""
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr ""
223msgstr ""
224+
225+#~ msgid "Music"
226+#~ msgstr "Muziek"
227+
228+#~ msgid "Videos"
229+#~ msgstr "Video's"
po/pl.po+42−75
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11−"PO-Revision-Date: 2013-06-27 08:52+0000\n"
11+"PO-Revision-Date: 2013-10-13 13:44+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.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"
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=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-02 06:03+0000\n"
19+"X-Launchpad-Export-Date: 2013-10-14 05:47+0000\n"
20−"X-Generator: Launchpad (build 16774)\n"
20+"X-Generator: Launchpad (build 16799)\n"
21
21
22#: Applications/applications.js:23
22#: Applications/applications.js:23
23msgid "Phone"
23msgid "Phone"
@@ -87,133 +87,100 @@ msgstr "Wikipedia"
87msgid "YouTube"
87msgid "YouTube"
88msgstr "YouTube"
88msgstr "YouTube"
89
89
90−#: Components/EdgeDemoOverlay.qml:150
90+#: Components/EdgeDemoOverlay.qml:149
91msgid "Skip intro"
91msgid "Skip intro"
92−msgstr ""
92+msgstr "Pomiń intro"
93
93
94#: Components/EdgeDemo.qml:112
94#: Components/EdgeDemo.qml:112
95msgid "Right edge"
95msgid "Right edge"
96−msgstr ""
96+msgstr "Prawa krawędź"
97
97
98#: Components/EdgeDemo.qml:113
98#: Components/EdgeDemo.qml:113
99msgid "Try swiping from the right edge to unlock the phone"
99msgid "Try swiping from the right edge to unlock the phone"
100−msgstr ""
100+msgstr "Aby odblokować telefon, przeciagnij w stronę prawej krawędzi"
101
101
102#: Components/EdgeDemo.qml:144
102#: Components/EdgeDemo.qml:144
103msgid "Top edge"
103msgid "Top edge"
104−msgstr ""
104+msgstr "Górna krawędź"
105
105
106#: Components/EdgeDemo.qml:145
106#: Components/EdgeDemo.qml:145
107msgid "Try swiping from the top edge to access the indicators"
107msgid "Try swiping from the top edge to access the indicators"
108−msgstr ""
108+msgstr "Przeciągnij od górnej krawędzi aby uzyskać wskazówki"
109
109
110#: Components/EdgeDemo.qml:170
110#: Components/EdgeDemo.qml:170
111msgid "Close"
111msgid "Close"
112−msgstr ""
112+msgstr "Zamknij"
113
113
114#: Components/EdgeDemo.qml:171
114#: Components/EdgeDemo.qml:171
115msgid "Swipe up again to close the settings screen"
115msgid "Swipe up again to close the settings screen"
116−msgstr ""
116+msgstr "Przeciągnij ponownie w górę, by zamknąć okno ustawień"
117
117
118#: Components/EdgeDemo.qml:198
118#: Components/EdgeDemo.qml:198
119msgid "Left edge"
119msgid "Left edge"
120−msgstr ""
120+msgstr "Lewa krawędź"
121
121
122#: Components/EdgeDemo.qml:199
122#: Components/EdgeDemo.qml:199
123msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgid "Swipe from the left to reveal the launcher for quick access to apps"
124msgstr ""
124msgstr ""
125+"Przeciągnięcie od lewej krawędzi, uruchamia aktywator szybkiego dostępu do "
126+"aplikacji"
125
127
126#: Components/EdgeDemo.qml:226
128#: Components/EdgeDemo.qml:226
127msgid "Well done"
129msgid "Well done"
128−msgstr ""
130+msgstr "Udało się!"
129
131
130#: Components/EdgeDemo.qml:227
132#: Components/EdgeDemo.qml:227
131msgid ""
133msgid ""
132"You have now mastered the edge gestures and can start using the "
134"You have now mastered the edge gestures and can start using the "
133"phone<br><br>Tap anywhere to start"
135"phone<br><br>Tap anywhere to start"
134msgstr ""
136msgstr ""
137+"Polecenia aktywatorów krawędzi ekranu zostały opanowane<br><br>Dotknij "
138+"gdziekolwiek aby kontynuować"
135
139
136−#: Components/PageHeader.qml:298
140+#: Components/PageHeader.qml:341
137msgid "Recent searches"
141msgid "Recent searches"
138msgstr "Ostatnie wyszukiwania"
142msgstr "Ostatnie wyszukiwania"
139
143
140#. TRANSLATORS: Number of persons who rated this app
144#. TRANSLATORS: Number of persons who rated this app
145+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73
146+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
142#, qt-format
147#, qt-format
143msgid "(%1)"
148msgid "(%1)"
144−msgstr ""
149+msgstr "(%1)"
145
150
146#. TRANSLATORS: Number of persons who wrote reviews for this app
151#. TRANSLATORS: Number of persons who wrote reviews for this app
152+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
147−#: Dash/Apps/AppInfo.qml:85
153+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
148#, qt-format
154#, qt-format
149msgid "%1 review"
155msgid "%1 review"
150msgid_plural "%1 reviews"
156msgid_plural "%1 reviews"
151−msgstr[0] ""
157+msgstr[0] "%1 opinia"
152−msgstr[1] ""
158+msgstr[1] "%1 opinie"
159+msgstr[2] "%1 opinii"
153
160
154−#: Dash/Apps/AppPreview.qml:178
161+#: Dash/Apps/AppPreview.qml:126
155msgid "Rate this"
162msgid "Rate this"
156−msgstr ""
163+msgstr "Oceń to"
157
164
158−#: Dash/Apps/AppReviews.qml:74
165+#: Dash/Previews/Reviews.qml:74
159msgid "Add a review"
166msgid "Add a review"
160−msgstr ""
167+msgstr "Dodaj recenzję"
161
168
162−#: Dash/Apps/AppReviews.qml:86
169+#: Dash/Previews/Reviews.qml:86
163msgid "Review"
170msgid "Review"
164−msgstr ""
171+msgstr "Recenzja"
165
172
166−#: Dash/Apps/AppReviews.qml:121
173+#: Dash/Previews/Reviews.qml:121
167msgid "Send"
174msgid "Send"
168−msgstr ""
175+msgstr "Wyślij"
169
176
170−#: Dash/Apps/AppReviews.qml:139
177+#: Dash/Previews/Reviews.qml:139
171msgid "Comments:"
178msgid "Comments:"
172−msgstr ""
179+msgstr "Komentarze:"
173−
174−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
175−msgid "Featured"
176−msgstr "Polecane"
177−
178−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
179−msgid "Recent"
180−msgstr "Najnowsze"
181−
182−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
183−msgid "New Releases"
184−msgstr "Premiery"
185−
186−#: Dash/DashMusic.qml:30
187−msgid "Top Charting"
188−msgstr "Przeboje"
189−
190−#: Dash/DashMusic.qml:91
191−msgid "Music"
192−msgstr "Muzyka"
193−
194−#: Dash/DashVideos.qml:31
195−msgid "Popular Online"
196−msgstr "Popularne w sieci"
197−
198−#: Dash/DashVideos.qml:146
199−msgid "Videos"
200−msgstr "Filmy"
201−
202−#: Dash/Video/VideoPreview.qml:130
203−msgid "Directed by:"
204−msgstr "Reżyseria:"
205−
206−#: Dash/Video/VideoPreview.qml:153
207−msgid "Starring:"
208−msgstr "Obsada:"
209−
210−#: Dash/Video/VideoPreview.qml:176
211−msgid "Author:"
212−msgstr "Autor:"
213
180
214#: Greeter/Lockscreen.qml:142
181#: Greeter/Lockscreen.qml:142
215msgid "Emergency Call"
182msgid "Emergency Call"
216−msgstr ""
183+msgstr "Telefon ratunkowy"
217
184
218#: Greeter/PassphraseLockscreen.qml:59
185#: Greeter/PassphraseLockscreen.qml:59
219#, qt-format
186#, qt-format
@@ -248,15 +215,15 @@ msgstr "Rozpoznanie..."
248msgid "Search"
215msgid "Search"
249msgstr "Szukaj"
216msgstr "Szukaj"
250
217
251−#: plugins/Unity/scope.cpp:336
218+#: plugins/Unity/scope.cpp:398
252msgid "Sorry, there is nothing that matches your search."
219msgid "Sorry, there is nothing that matches your search."
253msgstr "Nie znaleziono pasujących wyników."
220msgstr "Nie znaleziono pasujących wyników."
254
221
255#: plugins/Unity/showallfilteroption.cpp:41
222#: plugins/Unity/showallfilteroption.cpp:41
256msgid "All"
223msgid "All"
257−msgstr ""
224+msgstr "Wszystko"
258
225
259−#: Shell.qml:453
226+#: Shell.qml:438
260#, qt-format
227#, qt-format
261msgid "Please enter %1"
228msgid "Please enter %1"
262msgstr "Wprowadź %1"
229msgstr "Wprowadź %1"
po/pt_BR.po+37−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "Wikipédia"
86msgid "YouTube"
86msgid "YouTube"
87msgstr "YouTube"
87msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr "Pular introdução"
91msgstr "Pular introdução"
92
92
@@ -134,84 +134,46 @@ msgid ""
134"phone<br><br>Tap anywhere to start"
134"phone<br><br>Tap anywhere to start"
135msgstr ""
135msgstr ""
136
136
137−#: Components/PageHeader.qml:298
137+#: Components/PageHeader.qml:341
138msgid "Recent searches"
138msgid "Recent searches"
139msgstr "Pesquisas recentes"
139msgstr "Pesquisas recentes"
140
140
141#. TRANSLATORS: Number of persons who rated this app
141#. TRANSLATORS: Number of persons who rated this app
142+#. TRANSLATORS: Number of persons who rated this app/video/whatever
142−#: Dash/Apps/AppInfo.qml:73
143+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
143#, qt-format
144#, qt-format
144msgid "(%1)"
145msgid "(%1)"
145msgstr "(%1)"
146msgstr "(%1)"
146
147
147#. TRANSLATORS: Number of persons who wrote reviews for this app
148#. TRANSLATORS: Number of persons who wrote reviews for this app
149+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85
150+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
149#, qt-format
151#, qt-format
150msgid "%1 review"
152msgid "%1 review"
151msgid_plural "%1 reviews"
153msgid_plural "%1 reviews"
152msgstr[0] "%1 análise"
154msgstr[0] "%1 análise"
153msgstr[1] "%1 análises"
155msgstr[1] "%1 análises"
154
156
155−#: Dash/Apps/AppPreview.qml:178
157+#: Dash/Apps/AppPreview.qml:126
156msgid "Rate this"
158msgid "Rate this"
157msgstr "Avaliar isto"
159msgstr "Avaliar isto"
158
160
159−#: Dash/Apps/AppReviews.qml:74
161+#: Dash/Previews/Reviews.qml:74
160msgid "Add a review"
162msgid "Add a review"
161msgstr "Adicionar uma análise"
163msgstr "Adicionar uma análise"
162
164
163−#: Dash/Apps/AppReviews.qml:86
165+#: Dash/Previews/Reviews.qml:86
164msgid "Review"
166msgid "Review"
165msgstr "Revisão"
167msgstr "Revisão"
166
168
167−#: Dash/Apps/AppReviews.qml:121
169+#: Dash/Previews/Reviews.qml:121
168msgid "Send"
170msgid "Send"
169msgstr "Enviar"
171msgstr "Enviar"
170
172
171−#: Dash/Apps/AppReviews.qml:139
173+#: Dash/Previews/Reviews.qml:139
172msgid "Comments:"
174msgid "Comments:"
173msgstr "Comentários:"
175msgstr "Comentários:"
174
176
175−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
176−msgid "Featured"
177−msgstr "Em destaque"
178−
179−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
180−msgid "Recent"
181−msgstr "Recente"
182−
183−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
184−msgid "New Releases"
185−msgstr "Lançamentos"
186−
187−#: Dash/DashMusic.qml:30
188−msgid "Top Charting"
189−msgstr "Top gráficos"
190−
191−#: Dash/DashMusic.qml:91
192−msgid "Music"
193−msgstr "Músicas"
194−
195−#: Dash/DashVideos.qml:31
196−msgid "Popular Online"
197−msgstr "Popular Online"
198−
199−#: Dash/DashVideos.qml:146
200−msgid "Videos"
201−msgstr "Vídeos"
202−
203−#: Dash/Video/VideoPreview.qml:130
204−msgid "Directed by:"
205−msgstr "Realizado por:"
206−
207−#: Dash/Video/VideoPreview.qml:153
208−msgid "Starring:"
209−msgstr "Estrelando:"
210−
211−#: Dash/Video/VideoPreview.qml:176
212−msgid "Author:"
213−msgstr "Autor:"
214−
215#: Greeter/Lockscreen.qml:142
177#: Greeter/Lockscreen.qml:142
216msgid "Emergency Call"
178msgid "Emergency Call"
217msgstr "Chamada de emergência"
179msgstr "Chamada de emergência"
@@ -249,7 +211,7 @@ msgstr "Falando..."
249msgid "Search"
211msgid "Search"
250msgstr "Pesquisar"
212msgstr "Pesquisar"
251
213
252−#: plugins/Unity/scope.cpp:336
214+#: plugins/Unity/scope.cpp:398
253msgid "Sorry, there is nothing that matches your search."
215msgid "Sorry, there is nothing that matches your search."
254msgstr "Desculpe, não há nada que corresponda à sua pesquisa."
216msgstr "Desculpe, não há nada que corresponda à sua pesquisa."
255
217
@@ -257,7 +219,28 @@ msgstr "Desculpe, não há nada que corresponda à sua pesquisa."
257msgid "All"
219msgid "All"
258msgstr ""
220msgstr ""
259
221
260−#: Shell.qml:453
222+#: Shell.qml:438
261#, qt-format
223#, qt-format
262msgid "Please enter %1"
224msgid "Please enter %1"
263msgstr "Por favor, digite %1"
225msgstr "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−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 "
17"Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 "
18"== 0) && (n != 0))) ? 2: 1));\n"
18"== 0) && (n != 0))) ? 2: 1));\n"
19−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
20−"X-Generator: Launchpad (build 16774)\n"
20+"X-Generator: Launchpad (build 16799)\n"
21
21
22#: Applications/applications.js:23
22#: Applications/applications.js:23
23msgid "Phone"
23msgid "Phone"
@@ -87,7 +87,7 @@ msgstr ""
87msgid "YouTube"
87msgid "YouTube"
88msgstr ""
88msgstr ""
89
89
90−#: Components/EdgeDemoOverlay.qml:150
90+#: Components/EdgeDemoOverlay.qml:149
91msgid "Skip intro"
91msgid "Skip intro"
92msgstr ""
92msgstr ""
93
93
@@ -133,84 +133,46 @@ msgid ""
133"phone<br><br>Tap anywhere to start"
133"phone<br><br>Tap anywhere to start"
134msgstr ""
134msgstr ""
135
135
136−#: Components/PageHeader.qml:298
136+#: Components/PageHeader.qml:341
137msgid "Recent searches"
137msgid "Recent searches"
138msgstr "Căutări recente"
138msgstr "Căutări recente"
139
139
140#. TRANSLATORS: Number of persons who rated this app
140#. TRANSLATORS: Number of persons who rated this app
141+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73
142+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
142#, qt-format
143#, qt-format
143msgid "(%1)"
144msgid "(%1)"
144msgstr ""
145msgstr ""
145
146
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app
148+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
147−#: Dash/Apps/AppInfo.qml:85
149+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
148#, qt-format
150#, qt-format
149msgid "%1 review"
151msgid "%1 review"
150msgid_plural "%1 reviews"
152msgid_plural "%1 reviews"
151msgstr[0] ""
153msgstr[0] ""
152msgstr[1] ""
154msgstr[1] ""
153
155
154−#: Dash/Apps/AppPreview.qml:178
156+#: Dash/Apps/AppPreview.qml:126
155msgid "Rate this"
157msgid "Rate this"
156msgstr ""
158msgstr ""
157
159
158−#: Dash/Apps/AppReviews.qml:74
160+#: Dash/Previews/Reviews.qml:74
159msgid "Add a review"
161msgid "Add a review"
160msgstr ""
162msgstr ""
161
163
162−#: Dash/Apps/AppReviews.qml:86
164+#: Dash/Previews/Reviews.qml:86
163msgid "Review"
165msgid "Review"
164msgstr ""
166msgstr ""
165
167
166−#: Dash/Apps/AppReviews.qml:121
168+#: Dash/Previews/Reviews.qml:121
167msgid "Send"
169msgid "Send"
168msgstr ""
170msgstr ""
169
171
170−#: Dash/Apps/AppReviews.qml:139
172+#: Dash/Previews/Reviews.qml:139
171msgid "Comments:"
173msgid "Comments:"
172msgstr ""
174msgstr ""
173
175
174−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
175−msgid "Featured"
176−msgstr ""
177−
178−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
179−msgid "Recent"
180−msgstr ""
181−
182−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
183−msgid "New Releases"
184−msgstr ""
185−
186−#: Dash/DashMusic.qml:30
187−msgid "Top Charting"
188−msgstr ""
189−
190−#: Dash/DashMusic.qml:91
191−msgid "Music"
192−msgstr "Muzică"
193−
194−#: Dash/DashVideos.qml:31
195−msgid "Popular Online"
196−msgstr ""
197−
198−#: Dash/DashVideos.qml:146
199−msgid "Videos"
200−msgstr "Video"
201−
202−#: Dash/Video/VideoPreview.qml:130
203−msgid "Directed by:"
204−msgstr ""
205−
206−#: Dash/Video/VideoPreview.qml:153
207−msgid "Starring:"
208−msgstr ""
209−
210−#: Dash/Video/VideoPreview.qml:176
211−msgid "Author:"
212−msgstr ""
213−
214#: Greeter/Lockscreen.qml:142
176#: Greeter/Lockscreen.qml:142
215msgid "Emergency Call"
177msgid "Emergency Call"
216msgstr ""
178msgstr ""
@@ -248,7 +210,7 @@ msgstr "Vorbire..."
248msgid "Search"
210msgid "Search"
249msgstr "Căutare"
211msgstr "Căutare"
250
212
251−#: plugins/Unity/scope.cpp:336
213+#: plugins/Unity/scope.cpp:398
252msgid "Sorry, there is nothing that matches your search."
214msgid "Sorry, there is nothing that matches your search."
253msgstr ""
215msgstr ""
254"Ne pare rău, nu este nimic care se potrivește căutării dumneavoastră."
216"Ne pare rău, nu este nimic care se potrivește căutării dumneavoastră."
@@ -257,7 +219,13 @@ msgstr ""
257msgid "All"
219msgid "All"
258msgstr ""
220msgstr ""
259
221
260−#: Shell.qml:453
222+#: Shell.qml:438
261#, qt-format
223#, qt-format
262msgid "Please enter %1"
224msgid "Please enter %1"
263msgstr ""
225msgstr ""
226+
227+#~ msgid "Music"
228+#~ msgstr "Muzică"
229+
230+#~ msgid "Videos"
231+#~ msgstr "Video"
po/ru.po+37−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
20−"X-Generator: Launchpad (build 16774)\n"
20+"X-Generator: Launchpad (build 16799)\n"
21
21
22#: Applications/applications.js:23
22#: Applications/applications.js:23
23msgid "Phone"
23msgid "Phone"
@@ -87,7 +87,7 @@ msgstr "Википедия"
87msgid "YouTube"
87msgid "YouTube"
88msgstr "YouTube"
88msgstr "YouTube"
89
89
90−#: Components/EdgeDemoOverlay.qml:150
90+#: Components/EdgeDemoOverlay.qml:149
91msgid "Skip intro"
91msgid "Skip intro"
92msgstr "Пропустить обучение"
92msgstr "Пропустить обучение"
93
93
@@ -138,83 +138,45 @@ msgid ""
138"phone<br><br>Tap anywhere to start"
138"phone<br><br>Tap anywhere to start"
139msgstr ""
139msgstr ""
140
140
141−#: Components/PageHeader.qml:298
141+#: Components/PageHeader.qml:341
142msgid "Recent searches"
142msgid "Recent searches"
143msgstr "Последние поисковые запросы"
143msgstr "Последние поисковые запросы"
144
144
145#. TRANSLATORS: Number of persons who rated this app
145#. TRANSLATORS: Number of persons who rated this app
146+#. TRANSLATORS: Number of persons who rated this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:73
147+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
147#, qt-format
148#, qt-format
148msgid "(%1)"
149msgid "(%1)"
149msgstr "(%1)"
150msgstr "(%1)"
150
151
151#. TRANSLATORS: Number of persons who wrote reviews for this app
152#. TRANSLATORS: Number of persons who wrote reviews for this app
153+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
152−#: Dash/Apps/AppInfo.qml:85
154+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
153#, qt-format
155#, qt-format
154msgid "%1 review"
156msgid "%1 review"
155msgid_plural "%1 reviews"
157msgid_plural "%1 reviews"
156msgstr[0] "%1 отзыв"
158msgstr[0] "%1 отзыв"
157
159
158−#: Dash/Apps/AppPreview.qml:178
160+#: Dash/Apps/AppPreview.qml:126
159msgid "Rate this"
161msgid "Rate this"
160msgstr "Оцените это"
162msgstr "Оцените это"
161
163
162−#: Dash/Apps/AppReviews.qml:74
164+#: Dash/Previews/Reviews.qml:74
163msgid "Add a review"
165msgid "Add a review"
164msgstr "Добавьте отзыв"
166msgstr "Добавьте отзыв"
165
167
166−#: Dash/Apps/AppReviews.qml:86
168+#: Dash/Previews/Reviews.qml:86
167msgid "Review"
169msgid "Review"
168msgstr "Отзыв"
170msgstr "Отзыв"
169
171
170−#: Dash/Apps/AppReviews.qml:121
172+#: Dash/Previews/Reviews.qml:121
171msgid "Send"
173msgid "Send"
172msgstr "Отправить"
174msgstr "Отправить"
173
175
174−#: Dash/Apps/AppReviews.qml:139
176+#: Dash/Previews/Reviews.qml:139
175msgid "Comments:"
177msgid "Comments:"
176msgstr "Комментарии:"
178msgstr "Комментарии:"
177
179
178−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
179−msgid "Featured"
180−msgstr "Рекомендованное"
181−
182−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
183−msgid "Recent"
184−msgstr "Недавние"
185−
186−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
187−msgid "New Releases"
188−msgstr "Новые релизы"
189−
190−#: Dash/DashMusic.qml:30
191−msgid "Top Charting"
192−msgstr "Наиболее популярное"
193−
194−#: Dash/DashMusic.qml:91
195−msgid "Music"
196−msgstr "Музыка"
197−
198−#: Dash/DashVideos.qml:31
199−msgid "Popular Online"
200−msgstr "Популярное в Интернете"
201−
202−#: Dash/DashVideos.qml:146
203−msgid "Videos"
204−msgstr "Видео"
205−
206−#: Dash/Video/VideoPreview.qml:130
207−msgid "Directed by:"
208−msgstr "Режиссёр"
209−
210−#: Dash/Video/VideoPreview.qml:153
211−msgid "Starring:"
212−msgstr "В главных ролях:"
213−
214−#: Dash/Video/VideoPreview.qml:176
215−msgid "Author:"
216−msgstr "Автор:"
217−
218#: Greeter/Lockscreen.qml:142
180#: Greeter/Lockscreen.qml:142
219msgid "Emergency Call"
181msgid "Emergency Call"
220msgstr "Экстренный вызов"
182msgstr "Экстренный вызов"
@@ -252,7 +214,7 @@ msgstr "Говорите..."
252msgid "Search"
214msgid "Search"
253msgstr "Поиск"
215msgstr "Поиск"
254
216
255−#: plugins/Unity/scope.cpp:336
217+#: plugins/Unity/scope.cpp:398
256msgid "Sorry, there is nothing that matches your search."
218msgid "Sorry, there is nothing that matches your search."
257msgstr "Извините, поиск не дал результатов."
219msgstr "Извините, поиск не дал результатов."
258
220
@@ -260,7 +222,28 @@ msgstr "Извините, поиск не дал результатов."
260msgid "All"
222msgid "All"
261msgstr ""
223msgstr ""
262
224
263−#: Shell.qml:453
225+#: Shell.qml:438
264#, qt-format
226#, qt-format
265msgid "Please enter %1"
227msgid "Please enter %1"
266msgstr "Пожалуйста, введите %1"
228msgstr "Пожалуйста, введите %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.ponew file+223
@@ -0,0 +1,223 @@
1+# Shan 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-10-11 12:12+0200\n"
11+"PO-Revision-Date: 2013-10-07 11:46+0000\n"
12+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13+"Language-Team: Shan <shn@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) ? 0 : 1;\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
20+
21+#: Applications/applications.js:23
22+msgid "Phone"
23+msgstr ""
24+
25+#: Applications/applications.js:29
26+msgid "Camera"
27+msgstr ""
28+
29+#: Applications/applications.js:35
30+msgid "Gallery"
31+msgstr ""
32+
33+#: Applications/applications.js:40
34+msgid "Facebook"
35+msgstr ""
36+
37+#: Applications/applications.js:46
38+msgid "Browser"
39+msgstr ""
40+
41+#: Applications/applications.js:51
42+msgid "Twitter"
43+msgstr ""
44+
45+#: Applications/applications.js:57
46+msgid "GMail"
47+msgstr ""
48+
49+#: Applications/applications.js:62
50+msgid "Weather"
51+msgstr ""
52+
53+#: Applications/applications.js:68
54+msgid "Notepad"
55+msgstr ""
56+
57+#: Applications/applications.js:74
58+msgid "Calendar"
59+msgstr ""
60+
61+#: Applications/applications.js:80
62+msgid "Media Player"
63+msgstr ""
64+
65+#: Applications/applications.js:86
66+msgid "Evernote"
67+msgstr ""
68+
69+#: Applications/applications.js:91
70+msgid "Map"
71+msgstr ""
72+
73+#: Applications/applications.js:96
74+msgid "Pinterest"
75+msgstr ""
76+
77+#: Applications/applications.js:101
78+msgid "SoundCloud"
79+msgstr ""
80+
81+#: Applications/applications.js:106
82+msgid "Wikipedia"
83+msgstr ""
84+
85+#: Applications/applications.js:111
86+msgid "YouTube"
87+msgstr ""
88+
89+#: Components/EdgeDemoOverlay.qml:149
90+msgid "Skip intro"
91+msgstr ""
92+
93+#: Components/EdgeDemo.qml:112
94+msgid "Right edge"
95+msgstr ""
96+
97+#: Components/EdgeDemo.qml:113
98+msgid "Try swiping from the right edge to unlock the phone"
99+msgstr ""
100+
101+#: Components/EdgeDemo.qml:144
102+msgid "Top edge"
103+msgstr ""
104+
105+#: Components/EdgeDemo.qml:145
106+msgid "Try swiping from the top edge to access the indicators"
107+msgstr ""
108+
109+#: Components/EdgeDemo.qml:170
110+msgid "Close"
111+msgstr ""
112+
113+#: Components/EdgeDemo.qml:171
114+msgid "Swipe up again to close the settings screen"
115+msgstr ""
116+
117+#: Components/EdgeDemo.qml:198
118+msgid "Left edge"
119+msgstr ""
120+
121+#: Components/EdgeDemo.qml:199
122+msgid "Swipe from the left to reveal the launcher for quick access to apps"
123+msgstr ""
124+
125+#: Components/EdgeDemo.qml:226
126+msgid "Well done"
127+msgstr ""
128+
129+#: Components/EdgeDemo.qml:227
130+msgid ""
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
133+msgstr ""
134+
135+#: Components/PageHeader.qml:341
136+msgid "Recent searches"
137+msgstr ""
138+
139+#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
142+#, qt-format
143+msgid "(%1)"
144+msgstr ""
145+
146+#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
149+#, qt-format
150+msgid "%1 review"
151+msgid_plural "%1 reviews"
152+msgstr[0] ""
153+msgstr[1] ""
154+
155+#: Dash/Apps/AppPreview.qml:126
156+msgid "Rate this"
157+msgstr ""
158+
159+#: Dash/Previews/Reviews.qml:74
160+msgid "Add a review"
161+msgstr ""
162+
163+#: Dash/Previews/Reviews.qml:86
164+msgid "Review"
165+msgstr ""
166+
167+#: Dash/Previews/Reviews.qml:121
168+msgid "Send"
169+msgstr ""
170+
171+#: Dash/Previews/Reviews.qml:139
172+msgid "Comments:"
173+msgstr ""
174+
175+#: Greeter/Lockscreen.qml:142
176+msgid "Emergency Call"
177+msgstr ""
178+
179+#: Greeter/PassphraseLockscreen.qml:59
180+#, qt-format
181+msgid "Hello %1"
182+msgstr ""
183+
184+#: Greeter/PassphraseLockscreen.qml:59
185+msgid "Hello"
186+msgstr ""
187+
188+#: Hud/HudParametrizedActionsPage.qml:132
189+msgid "Confirm"
190+msgstr ""
191+
192+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
193+msgid "Type or say a command"
194+msgstr ""
195+
196+#: Hud/Hud.qml:84
197+msgid "Loading. Please Wait..."
198+msgstr ""
199+
200+#: Hud/Hud.qml:89
201+msgid "Speak Now..."
202+msgstr ""
203+
204+#: Hud/Hud.qml:94
205+msgid "Speaking..."
206+msgstr ""
207+
208+#: Panel/SearchIndicator.qml:27
209+msgid "Search"
210+msgstr ""
211+
212+#: plugins/Unity/scope.cpp:398
213+msgid "Sorry, there is nothing that matches your search."
214+msgstr ""
215+
216+#: plugins/Unity/showallfilteroption.cpp:41
217+msgid "All"
218+msgstr ""
219+
220+#: Shell.qml:438
221+#, qt-format
222+msgid "Please enter %1"
223+msgstr ""
po/si.po+16−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr ""
137msgstr ""
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr ""
144msgstr ""
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] ""
152msgstr[0] ""
151msgstr[1] ""
153msgstr[1] ""
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr ""
157msgstr ""
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr ""
161msgstr ""
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr ""
165msgstr ""
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr ""
169msgstr ""
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr ""
173msgstr ""
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr ""
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr ""
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr ""
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr ""
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr ""
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr ""
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr ""
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr ""
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr ""
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr ""
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr ""
177msgstr ""
@@ -247,7 +209,7 @@ msgstr ""
247msgid "Search"
209msgid "Search"
248msgstr ""
210msgstr ""
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr ""
214msgstr ""
253
215
@@ -255,7 +217,7 @@ msgstr ""
255msgid "All"
217msgid "All"
256msgstr ""
218msgstr ""
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr ""
223msgstr ""
po/sl.po+37−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11"PO-Revision-Date: 2013-10-02 10:55+0000\n"
11"PO-Revision-Date: 2013-10-02 10:55+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"
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || "
17"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || "
18"n%100==4 ? 3 : 0);\n"
18"n%100==4 ? 3 : 0);\n"
19−"X-Launchpad-Export-Date: 2013-10-03 06:08+0000\n"
19+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
20−"X-Generator: Launchpad (build 16791)\n"
20+"X-Generator: Launchpad (build 16799)\n"
21
21
22#: Applications/applications.js:23
22#: Applications/applications.js:23
23msgid "Phone"
23msgid "Phone"
@@ -87,7 +87,7 @@ msgstr "Wikipedija"
87msgid "YouTube"
87msgid "YouTube"
88msgstr "YouTube"
88msgstr "YouTube"
89
89
90−#: Components/EdgeDemoOverlay.qml:150
90+#: Components/EdgeDemoOverlay.qml:149
91msgid "Skip intro"
91msgid "Skip intro"
92msgstr "Preskoči uvod"
92msgstr "Preskoči uvod"
93
93
@@ -137,18 +137,20 @@ msgstr ""
137"Sedaj ste osvojili poteze robov ter lahko začnete uporabljati "
137"Sedaj ste osvojili poteze robov ter lahko začnete uporabljati "
138"telefon<br><br>Tapnite kjerkoli na začetek"
138"telefon<br><br>Tapnite kjerkoli na začetek"
139
139
140−#: Components/PageHeader.qml:298
140+#: Components/PageHeader.qml:341
141msgid "Recent searches"
141msgid "Recent searches"
142msgstr "Nedavna iskanja"
142msgstr "Nedavna iskanja"
143
143
144#. TRANSLATORS: Number of persons who rated this app
144#. TRANSLATORS: Number of persons who rated this app
145+#. TRANSLATORS: Number of persons who rated this app/video/whatever
145−#: Dash/Apps/AppInfo.qml:73
146+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
146#, qt-format
147#, qt-format
147msgid "(%1)"
148msgid "(%1)"
148msgstr "(%1)"
149msgstr "(%1)"
149
150
150#. TRANSLATORS: Number of persons who wrote reviews for this app
151#. TRANSLATORS: Number of persons who wrote reviews for this app
152+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
151−#: Dash/Apps/AppInfo.qml:85
153+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
152#, qt-format
154#, qt-format
153msgid "%1 review"
155msgid "%1 review"
154msgid_plural "%1 reviews"
156msgid_plural "%1 reviews"
@@ -157,66 +159,26 @@ msgstr[1] "%1 ocena"
157msgstr[2] "%1 oceni"
159msgstr[2] "%1 oceni"
158msgstr[3] "%1 ocene"
160msgstr[3] "%1 ocene"
159
161
160−#: Dash/Apps/AppPreview.qml:178
162+#: Dash/Apps/AppPreview.qml:126
161msgid "Rate this"
163msgid "Rate this"
162msgstr "Ocenite"
164msgstr "Ocenite"
163
165
164−#: Dash/Apps/AppReviews.qml:74
166+#: Dash/Previews/Reviews.qml:74
165msgid "Add a review"
167msgid "Add a review"
166msgstr "Dodaj oceno"
168msgstr "Dodaj oceno"
167
169
168−#: Dash/Apps/AppReviews.qml:86
170+#: Dash/Previews/Reviews.qml:86
169msgid "Review"
171msgid "Review"
170msgstr "Ocena"
172msgstr "Ocena"
171
173
172−#: Dash/Apps/AppReviews.qml:121
174+#: Dash/Previews/Reviews.qml:121
173msgid "Send"
175msgid "Send"
174msgstr "Pošlji"
176msgstr "Pošlji"
175
177
176−#: Dash/Apps/AppReviews.qml:139
178+#: Dash/Previews/Reviews.qml:139
177msgid "Comments:"
179msgid "Comments:"
178msgstr "Opombe:"
180msgstr "Opombe:"
179
181
180−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
181−msgid "Featured"
182−msgstr "Predstavljeno"
183−
184−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
185−msgid "Recent"
186−msgstr "Nedavno"
187−
188−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
189−msgid "New Releases"
190−msgstr "Nove izdaje"
191−
192−#: Dash/DashMusic.qml:30
193−msgid "Top Charting"
194−msgstr "Najvišje na lestvici"
195−
196−#: Dash/DashMusic.qml:91
197−msgid "Music"
198−msgstr "Glasba"
199−
200−#: Dash/DashVideos.qml:31
201−msgid "Popular Online"
202−msgstr "Priljubljeno na spletu"
203−
204−#: Dash/DashVideos.qml:146
205−msgid "Videos"
206−msgstr "Videi"
207−
208−#: Dash/Video/VideoPreview.qml:130
209−msgid "Directed by:"
210−msgstr "Režija:"
211−
212−#: Dash/Video/VideoPreview.qml:153
213−msgid "Starring:"
214−msgstr "Igrajo:"
215−
216−#: Dash/Video/VideoPreview.qml:176
217−msgid "Author:"
218−msgstr "Avtor:"
219−
220#: Greeter/Lockscreen.qml:142
182#: Greeter/Lockscreen.qml:142
221msgid "Emergency Call"
183msgid "Emergency Call"
222msgstr "Klic v sili"
184msgstr "Klic v sili"
@@ -254,7 +216,7 @@ msgstr "Govorjenje ..."
254msgid "Search"
216msgid "Search"
255msgstr "Iskanje"
217msgstr "Iskanje"
256
218
257−#: plugins/Unity/scope.cpp:336
219+#: plugins/Unity/scope.cpp:398
258msgid "Sorry, there is nothing that matches your search."
220msgid "Sorry, there is nothing that matches your search."
259msgstr "Nič se ne ujema z vašim iskalnim nizom."
221msgstr "Nič se ne ujema z vašim iskalnim nizom."
260
222
@@ -262,7 +224,28 @@ msgstr "Nič se ne ujema z vašim iskalnim nizom."
262msgid "All"
224msgid "All"
263msgstr "Vse"
225msgstr "Vse"
264
226
265−#: Shell.qml:453
227+#: Shell.qml:438
266#, qt-format
228#, qt-format
267msgid "Please enter %1"
229msgid "Please enter %1"
268msgstr "Vnesite %1"
230msgstr "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+22−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
20−"X-Generator: Launchpad (build 16774)\n"
20+"X-Generator: Launchpad (build 16799)\n"
21
21
22#: Applications/applications.js:23
22#: Applications/applications.js:23
23msgid "Phone"
23msgid "Phone"
@@ -87,7 +87,7 @@ msgstr ""
87msgid "YouTube"
87msgid "YouTube"
88msgstr ""
88msgstr ""
89
89
90−#: Components/EdgeDemoOverlay.qml:150
90+#: Components/EdgeDemoOverlay.qml:149
91msgid "Skip intro"
91msgid "Skip intro"
92msgstr ""
92msgstr ""
93
93
@@ -133,84 +133,46 @@ msgid ""
133"phone<br><br>Tap anywhere to start"
133"phone<br><br>Tap anywhere to start"
134msgstr ""
134msgstr ""
135
135
136−#: Components/PageHeader.qml:298
136+#: Components/PageHeader.qml:341
137msgid "Recent searches"
137msgid "Recent searches"
138msgstr "Скорашње претраге"
138msgstr "Скорашње претраге"
139
139
140#. TRANSLATORS: Number of persons who rated this app
140#. TRANSLATORS: Number of persons who rated this app
141+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73
142+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
142#, qt-format
143#, qt-format
143msgid "(%1)"
144msgid "(%1)"
144msgstr ""
145msgstr ""
145
146
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app
148+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
147−#: Dash/Apps/AppInfo.qml:85
149+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
148#, qt-format
150#, qt-format
149msgid "%1 review"
151msgid "%1 review"
150msgid_plural "%1 reviews"
152msgid_plural "%1 reviews"
151msgstr[0] ""
153msgstr[0] ""
152msgstr[1] ""
154msgstr[1] ""
153
155
154−#: Dash/Apps/AppPreview.qml:178
156+#: Dash/Apps/AppPreview.qml:126
155msgid "Rate this"
157msgid "Rate this"
156msgstr ""
158msgstr ""
157
159
158−#: Dash/Apps/AppReviews.qml:74
160+#: Dash/Previews/Reviews.qml:74
159msgid "Add a review"
161msgid "Add a review"
160msgstr ""
162msgstr ""
161
163
162−#: Dash/Apps/AppReviews.qml:86
164+#: Dash/Previews/Reviews.qml:86
163msgid "Review"
165msgid "Review"
164msgstr ""
166msgstr ""
165
167
166−#: Dash/Apps/AppReviews.qml:121
168+#: Dash/Previews/Reviews.qml:121
167msgid "Send"
169msgid "Send"
168msgstr ""
170msgstr ""
169
171
170−#: Dash/Apps/AppReviews.qml:139
172+#: Dash/Previews/Reviews.qml:139
171msgid "Comments:"
173msgid "Comments:"
172msgstr ""
174msgstr ""
173
175
174−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
175−msgid "Featured"
176−msgstr ""
177−
178−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
179−msgid "Recent"
180−msgstr ""
181−
182−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
183−msgid "New Releases"
184−msgstr ""
185−
186−#: Dash/DashMusic.qml:30
187−msgid "Top Charting"
188−msgstr ""
189−
190−#: Dash/DashMusic.qml:91
191−msgid "Music"
192−msgstr "Музика"
193−
194−#: Dash/DashVideos.qml:31
195−msgid "Popular Online"
196−msgstr ""
197−
198−#: Dash/DashVideos.qml:146
199−msgid "Videos"
200−msgstr "Видео"
201−
202−#: Dash/Video/VideoPreview.qml:130
203−msgid "Directed by:"
204−msgstr ""
205−
206−#: Dash/Video/VideoPreview.qml:153
207−msgid "Starring:"
208−msgstr ""
209−
210−#: Dash/Video/VideoPreview.qml:176
211−msgid "Author:"
212−msgstr ""
213−
214#: Greeter/Lockscreen.qml:142
176#: Greeter/Lockscreen.qml:142
215msgid "Emergency Call"
177msgid "Emergency Call"
216msgstr ""
178msgstr ""
@@ -248,7 +210,7 @@ msgstr "Говор..."
248msgid "Search"
210msgid "Search"
249msgstr "Претрага"
211msgstr "Претрага"
250
212
251−#: plugins/Unity/scope.cpp:336
213+#: plugins/Unity/scope.cpp:398
252msgid "Sorry, there is nothing that matches your search."
214msgid "Sorry, there is nothing that matches your search."
253msgstr "Нажалост, претрага није наишла на икакво подударање."
215msgstr "Нажалост, претрага није наишла на икакво подударање."
254
216
@@ -256,7 +218,13 @@ msgstr "Нажалост, претрага није наишла на икакв
256msgid "All"
218msgid "All"
257msgstr ""
219msgstr ""
258
220
259−#: Shell.qml:453
221+#: Shell.qml:438
260#, qt-format
222#, qt-format
261msgid "Please enter %1"
223msgid "Please enter %1"
262msgstr ""
224msgstr ""
225+
226+#~ msgid "Music"
227+#~ msgstr "Музика"
228+
229+#~ msgid "Videos"
230+#~ msgstr "Видео"
po/sv.po+16−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr ""
137msgstr ""
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr ""
144msgstr ""
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] ""
152msgstr[0] ""
151msgstr[1] ""
153msgstr[1] ""
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr ""
157msgstr ""
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr ""
161msgstr ""
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr ""
165msgstr ""
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr ""
169msgstr ""
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr ""
173msgstr ""
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr ""
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr ""
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr ""
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr ""
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr ""
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr ""
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr ""
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr ""
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr ""
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr ""
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr ""
177msgstr ""
@@ -247,7 +209,7 @@ msgstr ""
247msgid "Search"
209msgid "Search"
248msgstr ""
210msgstr ""
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr ""
214msgstr ""
253
215
@@ -255,7 +217,7 @@ msgstr ""
255msgid "All"
217msgid "All"
256msgstr ""
218msgstr ""
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr ""
223msgstr ""
po/te.po+19−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr ""
137msgstr ""
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr ""
144msgstr ""
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] ""
152msgstr[0] ""
151msgstr[1] ""
153msgstr[1] ""
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr ""
157msgstr ""
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr ""
161msgstr ""
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr ""
165msgstr ""
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr ""
169msgstr ""
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr ""
173msgstr ""
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr ""
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr ""
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr ""
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr ""
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr "సంగీతం"
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr ""
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr ""
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr ""
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr ""
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr ""
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr ""
177msgstr ""
@@ -247,7 +209,7 @@ msgstr ""
247msgid "Search"
209msgid "Search"
248msgstr ""
210msgstr ""
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr ""
214msgstr ""
253
215
@@ -255,7 +217,10 @@ msgstr ""
255msgid "All"
217msgid "All"
256msgstr ""
218msgstr ""
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr ""
223msgstr ""
224+
225+#~ msgid "Music"
226+#~ msgstr "సంగీతం"
po/tr.po+37−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\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,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "Vikipedi"
86msgid "YouTube"
86msgid "YouTube"
87msgstr "YouTube"
87msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr "İntro'yu geç"
91msgstr "İntro'yu geç"
92
92
@@ -133,84 +133,46 @@ msgid ""
133"phone<br><br>Tap anywhere to start"
133"phone<br><br>Tap anywhere to start"
134msgstr ""
134msgstr ""
135
135
136−#: Components/PageHeader.qml:298
136+#: Components/PageHeader.qml:341
137msgid "Recent searches"
137msgid "Recent searches"
138msgstr "Son Arananlar"
138msgstr "Son Arananlar"
139
139
140#. TRANSLATORS: Number of persons who rated this app
140#. TRANSLATORS: Number of persons who rated this app
141+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73
142+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
142#, qt-format
143#, qt-format
143msgid "(%1)"
144msgid "(%1)"
144msgstr "(%1)"
145msgstr "(%1)"
145
146
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app
148+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
147−#: Dash/Apps/AppInfo.qml:85
149+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
148#, qt-format
150#, qt-format
149msgid "%1 review"
151msgid "%1 review"
150msgid_plural "%1 reviews"
152msgid_plural "%1 reviews"
151msgstr[0] "%1 inceleme"
153msgstr[0] "%1 inceleme"
152msgstr[1] "%1 inceleme"
154msgstr[1] "%1 inceleme"
153
155
154−#: Dash/Apps/AppPreview.qml:178
156+#: Dash/Apps/AppPreview.qml:126
155msgid "Rate this"
157msgid "Rate this"
156msgstr "Oyla"
158msgstr "Oyla"
157
159
158−#: Dash/Apps/AppReviews.qml:74
160+#: Dash/Previews/Reviews.qml:74
159msgid "Add a review"
161msgid "Add a review"
160msgstr "Bir inceleme ekle"
162msgstr "Bir inceleme ekle"
161
163
162−#: Dash/Apps/AppReviews.qml:86
164+#: Dash/Previews/Reviews.qml:86
163msgid "Review"
165msgid "Review"
164msgstr "İnceleme"
166msgstr "İnceleme"
165
167
166−#: Dash/Apps/AppReviews.qml:121
168+#: Dash/Previews/Reviews.qml:121
167msgid "Send"
169msgid "Send"
168msgstr "Gönder"
170msgstr "Gönder"
169
171
170−#: Dash/Apps/AppReviews.qml:139
172+#: Dash/Previews/Reviews.qml:139
171msgid "Comments:"
173msgid "Comments:"
172msgstr "Yorumlar:"
174msgstr "Yorumlar:"
173
175
174−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
175−msgid "Featured"
176−msgstr "Öne Çıkanlar"
177−
178−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
179−msgid "Recent"
180−msgstr "En Son"
181−
182−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
183−msgid "New Releases"
184−msgstr "Yeni Sürümler"
185−
186−#: Dash/DashMusic.qml:30
187−msgid "Top Charting"
188−msgstr "En Çok Beğenilenler"
189−
190−#: Dash/DashMusic.qml:91
191−msgid "Music"
192−msgstr "Müzik"
193−
194−#: Dash/DashVideos.qml:31
195−msgid "Popular Online"
196−msgstr "Genellikle Çevrimiçi"
197−
198−#: Dash/DashVideos.qml:146
199−msgid "Videos"
200−msgstr "Videolar"
201−
202−#: Dash/Video/VideoPreview.qml:130
203−msgid "Directed by:"
204−msgstr "Yönetmen"
205−
206−#: Dash/Video/VideoPreview.qml:153
207−msgid "Starring:"
208−msgstr "Başroller:"
209−
210−#: Dash/Video/VideoPreview.qml:176
211−msgid "Author:"
212−msgstr "Yazar:"
213−
214#: Greeter/Lockscreen.qml:142
176#: Greeter/Lockscreen.qml:142
215msgid "Emergency Call"
177msgid "Emergency Call"
216msgstr "Acil Arama"
178msgstr "Acil Arama"
@@ -248,7 +210,7 @@ msgstr "Konuşuyor..."
248msgid "Search"
210msgid "Search"
249msgstr "Ara"
211msgstr "Ara"
250
212
251−#: plugins/Unity/scope.cpp:336
213+#: plugins/Unity/scope.cpp:398
252msgid "Sorry, there is nothing that matches your search."
214msgid "Sorry, there is nothing that matches your search."
253msgstr "Üzgünüz, aramanızla eşleşen hiçbir şey yok."
215msgstr "Üzgünüz, aramanızla eşleşen hiçbir şey yok."
254
216
@@ -256,7 +218,28 @@ msgstr "Üzgünüz, aramanızla eşleşen hiçbir şey yok."
256msgid "All"
218msgid "All"
257msgstr ""
219msgstr ""
258
220
259−#: Shell.qml:453
221+#: Shell.qml:438
260#, qt-format
222#, qt-format
261msgid "Please enter %1"
223msgid "Please enter %1"
262msgstr "Lütfen %1 girin"
224msgstr "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+44−68
@@ -7,16 +7,16 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11−"PO-Revision-Date: 2013-06-27 11:02+0000\n"
11+"PO-Revision-Date: 2013-10-09 22:38+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\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"
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-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,13 +86,13 @@ msgstr "ۋىكىپېدىيە"
86msgid "YouTube"
86msgid "YouTube"
87msgstr "YouTube"
87msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
93#: Components/EdgeDemo.qml:112
93#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95−msgstr ""
95+msgstr "ئوڭ گىرۋەك"
96
96
97#: Components/EdgeDemo.qml:113
97#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
@@ -100,7 +100,7 @@ msgstr ""
100
100
101#: Components/EdgeDemo.qml:144
101#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103−msgstr ""
103+msgstr "ئۈستى گىرۋەك"
104
104
105#: Components/EdgeDemo.qml:145
105#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
@@ -108,7 +108,7 @@ msgstr ""
108
108
109#: Components/EdgeDemo.qml:170
109#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111−msgstr ""
111+msgstr "ياپ"
112
112
113#: Components/EdgeDemo.qml:171
113#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
@@ -116,7 +116,7 @@ msgstr ""
116
116
117#: Components/EdgeDemo.qml:198
117#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119−msgstr ""
119+msgstr "سول گىرۋەك"
120
120
121#: Components/EdgeDemo.qml:199
121#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
@@ -132,83 +132,44 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr "يېقىنقى ئىزدەشلەر"
137msgstr "يېقىنقى ئىزدەشلەر"
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143−msgstr ""
144+msgstr "(%1)"
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150−msgstr[0] ""
152+msgstr[0] "%1 باھا"
151−msgstr[1] ""
152
153
153−#: Dash/Apps/AppPreview.qml:178
154+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
155msgid "Rate this"
155msgstr ""
156msgstr ""
156
157
157−#: Dash/Apps/AppReviews.qml:74
158+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
159msgid "Add a review"
159msgstr ""
160msgstr ""
160
161
161−#: Dash/Apps/AppReviews.qml:86
162+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
163msgid "Review"
163msgstr ""
164msgstr ""
164
165
165−#: Dash/Apps/AppReviews.qml:121
166+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
167msgid "Send"
167−msgstr ""
168+msgstr "ئەۋەت"
168
169
169−#: Dash/Apps/AppReviews.qml:139
170+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
171msgid "Comments:"
171−msgstr ""
172+msgstr "ئىنكاس:"
172−
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr "داڭلىق"
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr "يېقىنقى"
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr "يېڭى ئېلان قىلىنغانلىرى"
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr ""
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr "مۇزىكا"
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr ""
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr "سىنلار"
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr ""
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr ""
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr "ئاپتور:"
212
173
213#: Greeter/Lockscreen.qml:142
174#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
175msgid "Emergency Call"
@@ -217,7 +178,7 @@ msgstr ""
217#: Greeter/PassphraseLockscreen.qml:59
178#: Greeter/PassphraseLockscreen.qml:59
218#, qt-format
179#, qt-format
219msgid "Hello %1"
180msgid "Hello %1"
220−msgstr ""
181+msgstr "سالام %1"
221
182
222#: Greeter/PassphraseLockscreen.qml:59
183#: Greeter/PassphraseLockscreen.qml:59
223msgid "Hello"
184msgid "Hello"
@@ -247,15 +208,30 @@ msgstr "سۆزلەۋاتىسىز…"
247msgid "Search"
208msgid "Search"
248msgstr "ئىزدە"
209msgstr "ئىزدە"
249
210
250−#: plugins/Unity/scope.cpp:336
211+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
212msgid "Sorry, there is nothing that matches your search."
252msgstr "كەچۈرۈڭ، ئىزدىگىنىڭىزگە ماس نەتىجە تېپىلمىدى."
213msgstr "كەچۈرۈڭ، ئىزدىگىنىڭىزگە ماس نەتىجە تېپىلمىدى."
253
214
254#: plugins/Unity/showallfilteroption.cpp:41
215#: plugins/Unity/showallfilteroption.cpp:41
255msgid "All"
216msgid "All"
256−msgstr ""
217+msgstr "ھەممىسى"
257
218
258−#: Shell.qml:453
219+#: Shell.qml:438
259#, qt-format
220#, qt-format
260msgid "Please enter %1"
221msgid "Please enter %1"
261−msgstr ""
222+msgstr "%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+37−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11"PO-Revision-Date: 2013-09-28 07:54+0000\n"
11"PO-Revision-Date: 2013-09-28 07:54+0000\n"
12"Last-Translator: Yuri Chornoivan <yurchor@gmail.com>\n"
12"Last-Translator: Yuri Chornoivan <yurchor@gmail.com>\n"
13"Language-Team: Ukrainian <uk@li.org>\n"
13"Language-Team: Ukrainian <uk@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
20−"X-Generator: Launchpad (build 16774)\n"
20+"X-Generator: Launchpad (build 16799)\n"
21
21
22#: Applications/applications.js:23
22#: Applications/applications.js:23
23msgid "Phone"
23msgid "Phone"
@@ -87,7 +87,7 @@ msgstr "Вікіпедія"
87msgid "YouTube"
87msgid "YouTube"
88msgstr "YouTube"
88msgstr "YouTube"
89
89
90−#: Components/EdgeDemoOverlay.qml:150
90+#: Components/EdgeDemoOverlay.qml:149
91msgid "Skip intro"
91msgid "Skip intro"
92msgstr "Пропустити вступ"
92msgstr "Пропустити вступ"
93
93
@@ -136,18 +136,20 @@ msgid ""
136"phone<br><br>Tap anywhere to start"
136"phone<br><br>Tap anywhere to start"
137msgstr ""
137msgstr ""
138
138
139−#: Components/PageHeader.qml:298
139+#: Components/PageHeader.qml:341
140msgid "Recent searches"
140msgid "Recent searches"
141msgstr "Нещодавні пошуки"
141msgstr "Нещодавні пошуки"
142
142
143#. TRANSLATORS: Number of persons who rated this app
143#. TRANSLATORS: Number of persons who rated this app
144+#. TRANSLATORS: Number of persons who rated this app/video/whatever
144−#: Dash/Apps/AppInfo.qml:73
145+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
145#, qt-format
146#, qt-format
146msgid "(%1)"
147msgid "(%1)"
147msgstr "(%1)"
148msgstr "(%1)"
148
149
149#. TRANSLATORS: Number of persons who wrote reviews for this app
150#. TRANSLATORS: Number of persons who wrote reviews for this app
151+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
150−#: Dash/Apps/AppInfo.qml:85
152+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
151#, qt-format
153#, qt-format
152msgid "%1 review"
154msgid "%1 review"
153msgid_plural "%1 reviews"
155msgid_plural "%1 reviews"
@@ -155,66 +157,26 @@ msgstr[0] "%1 рецензія"
155msgstr[1] "%1 рецензії"
157msgstr[1] "%1 рецензії"
156msgstr[2] "%1 рецензій"
158msgstr[2] "%1 рецензій"
157
159
158−#: Dash/Apps/AppPreview.qml:178
160+#: Dash/Apps/AppPreview.qml:126
159msgid "Rate this"
161msgid "Rate this"
160msgstr "Оцінити"
162msgstr "Оцінити"
161
163
162−#: Dash/Apps/AppReviews.qml:74
164+#: Dash/Previews/Reviews.qml:74
163msgid "Add a review"
165msgid "Add a review"
164msgstr "Додати рецензію"
166msgstr "Додати рецензію"
165
167
166−#: Dash/Apps/AppReviews.qml:86
168+#: Dash/Previews/Reviews.qml:86
167msgid "Review"
169msgid "Review"
168msgstr "Рецензія"
170msgstr "Рецензія"
169
171
170−#: Dash/Apps/AppReviews.qml:121
172+#: Dash/Previews/Reviews.qml:121
171msgid "Send"
173msgid "Send"
172msgstr "Надіслати"
174msgstr "Надіслати"
173
175
174−#: Dash/Apps/AppReviews.qml:139
176+#: Dash/Previews/Reviews.qml:139
175msgid "Comments:"
177msgid "Comments:"
176msgstr "Коментарі:"
178msgstr "Коментарі:"
177
179
178−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
179−msgid "Featured"
180−msgstr "Рекомендовані"
181−
182−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
183−msgid "Recent"
184−msgstr "Нещодавні"
185−
186−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
187−msgid "New Releases"
188−msgstr "Нові випуски"
189−
190−#: Dash/DashMusic.qml:30
191−msgid "Top Charting"
192−msgstr "З високими оцінками"
193−
194−#: Dash/DashMusic.qml:91
195−msgid "Music"
196−msgstr "Музика"
197−
198−#: Dash/DashVideos.qml:31
199−msgid "Popular Online"
200−msgstr "Популярне у мережі"
201−
202−#: Dash/DashVideos.qml:146
203−msgid "Videos"
204−msgstr "Відео"
205−
206−#: Dash/Video/VideoPreview.qml:130
207−msgid "Directed by:"
208−msgstr "Режисер:"
209−
210−#: Dash/Video/VideoPreview.qml:153
211−msgid "Starring:"
212−msgstr "Актори:"
213−
214−#: Dash/Video/VideoPreview.qml:176
215−msgid "Author:"
216−msgstr "Автор:"
217−
218#: Greeter/Lockscreen.qml:142
180#: Greeter/Lockscreen.qml:142
219msgid "Emergency Call"
181msgid "Emergency Call"
220msgstr "Терміновий виклик"
182msgstr "Терміновий виклик"
@@ -252,7 +214,7 @@ msgstr "Мовлення…"
252msgid "Search"
214msgid "Search"
253msgstr "Пошук"
215msgstr "Пошук"
254
216
255−#: plugins/Unity/scope.cpp:336
217+#: plugins/Unity/scope.cpp:398
256msgid "Sorry, there is nothing that matches your search."
218msgid "Sorry, there is nothing that matches your search."
257msgstr "Вибачте, для вказаних вами ключових слів нічого не знайдено."
219msgstr "Вибачте, для вказаних вами ключових слів нічого не знайдено."
258
220
@@ -260,7 +222,28 @@ msgstr "Вибачте, для вказаних вами ключових слі
260msgid "All"
222msgid "All"
261msgstr ""
223msgstr ""
262
224
263−#: Shell.qml:453
225+#: Shell.qml:438
264#, qt-format
226#, qt-format
265msgid "Please enter %1"
227msgid "Please enter %1"
266msgstr "Будь ласка, введіть %1"
228msgstr "Будь ласка, введіть %1"
229+
230+#~ msgid "Featured"
231+#~ msgstr "Рекомендовані"
232+
233+#~ msgid "Recent"
234+#~ msgstr "Нещодавні"
235+
236+#~ msgid "New Releases"
237+#~ msgstr "Нові випуски"
238+
239+#~ msgid "Top Charting"
240+#~ msgstr "З високими оцінками"
241+
242+#~ msgid "Music"
243+#~ msgstr "Музика"
244+
245+#~ msgid "Popular Online"
246+#~ msgstr "Популярне у мережі"
247+
248+#~ msgid "Videos"
249+#~ msgstr "Відео"
po/unity8.pot+14−52
@@ -8,7 +8,7 @@ msgid ""
8msgstr ""
8msgstr ""
9"Project-Id-Version: unity8\n"
9"Project-Id-Version: unity8\n"
10"Report-Msgid-Bugs-To: \n"
10"Report-Msgid-Bugs-To: \n"
11−"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11+"POT-Creation-Date: 2013-10-11 12:12+0200\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -86,7 +86,7 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr ""
137msgstr ""
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr ""
144msgstr ""
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] ""
152msgstr[0] ""
151msgstr[1] ""
153msgstr[1] ""
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr ""
157msgstr ""
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr ""
161msgstr ""
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr ""
165msgstr ""
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr ""
169msgstr ""
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr ""
173msgstr ""
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr ""
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr ""
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr ""
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr ""
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr ""
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr ""
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr ""
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr ""
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr ""
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr ""
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr ""
177msgstr ""
@@ -247,7 +209,7 @@ msgstr ""
247msgid "Search"
209msgid "Search"
248msgstr ""
210msgstr ""
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr ""
214msgstr ""
253
215
@@ -255,7 +217,7 @@ msgstr ""
255msgid "All"
217msgid "All"
256msgstr ""
218msgstr ""
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr ""
223msgstr ""
po/xh.po+16−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11"PO-Revision-Date: 2013-09-28 13:20+0000\n"
11"PO-Revision-Date: 2013-09-28 13:20+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Xhosa <xh@li.org>\n"
13"Language-Team: Xhosa <xh@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr ""
137msgstr ""
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr ""
144msgstr ""
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] ""
152msgstr[0] ""
151msgstr[1] ""
153msgstr[1] ""
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr ""
157msgstr ""
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr ""
161msgstr ""
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr ""
165msgstr ""
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr ""
169msgstr ""
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr ""
173msgstr ""
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr ""
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr ""
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr ""
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr ""
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr ""
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr ""
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr ""
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr ""
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr ""
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr ""
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr ""
177msgstr ""
@@ -247,7 +209,7 @@ msgstr ""
247msgid "Search"
209msgid "Search"
248msgstr ""
210msgstr ""
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr ""
214msgstr ""
253
215
@@ -255,7 +217,7 @@ msgstr ""
255msgid "All"
217msgid "All"
256msgstr ""
218msgstr ""
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr ""
223msgstr ""
po/zh_CN.po+39−56
@@ -7,16 +7,16 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11−"PO-Revision-Date: 2013-06-27 10:33+0000\n"
11+"PO-Revision-Date: 2013-10-09 13:51+0000\n"
12−"Last-Translator: Anthony Wong <anthony.wong@canonical.com>\n"
12+"Last-Translator: Aron Xu <Unknown>\n"
13"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
13"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
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-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "维基百科"
86msgid "YouTube"
86msgid "YouTube"
87msgstr "YouTube"
87msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr "近期搜索"
137msgstr "近期搜索"
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr ""
144msgstr ""
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] ""
152msgstr[0] ""
151msgstr[1] ""
153msgstr[1] ""
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr ""
157msgstr ""
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr ""
161msgstr ""
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr ""
165msgstr ""
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr ""
169msgstr ""
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr ""
173msgstr ""
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr "推荐"
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr "最近"
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr "新版本"
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr "排行榜图"
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr "音乐"
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr "经常在线"
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr "视频"
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr "导演:"
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr "主演:"
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr "作者:"
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr ""
177msgstr ""
@@ -247,7 +209,7 @@ msgstr "讲话中..."
247msgid "Search"
209msgid "Search"
248msgstr "搜索"
210msgstr "搜索"
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr "对不起,没有找到您想要的结果。"
214msgstr "对不起,没有找到您想要的结果。"
253
215
@@ -255,7 +217,28 @@ msgstr "对不起,没有找到您想要的结果。"
255msgid "All"
217msgid "All"
256msgstr ""
218msgstr ""
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr ""
223msgstr ""
224+
225+#~ msgid "Featured"
226+#~ msgstr "推荐"
227+
228+#~ msgid "New Releases"
229+#~ msgstr "新版本"
230+
231+#~ msgid "Top Charting"
232+#~ msgstr "排行榜图"
233+
234+#~ msgid "Music"
235+#~ msgstr "音乐"
236+
237+#~ msgid "Popular Online"
238+#~ msgstr "经常在线"
239+
240+#~ msgid "Videos"
241+#~ msgstr "视频"
242+
243+#~ msgid "Recent"
244+#~ msgstr "最近使用"
po/zh_TW.po+22−54
@@ -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-01 09:43+0200\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11"PO-Revision-Date: 2013-06-27 10:24+0000\n"
11"PO-Revision-Date: 2013-06-27 10:24+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
13"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
19+"X-Generator: Launchpad (build 16799)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
@@ -132,84 +132,46 @@ msgid ""
132"phone<br><br>Tap anywhere to start"
132"phone<br><br>Tap anywhere to start"
133msgstr ""
133msgstr ""
134
134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136msgid "Recent searches"
136msgid "Recent searches"
137msgstr "最近搜尋"
137msgstr "最近搜尋"
138
138
139#. TRANSLATORS: Number of persons who rated this app
139#. TRANSLATORS: Number of persons who rated this app
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
140−#: Dash/Apps/AppInfo.qml:73
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141#, qt-format
142#, qt-format
142msgid "(%1)"
143msgid "(%1)"
143msgstr ""
144msgstr ""
144
145
145#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:85
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147#, qt-format
149#, qt-format
148msgid "%1 review"
150msgid "%1 review"
149msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
150msgstr[0] ""
152msgstr[0] ""
151msgstr[1] ""
153msgstr[1] ""
152
154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154msgid "Rate this"
156msgid "Rate this"
155msgstr ""
157msgstr ""
156
158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158msgid "Add a review"
160msgid "Add a review"
159msgstr ""
161msgstr ""
160
162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162msgid "Review"
164msgid "Review"
163msgstr ""
165msgstr ""
164
166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166msgid "Send"
168msgid "Send"
167msgstr ""
169msgstr ""
168
170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170msgid "Comments:"
172msgid "Comments:"
171msgstr ""
173msgstr ""
172
174
173−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174−msgid "Featured"
175−msgstr ""
176−
177−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178−msgid "Recent"
179−msgstr ""
180−
181−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182−msgid "New Releases"
183−msgstr ""
184−
185−#: Dash/DashMusic.qml:30
186−msgid "Top Charting"
187−msgstr ""
188−
189−#: Dash/DashMusic.qml:91
190−msgid "Music"
191−msgstr "音樂"
192−
193−#: Dash/DashVideos.qml:31
194−msgid "Popular Online"
195−msgstr ""
196−
197−#: Dash/DashVideos.qml:146
198−msgid "Videos"
199−msgstr "影片"
200−
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr ""
204−
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr ""
208−
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr ""
212−
213#: Greeter/Lockscreen.qml:142
175#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
176msgid "Emergency Call"
215msgstr ""
177msgstr ""
@@ -247,7 +209,7 @@ msgstr "說話中..."
247msgid "Search"
209msgid "Search"
248msgstr "搜尋"
210msgstr "搜尋"
249
211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251msgid "Sorry, there is nothing that matches your search."
213msgid "Sorry, there is nothing that matches your search."
252msgstr "很抱歉,找不到符合您想搜尋的結果。"
214msgstr "很抱歉,找不到符合您想搜尋的結果。"
253
215
@@ -255,7 +217,13 @@ msgstr "很抱歉,找不到符合您想搜尋的結果。"
255msgid "All"
217msgid "All"
256msgstr ""
218msgstr ""
257
219
258−#: Shell.qml:453
220+#: Shell.qml:438
259#, qt-format
221#, qt-format
260msgid "Please enter %1"
222msgid "Please enter %1"
261msgstr ""
223msgstr ""
224+
225+#~ msgid "Music"
226+#~ msgstr "音樂"
227+
228+#~ msgid "Videos"
229+#~ msgstr "影片"
tests/autopilot/unity8/__init__.py+46−1
@@ -52,7 +52,11 @@ def get_mocks_library_path():
52 if running_installed_tests():
52 if running_installed_tests():
53 mock_path = "qml/mocks/"
53 mock_path = "qml/mocks/"
54 else:
54 else:
55+ mock_path = os.path.join(
56+ "../lib/",
57+ sysconfig.get_config_var('MULTIARCH'),
55− mock_path = "../lib/x86_64-linux-gnu/unity8/qml/mocks/"
58+ "unity8/qml/mocks/"
59+ )
56 lib_path = get_lib_path()
60 lib_path = get_lib_path()
57 ld_library_path = os.path.abspath(
61 ld_library_path = os.path.abspath(
58 os.path.join(
62 os.path.join(
@@ -84,6 +88,47 @@ def get_binary_path(binary="unity8"):
84 return binary_path
88 return binary_path
85
89
86
90
91+def get_data_dirs():
92+ """Prepend a mock data path to XDG_DATA_DIRS."""
93+ if running_installed_tests():
94+ data_path = "/usr/share/unity8/mocks/data"
95+ else:
96+ data_path = "../../mocks/data"
97+ full_data_path = os.path.abspath(
98+ os.path.join(
99+ os.path.dirname(__file__),
100+ data_path
101+ )
102+ )
103+
104+ if os.path.exists(full_data_path):
105+ xdg_path = _get_xdg_env_path()
106+ if xdg_path is not None:
107+ return "{0}:{1}".format(full_data_path, xdg_path)
108+ else:
109+ return full_data_path
110+ else:
111+ return None
112+
113+
114+def _get_xdg_env_path():
115+ path = os.getenv("XDG_DATA_DIRS")
116+ if path is None:
117+ path = _get_xdg_upstart_env()
118+ return path
119+
120+
121+def _get_xdg_upstart_env():
122+ try:
123+ return subprocess.check_output([
124+ "/sbin/initctl",
125+ "get-env",
126+ "--global",
127+ "XDG_DATA_DIRS"
128+ ]).rstrip()
129+ except subprocess.CalledProcessError:
130+ return None
131+
87def get_grid_size():
132def get_grid_size():
88 grid_size = os.getenv('GRID_UNIT_PX')
133 grid_size = os.getenv('GRID_UNIT_PX')
89 if grid_size is None:
134 if grid_size is None:
tests/autopilot/unity8/shell/tests/__init__.py+133−8
@@ -28,9 +28,12 @@ from autopilot.platform import model
28from autopilot.testcase import AutopilotTestCase
28from autopilot.testcase import AutopilotTestCase
29from autopilot.matchers import Eventually
29from autopilot.matchers import Eventually
30from autopilot.input import Touch
30from autopilot.input import Touch
31+from autopilot.introspection import get_proxy_object_for_existing_process
31from autopilot.display import Display
32from autopilot.display import Display
32import logging
33import logging
33import os.path
34import os.path
35+import subprocess
36+import sys
34from testtools.matchers import Equals, NotEquals
37from testtools.matchers import Equals, NotEquals
35
38
36from unity8 import (
39from unity8 import (
@@ -38,6 +41,7 @@ from unity8 import (
38 get_binary_path,
41 get_binary_path,
39 get_mocks_library_path,
42 get_mocks_library_path,
40 get_default_extra_mock_libraries,
43 get_default_extra_mock_libraries,
44+ get_data_dirs
41)
45)
42from unity8.shell.emulators import UnityEmulatorBase
46from unity8.shell.emulators import UnityEmulatorBase
43from unity8.shell.emulators.dash import Dash
47from unity8.shell.emulators.dash import Dash
@@ -51,6 +55,7 @@ UNITYSHELL_GSETTINGS_PATH = "/org/compiz/profiles/unity/plugins/unityshell/"
51UNITYSHELL_LAUNCHER_KEY = "launcher-hide-mode"
55UNITYSHELL_LAUNCHER_KEY = "launcher-hide-mode"
52UNITYSHELL_LAUNCHER_MODE = 1 # launcher hidden
56UNITYSHELL_LAUNCHER_MODE = 1 # launcher hidden
53
57
58+
54def _get_device_emulation_scenarios(devices='All'):
59def _get_device_emulation_scenarios(devices='All'):
55 nexus4 = ('Desktop Nexus 4',
60 nexus4 = ('Desktop Nexus 4',
56 dict(app_width=768, app_height=1280, grid_unit_px=18))
61 dict(app_width=768, app_height=1280, grid_unit_px=18))
@@ -67,14 +72,43 @@ def _get_device_emulation_scenarios(devices='All'):
67 elif devices == 'Nexus10':
72 elif devices == 'Nexus10':
68 return [nexus10]
73 return [nexus10]
69 else:
74 else:
75+ raise RuntimeError(
70− raise RuntimeException('Unrecognized device-option "%s" passed.' % devices)
76+ 'Unrecognized device-option "%s" passed.' % devices
77+ )
71 else:
78 else:
72 return [native]
79 return [native]
73
80
81+
74class UnityTestCase(AutopilotTestCase):
82class UnityTestCase(AutopilotTestCase):
75
83
76 """A test case base class for the Unity shell tests."""
84 """A test case base class for the Unity shell tests."""
77
85
86+ @classmethod
87+ def setUpClass(cls):
88+ try:
89+ output = subprocess.check_output([
90+ "/sbin/initctl",
91+ "status",
92+ "unity8"
93+ ], stderr=subprocess.STDOUT)
94+ except subprocess.CalledProcessError, e:
95+ sys.stderr.write(
96+ "Error: `initctl status unity8` failed, most probably the unity8 session could not be found:\n\n"
97+ "{0}\n"
98+ "Please install unity8 or copy data/unity8.conf to {1}\n".format(
99+ e.output,
100+ os.path.join(os.getenv("XDG_CONFIG_HOME", os.path.join(os.getenv("HOME"), ".config")), "upstart")
101+ ))
102+ sys.exit(1)
103+
104+ if "start/" in output:
105+ sys.stderr.write(
106+ "Error: Unity is currently running, these tests require it to be 'stopped'.\n"
107+ "Please run this command before running these tests: \n"
108+ "initctl stop unity8\n"
109+ )
110+ sys.exit(2)
111+
78 def setUp(self):
112 def setUp(self):
79 super(UnityTestCase, self).setUp()
113 super(UnityTestCase, self).setUp()
80 if Gio is not None and UNITYSHELL_GSETTINGS_SCHEMA in Gio.Settings.list_relocatable_schemas():
114 if Gio is not None and UNITYSHELL_GSETTINGS_SCHEMA in Gio.Settings.list_relocatable_schemas():
@@ -87,6 +121,16 @@ class UnityTestCase(AutopilotTestCase):
87 self._proxy = None
121 self._proxy = None
88 self._lightdm_mock_type = None
122 self._lightdm_mock_type = None
89 self._qml_mock_enabled = True
123 self._qml_mock_enabled = True
124+ self._environment = {}
125+
126+ self._patch_data_dirs()
127+
128+ #### FIXME: This is a work around re: lp:1238417 ####
129+ if model() != "Desktop":
130+ from autopilot.input import _uinput
131+ _uinput._touch_device = _uinput.create_touch_device()
132+ ####
133+
90 self.touch = Touch.create()
134 self.touch = Touch.create()
91 self._setup_display_details()
135 self._setup_display_details()
92
136
@@ -129,6 +173,9 @@ class UnityTestCase(AutopilotTestCase):
129 self.grid_size = int(os.getenv('GRID_UNIT_PX'))
173 self.grid_size = int(os.getenv('GRID_UNIT_PX'))
130 else:
174 else:
131 self.grid_size = int(self.grid_unit_px / scale_divisor)
175 self.grid_size = int(self.grid_unit_px / scale_divisor)
176+ self._environment["GRID_UNIT_PX"] = str(self.grid_size)
177+ # FIXME this is only needed for Hud.get_close_button_coords
178+ # we should probably rework it so that it's not required
132 self.patch_environment("GRID_UNIT_PX", str(self.grid_size))
179 self.patch_environment("GRID_UNIT_PX", str(self.grid_size))
133
180
134 def _geo_larger_than_display(self, width, height):
181 def _geo_larger_than_display(self, width, height):
@@ -147,6 +194,38 @@ class UnityTestCase(AutopilotTestCase):
147 divisor = divisor * 2
194 divisor = divisor * 2
148 return divisor
195 return divisor
149
196
197+ def _patch_environment(self, key, value):
198+ """Wrapper for patching env for upstart environment."""
199+ try:
200+ current_value = subprocess.check_output([
201+ "/sbin/initctl",
202+ "get-env",
203+ "--global",
204+ key
205+ ], stderr=subprocess.STDOUT).rstrip()
206+ except subprocess.CalledProcessError:
207+ current_value = None
208+
209+ subprocess.call([
210+ "/sbin/initctl",
211+ "set-env",
212+ "--global",
213+ "%s=%s" % (key, value)
214+ ], stderr=subprocess.STDOUT)
215+ self.addCleanup(self._upstart_reset_env, key, current_value)
216+
217+ def _upstart_reset_env(self, key, value):
218+ logger.info("Resetting upstart env %s to %s", key, value)
219+ if value is None:
220+ subprocess.call(["/sbin/initctl", "unset-env", key], stderr=subprocess.STDOUT)
221+ else:
222+ subprocess.call([
223+ "/sbin/initctl",
224+ "set-env",
225+ "--global",
226+ "%s=%s" % (key, value)
227+ ], stderr=subprocess.STDOUT)
228+
150 def launch_unity(self, **kwargs):
229 def launch_unity(self, **kwargs):
151 """Launch the unity shell, return a proxy object for it."""
230 """Launch the unity shell, return a proxy object for it."""
152 binary_path = get_binary_path()
231 binary_path = get_binary_path()
@@ -164,13 +243,22 @@ class UnityTestCase(AutopilotTestCase):
164 if self._qml_mock_enabled:
243 if self._qml_mock_enabled:
165 self._setup_extra_mock_environment_patch()
244 self._setup_extra_mock_environment_patch()
166
245
167− app_proxy = self.launch_test_application(
246+ # FIXME: we shouldn't be doing this
247+ # $MIR_SOCKET, fallback to $XDG_RUNTIME_DIR/mir_socket and /tmp/mir_socket as last resort
248+ try:
249+ os.unlink(os.getenv('MIR_SOCKET', os.path.join(os.getenv('XDG_RUNTIME_DIR', "/tmp"), "mir_socket")))
250+ except OSError:
251+ pass
252+ try:
253+ os.unlink("/tmp/mir_socket")
254+ except OSError:
255+ pass
256+
257+ app_proxy = self._launch_unity_with_upstart(
168 binary_path,
258 binary_path,
169− *self.unity_geometry_args,
259+ self.unity_geometry_args
170− app_type='qt',
171− emulator_base=UnityEmulatorBase,
172− **kwargs
173 )
260 )
261+
174 self._set_proxy(app_proxy)
262 self._set_proxy(app_proxy)
175
263
176 # Ensure that the dash is visible before we return:
264 # Ensure that the dash is visible before we return:
@@ -180,6 +268,43 @@ class UnityTestCase(AutopilotTestCase):
180
268
181 return app_proxy
269 return app_proxy
182
270
271+ def _launch_unity_with_upstart(self, binary_path, args):
272+ logger.info("Starting unity")
273+ self._patch_environment("QT_LOAD_TESTABILITY", 1)
274+
275+ binary_arg = "BINARY=%s" % binary_path
276+ extra_args = "ARGS=%s" % " ".join(args)
277+
278+ output = subprocess.check_output([
279+ "/sbin/initctl",
280+ "start",
281+ "unity8",
282+ binary_arg,
283+ extra_args
284+ ] + ["%s=%s" % (k,v) for k,v in self._environment.iteritems()],
285+ stderr=subprocess.STDOUT)
286+
287+ self.addCleanup(self._cleanup_launching_upstart_unity)
288+
289+ pid = int(output.split()[-1])
290+
291+ return get_proxy_object_for_existing_process(
292+ pid=pid,
293+ emulator_base=UnityEmulatorBase,
294+ )
295+
296+ def _cleanup_launching_upstart_unity(self):
297+ logger.info("Stopping unity")
298+ try:
299+ subprocess.check_output(["/sbin/initctl", "stop", "unity8"], stderr=subprocess.STDOUT)
300+ except subprocess.CalledProcessError:
301+ logger.warning("Appears unity was already stopped!")
302+
303+ def _patch_data_dirs(self):
304+ data_dirs = get_data_dirs()
305+ if data_dirs is not None:
306+ self._environment['XDG_DATA_DIRS'] = data_dirs
307+
183 def patch_lightdm_mock(self, mock_type='single'):
308 def patch_lightdm_mock(self, mock_type='single'):
184 self._lightdm_mock_type = mock_type
309 self._lightdm_mock_type = mock_type
185 logger.info("Setting up LightDM mock type '%s'", mock_type)
310 logger.info("Setting up LightDM mock type '%s'", mock_type)
@@ -193,7 +318,7 @@ class UnityTestCase(AutopilotTestCase):
193 new_ld_library_path = ':'.join(new_ld_library_path)
318 new_ld_library_path = ':'.join(new_ld_library_path)
194 logger.info("New library path: %s", new_ld_library_path)
319 logger.info("New library path: %s", new_ld_library_path)
195
320
196− self.patch_environment('LD_LIBRARY_PATH', new_ld_library_path)
321+ self._environment['LD_LIBRARY_PATH'] = new_ld_library_path
197
322
198 def _get_lightdm_mock_path(self, mock_type):
323 def _get_lightdm_mock_path(self, mock_type):
199 lib_path = get_mocks_library_path()
324 lib_path = get_mocks_library_path()
@@ -215,7 +340,7 @@ class UnityTestCase(AutopilotTestCase):
215
340
216 qml_import_path = ':'.join(qml_import_path)
341 qml_import_path = ':'.join(qml_import_path)
217 logger.info("New QML2 import path: %s", qml_import_path)
342 logger.info("New QML2 import path: %s", qml_import_path)
218− self.patch_environment('QML2_IMPORT_PATH', qml_import_path)
343+ self._environment['QML2_IMPORT_PATH'] = qml_import_path
219
344
220 def _set_proxy(self, proxy):
345 def _set_proxy(self, proxy):
221 """Keep a copy of the proxy object, so we can use it to get common
346 """Keep a copy of the proxy object, so we can use it to get common
tests/autopilot/unity8/shell/tests/test_notifications.py+10−9
@@ -145,7 +145,7 @@ class InteractiveNotificationBase(NotificationsBase):
145 hints,
145 hints,
146 )
146 )
147
147
148− get_notification = lambda: notify_list.select_single('Notification')
148+ get_notification = lambda: notify_list.select_single('Notification', objectName='notification1')
149 self.assertThat(get_notification, Eventually(NotEquals(None)))
149 self.assertThat(get_notification, Eventually(NotEquals(None)))
150 notification = get_notification()
150 notification = get_notification()
151
151
@@ -191,7 +191,7 @@ class InteractiveNotificationBase(NotificationsBase):
191 hints
191 hints
192 )
192 )
193
193
194− get_notification = lambda: notify_list.select_single('Notification')
194+ get_notification = lambda: notify_list.select_single('Notification', objectName='notification1')
195 self.assertThat(get_notification, Eventually(NotEquals(None)))
195 self.assertThat(get_notification, Eventually(NotEquals(None)))
196 notification = get_notification()
196 notification = get_notification()
197 self._assert_notification(notification, None, None, True, True, 1.0)
197 self._assert_notification(notification, None, None, True, True, 1.0)
@@ -360,7 +360,7 @@ class EphemeralNotificationsTests(NotificationsBase):
360
360
361 notification.show()
361 notification.show()
362
362
363− get_notification = lambda: notify_list.select_single('Notification')
363+ get_notification = lambda: notify_list.select_single('Notification', objectName='notification1')
364 self.assertThat(get_notification, Eventually(NotEquals(None)))
364 self.assertThat(get_notification, Eventually(NotEquals(None)))
365 notification = get_notification()
365 notification = get_notification()
366 self._assert_notification(notification, summary, body, True, True, 1.0)
366 self._assert_notification(notification, summary, body, True, True, 1.0)
@@ -391,7 +391,7 @@ class EphemeralNotificationsTests(NotificationsBase):
391
391
392 notification.show()
392 notification.show()
393
393
394− get_notification = lambda: notify_list.select_single('Notification')
394+ get_notification = lambda: notify_list.select_single('Notification', objectName='notification1')
395 self.assertThat(get_notification, Eventually(NotEquals(None)))
395 self.assertThat(get_notification, Eventually(NotEquals(None)))
396 notification = get_notification()
396 notification = get_notification()
397 self._assert_notification(
397 self._assert_notification(
@@ -508,7 +508,7 @@ class EphemeralNotificationsTests(NotificationsBase):
508 notification = self._create_ephemeral_notification(summary, body)
508 notification = self._create_ephemeral_notification(summary, body)
509 notification.show()
509 notification.show()
510
510
511− get_notification = lambda: notify_list.select_single('Notification')
511+ get_notification = lambda: notify_list.select_single('Notification', objectName='notification1')
512 self.assertThat(get_notification, Eventually(NotEquals(None)))
512 self.assertThat(get_notification, Eventually(NotEquals(None)))
513 notification = get_notification()
513 notification = get_notification()
514 self._assert_notification(
514 self._assert_notification(
@@ -533,7 +533,7 @@ class EphemeralNotificationsTests(NotificationsBase):
533 notification = self._create_ephemeral_notification(summary)
533 notification = self._create_ephemeral_notification(summary)
534 notification.show()
534 notification.show()
535
535
536− get_notification = lambda: notify_list.select_single('Notification')
536+ get_notification = lambda: notify_list.select_single('Notification', objectName='notification1')
537 self.assertThat(get_notification, Eventually(NotEquals(None)))
537 self.assertThat(get_notification, Eventually(NotEquals(None)))
538 notification = get_notification()
538 notification = get_notification()
539
539
@@ -603,7 +603,7 @@ class EphemeralNotificationsTests(NotificationsBase):
603 )
603 )
604 notification.show()
604 notification.show()
605
605
606− get_notification = lambda: notify_list.select_single('Notification')
606+ get_notification = lambda: notify_list.select_single('Notification', objectName='notification1')
607 self.assertThat(get_notification, Eventually(NotEquals(None)))
607 self.assertThat(get_notification, Eventually(NotEquals(None)))
608 self._assert_notification(
608 self._assert_notification(
609 get_notification(),
609 get_notification(),
@@ -645,7 +645,7 @@ class EphemeralNotificationsTests(NotificationsBase):
645
645
646 notification.show()
646 notification.show()
647
647
648− get_notification = lambda: notify_list.select_single('Notification')
648+ get_notification = lambda: notify_list.select_single('Notification', objectName='notification1')
649 self.assertThat(get_notification, Eventually(NotEquals(None)))
649 self.assertThat(get_notification, Eventually(NotEquals(None)))
650 notification = get_notification()
650 notification = get_notification()
651 self._assert_notification(
651 self._assert_notification(
@@ -678,7 +678,8 @@ class EphemeralNotificationsTests(NotificationsBase):
678 )
678 )
679 notification.show()
679 notification.show()
680 get_notification = lambda: notify_list.select_single(
680 get_notification = lambda: notify_list.select_single(
681− 'Notification'
681+ 'Notification',
682+ objectName='notification1'
682 )
683 )
683 self.assertThat(get_notification, Eventually(NotEquals(None)))
684 self.assertThat(get_notification, Eventually(NotEquals(None)))
684 notification = get_notification()
685 notification = get_notification()
tests/mocks/CMakeLists.txt+5
@@ -7,3 +7,8 @@ add_subdirectory(Powerd)
7add_subdirectory(QMenuModel)
7add_subdirectory(QMenuModel)
8add_subdirectory(Ubuntu)
8add_subdirectory(Ubuntu)
9add_subdirectory(Unity)
9add_subdirectory(Unity)
10+
11+install(
12+ DIRECTORY data
13+ DESTINATION ${SHELL_APP_DIR}/mocks
14+)
tests/mocks/Unity/Application/ApplicationInfo.h+1
@@ -35,6 +35,7 @@ class ApplicationInfo : public ApplicationInfoInterface {
35 Q_OBJECT
35 Q_OBJECT
36
36
37 Q_PROPERTY(bool fullscreen READ fullscreen WRITE setFullscreen NOTIFY fullscreenChanged)
37 Q_PROPERTY(bool fullscreen READ fullscreen WRITE setFullscreen NOTIFY fullscreenChanged)
38+ Q_PROPERTY(Stage stage READ stage WRITE setStage NOTIFY stageChanged)
38
39
39 // Only exists in this fake implementation
40 // Only exists in this fake implementation
40
41
tests/mocks/Unity/Application/ApplicationManager.h+1
@@ -99,6 +99,7 @@ class ApplicationManager : public ApplicationManagerInterface {
99 void keyboardHeightChanged();
99 void keyboardHeightChanged();
100 void keyboardVisibleChanged();
100 void keyboardVisibleChanged();
101 void focusRequested(FavoriteApplication favoriteApplication);
101 void focusRequested(FavoriteApplication favoriteApplication);
102+ void focusRequested(const QString &appId);
102
103
103 private:
104 private:
104 void add(ApplicationInfo *application);
105 void add(ApplicationInfo *application);
tests/mocks/Unity/Indicators/CMakeLists.txt+1−1
@@ -35,7 +35,7 @@ target_link_libraries(IndicatorsFakeQml)
35qt5_use_modules(IndicatorsFakeQml Core Qml Quick)
35qt5_use_modules(IndicatorsFakeQml Core Qml Quick)
36
36
37file(GLOB IndicatorsFake_QMLFILES
37file(GLOB IndicatorsFake_QMLFILES
38− IndicatorsModel.qml
38+ *.qml
39 qml/FakeMenuPage.qml
39 qml/FakeMenuPage.qml
40)
40)
41
41
tests/mocks/Unity/Indicators/CachedUnityMenuModel.qmlnew file+30
@@ -0,0 +1,30 @@
1+/*
2+ * Copyright 2013 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU Lesser General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ * Authors:
17+ * Nick Dedekind <nick.dedekind@canonical.com>
18+ */
19+
20+import QtQuick 2.0
21+
22+Item {
23+ property string busName: ""
24+ property string actionsObjectPath: ""
25+ property string menuObjectPath: ""
26+
27+ readonly property bool ready: false
28+
29+ property QtObject model: null
30+}
tests/mocks/Unity/Indicators/RootActionState.qmlnew file+33
@@ -0,0 +1,33 @@
1+/*
2+ * Copyright 2013 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU Lesser General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ * Authors:
17+ * Nick Dedekind <nick.dedekind@canonical.com>
18+ */
19+
20+import QtQuick 2.0
21+
22+QtObject {
23+ property var menu
24+ property bool valid: false
25+ property string title
26+ property string leftLabel
27+ property string rightLabel
28+ property var icons
29+ property string accessibleName
30+ property bool visible: true
31+
32+ signal updated
33+}
tests/mocks/Unity/Indicators/qmldir+2
@@ -1,5 +1,7 @@
1module Unity.Indicators
1module Unity.Indicators
2plugin IndicatorsFakeQml
2plugin IndicatorsFakeQml
3
3
4+CachedUnityMenuModel 0.1 CachedUnityMenuModel.qml
4IndicatorsModel 0.1 IndicatorsModel.qml
5IndicatorsModel 0.1 IndicatorsModel.qml
5FakeMenuPage 0.1 FakeMenuPage.qml
6FakeMenuPage 0.1 FakeMenuPage.qml
7+RootActionState 0.1 RootActionState.qml
tests/mocks/Unity/fake_scope.cpp+13
@@ -31,6 +31,7 @@ Scope::Scope(QObject* parent)
31 : QObject(parent)
31 : QObject(parent)
32 , m_visible(false)
32 , m_visible(false)
33 , m_searching(false)
33 , m_searching(false)
34+ , m_isActive(false)
34 , m_categories(new Categories(this))
35 , m_categories(new Categories(this))
35 , m_results(new DeeListModel(this))
36 , m_results(new DeeListModel(this))
36{
37{
@@ -46,6 +47,7 @@ Scope::Scope(QString const& id, QString const& name, bool visible, QObject* pare
46 , m_name(name)
47 , m_name(name)
47 , m_visible(visible)
48 , m_visible(visible)
48 , m_searching(false)
49 , m_searching(false)
50+ , m_isActive(false)
49 , m_categories(new Categories(this))
51 , m_categories(new Categories(this))
50 , m_results(new DeeListModel(this))
52 , m_results(new DeeListModel(this))
51{
53{
@@ -107,6 +109,10 @@ bool Scope::visible() const {
107 return m_visible;
109 return m_visible;
108}
110}
109
111
112+bool Scope::isActive() const {
113+ return m_isActive;
114+}
115+
110void Scope::setName(const QString &str) {
116void Scope::setName(const QString &str) {
111 if (str != m_name) {
117 if (str != m_name) {
112 m_name = str;
118 m_name = str;
@@ -128,6 +134,13 @@ void Scope::setFormFactor(const QString &str) {
128 }
134 }
129}
135}
130
136
137+void Scope::setActive(const bool active) {
138+ if (active != m_isActive) {
139+ m_isActive = active;
140+ Q_EMIT isActiveChanged();
141+ }
142+}
143+
131void Scope::setSearchInProgress(const bool inProg) {
144void Scope::setSearchInProgress(const bool inProg) {
132 if (inProg != m_searching) {
145 if (inProg != m_searching) {
133 m_searching = inProg;
146 m_searching = inProg;
tests/mocks/Unity/fake_scope.h+5
@@ -41,6 +41,7 @@ class Scope : public QObject
41 Q_PROPERTY(QString searchQuery READ searchQuery WRITE setSearchQuery NOTIFY searchQueryChanged)
41 Q_PROPERTY(QString searchQuery READ searchQuery WRITE setSearchQuery NOTIFY searchQueryChanged)
42 Q_PROPERTY(QString noResultsHint READ noResultsHint WRITE setNoResultsHint NOTIFY noResultsHintChanged)
42 Q_PROPERTY(QString noResultsHint READ noResultsHint WRITE setNoResultsHint NOTIFY noResultsHintChanged)
43 Q_PROPERTY(QString formFactor READ formFactor WRITE setFormFactor NOTIFY formFactorChanged)
43 Q_PROPERTY(QString formFactor READ formFactor WRITE setFormFactor NOTIFY formFactorChanged)
44+ Q_PROPERTY(bool isActive READ isActive WRITE setActive NOTIFY isActiveChanged)
44
45
45public:
46public:
46 Scope(QObject* parent = 0);
47 Scope(QObject* parent = 0);
@@ -60,12 +61,14 @@ public:
60 QString searchQuery() const;
61 QString searchQuery() const;
61 QString noResultsHint() const;
62 QString noResultsHint() const;
62 QString formFactor() const;
63 QString formFactor() const;
64+ bool isActive() const;
63
65
64 /* setters */
66 /* setters */
65 void setName(const QString& name);
67 void setName(const QString& name);
66 void setSearchQuery(const QString& search_query);
68 void setSearchQuery(const QString& search_query);
67 void setNoResultsHint(const QString& hint);
69 void setNoResultsHint(const QString& hint);
68 void setFormFactor(const QString& form_factor);
70 void setFormFactor(const QString& form_factor);
71+ void setActive(const bool);
69 void setSearchInProgress(const bool inProg);
72 void setSearchInProgress(const bool inProg);
70
73
71 Q_INVOKABLE void activate(const QVariant &uri, const QVariant &icon_hint, const QVariant &category,
74 Q_INVOKABLE void activate(const QVariant &uri, const QVariant &icon_hint, const QVariant &category,
@@ -89,6 +92,7 @@ Q_SIGNALS:
89 void searchQueryChanged();
92 void searchQueryChanged();
90 void noResultsHintChanged();
93 void noResultsHintChanged();
91 void formFactorChanged();
94 void formFactorChanged();
95+ void isActiveChanged();
92
96
93 // signals triggered by activate(..) or preview(..) requests.
97 // signals triggered by activate(..) or preview(..) requests.
94 void previewReady(Preview *preview);
98 void previewReady(Preview *preview);
@@ -107,6 +111,7 @@ protected:
107 QString m_formFactor;
111 QString m_formFactor;
108 bool m_visible;
112 bool m_visible;
109 bool m_searching;
113 bool m_searching;
114+ bool m_isActive;
110
115
111 Categories* m_categories;
116 Categories* m_categories;
112 DeeListModel* m_results;
117 DeeListModel* m_results;
tests/mocks/data/applications/camera-app.desktopnew file

No changes to the content.

tests/plugins/Unity/CMakeLists.txt+1−1
@@ -1,7 +1,7 @@
1add_subdirectory(Indicators)
1add_subdirectory(Indicators)
2add_subdirectory(Launcher)
2add_subdirectory(Launcher)
3
3
4−pkg_check_modules(UNITYCORE REQUIRED unity-core-6.0)
4+pkg_check_modules(UNITYCORE REQUIRED unity-core-6.0>=7.1.1)
5pkg_check_modules(LIBUNITYPROTO REQUIRED unity-protocol-private)
5pkg_check_modules(LIBUNITYPROTO REQUIRED unity-protocol-private)
6pkg_check_modules(LIBUNITY REQUIRED unity)
6pkg_check_modules(LIBUNITY REQUIRED unity)
7pkg_check_modules(LIBSIGCPP REQUIRED sigc++-2.0)
7pkg_check_modules(LIBSIGCPP REQUIRED sigc++-2.0)
tests/plugins/Unity/Indicators/CMakeLists.txt+5
@@ -1,6 +1,9 @@
1+pkg_check_modules(QMENUMODEL REQUIRED qmenumodel)
2+
1include_directories(
3include_directories(
2 ${CMAKE_CURRENT_BINARY_DIR}
4 ${CMAKE_CURRENT_BINARY_DIR}
3 ${CMAKE_CURRENT_SOURCE_DIR}/../../../../plugins/Unity/Indicators
5 ${CMAKE_CURRENT_SOURCE_DIR}/../../../../plugins/Unity/Indicators
6+ ${QMENUMODEL_INCLUDE_DIRS}
4 )
7 )
5
8
6macro(run_tests)
9macro(run_tests)
@@ -16,6 +19,7 @@ macro(run_tests)
16 qt5_use_modules(${_test}Exec Test Core Qml)
19 qt5_use_modules(${_test}Exec Test Core Qml)
17 target_link_libraries(${_test}Exec
20 target_link_libraries(${_test}Exec
18 IndicatorsQml
21 IndicatorsQml
22+ ${QMENUMODEL_LDFLAGS}
19 )
23 )
20 set(_test_list "${_test_list};${_test}")
24 set(_test_list "${_test_list};${_test}")
21 endforeach()
25 endforeach()
@@ -25,4 +29,5 @@ run_tests(
25 indicatorsmanagertest
29 indicatorsmanagertest
26 indicatorsmodeltest
30 indicatorsmodeltest
27 menucontentactivatortest
31 menucontentactivatortest
32+ rootactionstatetest
28 )
33 )
tests/plugins/Unity/Indicators/rootactionstatetest.cppnew file+58
@@ -0,0 +1,58 @@
1+/*
2+ * Copyright 2013 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU Lesser General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ * Authors:
17+ * Nick Dedekind <nick.dedekind@canonical.com>
18+ */
19+
20+#include "rootactionstate.h"
21+
22+#include <unitymenumodel.h>
23+#include <QtTest>
24+
25+class RootActionStateTest : public QObject
26+{
27+ Q_OBJECT
28+private Q_SLOTS:
29+
30+ void testDeleteRootActionState()
31+ {
32+ UnityMenuModel* menuModel = new UnityMenuModel();
33+ ActionStateParser* originalParser = menuModel->actionStateParser();
34+ RootActionState* rootState = new RootActionState();
35+
36+ rootState->setMenu(menuModel);
37+
38+ delete rootState;
39+ QCOMPARE(menuModel->actionStateParser(), originalParser);
40+ delete menuModel;
41+ }
42+
43+ void testDeleteUnityMenuModel()
44+ {
45+ UnityMenuModel* menuModel = new UnityMenuModel();
46+ RootActionState* rootState = new RootActionState();
47+
48+ rootState->setMenu(menuModel);
49+
50+ QCOMPARE(rootState->menu(), menuModel);
51+ delete menuModel;
52+ QVERIFY(rootState->menu() == NULL);
53+ delete rootState;
54+ }
55+};
56+
57+QTEST_GUILESS_MAIN(RootActionStateTest)
58+#include "rootactionstatetest.moc"
tests/plugins/Unity/Launcher/launcherbackendtest.cpp−21
@@ -43,27 +43,6 @@ private Q_SLOTS:
43 QCOMPARE(backend.storedApplications(), QStringList() << "rel-icon" << "abs-icon");
43 QCOMPARE(backend.storedApplications(), QStringList() << "rel-icon" << "abs-icon");
44 }
44 }
45
45
46− void testPinning()
47− {
48− LauncherBackend backend;
49−
50− backend.setStoredApplications(QStringList() << "rel-icon" << "abs-icon");
51− QCOMPARE(backend.isPinned("rel-icon"), false);
52− QCOMPARE(backend.isPinned("abs-icon"), false);
53−
54− backend.setPinned("rel-icon", true);
55− QCOMPARE(backend.isPinned("rel-icon"), true);
56−
57− backend.setStoredApplications(QStringList() << "rel-icon" << "abs-icon" << "no-name");
58− QCOMPARE(backend.isPinned("rel-icon"), true);
59− QCOMPARE(backend.isPinned("no-name"), false);
60−
61− backend.setPinned("no-name", true);
62− backend.setStoredApplications(QStringList() << "rel-icon" << "abs-icon");
63− QCOMPARE(backend.isPinned("rel-icon"), true);
64− QCOMPARE(backend.isPinned("no-name"), false); // doesn't exist anymore!
65− }
66−
67 void testIcon_data() {
46 void testIcon_data() {
68 QTest::addColumn<QString>("appId");
47 QTest::addColumn<QString>("appId");
69 QTest::addColumn<QString>("expectedIcon");
48 QTest::addColumn<QString>("expectedIcon");
tests/plugins/Unity/resultstest.cpp+139
@@ -19,9 +19,11 @@
19
19
20#include <QTest>
20#include <QTest>
21#include <dee.h>
21#include <dee.h>
22+#include <glib.h>
22
23
23#include "resultstest.h"
24#include "resultstest.h"
24#include "categoryresults.h"
25#include "categoryresults.h"
26+#include "variantutils.h"
25
27
26static DeeModel* createBackendModel()
28static DeeModel* createBackendModel()
27{
29{
@@ -106,4 +108,141 @@ void ResultsTest::testIconColumn()
106 QCOMPARE(transformedIcon, result);
108 QCOMPARE(transformedIcon, result);
107}
109}
108
110
111+class GVariantWrapper
112+{
113+public:
114+ GVariantWrapper() : variant(NULL) {}
115+ GVariantWrapper(GVariant* v) {
116+ variant = v ? g_variant_ref_sink(v) : NULL;
117+ }
118+ GVariantWrapper(const GVariantWrapper& other) {
119+ variant = other.variant ? g_variant_ref(other.variant) : NULL;
120+ }
121+ ~GVariantWrapper() {
122+ if (variant) g_variant_unref(variant);
123+ }
124+
125+ GVariant* variant;
126+};
127+
128+Q_DECLARE_METATYPE(GVariantWrapper)
129+
130+void ResultsTest::testSpecialIcons_data()
131+{
132+ QTest::addColumn<QString>("uri");
133+ QTest::addColumn<GVariantWrapper>("metadata");
134+ QTest::addColumn<QString>("result");
135+
136+ GVariant *inner;
137+ GVariantBuilder builder, inner_builder;
138+
139+ g_variant_builder_init(&inner_builder, G_VARIANT_TYPE_VARDICT);
140+ g_variant_builder_add(&inner_builder, "{sv}", "artist", g_variant_new_string("U2"));
141+ g_variant_builder_add(&inner_builder, "{sv}", "album", g_variant_new_string("War"));
142+
143+ g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT);
144+ g_variant_builder_add(&builder, "{sv}", "content", g_variant_builder_end(&inner_builder));
145+
146+ QTest::newRow("simple") << "file:///foo.mp3" << GVariantWrapper(g_variant_builder_end(&builder)) << "image://albumart/U2/War";
147+
148+ g_variant_builder_init(&inner_builder, G_VARIANT_TYPE_VARDICT);
149+ g_variant_builder_add(&inner_builder, "{sv}", "artist", g_variant_new_string("U2"));
150+ g_variant_builder_add(&inner_builder, "{sv}", "album", g_variant_new_string("War/Joshua tree"));
151+ inner = g_variant_builder_end(&inner_builder);
152+
153+ g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT);
154+ g_variant_builder_add(&builder, "{sv}", "content", inner);
155+
156+ QTest::newRow("with-slash") << "file:///foo.mp3" << GVariantWrapper(g_variant_builder_end(&builder)) << "image://albumart/U2/War%2FJoshua%20tree";
157+
158+ g_variant_builder_init(&inner_builder, G_VARIANT_TYPE_VARDICT);
159+ g_variant_builder_add(&inner_builder, "{sv}", "artist", g_variant_new_string("U2"));
160+ g_variant_builder_add(&inner_builder, "{sv}", "album", g_variant_new_string("War"));
161+ inner = g_variant_builder_end(&inner_builder);
162+
163+ g_variant_builder_init(&inner_builder, G_VARIANT_TYPE_VARDICT);
164+ g_variant_builder_add(&inner_builder, "{sv}", "content", inner);
165+
166+ g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT);
167+ g_variant_builder_add(&builder, "{sv}", "content", g_variant_builder_end(&inner_builder));
168+
169+ QTest::newRow("nested") << "file:///foo.mp3" << GVariantWrapper(g_variant_builder_end(&builder)) << "image://albumart/U2/War";
170+}
171+
172+void ResultsTest::testSpecialIcons()
173+{
174+ QFETCH(QString, uri);
175+ QFETCH(GVariantWrapper, metadata);
176+ QFETCH(QString, result);
177+ auto deeModel = createBackendModel();
178+ dee_model_append (deeModel,
179+ uri.toLocal8Bit().constData(),
180+ "",
181+ 0,
182+ 0,
183+ "audio/mp3",
184+ "Test",
185+ "",
186+ uri.toLocal8Bit().constData(),
187+ metadata.variant);
188+
189+ CategoryResults* results = new CategoryResults(this);
190+ results->setModel(deeModel);
191+
192+ auto index = results->index(0, 0); // there's just one result
193+ auto transformedIcon = index.data(CategoryResults::Roles::RoleIconHint).toString();
194+ QCOMPARE(transformedIcon, result);
195+}
196+
197+void ResultsTest::testMetadataOverride_data()
198+{
199+ QTest::addColumn<QString>("uri");
200+ QTest::addColumn<QVariantHash>("result");
201+
202+ QVariantHash expected_result;
203+ QVariantHash inner_hash;
204+
205+ expected_result = QVariantHash();
206+ expected_result["scope-id"] = QVariant::fromValue(QString("applications.scope"));
207+ expected_result["content"] = QVariant::fromValue(QVariantHash());
208+
209+ QTest::newRow("single scope") << "subscope:applications.scope" << expected_result;
210+
211+ expected_result = QVariantHash();
212+ expected_result["scope-id"] = QVariant::fromValue(QString("applications.scope"));
213+ inner_hash = QVariantHash();
214+ inner_hash["foo"] = QVariant::fromValue(QString("bar"));
215+ inner_hash["qoo"] = QVariant::fromValue(QString("baz"));
216+ expected_result["content"] = QVariant::fromValue(inner_hash);
217+
218+ QTest::newRow("single scope with data") << "subscope:applications.scope?foo=bar&qoo=baz" << expected_result;
219+
220+ expected_result = QVariantHash();
221+ inner_hash = QVariantHash();
222+ inner_hash["scope-id"] = QVariant::fromValue(QString("applications-local.scope"));
223+ inner_hash["content"] = QVariant::fromValue(QVariantHash());
224+ expected_result["scope-id"] = QVariant::fromValue(QString("applications.scope"));
225+ expected_result["content"] = QVariant::fromValue(inner_hash);
226+ QTest::newRow("master scope") << "subscope:applications.scope/applications-local.scope" << expected_result;
227+
228+ expected_result = QVariantHash();
229+ expected_result["foo"] = QVariant::fromValue(QString("baz"));
230+ expected_result["qoo"] = QVariant::fromValue(QString("baz"));
231+ inner_hash = QVariantHash();
232+ inner_hash["scope-id"] = QVariant::fromValue(QString("applications-local.scope"));
233+ inner_hash["content"] = QVariant::fromValue(expected_result);
234+ expected_result = QVariantHash();
235+ expected_result["scope-id"] = QVariant::fromValue(QString("applications.scope"));
236+ expected_result["content"] = QVariant::fromValue(inner_hash);
237+ QTest::newRow("nested with data") << "subscope:applications.scope/applications-local.scope?foo=baz&qoo=baz" << expected_result;
238+}
239+
240+void ResultsTest::testMetadataOverride()
241+{
242+ QFETCH(QString, uri);
243+ QFETCH(QVariantHash, result);
244+
245+ QCOMPARE(subscopeUriToMetadataHash(uri), result);
246+}
247+
109QTEST_MAIN(ResultsTest)
248QTEST_MAIN(ResultsTest)
tests/plugins/Unity/resultstest.h+4
@@ -30,6 +30,10 @@ class ResultsTest : public QObject
30 void testAllColumns();
30 void testAllColumns();
31 void testIconColumn_data();
31 void testIconColumn_data();
32 void testIconColumn();
32 void testIconColumn();
33+ void testSpecialIcons_data();
34+ void testSpecialIcons();
35+ void testMetadataOverride_data();
36+ void testMetadataOverride();
33};
37};
34
38
35#endif
39#endif
tests/qmltests/CMakeLists.txt+4−3
@@ -17,7 +17,7 @@ add_qml_test(Components MathLocal)
17add_qml_test(Components OpenEffect)
17add_qml_test(Components OpenEffect)
18add_qml_test(Components RatingStars)
18add_qml_test(Components RatingStars)
19add_qml_test(Components TimeLocal)
19add_qml_test(Components TimeLocal)
20−add_qml_test(Greeter Clock)
20+add_qml_test(Greeter Clock IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/plugins)
21add_qml_test(Panel IndicatorItem)
21add_qml_test(Panel IndicatorItem)
22add_qml_test(utils/Unity/Test UnityTest)
22add_qml_test(utils/Unity/Test UnityTest)
23
23
@@ -43,15 +43,16 @@ add_qml_test(Components Tile)
43add_qml_test(Components PageHeader)
43add_qml_test(Components PageHeader)
44add_qml_test(Dash Dash IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
44add_qml_test(Dash Dash IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
45add_qml_test(Dash DashBar IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${CMAKE_CURRENT_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
45add_qml_test(Dash DashBar IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${CMAKE_CURRENT_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
46−add_qml_test(Dash DashContent IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS})
46+add_qml_test(Dash DashContent IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
47add_qml_test(Dash DashPreview)
47add_qml_test(Dash DashPreview)
48+add_qml_test(Dash GenericPreview)
48add_qml_test(Dash GenericScopeView IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
49add_qml_test(Dash GenericScopeView IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
49add_qml_test(Dash ScopeView IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
50add_qml_test(Dash ScopeView IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
50add_qml_test(Dash FilterGrids IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/plugins ${CMAKE_CURRENT_SOURCE_DIR}/plugins
51add_qml_test(Dash FilterGrids IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/plugins ${CMAKE_CURRENT_SOURCE_DIR}/plugins
51 ${CMAKE_BINARY_DIR}/tests/mocks)
52 ${CMAKE_BINARY_DIR}/tests/mocks)
52add_qml_test(Dash/Apps RunningApplicationsGrid IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
53add_qml_test(Dash/Apps RunningApplicationsGrid IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
53add_qml_test(Dash/Apps AppPreview IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
54add_qml_test(Dash/Apps AppPreview IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
54−add_qml_test(Dash/Video VideoPreview IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
55+add_qml_test(Dash/Movie MoviePreview IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
55add_qml_test(Greeter Lockscreen IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS}
56add_qml_test(Greeter Lockscreen IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS}
56 PROPERTIES ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full")
57 PROPERTIES ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full")
57add_qml_test(Greeter Tablet IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS}
58add_qml_test(Greeter Tablet IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS}
tests/qmltests/Components/tst_LazyImage.qml+45−16
@@ -70,9 +70,23 @@ Rectangle {
70
70
71 LazyImage {
71 LazyImage {
72 id: lazy3
72 id: lazy3
73− height: units.gu(10)
73+ height: units.gu(12)
74 scaleTo: "height"
74 scaleTo: "height"
75 }
75 }
76+
77+ Label {
78+ height: units.gu(4)
79+ text: "Fit"
80+ color: "white"
81+ verticalAlignment: Text.AlignBottom
82+ }
83+
84+ LazyImage {
85+ id: lazy4
86+ height: units.gu(12)
87+ width: units.gu(12)
88+ scaleTo: "fit"
89+ }
76 }
90 }
77 }
91 }
78
92
@@ -94,6 +108,7 @@ Rectangle {
94 ImageControls { id: controls1; image: lazy1 }
108 ImageControls { id: controls1; image: lazy1 }
95 ImageControls { id: controls2; image: lazy2 }
109 ImageControls { id: controls2; image: lazy2 }
96 ImageControls { id: controls3; image: lazy3 }
110 ImageControls { id: controls3; image: lazy3 }
111+ ImageControls { id: controls4; image: lazy4 }
97 }
112 }
98 }
113 }
99
114
@@ -112,21 +127,26 @@ Rectangle {
112
127
113 function test_lazyimage_data() {
128 function test_lazyimage_data() {
114 return [
129 return [
115− {tag: "Unbound Blank", image: lazy1, func: controls1.blank, width: units.gu(10), height: units.gu(10), placeholder: true},
130+ {tag: "Unbound Blank", image: lazy1, func: controls1.blank, width: units.gu(10), height: units.gu(10), imageWidth: units.gu(10), imageHeight: units.gu(10), initialWidth: units.gu(10), initialHeight: units.gu(10), placeholder: true},
116− {tag: "Unbound Wide", image: lazy1, func: controls1.wide, transition: "readyTransition", width: 160, height: 80},
131+ {tag: "Unbound Wide", image: lazy1, func: controls1.wide, transition: "readyTransition", width: 160, height: 80, imageWidth: 160, imageHeight: 80, initialWidth: units.gu(10), initialHeight: units.gu(10)},
117− {tag: "Unbound Square", image: lazy1, func: controls1.square, transition: "readyTransition", width: 160, height: 160},
132+ {tag: "Unbound Square", image: lazy1, func: controls1.square, transition: "readyTransition", width: 160, height: 160, imageWidth: 160, imageHeight: 160, initialWidth: units.gu(10), initialHeight: units.gu(10)},
118− {tag: "Unbound Portrait", image: lazy1, func: controls1.portrait, transition: "readyTransition", width: 80, height: 160},
133+ {tag: "Unbound Portrait", image: lazy1, func: controls1.portrait, transition: "readyTransition", width: 80, height: 160, imageWidth: 80, imageHeight: 160, initialWidth: units.gu(10), initialHeight: units.gu(10)},
119− {tag: "Unbound Bad path", image: lazy1, func: controls1.badpath, transition: "genericTransition", width: units.gu(10), height: units.gu(10), placeholder: true, error: true},
134+ {tag: "Unbound Bad path", image: lazy1, func: controls1.badpath, transition: "genericTransition", width: units.gu(10), height: units.gu(10), imageWidth: units.gu(10), imageHeight: units.gu(10), initialWidth: units.gu(10), initialHeight: units.gu(10), placeholder: true, error: true},
120− {tag: "Width-bound Blank", image: lazy2, func: controls2.blank, width: units.gu(30), height: units.gu(10), placeholder: true},
135+ {tag: "Width-bound Blank", image: lazy2, func: controls2.blank, width: units.gu(30), height: units.gu(10), imageWidth: units.gu(30), imageHeight: units.gu(10), initialWidth: units.gu(30), initialHeight: units.gu(10), placeholder: true},
121− {tag: "Width-bound Wide", image: lazy2, func: controls2.wide, transition: "readyTransition", width: units.gu(30), height: units.gu(15)},
136+ {tag: "Width-bound Wide", image: lazy2, func: controls2.wide, transition: "readyTransition", width: units.gu(30), height: units.gu(15), imageWidth: units.gu(30), imageHeight: units.gu(15), initialWidth: units.gu(30), initialHeight: units.gu(10)},
122− {tag: "Width-bound Square", image: lazy2, func: controls2.square, transition: "readyTransition", width: units.gu(30), height: units.gu(30)},
137+ {tag: "Width-bound Square", image: lazy2, func: controls2.square, transition: "readyTransition", width: units.gu(30), height: units.gu(30), imageWidth: units.gu(30), imageHeight: units.gu(30), initialWidth: units.gu(30), initialHeight: units.gu(10)},
123− {tag: "Width-bound Portrait", image: lazy2, func: controls2.portrait, transition: "readyTransition", width: units.gu(30), height: units.gu(60)},
138+ {tag: "Width-bound Portrait", image: lazy2, func: controls2.portrait, transition: "readyTransition", width: units.gu(30), height: units.gu(60), imageWidth: units.gu(30), imageHeight: units.gu(60), initialWidth: units.gu(30), initialHeight: units.gu(10)},
124− {tag: "Width-bound Bad path", image: lazy2, func: controls2.badpath, transition: "genericTransition", width: units.gu(30), height: units.gu(10), placeholder: true, error: true},
139+ {tag: "Width-bound Bad path", image: lazy2, func: controls2.badpath, transition: "genericTransition", width: units.gu(30), height: units.gu(10), imageWidth: units.gu(30), imageHeight: units.gu(10), initialWidth: units.gu(30), initialHeight: units.gu(10), placeholder: true, error: true},
125− {tag: "Height-bound Blank", image: lazy3, func: controls3.blank, width: units.gu(10), height: units.gu(10), placeholder: true},
140+ {tag: "Height-bound Blank", image: lazy3, func: controls3.blank, width: units.gu(10), height: units.gu(12), imageWidth: units.gu(10), imageHeight: units.gu(12), initialWidth: units.gu(10), initialHeight: units.gu(12), placeholder: true},
126− {tag: "Height-bound Wide", image: lazy3, func: controls3.wide, transition: "readyTransition", width: units.gu(20), height: units.gu(10)},
141+ {tag: "Height-bound Wide", image: lazy3, func: controls3.wide, transition: "readyTransition", width: units.gu(24), height: units.gu(12), imageWidth: units.gu(24), imageHeight: units.gu(12), initialWidth: units.gu(10), initialHeight: units.gu(12)},
127− {tag: "Height-bound Square", image: lazy3, func: controls3.square, transition: "readyTransition", width: units.gu(10), height: units.gu(10)},
142+ {tag: "Height-bound Square", image: lazy3, func: controls3.square, transition: "readyTransition", width: units.gu(12), height: units.gu(12), imageWidth: units.gu(12), imageHeight: units.gu(12), initialWidth: units.gu(10), initialHeight: units.gu(12)},
128− {tag: "Height-bound Portrait", image: lazy3, func: controls3.portrait, transition: "readyTransition", width: units.gu(5), height: units.gu(10)},
129− {tag: "Height-bound Bad path", image: lazy3, func: controls3.badpath, transition: "genericTransition", width: units.gu(10), height: units.gu(10), placeholder: true, error: true},
143+ {tag: "Height-bound Portrait", image: lazy3, func: controls3.portrait, transition: "readyTransition", width: units.gu(6), height: units.gu(12), imageWidth: units.gu(6), imageHeight: units.gu(12), initialWidth: units.gu(10), initialHeight: units.gu(12)},
144+ {tag: "Height-bound Bad path", image: lazy3, func: controls3.badpath, transition: "genericTransition", width: units.gu(10), height: units.gu(12), imageWidth: units.gu(10), imageHeight: units.gu(12), initialWidth: units.gu(10), initialHeight: units.gu(12), placeholder: true, error: true},
145+ {tag: "Fit Blank", image: lazy4, func: controls4.blank, width: units.gu(12), height: units.gu(12), imageWidth: units.gu(12), imageHeight: units.gu(12), initialWidth: units.gu(12), initialHeight: units.gu(12), placeholder: true},
146+ {tag: "Fit Wide", image: lazy4, func: controls4.wide, transition: "readyTransition", width: units.gu(12), height: units.gu(12), imageWidth: units.gu(12), imageHeight: units.gu(6), initialWidth: units.gu(12), initialHeight: units.gu(12)},
147+ {tag: "Fit Square", image: lazy4, func: controls4.square, transition: "readyTransition", width: units.gu(12), height: units.gu(12), imageWidth: units.gu(12), imageHeight: units.gu(12), initialWidth: units.gu(12), initialHeight: units.gu(12)},
148+ {tag: "Fit Portrait", image: lazy4, func: controls4.portrait, transition: "readyTransition", width: units.gu(12), height: units.gu(12), imageWidth: units.gu(6), imageHeight: units.gu(12), initialWidth: units.gu(12), initialHeight: units.gu(12)},
149+ {tag: "Fit Bad path", image: lazy4, func: controls4.badpath, transition: "genericTransition", width: units.gu(12), height: units.gu(12), imageWidth: units.gu(12), imageHeight: units.gu(12), initialWidth: units.gu(12), initialHeight: units.gu(12), placeholder: true, error: true},
130 ]
150 ]
131 }
151 }
132
152
@@ -144,6 +164,15 @@ Rectangle {
144 compare(data.image.width, data.width);
164 compare(data.image.width, data.width);
145 compare(data.image.height, data.height);
165 compare(data.image.height, data.height);
146
166
167+ // check initial dimensions
168+ compare(data.image.initialHeight, data.initialHeight);
169+ compare(data.image.initialWidth, data.initialWidth);
170+
171+ // check the shape dimensions
172+ var shape = findChild(data.image, "shape");
173+ compare(shape.width, data.imageWidth);
174+ compare(shape.height, data.imageHeight);
175+
147 // check the placeholder
176 // check the placeholder
148 var placeholder = findChild(data.image, "placeholder");
177 var placeholder = findChild(data.image, "placeholder");
149 compare(placeholder.visible, data.placeholder ? true : false);
178 compare(placeholder.visible, data.placeholder ? true : false);
tests/qmltests/Dash/Apps/tst_AppPreview.qml+63−26
@@ -42,6 +42,7 @@ Item {
42 QtObject { id: rated; property int value: 120 }
42 QtObject { id: rated; property int value: 120 }
43 QtObject { id: reviews; property int value: 8 }
43 QtObject { id: reviews; property int value: 8 }
44 QtObject { id: progress; property string value: "source" }
44 QtObject { id: progress; property string value: "source" }
45+ QtObject { id: publisher; property string value: "Ubuntu Developer" }
45 QtObject { id: comments; property var value: [
46 QtObject { id: comments; property var value: [
46 ["Unity User", 4, "08/20/2013", root.commentary],
47 ["Unity User", 4, "08/20/2013", root.commentary],
47 ["Unity User", 8, "01/15/2013", root.commentary],
48 ["Unity User", 8, "01/15/2013", root.commentary],
@@ -62,7 +63,8 @@ Item {
62 property var infoMap: {
63 property var infoMap: {
63 "more-screenshots": screenshots,
64 "more-screenshots": screenshots,
64 "rated": rated,
65 "rated": rated,
65− "comments": comments
66+ "comments": comments,
67+ "publisher": publisher
66 }
68 }
67 property var actions: [
69 property var actions: [
68 { "id": 123, "displayName": "action1" },
70 { "id": 123, "displayName": "action1" },
@@ -84,6 +86,7 @@ Item {
84 "more-screenshots": screenshots,
86 "more-screenshots": screenshots,
85 "rated": rated,
87 "rated": rated,
86 "comments": comments,
88 "comments": comments,
89+ "publisher": publisher,
87 "progressbar_source": progressSource
90 "progressbar_source": progressSource
88 }
91 }
89 property var actions: [
92 property var actions: [
@@ -109,34 +112,48 @@ Item {
109 name: "AppPreview"
112 name: "AppPreview"
110 when: windowShown
113 when: windowShown
111
114
115+ function init() {
116+ waitForRendering(appPreview)
117+ }
118+
112 function cleanup() {
119 function cleanup() {
113 root.calls = new Array();
120 root.calls = new Array();
114 sendPreviewSpy.clear();
121 sendPreviewSpy.clear();
122+ // TODO: This doesn't work right now as Reviews are disabled
115− var reviewField = findChild(appPreview, "reviewField");
123+ //var reviewField = findChild(appPreview, "reviewField");
116− reviewField.focus = false;
124+ //reviewField.focus = false;
117− reviewField.text = "";
125+ //reviewField.text = "";
118− data.rating = rating.value;
126+ //data.rating = rating.value;
119 dataProgress.infoMap["progressbar_source"].value = "service";
127 dataProgress.infoMap["progressbar_source"].value = "service";
120− var appReviews = findChild(appPreview, "appReviews");
128+ //var appReviews = findChild(appPreview, "appReviews");
121− appReviews.visible = false;
129+ //appReviews.visible = false;
122− appPreview.keyboardSize = 0;
130+ //appPreview.keyboardSize = 0;
123 }
131 }
124
132
125 function test_actions() {
133 function test_actions() {
126− var buttons = findChild(appPreview, "gridButtons");
134+ var buttons = findChild(appPreview, "buttonList");
127 compare(buttons.count, 3, "Not the proper amount of actions detected.");
135 compare(buttons.count, 3, "Not the proper amount of actions detected.");
128
136
129 for(var i = 0; i < buttons.count; i++) {
137 for(var i = 0; i < buttons.count; i++) {
130− buttons.currentIndex = i;
138+ var button = findChild(appPreview, "button" + i);
131− buttons.currentItem.clicked();
139+ mouseClick(button, 1, 1);
140+ appPreview.showProcessingAction = false;
132 }
141 }
133
142
134 var actions = data.actions;
143 var actions = data.actions;
135− for(var i = 0; i < actions.length; i++) {
144+ for(var j = 0; j < actions.length; j++) {
136− compare(root.calls[i][0], actions[i].id, "Id of action not found.");
145+ compare(root.calls[j][0], actions[j].id, "Id of action not found.");
137 }
146 }
138 }
147 }
139
148
149+ function test_check_app_info() {
150+ var appInfo = findChild(appPreview, "previewHeader");
151+ var titleLabel = findChild(appInfo, "titleLabel");
152+ var subtitleLabel = findChild(appInfo, "subtitleLabel");
153+ compare(titleLabel.text, data.title, "App Title doesn't match.");
154+ compare(subtitleLabel.text, publisher.value, "Publisher name doesn't match.");
155+ }
156+
140 function test_rated() {
157 function test_rated() {
141 var rated = findChild(appPreview, "ratedLabel");
158 var rated = findChild(appPreview, "ratedLabel");
142 compare(rated.text, "(120)", "Rates not equal");
159 compare(rated.text, "(120)", "Rates not equal");
@@ -147,13 +164,18 @@ Item {
147 compare(rated.text, "8 reviews", "Reviews don't match");
164 compare(rated.text, "8 reviews", "Reviews don't match");
148 }
165 }
149
166
167+ // TODO: Disabled as reviewing and commenting is currently disabled
150 function test_send_review() {
168 function test_send_review() {
169+ skip();
151 var appReviews = findChild(appPreview, "appReviews");
170 var appReviews = findChild(appPreview, "appReviews");
152 appReviews.sendReview("review");
171 appReviews.sendReview("review");
153 sendPreviewSpy.wait();
172 sendPreviewSpy.wait();
154 }
173 }
155
174
156 function test_review_focus() {
175 function test_review_focus() {
176+ skip();
177+ var columnReviewRating = findChild(appPreview, "columnReviewRating");
178+ columnReviewRating.visible = true;
157 var appReviews = findChild(appPreview, "appReviews");
179 var appReviews = findChild(appPreview, "appReviews");
158 appReviews.visible = true;
180 appReviews.visible = true;
159 var sendButton = findChild(appReviews, "sendButton");
181 var sendButton = findChild(appReviews, "sendButton");
@@ -168,6 +190,7 @@ Item {
168 }
190 }
169
191
170 function test_comments() {
192 function test_comments() {
193+ skip();
171 var commentsArea = findChild(appPreview, "commentsArea");
194 var commentsArea = findChild(appPreview, "commentsArea");
172 compare(commentsArea.count, 3);
195 compare(commentsArea.count, 3);
173 for(var i = 0; i < 3; i++) {
196 for(var i = 0; i < 3; i++) {
@@ -183,6 +206,7 @@ Item {
183 }
206 }
184
207
185 function test_negative_rating() {
208 function test_negative_rating() {
209+ skip();
186 data.rating = -1.0;
210 data.rating = -1.0;
187 var rated = findChild(appPreview, "reviewsLabel");
211 var rated = findChild(appPreview, "reviewsLabel");
188 verify(rated.visible == false);
212 verify(rated.visible == false);
@@ -194,6 +218,22 @@ Item {
194 verify(buttons.visible == true);
218 verify(buttons.visible == true);
195 }
219 }
196
220
221+ function test_automatic_scroll_on_keyboard_shown() {
222+ skip();
223+ waitForRendering(appPreview);
224+ var appReviews = findChild(appPreview, "appReviews");
225+ appReviews.visible = true;
226+
227+ var leftFlickable = findChild(appPreview, "leftFlickable");
228+ leftFlickable.contentY = leftFlickable.contentHeight;
229+ var reviewField = findChild(appReviews, "reviewField");
230+ appPreview.keyboardSize = 400;
231+ appReviews.editing(reviewField);
232+ var newFlickPos = leftFlickable.contentY;
233+ var keyboardY = shell.height - appPreview.keyboardSize;
234+ verify(newFlickPos < keyboardY);
235+ }
236+
197 function test_progress_show() {
237 function test_progress_show() {
198 appPreview.previewData = dataProgress;
238 appPreview.previewData = dataProgress;
199 var progress = findChild(appPreview, "progressBar");
239 var progress = findChild(appPreview, "progressBar");
@@ -220,20 +260,17 @@ Item {
220 compare(root.calls[0][1], {"error": "DOWNLOAD ERROR"}, "Data of action not found.");
260 compare(root.calls[0][1], {"error": "DOWNLOAD ERROR"}, "Data of action not found.");
221 }
261 }
222
262
223− function test_automatic_scroll_on_keyboard_shown() {
263+ function test_placeholderScreenshot() {
224− waitForRendering(appPreview);
225− var appReviews = findChild(appPreview, "appReviews");
264+ var placeholderScreenshot = findChild(appPreview, "placeholderScreenshot");
226− appReviews.visible = true;
265+ compare(placeholderScreenshot.visible, false);
227
266
228− var leftFlickable = findChild(appPreview, "leftFlickable");
267+ data.infoMap["more-screenshots"] = [];
229− leftFlickable.contentY = leftFlickable.contentHeight;
268+ appPreview.previewData = data;
230− var reviewField = findChild(appReviews, "reviewField");
269+ tryCompare(placeholderScreenshot, "visible", true);
231− appPreview.keyboardSize = 400;
232− appReviews.editing(reviewField);
233− var newFlickPos = leftFlickable.contentY;
234− var keyboardY = shell.height - appPreview.keyboardSize;
235− verify(newFlickPos < keyboardY);
236− }
237
270
271+ data.infoMap["more-screenshots"] = screenshots;
272+ appPreview.previewData = data;
273+ tryCompare(placeholderScreenshot, "visible", false);
274+ }
238 }
275 }
239}
276}
tests/qmltests/Dash/Apps/tst_RunningApplicationsGrid.qml+24−4
@@ -195,9 +195,9 @@ Item {
195 !runningApplicationsGrid.terminationModeEnabled
195 !runningApplicationsGrid.terminationModeEnabled
196 }
196 }
197
197
198− // While on termination mode, clicking a running application tile causes the
198+ // While on termination mode, clicking a running application tile, outside of
199− // corresponding application to be terminated.
199+ // the close icon should do nothing
200− function test_clickTileToTerminateApp() {
200+ function test_clickTileNotClose() {
201 runningApplicationsGrid.terminationModeEnabled = true
201 runningApplicationsGrid.terminationModeEnabled = true
202
202
203 var calendarTile = findChild(runningApplicationsGrid, "runningAppTile Calendar")
203 var calendarTile = findChild(runningApplicationsGrid, "runningAppTile Calendar")
@@ -207,10 +207,30 @@ Item {
207
207
208 mouseClick(calendarTile, calendarTile.width/2, calendarTile.height/2)
208 mouseClick(calendarTile, calendarTile.width/2, calendarTile.height/2)
209
209
210+ verify(fakeRunningAppsModel.contains("calendar"))
211+
212+ // The tile for the Calendar app should stay there
213+ tryCompareFunction(checkCalendarTileExists, true)
214+ }
215+
216+ // While in termination mode, clicking on a running application tile's close icon
217+ // causes the corresponding application to be terminated
218+ function test_clickCloseIconToTerminateApp() {
219+ runningApplicationsGrid.terminationModeEnabled = true
220+
221+ var calendarTile = findChild(runningApplicationsGrid, "runningAppTile Calendar")
222+ var calendarTileCloseButton = findChild(runningApplicationsGrid, "closeIcon Calendar")
223+
224+ verify(calendarTile != undefined)
225+ verify(calendarTileCloseButton != undefined)
226+ verify(fakeRunningAppsModel.contains("calendar"))
227+
228+ mouseClick(calendarTileCloseButton, calendarTileCloseButton.width/2, calendarTileCloseButton.height/2)
229+
210 verify(!fakeRunningAppsModel.contains("calendar"))
230 verify(!fakeRunningAppsModel.contains("calendar"))
211
231
212 // The tile for the Calendar app should eventually vanish since the
232 // The tile for the Calendar app should eventually vanish since the
213− // application has been terminated
233+ // application has been terminated.
214 tryCompareFunction(checkCalendarTileExists, false)
234 tryCompareFunction(checkCalendarTileExists, false)
215 }
235 }
216
236
tests/qmltests/Dash/Movie/tst_MoviePreview.qmlnew file+86
@@ -0,0 +1,86 @@
1+/*
2+ * Copyright 2013 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+import QtTest 1.0
19+import "../../../../Dash/Movie"
20+import Unity.Test 0.1 as UT
21+
22+Item {
23+ id: root
24+ width: units.gu(60)
25+ height: units.gu(80)
26+
27+ property var calls: []
28+ property int counter: 0
29+
30+ function get_actions_data() {
31+ return [
32+ { id: 123, displayName: "Play", iconHint: "image://theme/search" },
33+ { id: 456, displayName: "Buy", iconHint: "image://theme/search" },
34+ { id: 789, displayName: "Delete", iconHint: "image//theme/search" }
35+ ]
36+ }
37+
38+ function fake_callback(id, data){
39+ root.calls[root.calls.length] = id;
40+ }
41+
42+ // The component under test
43+ MoviePreview {
44+ id: moviePreview
45+ anchors.fill: parent
46+
47+ previewData: QtObject {
48+ property string rendererName: "preview-movie"
49+ property string title: "Unity Movie"
50+ property string subtitle: "Subtitle"
51+ property string description: "This is the description"
52+ property string image: "../../tests/qmltests/Components/tst_LazyImage/square.png"
53+ property var actions: get_actions_data()
54+ property string year: "2013"
55+ property real rating: 0.3
56+ property int numRatings: 1
57+ property var execute: fake_callback
58+ }
59+ }
60+
61+ UT.UnityTestCase {
62+ name: "MoviePreviewTest"
63+ when: windowShown
64+
65+ function init() {
66+ waitForRendering(moviePreview);
67+ root.calls = new Array();
68+ }
69+
70+ function test_actions() {
71+ var buttons = findChild(moviePreview, "buttonList");
72+ compare(buttons.count, 3);
73+
74+ for(var i = 0; i < buttons.count; i++) {
75+ var button = findChild(moviePreview, "button" + i);
76+ mouseClick(button, 1, 1);
77+ moviePreview.showProcessingAction = false;
78+ }
79+
80+ var actions = get_actions_data();
81+ for(var i = 0; i < actions.length; i++) {
82+ compare(root.calls[i], actions[i].id);
83+ }
84+ }
85+ }
86+}
tests/qmltests/Dash/Video/tst_VideoPreview.qmldeleted−63
@@ -1,63 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import QtTest 1.0
19−import "../../../../Dash/Video"
20−import Unity.Test 0.1 as UT
21−
22−Item {
23− id: root
24− width: units.gu(60)
25− height: units.gu(80)
26−
27− SignalSpy {
28− id: previewClickedSpy
29− target: preview
30− signalName: "previewImageClicked"
31− }
32−
33− // The component under test
34− VideoPreview {
35− id: preview
36− anchors.fill: parent
37− }
38−
39− UT.UnityTestCase {
40− name: "VideoPreview"
41− when: windowShown
42−
43− function test_play_button_data() {
44− return [
45− {tag: "playable", playable: true},
46− {tag: "not playable", playable: false}
47− ]
48− }
49−
50− function test_play_button(data) {
51− var playButton = findChild(preview, "playButton")
52− preview.playable = data.playable
53− compare(playButton.visible, data.playable)
54− }
55−
56− function test_play_button_click() {
57− preview.playable = true
58− var playButton = findChild(preview, "playButton")
59− mouseClick(playButton, 1, 1)
60− tryCompare(previewClickedSpy, "count", 1)
61− }
62− }
63−}
tests/qmltests/Dash/qml/FakeScopeView.qml+3−9
@@ -17,16 +17,10 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import Unity 0.1
18import Unity 0.1
19
19
20−FocusScope {
20+import "../../../../Dash"
21− id: fakeScopeView
22− property Scope scope : null
23− property bool isCurrent : false
24−
25− property ListModel searchHistory
26
21
27− signal endReached
22+ScopeView {
28− signal movementStarted
23+ id: fakeScopeView
29− signal positionedAtBeginning
30
24
31 property alias backColor : back.color
25 property alias backColor : back.color
32
26
tests/qmltests/Dash/tst_DashContent.qml+29−5
@@ -101,17 +101,21 @@ Item {
101 when: windowShown
101 when: windowShown
102
102
103 function init() {
103 function init() {
104+ scopesModel.load();
105+ }
106+
107+ function cleanup() {
104 scopeLoadedSpy.clear();
108 scopeLoadedSpy.clear();
105 movementStartedSpy.clear();
109 movementStartedSpy.clear();
106− contentEndReachedSpy.clear()
110+ contentEndReachedSpy.clear();
107 clear_scope_status();
111 clear_scope_status();
112+ dashContent.visible = true;
108
113
109− // clear, wait for dash to empty and load scopes.
110− var dashContentList = findChild(dashContent, "dashContentList");
111− verify(dashContentList != undefined)
112 scopesModel.clear();
114 scopesModel.clear();
115+ // wait for dash to empty scopes.
116+ var dashContentList = findChild(dashContent, "dashContentList");
117+ verify(dashContentList != undefined);
113 tryCompare(dashContentList, "count", 0);
118 tryCompare(dashContentList, "count", 0);
114− scopesModel.load();
115 }
119 }
116
120
117 function test_movement_started_signal() {
121 function test_movement_started_signal() {
@@ -205,5 +209,25 @@ Item {
205 tryCompareFunction(get_current_item_object_name, data.objectName)
209 tryCompareFunction(get_current_item_object_name, data.objectName)
206 }
210 }
207
211
212+ function test_is_active_data() {
213+ return [
214+ {tag: "select 0", select: 0, visible: true, active0: true, active1: false, active2: false, active3: false},
215+ {tag: "select 2", select: 2, visible: true, active0: false, active1: false, active2: true, active3: false},
216+ {tag: "invisible", select: 0, visible: false, active0: false, active1: false, active2: false, active3: false},
217+ ]
218+ }
219+
220+ function test_is_active(data) {
221+ var dashContentList = findChild(dashContent, "dashContentList");
222+
223+ tryCompare(scopeLoadedSpy, "count", 5);
224+
225+ dashContent.setCurrentScopeAtIndex(data.select, true, false);
226+ dashContent.visible = data.visible;
227+
228+ tryCompare(scopesModel.get(0), "isActive", data.active0);
229+ tryCompare(scopesModel.get(1), "isActive", data.active1);
230+ tryCompare(scopesModel.get(2), "isActive", data.active2);
231+ }
208 }
232 }
209}
233}
tests/qmltests/Dash/tst_DashPreview.qml+66−19
@@ -31,15 +31,38 @@ Item {
31 DashPreview {
31 DashPreview {
32 id: preview
32 id: preview
33 anchors.fill: parent
33 anchors.fill: parent
34− title: "Testing rocks, debugging sucks!"
35
34
36− buttons: Row {
35+ previewImages: Rectangle {
36+ width: parent.width
37+ height: units.gu(20)
38+ color: "honeydew"
39+ Label {
40+ anchors.centerIn: parent
41+ text: "Preview images"
42+ }
43+ }
44+
45+ header: Rectangle {
46+ width: parent.width
47+ height: units.gu(10)
48+ color: "papayawhip"
49+ Label {
50+ anchors.centerIn: parent
51+ text: "Caption label"
52+ }
53+ }
54+
55+ actions: Row {
37 width: parent.width
56 width: parent.width
38 height: units.gu(5)
57 height: units.gu(5)
39 Rectangle {
58 Rectangle {
40 width: parent.width / 3
59 width: parent.width / 3
41 height: parent.height
60 height: parent.height
42 color: "blue"
61 color: "blue"
62+ Label {
63+ anchors.centerIn: parent
64+ text: "Button 1"
65+ }
43 MouseArea {
66 MouseArea {
44 id: buttonMouseArea
67 id: buttonMouseArea
45 objectName: "buttonMouseArea"
68 objectName: "buttonMouseArea"
@@ -51,12 +74,15 @@ Item {
51 width: parent.width / 3
74 width: parent.width / 3
52 height: parent.height
75 height: parent.height
53 color: "green"
76 color: "green"
77+ Label {
78+ anchors.centerIn: parent
79+ text: "Button 2"
80+ }
81+
54 }
82 }
55 }
83 }
56
84
57− header: Label { text: "Caption label" }
58−
59− body: Column {
85+ description: Column {
60 id: testContent
86 id: testContent
61 objectName: "testContent"
87 objectName: "testContent"
62 width: parent.width
88 width: parent.width
@@ -65,16 +91,38 @@ Item {
65 width: parent.width
91 width: parent.width
66 height: parent.height / 3
92 height: parent.height / 3
67 color: "green"
93 color: "green"
94+ Label {
95+ anchors.centerIn: parent
96+ text: "Description part 1"
97+ }
68 }
98 }
69 Rectangle {
99 Rectangle {
70 width: parent.width
100 width: parent.width
71 height: parent.height / 3
101 height: parent.height / 3
72 color: "red"
102 color: "red"
103+ Label {
104+ anchors.centerIn: parent
105+ text: "Description part 2"
106+ }
73 }
107 }
74 Rectangle {
108 Rectangle {
75 width: parent.width
109 width: parent.width
76 height: parent.height / 3
110 height: parent.height / 3
77 color: "blue"
111 color: "blue"
112+ Label {
113+ anchors.centerIn: parent
114+ text: "Description part 3"
115+ }
116+ }
117+ }
118+
119+ ratings: Rectangle {
120+ objectName: "ratings"
121+ width: parent.width
122+ height: units.gu(20)
123+ Label {
124+ anchors.centerIn: parent
125+ text: "Ratings"
78 }
126 }
79 }
127 }
80 }
128 }
@@ -95,42 +143,41 @@ Item {
95 name: "DashPreview"
143 name: "DashPreview"
96 when: windowShown
144 when: windowShown
97
145
98− function test_close() {
99− var title = findChild(preview, "titleLabel")
100− mouseClick(title, 1, 1)
101− compare(closeSpy.count, 1, "Close signal not emitted")
102− }
103−
104 function test_columns_data() {
146 function test_columns_data() {
105 return [
147 return [
106 {tag: "1 columns", width: units.gu(5), height: units.gu(10), columns: 1},
148 {tag: "1 columns", width: units.gu(5), height: units.gu(10), columns: 1},
107− {tag: "2 columns", width: units.gu(50), height: units.gu(10), columns: 2}
149+ {tag: "3 columns", width: units.gu(50), height: units.gu(10), columns: 3}
108 ]
150 ]
109 }
151 }
110
152
111 function test_columns(data) {
153 function test_columns(data) {
112 var leftCol = findChild(preview, "leftColumn")
154 var leftCol = findChild(preview, "leftColumn")
155+ var centerCol = findChild(preview, "centerColumn")
113 var rightCol = findChild(preview, "rightColumn")
156 var rightCol = findChild(preview, "rightColumn")
114
157
115 root.width = data.width
158 root.width = data.width
116 root.height = data.height
159 root.height = data.height
117
160
118− // there are 2 columns in DashPreview. On portrait form factors
161+ // there are 3 columns in DashPreview. On portrait form factors
119− // only the left one is used and the right one should be empty.
162+ // only the left one is used and the center and right ones should be empty.
120− // to find out if the content is in the correct column, we get a
163+ // To find out if the content is in the correct column, we get a
121 // reference to the column objects and search only the subtree
164 // reference to the column objects and search only the subtree
122 // to see if the content is in the correct column.
165 // to see if the content is in the correct column.
123− // 1 colum -> content should be in leftColumn
166+ // 1 colum -> all content should be in leftColumn
124− // 2 colums -> content should be in rightColumn
167+ // 3 colums -> content should be in centerColumn, rating in rightColumn
125
168
126 switch(data.columns) {
169 switch(data.columns) {
127 case 1:
170 case 1:
128 var testContent = findChild(leftCol, "testContent")
171 var testContent = findChild(leftCol, "testContent")
129 compare(testContent.objectName, "testContent")
172 compare(testContent.objectName, "testContent")
173+ testContent = findChild(leftCol, "ratings")
174+ compare(testContent.objectName, "ratings")
130 break
175 break
131− case 2:
176+ case 3:
132− var testContent = findChild(rightCol, "testContent")
177+ var testContent = findChild(centerCol, "testContent")
133 compare(testContent.objectName, "testContent")
178 compare(testContent.objectName, "testContent")
179+ testContent = findChild(rightCol, "ratings")
180+ compare(testContent.objectName, "ratings")
134 break
181 break
135 }
182 }
136
183
tests/qmltests/Dash/tst_FilterGrids.qml+1−1
@@ -107,7 +107,7 @@ Rectangle {
107
107
108 function test_clicked_signal_data() {
108 function test_clicked_signal_data() {
109 return [
109 return [
110− {tag: "VideosFilterGrid", component: "Video/VideosFilterGrid.qml"},
110+ {tag: "VideoFilterGrid", component: "Video/VideoFilterGrid.qml"},
111 {tag: "MusicFilterGrid", component: "Music/MusicFilterGrid.qml"},
111 {tag: "MusicFilterGrid", component: "Music/MusicFilterGrid.qml"},
112 {tag: "ApplicationsFilterGrid", component: "Apps/ApplicationsFilterGrid.qml"}
112 {tag: "ApplicationsFilterGrid", component: "Apps/ApplicationsFilterGrid.qml"}
113 ]
113 ]
tests/qmltests/Dash/tst_GenericPreview.qmlnew file+117
@@ -0,0 +1,117 @@
1+/*
2+ * Copyright 2013 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+import QtTest 1.0
19+import "../../../Dash/Generic"
20+import Unity.Test 0.1 as UT
21+
22+Item {
23+ id: root
24+ width: units.gu(60)
25+ height: units.gu(80)
26+
27+ property var calls: []
28+ property int counter: 0
29+
30+ function get_actions_data() {
31+ return [
32+ { id: 123, displayName: "Button 1", iconHint: "image://theme/search" },
33+ { id: 456, displayName: "Button 2", iconHint: "image://theme/search" },
34+ { id: 789, displayName: "Button 3", iconHint: "image://theme/search" }
35+ ]
36+ }
37+
38+ function fake_callback(id, data){
39+ root.calls[root.calls.length] = id;
40+ }
41+
42+ // The component under test
43+ GenericPreview {
44+ id: genericPreview
45+ anchors.fill: parent
46+
47+ previewData: QtObject {
48+ id: dataObject
49+ property string rendererName: "preview-generic"
50+ property string title: "Unity Generic Preview"
51+ property string subtitle: "Subtitle"
52+ property string description: "This is the description"
53+ property string image: "../../tests/qmltests/Components/tst_LazyImage/square.png"
54+ property var actions: get_actions_data()
55+ property string year: "2013"
56+ property var execute: fake_callback
57+ property var infoHints: [{displayName: "info 1", value: "value 1"},
58+ {displayName: "info 2", value: "value 2"}
59+ ]
60+ }
61+ }
62+
63+ UT.UnityTestCase {
64+ name: "GenericPreviewTest"
65+ when: windowShown
66+
67+ function init() {
68+ waitForRendering(genericPreview)
69+ root.calls = new Array();
70+ }
71+
72+ function test_actions() {
73+ var buttons = findChild(genericPreview, "buttonList");
74+ compare(buttons.count, 3);
75+
76+ for(var i = 0; i < buttons.count; i++) {
77+ var button = findChild(genericPreview, "button" + i);
78+ mouseClick(button, 1, 1);
79+ genericPreview.showProcessingAction = false;
80+ }
81+
82+ var actions = get_actions_data();
83+ for(var i = 0; i < actions.length; i++) {
84+ compare(root.calls[i], actions[i].id);
85+ }
86+ }
87+
88+ function test_title() {
89+ var titleLabel = findChild(genericPreview, "titleLabel");
90+ compare(titleLabel.text, dataObject.title)
91+ }
92+
93+ function test_subtitle() {
94+ var subtitleLabel = findChild(genericPreview, "subtitleLabel");
95+ compare(subtitleLabel.text, dataObject.subtitle)
96+ }
97+
98+ function test_image() {
99+ var image = findChild(genericPreview, "genericPreviewImage");
100+ tryCompare(image, "height", genericPreview.width - units.gu(6))
101+ }
102+
103+ function test_infoHints() {
104+ var infoHintColumn = findChild(genericPreview, "infoHintColumn")
105+ var infoHintRepeater = findChild(genericPreview, "infoHintRepeater")
106+ compare(infoHintRepeater.count, dataObject.infoHints.length)
107+
108+ for (var i = 0; i < dataObject.infoHints.length; ++i) {
109+ var infoItem = findChild(infoHintColumn, "infoHintItem" + i)
110+ var displayName = findChild(infoItem, "displayNameLabel")
111+ compare(displayName.text, dataObject.infoHints[i].displayName)
112+ var value = findChild(infoItem, "valueLabel")
113+ compare(value.text, dataObject.infoHints[i].value)
114+ }
115+ }
116+ }
117+}
tests/qmltests/Dash/tst_GenericScopeView.qml+11
@@ -66,6 +66,17 @@ Item {
66 scopes.get(0).hideDash();
66 scopes.get(0).hideDash();
67 tryCompare(genericScopeView, "previewShown", false);
67 tryCompare(genericScopeView, "previewShown", false);
68 }
68 }
69+
70+ function test_show_spinner() {
71+ var previewLoader = findChild(genericScopeView, "previewLoader");
72+ previewLoader.open = true;
73+ previewLoader.source = "../../../Dash/Generic/GenericPreview.qml";
74+ previewLoader.item.showProcessingAction = true;
75+ var waitingForAction = findChild(genericScopeView, "waitingForActionMouseArea");
76+ tryCompare(waitingForAction, "enabled", true);
77+ previewLoader.closePreviewSpinner();
78+ tryCompare(waitingForAction, "enabled", false);
79+ }
69 }
80 }
70 }
81 }
71}
82}
tests/qmltests/Greeter/tst_Clock.qml+8−22
@@ -43,8 +43,7 @@ Rectangle {
43 var dateString = Qt.formatDate(dateObj, Qt.DefaultLocaleLongDate)
43 var dateString = Qt.formatDate(dateObj, Qt.DefaultLocaleLongDate)
44 var timeString = Qt.formatTime(dateObj)
44 var timeString = Qt.formatTime(dateObj)
45
45
46− clock.__timerInterval = 60000
46+ clock.currentDate = dateObj
47− clock.__date = dateObj
48 var dateLabel = findChild(clock, "dateLabel")
47 var dateLabel = findChild(clock, "dateLabel")
49 compare(dateLabel.text, dateString, "Not the expected date")
48 compare(dateLabel.text, dateString, "Not the expected date")
50 var timeLabel = findChild(clock, "timeLabel")
49 var timeLabel = findChild(clock, "timeLabel")
@@ -57,33 +56,20 @@ Rectangle {
57 var timeString = Qt.formatTime(dateObj)
56 var timeString = Qt.formatTime(dateObj)
58
57
59 clock.enabled = false
58 clock.enabled = false
60− compare(clock.__timerRunning, false, "Timer should not be running")
59+ var timeModel = findInvisibleChild(clock, "timeModel")
60+
61+ compare(timeModel.menuObjectPath, "", "Clock shouldn't be connected to Indicators when not active.")
62+
61− clock.__date = dateObj
63+ clock.currentDate = dateObj
62− clock.__timerInterval = 5
64+
63− wait(5) // spin event loop (only that would trigger the timer and reveal eventual bugs)
64 var dateLabel = findChild(clock, "dateLabel")
65 var dateLabel = findChild(clock, "dateLabel")
65 compare(dateLabel.text, dateString, "Not the expected date")
66 compare(dateLabel.text, dateString, "Not the expected date")
66 var timeLabel = findChild(clock, "timeLabel")
67 var timeLabel = findChild(clock, "timeLabel")
67 compare(timeLabel.text, timeString, "Not the expected time")
68 compare(timeLabel.text, timeString, "Not the expected time")
68
69
69 clock.enabled = true
70 clock.enabled = true
70− compare(clock.__timerRunning, true, "Timer should be running")
71− wait(0) // spin event loop to trigger the timer
72− verify(dateLabel.text !== dateString)
73− if (timeLabel.text.indexOf("11:13") != -1) wait(60000) // next test will fail at 11:13, wait 1 minute
74− verify(timeLabel.text !== timeString)
75− }
76
71
77− function test_timerRunning() {
72+ verify(timeModel.menuObjectPath != "", "Should be connected to Indicators.")
78− // tests for clock.enabled property are already in test_dateUpdate()
79− clock.opacity = 0.0
80− compare(clock.__timerRunning, false, "Timer should not be running")
81− clock.opacity = 1.0
82− compare(clock.__timerRunning, true, "Timer should be running")
83− clock.visible = false
84− compare(clock.__timerRunning, false, "Timer should not be running")
85− clock.visible = true
86− compare(clock.__timerRunning, true, "Timer should be running")
87 }
73 }
88 }
74 }
89}
75}
tests/qmltests/Notifications/tst_Notifications.qml+7−2
@@ -48,7 +48,7 @@ Row {
48 function addSnapDecisionNotification() {
48 function addSnapDecisionNotification() {
49 var n = {
49 var n = {
50 type: Notification.SnapDecision,
50 type: Notification.SnapDecision,
51− hints: Notification.ButtonTint,
51+ hints: {"x-canonical-private-button-tint": "true"},
52 summary: "Tom Ato",
52 summary: "Tom Ato",
53 body: "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.",
53 body: "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.",
54 icon: "../graphics/avatars/funky.png",
54 icon: "../graphics/avatars/funky.png",
@@ -192,7 +192,7 @@ Row {
192 {
192 {
193 tag: "Snap Decision with secondary icon and button-tint",
193 tag: "Snap Decision with secondary icon and button-tint",
194 type: Notification.SnapDecision,
194 type: Notification.SnapDecision,
195− hints: Notification.ButtonTint,
195+ hints: {"x-canonical-private-button-tint": "true"},
196 summary: "Tom Ato",
196 summary: "Tom Ato",
197 body: "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.",
197 body: "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.",
198 icon: "../graphics/avatars/funky.png",
198 icon: "../graphics/avatars/funky.png",
@@ -213,6 +213,7 @@ Row {
213 {
213 {
214 tag: "Ephemeral notification - icon-summary layout",
214 tag: "Ephemeral notification - icon-summary layout",
215 type: Notification.Ephemeral,
215 type: Notification.Ephemeral,
216+ hints: {"x-canonical-private-button-tint": "false"},
216 summary: "Photo upload completed",
217 summary: "Photo upload completed",
217 body: "",
218 body: "",
218 icon: "",
219 icon: "",
@@ -229,6 +230,7 @@ Row {
229 {
230 {
230 tag: "Ephemeral notification - check suppression of secondary icon for icon-summary layout",
231 tag: "Ephemeral notification - check suppression of secondary icon for icon-summary layout",
231 type: Notification.Ephemeral,
232 type: Notification.Ephemeral,
233+ hints: {"x-canonical-private-button-tint": "false"},
232 summary: "New comment successfully published",
234 summary: "New comment successfully published",
233 body: "",
235 body: "",
234 icon: "",
236 icon: "",
@@ -245,6 +247,7 @@ Row {
245 {
247 {
246 tag: "Interactive notification",
248 tag: "Interactive notification",
247 type: Notification.Interactive,
249 type: Notification.Interactive,
250+ hints: {"x-canonical-private-button-tint": "false"},
248 summary: "Interactive notification",
251 summary: "Interactive notification",
249 body: "This is a notification that can be clicked",
252 body: "This is a notification that can be clicked",
250 icon: "../graphics/avatars/amanda.png",
253 icon: "../graphics/avatars/amanda.png",
@@ -261,6 +264,7 @@ Row {
261 {
264 {
262 tag: "Snap Decision without secondary icon and no button-tint",
265 tag: "Snap Decision without secondary icon and no button-tint",
263 type: Notification.SnapDecision,
266 type: Notification.SnapDecision,
267+ hints: {"x-canonical-private-button-tint": "false"},
264 summary: "Bro Coly",
268 summary: "Bro Coly",
265 body: "At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
269 body: "At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.",
266 icon: "../graphics/avatars/anna_olsson.png",
270 icon: "../graphics/avatars/anna_olsson.png",
@@ -278,6 +282,7 @@ Row {
278 {
282 {
279 tag: "Ephemeral notification",
283 tag: "Ephemeral notification",
280 type: Notification.Ephemeral,
284 type: Notification.Ephemeral,
285+ hints: {"x-canonical-private-button-tint": "false"},
281 summary: "Cole Raby",
286 summary: "Cole Raby",
282 body: "I did not expect it to be that late.",
287 body: "I did not expect it to be that late.",
283 icon: "../graphics/avatars/funky.png",
288 icon: "../graphics/avatars/funky.png",
tests/qmltests/tst_Shell.qml+57−2
@@ -82,6 +82,8 @@ Item {
82
82
83 var dashHome = findChild(shell, "DashHome");
83 var dashHome = findChild(shell, "DashHome");
84 swipeUntilScopeViewIsReached(dashHome);
84 swipeUntilScopeViewIsReached(dashHome);
85+
86+ hideIndicators();
85 }
87 }
86
88
87 function killApps(apps) {
89 function killApps(apps) {
@@ -155,7 +157,7 @@ Item {
155 waitUntilApplicationWindowIsFullyVisible();
157 waitUntilApplicationWindowIsFullyVisible();
156
158
157 var mainApp = ApplicationManager.focusedApplicationId;
159 var mainApp = ApplicationManager.focusedApplicationId;
158− tryCompareFunction(function() { return mainApp != ""; }, true);
160+ verify(mainApp != "");
159
161
160 // Try to suspend while proximity is engaged...
162 // Try to suspend while proximity is engaged...
161 Powerd.displayPowerStateChange(Powerd.Off, Powerd.UseProximity);
163 Powerd.displayPowerStateChange(Powerd.Off, Powerd.UseProximity);
@@ -168,8 +170,12 @@ Item {
168
170
169 // And wake up
171 // And wake up
170 Powerd.displayPowerStateChange(Powerd.On, 0);
172 Powerd.displayPowerStateChange(Powerd.On, 0);
171− tryCompare(ApplicationManager, "focusedApplicationId", mainApp);
173+ tryCompare(ApplicationManager, "focusedApplicationId", "");
172 tryCompare(greeter, "showProgress", 1);
174 tryCompare(greeter, "showProgress", 1);
175+
176+ // Swipe away greeter to focus app
177+ swipeAwayGreeter();
178+ tryCompare(ApplicationManager, "focusedApplicationId", mainApp);
173 }
179 }
174
180
175 function swipeAwayGreeter() {
181 function swipeAwayGreeter() {
@@ -336,6 +342,19 @@ Item {
336 mouseClick(appIcon, appIcon.width / 2, appIcon.height / 2);
342 mouseClick(appIcon, appIcon.width / 2, appIcon.height / 2);
337 }
343 }
338
344
345+ function showIndicators() {
346+ var indicators = findChild(shell, "indicators");
347+ indicators.show();
348+ tryCompare(indicators, "fullyOpened", true);
349+ }
350+
351+ function hideIndicators() {
352+ var indicators = findChild(shell, "indicators");
353+ if (indicators.fullyOpened) {
354+ indicators.hide();
355+ }
356+ }
357+
339 function waitUntilApplicationWindowIsFullyVisible() {
358 function waitUntilApplicationWindowIsFullyVisible() {
340 var underlay = findChild(shell, "underlay");
359 var underlay = findChild(shell, "underlay");
341 tryCompare(underlay, "visible", false);
360 tryCompare(underlay, "visible", false);
@@ -428,5 +447,41 @@ Item {
428 tryCompareFunction(function() { return backgroundImage.source.toString().indexOf(data.expectedUrl) !== -1; }, true)
447 tryCompareFunction(function() { return backgroundImage.source.toString().indexOf(data.expectedUrl) !== -1; }, true)
429 tryCompare(backgroundImage, "status", Image.Ready)
448 tryCompare(backgroundImage, "status", Image.Ready)
430 }
449 }
450+
451+ function test_DashShown_data() {
452+ return [
453+ {tag: "in focus", greeter: false, app: false, launcher: false, indicators: false, expectedShown: true},
454+ {tag: "under greeter", greeter: true, app: false, launcher: false, indicators: false, expectedShown: false},
455+ {tag: "under app", greeter: false, app: true, launcher: false, indicators: false, expectedShown: false},
456+ {tag: "under launcher", greeter: false, app: false, launcher: true, indicators: false, expectedShown: true},
457+ {tag: "under indicators", greeter: false, app: false, launcher: false, indicators: true, expectedShown: true},
458+ ]
459+ }
460+
461+ function test_DashShown(data) {
462+
463+ if (data.greeter) {
464+ // Swipe the greeter in
465+ var greeter = findChild(shell, "greeter");
466+ Powerd.displayPowerStateChange(Powerd.Off, 0);
467+ tryCompare(greeter, "showProgress", 1);
468+ }
469+
470+ if (data.app) {
471+ dragLauncherIntoView();
472+ tapOnAppIconInLauncher();
473+ }
474+
475+ if (data.launcher) {
476+ dragLauncherIntoView();
477+ }
478+
479+ if (data.indicators) {
480+ showIndicators();
481+ }
482+
483+ var dash = findChild(shell, "dash");
484+ tryCompare(dash, "shown", data.expectedShown);
485+ }
431 }
486 }
432}
487}