on xenial help sign in
merged with trunk
commitc87a39edc8d2db32e06998b42318434df5bc3839 authorNick Dedekind <nicholas.dedekind@gmail.com> dateTue 15 Oct 2013, 13:53 (13 years ago) parent106133cb476889
160 files changed+5267−4138
Bottombar/Bottombar.qml+1−1 Components/ApplicationManagerWrapper.qml+13−30 Components/DragHandle.qml−1 Components/FilterGrid.qml+2−1 Components/LazyImage.qml+24−11 Components/ListItems/Header.qml+1−1 Components/ResponsiveGridView.qml+2 Components/Stage.qml+5 Components/Tile.qml+6−63 Components/TileStyle.qml+81 Components/VolumeControl.qml+1−1 Dash/Apps/AppPreview.qml+70−123 Dash/Apps/AppsAvailableForDownloadModel.qml−81 Dash/Apps/DashPluginFilterGrid.qml+49 Dash/Apps/FrequentlyUsedAppsModel.qml+4−4 Dash/Apps/RunningApplicationTile.qml+9−5 Dash/Dash.qml+3 Dash/DashContent.qml+6−6 Dash/DashMusic.qml−96 Dash/DashPreview.qml+91−93 Dash/DashVideos.qml−201 Dash/Generic/FlatTileStyle.qml+79 Dash/Generic/GenericFilterGrid.qml−3 Dash/Generic/GenericPreview.qml+158−70 Dash/Generic/WeatherFilterGrid.qml+49 Dash/GenericScopeView.qml+40−1 Dash/Movie/MoviePreview.qml+71 Dash/Music/MusicFilterGrid.qml+21−22 Dash/Music/MusicTileStyle.qml+102 Dash/PreviewDelegateMapper.qml+1 Dash/Previews/Header.qml+109 Dash/Apps/AppReviews.qml → Dash/Previews/Reviews.qml Dash/ScopeDelegateMapper.qml+2−4 Dash/ScopeListView.qml+5 Dash/ScopeView.qml+12−3 Dash/Video/VideosFilterGrid.qml → Dash/Video/VideoFilterGrid.qml+17−13 Dash/Video/VideoPreview.qml−210 Dash/Video/VideoTileStyle.qml+87 Dash/Video/graphics/movie_icon_holder@27.png Greeter/Clock.qml+31−12 Greeter/Infographics.qml+1−3 Greeter/PinLockscreen.qml+5 Notifications/Notification.qml+7−4 Notifications/NotificationMenuItemFactory.qml+8−9 Panel/IndicatorRow.qml+51−12 Panel/Indicators.qml+2 Panel/Indicators/client/IndicatorsList.qml+1−1 Panel/Panel.qml+3−2 Panel/SearchIndicator.qml+9−8 Shell.qml+62−46 data/unity8.conf+9 debian/changelog+215 debian/control+3 debian/unity8.install+1 main.cpp+1 plugins/AccountsService/AccountsService.cpp+3−1 plugins/Unity/CMakeLists.txt+1−1 plugins/Unity/Indicators/indicatorsmanager.cpp+20−24 plugins/Unity/Indicators/indicatorsmanager.h−1 plugins/Unity/Indicators/qml/MenuItemFactory.qml+1 plugins/Unity/Indicators/rootactionstate.cpp+15−1 plugins/Unity/Indicators/rootactionstate.h+1 plugins/Unity/Launcher/backend/launcherbackend.cpp−33 plugins/Unity/Launcher/backend/launcherbackend.h−15 plugins/Unity/Launcher/launchermodel.cpp+3−7 plugins/Unity/categories.cpp+72−17 plugins/Unity/categories.h+10−1 plugins/Unity/categoryresults.cpp+2−1 plugins/Unity/iconutils.cpp+24−3 plugins/Unity/iconutils.h+2−1 plugins/Unity/preview.cpp+1−1 plugins/Unity/scope.cpp+44−6 plugins/Unity/scope.h+7 plugins/Utils/CMakeLists.txt+12−1 plugins/Utils/albumartprovider.cpp+231 plugins/Utils/albumartprovider.h+56 plugins/Utils/mediaartcache.cpp+178 plugins/Utils/mediaartcache.h+54 plugins/Utils/plugin.cpp+20−1 plugins/Utils/plugin.h+1 po/ar.po+34−54 po/ast.po+37−54 po/az.po+22−54 po/bg.po+28−54 po/ca.po+37−54 po/cs.po+239 po/de.po+37−54 po/el.po+22−54 po/en_AU.po+37−54 po/en_GB.po+37−54 po/eo.po+16−54 po/es.po+37−54 po/fi.po+37−54 po/fo.po+22−54 po/fr.po+22−54 po/gd.po+37−54 po/gl.po+34−54 po/he.po+37−54 po/hr.po+22−54 po/hu.po+22−54 po/hy.po+22−54 po/id.po+16−54 po/is.po+37−54 po/it.po+41−56 po/ja.po+16−54 po/km.po+248 po/kn.po+22−54 po/ko.po+42−77 po/ky.po+22−54 po/lo.po+22−54 po/lv.po+22−54 po/my.po+60−83 po/nb.po+22−54 po/nl.po+22−54 po/pl.po+42−75 po/pt_BR.po+37−54 po/ro.po+22−54 po/ru.po+37−54 po/shn.po+223 po/si.po+16−54 po/sl.po+37−54 po/sr.po+22−54 po/sv.po+16−54 po/te.po+19−54 po/tr.po+37−54 po/ug.po+44−68 po/uk.po+37−54 po/unity8.pot+14−52 po/xh.po+16−54 po/zh_CN.po+39−56 po/zh_TW.po+22−54 tests/autopilot/unity8/shell/tests/__init__.py+125−8 tests/mocks/Unity/Application/ApplicationInfo.h+1 tests/mocks/Unity/Application/ApplicationManager.h+1 tests/mocks/Unity/Indicators/CMakeLists.txt+1−1 tests/mocks/Unity/Indicators/CachedUnityMenuModel.qml+30 tests/mocks/Unity/Indicators/RootActionState.qml+33 tests/mocks/Unity/Indicators/qmldir+2 tests/mocks/Unity/fake_scope.cpp+13 tests/mocks/Unity/fake_scope.h+5 tests/plugins/Unity/CMakeLists.txt+1−1 tests/plugins/Unity/Indicators/CMakeLists.txt+5 tests/plugins/Unity/Indicators/rootactionstatetest.cpp+58 tests/plugins/Unity/Launcher/launcherbackendtest.cpp−21 tests/plugins/Unity/resultstest.cpp+87 tests/plugins/Unity/resultstest.h+2 tests/qmltests/CMakeLists.txt+4−3 tests/qmltests/Components/tst_LazyImage.qml+45−16 tests/qmltests/Dash/Apps/tst_AppPreview.qml+60−24 tests/qmltests/Dash/Apps/tst_RunningApplicationsGrid.qml+24−4 tests/qmltests/Dash/Movie/tst_MoviePreview.qml+85 tests/qmltests/Dash/Video/tst_VideoPreview.qml−63 tests/qmltests/Dash/qml/FakeScopeView.qml+3−9 tests/qmltests/Dash/tst_DashContent.qml+29−5 tests/qmltests/Dash/tst_DashPreview.qml+66−19 tests/qmltests/Dash/tst_FilterGrids.qml+1−1 tests/qmltests/Dash/tst_GenericPreview.qml+116 tests/qmltests/Greeter/tst_Clock.qml+8−22 tests/qmltests/Notifications/tst_Notifications.qml+7−2 tests/qmltests/tst_Shell.qml+57−2
Bottombar/Bottombar.qml+1−1
@@ -122,7 +122,7 @@ Item {
122122 id: dragArea
123123 objectName: "hudDragArea"
124124 width: parent.width
125− height: distanceThreshold
125+ height: shell.edgeSize
126126 anchors.bottom: parent.bottom
127127
128128 distanceThreshold: units.gu(8)
Components/ApplicationManagerWrapper.qml+13−30
@@ -18,19 +18,20 @@ import QtQuick 2.0
1818import Unity.Application 0.1
1919
2020Item {
21− id: applicationManager
21+ id: root
2222
2323 property alias mainStageApplications: mainStageModel
2424 property alias sideStageApplications: sideStageModel
2525 property variant mainStageFocusedApplication: null
2626 property variant sideStageFocusedApplication: null
2727 property bool sideStageEnabled: true
28− signal focusRequested(string desktopFile)
2928 property bool keyboardVisible: ApplicationManager.keyboardVisible
3029 property int keyboardHeight: ApplicationManager.keyboardHeight
3130
3231 property bool fake: ApplicationManager.fake ? ApplicationManager.fake : false
3332
33+ signal focusRequested(string appId)
34+
3435 ApplicationsModelStageFiltered {
3536 id: mainStageModel
3637 stage: ApplicationInfo.MainStage
@@ -62,6 +63,16 @@ Item {
6263 }
6364 }
6465 }
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+ }
6576 }
6677
6778 function activateApplication(desktopFile, argument) {
@@ -155,32 +166,4 @@ Item {
155166 }
156167 return desktopFile.substring(left+1, right);
157168 }
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− }
186169}
Components/DragHandle.qml−1
@@ -208,5 +208,4 @@ EdgeDragArea {
208208
209209 d.previousStatus = status;
210210 }
211−
212211}
Components/FilterGrid.qml+2−1
@@ -57,6 +57,8 @@ Item {
5757 property alias delegate: iconTileGrid.delegate
5858 property alias cellWidth: iconTileGrid.cellWidth
5959 property alias cellHeight: iconTileGrid.cellHeight
60+ property alias delegateCreationBegin: iconTileGrid.delegateCreationBegin
61+ property alias delegateCreationEnd: iconTileGrid.delegateCreationEnd
6062 readonly property alias flicking: iconTileGrid.flicking
6163 readonly property alias moving: iconTileGrid.moving
6264 readonly property alias pressDelay: iconTileGrid.pressDelay
@@ -102,6 +104,5 @@ Item {
102104 model: root.model
103105 limit: (filter && !filterAnimation.running) ? collapsedRowCount * iconTileGrid.columns : -1
104106 }
105−
106107 }
107108}
Components/LazyImage.qml+24−11
@@ -27,8 +27,8 @@ Item {
2727 // TODO convert into enums when available in QML
2828 property string scaleTo
2929
30− property real initialWidth: units.gu(10)
31− property real initialHeight: units.gu(10)
30+ property real initialWidth: scaleTo == "width" || scaleTo == "fit" ? width : units.gu(10)
31+ property real initialHeight: scaleTo == "height" || scaleTo == "fit" ? height : units.gu(10)
3232
3333 property alias sourceSize: image.sourceSize
3434 property alias fillMode: image.fillMode
@@ -52,7 +52,7 @@ Item {
5252 id: placeholder
5353 objectName: "placeholder"
5454 color: "#22FFFFFF"
55− anchors.fill: parent
55+ anchors.fill: shape
5656 visible: opacity != 0
5757
5858 ActivityIndicator {
@@ -79,7 +79,10 @@ Item {
7979 UbuntuShape {
8080 id: shape
8181 objectName: "shape"
82− anchors.fill: parent
82+ height: root.initialHeight
83+ width: root.initialWidth
84+ anchors.centerIn: root.scaleTo == "fit" ? parent : undefined
85+
8386 opacity: 0
8487 visible: opacity != 0
8588
@@ -88,16 +91,19 @@ Item {
8891 objectName: "image"
8992
9093 property url nextSource
94+ property string format: image.implicitWidth > image.implicitHeight ? "landscape" : "portrait"
9195
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
9597 asynchronous: true
9698 cache: false
9799 horizontalAlignment: Image.AlignHCenter
98100 verticalAlignment: Image.AlignVCenter
99− sourceSize.width: root.scaleTo == "width" ? root.width : 0
100− sourceSize.height: root.scaleTo == "height" ? root.height : 0
101+ sourceSize.width: root.scaleTo == "width" ? root.width
102+ : root.scaleTo == "fit" && root.width < root.height ? root.width
103+ : undefined
104+ sourceSize.height: root.scaleTo == "height" ? root.height
105+ : root.scale == "fit" && root.height < root.width ? root.height
106+ : undefined
101107 }
102108 }
103109
@@ -117,9 +123,14 @@ Item {
117123 State {
118124 name: "ready"
119125 when: image.status === Image.Ready && image.source != ""
120− PropertyChanges { target: root; implicitWidth: image.width; implicitHeight: image.height }
121− PropertyChanges { target: shape; opacity: 1 }
126+ PropertyChanges { target: root; implicitWidth: shape.width; implicitHeight: shape.height }
122127 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+ }
123134 },
124135 State {
125136 name: "error"
@@ -138,6 +149,7 @@ Item {
138149 ParallelAnimation {
139150 NumberAnimation { target: shape; property: "opacity"; easing.type: Easing.Linear }
140151 UbuntuNumberAnimation { target: root; properties: "implicitWidth,implicitHeight" }
152+ UbuntuNumberAnimation { target: shape; properties: "width,height" }
141153 NumberAnimation {
142154 targets: [placeholder, activity, errorImage]; property: "opacity";
143155 easing.type: Easing.Linear; duration: UbuntuAnimation.SnapDuration
@@ -157,6 +169,7 @@ Item {
157169 easing.type: Easing.Linear; duration: UbuntuAnimation.SnapDuration
158170 }
159171 UbuntuNumberAnimation { target: root; properties: "implicitWidth,implicitHeight" }
172+ UbuntuNumberAnimation { target: shape; properties: "width,height" }
160173 }
161174 PropertyAction { target: shape; property: "visible" }
162175 }
Components/ListItems/Header.qml+1−1
@@ -28,7 +28,7 @@ Item {
2828
2929 signal clicked(variant mouse)
3030
31− height: units.gu(4.5)
31+ height: units.gu(5)
3232
3333 Item {
3434 anchors {
Components/ResponsiveGridView.qml+2
@@ -39,6 +39,8 @@ Item {
3939 readonly property alias flicking: gridView.flicking
4040 readonly property alias moving: gridView.moving
4141 readonly property alias pressDelay: gridView.pressDelay
42+ property alias delegateCreationBegin: gridView.delegateCreationBegin
43+ property alias delegateCreationEnd: gridView.delegateCreationEnd
4244
4345 function contentHeightForRows(rows) {
4446 return rows * cellHeight + verticalSpacing
Components/Stage.qml+5
@@ -84,6 +84,11 @@ Showable {
8484 }
8585 }
8686
87+ Connections {
88+ target: applicationManager
89+ onFocusRequested: activateApplication(appId)
90+ }
91+
8792 /* Keep a reference to the focused application so that we can safely
8893 unfocus it when the stage is not fully shown and refocus it when the stage
8994 is fully shown again.
Components/Tile.qml+6−63
@@ -18,70 +18,13 @@ import QtQuick 2.0
1818import Ubuntu.Components 0.1
1919
2020AbstractButton {
21− id: root
22− property alias source: image.source
23− property alias fillMode: image.fillMode
24− property alias horizontalAlignment: image.horizontalAlignment
25− property alias verticalAlignment: image.verticalAlignment
26− property alias text: label.text
21+ property url source
22+ property int fillMode: Image.PreserveAspectCrop
23+ property int horizontalAlignment: Text.AlignHCenter
24+ property string text
2725 property int imageWidth
2826 property int imageHeight
27+ property int maximumLineCount: 1
2928
30− UbuntuShape {
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− }
29+ style: TileStyle {}
8730}
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 {
2828 busName: "com.canonical.indicator.sound"
2929 objectPath: "/com/canonical/indicator/sound"
3030
31− property variant actionObject: action("scroll")
31+ property variant actionObject: action("volume")
3232 }
3333
3434 function volumeUp() {
Dash/Apps/AppPreview.qml+70−123
@@ -16,153 +16,101 @@
1616
1717import QtQuick 2.0
1818import Ubuntu.Components 0.1
19−import Ubuntu.Components.ListItems 0.1 as ListItem
20−import Ubuntu.DownloadDaemonListener 0.1
19+import Ubuntu.Components.ListItems 0.1 as ListItems
2120import ".."
21+import "../Generic"
22+import "../Previews"
2223import "../../Components"
2324
24−DashPreview {
25+GenericPreview {
2526 id: root
2627
2728 signal sendUserReview(string review)
2829
29− title: root.previewData.title
30+ previewImages: previewImagesComponent
31+ description: descriptionComponent
32+ header: headerComponent
3033
31− header: ListView {
32− spacing: units.gu(1)
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]
34+ // TODO: Ratings are not yet complete... enable this once they work
35+ //ratings: ratingsComponent
4136
42− delegate: UbuntuShape {
43− id: shape
44− anchors {
45− top: parent.top
46− bottom: parent.bottom
37+ Component {
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"
49+ anchors {
50+ top: parent.top
51+ bottom: parent.bottom
52+ }
53+ scaleTo: "height"
54+ source: "broken_image"
55+ initialWidth: units.gu(13)
56+ visible: previewImageListView.count == 0
4757 }
48− width: units.gu(12)
49− radius: "medium"
50− borderSource: ""
51− image: Image {
52− asynchronous: true
53− sourceSize { width: shape.width; height: shape.height }
58+
59+ delegate: LazyImage {
60+ id: shape
61+ anchors {
62+ top: parent.top
63+ bottom: parent.bottom
64+ }
5465 source: modelData ? modelData : ""
55− fillMode: Image.PreserveAspectCrop
66+ scaleTo: "height"
67+ initialWidth: units.gu(13)
5668 }
5769 }
5870 }
5971
6072 Component {
61− id: buttonsComponent
62−
63− GridView {
64− id: buttonsGrid
65− objectName: "gridButtons"
66−
67− property int numOfRows: (count + 1) / 2
68− property int spacing: units.gu(1)
69− height: Math.max(units.gu(5), units.gu(5)*numOfRows + spacing*(numOfRows - 1))
70−
71− interactive: false
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− }
73+ id: headerComponent
74+ Header {
75+ objectName: "previewHeader"
76+ title: previewData.title
77+ icon: previewData.appIcon
78+ subtitle: root.previewData.infoMap["publisher"] ? root.previewData.infoMap["publisher"].value : ""
79+ rating: Math.round(root.previewData.rating * 10)
80+ reviews: root.previewData.numRatings
81+ rated: root.previewData.infoMap["rated"] ? root.previewData.infoMap["rated"].value : 0
8682 }
8783 }
8884
8985 Component {
90− id: progressComponent
91−
92− ProgressBar {
93− id: progressBar
94− objectName: "progressBar"
95− value: 0
96− maximumValue: 100
97− height: units.gu(5)
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− }
86+ id: descriptionComponent
87+ Column {
88+ spacing: units.gu(1)
11389
114− onError: {
115− root.previewData.execute(progressBar.model[1].id, { "error": error });
116− }
90+ Label {
91+ anchors { left: parent.left; right: parent.right }
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"
11799 }
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;
132100 }
133101 }
134102
135− body: Column {
136− spacing: units.gu(1)
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−
103+ Component {
104+ id: ratingsComponent
160105 Column {
106+ id: columnReviewRating
107+ objectName: "columnReviewRating"
161108 visible: root.previewData.rating >= 0
162− anchors { left: parent.left; right: parent.right }
163− spacing: parent.spacing
164109
165− ListItem.ThinDivider { }
110+ spacing: units.gu(1)
111+ height: childrenRect.height
112+
113+ ListItems.ThinDivider { }
166114
167115 Item {
168116 anchors { left: parent.left; right: parent.right }
@@ -188,13 +136,12 @@ DashPreview {
188136 }
189137 }
190138
191− ListItem.ThinDivider { }
139+ ListItems.ThinDivider { }
192140
193− AppReviews {
141+ Reviews {
194142 id: appReviews
195143 objectName: "appReviews"
196− // TODO: This should make this visible when the feature for reviews/comments is complete.
197− visible: false
144+
198145 anchors { left: parent.left; right: parent.right }
199146
200147 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+4−4
@@ -68,13 +68,13 @@ ListModel {
6868 metadata: ""
6969 }
7070 ListElement {
71− uri: "application:///usr/share/applications/facebook-webapp.desktop"
71+ uri: "appid://com.ubuntu.developer.webapps.webapp-facebook/webapp-facebook/current-user-version"
7272 icon: "../../graphics/applicationIcons/facebook.png"
7373 category: 0
7474 mimetype: "application/x-desktop"
7575 title: "Facebook"
7676 comment: ""
77− dndUri: "file:///usr/share/applications/facebook-webapp.desktop"
77+ dndUri: "appid://com.ubuntu.developer.webapps.webapp-facebook/webapp-facebook/current-user-version"
7878 metadata: ""
7979 }
8080 ListElement {
@@ -88,13 +88,13 @@ ListModel {
8888 metadata: ""
8989 }
9090 ListElement {
91− uri: "application:///usr/share/applications/gmail-webapp.desktop"
91+ uri: "appid://com.ubuntu.developer.webapps.webapp-gmail/webapp-gmail/current-user-version"
9292 icon: "../../graphics/applicationIcons/gmail.png"
9393 category: 0
9494 mimetype: "application/x-desktop"
9595 title: "GMail"
9696 comment: ""
97− dndUri: "file:///usr/share/applications/gmail-webapp.desktop"
97+ dndUri: "appid://com.ubuntu.developer.webapps.webapp-gmail/webapp-gmail/current-user-version"
9898 metadata: ""
9999 }
100100 ListElement {
Dash/Apps/RunningApplicationTile.qml+9−5
@@ -39,9 +39,7 @@ AbstractButton {
3939 property bool terminationModeEnabled: false
4040
4141 onClicked: {
42− if (terminationModeEnabled)
43− requestedApplicationTermination(application)
44− else
42+ if (!terminationModeEnabled)
4543 requestedApplicationActivation(application)
4644 }
4745
@@ -123,9 +121,10 @@ AbstractButton {
123121 }
124122
125123 CloseIcon {
124+ objectName: "closeIcon " + model.name
126125 anchors {
127− right: shapedApplicationImage.right
128− rightMargin: -units.gu(1)
126+ left: shapedApplicationImage.left
127+ leftMargin: -units.gu(1)
129128 top: parent.top
130129 topMargin: -units.gu(1)
131130 }
@@ -133,5 +132,10 @@ AbstractButton {
133132 width: units.gu(6)
134133 id: closeIcon
135134 enabled: root.terminationModeEnabled
135+
136+ MouseArea {
137+ anchors { fill: parent; margins: -units.gu(1) }
138+ onClicked: requestedApplicationTermination(application)
139+ }
136140 }
137141}
Dash/Dash.qml+3
@@ -22,6 +22,9 @@ import "../Components"
2222
2323Showable {
2424 id: dash
25+ objectName: "dash"
26+
27+ visible: shown
2528
2629 property alias contentProgress: dashContent.contentProgress
2730 property string showScopeOnLoaded: "home.scope"
Dash/DashContent.qml+6−6
@@ -83,7 +83,7 @@ Item {
8383 id: dashContentList
8484 objectName: "dashContentList"
8585
86− interactive: dashContent.scopes.loaded
86+ interactive: dashContent.scopes.loaded && !currentItem.previewShown && !currentItem.moving
8787
8888 anchors.fill: parent
8989 model: dashContent.model
@@ -116,6 +116,9 @@ Item {
116116 source: scopeMapper.map(scope.id)
117117 objectName: scope.id + " loader"
118118
119+ readonly property bool previewShown: item.previewShown
120+ readonly property bool moving: item.moving
121+
119122 // these are needed for autopilot tests
120123 readonly property string scopeId: scope.id
121124 readonly property bool isCurrent: ListView.isCurrentItem
@@ -123,7 +126,7 @@ Item {
123126
124127 onLoaded: {
125128 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 })
127130 item.searchHistory = Qt.binding(function() { return shell.searchHistory })
128131 dashContentList.movementStarted.connect(item.movementStarted)
129132 dashContent.positionedAtBeginning.connect(item.positionedAtBeginning)
@@ -135,10 +138,7 @@ Item {
135138 onEndReached: contentEndReached()
136139 onPreviewShownChanged: {
137140 if (item.previewShown) {
138− previewShown()
139− dashContentList.interactive = false
140− } else {
141− dashContentList.interactive = true
141+ dashContent.previewShown()
142142 }
143143 }
144144 }
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+91−93
@@ -23,19 +23,18 @@ Rectangle {
2323 property int keyboardSize: Qt.inputMethod.visible ? Qt.inputMethod.keyboardRectangle.height : 0
2424 property var previewData
2525
26− property string title: ""
2726 property real previewWidthRatio: 0.5
2827
28+ property Component previewImages
2929 property Component header
30− property Component buttons
31− property Component body
30+ property Component actions
31+ property Component description
32+ property Component ratings
3233
33− readonly property bool narrowMode: width <= height
34+ readonly property bool narrowMode: width <= height * 1.5
35+ readonly property int columnWidth: narrowMode ? contentRow.width : (contentRow.width / 3) - contentRow.spacing
3436 readonly property int contentSpacing: units.gu(3)
3537
36− signal close()
37− signal previewImageClicked()
38−
3938 color: Qt.rgba(0, 0, 0, .3)
4039 clip: true
4140
@@ -61,87 +60,32 @@ Rectangle {
6160 anchors.fill: parent
6261 }
6362
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− }
12563
12664 Row {
12765 id: contentRow
12866 anchors {
12967 left: parent.left
68+ top: parent.top
13069 right: parent.right
131− top: headerRow.bottom
13270 bottom: parent.bottom
133− margins: root.contentSpacing
71+ topMargin: root.contentSpacing
72+ leftMargin: root.contentSpacing
73+ rightMargin: root.contentSpacing
13474 }
75+ height: childrenRect.height
13576
13677 spacing: units.gu(2)
13778
79+
13880 Flickable {
13981 id: leftFlickable
14082 objectName: "leftFlickable"
141− anchors.top: parent.top
142− anchors.bottom: parent.bottom
143− width: root.narrowMode ? contentRow.width : contentRow.width * root.previewWidthRatio
144− contentHeight: leftColumn.height
83+ anchors {
84+ top: parent.top
85+ bottom: parent.bottom
86+ }
87+ width: root.columnWidth
88+ contentHeight: leftColumn.height + root.contentSpacing
14589 anchors.bottomMargin: root.keyboardSize
14690 clip: true
14791
@@ -150,33 +94,44 @@ Rectangle {
15094 Column {
15195 id: leftColumn
15296 objectName: "leftColumn"
97+ height: childrenRect.height
98+ spacing: root.contentSpacing
15399 anchors {
154100 left: parent.left
155101 right: parent.right
156102 }
157− height: childrenRect.height
158− spacing: units.gu(1)
103+ }
104+ }
159105
160− Loader {
161− id: headerLoader
162− anchors.left: parent.left
163− anchors.right: parent.right
164− sourceComponent: root.header
165− }
166− Loader {
167− id: buttonLoader
168− anchors.left: parent.left
169− anchors.right: parent.right
170− sourceComponent: root.buttons
106+ Flickable {
107+ id: centerFlickable
108+ anchors {
109+ top: parent.top
110+ bottom: parent.bottom
111+ }
112+ width: root.columnWidth
113+ contentHeight: centerColumn.height
114+ clip: true
115+
116+ Column {
117+ id: centerColumn
118+ objectName: "centerColumn"
119+ height: childrenRect.height
120+ anchors {
121+ left: parent.left
122+ right: parent.right
171123 }
124+ spacing: root.contentSpacing
172125 }
173126 }
174127
175128 Flickable {
176129 id: rightFlickable
177− anchors.top: parent.top
178− anchors.bottom: parent.bottom
179− width: narrowMode ? 0 : (contentRow.width - leftColumn.width - contentRow.spacing)
130+ anchors {
131+ top: parent.top
132+ bottom: parent.bottom
133+ }
134+ width: root.columnWidth
180135 contentHeight: rightColumn.height
181136 clip: true
182137
@@ -193,9 +148,52 @@ Rectangle {
193148 }
194149
195150 Loader {
151+ id: previewImageLoader
152+ parent: leftColumn
153+ sourceComponent: root.previewImages
154+ anchors {
155+ left: parent.left
156+ right: parent.right
157+ }
158+ }
159+
160+ Loader {
161+ id: ratingsLoader
196162 parent: root.narrowMode ? leftColumn : rightColumn
197− anchors.left: parent.left
198− anchors.right: parent.right
199− sourceComponent: root.body
163+ anchors {
164+ left: parent.left
165+ right: parent.right
166+ }
167+ sourceComponent: root.ratings
168+ }
169+
170+ Loader {
171+ id: descriptionLoader
172+ parent: root.narrowMode ? leftColumn : centerColumn
173+ anchors {
174+ left: parent.left
175+ right: parent.right
176+ }
177+ sourceComponent: root.description
178+ }
179+
180+ Loader {
181+ id: actionsLoader
182+ parent: root.narrowMode ? leftColumn : centerColumn
183+ anchors {
184+ left: parent.left
185+ right: parent.right
186+ }
187+ sourceComponent: root.actions
188+ }
189+
190+ Loader {
191+ id: headerLoader
192+ parent: root.narrowMode ? leftColumn : centerColumn
193+ anchors {
194+ left: parent.left
195+ right: parent.right
196+ }
197+ sourceComponent: root.header
200198 }
201199}
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 {
3939 text: model.title
4040 imageWidth: filtergrid.iconWidth
4141 imageHeight: filtergrid.iconHeight
42−
4342 source: model.icon
4443
45− fillMode: Image.PreserveAspectCrop
46−
4744 onClicked: {
4845 var data = { model: model }
4946 filtergrid.clicked(index, data, tile.y)
Dash/Generic/GenericPreview.qml+158−70
@@ -16,90 +16,178 @@
1616
1717import QtQuick 2.0
1818import Ubuntu.Components 0.1
19+import Ubuntu.Components.ListItems 0.1 as ListItems
20+import Ubuntu.DownloadDaemonListener 0.1
1921import "../../Components"
20−import "../../Components/ListItems" as ListItems
2122import ".."
23+import "../Previews"
2224
2325DashPreview {
2426 id: genericPreview
2527
26− title: previewData.title
27− previewWidthRatio: 0.6
28−
29− property url url: previewData.image
30−
31− header: UbuntuShape {
32− id: urlLoader
33− anchors.left: parent.left
34− anchors.right: parent.right
35− height: width * previewImage.sourceSize.height / previewImage.sourceSize.width
36− radius: "medium"
37− image: Image {
38− id: previewImage
39− asynchronous: true
40− source: genericPreview.url
41− fillMode: Image.PreserveAspectCrop
28+ previewImages: previewImagesComponent
29+ header: headerComponent
30+ actions: (previewData.infoMap !== undefined && previewData.infoMap["show_progressbar"]) ? progressComponent : actionsComponent
31+ description: descriptionComponent
32+
33+ Component {
34+ id: previewImagesComponent
35+
36+ LazyImage {
37+ objectName: "genericPreviewImage"
38+ anchors {
39+ left: parent.left
40+ right: parent.right
41+ }
42+ scaleTo: "width"
43+ source: genericPreview.previewData.image
44+ initialHeight: width
45+ }
46+ }
47+
48+ Component {
49+ id: headerComponent
50+ Header {
51+ title: previewData.title
52+ subtitle: previewData.subtitle
4253 }
4354 }
4455
45− buttons: GridView {
46− id: buttons
47− model: genericPreview.previewData.actions
48−
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 {
59− width: Math.max(units.gu(4), buttons.buttonWidth)
60− height: buttons.buttonHeight
61− color: "#dd4814"
62− text: modelData.displayName
63− iconSource: modelData.iconHint
64− iconPosition: "right"
65− visible: true
66− onClicked: {
67− genericPreview.previewData.execute(modelData.id, { })
56+ Component {
57+ id: actionsComponent
58+
59+ Column {
60+ id: buttonList
61+ spacing: units.gu(1)
62+ Repeater {
63+ objectName: "buttonList"
64+ model: previewData.actions
65+
66+ delegate: Button {
67+ objectName: "button" + index
68+ width: parent.width
69+ height: buttonList.buttonHeight
70+ color: Theme.palette.selected.foreground
71+ text: modelData.displayName
72+ iconSource: modelData.iconHint
73+ iconPosition: "right"
74+ onClicked: previewData.execute(modelData.id, { })
75+ }
6876 }
6977 }
70− focus: false
7178 }
72− body: Column {
73− spacing: units.gu(2)
74−
75− Label {
76− anchors { left: parent.left; right: parent.right }
77− visible: text != ""
78− fontSize: "medium"
79− opacity: 0.6
80− color: "white"
81− text: previewData.subtitle.replace(/[\r\n]+/g, "<br />")
82− style: Text.Raised
83− styleColor: "black"
84− wrapMode: Text.WordWrap
85− textFormat: Text.RichText
86− // FIXME: workaround for https://bugreports.qt-project.org/browse/QTBUG-33020
87− onWidthChanged: { wrapMode = Text.NoWrap; wrapMode = Text.WordWrap }
79+
80+ Component {
81+ id: progressComponent
82+
83+ ProgressBar {
84+ id: progressBar
85+ objectName: "progressBar"
86+ value: 0
87+ maximumValue: 100
88+ height: units.gu(5)
89+
90+ property var model: previewData.actions
91+
92+ DownloadTracker {
93+ service: "com.canonical.applications.Downloader"
94+ dbusPath: previewData.infoMap["progressbar_source"] ? previewData.infoMap["progressbar_source"].value : ""
95+
96+ onProgress: {
97+ var percentage = parseInt(received * 100 / total);
98+ progressBar.value = percentage;
99+ }
100+
101+ onFinished: {
102+ previewData.execute(progressBar.model[0].id, { })
103+ }
104+
105+ onError: {
106+ previewData.execute(progressBar.model[1].id, { "error": error });
107+ }
108+ }
109+
88110 }
111+ }
89112
90− Label {
91− anchors { left: parent.left; right: parent.right }
92− visible: text != ""
93− fontSize: "small"
94− opacity: 0.6
95− color: "white"
96− text: previewData.description.replace(/[\r\n]+/g, "<br />")
97− style: Text.Raised
98− styleColor: "black"
99− wrapMode: Text.WordWrap
100− textFormat: Text.RichText
101− // FIXME: workaround for https://bugreports.qt-project.org/browse/QTBUG-33020
102− onWidthChanged: { wrapMode = Text.NoWrap; wrapMode = Text.WordWrap }
113+ Component {
114+ id: descriptionComponent
115+ Column {
116+ spacing: units.gu(2)
117+
118+ Label {
119+ id: descriptionLabel
120+ anchors { left: parent.left; right: parent.right }
121+ visible: text != ""
122+ fontSize: "small"
123+ opacity: 0.6
124+ color: "white"
125+ text: previewData.description.replace(/[\r\n]/g, "<br />")
126+ style: Text.Raised
127+ styleColor: "black"
128+ wrapMode: Text.WordWrap
129+ textFormat: Text.RichText
130+ // FIXME: workaround for https://bugreports.qt-project.org/browse/QTBUG-33020
131+ onWidthChanged: { wrapMode = Text.NoWrap; wrapMode = Text.WordWrap }
132+ }
133+
134+ Column {
135+ objectName: "infoHintColumn"
136+ anchors {
137+ left: parent.left
138+ right: parent.right
139+ }
140+ Repeater {
141+ objectName: "infoHintRepeater"
142+ model: previewData.infoHints
143+
144+ delegate: Item {
145+ objectName: "infoHintItem" + index
146+ width: parent.width
147+ height: units.gu(5)
148+ Row {
149+ width: parent.width
150+ spacing: units.gu(1)
151+ property int columnWidth: (width - spacing) / 2
152+ anchors.verticalCenter: parent.verticalCenter
153+
154+ Label {
155+ objectName: "displayNameLabel"
156+ visible: valueLabel.visible
157+ fontSize: "small"
158+ opacity: 0.9
159+ color: "white"
160+ horizontalAlignment: Text.AlignLeft
161+ width: parent.columnWidth
162+ text: modelData.displayName
163+ style: Text.Raised
164+ styleColor: "black"
165+ }
166+ Label {
167+ id: valueLabel
168+ objectName: "valueLabel"
169+ visible: modelData.value != ""
170+ fontSize: "small"
171+ opacity: 0.6
172+ color: "white"
173+ horizontalAlignment: Text.AlignRight
174+ width: parent.columnWidth
175+ text: modelData.value ? modelData.value : ""
176+ style: Text.Raised
177+ styleColor: "black"
178+ wrapMode: Text.WordWrap
179+ }
180+ }
181+ ListItems.ThinDivider {
182+ anchors {
183+ left: parent.left
184+ bottom: parent.bottom
185+ right: parent.right
186+ }
187+ }
188+ }
189+ }
190+ }
103191 }
104192 }
105193}
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+40−1
@@ -24,6 +24,8 @@ ScopeView {
2424 readonly property alias previewShown: previewLoader.onScreen
2525 property bool enableHeightBehaviorOnNextCreation: false
2626
27+ moving: categoryView.moving
28+
2729 onIsCurrentChanged: {
2830 pageHeader.resetSearch();
2931 previewLoader.open = false;
@@ -72,6 +74,7 @@ ScopeView {
7274 property string expandedCategoryId: ""
7375
7476 delegate: ListItems.Base {
77+ id: baseItem
7578 highlightWhenPressed: false
7679
7780 readonly property bool expandable: rendererLoader.item ? rendererLoader.item.expandable : false
@@ -97,6 +100,7 @@ ScopeView {
97100 // TODO: the running apps grid doesn't support standard scope results model yet
98101 item.firstModel = Qt.binding(function() { return results.firstModel })
99102 item.secondModel = Qt.binding(function() { return results.secondModel })
103+ item.canEnableTerminationMode = Qt.binding(function() { return scopeView.isCurrent })
100104 } else {
101105 item.model = Qt.binding(function() { return results })
102106 }
@@ -107,6 +111,7 @@ ScopeView {
107111 item.filter = shouldFilter;
108112 }
109113 }
114+ updateDelegateCreationRange();
110115 }
111116
112117 Component.onDestruction: {
@@ -163,6 +168,33 @@ ScopeView {
163168 }
164169 }
165170 }
171+ onContentYChanged: rendererLoader.updateDelegateCreationRange();
172+ onHeightChanged: rendererLoader.updateDelegateCreationRange();
173+ }
174+
175+ function updateDelegateCreationRange() {
176+ // Do not update the range if we are overshooting up or down, since we'll come back
177+ // to the stable position and delete/create items without any reason
178+ if (categoryView.contentY < categoryView.originY) {
179+ return;
180+ } else if (categoryView.contentY + categoryView.height > categoryView.contentHeight) {
181+ return;
182+ }
183+
184+ if (item.hasOwnProperty("delegateCreationBegin")) {
185+ if (baseItem.y + baseItem.height <= 0) {
186+ // Not visible (item at top of the list)
187+ item.delegateCreationBegin = baseItem.height
188+ item.delegateCreationEnd = baseItem.height
189+ } else if (baseItem.y >= categoryView.height) {
190+ // Not visible (item at bottom of the list)
191+ item.delegateCreationBegin = 0
192+ item.delegateCreationEnd = 0
193+ } else {
194+ item.delegateCreationBegin = Math.max(-baseItem.y, 0)
195+ item.delegateCreationEnd = Math.min(categoryView.height + item.delegateCreationBegin, baseItem.height)
196+ }
197+ }
166198 }
167199 }
168200 }
@@ -207,8 +239,15 @@ ScopeView {
207239 switch (rendererId) {
208240 case "grid": {
209241 switch (contentType) {
210− case "video": return "Generic/GenericFilterGridPotrait.qml";
242+ case "video": return "Video/VideoFilterGrid.qml";
211243 case "music": return "Music/MusicFilterGrid.qml";
244+ case "apps": {
245+ if (rendererHint == "toggled")
246+ return "Apps/DashPluginFilterGrid.qml";
247+ else
248+ return "Generic/GenericFilterGrid.qml";
249+ }
250+ case "weather": return "Generic/WeatherFilterGrid.qml";
212251 default: return "Generic/GenericFilterGrid.qml";
213252 }
214253 }
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 @@
1616
1717import QtQuick 2.0
1818import "../../Components"
19+import "../Generic"
1920
20−FilterGrid {
21− id: filterGrid
21+GenericFilterGrid {
22+ id: filtergrid
2223
23− minimumHorizontalSpacing: units.gu(2)
24− maximumNumberOfColumns: 5
25− delegateWidth: units.gu(17)
26− delegateHeight: iconHeight + units.gu(3.5)
27− verticalSpacing: units.gu(2)
24+ delegateWidth: units.gu(11)
25+ delegateHeight: units.gu(16)
2826
29− readonly property int iconWidth: (width / columns) * 0.8
30− readonly property int iconHeight: iconWidth
27+ iconWidth: units.gu(11)
28+ iconHeight: units.gu(11)
3129
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 {
3631 id: tile
3732 objectName: "delegate" + index
38− width: filterGrid.cellWidth
39− height: filterGrid.cellHeight
40− iconWidth: filterGrid.iconWidth
41− iconHeight: filterGrid.iconHeight
42−
43− artist: model.title
44− album: model.comment
33+ width: filtergrid.cellWidth
34+ height: filtergrid.cellHeight
35+ text: model.comment
36+ imageWidth: filtergrid.iconWidth
37+ imageHeight: filtergrid.iconHeight
4538 source: model.icon
39+ maximumLineCount: 2
40+ horizontalAlignment: Text.AlignLeft
41+
42+ style: MusicTileStyle {
43+ artist: model.title
44+ }
4645
4746 onClicked: {
4847 var data = { model: model }
49− filterGrid.clicked(index, data, tile.y)
48+ filtergrid.clicked(index, data, tile.y)
5049 }
5150
5251 onPressAndHold: {
5352 var data = { model: model }
54− filterGrid.pressAndHold(index, data, tile.y)
53+ filtergrid.pressAndHold(index, data, tile.y)
5554 }
5655 }
5756}
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 {
2222 readonly property string appPreview: "Apps/AppPreview.qml"
2323 property var previewDelegateMapping: {"preview-generic": genericPreview,
2424 "preview-application": appPreview,
25+ "preview-movie": "Movie/MoviePreview.qml",
2526 }
2627 }
2728
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 @@
1717import QtQuick 2.0
1818
1919QtObject {
20− property var scopeDelegateMapping: {"mockmusicmaster.scope": "DashMusic.qml",
21− "applications.scope": "DashApps.qml",
22− "home.scope": "DashHome.qml",
23− "mockvideosmaster.scope": "DashVideos.qml"
20+ property var scopeDelegateMapping: {"applications.scope": "DashApps.qml",
21+ "home.scope": "DashHome.qml"
2422 }
2523 property string genericScope: "GenericScopeView.qml"
2624
Dash/ScopeListView.qml+5
@@ -20,4 +20,9 @@ import ListViewWithPageHeader 0.1
2020ListViewWithPageHeader {
2121 maximumFlickVelocity: height * 10
2222 flickDeceleration: height * 2
23+
24+ Connections {
25+ target: greeter
26+ onShownChanged: if (greeter.shown) showHeader()
27+ }
2328}
Dash/ScopeView.qml+12−3
@@ -23,6 +23,7 @@ FocusScope {
2323 property SortFilterProxyModel categories: categoryFilter
2424 property bool isCurrent
2525 property ListModel searchHistory
26+ property bool moving: false
2627
2728 signal endReached
2829 signal movementStarted
@@ -31,14 +32,22 @@ FocusScope {
3132 // FIXME delay the search so that daemons have time to settle, note that
3233 // removing this will break ScopeView::test_changeScope
3334 onScopeChanged: {
34− timer.restart();
35− scope.activateApplication.connect(activateApp);
35+ if (scope) {
36+ timer.restart();
37+ scope.activateApplication.connect(activateApp);
38+ }
3639 }
3740
3841 function activateApp(desktopFilePath) {
3942 shell.activateApplication(desktopFilePath);
4043 }
4144
45+ Binding {
46+ target: scope
47+ property: "isActive"
48+ value: isCurrent
49+ }
50+
4251 Timer {
4352 id: timer
4453 interval: 2000
@@ -47,7 +56,7 @@ FocusScope {
4756
4857 SortFilterProxyModel {
4958 id: categoryFilter
50− model: scope.categories
59+ model: scope ? scope.categories : null
5160 dynamicSortFilter: true
5261 filterRole: Categories.RoleCount
5362 filterRegExp: /^0$/
Dash/Video/VideosFilterGrid.qml → Dash/Video/VideoFilterGrid.qmlrenamed+17−13
@@ -16,20 +16,16 @@
1616
1717import QtQuick 2.0
1818import "../../Components"
19+import "../Generic"
1920
20−FilterGrid {
21+GenericFilterGrid {
2122 id: filtergrid
2223
23− minimumHorizontalSpacing: units.gu(0.5)
24− maximumNumberOfColumns: 5
2524 delegateWidth: units.gu(11)
26− delegateHeight: iconHeight + units.gu(2.5)
27− verticalSpacing: units.gu(2)
25+ delegateHeight: units.gu(15)
2826
29− readonly property int iconWidth: (width / columns) * 0.8
30− readonly property int iconHeight: iconWidth * 16 / 11
31−
32− signal clicked(int index, var data, real itemY)
27+ iconWidth: units.gu(11)
28+ iconHeight: units.gu(11)
3329
3430 delegate: Tile {
3531 id: tile
@@ -40,11 +36,19 @@ FilterGrid {
4036 imageWidth: filtergrid.iconWidth
4137 imageHeight: filtergrid.iconHeight
4238 source: model.icon
43− fillMode: Image.PreserveAspectCrop
39+ maximumLineCount: 2
40+ horizontalAlignment: Text.AlignLeft
41+
42+ style: VideoTileStyle {}
43+
4444 onClicked: {
45− var fileUri = model.uri.replace(/^[^:]+:/, "")
46− var data = {fileUri: fileUri, nfoUri: model.comment}
47− filtergrid.clicked(index, data, tile.y);
45+ var data = { model: model }
46+ filtergrid.clicked(index, data, tile.y)
47+ }
48+
49+ onPressAndHold: {
50+ var data = { model: model }
51+ filtergrid.pressAndHold(index, data, tile.y)
4852 }
4953 }
5054}
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 @@
1616
1717import QtQuick 2.0
1818import Ubuntu.Components 0.1
19+import Unity.Indicators 0.1 as Indicators
1920
2021Item {
2122 id: clock
@@ -23,17 +24,35 @@ Item {
2324 implicitWidth: childrenRect.width
2425 implicitHeight: childrenRect.height
2526
26− property date __date
27− property alias __timerInterval: timer.interval
28− readonly property bool __timerRunning: timer.running
27+ // Allows to set the current Date. Will be overwritten if active
28+ property date currentDate
2929
30− Timer {
31− id: timer
32− interval: 1000 * 60
33− running: clock.enabled && clock.visible && clock.opacity != 0
34− repeat: true
35− triggeredOnStart: true
36− onTriggered: __date = new Date
30+ // If active, time will be updated through the indicators service
31+ property bool active: clock.enabled && clock.visible
32+
33+ Component.onCompleted: {
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+ }
3756 }
3857
3958 Column {
@@ -47,7 +66,7 @@ Item {
4766 font.pixelSize: units.gu(7.5)
4867 color: "white"
4968 opacity: 0.5
50− text: Qt.formatTime(__date)
69+ text: Qt.formatTime(clock.currentDate)
5170 font.weight: Font.Light
5271 }
5372
@@ -59,7 +78,7 @@ Item {
5978 fontSize: "medium"
6079 color: "white"
6180 opacity: 0.5
62− text: Qt.formatDate(__date, Qt.DefaultLocaleLongDate)
81+ text: Qt.formatDate(clock.currentDate, Qt.DefaultLocaleLongDate)
6382 font.weight: Font.Light
6483 }
6584 }
Greeter/Infographics.qml+1−3
@@ -405,7 +405,7 @@ Item {
405405 }
406406 }
407407
408− Text {
408+ Label {
409409 id: notification
410410 objectName: "label"
411411
@@ -419,13 +419,11 @@ Item {
419419 anchors.centerIn: parent
420420
421421 text: infographic.model.label
422− font.pixelSize: notification.height / 12
423422
424423 wrapMode: Text.WordWrap
425424 horizontalAlignment: Text.AlignHCenter
426425 verticalAlignment: Text.AlignVCenter
427426 color: "white"
428− font.weight: Font.Light
429427
430428 PropertyAnimation {
431429 id: increaseOpacity
Greeter/PinLockscreen.qml+5
@@ -32,6 +32,8 @@ Column {
3232 signal entered(string passphrase)
3333 signal cancel()
3434
35+ property bool entryEnabled: true
36+
3537 function clear(playAnimation) {
3638 pinentryField.text = "";
3739 if (playAnimation) {
@@ -140,6 +142,7 @@ Column {
140142 width: root.padWidth / 3
141143 height: root.padHeight / 4
142144 text: index + 1
145+ enabled: entryEnabled
143146
144147 onClicked: {
145148 pinentryField.text = pinentryField.text + text;
@@ -161,6 +164,7 @@ Column {
161164 height: root.padHeight / 4
162165 text: "0"
163166 onClicked: pinentryField.text = pinentryField.text + text
167+ enabled: entryEnabled
164168 }
165169
166170 PinPadButton {
@@ -169,6 +173,7 @@ Column {
169173 height: root.padHeight / 4
170174 iconName: "erase"
171175 onClicked: pinentryField.text = pinentryField.text.substring(0, pinentryField.text.length-1)
176+ enabled: entryEnabled
172177 }
173178 }
174179 }
Notifications/Notification.qml+7−4
@@ -35,8 +35,9 @@ UbuntuShape {
3535
3636 objectName: "background"
3737 implicitHeight: contentColumn.height + contentColumn.spacing * 2
38− color: Qt.rgba(0, 0, 0, 0.85)
38+ color: Qt.rgba(0.132, 0.117, 0.109, 0.97)
3939 opacity: 0
40+ radius: "medium"
4041
4142 clip: true
4243
@@ -128,6 +129,8 @@ UbuntuShape {
128129 id: labelColumn
129130 width: parent.width - x
130131
132+ anchors.verticalCenter: (icon.visible && !bodyLabel.visible) ? icon.verticalCenter : undefined
133+
131134 Label {
132135 id: summaryLabel
133136
@@ -190,8 +193,8 @@ UbuntuShape {
190193 left: parent.left
191194 right: parent.right
192195 }
193− visible: notification.type == Notification.SnapDecision
194− height: units.gu(4)
196+ visible: notification.type == Notification.SnapDecision && actionRepeater.count > 0
197+ height: units.gu(5)
195198
196199 property real buttonWidth: (width - contentColumn.spacing) / 2
197200 property bool expanded
@@ -282,7 +285,7 @@ UbuntuShape {
282285 }
283286
284287 text: loader.actionLabel
285− height: units.gu(4)
288+ height: units.gu(5)
286289 gradient: UbuntuColors.greyGradient
287290 onClicked: notification.notification.invokeAction(loader.actionId)
288291 }
Notifications/NotificationMenuItemFactory.qml+8−9
@@ -41,19 +41,14 @@ Loader {
4141 if (component !== undefined) {
4242 return component;
4343 }
44− } else {
45− if (menuData.isSeparator) {
46− return divMenu;
47− }
4844 }
49− return standardMenu;
5045 }
5146
5247 Component {
5348 id: textfield
5449
5550 Column {
56− spacing: units.gu(.5)
51+ spacing: units.gu(2)
5752
5853 anchors.left: parent.left; anchors.right: parent.right
5954
@@ -63,8 +58,6 @@ Loader {
6358 }
6459
6560 Label {
66− fontSize: "medium"
67− color: "white"
6861 text: menuData.label
6962 }
7063
@@ -72,7 +65,7 @@ Loader {
7265 id: textfield
7366
7467 anchors.left: parent.left; anchors.right: parent.right
75−
68+ height: units.gu(5)
7669 onTextChanged: {
7770 menuModel.changeState(menuIndex, text);
7871 }
@@ -85,8 +78,14 @@ Loader {
8578 PinLockscreen {
8679 anchors.left: parent.left; anchors.right: parent.right
8780
81+ Component.onCompleted: {
82+ menuModel.loadExtendedAttributes(menuIndex, {'x-canonical-pin-length': 'int'});
83+ pinLength = menuData.ext.xCanonicalPinLength;
84+ }
85+
8886 onEntered: {
8987 menuModel.changeState(menuIndex, passphrase);
88+ entryEnabled = false;
9089 }
9190
9291 onCancel: {
Panel/IndicatorRow.qml+51−12
@@ -27,6 +27,8 @@ Item {
2727 property alias row: row
2828 property QtObject indicatorsModel: null
2929 property var visibleIndicators: defined
30+ property int overFlowWidth: width
31+ property bool showAll: false
3032
3133 width: units.gu(40)
3234 height: units.gu(3)
@@ -42,6 +44,15 @@ Item {
4244 }
4345 }
4446
47+ Timer {
48+ id: allVisible
49+ interval: 1000
50+
51+ onTriggered: {
52+ showAll = false;
53+ }
54+ }
55+
4556 Row {
4657 id: row
4758
@@ -54,16 +65,31 @@ Item {
5465 objectName: "rowRepeater"
5566 model: indicatorsModel ? indicatorsModel : undefined
5667
68+ property int lastCount: 0
69+ onCountChanged: {
70+ if (lastCount < count) {
71+ showAll = true;
72+ allVisible.start();
73+ }
74+ lastCount = count;
75+ }
76+
5777 Item {
5878 id: itemWrapper
5979 height: indicatorRow.height
6080 width: indicatorItem.width
6181 visible: indicatorItem.indicatorVisible
82+ opacity: 1.0
83+ y: 0
84+ state: "standard"
6285
6386 property int ownIndex: index
6487 property alias highlighted: indicatorItem.highlighted
6588 property alias dimmed: indicatorItem.dimmed
6689
90+ property bool hidden: !showAll && !indicatorItem.highlighted && (indicatorRow.state == "locked" || indicatorRow.state == "commit")
91+ property bool overflow: row.width - itemWrapper.x > overFlowWidth
92+
6793 IndicatorItem {
6894 id: indicatorItem
6995 height: parent.height
@@ -87,22 +113,35 @@ Item {
87113 }
88114 indicatorRow.visibleIndicators[model.identifier] = indicatorVisible;
89115 indicatorRow.visibleIndicatorsChanged();
116+
117+ if (indicatorVisible) {
118+ showAll = true;
119+ allVisible.start();
120+ }
90121 }
91122 }
92123
93− opacity: {
94− if (!indicatorItem.highlighted && (indicatorRow.state == "locked" || indicatorRow.state == "commit")) {
95− return 0.0;
96− } else {
97− return 1.0;
124+ states: [
125+ State {
126+ name: "standard"
127+ when: !hidden && !overflow
128+ },
129+ State {
130+ name: "overflow"
131+ when: hidden || overflow
132+ PropertyChanges { target: itemWrapper; opacity: 0.0 }
98133 }
99− }
100− Behavior on opacity {
101− StandardAnimation {
102− // flow away from current index
103− duration: (rowRepeater.count - Math.abs(indicatorRow.currentItemIndex - index)) * (500/rowRepeater.count)
104− }
105− }
134+ ]
135+
136+ transitions: [
137+ Transition {
138+ StandardAnimation {
139+ target: itemWrapper
140+ property: "opacity"
141+ duration: 300
142+ }
143+ }
144+ ]
106145 }
107146 }
108147 }
Panel/Indicators.qml+2
@@ -29,6 +29,8 @@ Showable {
2929 property real openedHeight: units.gu(71)
3030 property int panelHeight: units.gu(3)
3131 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
3234
3335 property int hintValue
3436 readonly property int lockThreshold: openedHeight / 2
Panel/Indicators/client/IndicatorsList.qml+1−1
@@ -45,7 +45,7 @@ Page {
4545 anchors.right: parent.right
4646 objectName: identifier
4747
48− text: title
48+ text: identifier
4949
5050 onClicked: {
5151 var new_page = Qt.createComponent("IndicatorsPage.qml");
Panel/Panel.qml+3−2
@@ -73,6 +73,7 @@ Item {
7373
7474 Indicators {
7575 id: indicatorsMenu
76+ objectName: "indicators"
7677
7778 anchors.right: parent.right
7879 y: panelBackground.y
@@ -82,6 +83,7 @@ Item {
8283 panelHeight: __panelMinusSeparatorLineHeight
8384 openedHeight: parent.height + (pinnedMode ? 0 : root.panelHeight)
8485 pinnedMode: !fullscreenMode
86+ overFlowWidth: search.state=="hidden" ? parent.width : parent.width - search.width
8587
8688 property real unitProgress: (height - panelHeight) / (openedHeight - panelHeight)
8789 }
@@ -120,14 +122,13 @@ Item {
120122 return "hidden";
121123 }
122124 }
123− if (root.searchVisible) {
125+ if (root.searchVisible && !indicatorsMenu.showAll) {
124126 return "visible";
125127 }
126128
127129 return "hidden";
128130 }
129131
130− width: units.gu(13)
131132 height: __panelMinusSeparatorLineHeight
132133 anchors {
133134 top: panelBackground.top
Panel/SearchIndicator.qml+9−8
@@ -21,7 +21,7 @@ import "../Components"
2121Item {
2222 id: search
2323
24− width: units.gu(9)
24+ width: container.width + units.gu(2)
2525 height: units.gu(3)
2626
2727 property string headerText: i18n.tr("Search")
@@ -34,21 +34,24 @@ Item {
3434 onClicked: search.clicked()
3535 }
3636
37− Item {
37+ Row {
3838 id: container
3939 objectName: "container"
4040
41− width: parent.width
4241 height: parent.height
42+ width: childrenRect.width
43+ anchors {
44+ left: parent.left
45+ leftMargin: units.gu(1)
46+ }
47+ spacing: units.gu(1)
4348
44− Behavior on opacity { StandardAnimation {} }
49+ Behavior on opacity { StandardAnimation { duration: 300 } }
4550
4651 Image {
4752 id: icon
4853 source: "graphics/search.png"
4954 anchors.verticalCenter: parent.verticalCenter
50− anchors.left: parent.left
51− anchors.leftMargin: units.gu(1)
5255 }
5356
5457 Label {
@@ -56,8 +59,6 @@ Item {
5659 color: Qt.rgba(0.8, 0.8, 0.8, 1.0)
5760 fontSize: "small"
5861 font.capitalization: Font.AllUppercase
59− anchors.left: icon.right
60− anchors.leftMargin: units.gu(1)
6162 anchors.verticalCenter: parent.verticalCenter
6263 }
6364 }
Shell.qml+62−46
@@ -99,17 +99,6 @@ FocusScope {
9999 }
100100 }
101101
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−
113102 function activateApplication(desktopFile, argument) {
114103 if (applicationManager) {
115104 // For newly started applications, as it takes them time to draw their first frame
@@ -160,10 +149,6 @@ FocusScope {
160149 }
161150 }
162151
163− OSKController {
164− anchors.fill: parent // as needs to know the geometry of the shell
165− }
166−
167152 VolumeControl {
168153 id: volumeControl
169154 }
@@ -405,7 +390,7 @@ FocusScope {
405390
406391 width: shell.edgeSize
407392 direction: Direction.Leftwards
408− enabled: edgeDemo.dashEnabled
393+ enabled: greeter.showProgress == 0 && edgeDemo.dashEnabled
409394 property bool haveApps: mainStage.applications.count > 0 || sideStage.applications.count > 0
410395
411396 maxTotalDragDistance: haveApps ? parent.width : parent.width * 0.7
@@ -472,6 +457,26 @@ FocusScope {
472457
473458 dragHandleWidth: shell.edgeSize
474459
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+
475480 onShownChanged: {
476481 if (shown) {
477482 lockscreen.reset();
@@ -482,6 +487,9 @@ FocusScope {
482487 greeter.selected(0);
483488 }
484489 greeter.forceActiveFocus();
490+ removeApplicationFocus();
491+ } else {
492+ restoreApplicationFocus();
485493 }
486494 }
487495
@@ -498,6 +506,29 @@ FocusScope {
498506 launcher.tease();
499507 }
500508 }
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+ }
501532 }
502533
503534 InputFilterArea {
@@ -510,34 +541,11 @@ FocusScope {
510541 id: powerConnection
511542 target: Powerd
512543
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−
533544 onDisplayPowerStateChange: {
534545 // We ignore any display-off signals when the proximity sensor
535546 // is active. This usually indicates something like a phone call.
536547 if (status == Powerd.Off && (flags & Powerd.UseProximity) == 0) {
537− powerConnection.setFocused(false);
538548 greeter.showNow();
539− } else if (status == Powerd.On) {
540− powerConnection.setFocused(true);
541549 }
542550
543551 // No reason to chew demo CPU when user isn't watching
@@ -550,13 +558,9 @@ FocusScope {
550558 }
551559
552560 function showHome() {
561+ var animate = !greeter.shown && !stages.shown
553562 greeter.hide()
554− // Animate if moving between application and dash
555− if (!stages.shown) {
556− dash.setCurrentScope("home.scope", true, false)
557− } else {
558− dash.setCurrentScope("home.scope", false, false)
559− }
563+ dash.setCurrentScope("home.scope", animate, false)
560564 stages.hide()
561565 }
562566
@@ -575,7 +579,7 @@ FocusScope {
575579 contentEnabled: edgeDemo.panelContentEnabled
576580 }
577581 fullscreenMode: shell.fullscreenMode
578− searchVisible: !greeter.shown && !lockscreen.shown
582+ searchVisible: !greeter.shown && !lockscreen.shown && dash.shown
579583
580584 InputFilterArea {
581585 anchors {
@@ -694,10 +698,17 @@ FocusScope {
694698 PropertyChanges { target: notifications; width: units.gu(38) }
695699 }
696700 ]
701+
702+ InputFilterArea {
703+ anchors { left: parent.left; right: parent.right }
704+ height: parent.contentHeight
705+ blockInput: height > 0
706+ }
697707 }
698708 }
699709
700710 focus: true
711+ onFocusChanged: if (!focus) forceActiveFocus();
701712
702713 InputFilterArea {
703714 anchors {
@@ -725,6 +736,11 @@ FocusScope {
725736 value: "unity8"
726737 }
727738
739+ OSKController {
740+ anchors.topMargin: panel.panelHeight
741+ anchors.fill: parent // as needs to know the geometry of the shell
742+ }
743+
728744 //FIXME: This should be handled in the input stack, keyboard shouldnt propagate
729745 MouseArea {
730746 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+215
@@ -1,3 +1,218 @@
1+unity8 (7.83) UNRELEASED; urgency=low
2+
3+ * Replace ubuntu-touch-session's unity8.conf upstart job.
4+
5+ -- Michał Sawicz <michal.sawicz@canonical.com> Tue, 15 Oct 2013 01:12:45 +0200
6+
7+unity8 (7.82+13.10.20131011.2-0ubuntu1) saucy; urgency=low
8+
9+ [ Michał Sawicz ]
10+ * Work around Mir not delivering input to shell after restart, if the
11+ device isn't reinitialized.
12+
13+ [ Albert Astals ]
14+ * Remove unused DashMusic/DashVideos.
15+ * Don't let the user change between scopes if the current one is
16+ moving up/down.
17+ * Fix two uninitialized variable uses reported by valgrind ==17988==
18+ Conditional jump or move depends on uninitialised value(s) ==17988==
19+ at 0x13839F3A: AccountsService::updateDemoEdges()
20+ (AccountsService.cpp:74) ==17988== by 0x13839DA5:
21+ AccountsService::setUser(QString const&) (AccountsService.cpp:45)
22+ ==17988== by 0x1383F67B:
23+ AccountsService::qt_metacall(QMetaObject::Call, int, void**)
24+ (moc_AccountsService.cpp:192) ==17988== by 0x496143D:
25+ StoreProperty(QV8Engine*, QObject*, QQmlPropertyData*,
26+ v8::Handle<v8::Value>) (in /usr/lib/arm-linux-
27+ gnueabihf/libQt5Qml.so.5.0.2) ==17988== ==17988== Conditional jump
28+ or move depends on uninitialised value(s) ==17988== at 0x1383A0F6:
29+ AccountsService::updateStatsWelcomeScreen() (AccountsService.cpp:92)
30+ ==17988== by 0x13839DB1: AccountsService::setUser(QString const&)
31+ (AccountsService.cpp:47) ==17988== by 0x1383F67B:
32+ AccountsService::qt_metacall(QMetaObject::Call, int, void**)
33+ (moc_AccountsService.cpp:192) ==17988== by 0x496143D:
34+ StoreProperty(QV8Engine*, QObject*, QQmlPropertyData*,
35+ v8::Handle<v8::Value>) (in /usr/lib/arm-linux-
36+ gnueabihf/libQt5Qml.so.5.0.2)
37+ * Fix unitialized variable in Scope ==18457== Conditional jump or move
38+ depends on uninitialised value(s) ==18457== at 0x15AD1FD6:
39+ Scope::setActive(bool) (scope.cpp:165) ==18457== by 0x15B0023D:
40+ Scope::qt_metacall(QMetaObject::Call, int, void**)
41+ (moc_scope.cpp:478) ==18457== by 0x48B709F:
42+ QQmlPropertyPrivate::write(QObject*, QQmlPropertyData const&,
43+ QVariant const&, QQmlContextData*,
44+ QFlags<QQmlPropertyPrivate::WriteFlag>) (in /usr/lib/arm-linux-
45+ gnueabihf/libQt5Qml.so.5.0.2)
46+ * Fix crash on the phone For some reason i'm getting v8 crashes
47+ without this when shuting down unity-mir
48+
49+ [ Gerry Boland ]
50+ * Use focusRequested signal from AppManager. WM: AppManager has new
51+ signal to ask shell to request focus for app - use it to properly
52+ animate and focus the app. If app wants to be side stage, but no
53+ side stage available, override the application stage.
54+
55+ [ Nick Dedekind ]
56+ * Only use the root action state as a unitymenumodel ActionStateParser
57+ when needed.
58+
59+ [ Andrea Cimitan ]
60+ * Move the close app icon on top left.
61+ * The header of category list is already on screen after unlock
62+
63+ [ Michael Zanetti ]
64+ * Make the greeter's clock update in sync with the indicators.
65+
66+ [ Omer Akram ]
67+ * Increase dash header height to 5gu.
68+
69+ [ Nicolas d'Offay ]
70+ * Standardised expansion speed in scopes.
71+
72+ [ Ubuntu daily release ]
73+ * Automatic snapshot from revision 449
74+
75+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Fri, 11 Oct 2013 17:26:34 +0000
76+
77+unity8 (7.82+13.10.20131011.1-0ubuntu1) saucy; urgency=low
78+
79+ [ Michał Sawicz ]
80+ * Fix frequent application IDs and drop old AppsAvailableForDownload
81+ model.
82+ * Unrevert r388 now that we have fixed the infinite loop it was
83+ causing in Qt.
84+
85+ [ Steve Langasek ]
86+ * Don't keep a long-lived connection open to upstart when we only use
87+ it for two events, one at load time and one at unload time.
88+
89+ [ Lars Uebernickel ]
90+ * VolumeControl: use 'volume' instead of 'scroll' action The volume
91+ action doesn't show a notification.
92+
93+ [ Michael Terry ]
94+ * Disable DragHandle on right side of screen while the greeter is
95+ animating
96+
97+ [ Marcus Tomlinson ]
98+ * Added missing "enabled" property to "progressMenu" component in the
99+ menu item factory.
100+
101+ [ Michael Zanetti ]
102+ * Add scaleTo: "fit" mode support to LazyImage
103+
104+ [ Andrea Cimitan ]
105+ * Add music and video renderers
106+ * Use shell.edgeSize for BottomBar's EdgeDragArea, detecting gestures
107+ only when they are within the edgeSize.
108+
109+ [ Nick Dedekind ]
110+ * Removed greeter "toHome" animation (LP#1092976) (LP: #1092976)
111+ * Only show Snap Decision notification actions when available.
112+
113+ [ Albert Astals ]
114+ * Dash: Set delegate creation range for inner itemviewss If it's above
115+ the list viewport we set it to the end of the list to precache the
116+ last items It it's below the list viewport we set it to the
117+ beginning to precache the first items Otherwise we set it to the
118+ part of the viewport in the view Approved by: Michał Sawicz.
119+
120+ [ Ubuntu daily release ]
121+ * Automatic snapshot from revision 435
122+
123+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Fri, 11 Oct 2013 09:05:30 +0000
124+
125+unity8 (7.82+13.10.20131010-0ubuntu1) saucy; urgency=low
126+
127+ [ David Callé ]
128+ * Small logic change in preview descriptions line breaks. Multiple new
129+ lines are now replaced by multiple br tags.
130+
131+ [ Nick Dedekind ]
132+ * Use indicator identifier for indicators-client list item label.
133+ * Make sure overflow indicators are hidden and not the search label.
134+
135+ [ Mirco Müller ]
136+ * Tweaks to notifications to improve spec-compliance. - updated
137+ notifications-qmltest to reflect the use of a variant-map for the
138+ hints - made text-fields as heigh as buttons - made the summary
139+ align horizontally to the icon - updated button-height and bubble-
140+ background.
141+
142+ [ Pawel Stolowski ]
143+ * Handle category_order_changes signal from scopes (used in Home only)
144+ and reorder categories accordingly.
145+ * Implementation of albumart image provider for audio content.
146+
147+ [ Michael Terry ]
148+ * Hide the greeter when an app is focused, fixing snap decisions
149+ launching an app in the greeter (like receiving a call).
150+
151+ [ Michael Zanetti ]
152+ * Launcher - remove support for pinning items in the backend After the
153+ latest design changes, recent apps is everything that is contained
154+ in the ApplicationManager. So no need for storing anything else than
155+ pinned apps in the config.
156+
157+ [ Michał Sawicz ]
158+ * Remove the mir socket before starting unity8 during autopilot tests.
159+
160+ [ Ubuntu daily release ]
161+ * Automatic snapshot from revision 420
162+
163+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Thu, 10 Oct 2013 04:15:13 +0000
164+
165+unity8 (7.82+13.10.20131008.1-0ubuntu1) saucy; urgency=low
166+
167+ [ Michal Hruby ]
168+ * Add Scope::isActive property and corresponding tests. (LP: #1230352)
169+
170+ [ Daniel d'Andrada ]
171+ * Move OSKController to the front as it will now also block input
172+ meant to the OSK That's in the unity-mir implementation. The
173+ SurfaceFlinger one is still an empty noop. Currently, when the OSK
174+ is up, both shell and OSK get user input, thus we need the
175+ OSKController to shield our shell components from them. (LP:
176+ #1236773)
177+
178+ [ Michał Sawicz ]
179+ * Add Scope::isActive property and corresponding tests. (LP: #1230352)
180+ * Force focus back on shell in case it loses it for some reason.
181+
182+ [ Ubuntu daily release ]
183+ * Automatic snapshot from revision 409
184+
185+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Tue, 08 Oct 2013 19:14:20 +0000
186+
187+unity8 (7.82+13.10.20131008-0ubuntu1) saucy; urgency=low
188+
189+ [ Michał Sawicz ]
190+ * update previews to match design. (LP: #1224555)
191+ * Add an InputFilterArea in Notifications. (LP: #1233411, #1235215)
192+
193+ [ Ying-Chun Liu ]
194+ * update previews to match design. (LP: #1224555)
195+
196+ [ Albert Astals ]
197+ * Unrevert 376 by reverting r395 and a small fix to fix the cpu
198+ hogging issue . (LP: #1124567)
199+
200+ [ Michael Terry ]
201+ * Add Showable.showNow() method and use it in Shell to immediately
202+ show greeter when we blank the screen rather than animating it. (LP:
203+ #1233564)
204+
205+ [ Michael Zanetti ]
206+ * update previews to match design. (LP: #1224555)
207+
208+ [ Diego Sarmentero ]
209+ * update previews to match design. (LP: #1224555)
210+
211+ [ Ubuntu daily release ]
212+ * Automatic snapshot from revision 404
213+
214+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Tue, 08 Oct 2013 02:57:55 +0000
215+
1216unity8 (7.82+13.10.20131007-0ubuntu1) saucy; urgency=low
2217
3218 [ Michał Sawicz ]
debian/control+3
@@ -26,6 +26,7 @@ Build-Depends: cmake,
2626 libupstart-dev,
2727 libusermetricsoutput1-dev,
2828 libxcb1-dev,
29+ libglib2.0-dev,
2930 pkg-config,
3031 python:any (>= 2.7),
3132 python-setuptools,
@@ -41,6 +42,7 @@ Build-Depends: cmake,
4142 qtdeclarative5-test-plugin,
4243 qtdeclarative5-ubuntu-ui-toolkit-plugin,
4344 qtdeclarative5-xmllistmodel-plugin,
45+ libqt5xmlpatterns5-dev,
4446 ttf-ubuntu-font-family,
4547Standards-Version: 3.9.4
4648Homepage: http://launchpad.net/unity
@@ -80,6 +82,7 @@ Depends: gsettings-desktop-schemas,
8082 ${shlibs:Depends},
8183Recommends: ${unity-default-masterscopes},
8284Breaks: indicator-network (<< 0.5.1)
85+Replaces: ubuntu-touch-session (<< 0.82~)
8386Description: Unity 8 shell
8487 The Unity 8 shell is the primary user interface for Ubuntu devices.
8588
debian/unity8.install+1
@@ -13,3 +13,4 @@ usr/share/unity8/Panel
1313usr/share/unity8/Shell.qml
1414usr/share/unity8/SideStage
1515usr/share/unity8/graphics
16+data/unity8.conf usr/share/upstart/sessions/
main.cpp+1
@@ -177,6 +177,7 @@ int startShell(int argc, const char** argv, void* server)
177177
178178 int result = application->exec();
179179
180+ delete view;
180181 delete mouseTouchAdaptor;
181182 delete application;
182183
plugins/AccountsService/AccountsService.cpp+3−1
@@ -24,7 +24,9 @@
2424AccountsService::AccountsService(QObject* parent)
2525 : QObject(parent),
2626 m_service(new AccountsServiceDBusAdaptor(this)),
27− m_user(qgetenv("USER"))
27+ m_user(qgetenv("USER")),
28+ m_demoEdges(false),
29+ m_statsWelcomeScreen(false)
2830{
2931 connect(m_service, SIGNAL(propertiesChanged(const QString &, const QString &, const QStringList &)),
3032 this, SLOT(propertiesChanged(const QString &, const QString &, const QStringList &)));
plugins/Unity/CMakeLists.txt+1−1
@@ -6,7 +6,7 @@ add_subdirectory(Indicators)
66# Dependencies
77include(FindPkgConfig)
88pkg_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)
1010
1111include_directories(
1212 ${CMAKE_CURRENT_SOURCE_DIR}
plugins/Unity/Indicators/indicatorsmanager.cpp+20−24
@@ -47,34 +47,13 @@ public:
4747IndicatorsManager::IndicatorsManager(QObject* parent)
4848 : QObject(parent)
4949 , m_loaded(false)
50− , m_upstart(NULL)
5150{
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− }
6851}
6952
7053IndicatorsManager::~IndicatorsManager()
7154{
7255 unload();
7356
74− if (m_upstart != NULL) {
75− nih_unref(m_upstart, NULL);
76− m_upstart = NULL;
77− }
7857}
7958
8059void IndicatorsManager::load()
@@ -235,17 +214,34 @@ void IndicatorsManager::setLoaded(bool loaded)
235214 m_loaded = loaded;
236215 Q_EMIT loadedChanged(m_loaded);
237216
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) {
239233 int event_sent = 0;
240234 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);
242236 } 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);
244238 }
245239
246240 if (event_sent != 0) {
247241 qWarning() << "Unable to send indicator event to Upstart";
248242 }
243+ nih_unref(upstart, NULL);
244+ upstart = NULL;
249245 }
250246 }
251247}
plugins/Unity/Indicators/indicatorsmanager.h−1
@@ -71,7 +71,6 @@ private:
7171 QHash<QString, IndicatorData*> m_indicatorsData;
7272 QSharedPointer<QFileSystemWatcher> m_fsWatcher;
7373 bool m_loaded;
74− NihDBusProxy * m_upstart;
7574};
7675
7776#endif // INDICATORS_MANAGER_H
plugins/Unity/Indicators/qml/MenuItemFactory.qml+1
@@ -115,6 +115,7 @@ Item {
115115 text: menu && menu.label ? menu.label : ""
116116 icon: menu ? menu.icon : ""
117117 value : menu ? menu.actionState : 0.0
118+ enabled: menu ? menu.sensitive : false
118119 }
119120 }
120121
plugins/Unity/Indicators/rootactionstate.cpp+15−1
@@ -57,7 +57,7 @@ void RootActionState::setMenu(UnityMenuModel* menu)
5757 connect(m_menu, SIGNAL(rowsRemoved(const QModelIndex&, int, int)), SLOT(onModelRowsRemoved(const QModelIndex&, int, int)));
5858 connect(m_menu, SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&, const QVector<int>&)), SLOT(onModelDataChanged(const QModelIndex&, const QModelIndex&, const QVector<int>&)));
5959
60− m_menu->setActionStateParser(this);
60+ connect(m_menu, SIGNAL(destroyed()), SLOT(reset()));
6161 }
6262 updateActionState();
6363 Q_EMIT menuChanged();
@@ -92,10 +92,24 @@ void RootActionState::onModelDataChanged(const QModelIndex& topLeft, const QMode
9292 }
9393}
9494
95+void RootActionState::reset()
96+{
97+ m_cachedState.clear();
98+ m_menu = NULL;
99+
100+ Q_EMIT menuChanged();
101+ Q_EMIT updated();
102+}
103+
95104void RootActionState::updateActionState()
96105{
97106 if (m_menu && m_menu->rowCount() > 0) {
107+ ActionStateParser* oldParser = m_menu->actionStateParser();
108+ m_menu->setActionStateParser(this);
109+
98110 m_cachedState = m_menu->get(0, "actionState").toMap();
111+
112+ m_menu->setActionStateParser(oldParser);
99113 } else {
100114 m_cachedState.clear();
101115 }
plugins/Unity/Indicators/rootactionstate.h+1
@@ -77,6 +77,7 @@ private Q_SLOTS:
7777 void onModelRowsAdded(const QModelIndex& parent, int start, int end);
7878 void onModelRowsRemoved(const QModelIndex& parent, int start, int end);
7979 void onModelDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight, const QVector<int>&);
80+ void reset();
8081
8182private:
8283 void updateActionState();
plugins/Unity/Launcher/backend/launcherbackend.cpp−33
@@ -30,12 +30,9 @@
3030class LauncherBackendItem
3131{
3232public:
33− LauncherBackendItem(): pinned(false) {}
34−
3533 QString desktopFile;
3634 QString displayName;
3735 QString icon;
38− bool pinned;
3936};
4037
4138LauncherBackend::LauncherBackend(QObject *parent):
@@ -135,32 +132,6 @@ QString LauncherBackend::icon(const QString &appId) const
135132 return iconName;
136133}
137134
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−
164135QList<QuickListEntry> LauncherBackend::quickList(const QString &appId) const
165136{
166137 // TODO: Get static (from .desktop file) and dynamic (from the app itself)
@@ -233,7 +204,6 @@ void LauncherBackend::syncFromAccounts()
233204 if (!m_itemCache.contains(appId)) {
234205 m_itemCache.insert(appId, parseDesktopFile(df));
235206 }
236− m_itemCache.value(appId)->pinned = true;
237207 }
238208 }
239209 }
@@ -305,7 +275,6 @@ LauncherBackendItem* LauncherBackend::parseDesktopFile(const QString &desktopFil
305275 } else {
306276 item->icon = "image://theme/" + iconString;
307277 }
308− item->pinned = false;
309278 return item;
310279}
311280
@@ -326,7 +295,6 @@ void LauncherBackend::loadFromVariant(const QVariantMap &details)
326295 item->desktopFile = details.value("desktopFile").toString();
327296 item->displayName = details.value("name").toString();
328297 item->icon = details.value("icon").toString();
329− item->pinned = details.value("is-pinned").toBool();
330298
331299 m_itemCache.insert(appId, item);
332300 m_storedApps.append(appId);
@@ -340,7 +308,6 @@ QVariantMap LauncherBackend::itemToVariant(const QString &appId) const
340308 details.insert("name", item->displayName);
341309 details.insert("icon", item->icon);
342310 details.insert("desktopFile", item->desktopFile);
343− details.insert("is-pinned", item->pinned);
344311 return details;
345312}
346313
plugins/Unity/Launcher/backend/launcherbackend.h−15
@@ -88,21 +88,6 @@ public:
8888 */
8989 QString icon(const QString &appId) const;
9090
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−
10691 /**
10792 * @brief Get the QuickList for an application.
10893 * @param appId The ID of the application.
plugins/Unity/Launcher/launchermodel.cpp+3−7
@@ -38,11 +38,7 @@ LauncherModel::LauncherModel(QObject *parent):
3838 m_backend->displayName(entry),
3939 m_backend->icon(entry),
4040 this);
41− if (m_backend->isPinned(entry)) {
42− item->setPinned(true);
43− } else {
44− item->setRecent(true);
45− }
41+ item->setPinned(true);
4642 m_list.append(item);
4743 }
4844}
@@ -129,11 +125,12 @@ void LauncherModel::pin(const QString &appId, int index)
129125 if (currentIndex >= 0) {
130126 if (index == -1 || index == currentIndex) {
131127 m_list.at(currentIndex)->setPinned(true);
132− m_backend->setPinned(appId, true);
133128 QModelIndex modelIndex = this->index(currentIndex);
134129 Q_EMIT dataChanged(modelIndex, modelIndex);
135130 } else {
136131 move(currentIndex, index);
132+ // move() will store the list to the backend itself, so just exit at this point.
133+ return;
137134 }
138135 } else {
139136 if (index == -1) {
@@ -144,7 +141,6 @@ void LauncherModel::pin(const QString &appId, int index)
144141 m_backend->displayName(appId),
145142 m_backend->icon(appId));
146143 item->setPinned(true);
147− m_backend->setPinned(appId, true);
148144 m_list.insert(index, item);
149145 endInsertRows();
150146 }
plugins/Unity/categories.cpp+72−17
@@ -90,9 +90,37 @@ void Categories::onCategoriesModelChanged(unity::glib::Object<DeeModel> model)
9090 delete model;
9191 }
9292 m_results.clear();
93+ m_categoryOrder.clear();
94+
9395 setModel(model);
9496}
9597
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+
96124void
97125Categories::setUnityScope(const unity::dash::Scope::Ptr& scope)
98126{
@@ -101,9 +129,11 @@ Categories::setUnityScope(const unity::dash::Scope::Ptr& scope)
101129 // no need to call this, we'll get notified
102130 //setModel(m_unityScope->categories()->model());
103131
104− m_categoriesChangedConnection.disconnect();
105− m_categoriesChangedConnection =
106− m_unityScope->categories()->model.changed.connect(sigc::mem_fun(this, &Categories::onCategoriesModelChanged));
132+ m_signals.disconnectAll();
133+ m_signals << m_unityScope->categories()->model.changed.connect(sigc::mem_fun(this, &Categories::onCategoriesModelChanged));
134+
135+ // FIXME: Don't handle category order changes for now as it causes UI issues (https://bugs.launchpad.net/unity8/+bug/1239584).
136+ //m_signals << m_unityScope->category_order.changed.connect(sigc::mem_fun(this, &Categories::onCategoryOrderChanged));
107137}
108138
109139void
@@ -111,7 +141,9 @@ Categories::onCountChanged()
111141{
112142 CategoryResults* results = qobject_cast<CategoryResults*>(sender());
113143 if (results) {
114− m_updatedCategories << results->categoryIndex();
144+ if (!m_updatedCategories.contains(results->categoryIndex())) {
145+ m_updatedCategories << results->categoryIndex();
146+ }
115147 m_timer.start();
116148 }
117149}
@@ -142,7 +174,8 @@ Categories::onEmitCountChanged()
142174 roles.append(Categories::RoleCount);
143175 Q_FOREACH(int categoryIndex, m_updatedCategories) {
144176 if (!m_results.contains(categoryIndex)) continue;
145− QModelIndex changedIndex = index(categoryIndex);
177+ const int realIndex = m_categoryOrder.indexOf(categoryIndex);
178+ const QModelIndex changedIndex = index(realIndex);
146179 Q_EMIT dataChanged(changedIndex, changedIndex, roles);
147180 }
148181 m_updatedCategories.clear();
@@ -196,48 +229,70 @@ Categories::data(const QModelIndex& index, int role) const
196229 return QVariant();
197230 }
198231
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+
199252 switch (role) {
200253 case RoleCategoryId:
201− return DeeListModel::data(index, CategoryColumn::ID);
254+ return DeeListModel::data(realIndex, CategoryColumn::ID);
202255 case RoleName:
203− return DeeListModel::data(index, CategoryColumn::DISPLAY_NAME);
256+ return DeeListModel::data(realIndex, CategoryColumn::DISPLAY_NAME);
204257 case RoleIcon:
205− return DeeListModel::data(index, CategoryColumn::ICON_HINT);
258+ return DeeListModel::data(realIndex, CategoryColumn::ICON_HINT);
206259 case RoleRenderer:
207− return DeeListModel::data(index, CategoryColumn::RENDERER_NAME);
260+ return DeeListModel::data(realIndex, CategoryColumn::RENDERER_NAME);
208261 case RoleContentType:
209262 {
210− auto hints = DeeListModel::data(index, CategoryColumn::HINTS).toHash();
263+ auto hints = DeeListModel::data(realIndex, CategoryColumn::HINTS).toHash();
211264 return hints.contains("content-type") ? hints["content-type"] : QVariant(QString("default"));
212265 }
213266 case RoleRendererHint:
214267 {
215− auto hints = DeeListModel::data(index, CategoryColumn::HINTS).toHash();
268+ auto hints = DeeListModel::data(realIndex, CategoryColumn::HINTS).toHash();
216269 return hints.contains("renderer-hint") ? hints["renderer-hint"] : QVariant(QString());
217270 }
218271 case RoleProgressSource:
219272 {
220− auto hints = DeeListModel::data(index, CategoryColumn::HINTS).toHash();
273+ auto hints = DeeListModel::data(realIndex, CategoryColumn::HINTS).toHash();
221274 return hints.contains("progress-source") ? hints["progress-source"] : QVariant();
222275 }
223276 case RoleHints:
224− return DeeListModel::data(index, CategoryColumn::HINTS);
277+ return DeeListModel::data(realIndex, CategoryColumn::HINTS);
225278 case RoleResults:
226279 if (m_overriddenCategories.size() > 0)
227280 {
228− auto id = DeeListModel::data(index, CategoryColumn::ID).toString();
281+ auto id = DeeListModel::data(realIndex, CategoryColumn::ID).toString();
229282 if (m_overriddenCategories.find(id) != m_overriddenCategories.end())
230283 return QVariant::fromValue(m_overriddenCategories[id]);
231284 }
232− return QVariant::fromValue(getResults(index.row()));
285+ return QVariant::fromValue(getResults(realRow));
233286 case RoleCount:
234287 if (m_overriddenCategories.size() > 0)
235288 {
236− auto id = DeeListModel::data(index, CategoryColumn::ID).toString();
289+ auto id = DeeListModel::data(realIndex, CategoryColumn::ID).toString();
237290 if (m_overriddenCategories.find(id) != m_overriddenCategories.end())
291+ {
238292 return QVariant::fromValue(m_overriddenCategories[id]->rowCount());
293+ }
239294 }
240− return QVariant::fromValue(getResults(index.row())->rowCount());
295+ return QVariant::fromValue(getResults(realRow)->rowCount());
241296 default:
242297 return QVariant();
243298 }
plugins/Unity/categories.h+10−1
@@ -32,6 +32,9 @@
3232#include <QSet>
3333#include <QTimer>
3434
35+// local
36+#include "signalslist.h"
37+
3538class Categories : public DeeListModel
3639{
3740 Q_OBJECT
@@ -71,6 +74,7 @@ private Q_SLOTS:
7174
7275private:
7376 void onCategoriesModelChanged(unity::glib::Object<DeeModel> model);
77+ void onCategoryOrderChanged(const std::vector<unsigned int>& cat_order);
7478
7579 DeeListModel* getResults(int index) const;
7680
@@ -80,7 +84,12 @@ private:
8084 QHash<int, QByteArray> m_roles;
8185 QMap<QString, QAbstractItemModel*> m_overriddenCategories;
8286 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;
8493};
8594
8695#endif // CATEGORIES_H
plugins/Unity/categoryresults.cpp+2−1
@@ -81,8 +81,9 @@ CategoryResults::data(const QModelIndex& index, int role) const
8181 case RoleIconHint: {
8282 QString giconString(DeeListModel::data(index, ResultsColumn::ICON_HINT).toString());
8383 if (giconString.isEmpty()) {
84+ QString mimetype(DeeListModel::data(index, ResultsColumn::MIMETYPE).toString());
8485 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()));
8687 if (!thumbnailerUri.isNull()) {
8788 return QVariant::fromValue(thumbnailerUri);
8889 }
plugins/Unity/iconutils.cpp+24−3
@@ -25,6 +25,7 @@
2525
2626#define BASE_THEME_ICON_URI "image://theme/"
2727#define BASE_THUMBNAILER_URI "image://thumbnailer/"
28+#define BASE_ALBUMART_URI "image://albumart/"
2829
2930QString gIconToDeclarativeImageProviderString(QString const &giconString)
3031{
@@ -91,11 +92,31 @@ QString gIconToDeclarativeImageProviderString(QString const &giconString)
9192 return result;
9293}
9394
94−QString uriToThumbnailerProviderString(QString const &uri)
95+QString uriToThumbnailerProviderString(QString const &uri, QString const &mimetype, QVariantHash const &metadata)
9596{
9697 if (uri.startsWith(QLatin1String("file:///"))) {
97− QString thumbnailerUri(BASE_THUMBNAILER_URI);
98− thumbnailerUri.append(uri.midRef(7));
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 {
117+ thumbnailerUri = BASE_THUMBNAILER_URI;
118+ thumbnailerUri.append(uri.midRef(7));
119+ }
99120 return thumbnailerUri;
100121 }
101122
plugins/Unity/iconutils.h+2−1
@@ -21,8 +21,9 @@
2121#define ICONUTILS_H
2222
2323#include <QString>
24+#include <QVariant>
2425
2526QString gIconToDeclarativeImageProviderString(QString const &giconString);
26−QString uriToThumbnailerProviderString(QString const &uri);
27+QString uriToThumbnailerProviderString(QString const &uri, QString const &mimetype, QVariantHash const &metadata);
2728
2829#endif
plugins/Unity/preview.cpp+1−1
@@ -113,7 +113,7 @@ QString Preview::image() const
113113 return result;
114114 } else {
115115 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()));
117117 if (!thumbnailUri.isNull()) return thumbnailUri;
118118 }
119119 } else {
plugins/Unity/scope.cpp+44−6
@@ -40,9 +40,12 @@
4040
4141Scope::Scope(QObject *parent) : QObject(parent)
4242 , m_formFactor("phone")
43+ , m_isActive(false)
4344 , m_searchInProgress(false)
4445{
4546 m_categories.reset(new Categories(this));
47+
48+ connect(this, &Scope::isActiveChanged, this, &Scope::scopeIsActiveChanged);
4649}
4750
4851QString Scope::id() const
@@ -110,6 +113,11 @@ QString Scope::formFactor() const
110113 return m_formFactor;
111114}
112115
116+bool Scope::isActive() const
117+{
118+ return m_isActive;
119+}
120+
113121Filters* Scope::filters() const
114122{
115123 return m_filters.get();
@@ -127,10 +135,12 @@ void Scope::setSearchQuery(const QString& search_query)
127135 if (m_searchQuery.isNull() || search_query != m_searchQuery) {
128136 m_searchQuery = search_query;
129137 m_cancellable.Renew();
130− m_searchInProgress = true;
131138 m_unityScope->Search(search_query.toStdString(), std::bind(&Scope::onSearchFinished, this, _1, _2, _3), m_cancellable);
132139 Q_EMIT searchQueryChanged();
133− Q_EMIT searchInProgressChanged();
140+ if (!m_searchInProgress) {
141+ m_searchInProgress = true;
142+ Q_EMIT searchInProgressChanged();
143+ }
134144 }
135145}
136146
@@ -152,6 +162,13 @@ void Scope::setFormFactor(const QString& form_factor) {
152162 }
153163}
154164
165+void Scope::setActive(const bool active) {
166+ if (active != m_isActive) {
167+ m_isActive = active;
168+ Q_EMIT isActiveChanged(m_isActive);
169+ }
170+}
171+
155172unity::dash::LocalResult Scope::createLocalResult(const QVariant &uri, const QVariant &icon_hint,
156173 const QVariant &category, const QVariant &result_type,
157174 const QVariant &mimetype, const QVariant &title,
@@ -306,6 +323,7 @@ void Scope::setUnityScope(const unity::dash::Scope::Ptr& scope)
306323 m_unityScope->visible.changed.connect(sigc::mem_fun(this, &Scope::visibleChanged));
307324 m_unityScope->shortcut.changed.connect(sigc::mem_fun(this, &Scope::shortcutChanged));
308325 m_unityScope->connected.changed.connect(sigc::mem_fun(this, &Scope::connectedChanged));
326+ m_unityScope->results_dirty.changed.connect(sigc::mem_fun(this, &Scope::resultsDirtyToggled));
309327
310328 /* FIXME: signal should be forwarded instead of calling the handler directly */
311329 m_unityScope->activated.connect(sigc::mem_fun(this, &Scope::onActivated));
@@ -332,13 +350,31 @@ void Scope::synchronizeStates()
332350 /* Forward local states to m_unityScope */
333351 if (!m_searchQuery.isNull()) {
334352 m_cancellable.Renew();
335− m_searchInProgress = true;
336353 m_unityScope->Search(m_searchQuery.toStdString(), std::bind(&Scope::onSearchFinished, this, _1, _2, _3), m_cancellable);
337− Q_EMIT searchInProgressChanged();
354+ if (!m_searchInProgress) {
355+ m_searchInProgress = true;
356+ Q_EMIT searchInProgressChanged();
357+ }
338358 }
339359 }
340360}
341361
362+void Scope::scopeIsActiveChanged()
363+{
364+ if (!isActive() || !m_unityScope || !m_unityScope->results_dirty()) return;
365+
366+ // force new search
367+ synchronizeStates();
368+}
369+
370+void Scope::resultsDirtyToggled(bool results_dirty)
371+{
372+ if (!results_dirty || !isActive()) return;
373+
374+ // force new search
375+ synchronizeStates();
376+}
377+
342378void Scope::onSearchFinished(std::string const& /* query */, unity::glib::HintsMap const& hints, unity::glib::Error const& err)
343379{
344380 QString hint;
@@ -346,8 +382,10 @@ void Scope::onSearchFinished(std::string const& /* query */, unity::glib::HintsM
346382 GError* error = const_cast<unity::glib::Error&>(err);
347383
348384 if (!err || !g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
349− m_searchInProgress = false;
350− Q_EMIT searchInProgressChanged();
385+ if (m_searchInProgress) {
386+ m_searchInProgress = false;
387+ Q_EMIT searchInProgressChanged();
388+ }
351389 } else {
352390 // no need to check the results hint, we're still searching
353391 return;
plugins/Unity/scope.h+7
@@ -54,6 +54,7 @@ class Scope : public QObject
5454 Q_PROPERTY(QString searchQuery READ searchQuery WRITE setSearchQuery NOTIFY searchQueryChanged)
5555 Q_PROPERTY(QString noResultsHint READ noResultsHint WRITE setNoResultsHint NOTIFY noResultsHintChanged)
5656 Q_PROPERTY(QString formFactor READ formFactor WRITE setFormFactor NOTIFY formFactorChanged)
57+ Q_PROPERTY(bool isActive READ isActive WRITE setActive NOTIFY isActiveChanged)
5758
5859public:
5960 explicit Scope(QObject *parent = 0);
@@ -73,11 +74,13 @@ public:
7374 QString searchQuery() const;
7475 QString noResultsHint() const;
7576 QString formFactor() const;
77+ bool isActive() const;
7678
7779 /* setters */
7880 void setSearchQuery(const QString& search_query);
7981 void setNoResultsHint(const QString& hint);
8082 void setFormFactor(const QString& form_factor);
83+ void setActive(const bool);
8184
8285 Q_INVOKABLE void activate(const QVariant &uri, const QVariant &icon_hint, const QVariant &category,
8386 const QVariant &result_type, const QVariant &mimetype, const QVariant &title,
@@ -106,6 +109,7 @@ Q_SIGNALS:
106109 void searchQueryChanged();
107110 void noResultsHintChanged();
108111 void formFactorChanged();
112+ void isActiveChanged(bool);
109113 void filtersChanged();
110114
111115 // signals triggered by activate(..) or preview(..) requests.
@@ -118,6 +122,7 @@ Q_SIGNALS:
118122
119123private Q_SLOTS:
120124 void synchronizeStates();
125+ void scopeIsActiveChanged();
121126 void onSearchFinished(std::string const &, unity::glib::HintsMap const &, unity::glib::Error const&);
122127
123128private:
@@ -129,6 +134,7 @@ private:
129134 void onActivated(unity::dash::LocalResult const& result, unity::dash::ScopeHandledType type, unity::glib::HintsMap const& hints);
130135 void onPreviewReady(unity::dash::LocalResult const& result, unity::dash::Preview::Ptr const& preview);
131136 void fallbackActivate(const QString& uri);
137+ void resultsDirtyToggled(bool);
132138
133139 unity::dash::Scope::Ptr m_unityScope;
134140 std::unique_ptr<Categories> m_categories;
@@ -136,6 +142,7 @@ private:
136142 QString m_searchQuery;
137143 QString m_noResultsHint;
138144 QString m_formFactor;
145+ bool m_isActive;
139146 bool m_searchInProgress;
140147 unity::glib::Cancellable m_cancellable;
141148 unity::glib::Cancellable m_previewCancellable;
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+
16include_directories(
27 ${CMAKE_CURRENT_SOURCE_DIR}
38 ${CMAKE_CURRENT_BINARY_DIR}
49 ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
10+ ${GIO_INCLUDE_DIRS}
511)
612
713set(QMLPLUGIN_SRC
14+ albumartprovider.cpp
815 applicationpaths.h
16+ mediaartcache.cpp
917 qlimitproxymodelqml.cpp
1018 qsortfilterproxymodelqml.cpp
1119 ubuntuwindow.cpp
@@ -16,13 +24,16 @@ set(QMLPLUGIN_SRC
1624add_library(Utils-qml SHARED
1725 ${QMLPLUGIN_SRC}
1826 )
27+
28+target_link_libraries(Utils-qml ${GIO_LDFLAGS})
29+
1930# Because this is an internal support library, we want
2031# to expose all symbols in it. Consider changing this
2132# either to a static library or just using the
2233# files directly in targets.
2334set_target_properties(Utils-qml PROPERTIES COMPILE_FLAGS -fvisibility=default)
2435
25−qt5_use_modules(Utils-qml Qml Quick DBus)
36+qt5_use_modules(Utils-qml Qml Quick DBus Network XmlPatterns)
2637
2738# export the qmldir qmltypes and plugin files
2839export_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 @@
1919// Qt
2020#include <QtQml/qqml.h>
2121#include <QtQuick/QQuickWindow>
22−
22+#include <QDebug>
2323// self
2424#include "plugin.h"
2525
2626// local
27+#include "albumartprovider.h"
2728#include "applicationpaths.h"
2829#include "qlimitproxymodelqml.h"
2930#include "qsortfilterproxymodelqml.h"
@@ -46,3 +47,21 @@ void UtilsPlugin::registerTypes(const char *uri)
4647 qmlRegisterExtendedType<QQuickWindow, UbuntuWindow>(uri, 0, 1, "Window");
4748 qmlRegisterSingletonType<ApplicationPaths>(uri, 0, 1, "ApplicationPaths", applicationsPathsSingleton);
4849}
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
2929
3030public:
3131 void registerTypes(const char *uri);
32+ void initializeEngine(QQmlEngine *engine, const char *uri);
3233};
3334
3435#endif
po/ar.po+34−54
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-06-26 23:26+0000\n"
1212"Last-Translator: Ibrahim Saed <ibraheem5000@gmail.com>\n"
1313"Language-Team: Arabic <ar@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= "
1818"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"
20−"X-Generator: Launchpad (build 16774)\n"
19+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
20+"X-Generator: Launchpad (build 16799)\n"
2121
2222#: Applications/applications.js:23
2323msgid "Phone"
@@ -87,7 +87,7 @@ msgstr "ويكيبيديا"
8787msgid "YouTube"
8888msgstr "يوتيوب"
8989
90−#: Components/EdgeDemoOverlay.qml:150
90+#: Components/EdgeDemoOverlay.qml:149
9191msgid "Skip intro"
9292msgstr ""
9393
@@ -133,84 +133,46 @@ msgid ""
133133"phone<br><br>Tap anywhere to start"
134134msgstr ""
135135
136−#: Components/PageHeader.qml:298
136+#: Components/PageHeader.qml:341
137137msgid "Recent searches"
138138msgstr "عمليات البحث الأخيرة"
139139
140140#. TRANSLATORS: Number of persons who rated this app
141−#: Dash/Apps/AppInfo.qml:73
141+#. TRANSLATORS: Number of persons who rated this app/video/whatever
142+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
142143#, qt-format
143144msgid "(%1)"
144145msgstr ""
145146
146147#. TRANSLATORS: Number of persons who wrote reviews for this app
147−#: Dash/Apps/AppInfo.qml:85
148+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
149+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
148150#, qt-format
149151msgid "%1 review"
150152msgid_plural "%1 reviews"
151153msgstr[0] ""
152154msgstr[1] ""
153155
154−#: Dash/Apps/AppPreview.qml:178
156+#: Dash/Apps/AppPreview.qml:126
155157msgid "Rate this"
156158msgstr ""
157159
158−#: Dash/Apps/AppReviews.qml:74
160+#: Dash/Previews/Reviews.qml:74
159161msgid "Add a review"
160162msgstr ""
161163
162−#: Dash/Apps/AppReviews.qml:86
164+#: Dash/Previews/Reviews.qml:86
163165msgid "Review"
164166msgstr ""
165167
166−#: Dash/Apps/AppReviews.qml:121
168+#: Dash/Previews/Reviews.qml:121
167169msgid "Send"
168170msgstr ""
169171
170−#: Dash/Apps/AppReviews.qml:139
172+#: Dash/Previews/Reviews.qml:139
171173msgid "Comments:"
172174msgstr ""
173175
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−
214176#: Greeter/Lockscreen.qml:142
215177msgid "Emergency Call"
216178msgstr ""
@@ -248,7 +210,7 @@ msgstr "تتكلم الآن..."
248210msgid "Search"
249211msgstr "ابحث"
250212
251−#: plugins/Unity/scope.cpp:336
213+#: plugins/Unity/scope.cpp:398
252214msgid "Sorry, there is nothing that matches your search."
253215msgstr "عذراً، لا يوجد ما يطابق بحثك."
254216
@@ -256,7 +218,25 @@ msgstr "عذراً، لا يوجد ما يطابق بحثك."
256218msgid "All"
257219msgstr ""
258220
259−#: Shell.qml:453
221+#: Shell.qml:438
260222#, qt-format
261223msgid "Please enter %1"
262224msgstr ""
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 ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"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"
1111"PO-Revision-Date: 2013-10-03 14:02+0000\n"
1212"Last-Translator: ivarela <ivarela@ubuntu.com>\n"
1313"Language-Team: Asturian <ast@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-04 06:11+0000\n"
19−"X-Generator: Launchpad (build 16791)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "Wikipedia"
8686msgid "YouTube"
8787msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr "Omitir la intro"
9292
@@ -136,84 +136,46 @@ msgstr ""
136136"Agora domines los xestos de berbesos y pues usar el teléfonu<br><br>Toca la "
137137"pantalla pa entamar"
138138
139−#: Components/PageHeader.qml:298
139+#: Components/PageHeader.qml:341
140140msgid "Recent searches"
141141msgstr "Busques recientes"
142142
143143#. TRANSLATORS: Number of persons who rated this app
144−#: Dash/Apps/AppInfo.qml:73
144+#. TRANSLATORS: Number of persons who rated this app/video/whatever
145+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
145146#, qt-format
146147msgid "(%1)"
147148msgstr "(%1)"
148149
149150#. TRANSLATORS: Number of persons who wrote reviews for this app
150−#: Dash/Apps/AppInfo.qml:85
151+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
152+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
151153#, qt-format
152154msgid "%1 review"
153155msgid_plural "%1 reviews"
154156msgstr[0] "%1 reseña"
155157msgstr[1] "%1 reseñes"
156158
157−#: Dash/Apps/AppPreview.qml:178
159+#: Dash/Apps/AppPreview.qml:126
158160msgid "Rate this"
159161msgstr "Valorar esto"
160162
161−#: Dash/Apps/AppReviews.qml:74
163+#: Dash/Previews/Reviews.qml:74
162164msgid "Add a review"
163165msgstr "Amestar una reseña"
164166
165−#: Dash/Apps/AppReviews.qml:86
167+#: Dash/Previews/Reviews.qml:86
166168msgid "Review"
167169msgstr "Revisar"
168170
169−#: Dash/Apps/AppReviews.qml:121
171+#: Dash/Previews/Reviews.qml:121
170172msgid "Send"
171173msgstr "Unviar"
172174
173−#: Dash/Apps/AppReviews.qml:139
175+#: Dash/Previews/Reviews.qml:139
174176msgid "Comments:"
175177msgstr "Comentarios:"
176178
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−
217179#: Greeter/Lockscreen.qml:142
218180msgid "Emergency Call"
219181msgstr "Llamada d'emerxencia"
@@ -251,7 +213,7 @@ msgstr "Falando…"
251213msgid "Search"
252214msgstr "Guetar"
253215
254−#: plugins/Unity/scope.cpp:336
216+#: plugins/Unity/scope.cpp:398
255217msgid "Sorry, there is nothing that matches your search."
256218msgstr "Sentímoslo, nun hai res que concase cola gueta"
257219
@@ -259,7 +221,28 @@ msgstr "Sentímoslo, nun hai res que concase cola gueta"
259221msgid "All"
260222msgstr "Too"
261223
262−#: Shell.qml:453
224+#: Shell.qml:438
263225#, qt-format
264226msgid "Please enter %1"
265227msgstr "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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-06-26 23:48+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Azerbaijani <az@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr ""
9292
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr "Son axtarışlar"
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr ""
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] ""
151153msgstr[1] ""
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr ""
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr ""
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr ""
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr ""
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr ""
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr ""
@@ -247,7 +209,7 @@ msgstr "Söylənilir..."
247209msgid "Search"
248210msgstr "Axtar"
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr "Bağışlayın, amma axtarışınıza heç bir nəticə uyğun gəlmir."
253215
@@ -255,7 +217,13 @@ msgstr "Bağışlayın, amma axtarışınıza heç bir nəticə uyğun gəlmir."
255217msgid "All"
256218msgstr ""
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr ""
224+
225+#~ msgid "Music"
226+#~ msgstr "Musiqi"
227+
228+#~ msgid "Videos"
229+#~ msgstr "Videolar"
po/bg.po+28−54
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-06-27 00:06+0000\n"
1212"Last-Translator: Miroslav E. Hadzhiev (Хаджиев) "
1313"<miroslav.hadzhiev@gmail.com>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Type: text/plain; charset=UTF-8\n"
1717"Content-Transfer-Encoding: 8bit\n"
1818"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
20−"X-Generator: Launchpad (build 16774)\n"
19+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
20+"X-Generator: Launchpad (build 16799)\n"
2121
2222#: Applications/applications.js:23
2323msgid "Phone"
@@ -87,7 +87,7 @@ msgstr "Уикипедия"
8787msgid "YouTube"
8888msgstr "YouTube"
8989
90−#: Components/EdgeDemoOverlay.qml:150
90+#: Components/EdgeDemoOverlay.qml:149
9191msgid "Skip intro"
9292msgstr ""
9393
@@ -133,84 +133,46 @@ msgid ""
133133"phone<br><br>Tap anywhere to start"
134134msgstr ""
135135
136−#: Components/PageHeader.qml:298
136+#: Components/PageHeader.qml:341
137137msgid "Recent searches"
138138msgstr "Скорошни търсения"
139139
140140#. TRANSLATORS: Number of persons who rated this app
141−#: Dash/Apps/AppInfo.qml:73
141+#. TRANSLATORS: Number of persons who rated this app/video/whatever
142+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
142143#, qt-format
143144msgid "(%1)"
144145msgstr ""
145146
146147#. TRANSLATORS: Number of persons who wrote reviews for this app
147−#: Dash/Apps/AppInfo.qml:85
148+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
149+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
148150#, qt-format
149151msgid "%1 review"
150152msgid_plural "%1 reviews"
151153msgstr[0] ""
152154msgstr[1] ""
153155
154−#: Dash/Apps/AppPreview.qml:178
156+#: Dash/Apps/AppPreview.qml:126
155157msgid "Rate this"
156158msgstr ""
157159
158−#: Dash/Apps/AppReviews.qml:74
160+#: Dash/Previews/Reviews.qml:74
159161msgid "Add a review"
160162msgstr ""
161163
162−#: Dash/Apps/AppReviews.qml:86
164+#: Dash/Previews/Reviews.qml:86
163165msgid "Review"
164166msgstr ""
165167
166−#: Dash/Apps/AppReviews.qml:121
168+#: Dash/Previews/Reviews.qml:121
167169msgid "Send"
168170msgstr ""
169171
170−#: Dash/Apps/AppReviews.qml:139
172+#: Dash/Previews/Reviews.qml:139
171173msgid "Comments:"
172174msgstr ""
173175
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−
214176#: Greeter/Lockscreen.qml:142
215177msgid "Emergency Call"
216178msgstr ""
@@ -248,7 +210,7 @@ msgstr ""
248210msgid "Search"
249211msgstr "Търсене"
250212
251−#: plugins/Unity/scope.cpp:336
213+#: plugins/Unity/scope.cpp:398
252214msgid "Sorry, there is nothing that matches your search."
253215msgstr "Съжаляваме, няма нищо, което да отговаря на вашето търсене."
254216
@@ -256,7 +218,19 @@ msgstr "Съжаляваме, няма нищо, което да отговар
256218msgid "All"
257219msgstr ""
258220
259−#: Shell.qml:453
221+#: Shell.qml:438
260222#, qt-format
261223msgid "Please enter %1"
262224msgstr ""
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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-09-28 07:38+0000\n"
1212"Last-Translator: David Planella <david.planella@ubuntu.com>\n"
1313"Language-Team: Catalan <ca@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "Viquipèdia"
8686msgid "YouTube"
8787msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr "Omet la introducció"
9292
@@ -138,84 +138,46 @@ msgid ""
138138"phone<br><br>Tap anywhere to start"
139139msgstr ""
140140
141−#: Components/PageHeader.qml:298
141+#: Components/PageHeader.qml:341
142142msgid "Recent searches"
143143msgstr "Cerques recents"
144144
145145#. TRANSLATORS: Number of persons who rated this app
146−#: Dash/Apps/AppInfo.qml:73
146+#. TRANSLATORS: Number of persons who rated this app/video/whatever
147+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
147148#, qt-format
148149msgid "(%1)"
149150msgstr "(%1)"
150151
151152#. TRANSLATORS: Number of persons who wrote reviews for this app
152−#: Dash/Apps/AppInfo.qml:85
153+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
154+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
153155#, qt-format
154156msgid "%1 review"
155157msgid_plural "%1 reviews"
156158msgstr[0] "%1 ressenya"
157159msgstr[1] "%1 ressenyes"
158160
159−#: Dash/Apps/AppPreview.qml:178
161+#: Dash/Apps/AppPreview.qml:126
160162msgid "Rate this"
161163msgstr ""
162164
163−#: Dash/Apps/AppReviews.qml:74
165+#: Dash/Previews/Reviews.qml:74
164166msgid "Add a review"
165167msgstr "Afegiu una ressenya"
166168
167−#: Dash/Apps/AppReviews.qml:86
169+#: Dash/Previews/Reviews.qml:86
168170msgid "Review"
169171msgstr "Ressenya"
170172
171−#: Dash/Apps/AppReviews.qml:121
173+#: Dash/Previews/Reviews.qml:121
172174msgid "Send"
173175msgstr "Envia"
174176
175−#: Dash/Apps/AppReviews.qml:139
177+#: Dash/Previews/Reviews.qml:139
176178msgid "Comments:"
177179msgstr "Comentaris:"
178180
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−
219181#: Greeter/Lockscreen.qml:142
220182msgid "Emergency Call"
221183msgstr "Trucada d'emergència"
@@ -253,7 +215,7 @@ msgstr "S'està parlant..."
253215msgid "Search"
254216msgstr "Cerca"
255217
256−#: plugins/Unity/scope.cpp:336
218+#: plugins/Unity/scope.cpp:398
257219msgid "Sorry, there is nothing that matches your search."
258220msgstr "No hi ha res que coincideixi amb la cerca"
259221
@@ -261,7 +223,28 @@ msgstr "No hi ha res que coincideixi amb la cerca"
261223msgid "All"
262224msgstr ""
263225
264−#: Shell.qml:453
226+#: Shell.qml:438
265227#, qt-format
266228msgid "Please enter %1"
267229msgstr "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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-10-06 10:57+0000\n"
1212"Last-Translator: SaGrLand <sg@samuel-greef.de>\n"
1313"Language-Team: German <de@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-07 06:14+0000\n"
19−"X-Generator: Launchpad (build 16791)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "Wikipedia"
8686msgid "YouTube"
8787msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr "Überspringe Einführung"
9292
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr "Letzte Suchbegriffe"
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr "(%1)"
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] "%1 Bewertung"
151153msgstr[1] "%1 Bewertungen"
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr "Bewerten"
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr "Bewertung hinzufügen"
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr "Bewertung"
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr "Senden"
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr "Kommentare:"
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr "Notruf"
@@ -247,7 +209,7 @@ msgstr "Sie sprechen …"
247209msgid "Search"
248210msgstr "Suchen"
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr "Entschuldigung, es wurden keine Treffer erzielt."
253215
@@ -255,7 +217,28 @@ msgstr "Entschuldigung, es wurden keine Treffer erzielt."
255217msgid "All"
256218msgstr "Alle"
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr "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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-06-27 00:53+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Greek <el@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr ""
9292
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr "Πρόσφατες αναζητήσεις"
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr ""
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] ""
151153msgstr[1] ""
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr ""
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr ""
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr ""
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr ""
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr ""
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr ""
@@ -247,7 +209,7 @@ msgstr "Ομιλία..."
247209msgid "Search"
248210msgstr "Αναζήτηση"
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr "Λυπούμαστε, δεν υπάρχει τίποτα που να ταιριάζει στην αναζήτησή σας."
253215
@@ -255,7 +217,13 @@ msgstr "Λυπούμαστε, δεν υπάρχει τίποτα που να τ
255217msgid "All"
256218msgstr ""
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr ""
224+
225+#~ msgid "Music"
226+#~ msgstr "Μουσική"
227+
228+#~ msgid "Videos"
229+#~ msgstr "Βίντεο"
po/en_AU.po+37−54
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-09-28 07:46+0000\n"
1212"Last-Translator: Jared Norris <jarednorris@ubuntu.com>\n"
1313"Language-Team: English (Australia) <en_AU@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "Wikipedia"
8686msgid "YouTube"
8787msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr "Skip intro"
9292
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr "Recent searches"
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr "(%1)"
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] "%1 review"
151153msgstr[1] "%1 reviews"
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr "Rate this"
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr "Add a review"
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr "Review"
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr "Send"
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr "Comments:"
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr "Emergency Call"
@@ -247,7 +209,7 @@ msgstr "Speaking..."
247209msgid "Search"
248210msgstr "Search"
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr "Sorry, there is nothing that matches your search."
253215
@@ -255,7 +217,28 @@ msgstr "Sorry, there is nothing that matches your search."
255217msgid "All"
256218msgstr ""
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr "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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-06-27 08:53+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "Wikipedia"
8686msgid "YouTube"
8787msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr ""
9292
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr "Recent searches"
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr ""
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] ""
151153msgstr[1] ""
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr ""
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr ""
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr ""
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr ""
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr ""
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr ""
@@ -247,7 +209,7 @@ msgstr "Speaking..."
247209msgid "Search"
248210msgstr "Search"
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr "Sorry, there is nothing that matches your search."
253215
@@ -255,7 +217,28 @@ msgstr "Sorry, there is nothing that matches your search."
255217msgid "All"
256218msgstr ""
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr "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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-06-26 22:35+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Esperanto <eo@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr ""
9292
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr ""
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr ""
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] ""
151153msgstr[1] ""
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr ""
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr ""
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr ""
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr ""
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr ""
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr ""
@@ -247,7 +209,7 @@ msgstr ""
247209msgid "Search"
248210msgstr ""
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr ""
253215
@@ -255,7 +217,7 @@ msgstr ""
255217msgid "All"
256218msgstr ""
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr ""
po/es.po+37−54
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-10-02 04:59+0000\n"
1212"Last-Translator: Adolfo Jayme Barrientos <fitoschido@gmail.com>\n"
1313"Language-Team: Spanish <es@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-03 06:08+0000\n"
19−"X-Generator: Launchpad (build 16791)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "Wikipedia"
8686msgid "YouTube"
8787msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr "Omitir la introducción"
9292
@@ -136,84 +136,46 @@ msgstr ""
136136"Ahora domina los gestos de bordes y puede usar el teléfono<br><br>Toque la "
137137"pantalla para comenzar"
138138
139−#: Components/PageHeader.qml:298
139+#: Components/PageHeader.qml:341
140140msgid "Recent searches"
141141msgstr "Búsquedas recientes"
142142
143143#. TRANSLATORS: Number of persons who rated this app
144−#: Dash/Apps/AppInfo.qml:73
144+#. TRANSLATORS: Number of persons who rated this app/video/whatever
145+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
145146#, qt-format
146147msgid "(%1)"
147148msgstr "(%1)"
148149
149150#. TRANSLATORS: Number of persons who wrote reviews for this app
150−#: Dash/Apps/AppInfo.qml:85
151+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
152+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
151153#, qt-format
152154msgid "%1 review"
153155msgid_plural "%1 reviews"
154156msgstr[0] "%1 reseña"
155157msgstr[1] "%1 reseñas"
156158
157−#: Dash/Apps/AppPreview.qml:178
159+#: Dash/Apps/AppPreview.qml:126
158160msgid "Rate this"
159161msgstr "Valorar esto"
160162
161−#: Dash/Apps/AppReviews.qml:74
163+#: Dash/Previews/Reviews.qml:74
162164msgid "Add a review"
163165msgstr "Añadir una reseña"
164166
165−#: Dash/Apps/AppReviews.qml:86
167+#: Dash/Previews/Reviews.qml:86
166168msgid "Review"
167169msgstr "Reseñar"
168170
169−#: Dash/Apps/AppReviews.qml:121
171+#: Dash/Previews/Reviews.qml:121
170172msgid "Send"
171173msgstr "Enviar"
172174
173−#: Dash/Apps/AppReviews.qml:139
175+#: Dash/Previews/Reviews.qml:139
174176msgid "Comments:"
175177msgstr "Comentarios:"
176178
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−
217179#: Greeter/Lockscreen.qml:142
218180msgid "Emergency Call"
219181msgstr "Llamada de emergencia"
@@ -251,7 +213,7 @@ msgstr "Hablando…"
251213msgid "Search"
252214msgstr "Buscar"
253215
254−#: plugins/Unity/scope.cpp:336
216+#: plugins/Unity/scope.cpp:398
255217msgid "Sorry, there is nothing that matches your search."
256218msgstr "No hay nada que coincida con su búsqueda."
257219
@@ -259,7 +221,28 @@ msgstr "No hay nada que coincida con su búsqueda."
259221msgid "All"
260222msgstr "Todo"
261223
262−#: Shell.qml:453
224+#: Shell.qml:438
263225#, qt-format
264226msgid "Please enter %1"
265227msgstr "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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-10-03 09:21+0000\n"
1212"Last-Translator: Jiri Grönroos <Unknown>\n"
1313"Language-Team: Finnish <fi@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-04 06:11+0000\n"
19−"X-Generator: Launchpad (build 16791)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "Wikipedia"
8686msgid "YouTube"
8787msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr "Ohita esittely"
9292
@@ -134,84 +134,46 @@ msgstr ""
134134"Hallitset nyt reunaeleet, joten voit aloittaa puhelimen "
135135"käytön<br><br>Napauta missä tahansa aloittaaksesi"
136136
137−#: Components/PageHeader.qml:298
137+#: Components/PageHeader.qml:341
138138msgid "Recent searches"
139139msgstr "Viimeisimmät haut"
140140
141141#. TRANSLATORS: Number of persons who rated this app
142−#: Dash/Apps/AppInfo.qml:73
142+#. TRANSLATORS: Number of persons who rated this app/video/whatever
143+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
143144#, qt-format
144145msgid "(%1)"
145146msgstr "(%1)"
146147
147148#. TRANSLATORS: Number of persons who wrote reviews for this app
148−#: Dash/Apps/AppInfo.qml:85
149+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
150+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
149151#, qt-format
150152msgid "%1 review"
151153msgid_plural "%1 reviews"
152154msgstr[0] "%1 arvostelu"
153155msgstr[1] "%1 arvostelua"
154156
155−#: Dash/Apps/AppPreview.qml:178
157+#: Dash/Apps/AppPreview.qml:126
156158msgid "Rate this"
157159msgstr "Arvioi tämä"
158160
159−#: Dash/Apps/AppReviews.qml:74
161+#: Dash/Previews/Reviews.qml:74
160162msgid "Add a review"
161163msgstr "Lisää arvostelu"
162164
163−#: Dash/Apps/AppReviews.qml:86
165+#: Dash/Previews/Reviews.qml:86
164166msgid "Review"
165167msgstr "Arvostelu"
166168
167−#: Dash/Apps/AppReviews.qml:121
169+#: Dash/Previews/Reviews.qml:121
168170msgid "Send"
169171msgstr "Lähetä"
170172
171−#: Dash/Apps/AppReviews.qml:139
173+#: Dash/Previews/Reviews.qml:139
172174msgid "Comments:"
173175msgstr "Kommentit:"
174176
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−
215177#: Greeter/Lockscreen.qml:142
216178msgid "Emergency Call"
217179msgstr "Hätäpuhelu"
@@ -249,7 +211,7 @@ msgstr "Puhutaan..."
249211msgid "Search"
250212msgstr "Hae"
251213
252−#: plugins/Unity/scope.cpp:336
214+#: plugins/Unity/scope.cpp:398
253215msgid "Sorry, there is nothing that matches your search."
254216msgstr "Hakuun täsmääviä tuloksia ei löydy."
255217
@@ -257,7 +219,28 @@ msgstr "Hakuun täsmääviä tuloksia ei löydy."
257219msgid "All"
258220msgstr "Kaikki"
259221
260−#: Shell.qml:453
222+#: Shell.qml:438
261223#, qt-format
262224msgid "Please enter %1"
263225msgstr "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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-10-01 15:13+0000\n"
1212"Last-Translator: Jógvan Olsen <jeggy@jebster.net>\n"
1313"Language-Team: Faroese <fo@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr ""
9292
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr ""
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr ""
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] ""
151153msgstr[1] ""
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr ""
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr ""
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr ""
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr ""
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr ""
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr ""
@@ -247,7 +209,7 @@ msgstr "Snakkar..."
247209msgid "Search"
248210msgstr "Leita"
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr "Tíanverri er tað einki sum hóskar til tína leiting."
253215
@@ -255,7 +217,13 @@ msgstr "Tíanverri er tað einki sum hóskar til tína leiting."
255217msgid "All"
256218msgstr ""
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr ""
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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-06-27 03:21+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: French <fr@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr ""
9292
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr ""
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr ""
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] ""
151153msgstr[1] ""
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr ""
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr ""
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr ""
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr ""
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr ""
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr ""
@@ -247,7 +209,7 @@ msgstr ""
247209msgid "Search"
248210msgstr ""
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr ""
253215
@@ -255,7 +217,13 @@ msgstr ""
255217msgid "All"
256218msgstr ""
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr ""
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 ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"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"
1111"PO-Revision-Date: 2013-09-30 10:34+0000\n"
1212"Last-Translator: Akerbeltz <fios@akerbeltz.org>\n"
1313"Language-Team: Gaelic; Scottish <gd@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
1818"(n > 2 && n < 20) ? 2 : 3;\n"
19−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
20−"X-Generator: Launchpad (build 16774)\n"
19+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
20+"X-Generator: Launchpad (build 16799)\n"
2121
2222#: Applications/applications.js:23
2323msgid "Phone"
@@ -87,7 +87,7 @@ msgstr "An Uicipeid"
8787msgid "YouTube"
8888msgstr "YouTube"
8989
90−#: Components/EdgeDemoOverlay.qml:150
90+#: Components/EdgeDemoOverlay.qml:149
9191msgid "Skip intro"
9292msgstr "Gearr leum thairis air an ro-ràdh"
9393
@@ -139,18 +139,20 @@ msgid ""
139139"phone<br><br>Tap anywhere to start"
140140msgstr ""
141141
142−#: Components/PageHeader.qml:298
142+#: Components/PageHeader.qml:341
143143msgid "Recent searches"
144144msgstr "Na lorg thu o chionn goirid"
145145
146146#. TRANSLATORS: Number of persons who rated this app
147−#: Dash/Apps/AppInfo.qml:73
147+#. TRANSLATORS: Number of persons who rated this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
148149#, qt-format
149150msgid "(%1)"
150151msgstr "(%1)"
151152
152153#. TRANSLATORS: Number of persons who wrote reviews for this app
153−#: Dash/Apps/AppInfo.qml:85
154+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
155+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
154156#, qt-format
155157msgid "%1 review"
156158msgid_plural "%1 reviews"
@@ -159,66 +161,26 @@ msgstr[1] "%1 lèirmheas"
159161msgstr[2] "%1 lèirmheasan"
160162msgstr[3] "%1 lèirmheas"
161163
162−#: Dash/Apps/AppPreview.qml:178
164+#: Dash/Apps/AppPreview.qml:126
163165msgid "Rate this"
164166msgstr "Rangaich seo"
165167
166−#: Dash/Apps/AppReviews.qml:74
168+#: Dash/Previews/Reviews.qml:74
167169msgid "Add a review"
168170msgstr "Cuir lèirmheas ris"
169171
170−#: Dash/Apps/AppReviews.qml:86
172+#: Dash/Previews/Reviews.qml:86
171173msgid "Review"
172174msgstr "Lèirmheas"
173175
174−#: Dash/Apps/AppReviews.qml:121
176+#: Dash/Previews/Reviews.qml:121
175177msgid "Send"
176178msgstr "Cuir"
177179
178−#: Dash/Apps/AppReviews.qml:139
180+#: Dash/Previews/Reviews.qml:139
179181msgid "Comments:"
180182msgstr "Beachdan"
181183
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−
222184#: Greeter/Lockscreen.qml:142
223185msgid "Emergency Call"
224186msgstr "Gairm èiginn"
@@ -256,7 +218,7 @@ msgstr "A' bruidhinn..."
256218msgid "Search"
257219msgstr "Lorg"
258220
259−#: plugins/Unity/scope.cpp:336
221+#: plugins/Unity/scope.cpp:398
260222msgid "Sorry, there is nothing that matches your search."
261223msgstr "Tha sinn duilich ach chan eil dad a' freagairt ris na lorg thu."
262224
@@ -264,7 +226,28 @@ msgstr "Tha sinn duilich ach chan eil dad a' freagairt ris na lorg thu."
264226msgid "All"
265227msgstr ""
266228
267−#: Shell.qml:453
229+#: Shell.qml:438
268230#, qt-format
269231msgid "Please enter %1"
270232msgstr "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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-10-03 18:49+0000\n"
1212"Last-Translator: Marcos Lans <Unknown>\n"
1313"Language-Team: Galician <gl@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-04 06:11+0000\n"
19−"X-Generator: Launchpad (build 16791)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "Wikipedia"
8686msgid "YouTube"
8787msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr "Saltar introdución"
9292
@@ -134,84 +134,46 @@ msgstr ""
134134"Xa domina os xestos desde os bordos e pode comezar a usar o "
135135"móbil<br><br>Toque en calquera sitio para comezar"
136136
137−#: Components/PageHeader.qml:298
137+#: Components/PageHeader.qml:341
138138msgid "Recent searches"
139139msgstr "Buscas recentes"
140140
141141#. TRANSLATORS: Number of persons who rated this app
142−#: Dash/Apps/AppInfo.qml:73
142+#. TRANSLATORS: Number of persons who rated this app/video/whatever
143+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
143144#, qt-format
144145msgid "(%1)"
145146msgstr "(%1)"
146147
147148#. TRANSLATORS: Number of persons who wrote reviews for this app
148−#: Dash/Apps/AppInfo.qml:85
149+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
150+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
149151#, qt-format
150152msgid "%1 review"
151153msgid_plural "%1 reviews"
152154msgstr[0] "%1 opinión"
153155msgstr[1] "%1 opinións"
154156
155−#: Dash/Apps/AppPreview.qml:178
157+#: Dash/Apps/AppPreview.qml:126
156158msgid "Rate this"
157159msgstr "Valore isto"
158160
159−#: Dash/Apps/AppReviews.qml:74
161+#: Dash/Previews/Reviews.qml:74
160162msgid "Add a review"
161163msgstr "Engadir unha opinión"
162164
163−#: Dash/Apps/AppReviews.qml:86
165+#: Dash/Previews/Reviews.qml:86
164166msgid "Review"
165167msgstr "Opinión"
166168
167−#: Dash/Apps/AppReviews.qml:121
169+#: Dash/Previews/Reviews.qml:121
168170msgid "Send"
169171msgstr "Enviar"
170172
171−#: Dash/Apps/AppReviews.qml:139
173+#: Dash/Previews/Reviews.qml:139
172174msgid "Comments:"
173175msgstr "Comentarios:"
174176
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−
215177#: Greeter/Lockscreen.qml:142
216178msgid "Emergency Call"
217179msgstr "Chamada de emerxencia"
@@ -249,7 +211,7 @@ msgstr "Falando…"
249211msgid "Search"
250212msgstr "Buscar"
251213
252−#: plugins/Unity/scope.cpp:336
214+#: plugins/Unity/scope.cpp:398
253215msgid "Sorry, there is nothing that matches your search."
254216msgstr "Sentímolo, non hai nada que coincida con esta busca."
255217
@@ -257,7 +219,25 @@ msgstr "Sentímolo, non hai nada que coincida con esta busca."
257219msgid "All"
258220msgstr "Todo"
259221
260−#: Shell.qml:453
222+#: Shell.qml:438
261223#, qt-format
262224msgid "Please enter %1"
263225msgstr "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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-10-01 09:19+0000\n"
1212"Last-Translator: Yaron <sh.yaron@gmail.com>\n"
1313"Language-Team: Hebrew <he@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "ויקיפדיה"
8686msgid "YouTube"
8787msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr "לדלג על הפתיחה"
9292
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr "חיפושים אחרונים"
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr "(%1)"
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] "סקירה %1"
151153msgstr[1] "%1 סקירות"
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr "דירוג היישום"
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr "הוספת סקירה"
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr "סקירה"
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr "שליחה"
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr "הערות:"
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr "שיחת חירום"
@@ -247,7 +209,7 @@ msgstr "הדיבור מושמע…"
247209msgid "Search"
248210msgstr "חיפוש"
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr "שום דבר אינו תואם לחיפוש שלך, עמך הסליחה."
253215
@@ -255,7 +217,28 @@ msgstr "שום דבר אינו תואם לחיפוש שלך, עמך הסליחה
255217msgid "All"
256218msgstr ""
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr "נא להזין %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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-06-27 04:14+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Croatian <hr@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
20−"X-Generator: Launchpad (build 16774)\n"
19+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
20+"X-Generator: Launchpad (build 16799)\n"
2121
2222#: Applications/applications.js:23
2323msgid "Phone"
@@ -87,7 +87,7 @@ msgstr ""
8787msgid "YouTube"
8888msgstr ""
8989
90−#: Components/EdgeDemoOverlay.qml:150
90+#: Components/EdgeDemoOverlay.qml:149
9191msgid "Skip intro"
9292msgstr ""
9393
@@ -133,84 +133,46 @@ msgid ""
133133"phone<br><br>Tap anywhere to start"
134134msgstr ""
135135
136−#: Components/PageHeader.qml:298
136+#: Components/PageHeader.qml:341
137137msgid "Recent searches"
138138msgstr "Nedavne pretrage"
139139
140140#. TRANSLATORS: Number of persons who rated this app
141−#: Dash/Apps/AppInfo.qml:73
141+#. TRANSLATORS: Number of persons who rated this app/video/whatever
142+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
142143#, qt-format
143144msgid "(%1)"
144145msgstr ""
145146
146147#. TRANSLATORS: Number of persons who wrote reviews for this app
147−#: Dash/Apps/AppInfo.qml:85
148+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
149+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
148150#, qt-format
149151msgid "%1 review"
150152msgid_plural "%1 reviews"
151153msgstr[0] ""
152154msgstr[1] ""
153155
154−#: Dash/Apps/AppPreview.qml:178
156+#: Dash/Apps/AppPreview.qml:126
155157msgid "Rate this"
156158msgstr ""
157159
158−#: Dash/Apps/AppReviews.qml:74
160+#: Dash/Previews/Reviews.qml:74
159161msgid "Add a review"
160162msgstr ""
161163
162−#: Dash/Apps/AppReviews.qml:86
164+#: Dash/Previews/Reviews.qml:86
163165msgid "Review"
164166msgstr ""
165167
166−#: Dash/Apps/AppReviews.qml:121
168+#: Dash/Previews/Reviews.qml:121
167169msgid "Send"
168170msgstr ""
169171
170−#: Dash/Apps/AppReviews.qml:139
172+#: Dash/Previews/Reviews.qml:139
171173msgid "Comments:"
172174msgstr ""
173175
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−
214176#: Greeter/Lockscreen.qml:142
215177msgid "Emergency Call"
216178msgstr ""
@@ -248,7 +210,7 @@ msgstr "Govor..."
248210msgid "Search"
249211msgstr "Pretraživanje"
250212
251−#: plugins/Unity/scope.cpp:336
213+#: plugins/Unity/scope.cpp:398
252214msgid "Sorry, there is nothing that matches your search."
253215msgstr "Nažalost, ne postoji ništa što odgovara vašoj pretrazi."
254216
@@ -256,7 +218,13 @@ msgstr "Nažalost, ne postoji ništa što odgovara vašoj pretrazi."
256218msgid "All"
257219msgstr ""
258220
259−#: Shell.qml:453
221+#: Shell.qml:438
260222#, qt-format
261223msgid "Please enter %1"
262224msgstr ""
225+
226+#~ msgid "Music"
227+#~ msgstr "Glazba"
228+
229+#~ msgid "Videos"
230+#~ msgstr "Video"
po/hu.po+22−54
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-06-27 04:28+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Hungarian <hu@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr ""
9292
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr "Legutóbbi keresések"
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr ""
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] ""
151153msgstr[1] ""
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr ""
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr ""
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr ""
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr ""
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr ""
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr ""
@@ -247,7 +209,7 @@ msgstr "Beszéd…"
247209msgid "Search"
248210msgstr "Keresés"
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr "Elnézést, nincs találat a keresésre."
253215
@@ -255,7 +217,13 @@ msgstr "Elnézést, nincs találat a keresésre."
255217msgid "All"
256218msgstr ""
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr ""
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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-06-27 04:43+0000\n"
1212"Last-Translator: iAbaS <sosabazyan@yandex.ru>\n"
1313"Language-Team: Armenian <hy@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr ""
9292
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr "Վերջին որոնումներ"
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr ""
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] ""
151153msgstr[1] ""
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr ""
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr ""
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr ""
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr ""
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr ""
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr ""
@@ -247,7 +209,7 @@ msgstr "Խոսում եմ..."
247209msgid "Search"
248210msgstr "Որոնում"
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr "Կներերք, բայց Ձեր հարցումով ոչինչ չկար"
253215
@@ -255,7 +217,13 @@ msgstr "Կներերք, բայց Ձեր հարցումով ոչինչ չկար"
255217msgid "All"
256218msgstr ""
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr ""
224+
225+#~ msgid "Music"
226+#~ msgstr "Երգեր"
227+
228+#~ msgid "Videos"
229+#~ msgstr "Վիդեոներ"
po/id.po+16−54
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-06-26 22:35+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Indonesian <id@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr ""
9292
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr ""
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr ""
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] ""
151153msgstr[1] ""
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr ""
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr ""
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr ""
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr ""
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr ""
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr ""
@@ -247,7 +209,7 @@ msgstr ""
247209msgid "Search"
248210msgstr ""
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr ""
253215
@@ -255,7 +217,7 @@ msgstr ""
255217msgid "All"
256218msgstr ""
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr ""
po/is.po+37−54
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"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"
1111"PO-Revision-Date: 2013-09-18 16:22+0000\n"
1212"Last-Translator: Andri Thorlacius <Unknown>\n"
1313"Language-Team: Icelandic <is@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "Wikipedia"
8686msgid "YouTube"
8787msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr "Hoppa yfir kynningu"
9292
@@ -133,84 +133,46 @@ msgid ""
133133"phone<br><br>Tap anywhere to start"
134134msgstr ""
135135
136−#: Components/PageHeader.qml:298
136+#: Components/PageHeader.qml:341
137137msgid "Recent searches"
138138msgstr "Nýlegar leitir"
139139
140140#. TRANSLATORS: Number of persons who rated this app
141−#: Dash/Apps/AppInfo.qml:73
141+#. TRANSLATORS: Number of persons who rated this app/video/whatever
142+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
142143#, qt-format
143144msgid "(%1)"
144145msgstr "(%1)"
145146
146147#. TRANSLATORS: Number of persons who wrote reviews for this app
147−#: Dash/Apps/AppInfo.qml:85
148+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
149+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
148150#, qt-format
149151msgid "%1 review"
150152msgid_plural "%1 reviews"
151153msgstr[0] "%1 ummæli"
152154msgstr[1] "%1 ummæli"
153155
154−#: Dash/Apps/AppPreview.qml:178
156+#: Dash/Apps/AppPreview.qml:126
155157msgid "Rate this"
156158msgstr "Gefa þessu einkunn"
157159
158−#: Dash/Apps/AppReviews.qml:74
160+#: Dash/Previews/Reviews.qml:74
159161msgid "Add a review"
160162msgstr "Gefa umsögn"
161163
162−#: Dash/Apps/AppReviews.qml:86
164+#: Dash/Previews/Reviews.qml:86
163165msgid "Review"
164166msgstr "Umsögn"
165167
166−#: Dash/Apps/AppReviews.qml:121
168+#: Dash/Previews/Reviews.qml:121
167169msgid "Send"
168170msgstr "Senda"
169171
170−#: Dash/Apps/AppReviews.qml:139
172+#: Dash/Previews/Reviews.qml:139
171173msgid "Comments:"
172174msgstr "Athugasemdir:"
173175
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−
214176#: Greeter/Lockscreen.qml:142
215177msgid "Emergency Call"
216178msgstr "Neyðarsímtal"
@@ -248,7 +210,7 @@ msgstr "Tala..."
248210msgid "Search"
249211msgstr "Leita"
250212
251−#: plugins/Unity/scope.cpp:336
213+#: plugins/Unity/scope.cpp:398
252214msgid "Sorry, there is nothing that matches your search."
253215msgstr "Því miður, það var ekkert sem passaði við leitarorðið þitt."
254216
@@ -256,7 +218,28 @@ msgstr "Því miður, það var ekkert sem passaði við leitarorðið þitt."
256218msgid "All"
257219msgstr ""
258220
259−#: Shell.qml:453
221+#: Shell.qml:438
260222#, qt-format
261223msgid "Please enter %1"
262224msgstr ""
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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11−"PO-Revision-Date: 2013-09-28 10:05+0000\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11+"PO-Revision-Date: 2013-10-07 09:34+0000\n"
1212"Last-Translator: Claudio Arseni <claudio.arseni@gmail.com>\n"
1313"Language-Team: Italian <it@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "Wikipedia"
8686msgid "YouTube"
8787msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr "Salta introduzione"
9292
@@ -136,85 +136,49 @@ msgid ""
136136"You have now mastered the edge gestures and can start using the "
137137"phone<br><br>Tap anywhere to start"
138138msgstr ""
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"
139141
140−#: Components/PageHeader.qml:298
142+#: Components/PageHeader.qml:341
141143msgid "Recent searches"
142144msgstr "Ricerche recenti"
143145
144146#. TRANSLATORS: Number of persons who rated this app
145−#: Dash/Apps/AppInfo.qml:73
147+#. TRANSLATORS: Number of persons who rated this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
146149#, qt-format
147150msgid "(%1)"
148151msgstr "(%1)"
149152
150153#. TRANSLATORS: Number of persons who wrote reviews for this app
151−#: Dash/Apps/AppInfo.qml:85
154+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
155+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
152156#, qt-format
153157msgid "%1 review"
154158msgid_plural "%1 reviews"
155159msgstr[0] "%1 recensione"
156160msgstr[1] "%1 recensioni"
157161
158−#: Dash/Apps/AppPreview.qml:178
162+#: Dash/Apps/AppPreview.qml:126
159163msgid "Rate this"
160164msgstr "Valuta"
161165
162−#: Dash/Apps/AppReviews.qml:74
166+#: Dash/Previews/Reviews.qml:74
163167msgid "Add a review"
164168msgstr "Aggiungi una recensione"
165169
166−#: Dash/Apps/AppReviews.qml:86
170+#: Dash/Previews/Reviews.qml:86
167171msgid "Review"
168172msgstr "Recensisci"
169173
170−#: Dash/Apps/AppReviews.qml:121
174+#: Dash/Previews/Reviews.qml:121
171175msgid "Send"
172176msgstr "Invia"
173177
174−#: Dash/Apps/AppReviews.qml:139
178+#: Dash/Previews/Reviews.qml:139
175179msgid "Comments:"
176180msgstr "Commenti:"
177181
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−
218182#: Greeter/Lockscreen.qml:142
219183msgid "Emergency Call"
220184msgstr "Chiamata di emergenza"
@@ -252,15 +216,36 @@ msgstr "Sto parlando..."
252216msgid "Search"
253217msgstr "Cerca"
254218
255−#: plugins/Unity/scope.cpp:336
219+#: plugins/Unity/scope.cpp:398
256220msgid "Sorry, there is nothing that matches your search."
257221msgstr "Nessun risultato corrispondente alla ricerca."
258222
259223#: plugins/Unity/showallfilteroption.cpp:41
260224msgid "All"
261−msgstr ""
225+msgstr "Tutto"
262226
263−#: Shell.qml:453
227+#: Shell.qml:438
264228#, qt-format
265229msgid "Please enter %1"
266230msgstr "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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-06-26 22:36+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Japanese <ja@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr ""
9292
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr ""
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr ""
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] ""
151153msgstr[1] ""
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr ""
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr ""
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr ""
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr ""
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr ""
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr ""
@@ -247,7 +209,7 @@ msgstr ""
247209msgid "Search"
248210msgstr ""
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr ""
253215
@@ -255,7 +217,7 @@ msgstr ""
255217msgid "All"
256218msgstr ""
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr ""
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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-06-27 05:43+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Kannada <kn@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr ""
9292
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr "ಇತ್ತೀಚಿನ ಹುಡುಕಾಟಗಳು"
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr ""
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] ""
151153msgstr[1] ""
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr ""
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr ""
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr ""
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr ""
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr ""
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr ""
@@ -247,7 +209,7 @@ msgstr "ಮಾತನಾಡುತಿದ್ದೀರಿ"
247209msgid "Search"
248210msgstr "ಹುಡುಕು"
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr "ಕ್ಷಮಿಸಿ ನಿಮ್ಮ ಶೋಧನೆಗೆ ಸರಿಯಾದ ಹೊಂದಾಣಿಕೆಗಳು ದೊರಕುತ್ತಿಲ್ಲ"
253215
@@ -255,7 +217,13 @@ msgstr "ಕ್ಷಮಿಸಿ ನಿಮ್ಮ ಶೋಧನೆಗೆ ಸರಿಯ
255217msgid "All"
256218msgstr ""
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr ""
224+
225+#~ msgid "Music"
226+#~ msgstr "ಸಂಗೀತ"
227+
228+#~ msgid "Videos"
229+#~ msgstr "ವೀಡಿಯೋಗಳು"
po/ko.po+42−77
@@ -7,92 +7,92 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11−"PO-Revision-Date: 2013-06-27 05:59+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11+"PO-Revision-Date: 2013-10-10 07:04+0000\n"
12+"Last-Translator: Kim Boram <boramism@gmail.com>\n"
1313"Language-Team: Korean <ko@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
23−msgstr ""
23+msgstr "전화"
2424
2525#: Applications/applications.js:29
2626msgid "Camera"
27−msgstr ""
27+msgstr "카메라"
2828
2929#: Applications/applications.js:35
3030msgid "Gallery"
31−msgstr ""
31+msgstr "갤러리"
3232
3333#: Applications/applications.js:40
3434msgid "Facebook"
35−msgstr ""
35+msgstr "페이스북"
3636
3737#: Applications/applications.js:46
3838msgid "Browser"
39−msgstr ""
39+msgstr "브라우저"
4040
4141#: Applications/applications.js:51
4242msgid "Twitter"
43−msgstr ""
43+msgstr "트위터"
4444
4545#: Applications/applications.js:57
4646msgid "GMail"
47−msgstr ""
47+msgstr "지메일"
4848
4949#: Applications/applications.js:62
5050msgid "Weather"
51−msgstr ""
51+msgstr "날씨"
5252
5353#: Applications/applications.js:68
5454msgid "Notepad"
55−msgstr ""
55+msgstr "메모장"
5656
5757#: Applications/applications.js:74
5858msgid "Calendar"
59−msgstr ""
59+msgstr "달력"
6060
6161#: Applications/applications.js:80
6262msgid "Media Player"
63−msgstr ""
63+msgstr "미디어 재생기"
6464
6565#: Applications/applications.js:86
6666msgid "Evernote"
67−msgstr ""
67+msgstr "에버노트"
6868
6969#: Applications/applications.js:91
7070msgid "Map"
71−msgstr ""
71+msgstr "지도"
7272
7373#: Applications/applications.js:96
7474msgid "Pinterest"
75−msgstr ""
75+msgstr "핀터레스트"
7676
7777#: Applications/applications.js:101
7878msgid "SoundCloud"
79−msgstr ""
79+msgstr "사운드클라우드"
8080
8181#: Applications/applications.js:106
8282msgid "Wikipedia"
83−msgstr ""
83+msgstr "위키백과"
8484
8585#: Applications/applications.js:111
8686msgid "YouTube"
87−msgstr ""
87+msgstr "유튜브"
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
91−msgstr ""
91+msgstr "도입부 건너뛰기"
9292
9393#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
95−msgstr ""
95+msgstr "오른쪽 끝"
9696
9797#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137−msgstr "요즈음 찿은 것들"
137+msgstr "최근 검색"
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr ""
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] ""
151153msgstr[1] ""
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr ""
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr ""
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr ""
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr ""
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr ""
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr ""
@@ -245,9 +207,9 @@ msgstr ""
245207
246208#: Panel/SearchIndicator.qml:27
247209msgid "Search"
248−msgstr "찾기"
210+msgstr "검색"
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr ""
253215
@@ -255,7 +217,10 @@ msgstr ""
255217msgid "All"
256218msgstr ""
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr ""
224+
225+#~ msgid "Music"
226+#~ msgstr "음악"
po/ky.po+22−54
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-06-27 06:17+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Kirghiz <ky@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr ""
9292
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr "Соңку издөөлөр"
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr ""
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] ""
151153msgstr[1] ""
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr ""
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr ""
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr ""
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr ""
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr ""
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr ""
@@ -247,7 +209,7 @@ msgstr "Сүйлөнүүдө..."
247209msgid "Search"
248210msgstr "Издөө"
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr "Тилекке каршы, сиздин издөөңүзгө эч нерсе дал келген жок."
253215
@@ -255,7 +217,13 @@ msgstr "Тилекке каршы, сиздин издөөңүзгө эч нер
255217msgid "All"
256218msgstr ""
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr ""
224+
225+#~ msgid "Music"
226+#~ msgstr "Музыка"
227+
228+#~ msgid "Videos"
229+#~ msgstr "Видеолор"
po/lo.po+22−54
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"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"
1111"PO-Revision-Date: 2013-10-02 10:00+0000\n"
1212"Last-Translator: Anousak <anousak@gmail.com>\n"
1313"Language-Team: Lao <lo@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-03 06:08+0000\n"
19−"X-Generator: Launchpad (build 16791)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
8686msgid "YouTube"
8787msgstr "ິYouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr ""
9292
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr ""
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr "(%1)"
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] ""
151153msgstr[1] ""
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr ""
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr ""
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr ""
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr "ສົ່ງ"
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr "ຄໍ່ເຫັນ"
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr ""
@@ -247,7 +209,7 @@ msgstr "ກໍາລັງເວົ້າ"
247209msgid "Search"
248210msgstr "ຊອກຫາ"
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr ""
253215
@@ -255,7 +217,13 @@ msgstr ""
255217msgid "All"
256218msgstr "ທັງໝົດ"
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr "ກະລູນາປ້ອນ %1"
224+
225+#~ msgid "Videos"
226+#~ msgstr "ວິດີໂອ"
227+
228+#~ msgid "Music"
229+#~ msgstr "ດົນຕີ"
po/lv.po+22−54
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-09-28 16:29+0000\n"
1212"Last-Translator: Jānis-Marks Gailis <jeanmarc.gailis@gmail.com>\n"
1313"Language-Team: Latvian <lv@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"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"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "Vikipēdija"
8686msgid "YouTube"
8787msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr ""
9292
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr "Nesen veiktās meklēšanas"
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr ""
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] ""
151153msgstr[1] ""
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr ""
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr ""
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr ""
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr ""
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr ""
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr ""
@@ -247,7 +209,7 @@ msgstr "Runa..."
247209msgid "Search"
248210msgstr "Meklēt"
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr "Diemžēl nekas neatbilst jūsu meklētajam."
253215
@@ -255,7 +217,13 @@ msgstr "Diemžēl nekas neatbilst jūsu meklētajam."
255217msgid "All"
256218msgstr ""
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr ""
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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11−"PO-Revision-Date: 2013-06-27 06:47+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11+"PO-Revision-Date: 2013-10-09 11:35+0000\n"
12+"Last-Translator: Pyae Sone <Unknown>\n"
1313"Language-Team: Burmese <my@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
23−msgstr ""
23+msgstr "ဖုန်း"
2424
2525#: Applications/applications.js:29
2626msgid "Camera"
27−msgstr ""
27+msgstr "ကင်မရာ"
2828
2929#: Applications/applications.js:35
3030msgid "Gallery"
31−msgstr ""
31+msgstr "ဓာတ်ပုံသိမ်းထားသည့်နေရာ"
3232
3333#: Applications/applications.js:40
3434msgid "Facebook"
35−msgstr ""
35+msgstr "Facebook"
3636
3737#: Applications/applications.js:46
3838msgid "Browser"
39−msgstr ""
39+msgstr "Browser"
4040
4141#: Applications/applications.js:51
4242msgid "Twitter"
43−msgstr ""
43+msgstr "Twitter"
4444
4545#: Applications/applications.js:57
4646msgid "GMail"
47−msgstr ""
47+msgstr "ဂျီမေးလ်"
4848
4949#: Applications/applications.js:62
5050msgid "Weather"
51−msgstr ""
51+msgstr "ရာသီဥတု"
5252
5353#: Applications/applications.js:68
5454msgid "Notepad"
55−msgstr ""
55+msgstr "Notepad"
5656
5757#: Applications/applications.js:74
5858msgid "Calendar"
59−msgstr ""
59+msgstr "ပြက္ခဒိန်"
6060
6161#: Applications/applications.js:80
6262msgid "Media Player"
63−msgstr ""
63+msgstr "မီဒီယာဖွင့်စက်"
6464
6565#: Applications/applications.js:86
6666msgid "Evernote"
67−msgstr ""
67+msgstr "Evernote"
6868
6969#: Applications/applications.js:91
7070msgid "Map"
71−msgstr ""
71+msgstr "မြေပုံ"
7272
7373#: Applications/applications.js:96
7474msgid "Pinterest"
75−msgstr ""
75+msgstr "Pinterest"
7676
7777#: Applications/applications.js:101
7878msgid "SoundCloud"
79−msgstr ""
79+msgstr "SoundCloud"
8080
8181#: Applications/applications.js:106
8282msgid "Wikipedia"
83−msgstr ""
83+msgstr "ဝီကီပီဒီးယား"
8484
8585#: Applications/applications.js:111
8686msgid "YouTube"
87−msgstr ""
87+msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
91−msgstr ""
91+msgstr "မိတ်ဆက်ကိုကျော်မည်"
9292
9393#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
95−msgstr ""
95+msgstr "ညာဖက် အစွန်း"
9696
9797#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
@@ -100,7 +100,7 @@ msgstr ""
100100
101101#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103−msgstr ""
103+msgstr "ထိပ် အစွန်း"
104104
105105#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
@@ -108,7 +108,7 @@ msgstr ""
108108
109109#: Components/EdgeDemo.qml:170
110110msgid "Close"
111−msgstr ""
111+msgstr "ပိတ်"
112112
113113#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
@@ -116,7 +116,7 @@ msgstr ""
116116
117117#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119−msgstr ""
119+msgstr "ဘယ်​ဖက် အစွန်း"
120120
121121#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
@@ -124,7 +124,7 @@ msgstr ""
124124
125125#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127−msgstr ""
127+msgstr "ကောင်းအောင်ပြုလုပ်ခဲ့သည်"
128128
129129#: Components/EdgeDemo.qml:227
130130msgid ""
@@ -132,83 +132,45 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr "မကြာသေးခင်က ရှာဖွေခြင်း"
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143−msgstr ""
144+msgstr "(%1)"
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] ""
151153msgstr[1] ""
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155−msgstr ""
157+msgstr "ဒီဟာကိုအမှတ်ပေးမည်"
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr ""
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr ""
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167−msgstr ""
169+msgstr "ပို့မည်"
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171−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 ""
173+msgstr "မှတ်ချက်များ-"
212174
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
@@ -247,7 +209,7 @@ msgstr "ပြောနေသည်"
247209msgid "Search"
248210msgstr "ရှာဖွေ"
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr "ဆောရီး၊ သင်၏ရှာဖွေမူနှင့်တူညီတာဘာမှမရှိပါ။"
253215
@@ -255,7 +217,22 @@ msgstr "ဆောရီး၊ သင်၏ရှာဖွေမူနှင့
255217msgid "All"
256218msgstr ""
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr ""
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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-06-27 07:02+0000\n"
1212"Last-Translator: Joakim Langvand <jlangvand@gmail.com>\n"
1313"Language-Team: Norwegian Bokmal <nb@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr ""
9292
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr "Siste søk"
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr ""
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] ""
151153msgstr[1] ""
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr ""
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr ""
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr ""
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr ""
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr ""
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr ""
@@ -247,7 +209,7 @@ msgstr "Snakker …"
247209msgid "Search"
248210msgstr "Søk"
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr "Søket ga ingen treff."
253215
@@ -255,7 +217,13 @@ msgstr "Søket ga ingen treff."
255217msgid "All"
256218msgstr ""
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr ""
224+
225+#~ msgid "Music"
226+#~ msgstr "Musikk"
227+
228+#~ msgid "Videos"
229+#~ msgstr "Videoer"
po/nl.po+22−54
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-06-27 07:19+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Dutch <nl@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr ""
9292
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr "Recente zoekopdrachten"
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr ""
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] ""
151153msgstr[1] ""
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr ""
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr ""
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr ""
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr ""
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr ""
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr ""
@@ -247,7 +209,7 @@ msgstr "Inspreken…"
247209msgid "Search"
248210msgstr "Zoeken"
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr "Er is helaas niets dat met uw zoekopdracht overeenkomt."
253215
@@ -255,7 +217,13 @@ msgstr "Er is helaas niets dat met uw zoekopdracht overeenkomt."
255217msgid "All"
256218msgstr ""
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr ""
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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11−"PO-Revision-Date: 2013-06-27 08:52+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11+"PO-Revision-Date: 2013-10-13 13:44+0000\n"
12+"Last-Translator: GTriderXC <gtriderxc@yahoo.com>\n"
1313"Language-Team: Polish <pl@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
1818"|| n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
20−"X-Generator: Launchpad (build 16774)\n"
19+"X-Launchpad-Export-Date: 2013-10-14 05:47+0000\n"
20+"X-Generator: Launchpad (build 16799)\n"
2121
2222#: Applications/applications.js:23
2323msgid "Phone"
@@ -87,133 +87,100 @@ msgstr "Wikipedia"
8787msgid "YouTube"
8888msgstr "YouTube"
8989
90−#: Components/EdgeDemoOverlay.qml:150
90+#: Components/EdgeDemoOverlay.qml:149
9191msgid "Skip intro"
92−msgstr ""
92+msgstr "Pomiń intro"
9393
9494#: Components/EdgeDemo.qml:112
9595msgid "Right edge"
96−msgstr ""
96+msgstr "Prawa krawędź"
9797
9898#: Components/EdgeDemo.qml:113
9999msgid "Try swiping from the right edge to unlock the phone"
100−msgstr ""
100+msgstr "Aby odblokować telefon, przeciagnij w stronę prawej krawędzi"
101101
102102#: Components/EdgeDemo.qml:144
103103msgid "Top edge"
104−msgstr ""
104+msgstr "Górna krawędź"
105105
106106#: Components/EdgeDemo.qml:145
107107msgid "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"
109109
110110#: Components/EdgeDemo.qml:170
111111msgid "Close"
112−msgstr ""
112+msgstr "Zamknij"
113113
114114#: Components/EdgeDemo.qml:171
115115msgid "Swipe up again to close the settings screen"
116−msgstr ""
116+msgstr "Przeciągnij ponownie w górę, by zamknąć okno ustawień"
117117
118118#: Components/EdgeDemo.qml:198
119119msgid "Left edge"
120−msgstr ""
120+msgstr "Lewa krawędź"
121121
122122#: Components/EdgeDemo.qml:199
123123msgid "Swipe from the left to reveal the launcher for quick access to apps"
124124msgstr ""
125+"Przeciągnięcie od lewej krawędzi, uruchamia aktywator szybkiego dostępu do "
126+"aplikacji"
125127
126128#: Components/EdgeDemo.qml:226
127129msgid "Well done"
128−msgstr ""
130+msgstr "Udało się!"
129131
130132#: Components/EdgeDemo.qml:227
131133msgid ""
132134"You have now mastered the edge gestures and can start using the "
133135"phone<br><br>Tap anywhere to start"
134136msgstr ""
137+"Polecenia aktywatorów krawędzi ekranu zostały opanowane<br><br>Dotknij "
138+"gdziekolwiek aby kontynuować"
135139
136−#: Components/PageHeader.qml:298
140+#: Components/PageHeader.qml:341
137141msgid "Recent searches"
138142msgstr "Ostatnie wyszukiwania"
139143
140144#. TRANSLATORS: Number of persons who rated this app
141−#: Dash/Apps/AppInfo.qml:73
145+#. TRANSLATORS: Number of persons who rated this app/video/whatever
146+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
142147#, qt-format
143148msgid "(%1)"
144−msgstr ""
149+msgstr "(%1)"
145150
146151#. TRANSLATORS: Number of persons who wrote reviews for this app
147−#: Dash/Apps/AppInfo.qml:85
152+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
153+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
148154#, qt-format
149155msgid "%1 review"
150156msgid_plural "%1 reviews"
151−msgstr[0] ""
152−msgstr[1] ""
157+msgstr[0] "%1 opinia"
158+msgstr[1] "%1 opinie"
159+msgstr[2] "%1 opinii"
153160
154−#: Dash/Apps/AppPreview.qml:178
161+#: Dash/Apps/AppPreview.qml:126
155162msgid "Rate this"
156−msgstr ""
163+msgstr "Oceń to"
157164
158−#: Dash/Apps/AppReviews.qml:74
165+#: Dash/Previews/Reviews.qml:74
159166msgid "Add a review"
160−msgstr ""
167+msgstr "Dodaj recenzję"
161168
162−#: Dash/Apps/AppReviews.qml:86
169+#: Dash/Previews/Reviews.qml:86
163170msgid "Review"
164−msgstr ""
171+msgstr "Recenzja"
165172
166−#: Dash/Apps/AppReviews.qml:121
173+#: Dash/Previews/Reviews.qml:121
167174msgid "Send"
168−msgstr ""
175+msgstr "Wyślij"
169176
170−#: Dash/Apps/AppReviews.qml:139
177+#: Dash/Previews/Reviews.qml:139
171178msgid "Comments:"
172−msgstr ""
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:"
179+msgstr "Komentarze:"
213180
214181#: Greeter/Lockscreen.qml:142
215182msgid "Emergency Call"
216−msgstr ""
183+msgstr "Telefon ratunkowy"
217184
218185#: Greeter/PassphraseLockscreen.qml:59
219186#, qt-format
@@ -248,15 +215,15 @@ msgstr "Rozpoznanie..."
248215msgid "Search"
249216msgstr "Szukaj"
250217
251−#: plugins/Unity/scope.cpp:336
218+#: plugins/Unity/scope.cpp:398
252219msgid "Sorry, there is nothing that matches your search."
253220msgstr "Nie znaleziono pasujących wyników."
254221
255222#: plugins/Unity/showallfilteroption.cpp:41
256223msgid "All"
257−msgstr ""
224+msgstr "Wszystko"
258225
259−#: Shell.qml:453
226+#: Shell.qml:438
260227#, qt-format
261228msgid "Please enter %1"
262229msgstr "Wprowadź %1"
po/pt_BR.po+37−54
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-10-01 13:05+0000\n"
1212"Last-Translator: Rafael Neri <Unknown>\n"
1313"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "Wikipédia"
8686msgid "YouTube"
8787msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr "Pular introdução"
9292
@@ -134,84 +134,46 @@ msgid ""
134134"phone<br><br>Tap anywhere to start"
135135msgstr ""
136136
137−#: Components/PageHeader.qml:298
137+#: Components/PageHeader.qml:341
138138msgid "Recent searches"
139139msgstr "Pesquisas recentes"
140140
141141#. TRANSLATORS: Number of persons who rated this app
142−#: Dash/Apps/AppInfo.qml:73
142+#. TRANSLATORS: Number of persons who rated this app/video/whatever
143+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
143144#, qt-format
144145msgid "(%1)"
145146msgstr "(%1)"
146147
147148#. TRANSLATORS: Number of persons who wrote reviews for this app
148−#: Dash/Apps/AppInfo.qml:85
149+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
150+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
149151#, qt-format
150152msgid "%1 review"
151153msgid_plural "%1 reviews"
152154msgstr[0] "%1 análise"
153155msgstr[1] "%1 análises"
154156
155−#: Dash/Apps/AppPreview.qml:178
157+#: Dash/Apps/AppPreview.qml:126
156158msgid "Rate this"
157159msgstr "Avaliar isto"
158160
159−#: Dash/Apps/AppReviews.qml:74
161+#: Dash/Previews/Reviews.qml:74
160162msgid "Add a review"
161163msgstr "Adicionar uma análise"
162164
163−#: Dash/Apps/AppReviews.qml:86
165+#: Dash/Previews/Reviews.qml:86
164166msgid "Review"
165167msgstr "Revisão"
166168
167−#: Dash/Apps/AppReviews.qml:121
169+#: Dash/Previews/Reviews.qml:121
168170msgid "Send"
169171msgstr "Enviar"
170172
171−#: Dash/Apps/AppReviews.qml:139
173+#: Dash/Previews/Reviews.qml:139
172174msgid "Comments:"
173175msgstr "Comentários:"
174176
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−
215177#: Greeter/Lockscreen.qml:142
216178msgid "Emergency Call"
217179msgstr "Chamada de emergência"
@@ -249,7 +211,7 @@ msgstr "Falando..."
249211msgid "Search"
250212msgstr "Pesquisar"
251213
252−#: plugins/Unity/scope.cpp:336
214+#: plugins/Unity/scope.cpp:398
253215msgid "Sorry, there is nothing that matches your search."
254216msgstr "Desculpe, não há nada que corresponda à sua pesquisa."
255217
@@ -257,7 +219,28 @@ msgstr "Desculpe, não há nada que corresponda à sua pesquisa."
257219msgid "All"
258220msgstr ""
259221
260−#: Shell.qml:453
222+#: Shell.qml:438
261223#, qt-format
262224msgid "Please enter %1"
263225msgstr "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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-06-27 07:53+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Romanian <ro@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 "
1818"== 0) && (n != 0))) ? 2: 1));\n"
19−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
20−"X-Generator: Launchpad (build 16774)\n"
19+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
20+"X-Generator: Launchpad (build 16799)\n"
2121
2222#: Applications/applications.js:23
2323msgid "Phone"
@@ -87,7 +87,7 @@ msgstr ""
8787msgid "YouTube"
8888msgstr ""
8989
90−#: Components/EdgeDemoOverlay.qml:150
90+#: Components/EdgeDemoOverlay.qml:149
9191msgid "Skip intro"
9292msgstr ""
9393
@@ -133,84 +133,46 @@ msgid ""
133133"phone<br><br>Tap anywhere to start"
134134msgstr ""
135135
136−#: Components/PageHeader.qml:298
136+#: Components/PageHeader.qml:341
137137msgid "Recent searches"
138138msgstr "Căutări recente"
139139
140140#. TRANSLATORS: Number of persons who rated this app
141−#: Dash/Apps/AppInfo.qml:73
141+#. TRANSLATORS: Number of persons who rated this app/video/whatever
142+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
142143#, qt-format
143144msgid "(%1)"
144145msgstr ""
145146
146147#. TRANSLATORS: Number of persons who wrote reviews for this app
147−#: Dash/Apps/AppInfo.qml:85
148+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
149+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
148150#, qt-format
149151msgid "%1 review"
150152msgid_plural "%1 reviews"
151153msgstr[0] ""
152154msgstr[1] ""
153155
154−#: Dash/Apps/AppPreview.qml:178
156+#: Dash/Apps/AppPreview.qml:126
155157msgid "Rate this"
156158msgstr ""
157159
158−#: Dash/Apps/AppReviews.qml:74
160+#: Dash/Previews/Reviews.qml:74
159161msgid "Add a review"
160162msgstr ""
161163
162−#: Dash/Apps/AppReviews.qml:86
164+#: Dash/Previews/Reviews.qml:86
163165msgid "Review"
164166msgstr ""
165167
166−#: Dash/Apps/AppReviews.qml:121
168+#: Dash/Previews/Reviews.qml:121
167169msgid "Send"
168170msgstr ""
169171
170−#: Dash/Apps/AppReviews.qml:139
172+#: Dash/Previews/Reviews.qml:139
171173msgid "Comments:"
172174msgstr ""
173175
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−
214176#: Greeter/Lockscreen.qml:142
215177msgid "Emergency Call"
216178msgstr ""
@@ -248,7 +210,7 @@ msgstr "Vorbire..."
248210msgid "Search"
249211msgstr "Căutare"
250212
251−#: plugins/Unity/scope.cpp:336
213+#: plugins/Unity/scope.cpp:398
252214msgid "Sorry, there is nothing that matches your search."
253215msgstr ""
254216"Ne pare rău, nu este nimic care se potrivește căutării dumneavoastră."
@@ -257,7 +219,13 @@ msgstr ""
257219msgid "All"
258220msgstr ""
259221
260−#: Shell.qml:453
222+#: Shell.qml:438
261223#, qt-format
262224msgid "Please enter %1"
263225msgstr ""
226+
227+#~ msgid "Music"
228+#~ msgstr "Muzică"
229+
230+#~ msgid "Videos"
231+#~ msgstr "Video"
po/ru.po+37−54
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-10-01 05:55+0000\n"
1212"Last-Translator: Zonov Roman <Unknown>\n"
1313"Language-Team: Russian <ru@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
20−"X-Generator: Launchpad (build 16774)\n"
19+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
20+"X-Generator: Launchpad (build 16799)\n"
2121
2222#: Applications/applications.js:23
2323msgid "Phone"
@@ -87,7 +87,7 @@ msgstr "Википедия"
8787msgid "YouTube"
8888msgstr "YouTube"
8989
90−#: Components/EdgeDemoOverlay.qml:150
90+#: Components/EdgeDemoOverlay.qml:149
9191msgid "Skip intro"
9292msgstr "Пропустить обучение"
9393
@@ -138,83 +138,45 @@ msgid ""
138138"phone<br><br>Tap anywhere to start"
139139msgstr ""
140140
141−#: Components/PageHeader.qml:298
141+#: Components/PageHeader.qml:341
142142msgid "Recent searches"
143143msgstr "Последние поисковые запросы"
144144
145145#. TRANSLATORS: Number of persons who rated this app
146−#: Dash/Apps/AppInfo.qml:73
146+#. TRANSLATORS: Number of persons who rated this app/video/whatever
147+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
147148#, qt-format
148149msgid "(%1)"
149150msgstr "(%1)"
150151
151152#. TRANSLATORS: Number of persons who wrote reviews for this app
152−#: Dash/Apps/AppInfo.qml:85
153+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
154+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
153155#, qt-format
154156msgid "%1 review"
155157msgid_plural "%1 reviews"
156158msgstr[0] "%1 отзыв"
157159
158−#: Dash/Apps/AppPreview.qml:178
160+#: Dash/Apps/AppPreview.qml:126
159161msgid "Rate this"
160162msgstr "Оцените это"
161163
162−#: Dash/Apps/AppReviews.qml:74
164+#: Dash/Previews/Reviews.qml:74
163165msgid "Add a review"
164166msgstr "Добавьте отзыв"
165167
166−#: Dash/Apps/AppReviews.qml:86
168+#: Dash/Previews/Reviews.qml:86
167169msgid "Review"
168170msgstr "Отзыв"
169171
170−#: Dash/Apps/AppReviews.qml:121
172+#: Dash/Previews/Reviews.qml:121
171173msgid "Send"
172174msgstr "Отправить"
173175
174−#: Dash/Apps/AppReviews.qml:139
176+#: Dash/Previews/Reviews.qml:139
175177msgid "Comments:"
176178msgstr "Комментарии:"
177179
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−
218180#: Greeter/Lockscreen.qml:142
219181msgid "Emergency Call"
220182msgstr "Экстренный вызов"
@@ -252,7 +214,7 @@ msgstr "Говорите..."
252214msgid "Search"
253215msgstr "Поиск"
254216
255−#: plugins/Unity/scope.cpp:336
217+#: plugins/Unity/scope.cpp:398
256218msgid "Sorry, there is nothing that matches your search."
257219msgstr "Извините, поиск не дал результатов."
258220
@@ -260,7 +222,28 @@ msgstr "Извините, поиск не дал результатов."
260222msgid "All"
261223msgstr ""
262224
263−#: Shell.qml:453
225+#: Shell.qml:438
264226#, qt-format
265227msgid "Please enter %1"
266228msgstr "Пожалуйста, введите %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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-06-26 22:36+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Sinhalese <si@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr ""
9292
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr ""
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr ""
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] ""
151153msgstr[1] ""
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr ""
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr ""
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr ""
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr ""
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr ""
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr ""
@@ -247,7 +209,7 @@ msgstr ""
247209msgid "Search"
248210msgstr ""
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr ""
253215
@@ -255,7 +217,7 @@ msgstr ""
255217msgid "All"
256218msgstr ""
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr ""
po/sl.po+37−54
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-10-02 10:55+0000\n"
1212"Last-Translator: Damir Jerovšek <Unknown>\n"
1313"Language-Team: Slovenian <sl@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || "
1818"n%100==4 ? 3 : 0);\n"
19−"X-Launchpad-Export-Date: 2013-10-03 06:08+0000\n"
20−"X-Generator: Launchpad (build 16791)\n"
19+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
20+"X-Generator: Launchpad (build 16799)\n"
2121
2222#: Applications/applications.js:23
2323msgid "Phone"
@@ -87,7 +87,7 @@ msgstr "Wikipedija"
8787msgid "YouTube"
8888msgstr "YouTube"
8989
90−#: Components/EdgeDemoOverlay.qml:150
90+#: Components/EdgeDemoOverlay.qml:149
9191msgid "Skip intro"
9292msgstr "Preskoči uvod"
9393
@@ -137,18 +137,20 @@ msgstr ""
137137"Sedaj ste osvojili poteze robov ter lahko začnete uporabljati "
138138"telefon<br><br>Tapnite kjerkoli na začetek"
139139
140−#: Components/PageHeader.qml:298
140+#: Components/PageHeader.qml:341
141141msgid "Recent searches"
142142msgstr "Nedavna iskanja"
143143
144144#. TRANSLATORS: Number of persons who rated this app
145−#: Dash/Apps/AppInfo.qml:73
145+#. TRANSLATORS: Number of persons who rated this app/video/whatever
146+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
146147#, qt-format
147148msgid "(%1)"
148149msgstr "(%1)"
149150
150151#. TRANSLATORS: Number of persons who wrote reviews for this app
151−#: Dash/Apps/AppInfo.qml:85
152+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
153+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
152154#, qt-format
153155msgid "%1 review"
154156msgid_plural "%1 reviews"
@@ -157,66 +159,26 @@ msgstr[1] "%1 ocena"
157159msgstr[2] "%1 oceni"
158160msgstr[3] "%1 ocene"
159161
160−#: Dash/Apps/AppPreview.qml:178
162+#: Dash/Apps/AppPreview.qml:126
161163msgid "Rate this"
162164msgstr "Ocenite"
163165
164−#: Dash/Apps/AppReviews.qml:74
166+#: Dash/Previews/Reviews.qml:74
165167msgid "Add a review"
166168msgstr "Dodaj oceno"
167169
168−#: Dash/Apps/AppReviews.qml:86
170+#: Dash/Previews/Reviews.qml:86
169171msgid "Review"
170172msgstr "Ocena"
171173
172−#: Dash/Apps/AppReviews.qml:121
174+#: Dash/Previews/Reviews.qml:121
173175msgid "Send"
174176msgstr "Pošlji"
175177
176−#: Dash/Apps/AppReviews.qml:139
178+#: Dash/Previews/Reviews.qml:139
177179msgid "Comments:"
178180msgstr "Opombe:"
179181
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−
220182#: Greeter/Lockscreen.qml:142
221183msgid "Emergency Call"
222184msgstr "Klic v sili"
@@ -254,7 +216,7 @@ msgstr "Govorjenje ..."
254216msgid "Search"
255217msgstr "Iskanje"
256218
257−#: plugins/Unity/scope.cpp:336
219+#: plugins/Unity/scope.cpp:398
258220msgid "Sorry, there is nothing that matches your search."
259221msgstr "Nič se ne ujema z vašim iskalnim nizom."
260222
@@ -262,7 +224,28 @@ msgstr "Nič se ne ujema z vašim iskalnim nizom."
262224msgid "All"
263225msgstr "Vse"
264226
265−#: Shell.qml:453
227+#: Shell.qml:438
266228#, qt-format
267229msgid "Please enter %1"
268230msgstr "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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-06-27 09:19+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Serbian <sr@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
20−"X-Generator: Launchpad (build 16774)\n"
19+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
20+"X-Generator: Launchpad (build 16799)\n"
2121
2222#: Applications/applications.js:23
2323msgid "Phone"
@@ -87,7 +87,7 @@ msgstr ""
8787msgid "YouTube"
8888msgstr ""
8989
90−#: Components/EdgeDemoOverlay.qml:150
90+#: Components/EdgeDemoOverlay.qml:149
9191msgid "Skip intro"
9292msgstr ""
9393
@@ -133,84 +133,46 @@ msgid ""
133133"phone<br><br>Tap anywhere to start"
134134msgstr ""
135135
136−#: Components/PageHeader.qml:298
136+#: Components/PageHeader.qml:341
137137msgid "Recent searches"
138138msgstr "Скорашње претраге"
139139
140140#. TRANSLATORS: Number of persons who rated this app
141−#: Dash/Apps/AppInfo.qml:73
141+#. TRANSLATORS: Number of persons who rated this app/video/whatever
142+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
142143#, qt-format
143144msgid "(%1)"
144145msgstr ""
145146
146147#. TRANSLATORS: Number of persons who wrote reviews for this app
147−#: Dash/Apps/AppInfo.qml:85
148+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
149+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
148150#, qt-format
149151msgid "%1 review"
150152msgid_plural "%1 reviews"
151153msgstr[0] ""
152154msgstr[1] ""
153155
154−#: Dash/Apps/AppPreview.qml:178
156+#: Dash/Apps/AppPreview.qml:126
155157msgid "Rate this"
156158msgstr ""
157159
158−#: Dash/Apps/AppReviews.qml:74
160+#: Dash/Previews/Reviews.qml:74
159161msgid "Add a review"
160162msgstr ""
161163
162−#: Dash/Apps/AppReviews.qml:86
164+#: Dash/Previews/Reviews.qml:86
163165msgid "Review"
164166msgstr ""
165167
166−#: Dash/Apps/AppReviews.qml:121
168+#: Dash/Previews/Reviews.qml:121
167169msgid "Send"
168170msgstr ""
169171
170−#: Dash/Apps/AppReviews.qml:139
172+#: Dash/Previews/Reviews.qml:139
171173msgid "Comments:"
172174msgstr ""
173175
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−
214176#: Greeter/Lockscreen.qml:142
215177msgid "Emergency Call"
216178msgstr ""
@@ -248,7 +210,7 @@ msgstr "Говор..."
248210msgid "Search"
249211msgstr "Претрага"
250212
251−#: plugins/Unity/scope.cpp:336
213+#: plugins/Unity/scope.cpp:398
252214msgid "Sorry, there is nothing that matches your search."
253215msgstr "Нажалост, претрага није наишла на икакво подударање."
254216
@@ -256,7 +218,13 @@ msgstr "Нажалост, претрага није наишла на икакв
256218msgid "All"
257219msgstr ""
258220
259−#: Shell.qml:453
221+#: Shell.qml:438
260222#, qt-format
261223msgid "Please enter %1"
262224msgstr ""
225+
226+#~ msgid "Music"
227+#~ msgstr "Музика"
228+
229+#~ msgid "Videos"
230+#~ msgstr "Видео"
po/sv.po+16−54
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-06-26 22:36+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Swedish <sv@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr ""
9292
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr ""
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr ""
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] ""
151153msgstr[1] ""
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr ""
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr ""
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr ""
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr ""
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr ""
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr ""
@@ -247,7 +209,7 @@ msgstr ""
247209msgid "Search"
248210msgstr ""
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr ""
253215
@@ -255,7 +217,7 @@ msgstr ""
255217msgid "All"
256218msgstr ""
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr ""
po/te.po+19−54
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-06-27 09:57+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Telugu <te@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr ""
9292
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr ""
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr ""
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] ""
151153msgstr[1] ""
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr ""
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr ""
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr ""
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr ""
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr ""
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr ""
@@ -247,7 +209,7 @@ msgstr ""
247209msgid "Search"
248210msgstr ""
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr ""
253215
@@ -255,7 +217,10 @@ msgstr ""
255217msgid "All"
256218msgstr ""
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr ""
224+
225+#~ msgid "Music"
226+#~ msgstr "సంగీతం"
po/tr.po+37−54
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-10-01 13:21+0000\n"
1212"Last-Translator: Volkan Gezer <Unknown>\n"
1313"Language-Team: Turkish <tr@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "Vikipedi"
8686msgid "YouTube"
8787msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr "İntro'yu geç"
9292
@@ -133,84 +133,46 @@ msgid ""
133133"phone<br><br>Tap anywhere to start"
134134msgstr ""
135135
136−#: Components/PageHeader.qml:298
136+#: Components/PageHeader.qml:341
137137msgid "Recent searches"
138138msgstr "Son Arananlar"
139139
140140#. TRANSLATORS: Number of persons who rated this app
141−#: Dash/Apps/AppInfo.qml:73
141+#. TRANSLATORS: Number of persons who rated this app/video/whatever
142+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
142143#, qt-format
143144msgid "(%1)"
144145msgstr "(%1)"
145146
146147#. TRANSLATORS: Number of persons who wrote reviews for this app
147−#: Dash/Apps/AppInfo.qml:85
148+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
149+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
148150#, qt-format
149151msgid "%1 review"
150152msgid_plural "%1 reviews"
151153msgstr[0] "%1 inceleme"
152154msgstr[1] "%1 inceleme"
153155
154−#: Dash/Apps/AppPreview.qml:178
156+#: Dash/Apps/AppPreview.qml:126
155157msgid "Rate this"
156158msgstr "Oyla"
157159
158−#: Dash/Apps/AppReviews.qml:74
160+#: Dash/Previews/Reviews.qml:74
159161msgid "Add a review"
160162msgstr "Bir inceleme ekle"
161163
162−#: Dash/Apps/AppReviews.qml:86
164+#: Dash/Previews/Reviews.qml:86
163165msgid "Review"
164166msgstr "İnceleme"
165167
166−#: Dash/Apps/AppReviews.qml:121
168+#: Dash/Previews/Reviews.qml:121
167169msgid "Send"
168170msgstr "Gönder"
169171
170−#: Dash/Apps/AppReviews.qml:139
172+#: Dash/Previews/Reviews.qml:139
171173msgid "Comments:"
172174msgstr "Yorumlar:"
173175
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−
214176#: Greeter/Lockscreen.qml:142
215177msgid "Emergency Call"
216178msgstr "Acil Arama"
@@ -248,7 +210,7 @@ msgstr "Konuşuyor..."
248210msgid "Search"
249211msgstr "Ara"
250212
251−#: plugins/Unity/scope.cpp:336
213+#: plugins/Unity/scope.cpp:398
252214msgid "Sorry, there is nothing that matches your search."
253215msgstr "Üzgünüz, aramanızla eşleşen hiçbir şey yok."
254216
@@ -256,7 +218,28 @@ msgstr "Üzgünüz, aramanızla eşleşen hiçbir şey yok."
256218msgid "All"
257219msgstr ""
258220
259−#: Shell.qml:453
221+#: Shell.qml:438
260222#, qt-format
261223msgid "Please enter %1"
262224msgstr "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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11−"PO-Revision-Date: 2013-06-27 11:02+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11+"PO-Revision-Date: 2013-10-09 22:38+0000\n"
12+"Last-Translator: Gheyret T.Kenji <Unknown>\n"
1313"Language-Team: Uyghur <ug@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,13 +86,13 @@ msgstr "ۋىكىپېدىيە"
8686msgid "YouTube"
8787msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr ""
9292
9393#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
95−msgstr ""
95+msgstr "ئوڭ گىرۋەك"
9696
9797#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
@@ -100,7 +100,7 @@ msgstr ""
100100
101101#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103−msgstr ""
103+msgstr "ئۈستى گىرۋەك"
104104
105105#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
@@ -108,7 +108,7 @@ msgstr ""
108108
109109#: Components/EdgeDemo.qml:170
110110msgid "Close"
111−msgstr ""
111+msgstr "ياپ"
112112
113113#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
@@ -116,7 +116,7 @@ msgstr ""
116116
117117#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119−msgstr ""
119+msgstr "سول گىرۋەك"
120120
121121#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
@@ -132,83 +132,44 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr "يېقىنقى ئىزدەشلەر"
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143−msgstr ""
144+msgstr "(%1)"
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150−msgstr[0] ""
151−msgstr[1] ""
152+msgstr[0] "%1 باھا"
152153
153−#: Dash/Apps/AppPreview.qml:178
154+#: Dash/Apps/AppPreview.qml:126
154155msgid "Rate this"
155156msgstr ""
156157
157−#: Dash/Apps/AppReviews.qml:74
158+#: Dash/Previews/Reviews.qml:74
158159msgid "Add a review"
159160msgstr ""
160161
161−#: Dash/Apps/AppReviews.qml:86
162+#: Dash/Previews/Reviews.qml:86
162163msgid "Review"
163164msgstr ""
164165
165−#: Dash/Apps/AppReviews.qml:121
166+#: Dash/Previews/Reviews.qml:121
166167msgid "Send"
167−msgstr ""
168+msgstr "ئەۋەت"
168169
169−#: Dash/Apps/AppReviews.qml:139
170+#: Dash/Previews/Reviews.qml:139
170171msgid "Comments:"
171−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 "ئاپتور:"
172+msgstr "ئىنكاس:"
212173
213174#: Greeter/Lockscreen.qml:142
214175msgid "Emergency Call"
@@ -217,7 +178,7 @@ msgstr ""
217178#: Greeter/PassphraseLockscreen.qml:59
218179#, qt-format
219180msgid "Hello %1"
220−msgstr ""
181+msgstr "سالام %1"
221182
222183#: Greeter/PassphraseLockscreen.qml:59
223184msgid "Hello"
@@ -247,15 +208,30 @@ msgstr "سۆزلەۋاتىسىز…"
247208msgid "Search"
248209msgstr "ئىزدە"
249210
250−#: plugins/Unity/scope.cpp:336
211+#: plugins/Unity/scope.cpp:398
251212msgid "Sorry, there is nothing that matches your search."
252213msgstr "كەچۈرۈڭ، ئىزدىگىنىڭىزگە ماس نەتىجە تېپىلمىدى."
253214
254215#: plugins/Unity/showallfilteroption.cpp:41
255216msgid "All"
256−msgstr ""
217+msgstr "ھەممىسى"
257218
258−#: Shell.qml:453
219+#: Shell.qml:438
259220#, qt-format
260221msgid "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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-09-28 07:54+0000\n"
1212"Last-Translator: Yuri Chornoivan <yurchor@gmail.com>\n"
1313"Language-Team: Ukrainian <uk@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
20−"X-Generator: Launchpad (build 16774)\n"
19+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
20+"X-Generator: Launchpad (build 16799)\n"
2121
2222#: Applications/applications.js:23
2323msgid "Phone"
@@ -87,7 +87,7 @@ msgstr "Вікіпедія"
8787msgid "YouTube"
8888msgstr "YouTube"
8989
90−#: Components/EdgeDemoOverlay.qml:150
90+#: Components/EdgeDemoOverlay.qml:149
9191msgid "Skip intro"
9292msgstr "Пропустити вступ"
9393
@@ -136,18 +136,20 @@ msgid ""
136136"phone<br><br>Tap anywhere to start"
137137msgstr ""
138138
139−#: Components/PageHeader.qml:298
139+#: Components/PageHeader.qml:341
140140msgid "Recent searches"
141141msgstr "Нещодавні пошуки"
142142
143143#. TRANSLATORS: Number of persons who rated this app
144−#: Dash/Apps/AppInfo.qml:73
144+#. TRANSLATORS: Number of persons who rated this app/video/whatever
145+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
145146#, qt-format
146147msgid "(%1)"
147148msgstr "(%1)"
148149
149150#. TRANSLATORS: Number of persons who wrote reviews for this app
150−#: Dash/Apps/AppInfo.qml:85
151+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
152+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
151153#, qt-format
152154msgid "%1 review"
153155msgid_plural "%1 reviews"
@@ -155,66 +157,26 @@ msgstr[0] "%1 рецензія"
155157msgstr[1] "%1 рецензії"
156158msgstr[2] "%1 рецензій"
157159
158−#: Dash/Apps/AppPreview.qml:178
160+#: Dash/Apps/AppPreview.qml:126
159161msgid "Rate this"
160162msgstr "Оцінити"
161163
162−#: Dash/Apps/AppReviews.qml:74
164+#: Dash/Previews/Reviews.qml:74
163165msgid "Add a review"
164166msgstr "Додати рецензію"
165167
166−#: Dash/Apps/AppReviews.qml:86
168+#: Dash/Previews/Reviews.qml:86
167169msgid "Review"
168170msgstr "Рецензія"
169171
170−#: Dash/Apps/AppReviews.qml:121
172+#: Dash/Previews/Reviews.qml:121
171173msgid "Send"
172174msgstr "Надіслати"
173175
174−#: Dash/Apps/AppReviews.qml:139
176+#: Dash/Previews/Reviews.qml:139
175177msgid "Comments:"
176178msgstr "Коментарі:"
177179
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−
218180#: Greeter/Lockscreen.qml:142
219181msgid "Emergency Call"
220182msgstr "Терміновий виклик"
@@ -252,7 +214,7 @@ msgstr "Мовлення…"
252214msgid "Search"
253215msgstr "Пошук"
254216
255−#: plugins/Unity/scope.cpp:336
217+#: plugins/Unity/scope.cpp:398
256218msgid "Sorry, there is nothing that matches your search."
257219msgstr "Вибачте, для вказаних вами ключових слів нічого не знайдено."
258220
@@ -260,7 +222,28 @@ msgstr "Вибачте, для вказаних вами ключових слі
260222msgid "All"
261223msgstr ""
262224
263−#: Shell.qml:453
225+#: Shell.qml:438
264226#, qt-format
265227msgid "Please enter %1"
266228msgstr "Будь ласка, введіть %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 ""
88msgstr ""
99"Project-Id-Version: unity8\n"
1010"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"
1212"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1313"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1414"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -86,7 +86,7 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr ""
9292
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr ""
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr ""
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] ""
151153msgstr[1] ""
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr ""
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr ""
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr ""
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr ""
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr ""
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr ""
@@ -247,7 +209,7 @@ msgstr ""
247209msgid "Search"
248210msgstr ""
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr ""
253215
@@ -255,7 +217,7 @@ msgstr ""
255217msgid "All"
256218msgstr ""
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr ""
po/xh.po+16−54
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"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"
1111"PO-Revision-Date: 2013-09-28 13:20+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Xhosa <xh@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr ""
9292
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr ""
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr ""
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] ""
151153msgstr[1] ""
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr ""
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr ""
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr ""
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr ""
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr ""
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr ""
@@ -247,7 +209,7 @@ msgstr ""
247209msgid "Search"
248210msgstr ""
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr ""
253215
@@ -255,7 +217,7 @@ msgstr ""
255217msgid "All"
256218msgstr ""
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr ""
po/zh_CN.po+39−56
@@ -7,16 +7,16 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11−"PO-Revision-Date: 2013-06-27 10:33+0000\n"
12−"Last-Translator: Anthony Wong <anthony.wong@canonical.com>\n"
10+"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11+"PO-Revision-Date: 2013-10-09 13:51+0000\n"
12+"Last-Translator: Aron Xu <Unknown>\n"
1313"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr "维基百科"
8686msgid "YouTube"
8787msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr ""
9292
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr "近期搜索"
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr ""
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] ""
151153msgstr[1] ""
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr ""
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr ""
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr ""
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr ""
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr ""
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr ""
@@ -247,7 +209,7 @@ msgstr "讲话中..."
247209msgid "Search"
248210msgstr "搜索"
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr "对不起,没有找到您想要的结果。"
253215
@@ -255,7 +217,28 @@ msgstr "对不起,没有找到您想要的结果。"
255217msgid "All"
256218msgstr ""
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr ""
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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-06-27 10:24+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16774)\n"
18+"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19+"X-Generator: Launchpad (build 16799)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,7 +86,7 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:150
89+#: Components/EdgeDemoOverlay.qml:149
9090msgid "Skip intro"
9191msgstr ""
9292
@@ -132,84 +132,46 @@ msgid ""
132132"phone<br><br>Tap anywhere to start"
133133msgstr ""
134134
135−#: Components/PageHeader.qml:298
135+#: Components/PageHeader.qml:341
136136msgid "Recent searches"
137137msgstr "最近搜尋"
138138
139139#. TRANSLATORS: Number of persons who rated this app
140−#: Dash/Apps/AppInfo.qml:73
140+#. TRANSLATORS: Number of persons who rated this app/video/whatever
141+#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
141142#, qt-format
142143msgid "(%1)"
143144msgstr ""
144145
145146#. TRANSLATORS: Number of persons who wrote reviews for this app
146−#: Dash/Apps/AppInfo.qml:85
147+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148+#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
147149#, qt-format
148150msgid "%1 review"
149151msgid_plural "%1 reviews"
150152msgstr[0] ""
151153msgstr[1] ""
152154
153−#: Dash/Apps/AppPreview.qml:178
155+#: Dash/Apps/AppPreview.qml:126
154156msgid "Rate this"
155157msgstr ""
156158
157−#: Dash/Apps/AppReviews.qml:74
159+#: Dash/Previews/Reviews.qml:74
158160msgid "Add a review"
159161msgstr ""
160162
161−#: Dash/Apps/AppReviews.qml:86
163+#: Dash/Previews/Reviews.qml:86
162164msgid "Review"
163165msgstr ""
164166
165−#: Dash/Apps/AppReviews.qml:121
167+#: Dash/Previews/Reviews.qml:121
166168msgid "Send"
167169msgstr ""
168170
169−#: Dash/Apps/AppReviews.qml:139
171+#: Dash/Previews/Reviews.qml:139
170172msgid "Comments:"
171173msgstr ""
172174
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−
213175#: Greeter/Lockscreen.qml:142
214176msgid "Emergency Call"
215177msgstr ""
@@ -247,7 +209,7 @@ msgstr "說話中..."
247209msgid "Search"
248210msgstr "搜尋"
249211
250−#: plugins/Unity/scope.cpp:336
212+#: plugins/Unity/scope.cpp:398
251213msgid "Sorry, there is nothing that matches your search."
252214msgstr "很抱歉,找不到符合您想搜尋的結果。"
253215
@@ -255,7 +217,13 @@ msgstr "很抱歉,找不到符合您想搜尋的結果。"
255217msgid "All"
256218msgstr ""
257219
258−#: Shell.qml:453
220+#: Shell.qml:438
259221#, qt-format
260222msgid "Please enter %1"
261223msgstr ""
224+
225+#~ msgid "Music"
226+#~ msgstr "音樂"
227+
228+#~ msgid "Videos"
229+#~ msgstr "影片"
tests/autopilot/unity8/shell/tests/__init__.py+125−8
@@ -28,9 +28,12 @@ from autopilot.platform import model
2828from autopilot.testcase import AutopilotTestCase
2929from autopilot.matchers import Eventually
3030from autopilot.input import Touch
31+from autopilot.introspection import get_proxy_object_for_existing_process
3132from autopilot.display import Display
3233import logging
3334import os.path
35+import subprocess
36+import sys
3437from testtools.matchers import Equals, NotEquals
3538
3639from unity8 import (
@@ -51,6 +54,7 @@ UNITYSHELL_GSETTINGS_PATH = "/org/compiz/profiles/unity/plugins/unityshell/"
5154UNITYSHELL_LAUNCHER_KEY = "launcher-hide-mode"
5255UNITYSHELL_LAUNCHER_MODE = 1 # launcher hidden
5356
57+
5458def _get_device_emulation_scenarios(devices='All'):
5559 nexus4 = ('Desktop Nexus 4',
5660 dict(app_width=768, app_height=1280, grid_unit_px=18))
@@ -67,14 +71,43 @@ def _get_device_emulation_scenarios(devices='All'):
6771 elif devices == 'Nexus10':
6872 return [nexus10]
6973 else:
70− raise RuntimeException('Unrecognized device-option "%s" passed.' % devices)
74+ raise RuntimeError(
75+ 'Unrecognized device-option "%s" passed.' % devices
76+ )
7177 else:
7278 return [native]
7379
80+
7481class UnityTestCase(AutopilotTestCase):
7582
7683 """A test case base class for the Unity shell tests."""
7784
85+ @classmethod
86+ def setUpClass(cls):
87+ try:
88+ output = subprocess.check_output([
89+ "/sbin/initctl",
90+ "status",
91+ "unity8"
92+ ], stderr=subprocess.STDOUT)
93+ except subprocess.CalledProcessError, e:
94+ sys.stderr.write(
95+ "Error: `initctl status unity8` failed, most probably the unity8 session could not be found:\n\n"
96+ "{0}\n"
97+ "Please install unity8 or copy data/unity8.conf to {1}\n".format(
98+ e.output,
99+ os.path.join(os.getenv("XDG_CONFIG_HOME", os.path.join(os.getenv("HOME"), ".config")), "upstart")
100+ ))
101+ sys.exit(1)
102+
103+ if "start/" in output:
104+ sys.stderr.write(
105+ "Error: Unity is currently running, these tests require it to be 'stopped'.\n"
106+ "Please run this command before running these tests: \n"
107+ "initctl stop unity8\n"
108+ )
109+ sys.exit(2)
110+
78111 def setUp(self):
79112 super(UnityTestCase, self).setUp()
80113 if Gio is not None and UNITYSHELL_GSETTINGS_SCHEMA in Gio.Settings.list_relocatable_schemas():
@@ -87,6 +120,14 @@ class UnityTestCase(AutopilotTestCase):
87120 self._proxy = None
88121 self._lightdm_mock_type = None
89122 self._qml_mock_enabled = True
123+ self._environment = {}
124+
125+ #### FIXME: This is a work around re: lp:1238417 ####
126+ if model() != "Desktop":
127+ from autopilot.input import _uinput
128+ _uinput._touch_device = _uinput.create_touch_device()
129+ ####
130+
90131 self.touch = Touch.create()
91132 self._setup_display_details()
92133
@@ -129,6 +170,9 @@ class UnityTestCase(AutopilotTestCase):
129170 self.grid_size = int(os.getenv('GRID_UNIT_PX'))
130171 else:
131172 self.grid_size = int(self.grid_unit_px / scale_divisor)
173+ self._environment["GRID_UNIT_PX"] = str(self.grid_size)
174+ # FIXME this is only needed for Hud.get_close_button_coords
175+ # we should probably rework it so that it's not required
132176 self.patch_environment("GRID_UNIT_PX", str(self.grid_size))
133177
134178 def _geo_larger_than_display(self, width, height):
@@ -147,6 +191,38 @@ class UnityTestCase(AutopilotTestCase):
147191 divisor = divisor * 2
148192 return divisor
149193
194+ def _patch_environment(self, key, value):
195+ """Wrapper for patching env for upstart environment."""
196+ try:
197+ current_value = subprocess.check_output([
198+ "/sbin/initctl",
199+ "get-env",
200+ "--global",
201+ key
202+ ], stderr=subprocess.STDOUT).rstrip()
203+ except subprocess.CalledProcessError:
204+ current_value = None
205+
206+ subprocess.call([
207+ "/sbin/initctl",
208+ "set-env",
209+ "--global",
210+ "%s=%s" % (key, value)
211+ ], stderr=subprocess.STDOUT)
212+ self.addCleanup(self._upstart_reset_env, key, current_value)
213+
214+ def _upstart_reset_env(self, key, value):
215+ logger.info("Resetting upstart env %s to %s", key, value)
216+ if value is None:
217+ subprocess.call(["/sbin/initctl", "unset-env", key], stderr=subprocess.STDOUT)
218+ else:
219+ subprocess.call([
220+ "/sbin/initctl",
221+ "set-env",
222+ "--global",
223+ "%s=%s" % (key, value)
224+ ], stderr=subprocess.STDOUT)
225+
150226 def launch_unity(self, **kwargs):
151227 """Launch the unity shell, return a proxy object for it."""
152228 binary_path = get_binary_path()
@@ -164,13 +240,22 @@ class UnityTestCase(AutopilotTestCase):
164240 if self._qml_mock_enabled:
165241 self._setup_extra_mock_environment_patch()
166242
167− app_proxy = self.launch_test_application(
243+ # FIXME: we shouldn't be doing this
244+ # $MIR_SOCKET, fallback to $XDG_RUNTIME_DIR/mir_socket and /tmp/mir_socket as last resort
245+ try:
246+ os.unlink(os.getenv('MIR_SOCKET', os.path.join(os.getenv('XDG_RUNTIME_DIR', "/tmp"), "mir_socket")))
247+ except OSError:
248+ pass
249+ try:
250+ os.unlink("/tmp/mir_socket")
251+ except OSError:
252+ pass
253+
254+ app_proxy = self._launch_unity_with_upstart(
168255 binary_path,
169− *self.unity_geometry_args,
170− app_type='qt',
171− emulator_base=UnityEmulatorBase,
172− **kwargs
256+ self.unity_geometry_args
173257 )
258+
174259 self._set_proxy(app_proxy)
175260
176261 # Ensure that the dash is visible before we return:
@@ -180,6 +265,38 @@ class UnityTestCase(AutopilotTestCase):
180265
181266 return app_proxy
182267
268+ def _launch_unity_with_upstart(self, binary_path, args):
269+ logger.info("Starting unity")
270+ self._patch_environment("QT_LOAD_TESTABILITY", 1)
271+
272+ binary_arg = "BINARY=%s" % binary_path
273+ extra_args = "ARGS=%s" % " ".join(args)
274+
275+ output = subprocess.check_output([
276+ "/sbin/initctl",
277+ "start",
278+ "unity8",
279+ binary_arg,
280+ extra_args
281+ ] + ["%s=%s" % (k,v) for k,v in self._environment.iteritems()],
282+ stderr=subprocess.STDOUT)
283+
284+ self.addCleanup(self._cleanup_launching_upstart_unity)
285+
286+ pid = int(output.split()[-1])
287+
288+ return get_proxy_object_for_existing_process(
289+ pid=pid,
290+ emulator_base=UnityEmulatorBase,
291+ )
292+
293+ def _cleanup_launching_upstart_unity(self):
294+ logger.info("Stopping unity")
295+ try:
296+ subprocess.check_output(["/sbin/initctl", "stop", "unity8"], stderr=subprocess.STDOUT)
297+ except subprocess.CalledProcessError:
298+ logger.warning("Appears unity was already stopped!")
299+
183300 def patch_lightdm_mock(self, mock_type='single'):
184301 self._lightdm_mock_type = mock_type
185302 logger.info("Setting up LightDM mock type '%s'", mock_type)
@@ -193,7 +310,7 @@ class UnityTestCase(AutopilotTestCase):
193310 new_ld_library_path = ':'.join(new_ld_library_path)
194311 logger.info("New library path: %s", new_ld_library_path)
195312
196− self.patch_environment('LD_LIBRARY_PATH', new_ld_library_path)
313+ self._environment['LD_LIBRARY_PATH'] = new_ld_library_path
197314
198315 def _get_lightdm_mock_path(self, mock_type):
199316 lib_path = get_mocks_library_path()
@@ -215,7 +332,7 @@ class UnityTestCase(AutopilotTestCase):
215332
216333 qml_import_path = ':'.join(qml_import_path)
217334 logger.info("New QML2 import path: %s", qml_import_path)
218− self.patch_environment('QML2_IMPORT_PATH', qml_import_path)
335+ self._environment['QML2_IMPORT_PATH'] = qml_import_path
219336
220337 def _set_proxy(self, proxy):
221338 """Keep a copy of the proxy object, so we can use it to get common
tests/mocks/Unity/Application/ApplicationInfo.h+1
@@ -35,6 +35,7 @@ class ApplicationInfo : public ApplicationInfoInterface {
3535 Q_OBJECT
3636
3737 Q_PROPERTY(bool fullscreen READ fullscreen WRITE setFullscreen NOTIFY fullscreenChanged)
38+ Q_PROPERTY(Stage stage READ stage WRITE setStage NOTIFY stageChanged)
3839
3940 // Only exists in this fake implementation
4041
tests/mocks/Unity/Application/ApplicationManager.h+1
@@ -99,6 +99,7 @@ class ApplicationManager : public ApplicationManagerInterface {
9999 void keyboardHeightChanged();
100100 void keyboardVisibleChanged();
101101 void focusRequested(FavoriteApplication favoriteApplication);
102+ void focusRequested(const QString &appId);
102103
103104 private:
104105 void add(ApplicationInfo *application);
tests/mocks/Unity/Indicators/CMakeLists.txt+1−1
@@ -35,7 +35,7 @@ target_link_libraries(IndicatorsFakeQml)
3535qt5_use_modules(IndicatorsFakeQml Core Qml Quick)
3636
3737file(GLOB IndicatorsFake_QMLFILES
38− IndicatorsModel.qml
38+ *.qml
3939 qml/FakeMenuPage.qml
4040)
4141
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 @@
11module Unity.Indicators
22plugin IndicatorsFakeQml
33
4+CachedUnityMenuModel 0.1 CachedUnityMenuModel.qml
45IndicatorsModel 0.1 IndicatorsModel.qml
56FakeMenuPage 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)
3131 : QObject(parent)
3232 , m_visible(false)
3333 , m_searching(false)
34+ , m_isActive(false)
3435 , m_categories(new Categories(this))
3536 , m_results(new DeeListModel(this))
3637{
@@ -46,6 +47,7 @@ Scope::Scope(QString const& id, QString const& name, bool visible, QObject* pare
4647 , m_name(name)
4748 , m_visible(visible)
4849 , m_searching(false)
50+ , m_isActive(false)
4951 , m_categories(new Categories(this))
5052 , m_results(new DeeListModel(this))
5153{
@@ -107,6 +109,10 @@ bool Scope::visible() const {
107109 return m_visible;
108110}
109111
112+bool Scope::isActive() const {
113+ return m_isActive;
114+}
115+
110116void Scope::setName(const QString &str) {
111117 if (str != m_name) {
112118 m_name = str;
@@ -128,6 +134,13 @@ void Scope::setFormFactor(const QString &str) {
128134 }
129135}
130136
137+void Scope::setActive(const bool active) {
138+ if (active != m_isActive) {
139+ m_isActive = active;
140+ Q_EMIT isActiveChanged();
141+ }
142+}
143+
131144void Scope::setSearchInProgress(const bool inProg) {
132145 if (inProg != m_searching) {
133146 m_searching = inProg;
tests/mocks/Unity/fake_scope.h+5
@@ -41,6 +41,7 @@ class Scope : public QObject
4141 Q_PROPERTY(QString searchQuery READ searchQuery WRITE setSearchQuery NOTIFY searchQueryChanged)
4242 Q_PROPERTY(QString noResultsHint READ noResultsHint WRITE setNoResultsHint NOTIFY noResultsHintChanged)
4343 Q_PROPERTY(QString formFactor READ formFactor WRITE setFormFactor NOTIFY formFactorChanged)
44+ Q_PROPERTY(bool isActive READ isActive WRITE setActive NOTIFY isActiveChanged)
4445
4546public:
4647 Scope(QObject* parent = 0);
@@ -60,12 +61,14 @@ public:
6061 QString searchQuery() const;
6162 QString noResultsHint() const;
6263 QString formFactor() const;
64+ bool isActive() const;
6365
6466 /* setters */
6567 void setName(const QString& name);
6668 void setSearchQuery(const QString& search_query);
6769 void setNoResultsHint(const QString& hint);
6870 void setFormFactor(const QString& form_factor);
71+ void setActive(const bool);
6972 void setSearchInProgress(const bool inProg);
7073
7174 Q_INVOKABLE void activate(const QVariant &uri, const QVariant &icon_hint, const QVariant &category,
@@ -89,6 +92,7 @@ Q_SIGNALS:
8992 void searchQueryChanged();
9093 void noResultsHintChanged();
9194 void formFactorChanged();
95+ void isActiveChanged();
9296
9397 // signals triggered by activate(..) or preview(..) requests.
9498 void previewReady(Preview *preview);
@@ -107,6 +111,7 @@ protected:
107111 QString m_formFactor;
108112 bool m_visible;
109113 bool m_searching;
114+ bool m_isActive;
110115
111116 Categories* m_categories;
112117 DeeListModel* m_results;
tests/plugins/Unity/CMakeLists.txt+1−1
@@ -1,7 +1,7 @@
11add_subdirectory(Indicators)
22add_subdirectory(Launcher)
33
4−pkg_check_modules(UNITYCORE REQUIRED unity-core-6.0)
4+pkg_check_modules(UNITYCORE REQUIRED unity-core-6.0>=7.1.1)
55pkg_check_modules(LIBUNITYPROTO REQUIRED unity-protocol-private)
66pkg_check_modules(LIBUNITY REQUIRED unity)
77pkg_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+
13include_directories(
24 ${CMAKE_CURRENT_BINARY_DIR}
35 ${CMAKE_CURRENT_SOURCE_DIR}/../../../../plugins/Unity/Indicators
6+ ${QMENUMODEL_INCLUDE_DIRS}
47 )
58
69macro(run_tests)
@@ -16,6 +19,7 @@ macro(run_tests)
1619 qt5_use_modules(${_test}Exec Test Core Qml)
1720 target_link_libraries(${_test}Exec
1821 IndicatorsQml
22+ ${QMENUMODEL_LDFLAGS}
1923 )
2024 set(_test_list "${_test_list};${_test}")
2125 endforeach()
@@ -25,4 +29,5 @@ run_tests(
2529 indicatorsmanagertest
2630 indicatorsmodeltest
2731 menucontentactivatortest
32+ rootactionstatetest
2833 )
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:
4343 QCOMPARE(backend.storedApplications(), QStringList() << "rel-icon" << "abs-icon");
4444 }
4545
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−
6746 void testIcon_data() {
6847 QTest::addColumn<QString>("appId");
6948 QTest::addColumn<QString>("expectedIcon");
tests/plugins/Unity/resultstest.cpp+87
@@ -19,6 +19,7 @@
1919
2020#include <QTest>
2121#include <dee.h>
22+#include <glib.h>
2223
2324#include "resultstest.h"
2425#include "categoryresults.h"
@@ -106,4 +107,90 @@ void ResultsTest::testIconColumn()
106107 QCOMPARE(transformedIcon, result);
107108}
108109
110+class GVariantWrapper
111+{
112+public:
113+ GVariantWrapper() : variant(NULL) {}
114+ GVariantWrapper(GVariant* v) {
115+ variant = v ? g_variant_ref_sink(v) : NULL;
116+ }
117+ GVariantWrapper(const GVariantWrapper& other) {
118+ variant = other.variant ? g_variant_ref(other.variant) : NULL;
119+ }
120+ ~GVariantWrapper() {
121+ if (variant) g_variant_unref(variant);
122+ }
123+
124+ GVariant* variant;
125+};
126+
127+Q_DECLARE_METATYPE(GVariantWrapper)
128+
129+void ResultsTest::testSpecialIcons_data()
130+{
131+ QTest::addColumn<QString>("uri");
132+ QTest::addColumn<GVariantWrapper>("metadata");
133+ QTest::addColumn<QString>("result");
134+
135+ GVariant *inner;
136+ GVariantBuilder builder, inner_builder;
137+
138+ g_variant_builder_init(&inner_builder, G_VARIANT_TYPE_VARDICT);
139+ g_variant_builder_add(&inner_builder, "{sv}", "artist", g_variant_new_string("U2"));
140+ g_variant_builder_add(&inner_builder, "{sv}", "album", g_variant_new_string("War"));
141+
142+ g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT);
143+ g_variant_builder_add(&builder, "{sv}", "content", g_variant_builder_end(&inner_builder));
144+
145+ QTest::newRow("simple") << "file:///foo.mp3" << GVariantWrapper(g_variant_builder_end(&builder)) << "image://albumart/U2/War";
146+
147+ g_variant_builder_init(&inner_builder, G_VARIANT_TYPE_VARDICT);
148+ g_variant_builder_add(&inner_builder, "{sv}", "artist", g_variant_new_string("U2"));
149+ g_variant_builder_add(&inner_builder, "{sv}", "album", g_variant_new_string("War/Joshua tree"));
150+ inner = g_variant_builder_end(&inner_builder);
151+
152+ g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT);
153+ g_variant_builder_add(&builder, "{sv}", "content", inner);
154+
155+ QTest::newRow("with-slash") << "file:///foo.mp3" << GVariantWrapper(g_variant_builder_end(&builder)) << "image://albumart/U2/War%2FJoshua%20tree";
156+
157+ g_variant_builder_init(&inner_builder, G_VARIANT_TYPE_VARDICT);
158+ g_variant_builder_add(&inner_builder, "{sv}", "artist", g_variant_new_string("U2"));
159+ g_variant_builder_add(&inner_builder, "{sv}", "album", g_variant_new_string("War"));
160+ inner = g_variant_builder_end(&inner_builder);
161+
162+ g_variant_builder_init(&inner_builder, G_VARIANT_TYPE_VARDICT);
163+ g_variant_builder_add(&inner_builder, "{sv}", "content", inner);
164+
165+ g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT);
166+ g_variant_builder_add(&builder, "{sv}", "content", g_variant_builder_end(&inner_builder));
167+
168+ QTest::newRow("nested") << "file:///foo.mp3" << GVariantWrapper(g_variant_builder_end(&builder)) << "image://albumart/U2/War";
169+}
170+
171+void ResultsTest::testSpecialIcons()
172+{
173+ QFETCH(QString, uri);
174+ QFETCH(GVariantWrapper, metadata);
175+ QFETCH(QString, result);
176+ auto deeModel = createBackendModel();
177+ dee_model_append (deeModel,
178+ uri.toLocal8Bit().constData(),
179+ "",
180+ 0,
181+ 0,
182+ "audio/mp3",
183+ "Test",
184+ "",
185+ uri.toLocal8Bit().constData(),
186+ metadata.variant);
187+
188+ CategoryResults* results = new CategoryResults(this);
189+ results->setModel(deeModel);
190+
191+ auto index = results->index(0, 0); // there's just one result
192+ auto transformedIcon = index.data(CategoryResults::Roles::RoleIconHint).toString();
193+ QCOMPARE(transformedIcon, result);
194+}
195+
109196QTEST_MAIN(ResultsTest)
tests/plugins/Unity/resultstest.h+2
@@ -30,6 +30,8 @@ class ResultsTest : public QObject
3030 void testAllColumns();
3131 void testIconColumn_data();
3232 void testIconColumn();
33+ void testSpecialIcons_data();
34+ void testSpecialIcons();
3335};
3436
3537#endif
tests/qmltests/CMakeLists.txt+4−3
@@ -17,7 +17,7 @@ add_qml_test(Components MathLocal)
1717add_qml_test(Components OpenEffect)
1818add_qml_test(Components RatingStars)
1919add_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)
2121add_qml_test(Panel IndicatorItem)
2222add_qml_test(utils/Unity/Test UnityTest)
2323
@@ -43,15 +43,16 @@ add_qml_test(Components Tile)
4343add_qml_test(Components PageHeader)
4444add_qml_test(Dash Dash IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
4545add_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})
4747add_qml_test(Dash DashPreview)
48+add_qml_test(Dash GenericPreview)
4849add_qml_test(Dash GenericScopeView IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
4950add_qml_test(Dash ScopeView IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
5051add_qml_test(Dash FilterGrids IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/plugins ${CMAKE_CURRENT_SOURCE_DIR}/plugins
5152 ${CMAKE_BINARY_DIR}/tests/mocks)
5253add_qml_test(Dash/Apps RunningApplicationsGrid IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
5354add_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)
5556add_qml_test(Greeter Lockscreen IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS}
5657 PROPERTIES ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full")
5758add_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 {
7070
7171 LazyImage {
7272 id: lazy3
73− height: units.gu(10)
73+ height: units.gu(12)
7474 scaleTo: "height"
7575 }
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+ }
7690 }
7791 }
7892
@@ -94,6 +108,7 @@ Rectangle {
94108 ImageControls { id: controls1; image: lazy1 }
95109 ImageControls { id: controls2; image: lazy2 }
96110 ImageControls { id: controls3; image: lazy3 }
111+ ImageControls { id: controls4; image: lazy4 }
97112 }
98113 }
99114
@@ -112,21 +127,26 @@ Rectangle {
112127
113128 function test_lazyimage_data() {
114129 return [
115− {tag: "Unbound Blank", image: lazy1, func: controls1.blank, width: units.gu(10), height: units.gu(10), placeholder: true},
116− {tag: "Unbound Wide", image: lazy1, func: controls1.wide, transition: "readyTransition", width: 160, height: 80},
117− {tag: "Unbound Square", image: lazy1, func: controls1.square, transition: "readyTransition", width: 160, height: 160},
118− {tag: "Unbound Portrait", image: lazy1, func: controls1.portrait, transition: "readyTransition", width: 80, height: 160},
119− {tag: "Unbound Bad path", image: lazy1, func: controls1.badpath, transition: "genericTransition", width: units.gu(10), height: 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},
121− {tag: "Width-bound Wide", image: lazy2, func: controls2.wide, transition: "readyTransition", width: units.gu(30), height: units.gu(15)},
122− {tag: "Width-bound Square", image: lazy2, func: controls2.square, transition: "readyTransition", width: units.gu(30), height: units.gu(30)},
123− {tag: "Width-bound Portrait", image: lazy2, func: controls2.portrait, transition: "readyTransition", width: units.gu(30), height: units.gu(60)},
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},
125− {tag: "Height-bound Blank", image: lazy3, func: controls3.blank, width: units.gu(10), height: units.gu(10), placeholder: true},
126− {tag: "Height-bound Wide", image: lazy3, func: controls3.wide, transition: "readyTransition", width: units.gu(20), height: units.gu(10)},
127− {tag: "Height-bound Square", image: lazy3, func: controls3.square, transition: "readyTransition", width: units.gu(10), height: units.gu(10)},
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},
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},
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)},
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)},
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)},
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},
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},
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)},
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)},
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)},
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},
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},
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)},
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)},
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},
130150 ]
131151 }
132152
@@ -144,6 +164,15 @@ Rectangle {
144164 compare(data.image.width, data.width);
145165 compare(data.image.height, data.height);
146166
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+
147176 // check the placeholder
148177 var placeholder = findChild(data.image, "placeholder");
149178 compare(placeholder.visible, data.placeholder ? true : false);
tests/qmltests/Dash/Apps/tst_AppPreview.qml+60−24
@@ -42,6 +42,7 @@ Item {
4242 QtObject { id: rated; property int value: 120 }
4343 QtObject { id: reviews; property int value: 8 }
4444 QtObject { id: progress; property string value: "source" }
45+ QtObject { id: publisher; property string value: "Ubuntu Developer" }
4546 QtObject { id: comments; property var value: [
4647 ["Unity User", 4, "08/20/2013", root.commentary],
4748 ["Unity User", 8, "01/15/2013", root.commentary],
@@ -62,7 +63,8 @@ Item {
6263 property var infoMap: {
6364 "more-screenshots": screenshots,
6465 "rated": rated,
65− "comments": comments
66+ "comments": comments,
67+ "publisher": publisher
6668 }
6769 property var actions: [
6870 { "id": 123, "displayName": "action1" },
@@ -84,6 +86,7 @@ Item {
8486 "more-screenshots": screenshots,
8587 "rated": rated,
8688 "comments": comments,
89+ "publisher": publisher,
8790 "progressbar_source": progressSource
8891 }
8992 property var actions: [
@@ -109,26 +112,31 @@ Item {
109112 name: "AppPreview"
110113 when: windowShown
111114
115+ function init() {
116+ waitForRendering(appPreview)
117+ }
118+
112119 function cleanup() {
113120 root.calls = new Array();
114121 sendPreviewSpy.clear();
115− var reviewField = findChild(appPreview, "reviewField");
116− reviewField.focus = false;
117− reviewField.text = "";
118− data.rating = rating.value;
122+ // TODO: This doesn't work right now as Reviews are disabled
123+ //var reviewField = findChild(appPreview, "reviewField");
124+ //reviewField.focus = false;
125+ //reviewField.text = "";
126+ //data.rating = rating.value;
119127 dataProgress.infoMap["progressbar_source"].value = "service";
120− var appReviews = findChild(appPreview, "appReviews");
121− appReviews.visible = false;
122− appPreview.keyboardSize = 0;
128+ //var appReviews = findChild(appPreview, "appReviews");
129+ //appReviews.visible = false;
130+ //appPreview.keyboardSize = 0;
123131 }
124132
125133 function test_actions() {
126− var buttons = findChild(appPreview, "gridButtons");
134+ var buttons = findChild(appPreview, "buttonList");
127135 compare(buttons.count, 3, "Not the proper amount of actions detected.");
128136
129137 for(var i = 0; i < buttons.count; i++) {
130− buttons.currentIndex = i;
131− buttons.currentItem.clicked();
138+ var button = findChild(appPreview, "button" + i);
139+ mouseClick(button, 1, 1);
132140 }
133141
134142 var actions = data.actions;
@@ -137,6 +145,14 @@ Item {
137145 }
138146 }
139147
148+ function test_check_app_info() {
149+ var appInfo = findChild(appPreview, "previewHeader");
150+ var titleLabel = findChild(appInfo, "titleLabel");
151+ var subtitleLabel = findChild(appInfo, "subtitleLabel");
152+ compare(titleLabel.text, data.title, "App Title doesn't match.");
153+ compare(subtitleLabel.text, publisher.value, "Publisher name doesn't match.");
154+ }
155+
140156 function test_rated() {
141157 var rated = findChild(appPreview, "ratedLabel");
142158 compare(rated.text, "(120)", "Rates not equal");
@@ -147,13 +163,18 @@ Item {
147163 compare(rated.text, "8 reviews", "Reviews don't match");
148164 }
149165
166+ // TODO: Disabled as reviewing and commenting is currently disabled
150167 function test_send_review() {
168+ skip();
151169 var appReviews = findChild(appPreview, "appReviews");
152170 appReviews.sendReview("review");
153171 sendPreviewSpy.wait();
154172 }
155173
156174 function test_review_focus() {
175+ skip();
176+ var columnReviewRating = findChild(appPreview, "columnReviewRating");
177+ columnReviewRating.visible = true;
157178 var appReviews = findChild(appPreview, "appReviews");
158179 appReviews.visible = true;
159180 var sendButton = findChild(appReviews, "sendButton");
@@ -168,6 +189,7 @@ Item {
168189 }
169190
170191 function test_comments() {
192+ skip();
171193 var commentsArea = findChild(appPreview, "commentsArea");
172194 compare(commentsArea.count, 3);
173195 for(var i = 0; i < 3; i++) {
@@ -183,6 +205,7 @@ Item {
183205 }
184206
185207 function test_negative_rating() {
208+ skip();
186209 data.rating = -1.0;
187210 var rated = findChild(appPreview, "reviewsLabel");
188211 verify(rated.visible == false);
@@ -194,6 +217,22 @@ Item {
194217 verify(buttons.visible == true);
195218 }
196219
220+ function test_automatic_scroll_on_keyboard_shown() {
221+ skip();
222+ waitForRendering(appPreview);
223+ var appReviews = findChild(appPreview, "appReviews");
224+ appReviews.visible = true;
225+
226+ var leftFlickable = findChild(appPreview, "leftFlickable");
227+ leftFlickable.contentY = leftFlickable.contentHeight;
228+ var reviewField = findChild(appReviews, "reviewField");
229+ appPreview.keyboardSize = 400;
230+ appReviews.editing(reviewField);
231+ var newFlickPos = leftFlickable.contentY;
232+ var keyboardY = shell.height - appPreview.keyboardSize;
233+ verify(newFlickPos < keyboardY);
234+ }
235+
197236 function test_progress_show() {
198237 appPreview.previewData = dataProgress;
199238 var progress = findChild(appPreview, "progressBar");
@@ -220,20 +259,17 @@ Item {
220259 compare(root.calls[0][1], {"error": "DOWNLOAD ERROR"}, "Data of action not found.");
221260 }
222261
223− function test_automatic_scroll_on_keyboard_shown() {
224− waitForRendering(appPreview);
225− var appReviews = findChild(appPreview, "appReviews");
226− appReviews.visible = true;
262+ function test_placeholderScreenshot() {
263+ var placeholderScreenshot = findChild(appPreview, "placeholderScreenshot");
264+ compare(placeholderScreenshot.visible, false);
227265
228− var leftFlickable = findChild(appPreview, "leftFlickable");
229− leftFlickable.contentY = leftFlickable.contentHeight;
230− var reviewField = findChild(appReviews, "reviewField");
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− }
266+ data.infoMap["more-screenshots"] = [];
267+ appPreview.previewData = data;
268+ tryCompare(placeholderScreenshot, "visible", true);
237269
270+ data.infoMap["more-screenshots"] = screenshots;
271+ appPreview.previewData = data;
272+ tryCompare(placeholderScreenshot, "visible", false);
273+ }
238274 }
239275}
tests/qmltests/Dash/Apps/tst_RunningApplicationsGrid.qml+24−4
@@ -195,9 +195,9 @@ Item {
195195 !runningApplicationsGrid.terminationModeEnabled
196196 }
197197
198− // While on termination mode, clicking a running application tile causes the
199− // corresponding application to be terminated.
200− function test_clickTileToTerminateApp() {
198+ // While on termination mode, clicking a running application tile, outside of
199+ // the close icon should do nothing
200+ function test_clickTileNotClose() {
201201 runningApplicationsGrid.terminationModeEnabled = true
202202
203203 var calendarTile = findChild(runningApplicationsGrid, "runningAppTile Calendar")
@@ -207,10 +207,30 @@ Item {
207207
208208 mouseClick(calendarTile, calendarTile.width/2, calendarTile.height/2)
209209
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+
210230 verify(!fakeRunningAppsModel.contains("calendar"))
211231
212232 // The tile for the Calendar app should eventually vanish since the
213− // application has been terminated
233+ // application has been terminated.
214234 tryCompareFunction(checkCalendarTileExists, false)
215235 }
216236
tests/qmltests/Dash/Movie/tst_MoviePreview.qmlnew file+85
@@ -0,0 +1,85 @@
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+ }
78+
79+ var actions = get_actions_data();
80+ for(var i = 0; i < actions.length; i++) {
81+ compare(root.calls[i], actions[i].id);
82+ }
83+ }
84+ }
85+}
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 @@
1717import QtQuick 2.0
1818import Unity 0.1
1919
20−FocusScope {
21− id: fakeScopeView
22− property Scope scope : null
23− property bool isCurrent : false
24−
25− property ListModel searchHistory
20+import "../../../../Dash"
2621
27− signal endReached
28− signal movementStarted
29− signal positionedAtBeginning
22+ScopeView {
23+ id: fakeScopeView
3024
3125 property alias backColor : back.color
3226
tests/qmltests/Dash/tst_DashContent.qml+29−5
@@ -101,17 +101,21 @@ Item {
101101 when: windowShown
102102
103103 function init() {
104+ scopesModel.load();
105+ }
106+
107+ function cleanup() {
104108 scopeLoadedSpy.clear();
105109 movementStartedSpy.clear();
106− contentEndReachedSpy.clear()
110+ contentEndReachedSpy.clear();
107111 clear_scope_status();
112+ dashContent.visible = true;
108113
109− // clear, wait for dash to empty and load scopes.
110− var dashContentList = findChild(dashContent, "dashContentList");
111− verify(dashContentList != undefined)
112114 scopesModel.clear();
115+ // wait for dash to empty scopes.
116+ var dashContentList = findChild(dashContent, "dashContentList");
117+ verify(dashContentList != undefined);
113118 tryCompare(dashContentList, "count", 0);
114− scopesModel.load();
115119 }
116120
117121 function test_movement_started_signal() {
@@ -205,5 +209,25 @@ Item {
205209 tryCompareFunction(get_current_item_object_name, data.objectName)
206210 }
207211
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+ }
208232 }
209233}
tests/qmltests/Dash/tst_DashPreview.qml+66−19
@@ -31,15 +31,38 @@ Item {
3131 DashPreview {
3232 id: preview
3333 anchors.fill: parent
34− title: "Testing rocks, debugging sucks!"
3534
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 {
3756 width: parent.width
3857 height: units.gu(5)
3958 Rectangle {
4059 width: parent.width / 3
4160 height: parent.height
4261 color: "blue"
62+ Label {
63+ anchors.centerIn: parent
64+ text: "Button 1"
65+ }
4366 MouseArea {
4467 id: buttonMouseArea
4568 objectName: "buttonMouseArea"
@@ -51,12 +74,15 @@ Item {
5174 width: parent.width / 3
5275 height: parent.height
5376 color: "green"
77+ Label {
78+ anchors.centerIn: parent
79+ text: "Button 2"
80+ }
81+
5482 }
5583 }
5684
57− header: Label { text: "Caption label" }
58−
59− body: Column {
85+ description: Column {
6086 id: testContent
6187 objectName: "testContent"
6288 width: parent.width
@@ -65,16 +91,38 @@ Item {
6591 width: parent.width
6692 height: parent.height / 3
6793 color: "green"
94+ Label {
95+ anchors.centerIn: parent
96+ text: "Description part 1"
97+ }
6898 }
6999 Rectangle {
70100 width: parent.width
71101 height: parent.height / 3
72102 color: "red"
103+ Label {
104+ anchors.centerIn: parent
105+ text: "Description part 2"
106+ }
73107 }
74108 Rectangle {
75109 width: parent.width
76110 height: parent.height / 3
77111 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"
78126 }
79127 }
80128 }
@@ -95,42 +143,41 @@ Item {
95143 name: "DashPreview"
96144 when: windowShown
97145
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−
104146 function test_columns_data() {
105147 return [
106148 {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}
108150 ]
109151 }
110152
111153 function test_columns(data) {
112154 var leftCol = findChild(preview, "leftColumn")
155+ var centerCol = findChild(preview, "centerColumn")
113156 var rightCol = findChild(preview, "rightColumn")
114157
115158 root.width = data.width
116159 root.height = data.height
117160
118− // there are 2 columns in DashPreview. On portrait form factors
119− // only the left one is used and the right one should be empty.
120− // to find out if the content is in the correct column, we get a
161+ // there are 3 columns in DashPreview. On portrait form factors
162+ // only the left one is used and the center and right ones should be empty.
163+ // To find out if the content is in the correct column, we get a
121164 // reference to the column objects and search only the subtree
122165 // to see if the content is in the correct column.
123− // 1 colum -> content should be in leftColumn
124− // 2 colums -> content should be in rightColumn
166+ // 1 colum -> all content should be in leftColumn
167+ // 3 colums -> content should be in centerColumn, rating in rightColumn
125168
126169 switch(data.columns) {
127170 case 1:
128171 var testContent = findChild(leftCol, "testContent")
129172 compare(testContent.objectName, "testContent")
173+ testContent = findChild(leftCol, "ratings")
174+ compare(testContent.objectName, "ratings")
130175 break
131− case 2:
132− var testContent = findChild(rightCol, "testContent")
176+ case 3:
177+ var testContent = findChild(centerCol, "testContent")
133178 compare(testContent.objectName, "testContent")
179+ testContent = findChild(rightCol, "ratings")
180+ compare(testContent.objectName, "ratings")
134181 break
135182 }
136183
tests/qmltests/Dash/tst_FilterGrids.qml+1−1
@@ -107,7 +107,7 @@ Rectangle {
107107
108108 function test_clicked_signal_data() {
109109 return [
110− {tag: "VideosFilterGrid", component: "Video/VideosFilterGrid.qml"},
110+ {tag: "VideoFilterGrid", component: "Video/VideoFilterGrid.qml"},
111111 {tag: "MusicFilterGrid", component: "Music/MusicFilterGrid.qml"},
112112 {tag: "ApplicationsFilterGrid", component: "Apps/ApplicationsFilterGrid.qml"}
113113 ]
tests/qmltests/Dash/tst_GenericPreview.qmlnew file+116
@@ -0,0 +1,116 @@
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+ }
80+
81+ var actions = get_actions_data();
82+ for(var i = 0; i < actions.length; i++) {
83+ compare(root.calls[i], actions[i].id);
84+ }
85+ }
86+
87+ function test_title() {
88+ var titleLabel = findChild(genericPreview, "titleLabel");
89+ compare(titleLabel.text, dataObject.title)
90+ }
91+
92+ function test_subtitle() {
93+ var subtitleLabel = findChild(genericPreview, "subtitleLabel");
94+ compare(subtitleLabel.text, dataObject.subtitle)
95+ }
96+
97+ function test_image() {
98+ var image = findChild(genericPreview, "genericPreviewImage");
99+ tryCompare(image, "height", genericPreview.width - units.gu(6))
100+ }
101+
102+ function test_infoHints() {
103+ var infoHintColumn = findChild(genericPreview, "infoHintColumn")
104+ var infoHintRepeater = findChild(genericPreview, "infoHintRepeater")
105+ compare(infoHintRepeater.count, dataObject.infoHints.length)
106+
107+ for (var i = 0; i < dataObject.infoHints.length; ++i) {
108+ var infoItem = findChild(infoHintColumn, "infoHintItem" + i)
109+ var displayName = findChild(infoItem, "displayNameLabel")
110+ compare(displayName.text, dataObject.infoHints[i].displayName)
111+ var value = findChild(infoItem, "valueLabel")
112+ compare(value.text, dataObject.infoHints[i].value)
113+ }
114+ }
115+ }
116+}
tests/qmltests/Greeter/tst_Clock.qml+8−22
@@ -43,8 +43,7 @@ Rectangle {
4343 var dateString = Qt.formatDate(dateObj, Qt.DefaultLocaleLongDate)
4444 var timeString = Qt.formatTime(dateObj)
4545
46− clock.__timerInterval = 60000
47− clock.__date = dateObj
46+ clock.currentDate = dateObj
4847 var dateLabel = findChild(clock, "dateLabel")
4948 compare(dateLabel.text, dateString, "Not the expected date")
5049 var timeLabel = findChild(clock, "timeLabel")
@@ -57,33 +56,20 @@ Rectangle {
5756 var timeString = Qt.formatTime(dateObj)
5857
5958 clock.enabled = false
60− compare(clock.__timerRunning, false, "Timer should not be running")
61− clock.__date = dateObj
62− clock.__timerInterval = 5
63− wait(5) // spin event loop (only that would trigger the timer and reveal eventual bugs)
59+ var timeModel = findInvisibleChild(clock, "timeModel")
60+
61+ compare(timeModel.menuObjectPath, "", "Clock shouldn't be connected to Indicators when not active.")
62+
63+ clock.currentDate = dateObj
64+
6465 var dateLabel = findChild(clock, "dateLabel")
6566 compare(dateLabel.text, dateString, "Not the expected date")
6667 var timeLabel = findChild(clock, "timeLabel")
6768 compare(timeLabel.text, timeString, "Not the expected time")
6869
6970 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− }
7671
77− function test_timerRunning() {
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")
72+ verify(timeModel.menuObjectPath != "", "Should be connected to Indicators.")
8773 }
8874 }
8975}
tests/qmltests/Notifications/tst_Notifications.qml+7−2
@@ -48,7 +48,7 @@ Row {
4848 function addSnapDecisionNotification() {
4949 var n = {
5050 type: Notification.SnapDecision,
51− hints: Notification.ButtonTint,
51+ hints: {"x-canonical-private-button-tint": "true"},
5252 summary: "Tom Ato",
5353 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.",
5454 icon: "../graphics/avatars/funky.png",
@@ -192,7 +192,7 @@ Row {
192192 {
193193 tag: "Snap Decision with secondary icon and button-tint",
194194 type: Notification.SnapDecision,
195− hints: Notification.ButtonTint,
195+ hints: {"x-canonical-private-button-tint": "true"},
196196 summary: "Tom Ato",
197197 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.",
198198 icon: "../graphics/avatars/funky.png",
@@ -213,6 +213,7 @@ Row {
213213 {
214214 tag: "Ephemeral notification - icon-summary layout",
215215 type: Notification.Ephemeral,
216+ hints: {"x-canonical-private-button-tint": "false"},
216217 summary: "Photo upload completed",
217218 body: "",
218219 icon: "",
@@ -229,6 +230,7 @@ Row {
229230 {
230231 tag: "Ephemeral notification - check suppression of secondary icon for icon-summary layout",
231232 type: Notification.Ephemeral,
233+ hints: {"x-canonical-private-button-tint": "false"},
232234 summary: "New comment successfully published",
233235 body: "",
234236 icon: "",
@@ -245,6 +247,7 @@ Row {
245247 {
246248 tag: "Interactive notification",
247249 type: Notification.Interactive,
250+ hints: {"x-canonical-private-button-tint": "false"},
248251 summary: "Interactive notification",
249252 body: "This is a notification that can be clicked",
250253 icon: "../graphics/avatars/amanda.png",
@@ -261,6 +264,7 @@ Row {
261264 {
262265 tag: "Snap Decision without secondary icon and no button-tint",
263266 type: Notification.SnapDecision,
267+ hints: {"x-canonical-private-button-tint": "false"},
264268 summary: "Bro Coly",
265269 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.",
266270 icon: "../graphics/avatars/anna_olsson.png",
@@ -278,6 +282,7 @@ Row {
278282 {
279283 tag: "Ephemeral notification",
280284 type: Notification.Ephemeral,
285+ hints: {"x-canonical-private-button-tint": "false"},
281286 summary: "Cole Raby",
282287 body: "I did not expect it to be that late.",
283288 icon: "../graphics/avatars/funky.png",
tests/qmltests/tst_Shell.qml+57−2
@@ -82,6 +82,8 @@ Item {
8282
8383 var dashHome = findChild(shell, "DashHome");
8484 swipeUntilScopeViewIsReached(dashHome);
85+
86+ hideIndicators();
8587 }
8688
8789 function killApps(apps) {
@@ -155,7 +157,7 @@ Item {
155157 waitUntilApplicationWindowIsFullyVisible();
156158
157159 var mainApp = ApplicationManager.focusedApplicationId;
158− tryCompareFunction(function() { return mainApp != ""; }, true);
160+ verify(mainApp != "");
159161
160162 // Try to suspend while proximity is engaged...
161163 Powerd.displayPowerStateChange(Powerd.Off, Powerd.UseProximity);
@@ -168,8 +170,12 @@ Item {
168170
169171 // And wake up
170172 Powerd.displayPowerStateChange(Powerd.On, 0);
171− tryCompare(ApplicationManager, "focusedApplicationId", mainApp);
173+ tryCompare(ApplicationManager, "focusedApplicationId", "");
172174 tryCompare(greeter, "showProgress", 1);
175+
176+ // Swipe away greeter to focus app
177+ swipeAwayGreeter();
178+ tryCompare(ApplicationManager, "focusedApplicationId", mainApp);
173179 }
174180
175181 function swipeAwayGreeter() {
@@ -336,6 +342,19 @@ Item {
336342 mouseClick(appIcon, appIcon.width / 2, appIcon.height / 2);
337343 }
338344
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+
339358 function waitUntilApplicationWindowIsFullyVisible() {
340359 var underlay = findChild(shell, "underlay");
341360 tryCompare(underlay, "visible", false);
@@ -428,5 +447,41 @@ Item {
428447 tryCompareFunction(function() { return backgroundImage.source.toString().indexOf(data.expectedUrl) !== -1; }, true)
429448 tryCompare(backgroundImage, "status", Image.Ready)
430449 }
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+ }
431486 }
432487}