on xenial help sign in
merge trunk
commiteac5106dc9f3c91d8d563dcb034feda5899b8e82 authorMichael Zanetti <michael.zanetti@canonical.com> dateMon 14 Oct 2013, 12:43 (13 years ago) parent093c546d802be8
143 files changed+3766−2452
Bottombar/Bottombar.qml+1−1 Components/ApplicationManagerWrapper.qml+13−30 Components/DragHandle.qml−1 Components/FilterGrid.qml+4−3 Components/LazyImage.qml+22−9 Components/ListItems/Header.qml+1−1 Components/PageHeader.qml+44−1 Components/ResponsiveGridView.qml+2 Components/Showable.qml+11 Components/Stage.qml+5 Components/Tile.qml+7−63 Components/TileStyle.qml+81 Components/VolumeControl.qml+1−1 Dash/Apps/AppsAvailableForDownloadModel.qml−81 Dash/Apps/DashPluginFilterGrid.qml+47 Dash/Apps/FrequentlyUsedAppsModel.qml+4−4 Dash/Apps/RunningApplicationTile.qml+2−2 Dash/Dash.qml+3 Dash/DashContent.qml+6−6 Dash/DashMusic.qml−96 Dash/DashVideos.qml−201 Dash/Generic/FlatTileStyle.qml+79 Dash/Generic/GenericFilterGrid.qml−3 Dash/Generic/GenericPreview.qml+1−1 Dash/Generic/WeatherFilterGrid.qml+47 Dash/GenericScopeView.qml+43−2 Dash/Music/MusicFilterGrid.qml+13−13 Dash/Music/MusicTileStyle.qml+101 Dash/ScopeDelegateMapper.qml+2−4 Dash/ScopeListView.qml+5 Dash/ScopeView.qml+12−3 Dash/Video/VideosFilterGrid.qml → Dash/Video/VideoFilterGrid.qml+15−13 Dash/Video/VideoTileStyle.qml+86 Dash/Video/graphics/movie_icon_holder@27.png Greeter/Clock.qml+31−12 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+61−46 debian/changelog+102 debian/control+2 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+70−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+68−5 plugins/Unity/scope.h+14−2 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+24−34 po/ast.po+24−34 po/az.po+21−31 po/bg.po+22−32 po/ca.po+24−34 po/cs.po+252 po/de.po+24−34 po/el.po+21−31 po/en_AU.po+24−34 po/en_GB.po+24−34 po/eo.po+21−31 po/es.po+24−34 po/fi.po+24−34 po/fo.po+21−31 po/fr.po+21−31 po/gd.po+24−34 po/gl.po+24−34 po/he.po+24−34 po/hr.po+21−31 po/hu.po+21−31 po/hy.po+21−31 po/id.po+21−31 po/is.po+24−34 po/it.po+28−36 po/ja.po+21−31 po/kn.po+21−31 po/ko.po+44−54 po/ky.po+21−31 po/lo.po+22−32 po/lv.po+21−31 po/my.po+52−62 po/nb.po+21−31 po/nl.po+21−31 po/pl.po+24−34 po/pt_BR.po+24−34 po/ro.po+21−31 po/ru.po+24−34 po/shn.po+251 po/si.po+21−31 po/sl.po+24−34 po/sr.po+21−31 po/sv.po+21−31 po/te.po+21−31 po/tr.po+24−34 po/ug.po+33−44 po/uk.po+24−34 po/unity8.pot+3−31 po/xh.po+21−31 po/zh_CN.po+27−37 po/zh_TW.po+21−31 tests/autopilot/unity8/shell/tests/__init__.py+17 tests/mocks/Unity/Application/ApplicationInfo.h+1 tests/mocks/Unity/Application/ApplicationManager.h+1 tests/mocks/Unity/fake_scope.cpp+26 tests/mocks/Unity/fake_scope.h+10−1 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+2−2 tests/qmltests/Components/tst_LazyImage.qml+40−15 tests/qmltests/Components/tst_PageHeader.qml+28 tests/qmltests/Components/tst_Showable.qml+27 tests/qmltests/Dash/qml/FakeScopeView.qml+3−9 tests/qmltests/Dash/tst_DashContent.qml+29−5 tests/qmltests/Dash/tst_FilterGrids.qml+1−1 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+4−3
@@ -58,6 +58,8 @@ Item {
5858 property alias delegate: iconTileGrid.delegate
5959 property alias cellWidth: iconTileGrid.cellWidth
6060 property alias cellHeight: iconTileGrid.cellHeight
61+ property alias delegateCreationBegin: iconTileGrid.delegateCreationBegin
62+ property alias delegateCreationEnd: iconTileGrid.delegateCreationEnd
6163 readonly property alias flicking: iconTileGrid.flicking
6264 readonly property alias moving: iconTileGrid.moving
6365 readonly property alias pressDelay: iconTileGrid.pressDelay
@@ -67,7 +69,7 @@ Item {
6769 height: !filterAnimation.running ? childrenRect.height : height
6870 clip: filterAnimation.running
6971
70− NumberAnimation {
72+ SmoothedAnimation {
7173 property bool filterEndValue
7274 id: filterAnimation
7375 target: root
@@ -76,7 +78,7 @@ Item {
7678 // Duration and easing here match the ListViewWithPageHeader::m_contentYAnimation
7779 // otherwise since both animations can run at the same time you'll get
7880 // some visual weirdness.
79− duration: 200
81+ velocity: units.gu(100)
8082 easing.type: Easing.InOutQuad
8183 onStopped: {
8284 root.filter = filterEndValue;
@@ -105,6 +107,5 @@ Item {
105107 model: root.model
106108 limit: (filter && !filterAnimation.running) ? collapsedRowCount * iconTileGrid.columns : -1
107109 }
108−
109110 }
110111}
Components/LazyImage.qml+22−9
@@ -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/PageHeader.qml+44−1
@@ -18,6 +18,7 @@ import QtQuick 2.0
1818import Ubuntu.Components 0.1
1919import Ubuntu.Components.Popups 0.1
2020import Ubuntu.Components.ListItems 0.1 as ListItem
21+import Unity 0.1
2122
2223Item {
2324 /*!
@@ -30,6 +31,7 @@ Item {
3031 property bool searchEntryEnabled: false
3132 property alias searchQuery: searchField.text
3233 property ListModel searchHistory: SearchHistoryModel {}
34+ property Scope scope
3335
3436 height: units.gu(8.5)
3537 implicitHeight: units.gu(8.5)
@@ -148,7 +150,7 @@ Item {
148150 hasClearButton: false
149151
150152 primaryItem: AbstractButton {
151− enabled: searchField.text != ""
153+ enabled: searchField.text != "" && !searchIndicator.running
152154 onClicked: {
153155 if (searchField.text != "") {
154156 searchHistory.addQuery(searchField.text)
@@ -158,8 +160,22 @@ Item {
158160 height: parent.height
159161 width: height
160162
163+ ActivityIndicator {
164+ id: searchIndicator
165+ objectName: "searchIndicator"
166+
167+ anchors {
168+ verticalCenter: parent.verticalCenter
169+ left: parent.left
170+ leftMargin: units.gu(0.5)
171+ }
172+
173+ running: opacity > 0
174+ }
175+
161176 Image {
162177 id: primaryImage
178+ objectName: "primaryImage"
163179 anchors {
164180 verticalCenter: parent.verticalCenter
165181 left: parent.left
@@ -167,6 +183,7 @@ Item {
167183 }
168184 width: units.gu(3)
169185 height: units.gu(3)
186+ visible: opacity > 0
170187 }
171188
172189 Item {
@@ -185,6 +202,32 @@ Item {
185202 onActiveFocusChanged: {
186203 if (!activeFocus) searchContainer.closePopover()
187204 }
205+
206+ states: [
207+ State {
208+ name: "searching"
209+ when: scope && scope.searchInProgress
210+ PropertyChanges { target: searchIndicator; running: true; opacity: 1 }
211+ PropertyChanges { target: primaryImage; opacity: 0 }
212+ },
213+ State {
214+ name: "idle"
215+ when: !scope || !scope.searchInProgress
216+ PropertyChanges { target: searchIndicator; opacity: 0 }
217+ PropertyChanges { target: primaryImage; opacity: 1 }
218+ }
219+ ]
220+
221+ transitions: [
222+ Transition {
223+ to: "searching"
224+ reversible: true
225+ SequentialAnimation {
226+ NumberAnimation { target: primaryImage; property: "opacity"; duration: UbuntuAnimation.FastDuration; easing.type: Easing.Linear }
227+ NumberAnimation { target: searchIndicator; property: "opacity"; duration: UbuntuAnimation.FastDuration; easing.type: Easing.Linear }
228+ }
229+ }
230+ ]
188231 }
189232
190233 states: [
Components/ResponsiveGridView.qml+2
@@ -40,6 +40,8 @@ Item {
4040 readonly property alias flicking: gridView.flicking
4141 readonly property alias moving: gridView.moving
4242 readonly property alias pressDelay: gridView.pressDelay
43+ property alias delegateCreationBegin: gridView.delegateCreationBegin
44+ property alias delegateCreationEnd: gridView.delegateCreationEnd
4345 property alias highlightIndex: gridView.highlightIndex
4446 readonly property alias currentItem: gridView.currentItem
4547
Components/Showable.qml+11
@@ -30,6 +30,7 @@ Item {
3030 property bool created: true
3131 property bool required
3232 property bool __shouldShow: false
33+ property bool __skipShowAnimation: false
3334
3435 property list<QtObject> hides
3536 property var showAnimation
@@ -58,6 +59,11 @@ Item {
5859 }
5960 }
6061
62+ function showNow() {
63+ __skipShowAnimation = true;
64+ show();
65+ }
66+
6167 onCreatedChanged: {
6268 if (created && __shouldShow) {
6369 __reallyShow();
@@ -67,6 +73,7 @@ Item {
6773
6874 function __reallyShow() {
6975 if (!available) {
76+ __skipShowAnimation = false;
7077 return false;
7178 }
7279
@@ -80,11 +87,15 @@ Item {
8087 if (!showAnimation.running) {
8188 showAnimation.restart()
8289 }
90+ if (__skipShowAnimation) {
91+ showAnimation.complete();
92+ }
8393 } else {
8494 visible = true;
8595 }
8696
8797 shown = true;
98+ __skipShowAnimation = false;
8899 return true;
89100 }
90101
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+7−63
@@ -18,16 +18,16 @@ 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
3029 readonly property int center: (index % GridView.view.columns * width) + (width / 2)
30+
3131 opacity: GridView.view.highlightIndex === -1 ? 1 :
3232 GridView.view.highlightIndex === index ? 0.6 : 0.2
3333
@@ -35,61 +35,5 @@ AbstractButton {
3535 UbuntuNumberAnimation {}
3636 }
3737
38− UbuntuShape {
39− id: icon
40− anchors {
41− top: parent.top
42− horizontalCenter: parent.horizontalCenter
43− }
44− radius: "medium"
45− width: imageWidth
46− height: imageHeight
47− image: Image {
48− id: image
49− objectName: "image"
50− sourceSize { width: icon.width; height: icon.height }
51− asynchronous: true
52− cache: false
53− }
54− }
55−
56− UbuntuShape {
57− id: borderPressed
58− objectName: "borderPressed"
59−
60− anchors.fill: icon
61− radius: "medium"
62− borderSource: "radius_pressed.sci"
63− opacity: root.pressed ? 1.0 : 0.0
64− Behavior on opacity { NumberAnimation { duration: 200; easing.type: Easing.OutQuint } }
65− }
66−
67− Item {
68− anchors {
69− left: parent.left
70− right: parent.right
71− top: icon.bottom
72− }
73− height: units.gu(2)
74−
75− Label {
76− id: label
77− objectName: "label"
78− anchors {
79− baseline: parent.bottom
80− left: parent.left
81− right: parent.right
82− leftMargin: units.gu(1)
83− rightMargin: units.gu(1)
84− }
85−
86− color: Theme.palette.selected.backgroundText
87− opacity: 0.9
88− style: Text.Raised
89− styleColor: "black"
90− fontSize: "small"
91− elide: Text.ElideMiddle
92− horizontalAlignment: Text.AlignHCenter
93− }
94− }
38+ style: TileStyle {}
9539}
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/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+47
@@ -0,0 +1,47 @@
1+/*
2+ * Copyright (C) 2013 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+import Ubuntu.Components 0.1
19+import "../../Components"
20+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+ filtergrid.clicked(index, filtergrid.model, tile.y)
41+ }
42+
43+ onPressAndHold: {
44+ filtergrid.pressAndHold(index, filtergrid.model, tile.y)
45+ }
46+ }
47+}
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+2−2
@@ -124,8 +124,8 @@ AbstractButton {
124124
125125 CloseIcon {
126126 anchors {
127− right: shapedApplicationImage.right
128− rightMargin: -units.gu(1)
127+ left: shapedApplicationImage.left
128+ leftMargin: -units.gu(1)
129129 top: parent.top
130130 topMargin: -units.gu(1)
131131 }
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/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 filtergrid.clicked(index, filtergrid.model, tile.y)
4946 }
Dash/Generic/GenericPreview.qml+1−1
@@ -122,7 +122,7 @@ DashPreview {
122122 fontSize: "small"
123123 opacity: 0.6
124124 color: "white"
125− text: previewData.description.replace(/[\r\n]+/g, "<br />")
125+ text: previewData.description.replace(/[\r\n]/g, "<br />")
126126 style: Text.Raised
127127 styleColor: "black"
128128 wrapMode: Text.WordWrap
Dash/Generic/WeatherFilterGrid.qmlnew file+47
@@ -0,0 +1,47 @@
1+/*
2+ * Copyright (C) 2013 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+import Ubuntu.Components 0.1
19+import "../../Components"
20+
21+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+ filtergrid.clicked(index, filtergrid.model, tile.y)
41+ }
42+
43+ onPressAndHold: {
44+ filtergrid.pressAndHold(index, filtergrid.model, tile.y)
45+ }
46+ }
47+}
Dash/GenericScopeView.qml+43−2
@@ -24,6 +24,8 @@ ScopeView {
2424 readonly property alias previewShown: previewListView.onScreen
2525 property bool enableHeightBehaviorOnNextCreation: false
2626
27+ moving: categoryView.moving
28+
2729 onIsCurrentChanged: {
2830 pageHeader.resetSearch();
2931 previewListView.open = false;
@@ -78,7 +80,7 @@ ScopeView {
7880 }
7981
8082 delegate: ListItems.Base {
81− id: rendererDelegate
83+ id: baseItem
8284 highlightWhenPressed: false
8385
8486 readonly property bool expandable: rendererLoader.item ? rendererLoader.item.expandable : false
@@ -104,6 +106,7 @@ ScopeView {
104106 // TODO: the running apps grid doesn't support standard scope results model yet
105107 item.firstModel = Qt.binding(function() { return results.firstModel })
106108 item.secondModel = Qt.binding(function() { return results.secondModel })
109+ item.canEnableTerminationMode = Qt.binding(function() { return scopeView.isCurrent })
107110 } else {
108111 item.model = Qt.binding(function() { return results })
109112 }
@@ -114,6 +117,7 @@ ScopeView {
114117 item.filter = shouldFilter;
115118 }
116119 }
120+ updateDelegateCreationRange();
117121 }
118122
119123 Component.onDestruction: {
@@ -155,6 +159,8 @@ ScopeView {
155159 previewListView.currentIndex = index;
156160 previewListView.open = true
157161
162+ print("model is", model)
163+
158164 var item = model.get(index)
159165 scopeView.scope.preview( item.uri, item.icon, item.category, 0, item.mimetype, item.title,
160166 item.comment, item.dndUri, item.metadata)
@@ -189,6 +195,33 @@ ScopeView {
189195 }
190196 }
191197 }
198+ onContentYChanged: rendererLoader.updateDelegateCreationRange();
199+ onHeightChanged: rendererLoader.updateDelegateCreationRange();
200+ }
201+
202+ function updateDelegateCreationRange() {
203+ // Do not update the range if we are overshooting up or down, since we'll come back
204+ // to the stable position and delete/create items without any reason
205+ if (categoryView.contentY < categoryView.originY) {
206+ return;
207+ } else if (categoryView.contentY + categoryView.height > categoryView.contentHeight) {
208+ return;
209+ }
210+
211+ if (item.hasOwnProperty("delegateCreationBegin")) {
212+ if (baseItem.y + baseItem.height <= 0) {
213+ // Not visible (item at top of the list)
214+ item.delegateCreationBegin = baseItem.height
215+ item.delegateCreationEnd = baseItem.height
216+ } else if (baseItem.y >= categoryView.height) {
217+ // Not visible (item at bottom of the list)
218+ item.delegateCreationBegin = 0
219+ item.delegateCreationEnd = 0
220+ } else {
221+ item.delegateCreationBegin = Math.max(-baseItem.y, 0)
222+ item.delegateCreationEnd = Math.min(categoryView.height + item.delegateCreationBegin, baseItem.height)
223+ }
224+ }
192225 }
193226 }
194227 }
@@ -216,6 +249,7 @@ ScopeView {
216249 width: categoryView.width
217250 text: scopeView.scope.name
218251 searchEntryEnabled: true
252+ scope: scopeView.scope
219253 }
220254 }
221255
@@ -232,8 +266,15 @@ ScopeView {
232266 switch (rendererId) {
233267 case "grid": {
234268 switch (contentType) {
235− case "video": return "Generic/GenericFilterGridPotrait.qml";
269+ case "video": return "Video/VideoFilterGrid.qml";
236270 case "music": return "Music/MusicFilterGrid.qml";
271+ case "apps": {
272+ if (rendererHint == "toggled")
273+ return "Apps/DashPluginFilterGrid.qml";
274+ else
275+ return "Generic/GenericFilterGrid.qml";
276+ }
277+ case "weather": return "Generic/WeatherFilterGrid.qml";
237278 default: return "Generic/GenericFilterGrid.qml";
238279 }
239280 }
Dash/Music/MusicFilterGrid.qml+13−13
@@ -16,32 +16,32 @@
1616
1717import QtQuick 2.0
1818import "../../Components"
19+import "../Generic"
1920
20−FilterGrid {
21+GenericFilterGrid {
2122 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
31−
32− signal clicked(int index, var model, real itemY)
33− signal pressAndHold(int index, var model, real itemY)
27+ iconWidth: units.gu(11)
28+ iconHeight: units.gu(11)
3429
3530 delegate: Tile {
3631 id: tile
3732 objectName: "delegate" + index
3833 width: filtergrid.cellWidth
3934 height: filtergrid.cellHeight
35+ text: model.comment
4036 imageWidth: filtergrid.iconWidth
4137 imageHeight: filtergrid.iconHeight
42−
43− text: "%1<br />%2".arg(model.title).arg(model.comment)
4438 source: model.icon
39+ maximumLineCount: 2
40+ horizontalAlignment: Text.AlignLeft
41+
42+ style: MusicTileStyle {
43+ artist: model.title
44+ }
4545
4646 onClicked: {
4747 filtergrid.clicked(index, filtergrid.model, tile.y)
Dash/Music/MusicTileStyle.qmlnew file+101
@@ -0,0 +1,101 @@
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+ }
70+
71+ color: Theme.palette.selected.backgroundText
72+ opacity: 0.9
73+ style: Text.Raised
74+ styleColor: "black"
75+ fontSize: "small"
76+ font.weight: Font.Bold
77+ elide: Text.ElideRight
78+ horizontalAlignment: styledItem.horizontalAlignment
79+ text: styledItem.text
80+ wrapMode: Text.Wrap
81+ maximumLineCount: styledItem.maximumLineCount
82+ }
83+
84+ Label {
85+ id: artistLabel
86+ anchors {
87+ top: label.bottom
88+ left: label.left
89+ right: label.right
90+ rightMargin: units.gu(1)
91+ }
92+
93+ color: Theme.palette.selected.backgroundText
94+ opacity: 0.9
95+ style: Text.Raised
96+ styleColor: "black"
97+ fontSize: "x-small"
98+ elide: Text.ElideMiddle
99+ horizontalAlignment: styledItem.horizontalAlignment
100+ }
101+}
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+15−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,17 @@ 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+ filtergrid.clicked(index, filtergrid.model, tile.y)
46+ }
47+
48+ onPressAndHold: {
49+ filtergrid.pressAndHold(index, filtergrid.model, tile.y)
4850 }
4951 }
5052}
Dash/Video/VideoTileStyle.qmlnew file+86
@@ -0,0 +1,86 @@
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+ }
74+
75+ color: Theme.palette.selected.backgroundText
76+ opacity: 0.9
77+ style: Text.Raised
78+ styleColor: "black"
79+ fontSize: "small"
80+ elide: Text.ElideRight
81+ horizontalAlignment: styledItem.horizontalAlignment
82+ text: styledItem.text
83+ wrapMode: Text.Wrap
84+ maximumLineCount: styledItem.maximumLineCount
85+ }
86+}
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/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+61−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);
538− greeter.show();
539− } else if (status == Powerd.On) {
540− powerConnection.setFocused(true);
548+ greeter.showNow();
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
@@ -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,10 @@ FocusScope {
725736 value: "unity8"
726737 }
727738
739+ OSKController {
740+ anchors.fill: parent // as needs to know the geometry of the shell
741+ }
742+
728743 //FIXME: This should be handled in the input stack, keyboard shouldnt propagate
729744 MouseArea {
730745 anchors.bottom: parent.bottom
debian/changelog+102
@@ -1,3 +1,105 @@
1+unity8 (7.82+13.10.20131010-0ubuntu1) saucy; urgency=low
2+
3+ [ David Callé ]
4+ * Small logic change in preview descriptions line breaks. Multiple new
5+ lines are now replaced by multiple br tags.
6+
7+ [ Nick Dedekind ]
8+ * Use indicator identifier for indicators-client list item label.
9+ * Make sure overflow indicators are hidden and not the search label.
10+
11+ [ Mirco Müller ]
12+ * Tweaks to notifications to improve spec-compliance. - updated
13+ notifications-qmltest to reflect the use of a variant-map for the
14+ hints - made text-fields as heigh as buttons - made the summary
15+ align horizontally to the icon - updated button-height and bubble-
16+ background.
17+
18+ [ Pawel Stolowski ]
19+ * Handle category_order_changes signal from scopes (used in Home only)
20+ and reorder categories accordingly.
21+ * Implementation of albumart image provider for audio content.
22+
23+ [ Michael Terry ]
24+ * Hide the greeter when an app is focused, fixing snap decisions
25+ launching an app in the greeter (like receiving a call).
26+
27+ [ Michael Zanetti ]
28+ * Launcher - remove support for pinning items in the backend After the
29+ latest design changes, recent apps is everything that is contained
30+ in the ApplicationManager. So no need for storing anything else than
31+ pinned apps in the config.
32+
33+ [ Michał Sawicz ]
34+ * Remove the mir socket before starting unity8 during autopilot tests.
35+
36+ [ Ubuntu daily release ]
37+ * Automatic snapshot from revision 420
38+
39+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Thu, 10 Oct 2013 04:15:13 +0000
40+
41+unity8 (7.82+13.10.20131008.1-0ubuntu1) saucy; urgency=low
42+
43+ [ Michal Hruby ]
44+ * Add Scope::isActive property and corresponding tests. (LP: #1230352)
45+
46+ [ Daniel d'Andrada ]
47+ * Move OSKController to the front as it will now also block input
48+ meant to the OSK That's in the unity-mir implementation. The
49+ SurfaceFlinger one is still an empty noop. Currently, when the OSK
50+ is up, both shell and OSK get user input, thus we need the
51+ OSKController to shield our shell components from them. (LP:
52+ #1236773)
53+
54+ [ Michał Sawicz ]
55+ * Add Scope::isActive property and corresponding tests. (LP: #1230352)
56+ * Force focus back on shell in case it loses it for some reason.
57+
58+ [ Ubuntu daily release ]
59+ * Automatic snapshot from revision 409
60+
61+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Tue, 08 Oct 2013 19:14:20 +0000
62+
63+unity8 (7.82+13.10.20131008-0ubuntu1) saucy; urgency=low
64+
65+ [ Michał Sawicz ]
66+ * update previews to match design. (LP: #1224555)
67+ * Add an InputFilterArea in Notifications. (LP: #1233411, #1235215)
68+
69+ [ Ying-Chun Liu ]
70+ * update previews to match design. (LP: #1224555)
71+
72+ [ Albert Astals ]
73+ * Unrevert 376 by reverting r395 and a small fix to fix the cpu
74+ hogging issue . (LP: #1124567)
75+
76+ [ Michael Terry ]
77+ * Add Showable.showNow() method and use it in Shell to immediately
78+ show greeter when we blank the screen rather than animating it. (LP:
79+ #1233564)
80+
81+ [ Michael Zanetti ]
82+ * update previews to match design. (LP: #1224555)
83+
84+ [ Diego Sarmentero ]
85+ * update previews to match design. (LP: #1224555)
86+
87+ [ Ubuntu daily release ]
88+ * Automatic snapshot from revision 404
89+
90+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Tue, 08 Oct 2013 02:57:55 +0000
91+
92+unity8 (7.82+13.10.20131007-0ubuntu1) saucy; urgency=low
93+
94+ [ Michał Sawicz ]
95+ * Respect pre-set import and library paths and prevent segfault in
96+ startShell.
97+
98+ [ Ubuntu daily release ]
99+ * Automatic snapshot from revision 399
100+
101+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Mon, 07 Oct 2013 07:10:46 +0000
102+
1103unity8 (7.82+13.10.20131005-0ubuntu1) saucy; urgency=low
2104
3105 [ Michał Sawicz ]
debian/control+2
@@ -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
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+70−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,9 @@ 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+ m_signals << m_unityScope->category_order.changed.connect(sigc::mem_fun(this, &Categories::onCategoryOrderChanged));
107135}
108136
109137void
@@ -111,7 +139,9 @@ Categories::onCountChanged()
111139{
112140 CategoryResults* results = qobject_cast<CategoryResults*>(sender());
113141 if (results) {
114− m_updatedCategories << results->categoryIndex();
142+ if (!m_updatedCategories.contains(results->categoryIndex())) {
143+ m_updatedCategories << results->categoryIndex();
144+ }
115145 m_timer.start();
116146 }
117147}
@@ -142,7 +172,8 @@ Categories::onEmitCountChanged()
142172 roles.append(Categories::RoleCount);
143173 Q_FOREACH(int categoryIndex, m_updatedCategories) {
144174 if (!m_results.contains(categoryIndex)) continue;
145− QModelIndex changedIndex = index(categoryIndex);
175+ const int realIndex = m_categoryOrder.indexOf(categoryIndex);
176+ const QModelIndex changedIndex = index(realIndex);
146177 Q_EMIT dataChanged(changedIndex, changedIndex, roles);
147178 }
148179 m_updatedCategories.clear();
@@ -196,48 +227,70 @@ Categories::data(const QModelIndex& index, int role) const
196227 return QVariant();
197228 }
198229
230+ if (m_categoryOrder.size() != rowCount())
231+ {
232+ // populate category order vector with 0..n
233+ m_categoryOrder.clear();
234+ const unsigned int lim = rowCount();
235+ for (unsigned int i = 0; i<lim; i++) {
236+ m_categoryOrder.append(i);
237+ }
238+ }
239+
240+ int realRow = index.row();
241+ if (index.row() < m_categoryOrder.size()) {
242+ realRow = m_categoryOrder[index.row()];
243+ } else {
244+ qWarning() << "Invalid index" << index.row();
245+ return QVariant();
246+ }
247+
248+ const QModelIndex realIndex = createIndex(realRow, index.column());
249+
199250 switch (role) {
200251 case RoleCategoryId:
201− return DeeListModel::data(index, CategoryColumn::ID);
252+ return DeeListModel::data(realIndex, CategoryColumn::ID);
202253 case RoleName:
203− return DeeListModel::data(index, CategoryColumn::DISPLAY_NAME);
254+ return DeeListModel::data(realIndex, CategoryColumn::DISPLAY_NAME);
204255 case RoleIcon:
205− return DeeListModel::data(index, CategoryColumn::ICON_HINT);
256+ return DeeListModel::data(realIndex, CategoryColumn::ICON_HINT);
206257 case RoleRenderer:
207− return DeeListModel::data(index, CategoryColumn::RENDERER_NAME);
258+ return DeeListModel::data(realIndex, CategoryColumn::RENDERER_NAME);
208259 case RoleContentType:
209260 {
210− auto hints = DeeListModel::data(index, CategoryColumn::HINTS).toHash();
261+ auto hints = DeeListModel::data(realIndex, CategoryColumn::HINTS).toHash();
211262 return hints.contains("content-type") ? hints["content-type"] : QVariant(QString("default"));
212263 }
213264 case RoleRendererHint:
214265 {
215− auto hints = DeeListModel::data(index, CategoryColumn::HINTS).toHash();
266+ auto hints = DeeListModel::data(realIndex, CategoryColumn::HINTS).toHash();
216267 return hints.contains("renderer-hint") ? hints["renderer-hint"] : QVariant(QString());
217268 }
218269 case RoleProgressSource:
219270 {
220− auto hints = DeeListModel::data(index, CategoryColumn::HINTS).toHash();
271+ auto hints = DeeListModel::data(realIndex, CategoryColumn::HINTS).toHash();
221272 return hints.contains("progress-source") ? hints["progress-source"] : QVariant();
222273 }
223274 case RoleHints:
224− return DeeListModel::data(index, CategoryColumn::HINTS);
275+ return DeeListModel::data(realIndex, CategoryColumn::HINTS);
225276 case RoleResults:
226277 if (m_overriddenCategories.size() > 0)
227278 {
228− auto id = DeeListModel::data(index, CategoryColumn::ID).toString();
279+ auto id = DeeListModel::data(realIndex, CategoryColumn::ID).toString();
229280 if (m_overriddenCategories.find(id) != m_overriddenCategories.end())
230281 return QVariant::fromValue(m_overriddenCategories[id]);
231282 }
232− return QVariant::fromValue(getResults(index.row()));
283+ return QVariant::fromValue(getResults(realRow));
233284 case RoleCount:
234285 if (m_overriddenCategories.size() > 0)
235286 {
236− auto id = DeeListModel::data(index, CategoryColumn::ID).toString();
287+ auto id = DeeListModel::data(realIndex, CategoryColumn::ID).toString();
237288 if (m_overriddenCategories.find(id) != m_overriddenCategories.end())
289+ {
238290 return QVariant::fromValue(m_overriddenCategories[id]->rowCount());
291+ }
239292 }
240− return QVariant::fromValue(getResults(index.row())->rowCount());
293+ return QVariant::fromValue(getResults(realRow)->rowCount());
241294 default:
242295 return QVariant();
243296 }
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+68−5
@@ -33,14 +33,19 @@
3333#include <QQmlEngine>
3434
3535#include <UnityCore/Variant.h>
36+#include <UnityCore/GLibWrapper.h>
3637
3738#include <libintl.h>
3839#include <glib.h>
3940
4041Scope::Scope(QObject *parent) : QObject(parent)
4142 , m_formFactor("phone")
43+ , m_isActive(false)
44+ , m_searchInProgress(false)
4245{
4346 m_categories.reset(new Categories(this));
47+
48+ connect(this, &Scope::isActiveChanged, this, &Scope::scopeIsActiveChanged);
4449}
4550
4651QString Scope::id() const
@@ -68,6 +73,11 @@ QString Scope::searchHint() const
6873 return QString::fromStdString(m_unityScope->search_hint());
6974}
7075
76+bool Scope::searchInProgress() const
77+{
78+ return m_searchInProgress;
79+}
80+
7181bool Scope::visible() const
7282{
7383 return m_unityScope->visible();
@@ -103,6 +113,11 @@ QString Scope::formFactor() const
103113 return m_formFactor;
104114}
105115
116+bool Scope::isActive() const
117+{
118+ return m_isActive;
119+}
120+
106121Filters* Scope::filters() const
107122{
108123 return m_filters.get();
@@ -115,10 +130,17 @@ void Scope::setSearchQuery(const QString& search_query)
115130 string ("") and m_searchQuery is the null string,
116131 search_query != m_searchQuery is still true.
117132 */
133+ using namespace std::placeholders;
134+
118135 if (m_searchQuery.isNull() || search_query != m_searchQuery) {
119136 m_searchQuery = search_query;
120− m_unityScope->Search(search_query.toStdString(), sigc::mem_fun(this, &Scope::searchFinished));
137+ m_cancellable.Renew();
138+ m_unityScope->Search(search_query.toStdString(), std::bind(&Scope::onSearchFinished, this, _1, _2, _3), m_cancellable);
121139 Q_EMIT searchQueryChanged();
140+ if (!m_searchInProgress) {
141+ m_searchInProgress = true;
142+ Q_EMIT searchInProgressChanged();
143+ }
122144 }
123145}
124146
@@ -140,6 +162,13 @@ void Scope::setFormFactor(const QString& form_factor) {
140162 }
141163}
142164
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+
143172unity::dash::LocalResult Scope::createLocalResult(const QVariant &uri, const QVariant &icon_hint,
144173 const QVariant &category, const QVariant &result_type,
145174 const QVariant &mimetype, const QVariant &title,
@@ -294,8 +323,7 @@ void Scope::setUnityScope(const unity::dash::Scope::Ptr& scope)
294323 m_unityScope->visible.changed.connect(sigc::mem_fun(this, &Scope::visibleChanged));
295324 m_unityScope->shortcut.changed.connect(sigc::mem_fun(this, &Scope::shortcutChanged));
296325 m_unityScope->connected.changed.connect(sigc::mem_fun(this, &Scope::connectedChanged));
297− /* Signals forwarding */
298− connect(this, SIGNAL(searchFinished(const std::string &, unity::glib::HintsMap const &, unity::glib::Error const &)), SLOT(onSearchFinished(const std::string &, unity::glib::HintsMap const &)));
326+ m_unityScope->results_dirty.changed.connect(sigc::mem_fun(this, &Scope::resultsDirtyToggled));
299327
300328 /* FIXME: signal should be forwarded instead of calling the handler directly */
301329 m_unityScope->activated.connect(sigc::mem_fun(this, &Scope::onActivated));
@@ -316,18 +344,53 @@ unity::dash::Scope::Ptr Scope::unityScope() const
316344
317345void Scope::synchronizeStates()
318346{
347+ using namespace std::placeholders;
348+
319349 if (connected()) {
320350 /* Forward local states to m_unityScope */
321351 if (!m_searchQuery.isNull()) {
322− m_unityScope->Search(m_searchQuery.toStdString());
352+ m_cancellable.Renew();
353+ m_unityScope->Search(m_searchQuery.toStdString(), std::bind(&Scope::onSearchFinished, this, _1, _2, _3), m_cancellable);
354+ if (!m_searchInProgress) {
355+ m_searchInProgress = true;
356+ Q_EMIT searchInProgressChanged();
357+ }
323358 }
324359 }
325360}
326361
327−void Scope::onSearchFinished(const std::string& /* query */, unity::glib::HintsMap const &hints)
362+void Scope::scopeIsActiveChanged()
363+{
364+ if (!isActive() || !m_unityScope || !m_unityScope->results_dirty()) return;
365+
366+ // force new search
367+ synchronizeStates();
368+}
369+
370+void Scope::resultsDirtyToggled(bool results_dirty)
371+{
372+ if (!results_dirty || !isActive()) return;
373+
374+ // force new search
375+ synchronizeStates();
376+}
377+
378+void Scope::onSearchFinished(std::string const& /* query */, unity::glib::HintsMap const& hints, unity::glib::Error const& err)
328379{
329380 QString hint;
330381
382+ GError* error = const_cast<unity::glib::Error&>(err);
383+
384+ if (!err || !g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
385+ if (m_searchInProgress) {
386+ m_searchInProgress = false;
387+ Q_EMIT searchInProgressChanged();
388+ }
389+ } else {
390+ // no need to check the results hint, we're still searching
391+ return;
392+ }
393+
331394 if (!m_unityScope->results()->count()) {
332395 unity::glib::HintsMap::const_iterator it = hints.find("no-results-hint");
333396 if (it != hints.end()) {
plugins/Unity/scope.h+14−2
@@ -28,6 +28,7 @@
2828// libunity-core
2929#include <UnityCore/Scope.h>
3030#include <UnityCore/Results.h>
31+#include <UnityCore/GLibWrapper.h>
3132
3233#include "categories.h"
3334#include "filters.h"
@@ -43,6 +44,7 @@ class Scope : public QObject
4344 Q_PROPERTY(QString iconHint READ iconHint NOTIFY iconHintChanged)
4445 Q_PROPERTY(QString description READ description NOTIFY descriptionChanged)
4546 Q_PROPERTY(QString searchHint READ searchHint NOTIFY searchHintChanged)
47+ Q_PROPERTY(bool searchInProgress READ searchInProgress NOTIFY searchInProgressChanged)
4648 Q_PROPERTY(bool visible READ visible NOTIFY visibleChanged)
4749 Q_PROPERTY(QString shortcut READ shortcut NOTIFY shortcutChanged)
4850 Q_PROPERTY(bool connected READ connected NOTIFY connectedChanged)
@@ -52,6 +54,7 @@ class Scope : public QObject
5254 Q_PROPERTY(QString searchQuery READ searchQuery WRITE setSearchQuery NOTIFY searchQueryChanged)
5355 Q_PROPERTY(QString noResultsHint READ noResultsHint WRITE setNoResultsHint NOTIFY noResultsHintChanged)
5456 Q_PROPERTY(QString formFactor READ formFactor WRITE setFormFactor NOTIFY formFactorChanged)
57+ Q_PROPERTY(bool isActive READ isActive WRITE setActive NOTIFY isActiveChanged)
5558
5659public:
5760 explicit Scope(QObject *parent = 0);
@@ -65,16 +68,19 @@ public:
6568 bool visible() const;
6669 QString shortcut() const;
6770 bool connected() const;
71+ bool searchInProgress() const;
6872 Categories* categories() const;
6973 Filters* filters() const;
7074 QString searchQuery() const;
7175 QString noResultsHint() const;
7276 QString formFactor() const;
77+ bool isActive() const;
7378
7479 /* setters */
7580 void setSearchQuery(const QString& search_query);
7681 void setNoResultsHint(const QString& hint);
7782 void setFormFactor(const QString& form_factor);
83+ void setActive(const bool);
7884
7985 Q_INVOKABLE void activate(const QVariant &uri, const QVariant &icon_hint, const QVariant &category,
8086 const QVariant &result_type, const QVariant &mimetype, const QVariant &title,
@@ -95,14 +101,15 @@ Q_SIGNALS:
95101 void iconHintChanged(const std::string&);
96102 void descriptionChanged(const std::string&);
97103 void searchHintChanged(const std::string&);
104+ void searchInProgressChanged();
98105 void visibleChanged(bool);
99106 void shortcutChanged(const std::string&);
100107 void connectedChanged(bool);
101108 void categoriesChanged();
102− void searchFinished(const std::string&, unity::glib::HintsMap const&, unity::glib::Error const&);
103109 void searchQueryChanged();
104110 void noResultsHintChanged();
105111 void formFactorChanged();
112+ void isActiveChanged(bool);
106113 void filtersChanged();
107114
108115 // signals triggered by activate(..) or preview(..) requests.
@@ -115,7 +122,8 @@ Q_SIGNALS:
115122
116123private Q_SLOTS:
117124 void synchronizeStates();
118− void onSearchFinished(const std::string &, unity::glib::HintsMap const &);
125+ void scopeIsActiveChanged();
126+ void onSearchFinished(std::string const &, unity::glib::HintsMap const &, unity::glib::Error const&);
119127
120128private:
121129 unity::dash::LocalResult createLocalResult(const QVariant &uri, const QVariant &icon_hint,
@@ -126,6 +134,7 @@ private:
126134 void onActivated(unity::dash::LocalResult const& result, unity::dash::ScopeHandledType type, unity::glib::HintsMap const& hints);
127135 void onPreviewReady(unity::dash::LocalResult const& result, unity::dash::Preview::Ptr const& preview);
128136 void fallbackActivate(const QString& uri);
137+ void resultsDirtyToggled(bool);
129138
130139 unity::dash::Scope::Ptr m_unityScope;
131140 std::unique_ptr<Categories> m_categories;
@@ -133,6 +142,9 @@ private:
133142 QString m_searchQuery;
134143 QString m_noResultsHint;
135144 QString m_formFactor;
145+ bool m_isActive;
146+ bool m_searchInProgress;
147+ unity::glib::Cancellable m_cancellable;
136148 unity::glib::Cancellable m_previewCancellable;
137149};
138150
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+24−34
@@ -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-07 10:49+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-08 07:01+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,44 +133,30 @@ 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
159−msgid "Add a review"
160−msgstr ""
161−
162−#: Dash/Apps/AppReviews.qml:86
163−msgid "Review"
164−msgstr ""
165−
166−#: Dash/Apps/AppReviews.qml:121
167−msgid "Send"
168−msgstr ""
169−
170−#: Dash/Apps/AppReviews.qml:139
171−msgid "Comments:"
172−msgstr ""
173−
174160#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
175161msgid "Featured"
176162msgstr "المميز"
@@ -199,17 +185,21 @@ msgstr "الشائع على الإنترنت"
199185msgid "Videos"
200186msgstr "فيديوهات"
201187
202−#: Dash/Video/VideoPreview.qml:130
203−msgid "Directed by:"
204−msgstr "أخرجه:"
188+#: Dash/Previews/Reviews.qml:74
189+msgid "Add a review"
190+msgstr ""
191+
192+#: Dash/Previews/Reviews.qml:86
193+msgid "Review"
194+msgstr ""
205195
206−#: Dash/Video/VideoPreview.qml:153
207−msgid "Starring:"
208−msgstr "النجوم:"
196+#: Dash/Previews/Reviews.qml:121
197+msgid "Send"
198+msgstr ""
209199
210−#: Dash/Video/VideoPreview.qml:176
211−msgid "Author:"
212−msgstr "المؤلف:"
200+#: Dash/Previews/Reviews.qml:139
201+msgid "Comments:"
202+msgstr ""
213203
214204#: Greeter/Lockscreen.qml:142
215205msgid "Emergency Call"
@@ -248,7 +238,7 @@ msgstr "تتكلم الآن..."
248238msgid "Search"
249239msgstr "ابحث"
250240
251−#: plugins/Unity/scope.cpp:336
241+#: plugins/Unity/scope.cpp:361
252242msgid "Sorry, there is nothing that matches your search."
253243msgstr "عذراً، لا يوجد ما يطابق بحثك."
254244
po/ast.po+24−34
@@ -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-07 10:49+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-08 07:01+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,44 +136,30 @@ 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
162−msgid "Add a review"
163−msgstr "Amestar una reseña"
164−
165−#: Dash/Apps/AppReviews.qml:86
166−msgid "Review"
167−msgstr "Revisar"
168−
169−#: Dash/Apps/AppReviews.qml:121
170−msgid "Send"
171−msgstr "Unviar"
172−
173−#: Dash/Apps/AppReviews.qml:139
174−msgid "Comments:"
175−msgstr "Comentarios:"
176−
177163#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
178164msgid "Featured"
179165msgstr "Destacaos"
@@ -202,17 +188,21 @@ msgstr "Populares en llinia"
202188msgid "Videos"
203189msgstr "Vídeos"
204190
205−#: Dash/Video/VideoPreview.qml:130
206−msgid "Directed by:"
207−msgstr "Dirixida por:"
191+#: Dash/Previews/Reviews.qml:74
192+msgid "Add a review"
193+msgstr "Amestar una reseña"
194+
195+#: Dash/Previews/Reviews.qml:86
196+msgid "Review"
197+msgstr "Revisar"
208198
209−#: Dash/Video/VideoPreview.qml:153
210−msgid "Starring:"
211−msgstr "Protagonistes:"
199+#: Dash/Previews/Reviews.qml:121
200+msgid "Send"
201+msgstr "Unviar"
212202
213−#: Dash/Video/VideoPreview.qml:176
214−msgid "Author:"
215−msgstr "Autor:"
203+#: Dash/Previews/Reviews.qml:139
204+msgid "Comments:"
205+msgstr "Comentarios:"
216206
217207#: Greeter/Lockscreen.qml:142
218208msgid "Emergency Call"
@@ -251,7 +241,7 @@ msgstr "Falando…"
251241msgid "Search"
252242msgstr "Guetar"
253243
254−#: plugins/Unity/scope.cpp:336
244+#: plugins/Unity/scope.cpp:361
255245msgid "Sorry, there is nothing that matches your search."
256246msgstr "Sentímoslo, nun hai res que concase cola gueta"
257247
po/az.po+21−31
@@ -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-07 10:49+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-08 07:01+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,44 +132,30 @@ 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
158−msgid "Add a review"
159−msgstr ""
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr ""
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr ""
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr ""
172−
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
175161msgstr ""
@@ -198,16 +184,20 @@ msgstr ""
198184msgid "Videos"
199185msgstr "Videolar"
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
203189msgstr ""
204190
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
207193msgstr ""
208194
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr ""
198+
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
211201msgstr ""
212202
213203#: Greeter/Lockscreen.qml:142
@@ -247,7 +237,7 @@ msgstr "Söylənilir..."
247237msgid "Search"
248238msgstr "Axtar"
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr "Bağışlayın, amma axtarışınıza heç bir nəticə uyğun gəlmir."
253243
po/bg.po+22−32
@@ -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-07 10:49+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-08 07:01+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,44 +133,30 @@ 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
159−msgid "Add a review"
160−msgstr ""
161−
162−#: Dash/Apps/AppReviews.qml:86
163−msgid "Review"
164−msgstr ""
165−
166−#: Dash/Apps/AppReviews.qml:121
167−msgid "Send"
168−msgstr ""
169−
170−#: Dash/Apps/AppReviews.qml:139
171−msgid "Comments:"
172−msgstr ""
173−
174160#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
175161msgid "Featured"
176162msgstr "Най-отличени"
@@ -199,17 +185,21 @@ msgstr ""
199185msgid "Videos"
200186msgstr "Видеоклипове"
201187
202−#: Dash/Video/VideoPreview.qml:130
203−msgid "Directed by:"
188+#: Dash/Previews/Reviews.qml:74
189+msgid "Add a review"
204190msgstr ""
205191
206−#: Dash/Video/VideoPreview.qml:153
207−msgid "Starring:"
192+#: Dash/Previews/Reviews.qml:86
193+msgid "Review"
208194msgstr ""
209195
210−#: Dash/Video/VideoPreview.qml:176
211−msgid "Author:"
212−msgstr "Автор:"
196+#: Dash/Previews/Reviews.qml:121
197+msgid "Send"
198+msgstr ""
199+
200+#: Dash/Previews/Reviews.qml:139
201+msgid "Comments:"
202+msgstr ""
213203
214204#: Greeter/Lockscreen.qml:142
215205msgid "Emergency Call"
@@ -248,7 +238,7 @@ msgstr ""
248238msgid "Search"
249239msgstr "Търсене"
250240
251−#: plugins/Unity/scope.cpp:336
241+#: plugins/Unity/scope.cpp:361
252242msgid "Sorry, there is nothing that matches your search."
253243msgstr "Съжаляваме, няма нищо, което да отговаря на вашето търсене."
254244
po/ca.po+24−34
@@ -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-07 10:49+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-08 07:01+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,44 +138,30 @@ 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
164−msgid "Add a review"
165−msgstr "Afegiu una ressenya"
166−
167−#: Dash/Apps/AppReviews.qml:86
168−msgid "Review"
169−msgstr "Ressenya"
170−
171−#: Dash/Apps/AppReviews.qml:121
172−msgid "Send"
173−msgstr "Envia"
174−
175−#: Dash/Apps/AppReviews.qml:139
176−msgid "Comments:"
177−msgstr "Comentaris:"
178−
179165#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
180166msgid "Featured"
181167msgstr "Destacats"
@@ -204,17 +190,21 @@ msgstr "Popular a la xarxa"
204190msgid "Videos"
205191msgstr "Vídeos"
206192
207−#: Dash/Video/VideoPreview.qml:130
208−msgid "Directed by:"
209−msgstr "Dirigit per:"
193+#: Dash/Previews/Reviews.qml:74
194+msgid "Add a review"
195+msgstr "Afegiu una ressenya"
196+
197+#: Dash/Previews/Reviews.qml:86
198+msgid "Review"
199+msgstr "Ressenya"
210200
211−#: Dash/Video/VideoPreview.qml:153
212−msgid "Starring:"
213−msgstr "Protagonistes:"
201+#: Dash/Previews/Reviews.qml:121
202+msgid "Send"
203+msgstr "Envia"
214204
215−#: Dash/Video/VideoPreview.qml:176
216−msgid "Author:"
217−msgstr "Autor:"
205+#: Dash/Previews/Reviews.qml:139
206+msgid "Comments:"
207+msgstr "Comentaris:"
218208
219209#: Greeter/Lockscreen.qml:142
220210msgid "Emergency Call"
@@ -253,7 +243,7 @@ msgstr "S'està parlant..."
253243msgid "Search"
254244msgstr "Cerca"
255245
256−#: plugins/Unity/scope.cpp:336
246+#: plugins/Unity/scope.cpp:361
257247msgid "Sorry, there is nothing that matches your search."
258248msgstr "No hi ha res que coincideixi amb la cerca"
259249
po/cs.ponew file+252
@@ -0,0 +1,252 @@
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-07 10:49+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-09 06:24+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/DashMusic.qml:27 Dash/DashVideos.qml:28
161+msgid "Featured"
162+msgstr "Oblíbené"
163+
164+#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
165+msgid "Recent"
166+msgstr "Nedávné"
167+
168+#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
169+msgid "New Releases"
170+msgstr ""
171+
172+#: Dash/DashMusic.qml:30
173+msgid "Top Charting"
174+msgstr ""
175+
176+#: Dash/DashMusic.qml:91
177+msgid "Music"
178+msgstr "Hudba"
179+
180+#: Dash/DashVideos.qml:31
181+msgid "Popular Online"
182+msgstr "Oblíbené on-line"
183+
184+#: Dash/DashVideos.qml:146
185+msgid "Videos"
186+msgstr "Videa"
187+
188+#: Dash/Previews/Reviews.qml:74
189+msgid "Add a review"
190+msgstr "Přidat recenzi"
191+
192+#: Dash/Previews/Reviews.qml:86
193+msgid "Review"
194+msgstr "Recenze"
195+
196+#: Dash/Previews/Reviews.qml:121
197+msgid "Send"
198+msgstr "Odeslat"
199+
200+#: Dash/Previews/Reviews.qml:139
201+msgid "Comments:"
202+msgstr "Komentáře:"
203+
204+#: Greeter/Lockscreen.qml:142
205+msgid "Emergency Call"
206+msgstr "Tísňové volání"
207+
208+#: Greeter/PassphraseLockscreen.qml:59
209+#, qt-format
210+msgid "Hello %1"
211+msgstr "Ahoj %1"
212+
213+#: Greeter/PassphraseLockscreen.qml:59
214+msgid "Hello"
215+msgstr "Ahoj"
216+
217+#: Hud/HudParametrizedActionsPage.qml:132
218+msgid "Confirm"
219+msgstr "Potvrdit"
220+
221+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
222+msgid "Type or say a command"
223+msgstr "Napište nebo řekněte příkaz"
224+
225+#: Hud/Hud.qml:84
226+msgid "Loading. Please Wait..."
227+msgstr "Načítám. Čekejte prosím..."
228+
229+#: Hud/Hud.qml:89
230+msgid "Speak Now..."
231+msgstr "Mluvte..."
232+
233+#: Hud/Hud.qml:94
234+msgid "Speaking..."
235+msgstr "Mluvte..."
236+
237+#: Panel/SearchIndicator.qml:27
238+msgid "Search"
239+msgstr "Hledat"
240+
241+#: plugins/Unity/scope.cpp:361
242+msgid "Sorry, there is nothing that matches your search."
243+msgstr "Je nám líto, ale nic neodpovídá zadání"
244+
245+#: plugins/Unity/showallfilteroption.cpp:41
246+msgid "All"
247+msgstr "Vše"
248+
249+#: Shell.qml:453
250+#, qt-format
251+msgid "Please enter %1"
252+msgstr "Zadejte prosím %1"
po/de.po+24−34
@@ -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-07 10:49+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-08 07:01+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,44 +132,30 @@ 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
158−msgid "Add a review"
159−msgstr "Bewertung hinzufügen"
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr "Bewertung"
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr "Senden"
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr "Kommentare:"
172−
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
175161msgstr "Empfehlungen"
@@ -198,17 +184,21 @@ msgstr "Online Beliebt"
198184msgid "Videos"
199185msgstr "Videos"
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr "Regie:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
189+msgstr "Bewertung hinzufügen"
190+
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
193+msgstr "Bewertung"
204194
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr "Darsteller:"
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr "Senden"
208198
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr "Autor:"
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
201+msgstr "Kommentare:"
212202
213203#: Greeter/Lockscreen.qml:142
214204msgid "Emergency Call"
@@ -247,7 +237,7 @@ msgstr "Sie sprechen …"
247237msgid "Search"
248238msgstr "Suchen"
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr "Entschuldigung, es wurden keine Treffer erzielt."
253243
po/el.po+21−31
@@ -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-07 10:49+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-08 07:01+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,44 +132,30 @@ 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
158−msgid "Add a review"
159−msgstr ""
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr ""
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr ""
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr ""
172−
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
175161msgstr ""
@@ -198,16 +184,20 @@ msgstr ""
198184msgid "Videos"
199185msgstr "Βίντεο"
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
203189msgstr ""
204190
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
207193msgstr ""
208194
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr ""
198+
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
211201msgstr ""
212202
213203#: Greeter/Lockscreen.qml:142
@@ -247,7 +237,7 @@ msgstr "Ομιλία..."
247237msgid "Search"
248238msgstr "Αναζήτηση"
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr "Λυπούμαστε, δεν υπάρχει τίποτα που να ταιριάζει στην αναζήτησή σας."
253243
po/en_AU.po+24−34
@@ -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-07 10:49+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-08 07:02+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,44 +132,30 @@ 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
158−msgid "Add a review"
159−msgstr "Add a review"
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr "Review"
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr "Send"
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr "Comments:"
172−
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
175161msgstr "Featured"
@@ -198,17 +184,21 @@ msgstr "Popular Online"
198184msgid "Videos"
199185msgstr "Videos"
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr "Directed by:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
189+msgstr "Add a review"
190+
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
193+msgstr "Review"
204194
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr "Starring:"
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr "Send"
208198
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr "Author:"
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
201+msgstr "Comments:"
212202
213203#: Greeter/Lockscreen.qml:142
214204msgid "Emergency Call"
@@ -247,7 +237,7 @@ msgstr "Speaking..."
247237msgid "Search"
248238msgstr "Search"
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr "Sorry, there is nothing that matches your search."
253243
po/en_GB.po+24−34
@@ -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-07 10:49+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-08 07:02+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,44 +132,30 @@ 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
158−msgid "Add a review"
159−msgstr ""
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr ""
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr ""
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr ""
172−
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
175161msgstr "Featured"
@@ -198,17 +184,21 @@ msgstr "Popular Online"
198184msgid "Videos"
199185msgstr "Videos"
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr "Directed by:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
189+msgstr ""
190+
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
193+msgstr ""
204194
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr "Starring:"
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr ""
208198
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr "Author:"
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
201+msgstr ""
212202
213203#: Greeter/Lockscreen.qml:142
214204msgid "Emergency Call"
@@ -247,7 +237,7 @@ msgstr "Speaking..."
247237msgid "Search"
248238msgstr "Search"
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr "Sorry, there is nothing that matches your search."
253243
po/eo.po+21−31
@@ -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-07 10:49+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-08 07:01+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,44 +132,30 @@ 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
158−msgid "Add a review"
159−msgstr ""
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr ""
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr ""
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr ""
172−
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
175161msgstr ""
@@ -198,16 +184,20 @@ msgstr ""
198184msgid "Videos"
199185msgstr ""
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
203189msgstr ""
204190
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
207193msgstr ""
208194
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr ""
198+
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
211201msgstr ""
212202
213203#: Greeter/Lockscreen.qml:142
@@ -247,7 +237,7 @@ msgstr ""
247237msgid "Search"
248238msgstr ""
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr ""
253243
po/es.po+24−34
@@ -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-07 10:49+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-08 07:01+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,44 +136,30 @@ 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
162−msgid "Add a review"
163−msgstr "Añadir una reseña"
164−
165−#: Dash/Apps/AppReviews.qml:86
166−msgid "Review"
167−msgstr "Reseñar"
168−
169−#: Dash/Apps/AppReviews.qml:121
170−msgid "Send"
171−msgstr "Enviar"
172−
173−#: Dash/Apps/AppReviews.qml:139
174−msgid "Comments:"
175−msgstr "Comentarios:"
176−
177163#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
178164msgid "Featured"
179165msgstr "Destacados"
@@ -202,17 +188,21 @@ msgstr "Populares en línea"
202188msgid "Videos"
203189msgstr "Vídeos"
204190
205−#: Dash/Video/VideoPreview.qml:130
206−msgid "Directed by:"
207−msgstr "Dirigida por:"
191+#: Dash/Previews/Reviews.qml:74
192+msgid "Add a review"
193+msgstr "Añadir una reseña"
194+
195+#: Dash/Previews/Reviews.qml:86
196+msgid "Review"
197+msgstr "Reseñar"
208198
209−#: Dash/Video/VideoPreview.qml:153
210−msgid "Starring:"
211−msgstr "Protagonistas:"
199+#: Dash/Previews/Reviews.qml:121
200+msgid "Send"
201+msgstr "Enviar"
212202
213−#: Dash/Video/VideoPreview.qml:176
214−msgid "Author:"
215−msgstr "Autor:"
203+#: Dash/Previews/Reviews.qml:139
204+msgid "Comments:"
205+msgstr "Comentarios:"
216206
217207#: Greeter/Lockscreen.qml:142
218208msgid "Emergency Call"
@@ -251,7 +241,7 @@ msgstr "Hablando…"
251241msgid "Search"
252242msgstr "Buscar"
253243
254−#: plugins/Unity/scope.cpp:336
244+#: plugins/Unity/scope.cpp:361
255245msgid "Sorry, there is nothing that matches your search."
256246msgstr "No hay nada que coincida con su búsqueda."
257247
po/fi.po+24−34
@@ -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-07 10:49+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-08 07:01+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,44 +134,30 @@ 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
160−msgid "Add a review"
161−msgstr "Lisää arvostelu"
162−
163−#: Dash/Apps/AppReviews.qml:86
164−msgid "Review"
165−msgstr "Arvostelu"
166−
167−#: Dash/Apps/AppReviews.qml:121
168−msgid "Send"
169−msgstr "Lähetä"
170−
171−#: Dash/Apps/AppReviews.qml:139
172−msgid "Comments:"
173−msgstr "Kommentit:"
174−
175161#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
176162msgid "Featured"
177163msgstr "Suositellut"
@@ -200,17 +186,21 @@ msgstr "Suosittua verkossa"
200186msgid "Videos"
201187msgstr "Videot"
202188
203−#: Dash/Video/VideoPreview.qml:130
204−msgid "Directed by:"
205−msgstr "Ohjannut:"
189+#: Dash/Previews/Reviews.qml:74
190+msgid "Add a review"
191+msgstr "Lisää arvostelu"
192+
193+#: Dash/Previews/Reviews.qml:86
194+msgid "Review"
195+msgstr "Arvostelu"
206196
207−#: Dash/Video/VideoPreview.qml:153
208−msgid "Starring:"
209−msgstr "Pääosissa:"
197+#: Dash/Previews/Reviews.qml:121
198+msgid "Send"
199+msgstr "Lähetä"
210200
211−#: Dash/Video/VideoPreview.qml:176
212−msgid "Author:"
213−msgstr "Tekijä:"
201+#: Dash/Previews/Reviews.qml:139
202+msgid "Comments:"
203+msgstr "Kommentit:"
214204
215205#: Greeter/Lockscreen.qml:142
216206msgid "Emergency Call"
@@ -249,7 +239,7 @@ msgstr "Puhutaan..."
249239msgid "Search"
250240msgstr "Hae"
251241
252−#: plugins/Unity/scope.cpp:336
242+#: plugins/Unity/scope.cpp:361
253243msgid "Sorry, there is nothing that matches your search."
254244msgstr "Hakuun täsmääviä tuloksia ei löydy."
255245
po/fo.po+21−31
@@ -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-07 10:49+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-08 07:01+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,44 +132,30 @@ 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
158−msgid "Add a review"
159−msgstr ""
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr ""
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr ""
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr ""
172−
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
175161msgstr ""
@@ -198,16 +184,20 @@ msgstr ""
198184msgid "Videos"
199185msgstr "Sjónbond"
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
203189msgstr ""
204190
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
207193msgstr ""
208194
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr ""
198+
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
211201msgstr ""
212202
213203#: Greeter/Lockscreen.qml:142
@@ -247,7 +237,7 @@ msgstr "Snakkar..."
247237msgid "Search"
248238msgstr "Leita"
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr "Tíanverri er tað einki sum hóskar til tína leiting."
253243
po/fr.po+21−31
@@ -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-07 10:49+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-08 07:01+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,44 +132,30 @@ 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
158−msgid "Add a review"
159−msgstr ""
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr ""
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr ""
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr ""
172−
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
175161msgstr ""
@@ -198,16 +184,20 @@ msgstr ""
198184msgid "Videos"
199185msgstr "Vidéos"
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
203189msgstr ""
204190
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
207193msgstr ""
208194
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr ""
198+
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
211201msgstr ""
212202
213203#: Greeter/Lockscreen.qml:142
@@ -247,7 +237,7 @@ msgstr ""
247237msgid "Search"
248238msgstr ""
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr ""
253243
po/gd.po+24−34
@@ -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-07 10:49+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-08 07:01+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,26 +161,10 @@ 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
167−msgid "Add a review"
168−msgstr "Cuir lèirmheas ris"
169−
170−#: Dash/Apps/AppReviews.qml:86
171−msgid "Review"
172−msgstr "Lèirmheas"
173−
174−#: Dash/Apps/AppReviews.qml:121
175−msgid "Send"
176−msgstr "Cuir"
177−
178−#: Dash/Apps/AppReviews.qml:139
179−msgid "Comments:"
180−msgstr "Beachdan"
181−
182168#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
183169msgid "Featured"
184170msgstr "Brosnaichte"
@@ -207,17 +193,21 @@ msgstr "Fèill mhòr air air loidhne"
207193msgid "Videos"
208194msgstr "Videothan"
209195
210−#: Dash/Video/VideoPreview.qml:130
211−msgid "Directed by:"
212−msgstr "Air a stiùireadh le:"
196+#: Dash/Previews/Reviews.qml:74
197+msgid "Add a review"
198+msgstr "Cuir lèirmheas ris"
199+
200+#: Dash/Previews/Reviews.qml:86
201+msgid "Review"
202+msgstr "Lèirmheas"
213203
214−#: Dash/Video/VideoPreview.qml:153
215−msgid "Starring:"
216−msgstr "Leis na daoine a leanas:"
204+#: Dash/Previews/Reviews.qml:121
205+msgid "Send"
206+msgstr "Cuir"
217207
218−#: Dash/Video/VideoPreview.qml:176
219−msgid "Author:"
220−msgstr "Ùghdar:"
208+#: Dash/Previews/Reviews.qml:139
209+msgid "Comments:"
210+msgstr "Beachdan"
221211
222212#: Greeter/Lockscreen.qml:142
223213msgid "Emergency Call"
@@ -256,7 +246,7 @@ msgstr "A' bruidhinn..."
256246msgid "Search"
257247msgstr "Lorg"
258248
259−#: plugins/Unity/scope.cpp:336
249+#: plugins/Unity/scope.cpp:361
260250msgid "Sorry, there is nothing that matches your search."
261251msgstr "Tha sinn duilich ach chan eil dad a' freagairt ris na lorg thu."
262252
po/gl.po+24−34
@@ -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-07 10:49+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-08 07:01+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,44 +134,30 @@ 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
160−msgid "Add a review"
161−msgstr "Engadir unha opinión"
162−
163−#: Dash/Apps/AppReviews.qml:86
164−msgid "Review"
165−msgstr "Opinión"
166−
167−#: Dash/Apps/AppReviews.qml:121
168−msgid "Send"
169−msgstr "Enviar"
170−
171−#: Dash/Apps/AppReviews.qml:139
172−msgid "Comments:"
173−msgstr "Comentarios:"
174−
175161#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
176162msgid "Featured"
177163msgstr "Destacado"
@@ -200,17 +186,21 @@ msgstr "Populares en liña"
200186msgid "Videos"
201187msgstr "Vídeos"
202188
203−#: Dash/Video/VideoPreview.qml:130
204−msgid "Directed by:"
205−msgstr "Dirixido por"
189+#: Dash/Previews/Reviews.qml:74
190+msgid "Add a review"
191+msgstr "Engadir unha opinión"
192+
193+#: Dash/Previews/Reviews.qml:86
194+msgid "Review"
195+msgstr "Opinión"
206196
207−#: Dash/Video/VideoPreview.qml:153
208−msgid "Starring:"
209−msgstr "Favoritos"
197+#: Dash/Previews/Reviews.qml:121
198+msgid "Send"
199+msgstr "Enviar"
210200
211−#: Dash/Video/VideoPreview.qml:176
212−msgid "Author:"
213−msgstr "Autor:"
201+#: Dash/Previews/Reviews.qml:139
202+msgid "Comments:"
203+msgstr "Comentarios:"
214204
215205#: Greeter/Lockscreen.qml:142
216206msgid "Emergency Call"
@@ -249,7 +239,7 @@ msgstr "Falando…"
249239msgid "Search"
250240msgstr "Buscar"
251241
252−#: plugins/Unity/scope.cpp:336
242+#: plugins/Unity/scope.cpp:361
253243msgid "Sorry, there is nothing that matches your search."
254244msgstr "Sentímolo, non hai nada que coincida con esta busca."
255245
po/he.po+24−34
@@ -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-07 10:49+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-08 07:01+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,44 +132,30 @@ 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
158−msgid "Add a review"
159−msgstr "הוספת סקירה"
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr "סקירה"
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr "שליחה"
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr "הערות:"
172−
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
175161msgstr "מומלצים"
@@ -198,17 +184,21 @@ msgstr "פופולריים ברחבי הרשת"
198184msgid "Videos"
199185msgstr "סרטונים"
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr "בוים ע״י:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
189+msgstr "הוספת סקירה"
190+
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
193+msgstr "סקירה"
204194
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr "בכיכוב:"
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr "שליחה"
208198
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr "יוצר:"
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
201+msgstr "הערות:"
212202
213203#: Greeter/Lockscreen.qml:142
214204msgid "Emergency Call"
@@ -247,7 +237,7 @@ msgstr "הדיבור מושמע…"
247237msgid "Search"
248238msgstr "חיפוש"
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr "שום דבר אינו תואם לחיפוש שלך, עמך הסליחה."
253243
po/hr.po+21−31
@@ -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-07 10:49+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-08 07:01+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,44 +133,30 @@ 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
159−msgid "Add a review"
160−msgstr ""
161−
162−#: Dash/Apps/AppReviews.qml:86
163−msgid "Review"
164−msgstr ""
165−
166−#: Dash/Apps/AppReviews.qml:121
167−msgid "Send"
168−msgstr ""
169−
170−#: Dash/Apps/AppReviews.qml:139
171−msgid "Comments:"
172−msgstr ""
173−
174160#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
175161msgid "Featured"
176162msgstr ""
@@ -199,16 +185,20 @@ msgstr ""
199185msgid "Videos"
200186msgstr "Video"
201187
202−#: Dash/Video/VideoPreview.qml:130
203−msgid "Directed by:"
188+#: Dash/Previews/Reviews.qml:74
189+msgid "Add a review"
204190msgstr ""
205191
206−#: Dash/Video/VideoPreview.qml:153
207−msgid "Starring:"
192+#: Dash/Previews/Reviews.qml:86
193+msgid "Review"
208194msgstr ""
209195
210−#: Dash/Video/VideoPreview.qml:176
211−msgid "Author:"
196+#: Dash/Previews/Reviews.qml:121
197+msgid "Send"
198+msgstr ""
199+
200+#: Dash/Previews/Reviews.qml:139
201+msgid "Comments:"
212202msgstr ""
213203
214204#: Greeter/Lockscreen.qml:142
@@ -248,7 +238,7 @@ msgstr "Govor..."
248238msgid "Search"
249239msgstr "Pretraživanje"
250240
251−#: plugins/Unity/scope.cpp:336
241+#: plugins/Unity/scope.cpp:361
252242msgid "Sorry, there is nothing that matches your search."
253243msgstr "Nažalost, ne postoji ništa što odgovara vašoj pretrazi."
254244
po/hu.po+21−31
@@ -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-07 10:49+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-08 07:01+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,44 +132,30 @@ 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
158−msgid "Add a review"
159−msgstr ""
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr ""
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr ""
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr ""
172−
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
175161msgstr ""
@@ -198,16 +184,20 @@ msgstr ""
198184msgid "Videos"
199185msgstr "Videók"
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
203189msgstr ""
204190
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
207193msgstr ""
208194
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr ""
198+
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
211201msgstr ""
212202
213203#: Greeter/Lockscreen.qml:142
@@ -247,7 +237,7 @@ msgstr "Beszéd…"
247237msgid "Search"
248238msgstr "Keresés"
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr "Elnézést, nincs találat a keresésre."
253243
po/hy.po+21−31
@@ -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-07 10:49+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-08 07:01+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,44 +132,30 @@ 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
158−msgid "Add a review"
159−msgstr ""
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr ""
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr ""
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr ""
172−
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
175161msgstr ""
@@ -198,16 +184,20 @@ msgstr ""
198184msgid "Videos"
199185msgstr "Վիդեոներ"
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
203189msgstr ""
204190
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
207193msgstr ""
208194
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr ""
198+
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
211201msgstr ""
212202
213203#: Greeter/Lockscreen.qml:142
@@ -247,7 +237,7 @@ msgstr "Խոսում եմ..."
247237msgid "Search"
248238msgstr "Որոնում"
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr "Կներերք, բայց Ձեր հարցումով ոչինչ չկար"
253243
po/id.po+21−31
@@ -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-07 10:49+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-08 07:01+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,44 +132,30 @@ 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
158−msgid "Add a review"
159−msgstr ""
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr ""
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr ""
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr ""
172−
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
175161msgstr ""
@@ -198,16 +184,20 @@ msgstr ""
198184msgid "Videos"
199185msgstr ""
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
203189msgstr ""
204190
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
207193msgstr ""
208194
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr ""
198+
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
211201msgstr ""
212202
213203#: Greeter/Lockscreen.qml:142
@@ -247,7 +237,7 @@ msgstr ""
247237msgid "Search"
248238msgstr ""
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr ""
253243
po/is.po+24−34
@@ -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-07 10:49+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-08 07:01+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,44 +133,30 @@ 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
159−msgid "Add a review"
160−msgstr "Gefa umsögn"
161−
162−#: Dash/Apps/AppReviews.qml:86
163−msgid "Review"
164−msgstr "Umsögn"
165−
166−#: Dash/Apps/AppReviews.qml:121
167−msgid "Send"
168−msgstr "Senda"
169−
170−#: Dash/Apps/AppReviews.qml:139
171−msgid "Comments:"
172−msgstr "Athugasemdir:"
173−
174160#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
175161msgid "Featured"
176162msgstr "Efst á baugi"
@@ -199,17 +185,21 @@ msgstr "Vinsælt á Netinu"
199185msgid "Videos"
200186msgstr "Myndbönd"
201187
202−#: Dash/Video/VideoPreview.qml:130
203−msgid "Directed by:"
204−msgstr "Leikstýrt af:"
188+#: Dash/Previews/Reviews.qml:74
189+msgid "Add a review"
190+msgstr "Gefa umsögn"
191+
192+#: Dash/Previews/Reviews.qml:86
193+msgid "Review"
194+msgstr "Umsögn"
205195
206−#: Dash/Video/VideoPreview.qml:153
207−msgid "Starring:"
208−msgstr "Meðal leikara eru:"
196+#: Dash/Previews/Reviews.qml:121
197+msgid "Send"
198+msgstr "Senda"
209199
210−#: Dash/Video/VideoPreview.qml:176
211−msgid "Author:"
212−msgstr "Höfundur:"
200+#: Dash/Previews/Reviews.qml:139
201+msgid "Comments:"
202+msgstr "Athugasemdir:"
213203
214204#: Greeter/Lockscreen.qml:142
215205msgid "Emergency Call"
@@ -248,7 +238,7 @@ msgstr "Tala..."
248238msgid "Search"
249239msgstr "Leita"
250240
251−#: plugins/Unity/scope.cpp:336
241+#: plugins/Unity/scope.cpp:361
252242msgid "Sorry, there is nothing that matches your search."
253243msgstr "Því miður, það var ekkert sem passaði við leitarorðið þitt."
254244
po/it.po+28−36
@@ -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-07 10:49+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-08 07:01+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,45 +136,33 @@ 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
163−msgid "Add a review"
164−msgstr "Aggiungi una recensione"
165−
166−#: Dash/Apps/AppReviews.qml:86
167−msgid "Review"
168−msgstr "Recensisci"
169−
170−#: Dash/Apps/AppReviews.qml:121
171−msgid "Send"
172−msgstr "Invia"
173−
174−#: Dash/Apps/AppReviews.qml:139
175−msgid "Comments:"
176−msgstr "Commenti:"
177−
178166#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
179167msgid "Featured"
180168msgstr "In evidenza"
@@ -203,17 +191,21 @@ msgstr "Popolari online"
203191msgid "Videos"
204192msgstr "Video"
205193
206−#: Dash/Video/VideoPreview.qml:130
207−msgid "Directed by:"
208−msgstr "Diretto da:"
194+#: Dash/Previews/Reviews.qml:74
195+msgid "Add a review"
196+msgstr "Aggiungi una recensione"
209197
210−#: Dash/Video/VideoPreview.qml:153
211−msgid "Starring:"
212−msgstr "Valutazioni:"
198+#: Dash/Previews/Reviews.qml:86
199+msgid "Review"
200+msgstr "Recensisci"
213201
214−#: Dash/Video/VideoPreview.qml:176
215−msgid "Author:"
216−msgstr "Autore:"
202+#: Dash/Previews/Reviews.qml:121
203+msgid "Send"
204+msgstr "Invia"
205+
206+#: Dash/Previews/Reviews.qml:139
207+msgid "Comments:"
208+msgstr "Commenti:"
217209
218210#: Greeter/Lockscreen.qml:142
219211msgid "Emergency Call"
@@ -252,13 +244,13 @@ msgstr "Sto parlando..."
252244msgid "Search"
253245msgstr "Cerca"
254246
255−#: plugins/Unity/scope.cpp:336
247+#: plugins/Unity/scope.cpp:361
256248msgid "Sorry, there is nothing that matches your search."
257249msgstr "Nessun risultato corrispondente alla ricerca."
258250
259251#: plugins/Unity/showallfilteroption.cpp:41
260252msgid "All"
261−msgstr ""
253+msgstr "Tutto"
262254
263255#: Shell.qml:453
264256#, qt-format
po/ja.po+21−31
@@ -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-07 10:49+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-08 07:01+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,44 +132,30 @@ 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
158−msgid "Add a review"
159−msgstr ""
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr ""
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr ""
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr ""
172−
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
175161msgstr ""
@@ -198,16 +184,20 @@ msgstr ""
198184msgid "Videos"
199185msgstr ""
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
203189msgstr ""
204190
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
207193msgstr ""
208194
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr ""
198+
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
211201msgstr ""
212202
213203#: Greeter/Lockscreen.qml:142
@@ -247,7 +237,7 @@ msgstr ""
247237msgid "Search"
248238msgstr ""
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr ""
253243
po/kn.po+21−31
@@ -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-07 10:49+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-08 07:01+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,44 +132,30 @@ 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
158−msgid "Add a review"
159−msgstr ""
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr ""
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr ""
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr ""
172−
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
175161msgstr ""
@@ -198,16 +184,20 @@ msgstr ""
198184msgid "Videos"
199185msgstr "ವೀಡಿಯೋಗಳು"
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
203189msgstr ""
204190
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
207193msgstr ""
208194
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr ""
198+
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
211201msgstr ""
212202
213203#: Greeter/Lockscreen.qml:142
@@ -247,7 +237,7 @@ msgstr "ಮಾತನಾಡುತಿದ್ದೀರಿ"
247237msgid "Search"
248238msgstr "ಹುಡುಕು"
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr "ಕ್ಷಮಿಸಿ ನಿಮ್ಮ ಶೋಧನೆಗೆ ಸರಿಯಾದ ಹೊಂದಾಣಿಕೆಗಳು ದೊರಕುತ್ತಿಲ್ಲ"
253243
po/ko.po+44−54
@@ -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-07 10:49+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-11 05:58+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,44 +132,30 @@ 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
158−msgid "Add a review"
159−msgstr ""
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr ""
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr ""
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr ""
172−
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
175161msgstr ""
@@ -198,16 +184,20 @@ msgstr ""
198184msgid "Videos"
199185msgstr ""
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
203189msgstr ""
204190
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
207193msgstr ""
208194
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr ""
198+
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
211201msgstr ""
212202
213203#: Greeter/Lockscreen.qml:142
@@ -245,9 +235,9 @@ msgstr ""
245235
246236#: Panel/SearchIndicator.qml:27
247237msgid "Search"
248−msgstr "찾기"
238+msgstr "검색"
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr ""
253243
po/ky.po+21−31
@@ -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-07 10:49+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-08 07:01+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,44 +132,30 @@ 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
158−msgid "Add a review"
159−msgstr ""
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr ""
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr ""
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr ""
172−
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
175161msgstr ""
@@ -198,16 +184,20 @@ msgstr ""
198184msgid "Videos"
199185msgstr "Видеолор"
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
203189msgstr ""
204190
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
207193msgstr ""
208194
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr ""
198+
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
211201msgstr ""
212202
213203#: Greeter/Lockscreen.qml:142
@@ -247,7 +237,7 @@ msgstr "Сүйлөнүүдө..."
247237msgid "Search"
248238msgstr "Издөө"
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr "Тилекке каршы, сиздин издөөңүзгө эч нерсе дал келген жок."
253243
po/lo.po+22−32
@@ -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-07 10:49+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-08 07:01+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,44 +132,30 @@ 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
158−msgid "Add a review"
159−msgstr ""
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr ""
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr "ສົ່ງ"
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr "ຄໍ່ເຫັນ"
172−
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
175161msgstr ""
@@ -198,17 +184,21 @@ msgstr ""
198184msgid "Videos"
199185msgstr "ວິດີໂອ"
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
203189msgstr ""
204190
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
207193msgstr ""
208194
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr ""
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr "ສົ່ງ"
198+
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
201+msgstr "ຄໍ່ເຫັນ"
212202
213203#: Greeter/Lockscreen.qml:142
214204msgid "Emergency Call"
@@ -247,7 +237,7 @@ msgstr "ກໍາລັງເວົ້າ"
247237msgid "Search"
248238msgstr "ຊອກຫາ"
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr ""
253243
po/lv.po+21−31
@@ -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-07 10:49+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-08 07:01+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,44 +132,30 @@ 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
158−msgid "Add a review"
159−msgstr ""
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr ""
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr ""
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr ""
172−
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
175161msgstr ""
@@ -198,16 +184,20 @@ msgstr ""
198184msgid "Videos"
199185msgstr "Video"
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
203189msgstr ""
204190
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
207193msgstr ""
208194
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr ""
198+
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
211201msgstr ""
212202
213203#: Greeter/Lockscreen.qml:142
@@ -247,7 +237,7 @@ msgstr "Runa..."
247237msgid "Search"
248238msgstr "Meklēt"
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr "Diemžēl nekas neatbilst jūsu meklētajam."
253243
po/my.po+52−62
@@ -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-07 10:49+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-10 05:50+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,43 +132,29 @@ 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 ""
156−
157−#: Dash/Apps/AppReviews.qml:74
158−msgid "Add a review"
159−msgstr ""
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr ""
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr ""
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr ""
157+msgstr "ဒီဟာကိုအမှတ်ပေးမည်"
172158
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
@@ -176,11 +162,11 @@ msgstr ""
176162
177163#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178164msgid "Recent"
179−msgstr ""
165+msgstr "မကြာသေးခင်က"
180166
181167#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182168msgid "New Releases"
183−msgstr ""
169+msgstr "အသစ်ထွက်ရှိသော"
184170
185171#: Dash/DashMusic.qml:30
186172msgid "Top Charting"
@@ -192,23 +178,27 @@ msgstr "တေးဂီတ"
192178
193179#: Dash/DashVideos.qml:31
194180msgid "Popular Online"
195−msgstr ""
181+msgstr "အွန်လိုင်းတွင်ပေါ်ပြူလာဖြစ်သော"
196182
197183#: Dash/DashVideos.qml:146
198184msgid "Videos"
199185msgstr "ဗီဒီယိုများ"
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
203189msgstr ""
204190
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
207193msgstr ""
208194
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr ""
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr "ပို့မည်"
198+
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
201+msgstr "မှတ်ချက်များ-"
212202
213203#: Greeter/Lockscreen.qml:142
214204msgid "Emergency Call"
@@ -247,7 +237,7 @@ msgstr "ပြောနေသည်"
247237msgid "Search"
248238msgstr "ရှာဖွေ"
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr "ဆောရီး၊ သင်၏ရှာဖွေမူနှင့်တူညီတာဘာမှမရှိပါ။"
253243
po/nb.po+21−31
@@ -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-07 10:49+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-08 07:01+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,44 +132,30 @@ 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
158−msgid "Add a review"
159−msgstr ""
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr ""
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr ""
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr ""
172−
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
175161msgstr ""
@@ -198,16 +184,20 @@ msgstr ""
198184msgid "Videos"
199185msgstr "Videoer"
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
203189msgstr ""
204190
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
207193msgstr ""
208194
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr ""
198+
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
211201msgstr ""
212202
213203#: Greeter/Lockscreen.qml:142
@@ -247,7 +237,7 @@ msgstr "Snakker …"
247237msgid "Search"
248238msgstr "Søk"
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr "Søket ga ingen treff."
253243
po/nl.po+21−31
@@ -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-07 10:49+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-08 07:01+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,44 +132,30 @@ 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
158−msgid "Add a review"
159−msgstr ""
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr ""
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr ""
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr ""
172−
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
175161msgstr ""
@@ -198,16 +184,20 @@ msgstr ""
198184msgid "Videos"
199185msgstr "Video's"
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
203189msgstr ""
204190
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
207193msgstr ""
208194
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr ""
198+
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
211201msgstr ""
212202
213203#: Greeter/Lockscreen.qml:142
@@ -247,7 +237,7 @@ msgstr "Inspreken…"
247237msgid "Search"
248238msgstr "Zoeken"
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr "Er is helaas niets dat met uw zoekopdracht overeenkomt."
253243
po/pl.po+24−34
@@ -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-07 10:49+0200\n"
1111"PO-Revision-Date: 2013-06-27 08:52+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Polish <pl@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
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-08 07:01+0000\n"
20+"X-Generator: Launchpad (build 16799)\n"
2121
2222#: Applications/applications.js:23
2323msgid "Phone"
@@ -87,7 +87,7 @@ msgstr "Wikipedia"
8787msgid "YouTube"
8888msgstr "YouTube"
8989
90−#: Components/EdgeDemoOverlay.qml:150
90+#: Components/EdgeDemoOverlay.qml:149
9191msgid "Skip intro"
9292msgstr ""
9393
@@ -133,44 +133,30 @@ 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 "Ostatnie wyszukiwania"
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
159−msgid "Add a review"
160−msgstr ""
161−
162−#: Dash/Apps/AppReviews.qml:86
163−msgid "Review"
164−msgstr ""
165−
166−#: Dash/Apps/AppReviews.qml:121
167−msgid "Send"
168−msgstr ""
169−
170−#: Dash/Apps/AppReviews.qml:139
171−msgid "Comments:"
172−msgstr ""
173−
174160#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
175161msgid "Featured"
176162msgstr "Polecane"
@@ -199,17 +185,21 @@ msgstr "Popularne w sieci"
199185msgid "Videos"
200186msgstr "Filmy"
201187
202−#: Dash/Video/VideoPreview.qml:130
203−msgid "Directed by:"
204−msgstr "Reżyseria:"
188+#: Dash/Previews/Reviews.qml:74
189+msgid "Add a review"
190+msgstr ""
191+
192+#: Dash/Previews/Reviews.qml:86
193+msgid "Review"
194+msgstr ""
205195
206−#: Dash/Video/VideoPreview.qml:153
207−msgid "Starring:"
208−msgstr "Obsada:"
196+#: Dash/Previews/Reviews.qml:121
197+msgid "Send"
198+msgstr ""
209199
210−#: Dash/Video/VideoPreview.qml:176
211−msgid "Author:"
212−msgstr "Autor:"
200+#: Dash/Previews/Reviews.qml:139
201+msgid "Comments:"
202+msgstr ""
213203
214204#: Greeter/Lockscreen.qml:142
215205msgid "Emergency Call"
@@ -248,7 +238,7 @@ msgstr "Rozpoznanie..."
248238msgid "Search"
249239msgstr "Szukaj"
250240
251−#: plugins/Unity/scope.cpp:336
241+#: plugins/Unity/scope.cpp:361
252242msgid "Sorry, there is nothing that matches your search."
253243msgstr "Nie znaleziono pasujących wyników."
254244
po/pt_BR.po+24−34
@@ -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-07 10:49+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-08 07:01+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,44 +134,30 @@ 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
160−msgid "Add a review"
161−msgstr "Adicionar uma análise"
162−
163−#: Dash/Apps/AppReviews.qml:86
164−msgid "Review"
165−msgstr "Revisão"
166−
167−#: Dash/Apps/AppReviews.qml:121
168−msgid "Send"
169−msgstr "Enviar"
170−
171−#: Dash/Apps/AppReviews.qml:139
172−msgid "Comments:"
173−msgstr "Comentários:"
174−
175161#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
176162msgid "Featured"
177163msgstr "Em destaque"
@@ -200,17 +186,21 @@ msgstr "Popular Online"
200186msgid "Videos"
201187msgstr "Vídeos"
202188
203−#: Dash/Video/VideoPreview.qml:130
204−msgid "Directed by:"
205−msgstr "Realizado por:"
189+#: Dash/Previews/Reviews.qml:74
190+msgid "Add a review"
191+msgstr "Adicionar uma análise"
192+
193+#: Dash/Previews/Reviews.qml:86
194+msgid "Review"
195+msgstr "Revisão"
206196
207−#: Dash/Video/VideoPreview.qml:153
208−msgid "Starring:"
209−msgstr "Estrelando:"
197+#: Dash/Previews/Reviews.qml:121
198+msgid "Send"
199+msgstr "Enviar"
210200
211−#: Dash/Video/VideoPreview.qml:176
212−msgid "Author:"
213−msgstr "Autor:"
201+#: Dash/Previews/Reviews.qml:139
202+msgid "Comments:"
203+msgstr "Comentários:"
214204
215205#: Greeter/Lockscreen.qml:142
216206msgid "Emergency Call"
@@ -249,7 +239,7 @@ msgstr "Falando..."
249239msgid "Search"
250240msgstr "Pesquisar"
251241
252−#: plugins/Unity/scope.cpp:336
242+#: plugins/Unity/scope.cpp:361
253243msgid "Sorry, there is nothing that matches your search."
254244msgstr "Desculpe, não há nada que corresponda à sua pesquisa."
255245
po/ro.po+21−31
@@ -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-07 10:49+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-08 07:01+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,44 +133,30 @@ 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
159−msgid "Add a review"
160−msgstr ""
161−
162−#: Dash/Apps/AppReviews.qml:86
163−msgid "Review"
164−msgstr ""
165−
166−#: Dash/Apps/AppReviews.qml:121
167−msgid "Send"
168−msgstr ""
169−
170−#: Dash/Apps/AppReviews.qml:139
171−msgid "Comments:"
172−msgstr ""
173−
174160#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
175161msgid "Featured"
176162msgstr ""
@@ -199,16 +185,20 @@ msgstr ""
199185msgid "Videos"
200186msgstr "Video"
201187
202−#: Dash/Video/VideoPreview.qml:130
203−msgid "Directed by:"
188+#: Dash/Previews/Reviews.qml:74
189+msgid "Add a review"
204190msgstr ""
205191
206−#: Dash/Video/VideoPreview.qml:153
207−msgid "Starring:"
192+#: Dash/Previews/Reviews.qml:86
193+msgid "Review"
208194msgstr ""
209195
210−#: Dash/Video/VideoPreview.qml:176
211−msgid "Author:"
196+#: Dash/Previews/Reviews.qml:121
197+msgid "Send"
198+msgstr ""
199+
200+#: Dash/Previews/Reviews.qml:139
201+msgid "Comments:"
212202msgstr ""
213203
214204#: Greeter/Lockscreen.qml:142
@@ -248,7 +238,7 @@ msgstr "Vorbire..."
248238msgid "Search"
249239msgstr "Căutare"
250240
251−#: plugins/Unity/scope.cpp:336
241+#: plugins/Unity/scope.cpp:361
252242msgid "Sorry, there is nothing that matches your search."
253243msgstr ""
254244"Ne pare rău, nu este nimic care se potrivește căutării dumneavoastră."
po/ru.po+24−34
@@ -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-07 10:49+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-08 07:01+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,43 +138,29 @@ 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
163−msgid "Add a review"
164−msgstr "Добавьте отзыв"
165−
166−#: Dash/Apps/AppReviews.qml:86
167−msgid "Review"
168−msgstr "Отзыв"
169−
170−#: Dash/Apps/AppReviews.qml:121
171−msgid "Send"
172−msgstr "Отправить"
173−
174−#: Dash/Apps/AppReviews.qml:139
175−msgid "Comments:"
176−msgstr "Комментарии:"
177−
178164#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
179165msgid "Featured"
180166msgstr "Рекомендованное"
@@ -203,17 +189,21 @@ msgstr "Популярное в Интернете"
203189msgid "Videos"
204190msgstr "Видео"
205191
206−#: Dash/Video/VideoPreview.qml:130
207−msgid "Directed by:"
208−msgstr "Режиссёр"
192+#: Dash/Previews/Reviews.qml:74
193+msgid "Add a review"
194+msgstr "Добавьте отзыв"
195+
196+#: Dash/Previews/Reviews.qml:86
197+msgid "Review"
198+msgstr "Отзыв"
209199
210−#: Dash/Video/VideoPreview.qml:153
211−msgid "Starring:"
212−msgstr "В главных ролях:"
200+#: Dash/Previews/Reviews.qml:121
201+msgid "Send"
202+msgstr "Отправить"
213203
214−#: Dash/Video/VideoPreview.qml:176
215−msgid "Author:"
216−msgstr "Автор:"
204+#: Dash/Previews/Reviews.qml:139
205+msgid "Comments:"
206+msgstr "Комментарии:"
217207
218208#: Greeter/Lockscreen.qml:142
219209msgid "Emergency Call"
@@ -252,7 +242,7 @@ msgstr "Говорите..."
252242msgid "Search"
253243msgstr "Поиск"
254244
255−#: plugins/Unity/scope.cpp:336
245+#: plugins/Unity/scope.cpp:361
256246msgid "Sorry, there is nothing that matches your search."
257247msgstr "Извините, поиск не дал результатов."
258248
po/shn.ponew file+251
@@ -0,0 +1,251 @@
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-07 10:49+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-08 07:01+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/DashMusic.qml:27 Dash/DashVideos.qml:28
160+msgid "Featured"
161+msgstr ""
162+
163+#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
164+msgid "Recent"
165+msgstr ""
166+
167+#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
168+msgid "New Releases"
169+msgstr ""
170+
171+#: Dash/DashMusic.qml:30
172+msgid "Top Charting"
173+msgstr ""
174+
175+#: Dash/DashMusic.qml:91
176+msgid "Music"
177+msgstr ""
178+
179+#: Dash/DashVideos.qml:31
180+msgid "Popular Online"
181+msgstr ""
182+
183+#: Dash/DashVideos.qml:146
184+msgid "Videos"
185+msgstr ""
186+
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
189+msgstr ""
190+
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
193+msgstr ""
194+
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr ""
198+
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
201+msgstr ""
202+
203+#: Greeter/Lockscreen.qml:142
204+msgid "Emergency Call"
205+msgstr ""
206+
207+#: Greeter/PassphraseLockscreen.qml:59
208+#, qt-format
209+msgid "Hello %1"
210+msgstr ""
211+
212+#: Greeter/PassphraseLockscreen.qml:59
213+msgid "Hello"
214+msgstr ""
215+
216+#: Hud/HudParametrizedActionsPage.qml:132
217+msgid "Confirm"
218+msgstr ""
219+
220+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
221+msgid "Type or say a command"
222+msgstr ""
223+
224+#: Hud/Hud.qml:84
225+msgid "Loading. Please Wait..."
226+msgstr ""
227+
228+#: Hud/Hud.qml:89
229+msgid "Speak Now..."
230+msgstr ""
231+
232+#: Hud/Hud.qml:94
233+msgid "Speaking..."
234+msgstr ""
235+
236+#: Panel/SearchIndicator.qml:27
237+msgid "Search"
238+msgstr ""
239+
240+#: plugins/Unity/scope.cpp:361
241+msgid "Sorry, there is nothing that matches your search."
242+msgstr ""
243+
244+#: plugins/Unity/showallfilteroption.cpp:41
245+msgid "All"
246+msgstr ""
247+
248+#: Shell.qml:453
249+#, qt-format
250+msgid "Please enter %1"
251+msgstr ""
po/si.po+21−31
@@ -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-07 10:49+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-08 07:01+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,44 +132,30 @@ 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
158−msgid "Add a review"
159−msgstr ""
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr ""
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr ""
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr ""
172−
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
175161msgstr ""
@@ -198,16 +184,20 @@ msgstr ""
198184msgid "Videos"
199185msgstr ""
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
203189msgstr ""
204190
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
207193msgstr ""
208194
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr ""
198+
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
211201msgstr ""
212202
213203#: Greeter/Lockscreen.qml:142
@@ -247,7 +237,7 @@ msgstr ""
247237msgid "Search"
248238msgstr ""
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr ""
253243
po/sl.po+24−34
@@ -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-07 10:49+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-08 07:01+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,26 +159,10 @@ 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
165−msgid "Add a review"
166−msgstr "Dodaj oceno"
167−
168−#: Dash/Apps/AppReviews.qml:86
169−msgid "Review"
170−msgstr "Ocena"
171−
172−#: Dash/Apps/AppReviews.qml:121
173−msgid "Send"
174−msgstr "Pošlji"
175−
176−#: Dash/Apps/AppReviews.qml:139
177−msgid "Comments:"
178−msgstr "Opombe:"
179−
180166#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
181167msgid "Featured"
182168msgstr "Predstavljeno"
@@ -205,17 +191,21 @@ msgstr "Priljubljeno na spletu"
205191msgid "Videos"
206192msgstr "Videi"
207193
208−#: Dash/Video/VideoPreview.qml:130
209−msgid "Directed by:"
210−msgstr "Režija:"
194+#: Dash/Previews/Reviews.qml:74
195+msgid "Add a review"
196+msgstr "Dodaj oceno"
197+
198+#: Dash/Previews/Reviews.qml:86
199+msgid "Review"
200+msgstr "Ocena"
211201
212−#: Dash/Video/VideoPreview.qml:153
213−msgid "Starring:"
214−msgstr "Igrajo:"
202+#: Dash/Previews/Reviews.qml:121
203+msgid "Send"
204+msgstr "Pošlji"
215205
216−#: Dash/Video/VideoPreview.qml:176
217−msgid "Author:"
218−msgstr "Avtor:"
206+#: Dash/Previews/Reviews.qml:139
207+msgid "Comments:"
208+msgstr "Opombe:"
219209
220210#: Greeter/Lockscreen.qml:142
221211msgid "Emergency Call"
@@ -254,7 +244,7 @@ msgstr "Govorjenje ..."
254244msgid "Search"
255245msgstr "Iskanje"
256246
257−#: plugins/Unity/scope.cpp:336
247+#: plugins/Unity/scope.cpp:361
258248msgid "Sorry, there is nothing that matches your search."
259249msgstr "Nič se ne ujema z vašim iskalnim nizom."
260250
po/sr.po+21−31
@@ -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-07 10:49+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-08 07:01+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,44 +133,30 @@ 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
159−msgid "Add a review"
160−msgstr ""
161−
162−#: Dash/Apps/AppReviews.qml:86
163−msgid "Review"
164−msgstr ""
165−
166−#: Dash/Apps/AppReviews.qml:121
167−msgid "Send"
168−msgstr ""
169−
170−#: Dash/Apps/AppReviews.qml:139
171−msgid "Comments:"
172−msgstr ""
173−
174160#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
175161msgid "Featured"
176162msgstr ""
@@ -199,16 +185,20 @@ msgstr ""
199185msgid "Videos"
200186msgstr "Видео"
201187
202−#: Dash/Video/VideoPreview.qml:130
203−msgid "Directed by:"
188+#: Dash/Previews/Reviews.qml:74
189+msgid "Add a review"
204190msgstr ""
205191
206−#: Dash/Video/VideoPreview.qml:153
207−msgid "Starring:"
192+#: Dash/Previews/Reviews.qml:86
193+msgid "Review"
208194msgstr ""
209195
210−#: Dash/Video/VideoPreview.qml:176
211−msgid "Author:"
196+#: Dash/Previews/Reviews.qml:121
197+msgid "Send"
198+msgstr ""
199+
200+#: Dash/Previews/Reviews.qml:139
201+msgid "Comments:"
212202msgstr ""
213203
214204#: Greeter/Lockscreen.qml:142
@@ -248,7 +238,7 @@ msgstr "Говор..."
248238msgid "Search"
249239msgstr "Претрага"
250240
251−#: plugins/Unity/scope.cpp:336
241+#: plugins/Unity/scope.cpp:361
252242msgid "Sorry, there is nothing that matches your search."
253243msgstr "Нажалост, претрага није наишла на икакво подударање."
254244
po/sv.po+21−31
@@ -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-07 10:49+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-08 07:01+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,44 +132,30 @@ 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
158−msgid "Add a review"
159−msgstr ""
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr ""
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr ""
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr ""
172−
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
175161msgstr ""
@@ -198,16 +184,20 @@ msgstr ""
198184msgid "Videos"
199185msgstr ""
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
203189msgstr ""
204190
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
207193msgstr ""
208194
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr ""
198+
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
211201msgstr ""
212202
213203#: Greeter/Lockscreen.qml:142
@@ -247,7 +237,7 @@ msgstr ""
247237msgid "Search"
248238msgstr ""
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr ""
253243
po/te.po+21−31
@@ -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-07 10:49+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-08 07:01+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,44 +132,30 @@ 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
158−msgid "Add a review"
159−msgstr ""
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr ""
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr ""
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr ""
172−
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
175161msgstr ""
@@ -198,16 +184,20 @@ msgstr ""
198184msgid "Videos"
199185msgstr ""
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
203189msgstr ""
204190
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
207193msgstr ""
208194
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr ""
198+
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
211201msgstr ""
212202
213203#: Greeter/Lockscreen.qml:142
@@ -247,7 +237,7 @@ msgstr ""
247237msgid "Search"
248238msgstr ""
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr ""
253243
po/tr.po+24−34
@@ -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-07 10:49+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-08 07:01+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,44 +133,30 @@ 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
159−msgid "Add a review"
160−msgstr "Bir inceleme ekle"
161−
162−#: Dash/Apps/AppReviews.qml:86
163−msgid "Review"
164−msgstr "İnceleme"
165−
166−#: Dash/Apps/AppReviews.qml:121
167−msgid "Send"
168−msgstr "Gönder"
169−
170−#: Dash/Apps/AppReviews.qml:139
171−msgid "Comments:"
172−msgstr "Yorumlar:"
173−
174160#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
175161msgid "Featured"
176162msgstr "Öne Çıkanlar"
@@ -199,17 +185,21 @@ msgstr "Genellikle Çevrimiçi"
199185msgid "Videos"
200186msgstr "Videolar"
201187
202−#: Dash/Video/VideoPreview.qml:130
203−msgid "Directed by:"
204−msgstr "Yönetmen"
188+#: Dash/Previews/Reviews.qml:74
189+msgid "Add a review"
190+msgstr "Bir inceleme ekle"
191+
192+#: Dash/Previews/Reviews.qml:86
193+msgid "Review"
194+msgstr "İnceleme"
205195
206−#: Dash/Video/VideoPreview.qml:153
207−msgid "Starring:"
208−msgstr "Başroller:"
196+#: Dash/Previews/Reviews.qml:121
197+msgid "Send"
198+msgstr "Gönder"
209199
210−#: Dash/Video/VideoPreview.qml:176
211−msgid "Author:"
212−msgstr "Yazar:"
200+#: Dash/Previews/Reviews.qml:139
201+msgid "Comments:"
202+msgstr "Yorumlar:"
213203
214204#: Greeter/Lockscreen.qml:142
215205msgid "Emergency Call"
@@ -248,7 +238,7 @@ msgstr "Konuşuyor..."
248238msgid "Search"
249239msgstr "Ara"
250240
251−#: plugins/Unity/scope.cpp:336
241+#: plugins/Unity/scope.cpp:361
252242msgid "Sorry, there is nothing that matches your search."
253243msgstr "Üzgünüz, aramanızla eşleşen hiçbir şey yok."
254244
po/ug.po+33−44
@@ -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-07 10:49+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-10 05:50+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,44 +132,29 @@ 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−msgid "Add a review"
159−msgstr ""
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr ""
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr ""
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr ""
172−
173158#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174159msgid "Featured"
175160msgstr "داڭلىق"
@@ -198,17 +183,21 @@ msgstr ""
198183msgid "Videos"
199184msgstr "سىنلار"
200185
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
186+#: Dash/Previews/Reviews.qml:74
187+msgid "Add a review"
203188msgstr ""
204189
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
190+#: Dash/Previews/Reviews.qml:86
191+msgid "Review"
207192msgstr ""
208193
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr "ئاپتور:"
194+#: Dash/Previews/Reviews.qml:121
195+msgid "Send"
196+msgstr "ئەۋەت"
197+
198+#: Dash/Previews/Reviews.qml:139
199+msgid "Comments:"
200+msgstr "ئىنكاس:"
212201
213202#: Greeter/Lockscreen.qml:142
214203msgid "Emergency Call"
@@ -217,7 +206,7 @@ msgstr ""
217206#: Greeter/PassphraseLockscreen.qml:59
218207#, qt-format
219208msgid "Hello %1"
220−msgstr ""
209+msgstr "سالام %1"
221210
222211#: Greeter/PassphraseLockscreen.qml:59
223212msgid "Hello"
@@ -247,15 +236,15 @@ msgstr "سۆزلەۋاتىسىز…"
247236msgid "Search"
248237msgstr "ئىزدە"
249238
250−#: plugins/Unity/scope.cpp:336
239+#: plugins/Unity/scope.cpp:361
251240msgid "Sorry, there is nothing that matches your search."
252241msgstr "كەچۈرۈڭ، ئىزدىگىنىڭىزگە ماس نەتىجە تېپىلمىدى."
253242
254243#: plugins/Unity/showallfilteroption.cpp:41
255244msgid "All"
256−msgstr ""
245+msgstr "ھەممىسى"
257246
258247#: Shell.qml:453
259248#, qt-format
260249msgid "Please enter %1"
261−msgstr ""
250+msgstr "%1 نى كىرگۈزۈڭ"
po/uk.po+24−34
@@ -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-07 10:49+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-08 07:01+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,26 +157,10 @@ 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
163−msgid "Add a review"
164−msgstr "Додати рецензію"
165−
166−#: Dash/Apps/AppReviews.qml:86
167−msgid "Review"
168−msgstr "Рецензія"
169−
170−#: Dash/Apps/AppReviews.qml:121
171−msgid "Send"
172−msgstr "Надіслати"
173−
174−#: Dash/Apps/AppReviews.qml:139
175−msgid "Comments:"
176−msgstr "Коментарі:"
177−
178164#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
179165msgid "Featured"
180166msgstr "Рекомендовані"
@@ -203,17 +189,21 @@ msgstr "Популярне у мережі"
203189msgid "Videos"
204190msgstr "Відео"
205191
206−#: Dash/Video/VideoPreview.qml:130
207−msgid "Directed by:"
208−msgstr "Режисер:"
192+#: Dash/Previews/Reviews.qml:74
193+msgid "Add a review"
194+msgstr "Додати рецензію"
195+
196+#: Dash/Previews/Reviews.qml:86
197+msgid "Review"
198+msgstr "Рецензія"
209199
210−#: Dash/Video/VideoPreview.qml:153
211−msgid "Starring:"
212−msgstr "Актори:"
200+#: Dash/Previews/Reviews.qml:121
201+msgid "Send"
202+msgstr "Надіслати"
213203
214−#: Dash/Video/VideoPreview.qml:176
215−msgid "Author:"
216−msgstr "Автор:"
204+#: Dash/Previews/Reviews.qml:139
205+msgid "Comments:"
206+msgstr "Коментарі:"
217207
218208#: Greeter/Lockscreen.qml:142
219209msgid "Emergency Call"
@@ -252,7 +242,7 @@ msgstr "Мовлення…"
252242msgid "Search"
253243msgstr "Пошук"
254244
255−#: plugins/Unity/scope.cpp:336
245+#: plugins/Unity/scope.cpp:361
256246msgid "Sorry, there is nothing that matches your search."
257247msgstr "Вибачте, для вказаних вами ключових слів нічого не знайдено."
258248
po/unity8.pot+3−31
@@ -8,7 +8,7 @@ msgid ""
88msgstr ""
99"Project-Id-Version: unity8\n"
1010"Report-Msgid-Bugs-To: \n"
11−"POT-Creation-Date: 2013-10-07 10:49+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"
@@ -156,34 +156,6 @@ msgstr[1] ""
156156msgid "Rate this"
157157msgstr ""
158158
159−#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
160−msgid "Featured"
161−msgstr ""
162−
163−#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
164−msgid "Recent"
165−msgstr ""
166−
167−#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
168−msgid "New Releases"
169−msgstr ""
170−
171−#: Dash/DashMusic.qml:30
172−msgid "Top Charting"
173−msgstr ""
174−
175−#: Dash/DashMusic.qml:91
176−msgid "Music"
177−msgstr ""
178−
179−#: Dash/DashVideos.qml:31
180−msgid "Popular Online"
181−msgstr ""
182−
183−#: Dash/DashVideos.qml:146
184−msgid "Videos"
185−msgstr ""
186−
187159#: Dash/Previews/Reviews.qml:74
188160msgid "Add a review"
189161msgstr ""
@@ -237,7 +209,7 @@ msgstr ""
237209msgid "Search"
238210msgstr ""
239211
240−#: plugins/Unity/scope.cpp:361
212+#: plugins/Unity/scope.cpp:398
241213msgid "Sorry, there is nothing that matches your search."
242214msgstr ""
243215
@@ -245,7 +217,7 @@ msgstr ""
245217msgid "All"
246218msgstr ""
247219
248−#: Shell.qml:453
220+#: Shell.qml:438
249221#, qt-format
250222msgid "Please enter %1"
251223msgstr ""
po/xh.po+21−31
@@ -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-07 10:49+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-08 07:01+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,44 +132,30 @@ 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
158−msgid "Add a review"
159−msgstr ""
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr ""
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr ""
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr ""
172−
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
175161msgstr ""
@@ -198,16 +184,20 @@ msgstr ""
198184msgid "Videos"
199185msgstr ""
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
203189msgstr ""
204190
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
207193msgstr ""
208194
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr ""
198+
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
211201msgstr ""
212202
213203#: Greeter/Lockscreen.qml:142
@@ -247,7 +237,7 @@ msgstr ""
247237msgid "Search"
248238msgstr ""
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr ""
253243
po/zh_CN.po+27−37
@@ -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-07 10:49+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-10 05:50+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,51 +132,37 @@ 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
158−msgid "Add a review"
159−msgstr ""
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr ""
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr ""
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr ""
172−
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
175161msgstr "推荐"
176162
177163#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178164msgid "Recent"
179−msgstr "最近"
165+msgstr "最近使用"
180166
181167#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182168msgid "New Releases"
@@ -198,17 +184,21 @@ msgstr "经常在线"
198184msgid "Videos"
199185msgstr "视频"
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
203−msgstr "导演:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
189+msgstr ""
190+
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
193+msgstr ""
204194
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
207−msgstr "主演:"
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr ""
208198
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
211−msgstr "作者:"
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
201+msgstr ""
212202
213203#: Greeter/Lockscreen.qml:142
214204msgid "Emergency Call"
@@ -247,7 +237,7 @@ msgstr "讲话中..."
247237msgid "Search"
248238msgstr "搜索"
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr "对不起,没有找到您想要的结果。"
253243
po/zh_TW.po+21−31
@@ -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-07 10:49+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-08 07:02+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,44 +132,30 @@ 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
158−msgid "Add a review"
159−msgstr ""
160−
161−#: Dash/Apps/AppReviews.qml:86
162−msgid "Review"
163−msgstr ""
164−
165−#: Dash/Apps/AppReviews.qml:121
166−msgid "Send"
167−msgstr ""
168−
169−#: Dash/Apps/AppReviews.qml:139
170−msgid "Comments:"
171−msgstr ""
172−
173159#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174160msgid "Featured"
175161msgstr ""
@@ -198,16 +184,20 @@ msgstr ""
198184msgid "Videos"
199185msgstr "影片"
200186
201−#: Dash/Video/VideoPreview.qml:130
202−msgid "Directed by:"
187+#: Dash/Previews/Reviews.qml:74
188+msgid "Add a review"
203189msgstr ""
204190
205−#: Dash/Video/VideoPreview.qml:153
206−msgid "Starring:"
191+#: Dash/Previews/Reviews.qml:86
192+msgid "Review"
207193msgstr ""
208194
209−#: Dash/Video/VideoPreview.qml:176
210−msgid "Author:"
195+#: Dash/Previews/Reviews.qml:121
196+msgid "Send"
197+msgstr ""
198+
199+#: Dash/Previews/Reviews.qml:139
200+msgid "Comments:"
211201msgstr ""
212202
213203#: Greeter/Lockscreen.qml:142
@@ -247,7 +237,7 @@ msgstr "說話中..."
247237msgid "Search"
248238msgstr "搜尋"
249239
250−#: plugins/Unity/scope.cpp:336
240+#: plugins/Unity/scope.cpp:361
251241msgid "Sorry, there is nothing that matches your search."
252242msgstr "很抱歉,找不到符合您想搜尋的結果。"
253243
tests/autopilot/unity8/shell/tests/__init__.py+17
@@ -87,6 +87,12 @@ class UnityTestCase(AutopilotTestCase):
8787 self._proxy = None
8888 self._lightdm_mock_type = None
8989 self._qml_mock_enabled = True
90+
91+ #### FIXME: This is a work around re: lp:1238417 ####
92+ from autopilot.input import _uinput
93+ _uinput._touch_device = _uinput.create_touch_device()
94+ ####
95+
9096 self.touch = Touch.create()
9197 self._setup_display_details()
9298
@@ -164,6 +170,17 @@ class UnityTestCase(AutopilotTestCase):
164170 if self._qml_mock_enabled:
165171 self._setup_extra_mock_environment_patch()
166172
173+ # FIXME: we shouldn't be doing this
174+ # $MIR_SOCKET, fallback to $XDG_RUNTIME_DIR/mir_socket and /tmp/mir_socket as last resort
175+ try:
176+ os.unlink(os.getenv('MIR_SOCKET', os.path.join(os.getenv('XDG_RUNTIME_DIR', "/tmp"), "mir_socket")))
177+ except OSError:
178+ pass
179+ try:
180+ os.unlink("/tmp/mir_socket")
181+ except OSError:
182+ pass
183+
167184 app_proxy = self.launch_test_application(
168185 binary_path,
169186 *self.unity_geometry_args,
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/fake_scope.cpp+26
@@ -30,6 +30,8 @@ static DeeModel* create_results_model(unsigned category_count, unsigned result_c
3030Scope::Scope(QObject* parent)
3131 : QObject(parent)
3232 , m_visible(false)
33+ , m_searching(false)
34+ , m_isActive(false)
3335 , m_categories(new Categories(this))
3436 , m_results(new DeeListModel(this))
3537{
@@ -44,6 +46,8 @@ Scope::Scope(QString const& id, QString const& name, bool visible, QObject* pare
4446 , m_id(id)
4547 , m_name(name)
4648 , m_visible(visible)
49+ , m_searching(false)
50+ , m_isActive(false)
4751 , m_categories(new Categories(this))
4852 , m_results(new DeeListModel(this))
4953{
@@ -85,6 +89,10 @@ bool Scope::connected() const {
8589 return true;
8690}
8791
92+bool Scope::searchInProgress() const {
93+ return m_searching;
94+}
95+
8896Categories* Scope::categories() const {
8997 return m_categories;
9098}
@@ -101,6 +109,10 @@ bool Scope::visible() const {
101109 return m_visible;
102110}
103111
112+bool Scope::isActive() const {
113+ return m_isActive;
114+}
115+
104116void Scope::setName(const QString &str) {
105117 if (str != m_name) {
106118 m_name = str;
@@ -122,6 +134,20 @@ void Scope::setFormFactor(const QString &str) {
122134 }
123135}
124136
137+void Scope::setActive(const bool active) {
138+ if (active != m_isActive) {
139+ m_isActive = active;
140+ Q_EMIT isActiveChanged();
141+ }
142+}
143+
144+void Scope::setSearchInProgress(const bool inProg) {
145+ if (inProg != m_searching) {
146+ m_searching = inProg;
147+ Q_EMIT searchInProgressChanged();
148+ }
149+}
150+
125151void Scope::setNoResultsHint(const QString& str) {
126152 if (str != m_noResultsHint) {
127153 m_noResultsHint = str;
tests/mocks/Unity/fake_scope.h+10−1
@@ -37,9 +37,11 @@ class Scope : public QObject
3737 Q_PROPERTY(bool connected READ connected NOTIFY connectedChanged)
3838 Q_PROPERTY(Categories* categories READ categories NOTIFY categoriesChanged)
3939
40+ Q_PROPERTY(bool searchInProgress READ searchInProgress WRITE setSearchInProgress NOTIFY searchInProgressChanged)
4041 Q_PROPERTY(QString searchQuery READ searchQuery WRITE setSearchQuery NOTIFY searchQueryChanged)
4142 Q_PROPERTY(QString noResultsHint READ noResultsHint WRITE setNoResultsHint NOTIFY noResultsHintChanged)
4243 Q_PROPERTY(QString formFactor READ formFactor WRITE setFormFactor NOTIFY formFactorChanged)
44+ Q_PROPERTY(bool isActive READ isActive WRITE setActive NOTIFY isActiveChanged)
4345
4446public:
4547 Scope(QObject* parent = 0);
@@ -54,16 +56,20 @@ public:
5456 bool visible() const;
5557 QString shortcut() const;
5658 bool connected() const;
59+ bool searchInProgress() const;
5760 Categories* categories() const;
5861 QString searchQuery() const;
5962 QString noResultsHint() const;
6063 QString formFactor() const;
64+ bool isActive() const;
6165
6266 /* setters */
6367 void setName(const QString& name);
6468 void setSearchQuery(const QString& search_query);
6569 void setNoResultsHint(const QString& hint);
6670 void setFormFactor(const QString& form_factor);
71+ void setActive(const bool);
72+ void setSearchInProgress(const bool inProg);
6773
6874 Q_INVOKABLE void activate(const QVariant &uri, const QVariant &icon_hint, const QVariant &category,
6975 const QVariant &result_type, const QVariant &mimetype, const QVariant &title,
@@ -78,14 +84,15 @@ Q_SIGNALS:
7884 void iconHintChanged(const QString&);
7985 void descriptionChanged(const QString&);
8086 void searchHintChanged(const QString&);
87+ void searchInProgressChanged();
8188 void visibleChanged(bool);
8289 void shortcutChanged(const QString&);
8390 void connectedChanged(bool);
8491 void categoriesChanged();
85− void searchFinished(const QString&);
8692 void searchQueryChanged();
8793 void noResultsHintChanged();
8894 void formFactorChanged();
95+ void isActiveChanged();
8996
9097 // signals triggered by activate(..) or preview(..) requests.
9198 void previewReady(Preview *preview);
@@ -103,6 +110,8 @@ protected:
103110 QString m_noResultsHint;
104111 QString m_formFactor;
105112 bool m_visible;
113+ bool m_searching;
114+ bool m_isActive;
106115
107116 Categories* m_categories;
108117 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+2−2
@@ -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,7 +43,7 @@ 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)
4848add_qml_test(Dash GenericPreview)
4949add_qml_test(Dash GenericScopeView IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
tests/qmltests/Components/tst_LazyImage.qml+40−15
@@ -73,6 +73,20 @@ Rectangle {
7373 height: units.gu(10)
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(10)
87+ width: units.gu(10)
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), placeholder: true},
131+ {tag: "Unbound Wide", image: lazy1, func: controls1.wide, transition: "readyTransition", width: 160, height: 80, imageWidth: 160, imageHeight: 80},
132+ {tag: "Unbound Square", image: lazy1, func: controls1.square, transition: "readyTransition", width: 160, height: 160, imageWidth: 160, imageHeight: 160},
133+ {tag: "Unbound Portrait", image: lazy1, func: controls1.portrait, transition: "readyTransition", width: 80, height: 160, imageWidth: 80, imageHeight: 160},
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), 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(10), imageHeight: 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)},
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)},
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)},
139+ {tag: "Width-bound Bad path", image: lazy2, func: controls2.badpath, transition: "genericTransition", width: units.gu(30), height: units.gu(10), imageWidth: units.gu(10), imageHeight: units.gu(10), placeholder: true, error: true},
140+ {tag: "Height-bound Blank", image: lazy3, func: controls3.blank, width: units.gu(10), height: units.gu(10), imageWidth: units.gu(10), imageHeight: units.gu(10), placeholder: true},
141+ {tag: "Height-bound Wide", image: lazy3, func: controls3.wide, transition: "readyTransition", width: units.gu(20), height: units.gu(10), imageWidth: units.gu(20), imageHeight: units.gu(10)},
142+ {tag: "Height-bound Square", image: lazy3, func: controls3.square, transition: "readyTransition", width: units.gu(10), height: units.gu(10), imageWidth: units.gu(10), imageHeight: units.gu(10)},
143+ {tag: "Height-bound Portrait", image: lazy3, func: controls3.portrait, transition: "readyTransition", width: units.gu(5), height: units.gu(10), imageWidth: units.gu(5), imageHeight: units.gu(10)},
144+ {tag: "Height-bound Bad path", image: lazy3, func: controls3.badpath, transition: "genericTransition", width: units.gu(10), height: units.gu(10), imageWidth: units.gu(10), imageHeight: units.gu(10), placeholder: true, error: true},
145+ {tag: "Fit Blank", image: lazy4, func: controls4.blank, width: units.gu(10), height: units.gu(10), imageWidth: units.gu(10), imageHeight: units.gu(10), placeholder: true},
146+ {tag: "Fit Wide", image: lazy4, func: controls4.wide, transition: "readyTransition", width: units.gu(10), height: units.gu(10), imageWidth: units.gu(10), imageHeight: units.gu(5)},
147+ {tag: "Fit Square", image: lazy4, func: controls4.square, transition: "readyTransition", width: units.gu(10), height: units.gu(10), imageWidth: units.gu(10), imageHeight: units.gu(10)},
148+ {tag: "Fit Portrait", image: lazy4, func: controls4.portrait, transition: "readyTransition", width: units.gu(10), height: units.gu(10), imageWidth: units.gu(5), imageHeight: units.gu(10)},
149+ {tag: "Fit Bad path", image: lazy4, func: controls4.badpath, transition: "genericTransition", width: units.gu(10), height: units.gu(10), imageWidth: units.gu(10), imageHeight: units.gu(10), placeholder: true, error: true},
130150 ]
131151 }
132152
@@ -144,6 +164,11 @@ Rectangle {
144164 compare(data.image.width, data.width);
145165 compare(data.image.height, data.height);
146166
167+ // check the shape dimensions
168+ var shape = findChild(data.image, "shape");
169+ compare(shape.width, data.imageWidth);
170+ compare(shape.height, data.imageHeight);
171+
147172 // check the placeholder
148173 var placeholder = findChild(data.image, "placeholder");
149174 compare(placeholder.visible, data.placeholder ? true : false);
tests/qmltests/Components/tst_PageHeader.qml+28
@@ -19,12 +19,17 @@ import QtTest 1.0
1919import ".."
2020import "../../../Components"
2121import Ubuntu.Components 0.1
22+import Unity 0.1
2223import Unity.Test 0.1 as UT
2324
2425Item {
2526 width: units.gu(110)
2627 height: units.gu(30)
2728
29+ Scope {
30+ id: scopeMock
31+ }
32+
2833 UT.UnityTestCase {
2934 name: "PageHeaderTest"
3035 when: windowShown
@@ -132,6 +137,27 @@ Item {
132137 compare(pageHeader.searchHistory.count, 3)
133138 compare(pageHeader.searchHistory.get(0).query, "humppa4")
134139 }
140+
141+ function test_search_indicator() {
142+ var searchIndicator = findChild(pageHeader, "searchIndicator")
143+ var primaryImage = findChild(pageHeader, "primaryImage")
144+
145+ pageHeader.triggerSearch()
146+
147+ scopeMock.searchInProgress = false
148+ compare(searchIndicator.running, false, "Search indicator is running.")
149+ tryCompare(primaryImage, "visible", true)
150+
151+ scopeMock.searchInProgress = true
152+ compare(searchIndicator.running, true, "Search indicator isn't running.")
153+ tryCompare(primaryImage, "visible", false)
154+
155+ pageHeader.resetSearch()
156+ }
157+
158+ function cleanup() {
159+ scopeMock.searchInProgress = false
160+ }
135161 }
136162
137163 Column {
@@ -145,6 +171,8 @@ Item {
145171 right: parent.right
146172 }
147173
174+ scope: scopeMock
175+
148176 searchEntryEnabled: true
149177 text: "%^$%^%^&%^&%^$%GHR%"
150178 }
tests/qmltests/Components/tst_Showable.qml+27
@@ -155,5 +155,32 @@ Item {
155155 show1.created = true;
156156 compare(show1.shown, true, "Showable should automatically show when created changes to true if attempted to show before.");
157157 }
158+
159+ // Test that showNow immediately shows showable
160+ function test_showNow() {
161+ init_test();
162+
163+ show1.opacity = 0.2;
164+
165+ show1.showNow();
166+ compare(show1.shown, true, "Showable should be shown after showNow");
167+ compare(show1.showAnimation.running, false, "Showable should be done running after showNow");
168+ compare(show1.opacity, 1.0, "Showable should be at end of animation after showNow");
169+ }
170+
171+ // Test the lazy showNow mechanism while waiting for the created flag.
172+ function test_showNow_when_not_created() {
173+ init_test();
174+
175+ show1.opacity = 0.2;
176+ show1.created = false;
177+
178+ show1.showNow();
179+ compare(show1.shown, false, "Showable should not showNow when created == false");
180+ show1.created = true;
181+ compare(show1.shown, true, "Showable should automatically show when created changes to true if attempted to showNow before.");
182+ compare(show1.showAnimation.running, false, "Showable should be done running after delayed showNow");
183+ compare(show1.opacity, 1.0, "Showable should be at end of animation after delayed showNow");
184+ }
158185 }
159186}
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_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/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}