on xenial help sign in
merged with trunk
106133cNick Dedekind
Bottombar/Bottombar.qml+81−16
@@ -34,15 +34,32 @@ Item {
34
34
35 state: "hidden"
35 state: "hidden"
36
36
37+ function hide() {
38+ dismissTimer.stop()
39+ bottombar.state = "hidden"
40+ }
41+
42+ onApplicationIsOnForegroundChanged: {
43+ if (!applicationIsOnForeground) {
44+ hide()
45+ }
46+ }
47+
37 onStateChanged: {
48 onStateChanged: {
38 if (state == "hidden") {
49 if (state == "hidden") {
39 dismissTimer.stop()
50 dismissTimer.stop()
51+ bottomBarVisibilityCommunicatorShell.forceHidden = false
40 } else {
52 } else {
41 dismissTimer.restart()
53 dismissTimer.restart()
42 }
54 }
43 }
55 }
44
56
45 onPreventHidingChanged: {
57 onPreventHidingChanged: {
58+ if (!preventHiding) {
59+ if (state == "hint" || state == "reveal")
60+ hide()
61+ }
62+
46 if (dismissTimer.running) {
63 if (dismissTimer.running) {
47 dismissTimer.restart();
64 dismissTimer.restart();
48 }
65 }
@@ -50,7 +67,7 @@ Item {
50
67
51 Timer {
68 Timer {
52 id: dismissTimer
69 id: dismissTimer
53− interval: 5000
70+ interval: 1000
54 onTriggered: {
71 onTriggered: {
55 if (!bottombar.preventHiding) {
72 if (!bottombar.preventHiding) {
56 bottombar.state = "hidden"
73 bottombar.state = "hidden"
@@ -103,24 +120,29 @@ Item {
103
120
104 EdgeDragArea {
121 EdgeDragArea {
105 id: dragArea
122 id: dragArea
123+ objectName: "hudDragArea"
106 width: parent.width
124 width: parent.width
107 height: distanceThreshold
125 height: distanceThreshold
108 anchors.bottom: parent.bottom
126 anchors.bottom: parent.bottom
109
127
110− distanceThreshold: units.gu(1)
128+ distanceThreshold: units.gu(8)
111 enabled: !theHud.shown && bottombar.enabled && applicationIsOnForeground
129 enabled: !theHud.shown && bottombar.enabled && applicationIsOnForeground
112 direction: Direction.Upwards
130 direction: Direction.Upwards
131+ maxSilenceTime: 2000
113
132
114 property int previousStatus: -1
133 property int previousStatus: -1
115 property real touchStartX: -1
134 property real touchStartX: -1
116
135
136+ readonly property real distanceFromThreshold: (-distance) - distanceThreshold // distance is negative
137+ readonly property real revealDistance: units.gu(2)
138+ readonly property real commitDistance: units.gu(6)
139+ readonly property real commitProgress: MathLocal.clamp(distanceFromThreshold / commitDistance, 0, 1)
140+
117 onStatusChanged: {
141 onStatusChanged: {
118 if (status === DirectionalDragArea.WaitingForTouch) {
142 if (status === DirectionalDragArea.WaitingForTouch) {
119 if (previousStatus == DirectionalDragArea.Recognized) {
143 if (previousStatus == DirectionalDragArea.Recognized) {
120 if (hudButton.mouseOver) {
144 if (hudButton.mouseOver) {
121 hudButton.clicked()
145 hudButton.clicked()
122− } else {
123− bottombar.state = "hidden"
124 }
146 }
125 }
147 }
126 } else if (status === DirectionalDragArea.Undecided) {
148 } else if (status === DirectionalDragArea.Undecided) {
@@ -128,35 +150,78 @@ Item {
128 touchStartX = touchX
150 touchStartX = touchX
129 }
151 }
130 } else if (status === DirectionalDragArea.Recognized) {
152 } else if (status === DirectionalDragArea.Recognized) {
131− bottombar.state = "shown"
153+ bottombar.state = "hint"
132 }
154 }
133 previousStatus = status
155 previousStatus = status
134 }
156 }
157+
158+ onDistanceChanged: {
159+ if (status === DirectionalDragArea.Recognized) {
160+ if (distanceFromThreshold > commitDistance)
161+ bottombar.state = "shown"
162+ else if (distanceFromThreshold > revealDistance)
163+ bottombar.state = "reveal"
164+ }
165+ }
166+ }
167+
168+ Item {
169+ id: dismissArea
170+ anchors {
171+ top: parent.top
172+ left: parent.left
173+ right: parent.right
174+ }
175+ height: parent.height - bottomBarVisibilityCommunicatorShell.position
176+
177+ MouseArea {
178+ anchors.fill: parent
179+ enabled: bottombar.state == "shown"
180+ onPressed: {
181+ bottomBarVisibilityCommunicatorShell.forceHidden = true
182+ bottombar.state = "hidden"
183+ }
184+ }
185+
186+ InputFilterArea {
187+ anchors.fill: parent
188+ blockInput: (hudButton.opacity == 1)
189+ }
135 }
190 }
136
191
137 MouseArea {
192 MouseArea {
138− anchors.fill: parent
193+ anchors {
194+ top: dismissArea.bottom
195+ left: parent.left
196+ right: parent.right
197+ bottom: parent.bottom
198+ }
139− enabled: bottombar.state == "shown"
199+ enabled: bottombar.state == "shown" && bottomBarVisibilityCommunicatorShell.position > 0
140 onPressed: {
200 onPressed: {
141 bottombar.state = "hidden"
201 bottombar.state = "hidden"
142 }
202 }
143 }
203 }
144
204
145− InputFilterArea {
146− anchors.fill: parent
147− blockInput: (hudButton.opacity == 1)
148− }
149−
150 states: [
205 states: [
151 State {
206 State {
152 name: "hidden"
207 name: "hidden"
153− PropertyChanges { target: hudButton; opacity: 0}
208+ PropertyChanges { target: hudButton; opacity: 0 }
154− PropertyChanges { target: hudButton; bottomMargin: units.gu(-1)}
209+ PropertyChanges { target: hudButton; bottomMargin: units.gu(-2) }
210+ },
211+ State {
212+ name: "hint"
213+ extend: "hidden"
214+ PropertyChanges { target: hudButton; opacity: 0.5 }
215+ },
216+ State {
217+ name: "reveal"
218+ extend: "hint"
219+ PropertyChanges { target: hudButton; bottomMargin: units.gu(-2) + units.gu(2) * dragArea.commitProgress }
155 },
220 },
156 State {
221 State {
157 name: "shown"
222 name: "shown"
158− PropertyChanges { target: hudButton; opacity: 1}
223+ PropertyChanges { target: hudButton; opacity: 1 }
159− PropertyChanges { target: hudButton; bottomMargin: units.gu(0)}
224+ PropertyChanges { target: hudButton; bottomMargin: units.gu(0) }
160 }
225 }
161 ]
226 ]
162}
227}
CMakeLists.txt−1
@@ -96,7 +96,6 @@ enable_testing()
96# Autopilot tests
96# Autopilot tests
97include(autopilot)
97include(autopilot)
98declare_autopilot_test(shell unity8.shell ${CMAKE_SOURCE_DIR}/tests/autopilot/)
98declare_autopilot_test(shell unity8.shell ${CMAKE_SOURCE_DIR}/tests/autopilot/)
99−declare_autopilot_test(indicators_client unity8.indicators_client ${CMAKE_SOURCE_DIR}/tests/autopilot/)
100
99
101set(SHELL_APP unity8)
100set(SHELL_APP unity8)
102
101
Components/CrossFadeImage.qmldeleted−151
@@ -1,151 +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−
19−Item {
20− property url source
21−
22− /*
23− * true: fade out old image in parallel with fading in the new one.
24− * false: fade in new image above old one.
25− *
26− * The reason why this is required is that crossfading has the isse that in
27− * the middle of the animation, both images are only 50% opaque which make
28− * any background shine through. Not wanted for background images etc, but
29− * wanted for overlays.
30− */
31− property bool crossFade: true
32−
33− /*
34− * true: the very first source url should be faded in already.
35− * false: the very first source url should just be shown without animation.
36− */
37− property bool fadeInFirst: true
38−
39− readonly property size sourceSize: __currentImage.sourceSize
40− readonly property var status: __currentImage ? __currentImage.status : Image.Null
41− readonly property bool running: crossFadeImages.running || nextImageFadeIn.running
42−
43− property Image __currentImage: image1
44− property Image __nextImage: image2
45−
46− function swapImages() {
47− __currentImage.z = 0
48− __nextImage.z = 1
49− if (crossFade) {
50− crossFadeImages.start();
51− } else {
52− nextImageFadeIn.start();
53− }
54−
55− var tmpImage = __currentImage
56− __currentImage = __nextImage
57− __nextImage = tmpImage
58− }
59−
60− onSourceChanged: {
61− // On creation, the souce handler is called before image pointers are set.
62− if (__currentImage === null) {
63− __currentImage = image1;
64− __nextImage = image2;
65− }
66−
67− crossFadeImages.stop();
68− nextImageFadeIn.stop();
69−
70− // Don't fade in initial picture, only fade changes
71− if (__currentImage.source == "" && !fadeInFirst) {
72− __currentImage.source = source;
73− } else {
74− nextImageFadeIn.stop();
75− __nextImage.opacity = 0.0;
76− __nextImage.source = source;
77−
78− // If case the image is still in QML's cache, status will be "Ready" immediately
79− if (__nextImage.status == Image.Ready || __nextImage.source == "") {
80− swapImages();
81− }
82− }
83− }
84−
85− Connections {
86− target: __nextImage
87− onStatusChanged: {
88− if (__nextImage.status == Image.Ready || __nextImage.status == Image.Error) {
89− swapImages();
90− }
91− }
92− }
93−
94− Image {
95− id: image1
96− anchors.fill: parent
97− cache: false
98− asynchronous: true
99− fillMode: Image.PreserveAspectCrop
100− z: 1
101− }
102−
103− Image {
104− id: image2
105− anchors.fill: parent
106− cache: false
107− asynchronous: true
108− fillMode: Image.PreserveAspectCrop
109− z: 0
110− }
111−
112− NumberAnimation {
113− id: nextImageFadeIn
114− target: __nextImage
115− property: "opacity"
116− duration: 400
117− to: 1.0
118− easing.type: Easing.InOutQuad
119−
120− onRunningChanged: {
121− if (!running) {
122− __nextImage.source = "";
123− }
124− }
125− }
126−
127− ParallelAnimation {
128− id: crossFadeImages
129− NumberAnimation {
130− target: __nextImage
131− property: "opacity"
132− duration: 400
133− to: 1.0
134− easing.type: Easing.InOutQuad
135− }
136−
137− NumberAnimation {
138− target: __currentImage
139− property: "opacity"
140− duration: 400
141− to: 0
142− easing.type: Easing.InOutQuad
143− }
144−
145− onRunningChanged: {
146− if (!running) {
147− __nextImage.source = "";
148− }
149− }
150− }
151−}
Components/EdgeDemo.qml+1−1
@@ -169,7 +169,7 @@ Item {
169 "edge": "bottom",
169 "edge": "bottom",
170 "title": i18n.tr("Close"),
170 "title": i18n.tr("Close"),
171 "text": i18n.tr("Swipe up again to close the settings screen"),
171 "text": i18n.tr("Swipe up again to close the settings screen"),
172− "anchors.fill": demo.indicators,
172+ "anchors.fill": demo.indicators.content,
173 });
173 });
174 }
174 }
175 if (d.bottomEdgeDemo) {
175 if (d.bottomEdgeDemo) {
Components/EdgeDemoOverlay.qml+12−2
@@ -121,7 +121,6 @@ Showable {
121
121
122 Column {
122 Column {
123 id: labelGroup
123 id: labelGroup
124− layer.enabled: true // otherwise the underlining on "Skip intro" jumps
125 spacing: units.gu(3)
124 spacing: units.gu(3)
126
125
127 anchors {
126 anchors {
@@ -150,10 +149,21 @@ Showable {
150 text: i18n.tr("Skip intro")
149 text: i18n.tr("Skip intro")
151 color: UbuntuColors.orange
150 color: UbuntuColors.orange
152 fontSize: "small"
151 fontSize: "small"
153− font.underline: true
152+
153+ Icon {
154+ anchors.left: parent.right
155+ anchors.verticalCenter: parent.verticalCenter
156+ height: units.dp(12)
157+ width: units.dp(12)
158+ name: "chevron"
159+ color: UbuntuColors.orange
160+ }
154
161
155 MouseArea {
162 MouseArea {
163+ // Make clickable area bigger than just the link because
164+ // otherwise, the edge demo will feel hard to dismiss.
156 anchors.fill: parent
165 anchors.fill: parent
166+ anchors.margins: -units.gu(5)
157 onClicked: overlay.doSkip()
167 onClicked: overlay.doSkip()
158 }
168 }
159 }
169 }
Components/LazyImage.qmlnew file+172
@@ -0,0 +1,172 @@
1+/*
2+ * Copyright (C) 2013 Canonical, Ltd.
3+ *
4+ * Authors:
5+ * Michał Sawicz <michal.sawicz@canonical.com>
6+ *
7+ * This program is free software; you can redistribute it and/or modify
8+ * it under the terms of the GNU General Public License as published by
9+ * the Free Software Foundation; version 3.
10+ *
11+ * This program is distributed in the hope that it will be useful,
12+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+ * GNU General Public License for more details.
15+ *
16+ * You should have received a copy of the GNU General Public License
17+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
18+ */
19+
20+import QtQuick 2.0
21+import Ubuntu.Components 0.1
22+
23+Item {
24+ id: root
25+
26+ property url source
27+ // TODO convert into enums when available in QML
28+ property string scaleTo
29+
30+ property real initialWidth: units.gu(10)
31+ property real initialHeight: units.gu(10)
32+
33+ property alias sourceSize: image.sourceSize
34+ property alias fillMode: image.fillMode
35+ property alias asynchronous: image.asynchronous
36+ property alias cache: image.cache
37+ property alias horizontalAlignment: image.horizontalAlignment
38+ property alias verticalAlignment: image.verticalAlignment
39+
40+ state: "default"
41+
42+ onSourceChanged: {
43+ if (state === "ready") {
44+ state = "default";
45+ image.nextSource = source;
46+ } else {
47+ image.source = source;
48+ }
49+ }
50+
51+ UbuntuShape {
52+ id: placeholder
53+ objectName: "placeholder"
54+ color: "#22FFFFFF"
55+ anchors.fill: parent
56+ visible: opacity != 0
57+
58+ ActivityIndicator {
59+ id: activity
60+ anchors.centerIn: parent
61+ opacity: 0
62+ visible: opacity != 0
63+
64+ running: visible
65+ }
66+
67+ Image {
68+ id: errorImage
69+ objectName: "errorImage"
70+ anchors.centerIn: parent
71+ opacity: 0
72+ visible: opacity != 0
73+
74+ source: "graphics/close.png"
75+ sourceSize { width: units.gu(3); height: units.gu(3) }
76+ }
77+ }
78+
79+ UbuntuShape {
80+ id: shape
81+ objectName: "shape"
82+ anchors.fill: parent
83+ opacity: 0
84+ visible: opacity != 0
85+
86+ image: Image {
87+ id: image
88+ objectName: "image"
89+
90+ property url nextSource
91+
92+ width: root.scaleTo == "height" ? implicitWidth * root.height / implicitHeight : implicitWidth
93+ height: root.scaleTo == "width" ? implicitHeight * root.width / implicitWidth : implicitHeight
94+ fillMode: Image.PreserveAspectCrop
95+ asynchronous: true
96+ cache: false
97+ horizontalAlignment: Image.AlignHCenter
98+ verticalAlignment: Image.AlignVCenter
99+ sourceSize.width: root.scaleTo == "width" ? root.width : 0
100+ sourceSize.height: root.scaleTo == "height" ? root.height : 0
101+ }
102+ }
103+
104+ states: [
105+ State {
106+ name: "default"
107+ when: image.source == ""
108+ PropertyChanges { target: root; implicitWidth: root.initialWidth; implicitHeight: root.initialHeight }
109+ PropertyChanges { target: errorImage; opacity: 0 }
110+ },
111+ State {
112+ name: "loading"
113+ extend: "default"
114+ when: image.status === Image.Loading
115+ PropertyChanges { target: activity; opacity: 1 }
116+ },
117+ State {
118+ name: "ready"
119+ when: image.status === Image.Ready && image.source != ""
120+ PropertyChanges { target: root; implicitWidth: image.width; implicitHeight: image.height }
121+ PropertyChanges { target: shape; opacity: 1 }
122+ PropertyChanges { target: placeholder; opacity: 0 }
123+ },
124+ State {
125+ name: "error"
126+ extend: "default"
127+ when: image.status === Image.Error
128+ PropertyChanges { target: errorImage; opacity: 1.0 }
129+ }
130+ ]
131+
132+ transitions: [
133+ Transition {
134+ to: "ready"
135+ objectName: "readyTransition"
136+ SequentialAnimation {
137+ PropertyAction { target: shape; property: "visible" }
138+ ParallelAnimation {
139+ NumberAnimation { target: shape; property: "opacity"; easing.type: Easing.Linear }
140+ UbuntuNumberAnimation { target: root; properties: "implicitWidth,implicitHeight" }
141+ NumberAnimation {
142+ targets: [placeholder, activity, errorImage]; property: "opacity";
143+ easing.type: Easing.Linear; duration: UbuntuAnimation.SnapDuration
144+ }
145+ }
146+ }
147+ },
148+
149+ Transition {
150+ to: "*"
151+ objectName: "genericTransition"
152+ SequentialAnimation {
153+ ParallelAnimation {
154+ NumberAnimation { target: shape; property: "opacity"; easing.type: Easing.Linear }
155+ NumberAnimation {
156+ targets: [placeholder, activity, errorImage]; property: "opacity";
157+ easing.type: Easing.Linear; duration: UbuntuAnimation.SnapDuration
158+ }
159+ UbuntuNumberAnimation { target: root; properties: "implicitWidth,implicitHeight" }
160+ }
161+ PropertyAction { target: shape; property: "visible" }
162+ }
163+
164+ onRunningChanged: {
165+ if (!running && state === "default" && image.nextSource !== "") {
166+ image.source = image.nextSource;
167+ image.nextSource = "";
168+ }
169+ }
170+ }
171+ ]
172+}
Components/PageHeader.qml+44−1
@@ -18,6 +18,7 @@ import QtQuick 2.0
18import Ubuntu.Components 0.1
18import Ubuntu.Components 0.1
19import Ubuntu.Components.Popups 0.1
19import Ubuntu.Components.Popups 0.1
20import Ubuntu.Components.ListItems 0.1 as ListItem
20import Ubuntu.Components.ListItems 0.1 as ListItem
21+import Unity 0.1
21
22
22Item {
23Item {
23 /*!
24 /*!
@@ -30,6 +31,7 @@ Item {
30 property bool searchEntryEnabled: false
31 property bool searchEntryEnabled: false
31 property alias searchQuery: searchField.text
32 property alias searchQuery: searchField.text
32 property ListModel searchHistory: SearchHistoryModel {}
33 property ListModel searchHistory: SearchHistoryModel {}
34+ property Scope scope
33
35
34 height: units.gu(8.5)
36 height: units.gu(8.5)
35 implicitHeight: units.gu(8.5)
37 implicitHeight: units.gu(8.5)
@@ -148,7 +150,7 @@ Item {
148 hasClearButton: false
150 hasClearButton: false
149
151
150 primaryItem: AbstractButton {
152 primaryItem: AbstractButton {
151− enabled: searchField.text != ""
153+ enabled: searchField.text != "" && !searchIndicator.running
152 onClicked: {
154 onClicked: {
153 if (searchField.text != "") {
155 if (searchField.text != "") {
154 searchHistory.addQuery(searchField.text)
156 searchHistory.addQuery(searchField.text)
@@ -158,8 +160,22 @@ Item {
158 height: parent.height
160 height: parent.height
159 width: height
161 width: height
160
162
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+
161 Image {
176 Image {
162 id: primaryImage
177 id: primaryImage
178+ objectName: "primaryImage"
163 anchors {
179 anchors {
164 verticalCenter: parent.verticalCenter
180 verticalCenter: parent.verticalCenter
165 left: parent.left
181 left: parent.left
@@ -167,6 +183,7 @@ Item {
167 }
183 }
168 width: units.gu(3)
184 width: units.gu(3)
169 height: units.gu(3)
185 height: units.gu(3)
186+ visible: opacity > 0
170 }
187 }
171
188
172 Item {
189 Item {
@@ -185,6 +202,32 @@ Item {
185 onActiveFocusChanged: {
202 onActiveFocusChanged: {
186 if (!activeFocus) searchContainer.closePopover()
203 if (!activeFocus) searchContainer.closePopover()
187 }
204 }
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+ ]
188 }
231 }
189
232
190 states: [
233 states: [
Greeter/PinPadButton.qml → Components/PinPadButton.qmlrenamed

The content is the same.

Components/ResponsiveGridView.qml+1−1
@@ -67,7 +67,7 @@ Item {
67
67
68 function columnsForSpacing(spacing) {
68 function columnsForSpacing(spacing) {
69 // minimum margin is half of the spacing
69 // minimum margin is half of the spacing
70− return Math.floor((parent.width - spacing/2) / (delegateWidth + spacing));
70+ return Math.max(1, Math.floor((parent.width - spacing/2) / (delegateWidth + spacing)));
71 }
71 }
72
72
73 property real allocatableHorizontalSpace: parent.width - columns * delegateWidth
73 property real allocatableHorizontalSpace: parent.width - columns * delegateWidth
Components/Showable.qml+11
@@ -30,6 +30,7 @@ Item {
30 property bool created: true
30 property bool created: true
31 property bool required
31 property bool required
32 property bool __shouldShow: false
32 property bool __shouldShow: false
33+ property bool __skipShowAnimation: false
33
34
34 property list<QtObject> hides
35 property list<QtObject> hides
35 property var showAnimation
36 property var showAnimation
@@ -58,6 +59,11 @@ Item {
58 }
59 }
59 }
60 }
60
61
62+ function showNow() {
63+ __skipShowAnimation = true;
64+ show();
65+ }
66+
61 onCreatedChanged: {
67 onCreatedChanged: {
62 if (created && __shouldShow) {
68 if (created && __shouldShow) {
63 __reallyShow();
69 __reallyShow();
@@ -67,6 +73,7 @@ Item {
67
73
68 function __reallyShow() {
74 function __reallyShow() {
69 if (!available) {
75 if (!available) {
76+ __skipShowAnimation = false;
70 return false;
77 return false;
71 }
78 }
72
79
@@ -80,11 +87,15 @@ Item {
80 if (!showAnimation.running) {
87 if (!showAnimation.running) {
81 showAnimation.restart()
88 showAnimation.restart()
82 }
89 }
90+ if (__skipShowAnimation) {
91+ showAnimation.complete();
92+ }
83 } else {
93 } else {
84 visible = true;
94 visible = true;
85 }
95 }
86
96
87 shown = true;
97 shown = true;
98+ __skipShowAnimation = false;
88 return true;
99 return true;
89 }
100 }
90
101
Components/Stage.qml+4−1
@@ -97,7 +97,9 @@ Showable {
97 if (shouldUseScreenshots) {
97 if (shouldUseScreenshots) {
98 stage.__focusApplicationUsingScreenshots(stage.focusedApplication);
98 stage.__focusApplicationUsingScreenshots(stage.focusedApplication);
99 } else {
99 } else {
100+ if (stage.focusedApplicationWhenUsingScreenshots) {
100− stage.__focusActualApplication(stage.focusedApplicationWhenUsingScreenshots);
101+ stage.__focusActualApplication(stage.focusedApplicationWhenUsingScreenshots);
102+ }
101 }
103 }
102 }
104 }
103
105
@@ -244,6 +246,7 @@ Showable {
244 */
246 */
245 delayedHideScreenshots.start();
247 delayedHideScreenshots.start();
246 } else {
248 } else {
249+ stage.focusedApplicationWhenUsingScreenshots = null;
247 stage.__hideScreenshots();
250 stage.__hideScreenshots();
248 }
251 }
249 }
252 }
Components/VolumeControl.qml+5−20
@@ -21,37 +21,22 @@ Item {
21 id: root
21 id: root
22 objectName: "volumeControl"
22 objectName: "volumeControl"
23 visible: false
23 visible: false
24− property int volume
25
24
26 QDBusActionGroup {
25 QDBusActionGroup {
27 id: actionGroup
26 id: actionGroup
28 busType: 1
27 busType: 1
29− busName: "com.canonical.settings.sound"
28+ busName: "com.canonical.indicator.sound"
30− objectPath: "/com/canonical/settings/sound"
29+ objectPath: "/com/canonical/indicator/sound"
31
30
32− property variant actionObject: action("volume")
31+ property variant actionObject: action("scroll")
33− property variant serverVolume: actionObject.valid ? actionObject.state: 0
34− }
35−
36− Binding {
37− target: root
38− property: "volume"
39− value: actionGroup.serverVolume * 100
40− }
41−
42− onVolumeChanged: {
43− if (actionGroup.serverVolume != volume) {
44− var targetVolume = Math.min(1, Math.max(0, volume / 100));
45− actionGroup.actionObject.updateState(targetVolume);
46− }
47 }
32 }
48
33
49 function volumeUp() {
34 function volumeUp() {
50− actionGroup.actionObject.updateState(Math.min(1, volume/100 + 0.10));
35+ actionGroup.actionObject.activate(1);
51 }
36 }
52
37
53 function volumeDown() {
38 function volumeDown() {
54− actionGroup.actionObject.updateState(Math.max(0, volume/100 - 0.10));
39+ actionGroup.actionObject.activate(-1);
55 }
40 }
56
41
57 Component.onCompleted: actionGroup.start()
42 Component.onCompleted: actionGroup.start()
Components/graphics/close@20.pngnew file

Binary file not shown.

Dash/Apps/AppPreview.qml+11
@@ -110,6 +110,10 @@ DashPreview {
110 onFinished: {
110 onFinished: {
111 root.previewData.execute(progressBar.model[0].id, { })
111 root.previewData.execute(progressBar.model[0].id, { })
112 }
112 }
113+
114+ onError: {
115+ root.previewData.execute(progressBar.model[1].id, { "error": error });
116+ }
113 }
117 }
114
118
115 }
119 }
@@ -187,12 +191,19 @@ DashPreview {
187 ListItem.ThinDivider { }
191 ListItem.ThinDivider { }
188
192
189 AppReviews {
193 AppReviews {
194+ id: appReviews
190 objectName: "appReviews"
195 objectName: "appReviews"
196+ // TODO: This should make this visible when the feature for reviews/comments is complete.
197+ visible: false
191 anchors { left: parent.left; right: parent.right }
198 anchors { left: parent.left; right: parent.right }
192
199
193 model: root.previewData.infoMap["comments"] ? root.previewData.infoMap["comments"].value : undefined
200 model: root.previewData.infoMap["comments"] ? root.previewData.infoMap["comments"].value : undefined
194
201
195 onSendReview: root.sendUserReview(review);
202 onSendReview: root.sendUserReview(review);
203+
204+ onEditing: {
205+ root.ensureVisible(appReviews.textArea);
206+ }
196 }
207 }
197 }
208 }
198 }
209 }
Dash/Apps/AppReviews.qml+3
@@ -23,8 +23,10 @@ Column {
23 id: root
23 id: root
24
24
25 property var model
25 property var model
26+ property alias textArea: reviewField
26
27
27 signal sendReview(string review)
28 signal sendReview(string review)
29+ signal editing
28
30
29 spacing: units.gu(2)
31 spacing: units.gu(2)
30 state: ""
32 state: ""
@@ -93,6 +95,7 @@ Column {
93 if(reviewField.focus){
95 if(reviewField.focus){
94 root.state = "editing";
96 root.state = "editing";
95 reviewField.selectAll();
97 reviewField.selectAll();
98+ root.editing();
96 }
99 }
97 }
100 }
98
101
Dash/Apps/RunningApplicationsGrid.qml+20−1
@@ -22,6 +22,8 @@ ResponsiveFlowView {
22 clip: true
22 clip: true
23
23
24 signal updateScreenshots
24 signal updateScreenshots
25+ property alias enableHeightBehavior: heightBehaviour.enabled
26+ property bool enableHeightBehaviorOnNextCreation: firstModel.count + secondModel.count == 0
25
27
26 Connections {
28 Connections {
27 target: shell
29 target: shell
@@ -29,7 +31,24 @@ ResponsiveFlowView {
29 onStageScreenshotsReadyChanged: if (shell.dashShown && shell.stageScreenshotsReady) updateScreenshots();
31 onStageScreenshotsReadyChanged: if (shell.dashShown && shell.stageScreenshotsReady) updateScreenshots();
30 }
32 }
31
33
34+ Behavior on height {
35+ id: heightBehaviour
36+ enabled: false
32− Behavior on height { NumberAnimation { duration: 200; easing.type: Easing.InOutQuad } }
37+ NumberAnimation { duration: 200; easing.type: Easing.InOutQuad }
38+ }
39+
40+ Connections {
41+ target: root.firstModel
42+ onCountChanged: {
43+ heightBehaviour.enabled = true;
44+ }
45+ }
46+ Connections {
47+ target: root.secondModel
48+ onCountChanged: {
49+ heightBehaviour.enabled = true;
50+ }
51+ }
33
52
34 property bool canEnableTerminationMode: true
53 property bool canEnableTerminationMode: true
35
54
Dash/DashApps.qml+2
@@ -24,6 +24,7 @@ import "Apps"
24
24
25GenericScopeView {
25GenericScopeView {
26 id: scopeView
26 id: scopeView
27+ objectName: "DashApps"
27
28
28 // FIXME: a way to aggregate these models would be ideal
29 // FIXME: a way to aggregate these models would be ideal
29 property var mainStageApplicationsModel: shell.applicationManager.mainStageApplications
30 property var mainStageApplicationsModel: shell.applicationManager.mainStageApplications
@@ -51,5 +52,6 @@ GenericScopeView {
51
52
52 onScopeChanged: {
53 onScopeChanged: {
53 scopeView.scope.categories.overrideResults("recent", runningApplicationsModel);
54 scopeView.scope.categories.overrideResults("recent", runningApplicationsModel);
55+ enableHeightBehaviorOnNextCreation = (mainStageApplicationsModel.count + sideStageApplicationModel.count == 0)
54 }
56 }
55}
57}
Dash/DashContent.qml+1
@@ -114,6 +114,7 @@ Item {
114 height: ListView.view.height
114 height: ListView.view.height
115 asynchronous: true
115 asynchronous: true
116 source: scopeMapper.map(scope.id)
116 source: scopeMapper.map(scope.id)
117+ objectName: scope.id + " loader"
117
118
118 // these are needed for autopilot tests
119 // these are needed for autopilot tests
119 readonly property string scopeId: scope.id
120 readonly property string scopeId: scope.id
Dash/DashPreview.qml+13
@@ -20,6 +20,7 @@ import Ubuntu.Components 0.1
20Rectangle {
20Rectangle {
21 id: root
21 id: root
22
22
23+ property int keyboardSize: Qt.inputMethod.visible ? Qt.inputMethod.keyboardRectangle.height : 0
23 property var previewData
24 property var previewData
24
25
25 property string title: ""
26 property string title: ""
@@ -38,6 +39,14 @@ Rectangle {
38 color: Qt.rgba(0, 0, 0, .3)
39 color: Qt.rgba(0, 0, 0, .3)
39 clip: true
40 clip: true
40
41
42+ function ensureVisible(item) {
43+ var o = leftFlickable.mapFromItem(item, 0, 0, item.width, item.height);
44+ var keyboardY = shell.height - root.keyboardSize;
45+ if ((o.y + o.height) > keyboardY) {
46+ leftFlickable.contentY += o.y + o.height - keyboardY;
47+ }
48+ }
49+
41 Connections {
50 Connections {
42 target: shell.applicationManager
51 target: shell.applicationManager
43 onMainStageFocusedApplicationChanged: {
52 onMainStageFocusedApplicationChanged: {
@@ -128,12 +137,16 @@ Rectangle {
128
137
129 Flickable {
138 Flickable {
130 id: leftFlickable
139 id: leftFlickable
140+ objectName: "leftFlickable"
131 anchors.top: parent.top
141 anchors.top: parent.top
132 anchors.bottom: parent.bottom
142 anchors.bottom: parent.bottom
133 width: root.narrowMode ? contentRow.width : contentRow.width * root.previewWidthRatio
143 width: root.narrowMode ? contentRow.width : contentRow.width * root.previewWidthRatio
134 contentHeight: leftColumn.height
144 contentHeight: leftColumn.height
145+ anchors.bottomMargin: root.keyboardSize
135 clip: true
146 clip: true
136
147
148+ Behavior on contentY { NumberAnimation { duration: 300 } }
149+
137 Column {
150 Column {
138 id: leftColumn
151 id: leftColumn
139 objectName: "leftColumn"
152 objectName: "leftColumn"
Dash/GenericScopeView.qml+47−11
@@ -21,20 +21,30 @@ import "../Components/ListItems" as ListItems
21
21
22ScopeView {
22ScopeView {
23 id: scopeView
23 id: scopeView
24− property alias previewShown: previewLoader.onScreen
24+ readonly property alias previewShown: previewLoader.onScreen
25+ property bool enableHeightBehaviorOnNextCreation: false
25
26
26 onIsCurrentChanged: {
27 onIsCurrentChanged: {
27 pageHeader.resetSearch();
28 pageHeader.resetSearch();
29+ previewLoader.open = false;
28 }
30 }
29
31
30 onMovementStarted: categoryView.showHeader()
32 onMovementStarted: categoryView.showHeader()
31
33
34+ onPositionedAtBeginning: categoryView.positionAtBeginning()
35+
32 Binding {
36 Binding {
33 target: scopeView.scope
37 target: scopeView.scope
34 property: "searchQuery"
38 property: "searchQuery"
35 value: pageHeader.searchQuery
39 value: pageHeader.searchQuery
36 }
40 }
37
41
42+ Binding {
43+ target: pageHeader
44+ property: "searchQuery"
45+ value: scopeView.scope.searchQuery
46+ }
47+
38 Connections {
48 Connections {
39 target: panel
49 target: panel
40 onSearchClicked: if (isCurrent) {
50 onSearchClicked: if (isCurrent) {
@@ -43,8 +53,15 @@ ScopeView {
43 }
53 }
44 }
54 }
45
55
56+ Connections {
57+ target: scopeView.scope
58+ onShowDash: previewLoader.open = false;
59+ onHideDash: previewLoader.open = false;
60+ }
61+
46 ScopeListView {
62 ScopeListView {
47 id: categoryView
63 id: categoryView
64+ objectName: "categoryListView"
48 anchors.fill: parent
65 anchors.fill: parent
49 model: scopeView.categories
66 model: scopeView.categories
50 forceNoClip: previewLoader.onScreen
67 forceNoClip: previewLoader.onScreen
@@ -52,13 +69,14 @@ ScopeView {
52 onAtYEndChanged: if (atYEnd) endReached()
69 onAtYEndChanged: if (atYEnd) endReached()
53 onMovingChanged: if (moving && atYEnd) endReached()
70 onMovingChanged: if (moving && atYEnd) endReached()
54
71
55− property int expandedIndex: -1
72+ property string expandedCategoryId: ""
56
73
57 delegate: ListItems.Base {
74 delegate: ListItems.Base {
58 highlightWhenPressed: false
75 highlightWhenPressed: false
59
76
60 readonly property bool expandable: rendererLoader.item ? rendererLoader.item.expandable : false
77 readonly property bool expandable: rendererLoader.item ? rendererLoader.item.expandable : false
61 readonly property bool filtered: rendererLoader.item ? rendererLoader.item.filter : true
78 readonly property bool filtered: rendererLoader.item ? rendererLoader.item.filter : true
79+ readonly property string category: categoryId
62
80
63 Loader {
81 Loader {
64 id: rendererLoader
82 id: rendererLoader
@@ -68,9 +86,13 @@ ScopeView {
68 right: parent.right
86 right: parent.right
69 }
87 }
70
88
71− source: getRenderer(model.renderer, model.contentType)
89+ source: getRenderer(model.renderer, model.contentType, model.rendererHint)
72
90
73 onLoaded: {
91 onLoaded: {
92+ if (item.enableHeightBehavior !== undefined && item.enableHeightBehaviorOnNextCreation !== undefined) {
93+ item.enableHeightBehavior = scopeView.enableHeightBehaviorOnNextCreation;
94+ scopeView.enableHeightBehaviorOnNextCreation = false;
95+ }
74 if (source.toString().indexOf("Apps/RunningApplicationsGrid.qml") != -1) {
96 if (source.toString().indexOf("Apps/RunningApplicationsGrid.qml") != -1) {
75 // TODO: the running apps grid doesn't support standard scope results model yet
97 // TODO: the running apps grid doesn't support standard scope results model yet
76 item.firstModel = Qt.binding(function() { return results.firstModel })
98 item.firstModel = Qt.binding(function() { return results.firstModel })
@@ -80,13 +102,19 @@ ScopeView {
80 }
102 }
81 item.objectName = Qt.binding(function() { return categoryId })
103 item.objectName = Qt.binding(function() { return categoryId })
82 if (item.expandable) {
104 if (item.expandable) {
83− var shouldFilter = index != categoryView.expandedIndex;
105+ var shouldFilter = categoryId != categoryView.expandedCategoryId;
84 if (shouldFilter != item.filter) {
106 if (shouldFilter != item.filter) {
85 item.filter = shouldFilter;
107 item.filter = shouldFilter;
86 }
108 }
87 }
109 }
88 }
110 }
89
111
112+ Component.onDestruction: {
113+ if (item.enableHeightBehavior !== undefined && item.enableHeightBehaviorOnNextCreation !== undefined) {
114+ scopeView.enableHeightBehaviorOnNextCreation = item.enableHeightBehaviorOnNextCreation;
115+ }
116+ }
117+
90 Connections {
118 Connections {
91 target: rendererLoader.item
119 target: rendererLoader.item
92 onClicked: {
120 onClicked: {
@@ -116,10 +144,10 @@ ScopeView {
116 }
144 }
117 Connections {
145 Connections {
118 target: categoryView
146 target: categoryView
119− onExpandedIndexChanged: {
147+ onExpandedCategoryIdChanged: {
120 var item = rendererLoader.item;
148 var item = rendererLoader.item;
121 if (item.expandable) {
149 if (item.expandable) {
122− var shouldFilter = index != categoryView.expandedIndex;
150+ var shouldFilter = categoryId != categoryView.expandedCategoryId;
123 if (shouldFilter != item.filter) {
151 if (shouldFilter != item.filter) {
124 // If the filter animation will be seen start it, otherwise, just flip the switch
152 // If the filter animation will be seen start it, otherwise, just flip the switch
125 var shrinkingVisible = shouldFilter && y + item.collapsedHeight < categoryView.height;
153 var shrinkingVisible = shouldFilter && y + item.collapsedHeight < categoryView.height;
@@ -150,10 +178,10 @@ ScopeView {
150 return "";
178 return "";
151 }
179 }
152 onClicked: {
180 onClicked: {
153− if (categoryView.expandedIndex != delegateIndex)
181+ if (categoryView.expandedCategoryId != delegate.category)
154− categoryView.expandedIndex = delegateIndex;
182+ categoryView.expandedCategoryId = delegate.category;
155 else
183 else
156− categoryView.expandedIndex = -1;
184+ categoryView.expandedCategoryId = "";
157 }
185 }
158 }
186 }
159 pageHeader: PageHeader {
187 pageHeader: PageHeader {
@@ -162,6 +190,7 @@ ScopeView {
162 width: categoryView.width
190 width: categoryView.width
163 text: scopeView.scope.name
191 text: scopeView.scope.name
164 searchEntryEnabled: true
192 searchEntryEnabled: true
193+ scope: scopeView.scope
165 }
194 }
166 }
195 }
167
196
@@ -171,7 +200,7 @@ ScopeView {
171 }
200 }
172 }
201 }
173
202
174− function getRenderer(rendererId, contentType) {
203+ function getRenderer(rendererId, contentType, rendererHint) {
175 if (rendererId == "default") {
204 if (rendererId == "default") {
176 rendererId = getDefaultRendererId(contentType);
205 rendererId = getDefaultRendererId(contentType);
177 }
206 }
@@ -179,10 +208,16 @@ ScopeView {
179 case "grid": {
208 case "grid": {
180 switch (contentType) {
209 switch (contentType) {
181 case "video": return "Generic/GenericFilterGridPotrait.qml";
210 case "video": return "Generic/GenericFilterGridPotrait.qml";
211+ case "music": return "Music/MusicFilterGrid.qml";
182 default: return "Generic/GenericFilterGrid.qml";
212 default: return "Generic/GenericFilterGrid.qml";
183 }
213 }
184 }
214 }
215+ case "carousel": {
216+ switch (contentType) {
217+ case "music": return "Music/MusicCarousel.qml";
185− case "carousel": return "Generic/GenericCarousel.qml";
218+ default: return "Generic/GenericCarousel.qml";
219+ }
220+ }
186 case "special": {
221 case "special": {
187 switch (contentType) {
222 switch (contentType) {
188 case "apps": return "Apps/RunningApplicationsGrid.qml";
223 case "apps": return "Apps/RunningApplicationsGrid.qml";
@@ -246,6 +281,7 @@ ScopeView {
246 }
281 }
247
282
248 Loader {
283 Loader {
284+ objectName: "previewLoader"
249 id: previewLoader
285 id: previewLoader
250 property var previewData
286 property var previewData
251 height: effect.bottomGapPx - effect.topGapPx
287 height: effect.bottomGapPx - effect.topGapPx
Dash/Music/MusicFilterGrid.qml+12−2
@@ -29,19 +29,29 @@ FilterGrid {
29 readonly property int iconWidth: (width / columns) * 0.8
29 readonly property int iconWidth: (width / columns) * 0.8
30 readonly property int iconHeight: iconWidth
30 readonly property int iconHeight: iconWidth
31
31
32− signal clicked(int index)
32+ signal clicked(int index, var delegateItem, real itemY)
33+ signal pressAndHold(int index, var delegateItem, real itemY)
33
34
34 delegate: AlbumTile {
35 delegate: AlbumTile {
36+ id: tile
35 objectName: "delegate" + index
37 objectName: "delegate" + index
36 width: filterGrid.cellWidth
38 width: filterGrid.cellWidth
37 height: filterGrid.cellHeight
39 height: filterGrid.cellHeight
38 iconWidth: filterGrid.iconWidth
40 iconWidth: filterGrid.iconWidth
39 iconHeight: filterGrid.iconHeight
41 iconHeight: filterGrid.iconHeight
42+
40 artist: model.title
43 artist: model.title
41 album: model.comment
44 album: model.comment
42 source: model.icon
45 source: model.icon
46+
43 onClicked: {
47 onClicked: {
48+ var data = { model: model }
44− filterGrid.clicked(index);
49+ filterGrid.clicked(index, data, tile.y)
50+ }
51+
52+ onPressAndHold: {
53+ var data = { model: model }
54+ filterGrid.pressAndHold(index, data, tile.y)
45 }
55 }
46 }
56 }
47}
57}
Greeter/Gradient.js+7−3
@@ -15,8 +15,12 @@
15 */
15 */
16
16
17function threeColorByIndex(index, total, colors) {
17function threeColorByIndex(index, total, colors) {
18− var red, green, blue
18+ var red, green, blue;
19+ var p = 0.0;
20+
21+ if(total > 0) {
19− var p = index / total
22+ p = index / total;
23+ }
20
24
21 if (p < 0.5) {
25 if (p < 0.5) {
22 red = (colors.main.r * p * 2.0) + colors.start.r * (0.5 - p) * 2.0;
26 red = (colors.main.r * p * 2.0) + colors.start.r * (0.5 - p) * 2.0;
@@ -28,5 +32,5 @@ function threeColorByIndex(index, total, colors) {
28 blue = colors.end.b * (p - 0.5) * 2.0 + colors.main.b * (1.0 - p) * 2.0;
32 blue = colors.end.b * (p - 0.5) * 2.0 + colors.main.b * (1.0 - p) * 2.0;
29 }
33 }
30
34
31− return Qt.rgba(red, green, blue, 1)
35+ return Qt.rgba(red, green, blue, 1);
32}
36}
Greeter/GreeterContent.qml+12−8
@@ -47,7 +47,7 @@ MouseArea {
47 id: wallpaper
47 id: wallpaper
48 objectName: "wallpaper"
48 objectName: "wallpaper"
49 anchors.fill: parent
49 anchors.fill: parent
50− fadeInFirst: false
50+ fillMode: Image.PreserveAspectCrop
51 }
51 }
52
52
53 // See Shell.qml's backgroundSettings treatment for why we need a separate
53 // See Shell.qml's backgroundSettings treatment for why we need a separate
@@ -135,19 +135,23 @@ MouseArea {
135
135
136 Infographics {
136 Infographics {
137 id: infographics
137 id: infographics
138+ objectName: "infographics"
138 height: narrowMode ? parent.height : 0.75 * parent.height
139 height: narrowMode ? parent.height : 0.75 * parent.height
139 model: greeterContentLoader.infographicModel
140 model: greeterContentLoader.infographicModel
140
141
141− Component.onCompleted: infographics.updateUsername(greeterContentLoader.currentIndex)
142+ property string selectedUser
143+ property string infographicUser: AccountsService.statsWelcomeScreen ? selectedUser : ""
144+ onInfographicUserChanged: greeterContentLoader.infographicModel.username = infographicUser
142
145
143− Connections {
146+ Component.onCompleted: {
144− target: root
147+ selectedUser = greeterContentLoader.model.data(greeterContentLoader.currentIndex, LightDM.UserRoles.NameRole)
145− onSelected: infographics.updateUsername(uid)
148+ greeterContentLoader.infographicModel.username = infographicUser
149+ greeterContentLoader.infographicModel.readyForDataChange()
146 }
150 }
147
151
148− function updateUsername(uid) {
152+ Connections {
153+ target: root
149− greeterContentLoader.infographicModel.username = greeterContentLoader.model.data(uid, LightDM.UserRoles.NameRole)
154+ onSelected: infographics.selectedUser = greeterContentLoader.model.data(uid, LightDM.UserRoles.NameRole)
150− greeterContentLoader.infographicModel.readyForDataChangeSlot();
151 }
155 }
152
156
153 anchors {
157 anchors {
Greeter/Infographics.qml+10−1
@@ -29,21 +29,30 @@ Item {
29 Connections {
29 Connections {
30 target: model
30 target: model
31
31
32+ onDataAboutToAppear: startHideAnimation() // hide "no data" label
32 onDataAppeared: startShowAnimation()
33 onDataAppeared: startShowAnimation()
33
34
34 onDataAboutToChange: startHideAnimation()
35 onDataAboutToChange: startHideAnimation()
35−
36 onDataChanged: startShowAnimation()
36 onDataChanged: startShowAnimation()
37
37
38 onDataAboutToDisappear: startHideAnimation()
38 onDataAboutToDisappear: startHideAnimation()
39+ onDataDisappeared: startShowAnimation() // show "no data" label
39 }
40 }
40
41
41 function startShowAnimation() {
42 function startShowAnimation() {
43+ dotHideAnimTimer.stop()
44+ circleShrinkAnimTimer.stop()
45+ notification.hideAnim.stop()
46+
42 dotShowAnimTimer.startFromBeginning()
47 dotShowAnimTimer.startFromBeginning()
43 notification.showAnim.start()
48 notification.showAnim.start()
44 }
49 }
45
50
46 function startHideAnimation() {
51 function startHideAnimation() {
52+ dotShowAnimTimer.stop()
53+ circleGrowAnimTimer.stop()
54+ notification.showAnim.stop()
55+
47 dotHideAnimTimer.startFromBeginning()
56 dotHideAnimTimer.startFromBeginning()
48 notification.hideAnim.start()
57 notification.hideAnim.start()
49 }
58 }
MouseTouchAdaptor.cpp+29−12
@@ -39,24 +39,16 @@ Qt::MouseButton translateMouseButton(xcb_button_t detail)
39} // end of anonymous namespace
39} // end of anonymous namespace
40
40
41MouseTouchAdaptor::MouseTouchAdaptor()
41MouseTouchAdaptor::MouseTouchAdaptor()
42− : m_targetWindow(0)
43− , m_leftButtonIsPressed(false)
42+ : m_leftButtonIsPressed(false)
44{
43{
45 m_touchDevice = new QTouchDevice;
44 m_touchDevice = new QTouchDevice;
46 m_touchDevice->setType(QTouchDevice::TouchScreen);
45 m_touchDevice->setType(QTouchDevice::TouchScreen);
47 QWindowSystemInterface::registerTouchDevice(m_touchDevice);
46 QWindowSystemInterface::registerTouchDevice(m_touchDevice);
48}
47}
49
48
50−void MouseTouchAdaptor::setTargetWindow(QWindow *window)
51−{
52− m_targetWindow = window;
53−}
54−
55bool MouseTouchAdaptor::nativeEventFilter(const QByteArray & eventType,
49bool MouseTouchAdaptor::nativeEventFilter(const QByteArray & eventType,
56 void * message, long * /*result*/)
50 void * message, long * /*result*/)
57{
51{
58− Q_ASSERT(m_targetWindow);
59−
60 if (eventType != "xcb_generic_event_t") {
52 if (eventType != "xcb_generic_event_t") {
61 // wrong backend.
53 // wrong backend.
62 qWarning("MouseTouchAdaptor: XCB backend not in use. Adaptor inoperative!");
54 qWarning("MouseTouchAdaptor: XCB backend not in use. Adaptor inoperative!");
@@ -91,7 +83,9 @@ bool MouseTouchAdaptor::handleButtonPress(xcb_button_press_event_t *pressEvent)
91
83
92 QPoint windowPos(pressEvent->event_x, pressEvent->event_y);
84 QPoint windowPos(pressEvent->event_x, pressEvent->event_y);
93
85
86+ QWindow *targetWindow = findQWindowWithXWindowID(static_cast<WId>(pressEvent->event));
87+
94− QTouchEventSequence touchEvent = QTest::touchEvent(m_targetWindow, m_touchDevice,
88+ QTouchEventSequence touchEvent = QTest::touchEvent(targetWindow, m_touchDevice,
95 false /* autoCommit */);
89 false /* autoCommit */);
96 touchEvent.press(0 /* touchId */, windowPos);
90 touchEvent.press(0 /* touchId */, windowPos);
97 touchEvent.commit(false /* processEvents */);
91 touchEvent.commit(false /* processEvents */);
@@ -110,7 +104,9 @@ bool MouseTouchAdaptor::handleButtonRelease(xcb_button_release_event_t *releaseE
110
104
111 QPoint windowPos(releaseEvent->event_x, releaseEvent->event_y);
105 QPoint windowPos(releaseEvent->event_x, releaseEvent->event_y);
112
106
107+ QWindow *targetWindow = findQWindowWithXWindowID(static_cast<WId>(releaseEvent->event));
108+
113− QTouchEventSequence touchEvent = QTest::touchEvent(m_targetWindow, m_touchDevice,
109+ QTouchEventSequence touchEvent = QTest::touchEvent(targetWindow, m_touchDevice,
114 false /* autoCommit */);
110 false /* autoCommit */);
115 touchEvent.release(0 /* touchId */, windowPos);
111 touchEvent.release(0 /* touchId */, windowPos);
116 touchEvent.commit(false /* processEvents */);
112 touchEvent.commit(false /* processEvents */);
@@ -127,10 +123,31 @@ bool MouseTouchAdaptor::handleMotionNotify(xcb_motion_notify_event_t *event)
127
123
128 QPoint windowPos(event->event_x, event->event_y);
124 QPoint windowPos(event->event_x, event->event_y);
129
125
126+ QWindow *targetWindow = findQWindowWithXWindowID(static_cast<WId>(event->event));
127+
130− QTouchEventSequence touchEvent = QTest::touchEvent(m_targetWindow, m_touchDevice,
128+ QTouchEventSequence touchEvent = QTest::touchEvent(targetWindow, m_touchDevice,
131 false /* autoCommit */);
129 false /* autoCommit */);
132 touchEvent.move(0 /* touchId */, windowPos);
130 touchEvent.move(0 /* touchId */, windowPos);
133 touchEvent.commit(false /* processEvents */);
131 touchEvent.commit(false /* processEvents */);
134
132
135 return true;
133 return true;
136}
134}
135+
136+QWindow *MouseTouchAdaptor::findQWindowWithXWindowID(WId windowId)
137+{
138+ QWindowList windowList = QGuiApplication::topLevelWindows();
139+ QWindow *foundWindow = nullptr;
140+
141+ int i = 0;
142+ while (!foundWindow && i < windowList.count()) {
143+ QWindow *window = windowList[i];
144+ if (window->winId() == windowId) {
145+ foundWindow = window;
146+ } else {
147+ ++i;
148+ }
149+ }
150+
151+ Q_ASSERT(foundWindow);
152+ return foundWindow;
153+}
MouseTouchAdaptor.h+2−5
@@ -20,11 +20,11 @@
20#define MOUSE_TOUCH_ADAPTOR_H
20#define MOUSE_TOUCH_ADAPTOR_H
21
21
22#include <QtCore/QAbstractNativeEventFilter>
22#include <QtCore/QAbstractNativeEventFilter>
23+#include <QWindow>
23#include <xcb/xcb.h>
24#include <xcb/xcb.h>
24
25
25class QMouseEvent;
26class QMouseEvent;
26class QTouchDevice;
27class QTouchDevice;
27−class QWindow;
28
28
29// Transforms QMouseEvents into single-finger QTouchEvents.
29// Transforms QMouseEvents into single-finger QTouchEvents.
30class MouseTouchAdaptor : public QAbstractNativeEventFilter {
30class MouseTouchAdaptor : public QAbstractNativeEventFilter {
@@ -32,9 +32,6 @@ class MouseTouchAdaptor : public QAbstractNativeEventFilter {
32public:
32public:
33 MouseTouchAdaptor();
33 MouseTouchAdaptor();
34
34
35− // The window that will receive the generated QTouchEvents
36− void setTargetWindow(QWindow *window);
37−
38 // Filters mouse events and posts the equivalent QTouchEvents.
35 // Filters mouse events and posts the equivalent QTouchEvents.
39 virtual bool nativeEventFilter(const QByteArray & eventType, void *message, long *result);
36 virtual bool nativeEventFilter(const QByteArray & eventType, void *message, long *result);
40
37
@@ -43,8 +40,8 @@ private:
43 bool handleButtonPress(xcb_button_press_event_t *pressEvent);
40 bool handleButtonPress(xcb_button_press_event_t *pressEvent);
44 bool handleButtonRelease(xcb_button_release_event_t *releaseEvent);
41 bool handleButtonRelease(xcb_button_release_event_t *releaseEvent);
45 bool handleMotionNotify(xcb_motion_notify_event_t *event);
42 bool handleMotionNotify(xcb_motion_notify_event_t *event);
43+ QWindow *findQWindowWithXWindowID(WId windowId);
46
44
47− QWindow *m_targetWindow;
48 QTouchDevice *m_touchDevice;
45 QTouchDevice *m_touchDevice;
49 bool m_leftButtonIsPressed;
46 bool m_leftButtonIsPressed;
50};
47};
Notifications/Notification.qml+42−1
@@ -17,6 +17,8 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import Ubuntu.Components 0.1
18import Ubuntu.Components 0.1
19import Unity.Notifications 1.0
19import Unity.Notifications 1.0
20+import QMenuModel 0.1
21+import Utils 0.1
20
22
21UbuntuShape {
23UbuntuShape {
22 id: notification
24 id: notification
@@ -38,6 +40,24 @@ UbuntuShape {
38
40
39 clip: true
41 clip: true
40
42
43+ UnityMenuModelPaths {
44+ id: paths
45+
46+ source: hints["x-canonical-private-menu-model"]
47+
48+ busNameHint: "busName"
49+ actionsHint: "actions"
50+ menuObjectPathHint: "menuPath"
51+ }
52+
53+ UnityMenuModel {
54+ id: unityMenuModel
55+
56+ busName: paths.busName
57+ actions: paths.actions
58+ menuObjectPath: paths.menuObjectPath
59+ }
60+
41 Behavior on implicitHeight {
61 Behavior on implicitHeight {
42 id: heightBehavior
62 id: heightBehavior
43
63
@@ -141,6 +161,27 @@ UbuntuShape {
141 }
161 }
142 }
162 }
143
163
164+ Column {
165+ objectName: "dialogListView"
166+ spacing: units.gu(2)
167+
168+ visible: count > 0
169+
170+ anchors.left: parent.left; anchors.right: parent.right
171+
172+ Repeater {
173+ model: unityMenuModel
174+
175+ NotificationMenuItemFactory {
176+ anchors.left: parent.left; anchors.right: parent.right
177+
178+ menuModel: unityMenuModel
179+ menuData: model
180+ menuIndex: index
181+ }
182+ }
183+ }
184+
144 Item {
185 Item {
145 id: buttonRow
186 id: buttonRow
146
187
@@ -195,7 +236,7 @@ UbuntuShape {
195 top: parent.top
236 top: parent.top
196 bottom: parent.bottom
237 bottom: parent.bottom
197 }
238 }
198− gradient: notification.hints == Notification.ButtonTint ? UbuntuColors.orangeGradient : UbuntuColors.greyGradient
239+ gradient: notification.hints["x-canonical-private-button-tint"] == "true" ? UbuntuColors.orangeGradient : UbuntuColors.greyGradient
199 visible: width > 0
240 visible: width > 0
200 onClicked: notification.notification.invokeAction(actionRepeater.itemAt(0).actionId)
241 onClicked: notification.notification.invokeAction(actionRepeater.itemAt(0).actionId)
201 }
242 }
Notifications/NotificationMenuItemFactory.qmlnew file+97
@@ -0,0 +1,97 @@
1+/*
2+ * Copyright 2013 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU Lesser General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ * Authors:
17+ * Nick Dedekind <nick.dedekind@canonical.com>
18+ */
19+
20+import QtQuick 2.0
21+import Ubuntu.Components 0.1
22+import "../Components"
23+import "../Greeter"
24+
25+Loader {
26+ id: menuFactory
27+
28+ property QtObject menuModel: null
29+ property QtObject menuData: null
30+ property int menuIndex
31+ property var notification
32+
33+ property var _map: {
34+ "com.canonical.snapdecision.textfield": textfield,
35+ "com.canonical.snapdecision.pinlock" : pinLock,
36+ }
37+
38+ sourceComponent: {
39+ if (menuData.type !== undefined) {
40+ var component = _map[menuData.type];
41+ if (component !== undefined) {
42+ return component;
43+ }
44+ } else {
45+ if (menuData.isSeparator) {
46+ return divMenu;
47+ }
48+ }
49+ return standardMenu;
50+ }
51+
52+ Component {
53+ id: textfield
54+
55+ Column {
56+ spacing: units.gu(.5)
57+
58+ anchors.left: parent.left; anchors.right: parent.right
59+
60+ Component.onCompleted: {
61+ menuModel.loadExtendedAttributes(menuIndex, {"x-echo-mode-password": "bool"});
62+ textfield.echoMode = menuData.ext.xEchoModePassword ? TextInput.Password : TextInput.Normal
63+ }
64+
65+ Label {
66+ fontSize: "medium"
67+ color: "white"
68+ text: menuData.label
69+ }
70+
71+ TextField {
72+ id: textfield
73+
74+ anchors.left: parent.left; anchors.right: parent.right
75+
76+ onTextChanged: {
77+ menuModel.changeState(menuIndex, text);
78+ }
79+ }
80+ }
81+ }
82+
83+ Component {
84+ id: pinLock
85+ PinLockscreen {
86+ anchors.left: parent.left; anchors.right: parent.right
87+
88+ onEntered: {
89+ menuModel.changeState(menuIndex, passphrase);
90+ }
91+
92+ onCancel: {
93+ menuModel.activate(menuIndex, false);
94+ }
95+ }
96+ }
97+}
Panel/Indicators.qml+5−1
@@ -17,6 +17,7 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import Ubuntu.Components 0.1
18import Ubuntu.Components 0.1
19import Ubuntu.Gestures 0.1
19import Ubuntu.Gestures 0.1
20+import Unity.Indicators 0.1 as Indicators
20
21
21import "../Components"
22import "../Components"
22import "../Components/ListItems"
23import "../Components/ListItems"
@@ -36,6 +37,7 @@ Showable {
36 property real visualBottom: Math.max(y+height, y+indicatorRow.y+indicatorRow.height)
37 property real visualBottom: Math.max(y+height, y+indicatorRow.y+indicatorRow.height)
37 property bool contentEnabled: true
38 property bool contentEnabled: true
38 property bool initalizeItem: true
39 property bool initalizeItem: true
40+ readonly property alias content: menuContent
39
41
40 // TODO: Perhaps we need a animation standard for showing/hiding? Each showable seems to
42 // TODO: Perhaps we need a animation standard for showing/hiding? Each showable seems to
41 // use its own values. Need to ask design about this.
43 // use its own values. Need to ask design about this.
@@ -249,8 +251,10 @@ Showable {
249 anchors.fill: indicatorRow
251 anchors.fill: indicatorRow
250 }
252 }
251
253
252− IndicatorsDataModel {
254+ Indicators.IndicatorsModel {
253 id: indicatorsModel
255 id: indicatorsModel
256+
257+ Component.onCompleted: load()
254 }
258 }
255
259
256 IndicatorRow {
260 IndicatorRow {
Panel/Indicators/DatetimeIndicatorPage.qmldeleted−97
@@ -1,97 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− * Ubo Riboni <ugo.riboni@canonical.com>
19− */
20−
21−import QtQuick 2.0
22−import Ubuntu.Components 0.1
23−
24−Flickable {
25− id: page
26−
27− contentHeight: image.height
28−
29− Image {
30− id: image
31− anchors {
32− left: parent.left
33− right: parent.right
34− }
35− source: "../graphics/time_and_date@18.png"
36− fillMode: Image.PreserveAspectFit
37− }
38−
39− Item {
40− anchors {
41− top: parent.top
42− topMargin: units.gu(5)
43− left: parent.left
44− right: parent.right
45− }
46−
47− height: units.gu(30)
48−
49− Label {
50− id: timeLabel
51− anchors {
52− horizontalCenter: parent.horizontalCenter
53− verticalCenter: parent.verticalCenter
54− }
55−
56− text: ""
57− color: Theme.palette.selected.backgroundText
58− font.weight: Font.Light
59− font.pixelSize: units.gu(6)
60− }
61−
62− Label {
63− id: dateLabel
64−
65− anchors {
66− left: parent.left
67− leftMargin: units.gu(2)
68− bottom: parent.bottom
69− bottomMargin: units.gu(1.5)
70− }
71− text: ""
72− color: Theme.palette.selected.backgroundText
73− fontSize: "small"
74− }
75− }
76−
77− Timer {
78− interval: 1000 * 10 // 10 seconds
79− running: true
80− repeat: true
81− triggeredOnStart: true
82− onTriggered: updateTime();
83− }
84−
85− function updateTime() {
86− var dt = new Date();
87− var time = Qt.formatTime(dt);
88− var space = time.indexOf(" ");
89− timeLabel.text = time.substr(0, space > 0 ? space : 5);
90− dateLabel.text = Qt.formatDateTime(dt, "dddd,\ndd MMMM");
91− }
92−
93− // Make it compatible with the PluginItem interface
94− function start() {}
95− function stop() {}
96− function reset() {}
97−}
Panel/Indicators/DatetimeIndicatorWidget.qmldeleted−67
@@ -1,67 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU Lesser General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Nick Dedekind <nick.dedekind@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Ubuntu.Components 0.1
22−import Unity.IndicatorsLegacy 0.1 as Indicators
23−
24−Indicators.IndicatorWidget {
25− id: indicatorWidget
26−
27− width: timeLabel.width + units.gu(1)
28− rootMenuType: "com.canonical.indicator.root.time"
29−
30− property alias label: timeLabel.text
31−
32− Label {
33− id: timeLabel
34− objectName: "timeLabel"
35− color: Theme.palette.selected.backgroundText
36− opacity: 0.8
37− font.family: "Ubuntu"
38− fontSize: "medium"
39− anchors.centerIn: parent
40− text: Qt.formatTime(timer.dateNow)
41− }
42−
43− Timer {
44− id: timer
45− interval: 1000 * 10
46− running: indicatorWidget.visible
47− repeat: true
48− triggeredOnStart: true
49− property date dateNow
50−
51− onTriggered: dateNow = new Date
52− }
53−
54− onActionStateChanged: {
55− if (action == undefined || !action.valid) {
56− enabled = false;
57− return;
58− }
59−
60− if (action.state == undefined) {
61− enabled = false;
62− return;
63− }
64−
65− enabled = action.state[3];
66− }
67−}
Panel/Indicators/DefaultIndicatorPage.qml+1−1
@@ -18,7 +18,7 @@
18 */
18 */
19
19
20import QtQuick 2.0
20import QtQuick 2.0
21−import Unity.IndicatorsLegacy 0.1 as Indicators
21+import Unity.Indicators 0.1 as Indicators
22
22
23Indicators.IndicatorPage {
23Indicators.IndicatorPage {
24 anchors.fill: parent
24 anchors.fill: parent
Panel/Indicators/DefaultIndicatorPage2.qmldeleted−25
@@ -1,25 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU Lesser General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Nick Dedekind <nick.dedekind@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Unity.Indicators 0.1 as Indicators
22−
23−Indicators.IndicatorPage {
24− anchors.fill: parent
25−}
Panel/Indicators/DefaultIndicatorWidget.qml+47−21
@@ -19,16 +19,16 @@
19
19
20import QtQuick 2.0
20import QtQuick 2.0
21import Ubuntu.Components 0.1
21import Ubuntu.Components 0.1
22−import Unity.IndicatorsLegacy 0.1 as Indicators
22+import Unity.Indicators 0.1 as Indicators
23
23
24Indicators.IndicatorWidget {
24Indicators.IndicatorWidget {
25 id: indicatorWidget
25 id: indicatorWidget
26
26
27− enabled:true
28 width: itemRow.width + units.gu(0.5)
27 width: itemRow.width + units.gu(0.5)
29
28
30− property alias label: itemLabel.text
29+ property alias leftLabel: itemLeftLabel.text
31− property alias iconSource: itemImage.source
30+ property alias rightLabel: itemRightLabel.text
31+ property var icons: undefined
32
32
33 Row {
33 Row {
34 id: itemRow
34 id: itemRow
@@ -40,19 +40,43 @@ Indicators.IndicatorWidget {
40 }
40 }
41 spacing: units.gu(0.5)
41 spacing: units.gu(0.5)
42
42
43− // FIXME : Should us Ubuntu.Icon . results in low res images
43+ Label {
44− Image {
44+ id: itemLeftLabel
45− id: itemImage
46− objectName: "itemImage"
45+ objectName: "leftLabel"
47− visible: source != ""
46+ color: Theme.palette.selected.backgroundText
48− height: indicatorWidget.iconSize
47+ opacity: 0.8
49− width: indicatorWidget.iconSize
48+ font.family: "Ubuntu"
49+ fontSize: "medium"
50 anchors.verticalCenter: parent.verticalCenter
50 anchors.verticalCenter: parent.verticalCenter
51+ visible: text != ""
52+ }
53+
54+ Row {
55+ width: childrenRect.width
56+ anchors {
57+ top: parent.top
58+ bottom: parent.bottom
59+ }
60+ spacing: units.gu(0.5)
61+
62+ Repeater {
63+ model: indicatorWidget.icons
64+
65+ Image {
66+ id: itemImage
67+ objectName: "itemImage"
68+ visible: source != ""
69+ source: modelData
70+ height: indicatorWidget.iconSize
71+ width: indicatorWidget.iconSize
72+ anchors.verticalCenter: parent.verticalCenter
73+ }
74+ }
51 }
75 }
52
76
53 Label {
77 Label {
54− id: itemLabel
78+ id: itemRightLabel
55− objectName: "itemLabel"
79+ objectName: "rightLabel"
56 color: Theme.palette.selected.backgroundText
80 color: Theme.palette.selected.backgroundText
57 opacity: 0.8
81 opacity: 0.8
58 font.family: "Ubuntu"
82 font.family: "Ubuntu"
@@ -62,16 +86,18 @@ Indicators.IndicatorWidget {
62 }
86 }
63 }
87 }
64
88
65− onActionStateChanged: {
89+ onRootActionStateChanged: {
66− if (action == undefined || !action.valid) {
90+ if (rootActionState == undefined) {
67− return;
91+ leftLabel = "";
68− }
92+ rightLabel = "";
69−
93+ icons = undefined;
70− if (action.state == undefined) {
94+ enabled = false;
71 return;
95 return;
72 }
96 }
73
97
74− label = action.state[Indicators.ActionState.Label];
98+ leftLabel = rootActionState.leftLabel ? rootActionState.leftLabel : "";
75− iconSource = "image://theme/" + action.state[Indicators.ActionState.IconSource];
99+ rightLabel = rootActionState.rightLabel ? rootActionState.rightLabel : "";
100+ icons = rootActionState.icons;
101+ enabled = rootActionState.visible;
76 }
102 }
77}
103}
Panel/Indicators/DefaultIndicatorWidget2.qmldeleted−103
@@ -1,103 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU Lesser General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Nick Dedekind <nick.dedekind@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Ubuntu.Components 0.1
22−import Unity.Indicators 0.1 as Indicators
23−
24−Indicators.IndicatorWidget {
25− id: indicatorWidget
26−
27− width: itemRow.width + units.gu(0.5)
28−
29− property alias leftLabel: itemLeftLabel.text
30− property alias rightLabel: itemRightLabel.text
31− property var icons: undefined
32−
33− Row {
34− id: itemRow
35− objectName: "itemRow"
36− anchors {
37− top: parent.top
38− bottom: parent.bottom
39− horizontalCenter: parent.horizontalCenter
40− }
41− spacing: units.gu(0.5)
42−
43− Label {
44− id: itemLeftLabel
45− objectName: "leftLabel"
46− color: Theme.palette.selected.backgroundText
47− opacity: 0.8
48− font.family: "Ubuntu"
49− fontSize: "medium"
50− anchors.verticalCenter: parent.verticalCenter
51− visible: text != ""
52− }
53−
54− Row {
55− width: childrenRect.width
56− anchors {
57− top: parent.top
58− bottom: parent.bottom
59− }
60− spacing: units.gu(0.5)
61−
62− Repeater {
63− model: indicatorWidget.icons
64−
65− Image {
66− id: itemImage
67− objectName: "itemImage"
68− visible: source != ""
69− source: modelData
70− height: indicatorWidget.iconSize
71− width: indicatorWidget.iconSize
72− anchors.verticalCenter: parent.verticalCenter
73− }
74− }
75− }
76−
77− Label {
78− id: itemRightLabel
79− objectName: "rightLabel"
80− color: Theme.palette.selected.backgroundText
81− opacity: 0.8
82− font.family: "Ubuntu"
83− fontSize: "medium"
84− anchors.verticalCenter: parent.verticalCenter
85− visible: text != ""
86− }
87− }
88−
89− onActionStateChanged: {
90− if (actionState == undefined) {
91− leftLabel = "";
92− rightLabel = "";
93− icons = undefined;
94− enabled = false;
95− return;
96− }
97−
98− leftLabel = actionState.leftLabel ? actionState.leftLabel : "";
99− rightLabel = actionState.rightLabel ? actionState.rightLabel : "";
100− icons = actionState.icons;
101− enabled = actionState.visible;
102− }
103−}
Panel/Indicators/MessagingIndicatorPage.qmldeleted−35
@@ -1,35 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU Lesser General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Nick Dedekind <nick.dedekind@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Ubuntu.Components 0.1
22−import Unity.IndicatorsLegacy 0.1 as Indicators
23−
24−Indicators.IndicatorPage {
25− anchors.fill: parent
26−
27− highlightFollowsCurrentItem: false
28− emptyText: "You have no more outstanding messages."
29−
30− function stop() {
31− // never stops the service
32− // this will keep all objects in memory, consume more memory
33− // but will optimize the menu contruction on the screen
34− }
35−}
Panel/Indicators/MessagingIndicatorWidget.qmldeleted−25
@@ -1,25 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU Lesser General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Nick Dedekind <nick.dedekind@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−
22−DefaultIndicatorWidget {
23− // default the icon so we have something to show when we don't have the bus.
24− iconSource: "image://theme/indicator-messages"
25−}
Panel/Indicators/NetworkIndicatorPage.qmldeleted−83
@@ -1,83 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Unity.IndicatorsLegacy 0.1 as Indicators
22−import Unity.IndicatorsLegacy.Network 0.1 as ICNetwork
23−import Ubuntu.Components 0.1
24−
25−PageStack {
26− id: networkPage
27− // Stops the search for a parent tree node.
28− // We don't want it going up to the indicator tabs.
29− // FIXME: need a better way of doing this.
30− // https://bugs.launchpad.net/ubuntu-ui-toolkit/+bug/1211704
31− __propagated: null
32−
33− property alias title: _mainPage.title
34− property alias emptyText: pluginItem.emptyText
35− property alias busType: pluginItem.busType
36− property alias busName: pluginItem.busName
37− property alias actionsObjectPath : pluginItem.actionsObjectPath
38− property alias menuObjectPaths : pluginItem.menuObjectPaths
39−
40− anchors.fill: parent
41−
42− Page {
43− id: _mainPage
44−
45− Indicators.IndicatorPage {
46− id: pluginItem
47− anchors.fill: parent
48− }
49− }
50−
51− Component {
52− id: passwordPageComponent
53−
54− ICNetwork.PasswordPage {
55− agent: networkAgent
56− }
57− }
58−
59− ICNetwork.NetworkAgent {
60− id: networkAgent
61−
62− onSecretRequested: {
63− networkPage.push(passwordPageComponent, {"token": token});
64− }
65− }
66−
67− function start()
68− {
69− push(_mainPage);
70− pluginItem.start();
71− }
72−
73− function stop()
74− {
75− clear();
76− pluginItem.stop();
77− }
78−
79− function reset()
80− {
81− pluginItem.reset();
82− }
83−}
Panel/Indicators/NetworkIndicatorPage2.qmldeleted−82
@@ -1,82 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Unity.Indicators 0.1 as Indicators
22−import Unity.Indicators.Network 0.1 as ICNetwork
23−import Ubuntu.Components 0.1
24−
25−PageStack {
26− id: networkPage
27− // Stops the search for a parent tree node.
28− // We don't want it going up to the indicator tabs.
29− // FIXME: need a better way of doing this.
30− // https://bugs.launchpad.net/ubuntu-ui-toolkit/+bug/1211704
31− __propagated: null
32−
33− property alias title: _mainPage.title
34− property alias emptyText: pluginItem.emptyText
35− property alias busName: pluginItem.busName
36− property alias actionsObjectPath : pluginItem.actionsObjectPath
37− property alias menuObjectPaths : pluginItem.menuObjectPaths
38−
39− anchors.fill: parent
40−
41− Page {
42− id: _mainPage
43−
44− Indicators.IndicatorPage {
45− id: pluginItem
46− anchors.fill: parent
47− }
48− }
49−
50− Component {
51− id: passwordPageComponent
52−
53− ICNetwork.PasswordPage {
54− agent: networkAgent
55− }
56− }
57−
58− ICNetwork.NetworkAgent {
59− id: networkAgent
60−
61− onSecretRequested: {
62− networkPage.push(passwordPageComponent, {"token": token});
63− }
64− }
65−
66− function start()
67− {
68− push(_mainPage);
69− pluginItem.start();
70− }
71−
72− function stop()
73− {
74− clear();
75− pluginItem.stop();
76− }
77−
78− function reset()
79− {
80− pluginItem.reset();
81− }
82−}
Panel/Indicators/NetworkIndicatorWidget.qmldeleted−112
@@ -1,112 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU Lesser General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Nick Dedekind <nick.dedekind@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Ubuntu.Components 0.1
22−import Unity.IndicatorsLegacy 0.1 as Indicators
23−
24−Indicators.IndicatorWidget {
25− id: indicatorWidget
26−
27− width: networkIcon.width + units.gu(0.5)
28−
29− property int signalStrength: 0
30− property int connectionState: Indicators.NetworkConnection.Initial
31− rootMenuType: "com.canonical.indicator.root.network"
32−
33− // FIXME : Should us Ubuntu.Icon . results in low res images
34− Image {
35− id: networkIcon
36− objectName: "itemImage"
37− source: get_icon_for_signal(connectionState, signalStrength)
38− visible: source != ""
39− height: indicatorWidget.iconSize
40− width: indicatorWidget.iconSize
41− anchors.centerIn: parent
42− }
43−
44− onActionStateChanged: {
45− if (action == undefined || !action.valid) {
46− enabled = false;
47− return;
48− }
49−
50− if (action.state == undefined) {
51− enabled = false;
52− connectionState = 0;
53− return;
54− }
55−
56− enabled = true;
57− connectionState = action.state[Indicators.NetworkActionState.Connection];
58− if (connectionState == Indicators.NetworkConnection.Activated) {
59− signalStrength = action.state[Indicators.NetworkActionState.SignalStrength];
60− }
61− }
62−
63− NumberAnimation {
64− id: activation_animation
65− target: indicatorWidget
66− property: "signalStrength"
67− from: 0
68− to: 100
69− duration: 2500 // 5 states in 2.5 seconds
70− loops: Animation.Infinite
71− }
72−
73− states: [
74− State {
75− name: "unknown"
76− when: connectionState < Indicators.NetworkConnection.Activating || connectionState > Indicators.NetworkConnection.Deactivating
77− PropertyChanges { target: activation_animation; running: false }
78− },
79− State {
80− name: "activating"
81− when: connectionState == Indicators.NetworkConnection.Activating
82− PropertyChanges { target: activation_animation; running: true }
83− },
84− State {
85− name: "activated"
86− when: connectionState == Indicators.NetworkConnection.Activated
87− PropertyChanges { target: activation_animation; running: false }
88− },
89− State {
90− name: "deactivating"
91− when: connectionState == Indicators.NetworkConnection.Deactivating
92− PropertyChanges { target: activation_animation; running: true }
93− }
94− ]
95−
96−
97− function get_icon_for_signal(con_state, value) {
98− if (con_state >= Indicators.NetworkConnection.Activating && con_state <= Indicators.NetworkConnection.Deactivating) {
99− if (value == 0) {
100− return "image://theme/nm-signal-00";
101− } else if (value <= 25) {
102− return "image://theme/nm-signal-25";
103− } else if (value <= 50) {
104− return "image://theme/nm-signal-50";
105− } else if (value <= 75) {
106− return "image://theme/nm-signal-75";
107− }
108− return "image://theme/nm-signal-100";
109− }
110− return "image://theme/wifi-none";
111− }
112−}
Panel/Indicators/SoundIndicatorWidget.qmldeleted−26
@@ -1,26 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU Lesser General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Nick Dedekind <nick.dedekind@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−
22−DefaultIndicatorWidget {
23− // default the icon so we have something to show when we don't have the bus.
24− iconSource: "image://theme/audio-volume-high"
25− enabled: true
26−}
Panel/Indicators/client/IndicatorsList.qml+16−14
@@ -20,7 +20,7 @@
20import QtQuick 2.0
20import QtQuick 2.0
21import Ubuntu.Components 0.1
21import Ubuntu.Components 0.1
22import Ubuntu.Components.ListItems 0.1 as ListItem
22import Ubuntu.Components.ListItems 0.1 as ListItem
23−import Unity.IndicatorsLegacy 0.1 as Indicators
23+import Unity.Indicators 0.1 as Indicators
24import "../.."
24import "../.."
25
25
26Page {
26Page {
@@ -28,8 +28,10 @@ Page {
28 anchors.fill: parent
28 anchors.fill: parent
29 title: "Plugin list"
29 title: "Plugin list"
30
30
31− IndicatorsDataModel {
31+ Indicators.IndicatorsModel {
32 id: indicatorsModel
32 id: indicatorsModel
33+
34+ Component.onCompleted: load()
33 }
35 }
34
36
35 ListView {
37 ListView {
@@ -38,24 +40,24 @@ Page {
38 anchors.fill: parent
40 anchors.fill: parent
39 model: indicatorsModel
41 model: indicatorsModel
40
42
41− delegate: Indicators.MenuItem {
43+ delegate: Indicators.FramedMenuItem {
42 anchors.left: parent.left
44 anchors.left: parent.left
43 anchors.right: parent.right
45 anchors.right: parent.right
44− progression: isValid
45 objectName: identifier
46 objectName: identifier
46
47
47− Label {
48− anchors.left: parent.left
49− anchors.leftMargin: units.gu(0.5)
50− anchors.verticalCenter: parent.verticalCenter
51− text: title
48+ text: title
52− }
53
49
54 onClicked: {
50 onClicked: {
55− if (progression) {
56− var new_page = Qt.createComponent("IndicatorsPage.qml");
51+ var new_page = Qt.createComponent("IndicatorsPage.qml");
57− page.pageStack.push(new_page.createObject(pages), {"indicatorProperties" : model.indicatorProperties, "pageSource" : model.pageSource});
52+ page.pageStack.push(new_page.createObject(pages), {"indicatorProperties" : model.indicatorProperties, "pageSource" : model.pageSource});
58− }
53+ }
54+
55+ Rectangle {
56+ id: background
57+
58+ anchors.fill: parent
59+ color: "#221e1c"
60+ z: -1
59 }
61 }
60 }
62 }
61 }
63 }
Panel/Indicators/client/IndicatorsTree.qml+4
@@ -44,6 +44,10 @@ Page {
44 menuObjectPath: page.deviceMenuObjectPath
44 menuObjectPath: page.deviceMenuObjectPath
45 }
45 }
46
46
47+ Indicators.RootActionState {
48+ menu: unityModel
49+ }
50+
47 Indicators.ModelPrinter {
51 Indicators.ModelPrinter {
48 id: printer
52 id: printer
49 model: unityModel
53 model: unityModel
Panel/IndicatorsDataModel.qmldeleted−79
@@ -1,79 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Unity.Indicators 0.1 as Indicators
22−import Utils 0.1
23−
24−Indicators.IndicatorsModel {
25− id: ic_model
26−
27− Component.onCompleted: load()
28−
29− indicatorData : {
30− 'indicator-location' : {
31− 'title': 'Location',
32− 'description' : '',
33− 'widgetSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorWidget2.qml',
34− 'pageSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorPage2.qml'
35− },
36− 'indicator-bluetooth' : {
37− 'title': 'Bluetooth',
38− 'description' : '',
39− 'widgetSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorWidget2.qml',
40− 'pageSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorPage2.qml'
41− },
42− 'indicator-messages' : {
43− 'title': 'Messaging',
44− 'description' : '',
45− 'widgetSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/MessagingIndicatorWidget.qml',
46− 'pageSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/MessagingIndicatorPage.qml'
47− },
48− 'indicator-sound' : {
49− 'title': 'Sound',
50− 'description' : '',
51− 'widgetSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorWidget2.qml',
52− 'pageSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorPage2.qml'
53− },
54− 'indicator-network' : {
55− 'title': 'Networks',
56− 'description' : '',
57− 'widgetSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorWidget2.qml',
58− 'pageSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/NetworkIndicatorPage2.qml'
59− },
60− 'indicator-power' : {
61− 'title': 'Battery',
62− 'description' : '',
63− 'widgetSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorWidget2.qml',
64− 'pageSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorPage2.qml'
65− },
66− 'indicator-session' : {
67− 'title': 'Session',
68− 'description' : '',
69− 'widgetSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorWidget2.qml',
70− 'pageSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorPage2.qml'
71− },
72− 'indicator-datetime' : {
73− 'title': 'Date and Time',
74− 'description' : '',
75− 'widgetSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorWidget2.qml',
76− 'pageSource' : ApplicationPaths.shellAppDirectory()+'/Panel/Indicators/DefaultIndicatorPage2.qml'
77− }
78− }
79−}
Panel/MenuContent.qml+20−3
@@ -100,16 +100,17 @@ MainView {
100 Tab {
100 Tab {
101 id: tab
101 id: tab
102 objectName: model.identifier
102 objectName: model.identifier
103− title: model.title
104
103
105 page: Page {
104 page: Page {
106 Loader {
105 Loader {
106+ id: loader
107 clip: true
107 clip: true
108 anchors.fill: parent
108 anchors.fill: parent
109 source: pageSource
109 source: pageSource
110 asynchronous: true
110 asynchronous: true
111
111
112+ readonly property bool indexActive: index >= 0 && index < menuActivator.count && menuActivator.content[index].active
112− property bool contentActive: content.__contentActive
113+ readonly property bool contentActive: content.__contentActive && indexActive
113
114
114 onContentActiveChanged: {
115 onContentActiveChanged: {
115 if (contentActive && item) {
116 if (contentActive && item) {
@@ -136,6 +137,12 @@ MainView {
136 item.start()
137 item.start()
137 }
138 }
138 }
139 }
140+
141+ Binding {
142+ target: tab
143+ property: "title"
144+ value: loader.item && loader.item.hasOwnProperty("title") && loader.item.title !== "" ? loader.item.title : model.identifier
145+ }
139 }
146 }
140 }
147 }
141 }
148 }
@@ -146,6 +153,16 @@ MainView {
146 id: contentReleaseTimer
153 id: contentReleaseTimer
147
154
148 interval: contentReleaseInterval
155 interval: contentReleaseInterval
156+ onTriggered: {
149− onTriggered: content.__contentActive = false
157+ content.__contentActive = false;
158+ menuActivator.clear();
159+ }
160+ }
161+
162+ Indicators.MenuContentActivator {
163+ id: menuActivator
164+ running: content.__contentActive
165+ baseIndex: content.currentMenuIndex
166+ count: indicatorsModel.count
150 }
167 }
151}
168}
Shell.qml+26−13
@@ -23,6 +23,7 @@ import Ubuntu.Gestures 0.1
23import Unity.Launcher 0.1
23import Unity.Launcher 0.1
24import LightDM 0.1 as LightDM
24import LightDM 0.1 as LightDM
25import Powerd 0.1
25import Powerd 0.1
26+import SessionBroadcast 0.1
26import "Dash"
27import "Dash"
27import "Greeter"
28import "Greeter"
28import "Launcher"
29import "Launcher"
@@ -83,6 +84,8 @@ FocusScope {
83
84
84 readonly property bool applicationFocused: !!applicationManager.mainStageFocusedApplication
85 readonly property bool applicationFocused: !!applicationManager.mainStageFocusedApplication
85 || !!applicationManager.sideStageFocusedApplication
86 || !!applicationManager.sideStageFocusedApplication
87+ // Used for autopilot testing.
88+ readonly property string currentFocusedAppId: ApplicationManager.focusedApplicationId
86
89
87 readonly property bool fullscreenMode: {
90 readonly property bool fullscreenMode: {
88 if (greeter.shown || lockscreen.shown) {
91 if (greeter.shown || lockscreen.shown) {
@@ -195,6 +198,7 @@ FocusScope {
195
198
196 anchors.fill: parent
199 anchors.fill: parent
197 source: shell.background
200 source: shell.background
201+ fillMode: Image.PreserveAspectCrop
198 }
202 }
199
203
200 Rectangle {
204 Rectangle {
@@ -531,7 +535,7 @@ FocusScope {
531 // is active. This usually indicates something like a phone call.
535 // is active. This usually indicates something like a phone call.
532 if (status == Powerd.Off && (flags & Powerd.UseProximity) == 0) {
536 if (status == Powerd.Off && (flags & Powerd.UseProximity) == 0) {
533 powerConnection.setFocused(false);
537 powerConnection.setFocused(false);
534− greeter.show();
538+ greeter.showNow();
535 } else if (status == Powerd.On) {
539 } else if (status == Powerd.On) {
536 powerConnection.setFocused(true);
540 powerConnection.setFocused(true);
537 }
541 }
@@ -545,6 +549,17 @@ FocusScope {
545 }
549 }
546 }
550 }
547
551
552+ function showHome() {
553+ 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+ }
560+ stages.hide()
561+ }
562+
548 Item {
563 Item {
549 id: overlay
564 id: overlay
550
565
@@ -608,9 +623,10 @@ FocusScope {
608 }
623 }
609
624
610 Bottombar {
625 Bottombar {
626+ id: bottombar
611 theHud: hud
627 theHud: hud
612 anchors.fill: parent
628 anchors.fill: parent
613− enabled: !panel.indicators.shown
629+ enabled: hud.available
614 applicationIsOnForeground: applicationFocused
630 applicationIsOnForeground: applicationFocused
615 }
631 }
616
632
@@ -632,19 +648,10 @@ FocusScope {
632 width: parent.width
648 width: parent.width
633 dragAreaWidth: shell.edgeSize
649 dragAreaWidth: shell.edgeSize
634 available: (!greeter.shown || greeter.narrowMode) && edgeDemo.launcherEnabled
650 available: (!greeter.shown || greeter.narrowMode) && edgeDemo.launcherEnabled
635− onDashItemSelected: {
651+ onDashItemSelected: showHome()
636− greeter.hide()
637− // Animate if moving between application and dash
638− if (!stages.shown) {
639− dash.setCurrentScope("home.scope", true, false)
640− } else {
641− dash.setCurrentScope("home.scope", false, false)
642− }
643− stages.hide();
644− }
645 onDash: {
652 onDash: {
646 if (stages.shown) {
653 if (stages.shown) {
647− dash.setCurrentScope("applications.scope", true, false)
654+ dash.setCurrentScope("applications.scope", true /* animate */, true /* reset */)
648 stages.hide();
655 stages.hide();
649 launcher.hide();
656 launcher.hide();
650 }
657 }
@@ -657,6 +664,7 @@ FocusScope {
657 if (shown) {
664 if (shown) {
658 panel.indicators.hide()
665 panel.indicators.hide()
659 hud.hide()
666 hud.hide()
667+ bottombar.hide()
660 }
668 }
661 }
669 }
662 }
670 }
@@ -749,4 +757,9 @@ FocusScope {
749 indicators: panel.indicators
757 indicators: panel.indicators
750 underlay: underlay
758 underlay: underlay
751 }
759 }
760+
761+ Connections {
762+ target: SessionBroadcast
763+ onShowHome: showHome()
764+ }
752}
765}
debian/changelog+244
@@ -1,3 +1,247 @@
1+unity8 (7.82+13.10.20131007-0ubuntu1) saucy; urgency=low
2+
3+ [ Michał Sawicz ]
4+ * Respect pre-set import and library paths and prevent segfault in
5+ startShell.
6+
7+ [ Ubuntu daily release ]
8+ * Automatic snapshot from revision 399
9+
10+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Mon, 07 Oct 2013 07:10:46 +0000
11+
12+unity8 (7.82+13.10.20131005-0ubuntu1) saucy; urgency=low
13+
14+ [ Michał Sawicz ]
15+ * Revert r376 that caused constant CPU usage due to the
16+ ActivityIndicator.
17+
18+ [ Nick Dedekind ]
19+ * Removed indicators-client autopilot tests. (LP: #1234736)
20+
21+ [ Albert Astals ]
22+ * Revert r388. (LP: #1235268)
23+
24+ [ Christopher Lee ]
25+ * Removes passing -fullscreen to unity8 when on the device (as per bug
26+ #1235065). (LP: #1235065)
27+
28+ [ Ubuntu daily release ]
29+ * Automatic snapshot from revision 396
30+
31+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Sat, 05 Oct 2013 11:45:14 +0000
32+
33+unity8 (7.82+13.10.20131004.2-0ubuntu1) saucy; urgency=low
34+
35+ * Revert 7.82+13.10.20131004.1-0ubuntu1 back to
36+ 7.81.3+13.10.20130927.3-0ubuntu1 due to CPU hogging issue with
37+ 7.82+13.10.20131004.1-0ubuntu1.
38+
39+ -- Loïc Minier <loic.minier@ubuntu.com> Fri, 04 Oct 2013 21:22:29 +0200
40+
41+unity8 (7.82+13.10.20131004.1-0ubuntu1) saucy; urgency=low
42+
43+ [ Michał Sawicz ]
44+ * Bump to indicate support for extended snap decisions.
45+ * Make Tile themeable, add renderers for Dash Plugins and weather.
46+ (LP: #1231948)
47+ * Drop network agents now that they're in indicator-network instead.
48+
49+ [ Michal Hruby ]
50+ * Differentiate generic and music carousels.
51+ * Use the thumbnailer image provider for scope results that don't
52+ specify icon as well as for previews.
53+ * Added an indicator which is displayed in the search bar whenever a
54+ search is in progress. Added accompanying test in tst_PageHeader.
55+ * Expose rendererHint to shell.
56+
57+ [ Albert Astals ]
58+ * Update pot file. (LP: #1232374)
59+ * Only enable the animation when the item is on screen (i.e. !culled)
60+ . (LP: #1200374)
61+ * Do not crash on positionAtBeginning if the list is empty .
62+ * Enable/disable running apps height animation in a less error prone
63+ way.
64+
65+ [ Michael Terry ]
66+ * Use a chevron after 'Skip intro' and drop the underlining.
67+ * Load testability driver when QT_LOAD_TESTABILITY is set. (LP:
68+ #1226234)
69+ * Listen to the system setting StatsWelcomeScreen, which tells us
70+ whether to show user-specific infographic data in the greeter. (LP:
71+ #1207857)
72+
73+ [ Gerry Boland ]
74+ * WM: ensure focusedApplicationWhenUsingScreenshots reset when unused,
75+ and only used when set. Fixes window focus conflict between shell
76+ and ApplicationManager.
77+
78+ [ Nick Dedekind ]
79+ * Removed deprecated Unity.IndicatorsLegacy plugin.
80+ * Added actionState parser to the indicators-client text printer so
81+ that we get the icon.
82+ * Moved indicator page titles to the root action state of menu model.
83+ (LP: #1223635)
84+
85+ [ Mirco Müller ]
86+ * Added rendering- and interaction-support for the first three
87+ extended snap-decision dialog-cases password-entry, user-
88+ authentication and simunlock.
89+
90+ [ Daniel d'Andrada ]
91+ * Revert the reversion of r304 since it doesn't seem to crash anymore
92+ Original commit was Reset apps scope when returning from app to dash
93+ (LP #1193419) If an app is on foreground and you perform a long
94+ left-edge swipe to minimize it, and therefore return to the dash,
95+ the dash should be in the Applications scope and showing the
96+ running/recents applications. (LP: #1193419)
97+
98+ [ Andrea Cimitan ]
99+ * Add behaviours to the hud reveal. (LP: #1224480, #1224633)
100+ * Make Tile themeable, add renderers for Dash Plugins and weather.
101+ (LP: #1231948)
102+
103+ [ Michael Zanetti ]
104+ * fix inserting into quicklistmodel.
105+ * Drop useStorage argument and use exising LAUNCHER_TESTING define for
106+ this decision.
107+
108+ [ Omer Akram ]
109+ * Make the volume/brightness slider changes realtime. (LP: #1227595)
110+
111+ [ Nicolas d'Offay ]
112+ * Fixed black colour on the first of the month due to division. (LP:
113+ #1233657)
114+ * Added an indicator which is displayed in the search bar whenever a
115+ search is in progress. Added accompanying test in tst_PageHeader.
116+
117+ [ Ubuntu daily release ]
118+ * Automatic snapshot from revision 390
119+
120+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Fri, 04 Oct 2013 06:55:16 +0000
121+
122+unity8 (7.81.3+13.10.20130927.3-0ubuntu1) saucy; urgency=low
123+
124+ [ Michal Hruby ]
125+ * Correctly handle image URI scheme in results.
126+
127+ [ Michał Sawicz ]
128+ * Make SHOW_DASH and HIDE_DASH close the current preview. (LP:
129+ #1231404)
130+ * Add a LazyImage component that shows an activity spinner for long-
131+ loading images and handles aspect ratio properly.
132+ * Fix Qt 5.1 FTBFS and suppress some build warnings.
133+
134+ [ Albert Astals ]
135+ * Make sure we always have least have one column in the gridview. (LP:
136+ #1225391)
137+ * LVWPH: Make sure we always overshoot vertically. (LP: #1229851)
138+ * Remember the expanded categoryId and not the expanded index The
139+ index can change on search, and we still want to maintain it
140+ expanded in that case. (LP: #1230216)
141+ * Fix showHeader in an edge case of notShownByItsOwn Not all the tests
142+ i've added fail without the code fix, but i've added them just to be
143+ more covered . (LP: #1230187)
144+
145+ [ Diego Sarmentero ]
146+ * Handling error signal from the DownloadTracker plugin (BUG:
147+ #1229744). (LP: #1229744)
148+ * Remove "Reviews and Comments" section from Application Preview until
149+ the feature is ready (BUG: #1226632) - Detect when the keyboard is
150+ being shown to allow the user to scroll the Preview even more if
151+ necessary to interact with the components at the bottom of that
152+ preview, and don't leave those components obscured behind the
153+ keyboard (BUG: #1226638). (LP: #1226632, #1224717, #1226638)
154+
155+ [ Nick Dedekind ]
156+ * Brought messaging indicator inline with UnityMenuModel &
157+ UnityMenuAction. (LP: #1217676, #1217678)
158+
159+ [ Pawel Stolowski ]
160+ * Support canned search queries returned by Home Scope.
161+ * Cancel previous actions and previews on new activation / preview.
162+ Expose previewed data row in Preview object.
163+
164+ [ Michael Terry ]
165+ * Only enable the Bottombar when the HUD is available. (LP: #1220306)
166+ * Increase the "Skip intro" clickable area, making dismissing the edge
167+ demo intro feel more natural. (LP: #1220632)
168+
169+ [ Michael Zanetti ]
170+ * drop our CrossFadeImage in favor of the SDK one. (LP: #1227783)
171+
172+ [ Ubuntu daily release ]
173+ * Automatic snapshot from revision 358
174+
175+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Fri, 27 Sep 2013 14:13:22 +0000
176+
177+unity8 (7.81.3+13.10.20130924.2-0ubuntu1) saucy; urgency=low
178+
179+ [ Michal Hruby ]
180+ * Fix the signal prototypes on music grid renderer. (LP: #1228390)
181+
182+ [ Michael Zanetti ]
183+ * use less auto variables, align coding style, constify and Qt'ify API
184+ in AccountsService plugin.
185+
186+ [ Nick Dedekind ]
187+ * Re-enable MenuContentActivator in Indicators.
188+
189+ [ Albert Astals ]
190+ * LVWPH: Update the section header on list change events.
191+
192+ [ Pawel Stolowski ]
193+ * Check results model ptr returned by GetResultsFromCategory method
194+ from UnityCore. (LP: #1228097, #1211595)
195+
196+ [ Ubuntu daily release ]
197+ * Automatic snapshot from revision 340
198+
199+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Tue, 24 Sep 2013 14:40:01 +0000
200+
201+unity8 (7.81.3+13.10.20130919.3-0ubuntu1) saucy; urgency=low
202+
203+ [ Michal Hruby ]
204+ * Add support for music grid renderer to GenericScopeView.
205+
206+ [ Nick Dedekind ]
207+ * Fixed the removal of messaging widget due to incompatible action
208+ state. (LP: #1225017)
209+
210+ [ Christopher Lee ]
211+ * Addition of initial autopilot tests for the application lifecycle.
212+
213+ [ Lars Uebernickel ]
214+ * VolumeControl: use action of the new indicator indicator-sound
215+ recently gained an action to increase and decrease the volume. This
216+ patch makes use of that to get rid of a bus round trip (to get the
217+ current volume) and a race (when the volume gets set between
218+ fetching the current volume and setting the new volume). (LP:
219+ #1219057)
220+
221+ [ Michael Terry ]
222+ * When AccountsService.backgroundFile is unset/invalid, have the
223+ greeter fall back to whatever the shell background is.
224+ * Add a tiny SessionBroadcast plugin that listens to unity-greeter-
225+ session-broadcast for the ShowHome signal.
226+
227+ [ Daniel d'Andrada ]
228+ * Remove obsolete, unused graphics.
229+ * Make MouseTouchAdaptor work with multiple QWindows.
230+
231+ [ Michael Zanetti ]
232+ * change how icons are searched a) try to find it the Icon as is b)
233+ prepend with Path if a Path variable is given c) fall back to the
234+ image://theme/ with just the icon name . (LP: #1225186)
235+ * fix an issue with removing a running app from the launcher and
236+ always store pinning to the config.
237+ * collapse any open preview when programmatically switching current
238+ dash index. (LP: #1221137)
239+
240+ [ Ubuntu daily release ]
241+ * Automatic snapshot from revision 333
242+
243+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Thu, 19 Sep 2013 15:15:07 +0000
244+
1unity8 (7.81.3+13.10.20130916-0ubuntu1) saucy; urgency=low
245unity8 (7.81.3+13.10.20130916-0ubuntu1) saucy; urgency=low
2
246
3 [ Michael Zanetti ]
247 [ Michael Zanetti ]
debian/control+4−9
@@ -14,14 +14,12 @@ Build-Depends: cmake,
14 libjson-perl,
14 libjson-perl,
15 libnih-dbus-dev,
15 libnih-dbus-dev,
16 libnih-dev,
16 libnih-dev,
17− libnm-glib-dev,
18− libnm-util-dev,
19 libpulse-dev,
17 libpulse-dev,
20 libqmenumodel-dev (>= 0.2.7),
18 libqmenumodel-dev (>= 0.2.7),
21 libqt5v8-5-private-dev,
19 libqt5v8-5-private-dev,
22 libsigc++-2.0-dev,
20 libsigc++-2.0-dev,
23 libunity-api-dev (>= 7.80.3),
21 libunity-api-dev (>= 7.80.3),
24− libunity-core-6.0-dev (<< 7.80),
22+ libunity-core-6.0-dev (>= 7.1.1),
25 libunity-dev (>= 7.0.12),
23 libunity-dev (>= 7.0.12),
26 libunity-mir-dev,
24 libunity-mir-dev,
27 libunity-scopes-json-def-phone,
25 libunity-scopes-json-def-phone,
@@ -74,23 +72,20 @@ Depends: gsettings-desktop-schemas,
74 qtdeclarative5-unity-notifications-plugin | unity-notifications-impl,
72 qtdeclarative5-unity-notifications-plugin | unity-notifications-impl,
75 qtdeclarative5-xmllistmodel-plugin,
73 qtdeclarative5-xmllistmodel-plugin,
76 unity-launcher-impl-3,
74 unity-launcher-impl-3,
77− unity-notifications-impl-1,
75+ unity-notifications-impl-2,
78 unity8-fake-env | qtubuntu-shell,
76 unity8-fake-env | qtubuntu-shell,
79 unity8-private (= ${binary:Version}),
77 unity8-private (= ${binary:Version}),
80 unity8-private | unity-launcher-impl,
78 unity8-private | unity-launcher-impl,
81 ${misc:Depends},
79 ${misc:Depends},
82 ${shlibs:Depends},
80 ${shlibs:Depends},
83−Recommends: indicator-battery,
84− indicator-messages,
85− indicator-time,
86− ${unity-default-masterscopes},
81+Recommends: ${unity-default-masterscopes},
82+Breaks: indicator-network (<< 0.5.1)
87Description: Unity 8 shell
83Description: Unity 8 shell
88 The Unity 8 shell is the primary user interface for Ubuntu devices.
84 The Unity 8 shell is the primary user interface for Ubuntu devices.
89
85
90Package: unity8-autopilot
86Package: unity8-autopilot
91Architecture: all
87Architecture: all
92Depends: gir1.2-glib-2.0,
88Depends: gir1.2-glib-2.0,
93− indicators-client (>= ${source:Version}),
94 libautopilot-qt,
89 libautopilot-qt,
95 libqt5test5,
90 libqt5test5,
96 libqt5widgets5,
91 libqt5widgets5,
debian/unity8-private.install+1
@@ -3,6 +3,7 @@ usr/lib/*/unity8/qml/HudClient
3usr/lib/*/unity8/qml/LightDM
3usr/lib/*/unity8/qml/LightDM
4usr/lib/*/unity8/qml/ListViewWithPageHeader
4usr/lib/*/unity8/qml/ListViewWithPageHeader
5usr/lib/*/unity8/qml/Powerd
5usr/lib/*/unity8/qml/Powerd
6+usr/lib/*/unity8/qml/SessionBroadcast
6usr/lib/*/unity8/qml/Ubuntu
7usr/lib/*/unity8/qml/Ubuntu
7usr/lib/*/unity8/qml/Unity
8usr/lib/*/unity8/qml/Unity
8usr/lib/*/unity8/qml/Utils
9usr/lib/*/unity8/qml/Utils
debian/unity8.install−1
@@ -13,4 +13,3 @@ usr/share/unity8/Panel
13usr/share/unity8/Shell.qml
13usr/share/unity8/Shell.qml
14usr/share/unity8/SideStage
14usr/share/unity8/SideStage
15usr/share/unity8/graphics
15usr/share/unity8/graphics
16−usr/share/unity8/unity/indicators/*
main.cpp+4−5
@@ -113,7 +113,7 @@ int startShell(int argc, const char** argv, void* server)
113
113
114 // The testability driver is only loaded by QApplication but not by QGuiApplication.
114 // The testability driver is only loaded by QApplication but not by QGuiApplication.
115 // However, QApplication depends on QWidget which would add some unneeded overhead => Let's load the testability driver on our own.
115 // However, QApplication depends on QWidget which would add some unneeded overhead => Let's load the testability driver on our own.
116− if (args.contains(QLatin1String("-testability"))) {
116+ if (args.contains(QLatin1String("-testability")) || getenv("QT_LOAD_TESTABILITY")) {
117 QLibrary testLib(QLatin1String("qttestability"));
117 QLibrary testLib(QLatin1String("qttestability"));
118 if (testLib.load()) {
118 if (testLib.load()) {
119 typedef void (*TasInitialize)(void);
119 typedef void (*TasInitialize)(void);
@@ -144,7 +144,6 @@ int startShell(int argc, const char** argv, void* server)
144 MouseTouchAdaptor *mouseTouchAdaptor = 0;
144 MouseTouchAdaptor *mouseTouchAdaptor = 0;
145 if (args.contains(QLatin1String("-mousetouch"))) {
145 if (args.contains(QLatin1String("-mousetouch"))) {
146 mouseTouchAdaptor = new MouseTouchAdaptor;
146 mouseTouchAdaptor = new MouseTouchAdaptor;
147− mouseTouchAdaptor->setTargetWindow(view);
148 application->installNativeEventFilter(mouseTouchAdaptor);
147 application->installNativeEventFilter(mouseTouchAdaptor);
149 }
148 }
150
149
@@ -161,10 +160,10 @@ int startShell(int argc, const char** argv, void* server)
161 prependImportPaths(view->engine(), ::overrideImportPaths());
160 prependImportPaths(view->engine(), ::overrideImportPaths());
162 appendImportPaths(view->engine(), ::fallbackImportPaths());
161 appendImportPaths(view->engine(), ::fallbackImportPaths());
163
162
164− QStringList importPath = view->engine()->importPathList().filter("qt5/imports");
165 if (isUbuntuMirServer) {
163 if (isUbuntuMirServer) {
166− importPath.first().append("/Unity-Mir");
164+ QStringList importPaths = view->engine()->importPathList();
167− view->engine()->addImportPath(importPath.first());
165+ importPaths.replaceInStrings(QRegExp("qt5/imports$"), "qt5/imports/Unity-Mir");
166+ view->engine()->setImportPathList(importPaths);
168 }
167 }
169
168
170 view->setSource(source);
169 view->setSource(source);
plugins/AccountsService/AccountsService.cpp+22−3
@@ -32,7 +32,7 @@ AccountsService::AccountsService(QObject* parent)
32 this, SLOT(maybeChanged(const QString &)));
32 this, SLOT(maybeChanged(const QString &)));
33}
33}
34
34
35−QString AccountsService::getUser()
35+QString AccountsService::user() const
36{
36{
37 return m_user;
37 return m_user;
38}
38}
@@ -44,9 +44,10 @@ void AccountsService::setUser(const QString &user)
44
44
45 updateDemoEdges();
45 updateDemoEdges();
46 updateBackgroundFile();
46 updateBackgroundFile();
47+ updateStatsWelcomeScreen();
47}
48}
48
49
49−bool AccountsService::getDemoEdges()
50+bool AccountsService::demoEdges() const
50{
51{
51 return m_demoEdges;
52 return m_demoEdges;
52}
53}
@@ -57,11 +58,16 @@ void AccountsService::setDemoEdges(bool demoEdges)
57 m_service->setUserProperty(m_user, "com.canonical.unity.AccountsService", "demo-edges", demoEdges);
58 m_service->setUserProperty(m_user, "com.canonical.unity.AccountsService", "demo-edges", demoEdges);
58}
59}
59
60
60−QString AccountsService::getBackgroundFile()
61+QString AccountsService::backgroundFile() const
61{
62{
62 return m_backgroundFile;
63 return m_backgroundFile;
63}
64}
64
65
66+bool AccountsService::statsWelcomeScreen() const
67+{
68+ return m_statsWelcomeScreen;
69+}
70+
65void AccountsService::updateDemoEdges()
71void AccountsService::updateDemoEdges()
66{
72{
67 auto demoEdges = m_service->getUserProperty(m_user, "com.canonical.unity.AccountsService", "demo-edges").toBool();
73 auto demoEdges = m_service->getUserProperty(m_user, "com.canonical.unity.AccountsService", "demo-edges").toBool();
@@ -80,6 +86,15 @@ void AccountsService::updateBackgroundFile()
80 }
86 }
81}
87}
82
88
89+void AccountsService::updateStatsWelcomeScreen()
90+{
91+ bool statsWelcomeScreen = m_service->getUserProperty(m_user, "com.ubuntu.touch.AccountsService.SecurityPrivacy", "StatsWelcomeScreen").toBool();
92+ if (m_statsWelcomeScreen != statsWelcomeScreen) {
93+ m_statsWelcomeScreen = statsWelcomeScreen;
94+ Q_EMIT statsWelcomeScreenChanged();
95+ }
96+}
97+
83void AccountsService::propertiesChanged(const QString &user, const QString &interface, const QStringList &changed)
98void AccountsService::propertiesChanged(const QString &user, const QString &interface, const QStringList &changed)
84{
99{
85 if (m_user != user) {
100 if (m_user != user) {
@@ -90,6 +105,10 @@ void AccountsService::propertiesChanged(const QString &user, const QString &inte
90 if (changed.contains("demo-edges")) {
105 if (changed.contains("demo-edges")) {
91 updateDemoEdges();
106 updateDemoEdges();
92 }
107 }
108+ } else if (interface == "com.ubuntu.touch.AccountsService.SecurityPrivacy") {
109+ if (changed.contains("StatsWelcomeScreen")) {
110+ updateStatsWelcomeScreen();
111+ }
93 }
112 }
94}
113}
95
114
plugins/AccountsService/AccountsService.h+13−6
@@ -28,30 +28,35 @@ class AccountsService: public QObject
28{
28{
29 Q_OBJECT
29 Q_OBJECT
30 Q_PROPERTY (QString user
30 Q_PROPERTY (QString user
31− READ getUser
31+ READ user
32 WRITE setUser
32 WRITE setUser
33 NOTIFY userChanged)
33 NOTIFY userChanged)
34 Q_PROPERTY (bool demoEdges
34 Q_PROPERTY (bool demoEdges
35− READ getDemoEdges
35+ READ demoEdges
36 WRITE setDemoEdges
36 WRITE setDemoEdges
37 NOTIFY demoEdgesChanged)
37 NOTIFY demoEdgesChanged)
38 Q_PROPERTY (QString backgroundFile
38 Q_PROPERTY (QString backgroundFile
39− READ getBackgroundFile
39+ READ backgroundFile
40 NOTIFY backgroundFileChanged)
40 NOTIFY backgroundFileChanged)
41+ Q_PROPERTY (bool statsWelcomeScreen
42+ READ statsWelcomeScreen
43+ NOTIFY statsWelcomeScreenChanged)
41
44
42public:
45public:
43 explicit AccountsService(QObject *parent = 0);
46 explicit AccountsService(QObject *parent = 0);
44
47
45− QString getUser();
48+ QString user() const;
46 void setUser(const QString &user);
49 void setUser(const QString &user);
47− bool getDemoEdges();
50+ bool demoEdges() const;
48 void setDemoEdges(bool demoEdges);
51 void setDemoEdges(bool demoEdges);
49− QString getBackgroundFile();
52+ QString backgroundFile() const;
53+ bool statsWelcomeScreen() const;
50
54
51Q_SIGNALS:
55Q_SIGNALS:
52 void userChanged();
56 void userChanged();
53 void demoEdgesChanged();
57 void demoEdgesChanged();
54 void backgroundFileChanged();
58 void backgroundFileChanged();
59+ void statsWelcomeScreenChanged();
55
60
56private Q_SLOTS:
61private Q_SLOTS:
57 void propertiesChanged(const QString &user, const QString &interface, const QStringList &changed);
62 void propertiesChanged(const QString &user, const QString &interface, const QStringList &changed);
@@ -60,11 +65,13 @@ private Q_SLOTS:
60private:
65private:
61 void updateDemoEdges();
66 void updateDemoEdges();
62 void updateBackgroundFile();
67 void updateBackgroundFile();
68+ void updateStatsWelcomeScreen();
63
69
64 AccountsServiceDBusAdaptor *m_service;
70 AccountsServiceDBusAdaptor *m_service;
65 QString m_user;
71 QString m_user;
66 bool m_demoEdges;
72 bool m_demoEdges;
67 QString m_backgroundFile;
73 QString m_backgroundFile;
74+ bool m_statsWelcomeScreen;
68};
75};
69
76
70#endif
77#endif
plugins/AccountsService/AccountsServiceDBusAdaptor.cpp+15−15
@@ -24,13 +24,13 @@
24
24
25AccountsServiceDBusAdaptor::AccountsServiceDBusAdaptor(QObject* parent)
25AccountsServiceDBusAdaptor::AccountsServiceDBusAdaptor(QObject* parent)
26 : QObject(parent),
26 : QObject(parent),
27− accounts_manager(NULL),
27+ m_accountsManager(NULL),
28− users()
28+ m_users()
29{
29{
30− auto connection = QDBusConnection::SM_BUSNAME();
30+ QDBusConnection connection = QDBusConnection::SM_BUSNAME();
31− auto interface = connection.interface();
31+ QDBusConnectionInterface *interface = connection.interface();
32 interface->startService("org.freedesktop.Accounts");
32 interface->startService("org.freedesktop.Accounts");
33− accounts_manager = new QDBusInterface("org.freedesktop.Accounts",
33+ m_accountsManager = new QDBusInterface("org.freedesktop.Accounts",
34 "/org/freedesktop/Accounts",
34 "/org/freedesktop/Accounts",
35 "org.freedesktop.Accounts",
35 "org.freedesktop.Accounts",
36 connection, this);
36 connection, this);
@@ -38,9 +38,9 @@ AccountsServiceDBusAdaptor::AccountsServiceDBusAdaptor(QObject* parent)
38
38
39QVariant AccountsServiceDBusAdaptor::getUserProperty(const QString &user, const QString &interface, const QString &property)
39QVariant AccountsServiceDBusAdaptor::getUserProperty(const QString &user, const QString &interface, const QString &property)
40{
40{
41− auto iface = getUserInterface(user);
41+ QDBusInterface *iface = getUserInterface(user);
42 if (iface != nullptr && iface->isValid()) {
42 if (iface != nullptr && iface->isValid()) {
43− auto answer = iface->call("Get", interface, property);
43+ QDBusMessage answer = iface->call("Get", interface, property);
44 if (answer.type() == QDBusMessage::ReplyMessage) {
44 if (answer.type() == QDBusMessage::ReplyMessage) {
45 return answer.arguments()[0].value<QDBusVariant>().variant();
45 return answer.arguments()[0].value<QDBusVariant>().variant();
46 }
46 }
@@ -50,7 +50,7 @@ QVariant AccountsServiceDBusAdaptor::getUserProperty(const QString &user, const
50
50
51void AccountsServiceDBusAdaptor::setUserProperty(const QString &user, const QString &interface, const QString &property, const QVariant &value)
51void AccountsServiceDBusAdaptor::setUserProperty(const QString &user, const QString &interface, const QString &property, const QVariant &value)
52{
52{
53− auto iface = getUserInterface(user);
53+ QDBusInterface *iface = getUserInterface(user);
54 if (iface != nullptr && iface->isValid()) {
54 if (iface != nullptr && iface->isValid()) {
55 // The value needs to be carefully wrapped
55 // The value needs to be carefully wrapped
56 iface->call("Set", interface, property, QVariant::fromValue(QDBusVariant(value)));
56 iface->call("Set", interface, property, QVariant::fromValue(QDBusVariant(value)));
@@ -76,7 +76,7 @@ void AccountsServiceDBusAdaptor::maybeChangedSlot()
76QString AccountsServiceDBusAdaptor::getUserForPath(const QString &path)
76QString AccountsServiceDBusAdaptor::getUserForPath(const QString &path)
77{
77{
78 QMap<QString, QDBusInterface *>::const_iterator i;
78 QMap<QString, QDBusInterface *>::const_iterator i;
79− for (i = users.constBegin(); i != users.constEnd(); ++i) {
79+ for (i = m_users.constBegin(); i != m_users.constEnd(); ++i) {
80 if (i.value()->path() == path) {
80 if (i.value()->path() == path) {
81 return i.key();
81 return i.key();
82 }
82 }
@@ -86,16 +86,16 @@ QString AccountsServiceDBusAdaptor::getUserForPath(const QString &path)
86
86
87QDBusInterface *AccountsServiceDBusAdaptor::getUserInterface(const QString &user)
87QDBusInterface *AccountsServiceDBusAdaptor::getUserInterface(const QString &user)
88{
88{
89− auto iface = users.value(user);
89+ QDBusInterface *iface = m_users.value(user);
90− if (iface == nullptr && accounts_manager->isValid()) {
90+ if (iface == nullptr && m_accountsManager->isValid()) {
91− auto answer = accounts_manager->call("FindUserByName", user);
91+ QDBusMessage answer = m_accountsManager->call("FindUserByName", user);
92 if (answer.type() == QDBusMessage::ReplyMessage) {
92 if (answer.type() == QDBusMessage::ReplyMessage) {
93− auto path = answer.arguments()[0].value<QDBusObjectPath>().path();
93+ QString path = answer.arguments()[0].value<QDBusObjectPath>().path();
94
94
95 iface = new QDBusInterface("org.freedesktop.Accounts",
95 iface = new QDBusInterface("org.freedesktop.Accounts",
96 path,
96 path,
97 "org.freedesktop.DBus.Properties",
97 "org.freedesktop.DBus.Properties",
98− accounts_manager->connection(), this);
98+ m_accountsManager->connection(), this);
99
99
100 // With its own pre-defined properties, AccountsService is oddly
100 // With its own pre-defined properties, AccountsService is oddly
101 // close-lipped. It won't send out proper DBus.Properties notices,
101 // close-lipped. It won't send out proper DBus.Properties notices,
@@ -119,7 +119,7 @@ QDBusInterface *AccountsServiceDBusAdaptor::getUserInterface(const QString &user
119 this,
119 this,
120 SLOT(propertiesChangedSlot(QString, QVariantMap, QStringList)));
120 SLOT(propertiesChangedSlot(QString, QVariantMap, QStringList)));
121
121
122− users.insert(user, iface);
122+ m_users.insert(user, iface);
123 }
123 }
124 }
124 }
125 return iface;
125 return iface;
plugins/AccountsService/AccountsServiceDBusAdaptor.h+2−2
@@ -47,8 +47,8 @@ private:
47 QDBusInterface *getUserInterface(const QString &user);
47 QDBusInterface *getUserInterface(const QString &user);
48 QString getUserForPath(const QString &path);
48 QString getUserForPath(const QString &path);
49
49
50− QDBusInterface *accounts_manager;
50+ QDBusInterface *m_accountsManager;
51− QMap<QString, QDBusInterface *> users;
51+ QMap<QString, QDBusInterface *> m_users;
52};
52};
53
53
54#endif
54#endif
plugins/CMakeLists.txt+1
@@ -3,6 +3,7 @@ add_subdirectory(HudClient)
3add_subdirectory(LightDM)
3add_subdirectory(LightDM)
4add_subdirectory(ListViewWithPageHeader)
4add_subdirectory(ListViewWithPageHeader)
5add_subdirectory(Powerd)
5add_subdirectory(Powerd)
6+add_subdirectory(SessionBroadcast)
6add_subdirectory(Ubuntu)
7add_subdirectory(Ubuntu)
7add_subdirectory(Unity)
8add_subdirectory(Unity)
8add_subdirectory(Utils)
9add_subdirectory(Utils)
plugins/ListViewWithPageHeader/listviewwithpageheader.cpp+23−1
@@ -170,6 +170,8 @@ ListViewWithPageHeader::ListViewWithPageHeader()
170 connect(this, SIGNAL(contentHeightChanged()), this, SLOT(onContentHeightChanged()));
170 connect(this, SIGNAL(contentHeightChanged()), this, SLOT(onContentHeightChanged()));
171 connect(this, SIGNAL(heightChanged()), this, SLOT(onHeightChanged()));
171 connect(this, SIGNAL(heightChanged()), this, SLOT(onHeightChanged()));
172 connect(m_contentYAnimation, SIGNAL(stopped()), this, SLOT(onShowHeaderAnimationFinished()));
172 connect(m_contentYAnimation, SIGNAL(stopped()), this, SLOT(onShowHeaderAnimationFinished()));
173+
174+ setFlickableDirection(VerticalFlick);
173}
175}
174
176
175ListViewWithPageHeader::~ListViewWithPageHeader()
177ListViewWithPageHeader::~ListViewWithPageHeader()
@@ -199,6 +201,7 @@ void ListViewWithPageHeader::setModel(QAbstractItemModel *model)
199 connect(m_delegateModel, SIGNAL(modelUpdated(QQmlChangeSet,bool)), this, SLOT(onModelUpdated(QQmlChangeSet,bool)));
201 connect(m_delegateModel, SIGNAL(modelUpdated(QQmlChangeSet,bool)), this, SLOT(onModelUpdated(QQmlChangeSet,bool)));
200#endif
202#endif
201 Q_EMIT modelChanged();
203 Q_EMIT modelChanged();
204+ polish();
202 // TODO?
205 // TODO?
203// Q_EMIT contentHeightChanged();
206// Q_EMIT contentHeightChanged();
204// Q_EMIT contentYChanged();
207// Q_EMIT contentYChanged();
@@ -324,6 +327,9 @@ void ListViewWithPageHeader::setForceNoClip(bool noClip)
324
327
325void ListViewWithPageHeader::positionAtBeginning()
328void ListViewWithPageHeader::positionAtBeginning()
326{
329{
330+ if (m_delegateModel->count() <= 0)
331+ return;
332+
327 qreal headerHeight = (m_headerItem ? m_headerItem->height() : 0);
333 qreal headerHeight = (m_headerItem ? m_headerItem->height() : 0);
328 if (m_firstVisibleIndex != 0) {
334 if (m_firstVisibleIndex != 0) {
329 // TODO This could be optimized by trying to reuse the interesection
335 // TODO This could be optimized by trying to reuse the interesection
@@ -482,7 +488,7 @@ void ListViewWithPageHeader::viewportMoved(Qt::Orientations orient)
482 // or the header is partially shown and we are not doing a maximizeVisibleArea either
488 // or the header is partially shown and we are not doing a maximizeVisibleArea either
483 const bool scrolledUp = m_previousContentY > contentY();
489 const bool scrolledUp = m_previousContentY > contentY();
484 const bool notRebounding = contentY() + height() < contentHeight();
490 const bool notRebounding = contentY() + height() < contentHeight();
485− const bool notShownByItsOwn = contentY() + diff > m_headerItem->y() + m_headerItem->height();
491+ const bool notShownByItsOwn = contentY() + diff >= m_headerItem->y() + m_headerItem->height();
486 const bool maximizeVisibleAreaRunning = m_contentYAnimation->isRunning() && contentYAnimationType == ContentYAnimationMaximizeVisibleArea;
492 const bool maximizeVisibleAreaRunning = m_contentYAnimation->isRunning() && contentYAnimationType == ContentYAnimationMaximizeVisibleArea;
487
493
488 if (!scrolledUp && contentY() == -m_minYExtent) {
494 if (!scrolledUp && contentY() == -m_minYExtent) {
@@ -1006,6 +1012,22 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
1006 }
1012 }
1007 }
1013 }
1008
1014
1015+#if (QT_VERSION < QT_VERSION_CHECK(5, 1, 0))
1016+ Q_FOREACH(const QQuickChangeSet::Change &change, changeSet.changes()) {
1017+#else
1018+ Q_FOREACH(const QQmlChangeSet::Change &change, changeSet.changes()) {
1019+#endif
1020+// qDebug() << "ListViewWithPageHeader::onModelUpdated Change" << change.index << change.count;
1021+ for (int i = change.index; i < change.count; ++i) {
1022+ ListItem *item = itemAtIndex(i);
1023+ if (item && item->m_sectionItem) {
1024+ QQmlContext *context = QQmlEngine::contextForObject(item->m_sectionItem)->parentContext();
1025+ const QString sectionText = m_delegateModel->stringValue(i, m_sectionProperty);
1026+ context->setContextProperty(QLatin1String("section"), sectionText);
1027+ }
1028+ }
1029+ }
1030+
1009 if (m_firstVisibleIndex != oldFirstVisibleIndex) {
1031 if (m_firstVisibleIndex != oldFirstVisibleIndex) {
1010 adjustMinYExtent();
1032 adjustMinYExtent();
1011 }
1033 }
plugins/ListViewWithPageHeader/listviewwithpageheader.h+1
@@ -63,6 +63,7 @@ class ListViewWithPageHeader : public QQuickFlickable, public QQuickItemChangeLi
63
63
64 friend class ListViewWithPageHeaderTest;
64 friend class ListViewWithPageHeaderTest;
65 friend class ListViewWithPageHeaderTestSection;
65 friend class ListViewWithPageHeaderTestSection;
66+ friend class ListViewWithPageHeaderTestExternalModel;
66
67
67public:
68public:
68 ListViewWithPageHeader();
69 ListViewWithPageHeader();
plugins/SessionBroadcast/CMakeLists.txtnew file+13
@@ -0,0 +1,13 @@
1+include(Plugins)
2+
3+add_definitions(-DSM_BUSNAME=systemBus)
4+
5+add_library(SessionBroadcast-qml MODULE
6+ SessionBroadcast.cpp
7+ plugin.cpp
8+ )
9+
10+qt5_use_modules(SessionBroadcast-qml DBus Qml)
11+
12+export_qmlfiles(SessionBroadcast SessionBroadcast)
13+export_qmlplugin(SessionBroadcast 0.1 SessionBroadcast TARGETS SessionBroadcast-qml)
plugins/SessionBroadcast/SessionBroadcast.cppnew file+41
@@ -0,0 +1,41 @@
1+/*
2+ * Copyright (C) 2013 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ * Author: Michael Terry <michael.terry@canonical.com>
17+ */
18+
19+#include "SessionBroadcast.h"
20+#include <QDBusConnection>
21+
22+SessionBroadcast::SessionBroadcast(QObject* parent)
23+ : QObject(parent)
24+{
25+ auto connection = QDBusConnection::SM_BUSNAME();
26+
27+ connection.connect("com.canonical.Unity.Greeter.Broadcast",
28+ "/com/canonical/Unity/Greeter/Broadcast",
29+ "com.canonical.Unity.Greeter.Broadcast",
30+ "ShowHome",
31+ this,
32+ SLOT(onShowHome(const QString &)));
33+}
34+
35+void SessionBroadcast::onShowHome(const QString &username)
36+{
37+ // Only listen to requests meant for us
38+ if (username == qgetenv("USER")) {
39+ Q_EMIT showHome();
40+ }
41+}
plugins/Unity/Indicators/Network/plugin.h → plugins/SessionBroadcast/SessionBroadcast.hrenamed+18−9
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2012 Canonical, Ltd.
2+ * Copyright (C) 2013 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -13,20 +13,29 @@
13 * You should have received a copy of the GNU General Public License
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/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
15 *
16− * Author: Nick Dedekind <nick.dedekind@canonical.com>
16+ * Authors: Michael Terry <michael.terry@canonical.com>
17 */
17 */
18
18
19−#ifndef INDICATORS_NETWORK_PLUGIN_H
19+#ifndef UNITY_SESSIONBROADCAST_H
20−#define INDICATORS_NETWORK_PLUGIN_H
20+#define UNITY_SESSIONBROADCAST_H
21
21
22−#include <QtQml/QQmlExtensionPlugin>
22+#include <QObject>
23+#include <QString>
23
24
24−class IndicatorsNetworkPlugin : public QQmlExtensionPlugin
25+class QDBusInterface;
26+
27+class SessionBroadcast: public QObject
25{
28{
26 Q_OBJECT
29 Q_OBJECT
27− Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
30+
28public:
31public:
29− void registerTypes(const char *uri);
32+ explicit SessionBroadcast(QObject *parent = 0);
33+
34+Q_SIGNALS:
35+ void showHome();
36+
37+private Q_SLOTS:
38+ void onShowHome(const QString &username);
30};
39};
31
40
32−#endif // INDICATORS_NETWORK_PLUGIN_H
41+#endif
plugins/Unity/IndicatorsLegacy/Network/plugin.cpp → plugins/SessionBroadcast/plugin.cpprenamed+14−10
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2012 Canonical, Ltd.
2+ * Copyright (C) 2013 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -13,19 +13,23 @@
13 * You should have received a copy of the GNU General Public License
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/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
15 *
16− * Author: Nick Dedekind <nick.dedekind@canonical.com>
16+ * Authors: Michael Terry <michael.terry@canonical.com>
17 */
17 */
18
18
19−// Qt
20−#include <QtQml/qqml.h>
21−
22−// self
23#include "plugin.h"
19#include "plugin.h"
20+#include "SessionBroadcast.h"
21+
22+#include <QtQml>
24
23
25−// local
24+static QObject *broadcast_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
26−#include "networkagent.h"
25+{
26+ Q_UNUSED(engine)
27+ Q_UNUSED(scriptEngine)
28+ return new SessionBroadcast();
29+}
27
30
28−void IndicatorsNetworkPlugin::registerTypes(const char *uri)
31+void SessionBroadcastPlugin::registerTypes(const char *uri)
29{
32{
30− qmlRegisterType<NetworkAgent>(uri, 0, 1, "NetworkAgent");
33+ Q_ASSERT(uri == QLatin1String("SessionBroadcast"));
34+ qmlRegisterSingletonType<SessionBroadcast>(uri, 0, 1, "SessionBroadcast", broadcast_provider);
31}
35}
plugins/Unity/IndicatorsLegacy/plugin.h → plugins/SessionBroadcast/plugin.hrenamed+8−7
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2012 Canonical, Ltd.
2+ * Copyright (C) 2013 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
5 * it under the terms of the GNU General Public License as published by
@@ -13,20 +13,21 @@
13 * You should have received a copy of the GNU General Public License
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/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
15 *
16− * Author: Nick Dedekind <nick.dedekind@canonical.com>
16+ * Authors: Michael Terry <michael.terry@canonical.com>
17 */
17 */
18
18
19−#ifndef INDICATORS_PLUGIN_H
19+#ifndef UNITY_SESSIONBROADCAST_PLUGIN_H
20−#define INDICATORS_PLUGIN_H
20+#define UNITY_SESSIONBROADCAST_PLUGIN_H
21
21
22−#include <QtQml/QQmlExtensionPlugin>
22+#include <QQmlExtensionPlugin>
23
23
24−class IndicatorsPlugin : public QQmlExtensionPlugin
24+class SessionBroadcastPlugin : public QQmlExtensionPlugin
25{
25{
26 Q_OBJECT
26 Q_OBJECT
27 Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
27 Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
28+
28public:
29public:
29 void registerTypes(const char *uri);
30 void registerTypes(const char *uri);
30};
31};
31
32
32−#endif // INDICATORS_PLUGIN_H
33+#endif
plugins/SessionBroadcast/qmldirnew file+3
@@ -0,0 +1,3 @@
1+module SessionBroadcast
2+plugin SessionBroadcast-qml
3+typeinfo plugin.qmltypes
plugins/Unity/CMakeLists.txt+1−1
@@ -2,7 +2,6 @@
2include(Plugins)
2include(Plugins)
3
3
4add_subdirectory(Indicators)
4add_subdirectory(Indicators)
5−add_subdirectory(IndicatorsLegacy)
6
5
7# Dependencies
6# Dependencies
8include(FindPkgConfig)
7include(FindPkgConfig)
@@ -43,6 +42,7 @@ set(QMLPLUGIN_SRC
43 preview.cpp
42 preview.cpp
44 previewaction.cpp
43 previewaction.cpp
45 previewinfohint.cpp
44 previewinfohint.cpp
45+ result.cpp
46 showallfilteroption.cpp
46 showallfilteroption.cpp
47 signalslist.cpp
47 signalslist.cpp
48 socialpreview.cpp
48 socialpreview.cpp
plugins/Unity/Indicators/CMakeLists.txt+1
@@ -12,6 +12,7 @@ find_package(Qt5Core REQUIRED)
12find_package(Qt5Quick REQUIRED)
12find_package(Qt5Quick REQUIRED)
13
13
14add_subdirectory(qml)
14add_subdirectory(qml)
15+add_subdirectory(Messaging)
15add_subdirectory(Network)
16add_subdirectory(Network)
16
17
17include_directories(
18include_directories(
plugins/Unity/IndicatorsLegacy/Messaging/CMakeLists.txt → plugins/Unity/Indicators/Messaging/CMakeLists.txtrenamed

The content is the same.

plugins/Unity/IndicatorsLegacy/Messaging/qml/ActionButton.qml → plugins/Unity/Indicators/Messaging/qml/ActionButton.qmlrenamed

The content is the same.

plugins/Unity/IndicatorsLegacy/Messaging/qml/ActionTextField.qml → plugins/Unity/Indicators/Messaging/qml/ActionTextField.qmlrenamed+10−7
@@ -22,11 +22,12 @@ import QtQuick 2.0
22import Ubuntu.Components 0.1
22import Ubuntu.Components 0.1
23
23
24Item {
24Item {
25− property alias actionGroup: sendButton.actionGroup
25+ id: textField
26− property alias action: sendButton.action
27−
28 property alias text: replyField.text
26 property alias text: replyField.text
29 property alias buttonText: sendButton.text
27 property alias buttonText: sendButton.text
28+ property bool activateEnabled: false
29+
30+ signal activate(var value)
30
31
31 TextField {
32 TextField {
32 id: replyField
33 id: replyField
@@ -50,17 +51,19 @@ Item {
50 }
51 }
51 }
52 }
52
53
53− ActionButton {
54+ Button {
54 id: sendButton
55 id: sendButton
55−
56− actionParameter: replyField.text
57 anchors {
56 anchors {
58 top: parent.top
57 top: parent.top
59 bottom: parent.bottom
58 bottom: parent.bottom
60 right: parent.right
59 right: parent.right
61 }
60 }
62 width: units.gu(9)
61 width: units.gu(9)
63− enabled: replyField.text !== ""
62+ enabled: replyField.text !== "" && textField.activateEnabled
64 color: enabled ? "#c94212" : "#bababa"
63 color: enabled ? "#c94212" : "#bababa"
64+
65+ onClicked: {
66+ textField.activate(replyField.text);
67+ }
65 }
68 }
66}
69}
plugins/Unity/Indicators/Messaging/qml/CMakeLists.txtnew file+5
@@ -0,0 +1,5 @@
1+# export_qmlfiles macro
2+include(Plugins)
3+
4+# export the qmldir, *.qml files.
5+export_qmlfiles(Unity.Indicators.Messaging Unity/Indicators/Messaging)
plugins/Unity/IndicatorsLegacy/Messaging/qml/GroupedMessage.qml → plugins/Unity/Indicators/Messaging/qml/GroupedMessage.qmlrenamed+13−18
@@ -20,20 +20,19 @@
20
20
21import QtQuick 2.0
21import QtQuick 2.0
22import Ubuntu.Components 0.1
22import Ubuntu.Components 0.1
23−import Unity.IndicatorsLegacy 0.1 as Indicators
23+import Unity.Indicators 0.1 as Indicators
24
24
25−Indicators.BasicMenuItem {
25+Indicators.BaseMenuItem {
26 id: groupedMessage
26 id: groupedMessage
27+
28+ property alias title: __title.text
27 property alias count: label.text
29 property alias count: label.text
30+ property string appIcon: "qrc:/indicators/artwork/messaging/default_app.svg"
28
31
29− color: "#221e1b"
32+ signal activateApp()
30− implicitHeight: units.gu(10)
33+ signal dismiss()
31
34
32− Indicators.MenuAction {
35+ implicitHeight: units.gu(10)
33− id: menuAction
34− actionGroup: groupedMessage.actionGroup
35− action: menu ? menu.action : ""
36− }
37
36
38 Row {
37 Row {
39 anchors.fill: parent
38 anchors.fill: parent
@@ -44,17 +43,17 @@ Indicators.BasicMenuItem {
44 height: units.gu(6)
43 height: units.gu(6)
45 width: units.gu(6)
44 width: units.gu(6)
46 image: Image {
45 image: Image {
47− source: menu && (menu.extra.canonical_icon.length > 0) ? "image://theme/" + encodeURI(menu.extra.canonical_icon) : "qrc:/indicators/artwork/messaging/default_app.svg"
46+ source: groupedMessage.appIcon
48 fillMode: Image.PreserveAspectFit
47 fillMode: Image.PreserveAspectFit
49 }
48 }
50 }
49 }
51
50
52 Label {
51 Label {
52+ id: __title
53 anchors.verticalCenter: parent.verticalCenter
53 anchors.verticalCenter: parent.verticalCenter
54 color: "#e8e1d0"
54 color: "#e8e1d0"
55 font.weight: Font.DemiBold
55 font.weight: Font.DemiBold
56 fontSize: "medium"
56 fontSize: "medium"
57− text: menu && menu.label ? menu.label : ""
58 }
57 }
59
58
60 Label {
59 Label {
@@ -65,7 +64,7 @@ Indicators.BasicMenuItem {
65 color: "#e8e1d0"
64 color: "#e8e1d0"
66 font.weight: Font.DemiBold
65 font.weight: Font.DemiBold
67 fontSize: "medium"
66 fontSize: "medium"
68− text: menuAction.valid ? menuAction.state[0] : "0"
67+ text: "0"
69 }
68 }
70 }
69 }
71
70
@@ -82,15 +81,11 @@ Indicators.BasicMenuItem {
82 MouseArea {
81 MouseArea {
83 anchors.fill: parent
82 anchors.fill: parent
84 onClicked: {
83 onClicked: {
85− if (menuAction.valid) {
84+ groupedMessage.activateApp();
86− menuAction.activate(true);
87− }
88 }
85 }
89 }
86 }
90
87
91 onItemRemoved: {
88 onItemRemoved: {
92− if (menuAction.valid) {
89+ groupedMessage.dismiss();
93− menuAction.activate(false);
94− }
95 }
90 }
96}
91}
plugins/Unity/IndicatorsLegacy/Messaging/qml/HeroMessage.qml → plugins/Unity/Indicators/Messaging/qml/HeroMessage.qmlrenamed+25−22
@@ -20,25 +20,30 @@
20
20
21import QtQuick 2.0
21import QtQuick 2.0
22import Ubuntu.Components 0.1
22import Ubuntu.Components 0.1
23−import Unity.IndicatorsLegacy 0.1 as Indicators
23+import Unity.Indicators 0.1 as Indicators
24
24
25−Indicators.BasicMenuItem {
25+Indicators.BaseMenuItem {
26 id: heroMessage
26 id: heroMessage
27
27
28− property variant actionsDescription: null
29 property alias heroMessageHeader: __heroMessageHeader
28 property alias heroMessageHeader: __heroMessageHeader
30 property real collapsedHeight: heroMessageHeader.y + heroMessageHeader.bodyBottom + units.gu(2)
29 property real collapsedHeight: heroMessageHeader.y + heroMessageHeader.bodyBottom + units.gu(2)
31 property real expandedHeight: collapsedHeight
30 property real expandedHeight: collapsedHeight
32
31
33− color: "#221e1c"
32+ property alias avatar: __heroMessageHeader.avatar
33+ property alias appIcon: __heroMessageHeader.icon
34+
35+ signal activateApp
36+ signal dismiss
34
37
35 removable: state !== "expanded"
38 removable: state !== "expanded"
36 implicitHeight: collapsedHeight
39 implicitHeight: collapsedHeight
37
40
38− Indicators.MenuAction {
41+ Rectangle {
39− id: menuAction
42+ id: background
40− actionGroup: heroMessage.actionGroup
43+ property real alpha: 0.0
41− action: menu ? menu.action : ""
44+ anchors.fill: parent
45+ color: Qt.rgba(1.0, 1.0, 1.0, alpha)
46+ z: -1
42 }
47 }
43
48
44 HeroMessageHeader {
49 HeroMessageHeader {
@@ -48,25 +53,22 @@ Indicators.BasicMenuItem {
48 anchors.left: parent.left
53 anchors.left: parent.left
49 anchors.right: parent.right
54 anchors.right: parent.right
50
55
51− avatar: menu && (menu.extra.canonical_icon.length > 0) ? "image://theme/" + encodeURI(menu.extra.canonical_icon) : "qrc:/indicators/artwork/messaging/default_contact.png"
56+ avatar: "qrc:/indicators/artwork/messaging/default_contact.png"
52− icon: menu && (menu.extra.canonical_app_icon.length > 0) ? "image://theme/" + encodeURI(menu.extra.canonical_app_icon) : ""
53 appIcon: icon
57 appIcon: icon
54
58
55 state: heroMessage.state
59 state: heroMessage.state
56
60
57 onAppIconClicked: {
61 onAppIconClicked: {
58− if (menuAction.valid) {
62+ deselectMenu();
59− deactivateMenu();
63+ heroMessage.activateApp();
60− action.activate(true);
61− }
62 }
64 }
63 }
65 }
64
66
65 onClicked: {
67 onClicked: {
66− if (menuActivated) {
68+ if (menuSelected) {
67− deactivateMenu();
69+ deselectMenu();
68 } else {
70 } else {
69− activateMenu();
71+ selectMenu();
70 }
72 }
71 }
73 }
72
74
@@ -84,13 +86,16 @@ Indicators.BasicMenuItem {
84
86
85 states: State {
87 states: State {
86 name: "expanded"
88 name: "expanded"
87− when: menuActivated
89+ when: menuSelected
88
90
89 PropertyChanges {
91 PropertyChanges {
90 target: heroMessage
92 target: heroMessage
91− color: "#333130"
92 implicitHeight: heroMessage.expandedHeight
93 implicitHeight: heroMessage.expandedHeight
93 }
94 }
95+ PropertyChanges {
96+ target: background
97+ alpha: 0.05
98+ }
94 PropertyChanges {
99 PropertyChanges {
95 target: __topHLine
100 target: __topHLine
96 opacity: 0.0
101 opacity: 0.0
@@ -113,8 +118,6 @@ Indicators.BasicMenuItem {
113 }
118 }
114
119
115 onItemRemoved: {
120 onItemRemoved: {
116− if (menuAction.valid) {
121+ heroMessage.dismiss();
117− menuAction.activate(false);
118− }
119 }
122 }
120}
123}
plugins/Unity/IndicatorsLegacy/Messaging/qml/HeroMessageHeader.qml → plugins/Unity/Indicators/Messaging/qml/HeroMessageHeader.qmlrenamed

The content is the same.

plugins/Unity/Indicators/Messaging/qml/MessageMenuItemFactory.qmlnew file+180
@@ -0,0 +1,180 @@
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+ * Renato Araujo Oliveira Filho <renato@canonical.com>
18+ * Olivier Tilloy <olivier.tilloy@canonical.com>
19+ */
20+
21+import QtQuick 2.0
22+import Ubuntu.Components 0.1
23+import Unity.Indicators 0.1 as Indicators
24+import QMenuModel 0.1 as QMenuModel
25+import "utils.js" as Utils
26+
27+Indicators.BaseMenuItem {
28+ id: menuItem
29+ property var actionsDescription: menu ? menu.ext.xCanonicalMessageActions : undefined
30+
31+ implicitHeight: contents.status == Loader.Ready ? contents.item.implicitHeight : 0
32+
33+ property var model: null
34+
35+ Loader {
36+ id: contents
37+ anchors.fill: parent
38+
39+ sourceComponent: loadMessage(actionsDescription);
40+
41+ // Binding all properties for the item, to make sure that any change in the
42+ // property will be propagated to the contents.item at any time
43+ Binding {
44+ target: contents.item
45+ property: "menuSelected"
46+ value: menuSelected
47+ when: (contents.status == Loader.Ready)
48+ }
49+
50+ Binding {
51+ target: contents.item
52+ property: "menu"
53+ value: menu
54+ when: (contents.status == Loader.Ready)
55+ }
56+
57+ Connections {
58+ target: contents.item ? contents.item : null
59+ onSelectMenu: selectMenu()
60+ onDeselectMenu: deselectMenu()
61+ }
62+
63+ Component {
64+ id: simpleTextMessage
65+ SimpleTextMessage {
66+ // text
67+ title: menu && menu.label ? menu.label : ""
68+ time: menu ? Utils.formatDate(menu.ext.xCanonicalTime) : ""
69+ message: menu && menu.ext.xCanonicalText ? menu.ext.xCanonicalText : ""
70+ // icons
71+ avatar: menu && menu.ext.icon !== undefined ? menu.ext.icon : "qrc:/indicators/artwork/messaging/default_contact.png"
72+ appIcon: menu && menu.ext.xCanonicalAppIcon !== undefined ? menu.ext.xCanonicalAppIcon : "qrc:/indicators/artwork/messaging/default_app.svg"
73+
74+ onActivateApp: {
75+ menuItem.model.activate(modelIndex, true);
76+ }
77+ onDismiss: {
78+ menuItem.model.activate(modelIndex, false);
79+ }
80+ }
81+ }
82+ Component {
83+ id: textMessage
84+ TextMessage {
85+ property var replyAction: QMenuModel.UnityMenuAction {
86+ model: menuItem.model
87+ index: modelIndex
88+ name: menu && actionsDescription[0].name ? actionsDescription[0].name : ""
89+ }
90+
91+ // text
92+ title: menu && menu.label ? menu.label : ""
93+ time: menu ? Utils.formatDate(menu.ext.xCanonicalTime) : ""
94+ message: menu && menu.ext.xCanonicalText ? menu.ext.xCanonicalText : ""
95+ replyButtonText: actionsDescription && actionsDescription[0].label ? actionsDescription[0].label : "Send"
96+ // icons
97+ avatar: menu && menu.ext.icon !== undefined ? menu.ext.icon : "qrc:/indicators/artwork/messaging/default_contact.png"
98+ appIcon: menu && menu.ext.xCanonicalAppIcon !== undefined ? menu.ext.xCanonicalAppIcon : "qrc:/indicators/artwork/messaging/default_app.svg"
99+ // actions
100+ replyEnabled: replyAction.valid && replyAction.enabled
101+
102+ onActivateApp: {
103+ menuItem.model.activate(modelIndex, true);
104+ }
105+ onDismiss: {
106+ menuItem.model.activate(modelIndex, false);
107+ }
108+ onReply: {
109+ replyAction.activate(value);
110+ }
111+ }
112+ }
113+ Component {
114+ id: snapDecision
115+ SnapDecision {
116+ property var activateAction: QMenuModel.UnityMenuAction {
117+ model: menuItem.model
118+ index: modelIndex
119+ name: menu && actionsDescription[0].name ? actionsDescription[0].name : ""
120+ }
121+ property var replyAction: QMenuModel.UnityMenuAction {
122+ model: menuItem.model
123+ index: modelIndex
124+ name: menu && actionsDescription[1].name ? actionsDescription[1].name : ""
125+ }
126+
127+ // text
128+ title: menu && menu.label ? menu.label : ""
129+ time: menu ? Utils.formatDate(menu.ext.xCanonicalTime) : ""
130+ message: menu && menu.ext.xCanonicalText ? menu.ext.xCanonicalText : ""
131+ actionButtonText: actionsDescription && actionsDescription[0].label ? actionsDescription[0].label : "Call back"
132+ replyButtonText: actionsDescription && actionsDescription[1].label ? actionsDescription[1].label : "Send"
133+ replyMessages: actionsDescription && actionsDescription[1]["parameter-hint"] ? actionsDescription[1]["parameter-hint"] : ""
134+ // icons
135+ avatar: menu && menu.ext.icon !== undefined ? menu.ext.icon : "qrc:/indicators/artwork/messaging/default_contact.png"
136+ appIcon: menu && menu.ext.xCanonicalAppIcon !== undefined ? menu.ext.xCanonicalAppIcon : "qrc:/indicators/artwork/messaging/default_app.svg"
137+ // actions
138+ activateEnabled: activateAction.valid && activateAction.enabled
139+ replyEnabled: replyAction.valid && replyAction.enabled
140+
141+ onActivateApp: {
142+ menuItem.model.activate(modelIndex, true);
143+ }
144+ onDismiss: {
145+ menuItem.model.activate(modelIndex, false);
146+ }
147+ onActivate: {
148+ activateAction.activate();
149+ }
150+ onReply: {
151+ replyAction.activate(value);
152+ }
153+ }
154+ }
155+ }
156+
157+ function loadMessage(actions)
158+ {
159+ var parameterType = ""
160+ for (var actIndex in actions) {
161+ var desc = actions[actIndex];
162+ if (desc["parameter-type"] !== undefined) {
163+ parameterType += desc["parameter-type"];
164+ } else {
165+ parameterType += "_";
166+ }
167+ }
168+
169+ if (parameterType === "") {
170+ return simpleTextMessage;
171+ } else if (parameterType === "s") {
172+ return textMessage;
173+ } else if (parameterType === "_s") {
174+ return snapDecision;
175+ } else {
176+ console.debug("Unknown paramater type: " + parameterType);
177+ }
178+ return undefined;
179+ }
180+}
plugins/Unity/IndicatorsLegacy/Messaging/qml/QuickReply.qml → plugins/Unity/Indicators/Messaging/qml/QuickReply.qmlrenamed+11−6
@@ -20,15 +20,16 @@
20
20
21import QtQuick 2.0
21import QtQuick 2.0
22import Ubuntu.Components 0.1
22import Ubuntu.Components 0.1
23−import Unity.IndicatorsLegacy 0.1 as Indicators
23+import Unity.Indicators 0.1 as Indicators
24
24
25Item {
25Item {
26− property alias actionGroup: actionTextField.actionGroup
26+ id: quickReply
27− property alias action: actionTextField.action
28−
29 property alias buttonText: actionTextField.buttonText
27 property alias buttonText: actionTextField.buttonText
30 property real expandedHeight: childrenRect.height
28 property real expandedHeight: childrenRect.height
31 property alias messages : messagelistRepeater.model
29 property alias messages : messagelistRepeater.model
30+ property alias replyEnabled: actionTextField.activateEnabled
31+
32+ signal reply(var value)
32
33
33 Item {
34 Item {
34 id: header
35 id: header
@@ -83,10 +84,9 @@ Item {
83
84
84 height: childrenRect.height
85 height: childrenRect.height
85
86
86− Rectangle {
87+ Item {
87 width: messagelist.width
88 width: messagelist.width
88 height: units.gu(5)
89 height: units.gu(5)
89− color: "#333230"
90
90
91 Label {
91 Label {
92 id: __label
92 id: __label
@@ -150,6 +150,11 @@ Item {
150
150
151 anchors.fill: parent
151 anchors.fill: parent
152 anchors.margins: units.gu(1)
152 anchors.margins: units.gu(1)
153+ activateEnabled: replyEnabled
154+
155+ onActivate: {
156+ quickReply.reply(value)
157+ }
153 }
158 }
154
159
155 Indicators.HLine {
160 Indicators.HLine {
plugins/Unity/IndicatorsLegacy/Messaging/qml/SimpleTextMessage.qml → plugins/Unity/Indicators/Messaging/qml/SimpleTextMessage.qmlrenamed+7−4
@@ -20,17 +20,20 @@
20
20
21import QtQuick 2.0
21import QtQuick 2.0
22import Ubuntu.Components 0.1
22import Ubuntu.Components 0.1
23−import "utils.js" as Utils
24
23
25HeroMessage {
24HeroMessage {
26 id: __heroMessage
25 id: __heroMessage
27
26
27+ property string title: ""
28+ property string time: ""
29+ property string message: ""
30+
28 property alias footer: footerLoader.sourceComponent
31 property alias footer: footerLoader.sourceComponent
29
32
30 expandedHeight: fullMessage.y + fullMessage.height + units.gu(2)
33 expandedHeight: fullMessage.y + fullMessage.height + units.gu(2)
31− heroMessageHeader.titleText.text: menu ? menu.label : ""
34+ heroMessageHeader.titleText.text: title
32− heroMessageHeader.subtitleText.text: menu ? Utils.formatDate(menu.extra.canonical_time) : ""
35+ heroMessageHeader.subtitleText.text: time
33− heroMessageHeader.bodyText.text: menu ? menu.extra.canonical_text : ""
36+ heroMessageHeader.bodyText.text: message
34
37
35 Item {
38 Item {
36 id: fullMessage
39 id: fullMessage
plugins/Unity/IndicatorsLegacy/Messaging/qml/SnapDecision.qml → plugins/Unity/Indicators/Messaging/qml/SnapDecision.qmlrenamed+33−14
@@ -20,19 +20,33 @@
20
20
21import QtQuick 2.0
21import QtQuick 2.0
22import Ubuntu.Components 0.1
22import Ubuntu.Components 0.1
23−import Unity.IndicatorsLegacy 0.1 as Indicators
23+import Unity.Indicators 0.1 as Indicators
24import "utils.js" as Utils
24import "utils.js" as Utils
25
25
26HeroMessage {
26HeroMessage {
27 id: snapDecision
27 id: snapDecision
28
28
29+ property string title: ""
30+ property string time: ""
31+ property string message: ""
32+
33+ property bool activateEnabled: true
34+ property alias actionButtonText: actionButton.text
35+
36+ property bool replyEnabled: true
37+ property alias replyMessages: quickreply.messages
38+ property alias replyButtonText: quickreply.buttonText
39+
29 expandedHeight: buttons.y + buttons.height + quickreply.height + units.gu(2)
40 expandedHeight: buttons.y + buttons.height + quickreply.height + units.gu(2)
30− heroMessageHeader.titleText.text: menu ? menu.label : ""
41+ heroMessageHeader.titleText.text: title
31− heroMessageHeader.subtitleText.text: menu ? menu.extra.canonical_text : ""
42+ heroMessageHeader.subtitleText.text: message
32 heroMessageHeader.subtitleText.color: "#e8e1d0"
43 heroMessageHeader.subtitleText.color: "#e8e1d0"
33− heroMessageHeader.bodyText.text: menu ? Utils.formatDate(menu.extra.canonical_time) : ""
44+ heroMessageHeader.bodyText.text: time
34 heroMessageHeader.bodyText.color: "#8f8f88"
45 heroMessageHeader.bodyText.color: "#8f8f88"
35
46
47+ signal activate
48+ signal reply(string value)
49+
36 Item {
50 Item {
37 id: buttons
51 id: buttons
38
52
@@ -62,16 +76,19 @@ HeroMessage {
62 }
76 }
63 }
77 }
64
78
65− ActionButton {
79+ Button {
66− actionGroup: snapDecision.actionGroup
80+ id: actionButton
67− action: actionsDescription[0].name
81+ text: "Call back"
68−
69− text: actionsDescription ? actionsDescription[0].label : "Call back"
70− color: "#c94212"
82+ color: enabled ? "#c94212" : "#bababa"
71 anchors.right: parent.right
83 anchors.right: parent.right
72 anchors.top: parent.top
84 anchors.top: parent.top
73 anchors.bottom: parent.bottom
85 anchors.bottom: parent.bottom
74 width: (parent.width - units.gu(1)) / 2
86 width: (parent.width - units.gu(1)) / 2
87+ enabled: snapDecision.activateEnabled
88+
89+ onClicked: {
90+ snapDecision.activate();
91+ }
75 }
92 }
76
93
77 states: State {
94 states: State {
@@ -95,11 +112,12 @@ HeroMessage {
95 QuickReply {
112 QuickReply {
96 id: quickreply
113 id: quickreply
97
114
115+ onReply: {
98− actionGroup: snapDecision.actionGroup
116+ snapDecision.reply(value);
99− action: actionsDescription[1].name
117+ }
100
118
101− messages: actionsDescription ? actionsDescription[1]["parameter-hint"] : ""
119+ messages: ""
102− buttonText: actionsDescription ? actionsDescription[1].label : "send"
120+ buttonText: "Send"
103 anchors {
121 anchors {
104 top: buttons.bottom
122 top: buttons.bottom
105 topMargin: units.gu(2)
123 topMargin: units.gu(2)
@@ -109,6 +127,7 @@ HeroMessage {
109 height: 0
127 height: 0
110 opacity: 0.0
128 opacity: 0.0
111 enabled: false
129 enabled: false
130+ replyEnabled: snapDecision.replyEnabled
112
131
113 states: State {
132 states: State {
114 name: "expanded"
133 name: "expanded"
plugins/Unity/IndicatorsLegacy/Messaging/qml/TextMessage.qml → plugins/Unity/Indicators/Messaging/qml/TextMessage.qmlrenamed+12−4
@@ -20,16 +20,24 @@
20
20
21import QtQuick 2.0
21import QtQuick 2.0
22import Ubuntu.Components 0.1
22import Ubuntu.Components 0.1
23−import Unity.IndicatorsLegacy 0.1 as Indicators
23+import Unity.Indicators 0.1 as Indicators
24
24
25SimpleTextMessage {
25SimpleTextMessage {
26 id: simpleMessage
26 id: simpleMessage
27
27
28+ property bool replyEnabled: false
29+ property string replyButtonText: "Send"
30+
31+ signal reply(string value)
32+
28 footer: ActionTextField {
33 footer: ActionTextField {
29 anchors.fill: parent
34 anchors.fill: parent
30− actionGroup: simpleMessage.actionGroup
31− action: actionsDescription[0].name
32
35
33− buttonText: actionsDescription ? actionsDescription[0].label : "Send"
36+ activateEnabled: simpleMessage.replyEnabled
37+ buttonText: simpleMessage.replyButtonText
38+
39+ onActivate: {
40+ simpleMessage.reply(value);
41+ }
34 }
42 }
35}
43}
plugins/Unity/IndicatorsLegacy/Messaging/qml/qmldir → plugins/Unity/Indicators/Messaging/qml/qmldirrenamed+2−2
@@ -1,11 +1,11 @@
1−module Unity.IndicatorsLegacy.Messaging
1+module Unity.Indicators.Messaging
2
2
3ActionButton 0.1 ActionButton.qml
3ActionButton 0.1 ActionButton.qml
4ActionTextField 0.1 ActionTextField.qml
4ActionTextField 0.1 ActionTextField.qml
5GroupedMessage 0.1 GroupedMessage.qml
5GroupedMessage 0.1 GroupedMessage.qml
6HeroMessage 0.1 HeroMessage.qml
6HeroMessage 0.1 HeroMessage.qml
7HeroMessageHeader 0.1 HeroMessageHeader.qml
7HeroMessageHeader 0.1 HeroMessageHeader.qml
8−MessageMenuItem 0.1 MessageMenuItem.qml
8+MessageMenuItemFactory 0.1 MessageMenuItemFactory.qml
9QuickReply 0.1 QuickReply.qml
9QuickReply 0.1 QuickReply.qml
10SimpleTextMessage 0.1 SimpleTextMessage.qml
10SimpleTextMessage 0.1 SimpleTextMessage.qml
11SnapDecision 0.1 SnapDecision.qml
11SnapDecision 0.1 SnapDecision.qml
plugins/Unity/IndicatorsLegacy/Messaging/qml/utils.js → plugins/Unity/Indicators/Messaging/qml/utils.jsrenamed

The content is the same.

plugins/Unity/Indicators/Network/CMakeLists.txt−44
@@ -1,45 +1 @@
1−# export_qmlplugin macro
2−include(Plugins)
3−
4−project(IndicatorsNetworkQml)
5−
6−pkg_check_modules(GLIB glib-2.0>=2.32)
7−pkg_check_modules(LIBNM_GLIB libnm-glib>=0.9.6)
8−pkg_check_modules(LIBNM_UTIL libnm-util>=0.9.6)
9−
10−if(LIBNM_GLIB_FOUND AND LIBNM_UTIL_FOUND AND GLIB_FOUND)
11− set(INDICATORS_NETWORK_SRC
12− networkagent.cpp
13− plugin.cpp
14− secret-agent.c
15− )
16−
17− add_library(IndicatorsNetworkQml MODULE
18− ${INDICATORS_NETWORK_SRC}
19− )
20−
21− qt5_use_modules(IndicatorsNetworkQml Core Qml Widgets)
22−
23− set_target_properties(IndicatorsNetworkQml PROPERTIES COMPILE_FLAGS -fPIC)
24−
25− include_directories(
26− ${CMAKE_CURRENT_SOURCE_DIR}
27− ${GLIB_INCLUDE_DIRS}
28− ${LIBNM_GLIB_INCLUDE_DIRS}
29− ${LIBNM_UTIL_INCLUDE_DIRS}
30− )
31−
32− target_link_libraries(IndicatorsNetworkQml
33− ${GLIB_LIBRARIES}
34− ${LIBNM_GLIB_LIBRARIES}
35− ${LIBNM_UTIL_LIBRARIES}
36− )
37−
38− # export the qmltypes and plugin files
39− export_qmlplugin(Unity.Indicators.Network 0.1 Unity/Indicators/Network TARGETS IndicatorsNetworkQml)
40−
41−else()
42− message(WARNING "Missing glib or libnm dependency for the network plugin, not building")
43−endif()
44−
45add_subdirectory(qml)
1add_subdirectory(qml)
plugins/Unity/Indicators/Network/networkagent.cppdeleted−146
@@ -1,146 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Alberto Ruiz <alberto.ruiz@canonical.com>
18− * Renato Araujo Oliveira Filho <renato@canonical.com>
19− */
20−
21−#include "networkagent.h"
22−
23−#include <QVariant>
24−#include <QApplication>
25−#include <QDebug>
26−
27−class NetworkAgentToken
28−{
29−public:
30− NMConnection *connection;
31− NMSettingWirelessSecurity *wisec;
32− guint id;
33− QByteArray keyMgmt;
34−
35− NetworkAgentToken(NMConnection *connection,
36− NMSettingWirelessSecurity *wisec,
37− guint id,
38− QByteArray keyMgmt)
39− : connection(connection),
40− wisec(wisec),
41− id(id),
42− keyMgmt(keyMgmt)
43− {
44− if (connection) {
45− g_object_ref(connection);
46− } else {
47− qWarning() << "invalid connection object";
48− }
49− }
50−
51− ~NetworkAgentToken()
52− {
53− if (connection) {
54− g_object_unref(connection);
55− }
56− }
57−};
58−
59−NetworkAgent::NetworkAgent(QObject *parent)
60− : QObject(parent)
61−{
62− m_agent = unity_settings_secret_agent_new();
63− g_signal_connect(G_OBJECT(m_agent),
64− UNITY_SETTINGS_SECRET_AGENT_SECRET_REQUESTED,
65− G_CALLBACK(onSecretRequested),
66− this);
67−
68− g_signal_connect(G_OBJECT(m_agent),
69− UNITY_SETTINGS_SECRET_AGENT_REQUEST_CANCELLED,
70− G_CALLBACK(onSecretRequestCancelled),
71− this);
72−}
73−
74−NetworkAgent::~NetworkAgent()
75−{
76− nm_secret_agent_unregister(NM_SECRET_AGENT(m_agent));
77− g_object_unref(m_agent);
78−}
79−
80−void NetworkAgent::authenticate(const QVariant &token, const QString &key)
81−{
82− NetworkAgentToken *pToken = (NetworkAgentToken *) token.value<void *>();
83− if (pToken == NULL) {
84− return;
85− }
86−
87− if ((pToken->keyMgmt == "wpa-none") || (pToken->keyMgmt == "wpa-psk")) {
88− g_object_set(G_OBJECT(pToken->wisec),
89− NM_SETTING_WIRELESS_SECURITY_PSK, qPrintable(key),
90− NULL);
91− } else if (pToken->keyMgmt == "none") {
92− g_object_set(G_OBJECT(pToken->wisec),
93− NM_SETTING_WIRELESS_SECURITY_WEP_KEY0, qPrintable(key),
94− NULL);
95− }
96−
97− GHashTable *settings = nm_connection_to_hash(pToken->connection,
98− NM_SETTING_HASH_FLAG_ALL);
99−
100− unity_settings_secret_agent_provide_secret(m_agent,
101− pToken->id, settings);
102− g_hash_table_unref(settings);
103− delete pToken;
104−}
105−
106−void NetworkAgent::cancel(const QVariant &token)
107−{
108− NetworkAgentToken *pToken = (NetworkAgentToken *) token.value<void *>();
109− if (pToken != NULL) {
110− unity_settings_secret_agent_cancel_request(m_agent, pToken->id);
111− delete pToken;
112− }
113−}
114−
115−void NetworkAgent::onSecretRequested(UnitySettingsSecretAgent* /*agent*/,
116− guint id,
117− NMConnection* connection,
118− const char* /*setting_name*/,
119− const char** /*hints*/,
120− NMSecretAgentGetSecretsFlags /*flags*/,
121− NetworkAgent* self)
122−{
123− NetworkAgentToken *token = new NetworkAgentToken(connection,
124− NULL,
125− id,
126− NULL);
127−
128− token->wisec = nm_connection_get_setting_wireless_security(connection);
129− if (token->wisec) {
130− token->keyMgmt = nm_setting_wireless_security_get_key_mgmt(token->wisec);
131− }
132−
133− QVariant varToken = qVariantFromValue((void *) token);
134− Q_EMIT self->secretRequested(varToken);
135−}
136−
137−void NetworkAgent::onSecretRequestCancelled(UnitySettingsSecretAgent* /*agent*/,
138− guint /*id*/,
139− NMConnection* /*connection*/,
140− const char* /*setting_name*/,
141− const char** /*hints*/,
142− NMSecretAgentGetSecretsFlags /*flags*/,
143− NetworkAgent* /*self*/)
144−{
145− //Do nothing for now
146−}
plugins/Unity/Indicators/Network/networkagent.hdeleted−65
@@ -1,65 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Alberto Ruiz <alberto.ruiz@canonical.com>
18− * Renato Araujo Oliveira Filho <renato@canonical.com>
19− */
20−
21−#ifndef NETWORKAGENT_H
22−#define NETWORKAGENT_H
23−
24−#include "secret-agent.h"
25−
26−#include <QObject>
27−
28−class NetworkAgentToken;
29−
30−class NetworkAgent : public QObject
31−{
32− Q_OBJECT
33−public:
34− NetworkAgent(QObject *parent=0);
35− ~NetworkAgent();
36−
37− Q_INVOKABLE void authenticate(const QVariant &token, const QString &key);
38− Q_INVOKABLE void cancel(const QVariant &token);
39−
40−Q_SIGNALS:
41− void secretRequested(const QVariant &token);
42− void secretRequestCancelled();
43−
44−private:
45− UnitySettingsSecretAgent *m_agent;
46−
47− static void onSecretRequested(UnitySettingsSecretAgent *agent,
48− guint id,
49− NMConnection *connection,
50− const char *setting_name,
51− const char **hints,
52− NMSecretAgentGetSecretsFlags flags,
53− NetworkAgent *self);
54−
55− static void onSecretRequestCancelled(UnitySettingsSecretAgent *agent,
56− guint id,
57− NMConnection *connection,
58− const char *setting_name,
59− const char **hints,
60− NMSecretAgentGetSecretsFlags flags,
61− NetworkAgent *self);
62−
63−};
64−
65−#endif
plugins/Unity/Indicators/Network/qml/PasswordPage.qmldeleted−88
@@ -1,88 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Ubuntu.Components 0.1
22−import Ubuntu.Components.ListItems 0.1 as ListItem
23−import Unity.Indicators 0.1 as Indicators
24−
25−Page {
26− id: pagePassword
27−
28− property variant agent
29− property variant token
30−
31− anchors.fill: parent
32− title: "Network Authentication"
33−
34− Column {
35− anchors {
36− left: parent.left
37− right: parent.right
38− }
39−
40− Indicators.SectionMenuItem {
41− text: "Authentication"
42− }
43−
44− Indicators.FramedMenuItem {
45− implicitHeight: password.height + units.gu(1)
46−
47− PasswordTextField {
48− id: password
49− anchors {
50− left: parent.left
51− right: parent.right
52− margins: units.gu(3)
53− verticalCenter: parent.verticalCenter
54− }
55− }
56− }
57−
58− Indicators.FramedMenuItem {
59− Row {
60− anchors {
61− right: parent.right
62− verticalCenter: parent.verticalCenter
63− margins: units.gu(3)
64− }
65−
66− spacing: units.gu(1)
67−
68− Button {
69− text: "Cancel"
70− width: units.gu(10)
71− onClicked: {
72− agent.cancel(token);
73− pageStack.pop();
74− }
75− }
76−
77− Button {
78− text: "OK"
79− width: units.gu(10)
80− onClicked: {
81− agent.authenticate(token, password.text);
82− pageStack.pop();
83− }
84− }
85− }
86− }
87− }
88−}
plugins/Unity/Indicators/Network/qml/PasswordTextField.qmldeleted−68
@@ -1,68 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Ubuntu.Components 0.1
22−
23−Item {
24− id: textMenu
25−
26− property alias text: textField.text
27−
28− height: contentColumn.height
29−
30− Column {
31− id: contentColumn
32− spacing: units.gu(0.5)
33− anchors {
34− left: parent.left
35− right: parent.right
36− }
37−
38− TextField {
39− id: textField
40−
41− anchors {
42− left: parent.left
43− right: parent.right
44− }
45−
46− placeholderText: "Password"
47− echoMode: showPassword.checked ? TextInput.Normal : TextInput.Password
48− }
49−
50− Row {
51− anchors {
52− left: parent.left
53− right: parent.right
54− }
55−
56− spacing: units.gu(1)
57−
58− CheckBox {
59− id: showPassword
60− }
61−
62− Label {
63− text: "Show password"
64− anchors.verticalCenter: showPassword.verticalCenter
65− }
66− }
67− }
68−}
plugins/Unity/Indicators/Network/qml/qmldir−5
@@ -1,8 +1,3 @@
1module Unity.Indicators.Network
1module Unity.Indicators.Network
2−plugin IndicatorsNetworkQml
3−typeinfo plugin.qmltypes
4
2
5−NetworkPage 0.1 NetworkPage.qml
6AccessPoint 0.1 AccessPoint.qml
3AccessPoint 0.1 AccessPoint.qml
7−PasswordPage 0.1 PasswordPage.qml
8−PasswordTextField 0.1 PasswordTextField.qml
plugins/Unity/Indicators/Network/secret-agent.cdeleted−382
@@ -1,382 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Alberto Ruiz <alberto.ruiz@canonical.com>
18− * Renato Araujo Oliveira Filho <renato@canonical.com>
19− */
20−
21−
22−#include <glib.h>
23−#include <glib-object.h>
24−#include <nm-secret-agent.h>
25−#include "secret-agent.h"
26−
27−#define UNITY_SETTINGS_TYPE_SECRET_AGENT (unity_settings_secret_agent_get_type ())
28−#define UNITY_SETTINGS_SECRET_AGENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), UNITY_SETTINGS_TYPE_SECRET_AGENT, UnitySettingsSecretAgent))
29−#define UNITY_SETTINGS_SECRET_AGENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), UNITY_SETTINGS_TYPE_SECRET_AGENT, UnitySettingsSecretAgentClass))
30−#define UNITY_SETTINGS_IS_SECRET_AGENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), UNITY_SETTINGS_TYPE_SECRET_AGENT))
31−#define UNITY_SETTINGS_IS_SECRET_AGENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), UNITY_SETTINGS_TYPE_SECRET_AGENT))
32−#define UNITY_SETTINGS_SECRET_AGENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), UNITY_SETTINGS_TYPE_SECRET_AGENT, UnitySettingsSecretAgentClass))
33−#define UNITY_SETTINGS_SECRET_AGENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), UNITY_SETTINGS_TYPE_SECRET_AGENT, UnitySettingsSecretAgentPrivate))
34−
35−#define AGENT_ID "com.canonical.settings.network.nm-agent"
36−
37−static gpointer unity_settings_secret_agent_parent_class = NULL;
38−
39−typedef struct _UnitySettingsSecretAgentPrivate UnitySettingsSecretAgentPrivate;
40−
41−struct _UnitySettingsSecretAgentPrivate {
42− GQueue *requests;
43−};
44−
45−typedef struct _SecretRequest {
46− gint id;
47− NMSecretAgent *agent;
48− NMConnection *connection;
49− const char *connection_path;
50− const char *setting_name;
51− const char **hints;
52− NMSecretAgentGetSecretsFlags flags;
53− NMSecretAgentGetSecretsFunc callback;
54− gpointer callback_data;
55−} SecretRequest;
56−
57−GType unity_settings_secret_agent_get_type (void) G_GNUC_CONST;
58−enum {
59− UNITY_SETTINGS_SECRET_AGENT_DUMMY_PROPERTY
60−};
61−
62−enum {
63− SECRET_REQUESTED,
64− REQUEST_CANCELLED,
65− LAST_SIGNAL
66−};
67−
68−static guint signals[LAST_SIGNAL] = { 0 };
69−
70−UnitySettingsSecretAgent* unity_settings_secret_agent_new (void);
71−UnitySettingsSecretAgent* unity_settings_secret_agent_construct (GType object_type);
72−
73−int
74−secret_request_find (SecretRequest *req,
75− guint *id)
76−{
77− if (req->id > *id)
78− return -1;
79−
80− if (req->id < *id)
81− return 1;
82−
83− return 0;
84−}
85−
86−void
87−unity_settings_secret_agent_provide_secret (UnitySettingsSecretAgent *agent,
88− guint request,
89− GHashTable *secrets)
90−{
91− GList *iter;
92− SecretRequest *req;
93− UnitySettingsSecretAgentPrivate *priv = agent->priv;
94−
95− iter = g_queue_find_custom (priv->requests,
96− &request,
97− (GCompareFunc)secret_request_find);
98−
99− if (iter == NULL || iter->data == NULL)
100− {
101− g_warning ("Secret request with id <%d> was not found", (int)request);
102− return;
103− }
104−
105− req = iter->data;
106−
107− req->callback (NM_SECRET_AGENT (agent),
108− req->connection,
109− secrets,
110− NULL,
111− req->callback_data);
112−
113− g_queue_remove_all (priv->requests, req);
114− g_free (req);
115− return;
116−}
117−
118−void
119−free_request (SecretRequest *req)
120−{
121− g_object_unref (req->connection);
122− g_free (req);
123−}
124−
125−void
126−unity_settings_secret_agent_cancel_request (UnitySettingsSecretAgent *agent,
127− guint request)
128−{
129− GList *iter;
130− SecretRequest *req;
131− UnitySettingsSecretAgentPrivate *priv = agent->priv;
132− GError *error;
133−
134− iter = g_queue_find_custom (priv->requests,
135− &request,
136− (GCompareFunc)secret_request_find);
137−
138− if (iter == NULL || iter->data == NULL)
139− {
140− g_warning ("Secret request with id <%d> was not found", (int)request);
141− return;
142− }
143−
144− req = iter->data;
145− error = g_error_new (NM_SECRET_AGENT_ERROR,
146− NM_SECRET_AGENT_ERROR_INTERNAL_ERROR,
147− "This secret request was canceled by the user.");
148−
149− req->callback (NM_SECRET_AGENT (agent),
150− req->connection,
151− NULL,
152− error,
153− req->callback_data);
154−
155− g_queue_remove_all (priv->requests, req);
156− free_request (req);
157− return;
158−}
159−
160−static void
161−delete_secrets (NMSecretAgent *agent,
162− NMConnection *connection,
163− const char *connection_path,
164− NMSecretAgentDeleteSecretsFunc callback,
165− gpointer callback_data)
166−{
167− g_debug ("delete secrets");
168−}
169−
170−/* If it returns G_MAXUINT it's considered an error */
171−static guint
172−find_available_id (UnitySettingsSecretAgentPrivate *priv)
173−{
174− guint i = 0;
175− guint candidate = 0;
176−
177− if (g_queue_get_length (priv->requests) == G_MAXUINT)
178− return G_MAXUINT;
179−
180− while (i < g_queue_get_length (priv->requests))
181− {
182− SecretRequest *req = (SecretRequest*)g_queue_peek_nth (priv->requests, i);
183−
184− if (req->id == candidate)
185− {
186− candidate++;
187− i = 0;
188− }
189− else
190− {
191− i++;
192− }
193− }
194−
195− return i;
196−}
197−
198−static void
199−get_secrets (NMSecretAgent *agent,
200− NMConnection *connection,
201− const char *connection_path,
202− const char *setting_name,
203− const char **hints,
204− NMSecretAgentGetSecretsFlags flags,
205− NMSecretAgentGetSecretsFunc callback,
206− gpointer callback_data)
207−{
208− guint id;
209− UnitySettingsSecretAgentPrivate *priv = UNITY_SETTINGS_SECRET_AGENT_GET_PRIVATE (agent);
210− SecretRequest *req = NULL;
211−
212− if (flags == NM_SECRET_AGENT_GET_SECRETS_FLAG_NONE)
213− {
214− GError *error = g_error_new (NM_SECRET_AGENT_ERROR,
215− NM_SECRET_AGENT_ERROR_INTERNAL_ERROR,
216− "No password found for this connection.");
217− callback (agent, connection, NULL, error, callback_data);
218− g_error_free (error);
219− return;
220− }
221−
222− id = find_available_id (priv);
223− if (id == G_MAXUINT)
224− {
225− GError *error = g_error_new (NM_SECRET_AGENT_ERROR,
226− NM_SECRET_AGENT_ERROR_INTERNAL_ERROR,
227− "Reached maximum number of requests.");
228− callback (agent, connection, NULL, error, callback_data);
229− g_error_free (error);
230− return;
231− }
232−
233− /* Adding a request */
234− req = (SecretRequest*) g_malloc0 (sizeof (SecretRequest));
235− *req = ((SecretRequest)
236− { id,
237− agent,
238− connection,
239− connection_path,
240− setting_name,
241− hints,
242− flags,
243− callback,
244− callback_data });
245−
246− g_object_ref (connection);
247−
248− g_queue_push_tail (priv->requests, req);
249−
250− g_signal_emit_by_name (agent,
251− UNITY_SETTINGS_SECRET_AGENT_SECRET_REQUESTED,
252− id,
253− connection,
254− setting_name,
255− hints,
256− flags);
257−}
258−
259−static void
260−save_secrets (NMSecretAgent *agent,
261− NMConnection *connection,
262− const char *connection_path,
263− NMSecretAgentSaveSecretsFunc callback,
264− gpointer callback_data)
265−{
266− g_debug ("save secrets");
267−}
268−
269−static void
270−cancel_get_secrets (NMSecretAgent *agent,
271− const char *connection_path,
272− const char *setting_name)
273−{
274− g_debug ("cancel get secrets");
275−}
276−
277−UnitySettingsSecretAgent*
278−unity_settings_secret_agent_construct (GType object_type)
279−{
280− UnitySettingsSecretAgent * self = NULL;
281− self = (UnitySettingsSecretAgent*) g_object_new (object_type,
282− NM_SECRET_AGENT_IDENTIFIER, AGENT_ID,
283− NULL);
284− return self;
285−}
286−
287−
288−UnitySettingsSecretAgent*
289−unity_settings_secret_agent_new (void)
290−{
291− return unity_settings_secret_agent_construct (UNITY_SETTINGS_TYPE_SECRET_AGENT);
292−}
293−
294−static void
295−destroy_pending_request (gpointer data)
296−{
297− SecretRequest* req = (SecretRequest*)data;
298− /* Reporting the cancellation of all pending requests */
299− g_signal_emit_by_name (req->agent,
300− UNITY_SETTINGS_SECRET_AGENT_REQUEST_CANCELLED,
301− req->id);
302−
303− free_request (req);
304−}
305−
306−static void
307−unity_settings_secret_agent_finalize (GObject *agent)
308−{
309− UnitySettingsSecretAgentPrivate *priv = UNITY_SETTINGS_SECRET_AGENT_GET_PRIVATE (agent);
310−
311− g_queue_free_full (priv->requests, destroy_pending_request);
312−}
313−
314−static void
315−unity_settings_secret_agent_class_init (UnitySettingsSecretAgentClass *klass)
316−{
317− unity_settings_secret_agent_parent_class = g_type_class_peek_parent (klass);
318− NMSecretAgentClass *parent_class = NM_SECRET_AGENT_CLASS (klass);
319− parent_class->get_secrets = get_secrets;
320− parent_class->save_secrets = save_secrets;
321− parent_class->delete_secrets = delete_secrets;
322− parent_class->cancel_get_secrets = cancel_get_secrets;
323−
324− g_type_class_add_private (klass, sizeof(UnitySettingsSecretAgentPrivate));
325− G_OBJECT_CLASS (klass)->finalize = unity_settings_secret_agent_finalize;
326−
327−
328− signals[SECRET_REQUESTED] = g_signal_new (UNITY_SETTINGS_SECRET_AGENT_SECRET_REQUESTED,
329− G_OBJECT_CLASS_TYPE (G_OBJECT_CLASS (klass)),
330− G_SIGNAL_RUN_FIRST,
331− G_STRUCT_OFFSET (UnitySettingsSecretAgentClass, secret_requested),
332− NULL, NULL, NULL,
333− G_TYPE_NONE, 5,
334− G_TYPE_UINT, G_TYPE_POINTER, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_UINT);
335−
336− signals[REQUEST_CANCELLED] = g_signal_new (UNITY_SETTINGS_SECRET_AGENT_REQUEST_CANCELLED,
337− G_OBJECT_CLASS_TYPE (G_OBJECT_CLASS (klass)),
338− G_SIGNAL_RUN_FIRST,
339− G_STRUCT_OFFSET (UnitySettingsSecretAgentClass, request_cancelled),
340− NULL, NULL, NULL,
341− G_TYPE_NONE, 1,
342− G_TYPE_UINT);
343−}
344−
345−
346−static void
347−unity_settings_secret_agent_instance_init (UnitySettingsSecretAgent *self)
348−{
349− self->priv = UNITY_SETTINGS_SECRET_AGENT_GET_PRIVATE (self);
350− self->priv->requests = g_queue_new ();
351−}
352−
353−GType
354−unity_settings_secret_agent_get_type (void)
355−{
356− static volatile gsize unity_settings_secret_agent_type_id__volatile = 0;
357− if (g_once_init_enter (&unity_settings_secret_agent_type_id__volatile))
358− {
359− static const GTypeInfo g_define_type_info =
360− {
361− sizeof (UnitySettingsSecretAgentClass),
362− (GBaseInitFunc) NULL,
363− (GBaseFinalizeFunc) NULL,
364− (GClassInitFunc) unity_settings_secret_agent_class_init,
365− (GClassFinalizeFunc) NULL,
366− NULL,
367− sizeof (UnitySettingsSecretAgent),
368− 0,
369− (GInstanceInitFunc) unity_settings_secret_agent_instance_init,
370− NULL
371− };
372− GType unity_settings_secret_agent_type_id;
373− unity_settings_secret_agent_type_id = g_type_register_static (NM_TYPE_SECRET_AGENT,
374− "UnitySettingsSecretAgent",
375− &g_define_type_info,
376− 0);
377− g_once_init_leave (&unity_settings_secret_agent_type_id__volatile,
378− unity_settings_secret_agent_type_id);
379− }
380−
381− return unity_settings_secret_agent_type_id__volatile;
382−}
plugins/Unity/Indicators/Network/secret-agent.hdeleted−102
@@ -1,102 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Alberto Ruiz <alberto.ruiz@canonical.com>
18− * Renato Araujo Oliveira Filho <renato@canonical.com>
19− */
20−
21−#ifndef __SECRET_AGENT_H__
22−#define __SECRET_AGENT_H__
23−
24−#include <glib.h>
25−#include <glib-object.h>
26−#include <nm-secret-agent.h>
27−
28−/*
29− * This class is a basic implementation of the NetworkManager SecretAgent base class.
30− *
31− * The purpose of this class is to handle credential requests from the network,
32− * for example, from a WiFi hotspot or a VPN network.
33− *
34− * It queues requests objects (SecretRequest) on a GQueue in the private struct
35− * of the class. And notifies the consumer of the class through the "secret-request"
36− * and the "request-cancelled" signals with the following callback prototypes:
37− *
38− * void (*secret_requested) (UnitySettingsSecretAgent *self,
39− * guint id,
40− * NMConnection *connection,
41− * const char *setting_name,
42− * const char **hints,
43− * NMSecretAgentGetSecretsFlags flags,
44− * gpointer user_data);
45− *
46− * void (*request_cancelled) (UnitySettingsSecretAgent *self,
47− * guint id,
48− * gpointer user_data);
49− *
50− */
51−
52−
53−G_BEGIN_DECLS
54−
55−
56−#define UNITY_SETTINGS_TYPE_SECRET_AGENT (unity_settings_secret_agent_get_type ())
57−#define UNITY_SETTINGS_SECRET_AGENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), UNITY_SETTINGS_TYPE_SECRET_AGENT, UnitySettingsSecretAgent))
58−#define UNITY_SETTINGS_SECRET_AGENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), UNITY_SETTINGS_TYPE_SECRET_AGENT, UnitySettingsSecretAgentClass))
59−#define UNITY_SETTINGS_IS_SECRET_AGENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), UNITY_SETTINGS_TYPE_SECRET_AGENT))
60−#define UNITY_SETTINGS_IS_SECRET_AGENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), UNITY_SETTINGS_TYPE_SECRET_AGENT))
61−#define UNITY_SETTINGS_SECRET_AGENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), UNITY_SETTINGS_TYPE_SECRET_AGENT, UnitySettingsSecretAgentClass))
62−
63−#define UNITY_SETTINGS_SECRET_AGENT_SECRET_REQUESTED "secret-requested"
64−#define UNITY_SETTINGS_SECRET_AGENT_REQUEST_CANCELLED "request-cancelled"
65−
66−typedef struct _UnitySettingsSecretAgent UnitySettingsSecretAgent;
67−typedef struct _UnitySettingsSecretAgentClass UnitySettingsSecretAgentClass;
68−typedef struct _UnitySettingsSecretAgentPrivate UnitySettingsSecretAgentPrivate;
69−
70−struct _UnitySettingsSecretAgent {
71− NMSecretAgent parent_instance;
72− UnitySettingsSecretAgentPrivate * priv;
73−};
74−
75−struct _UnitySettingsSecretAgentClass {
76− NMSecretAgentClass parent_class;
77−
78− void (*secret_requested) (UnitySettingsSecretAgent *self,
79− guint id,
80− NMConnection *connection,
81− const char *setting_name,
82− const char **hints,
83− NMSecretAgentGetSecretsFlags flags);
84−
85− void (*request_cancelled) (UnitySettingsSecretAgent *self,
86− guint id);
87−};
88−
89−
90−GType unity_settings_secret_agent_get_type (void) G_GNUC_CONST;
91−UnitySettingsSecretAgent* unity_settings_secret_agent_new (void);
92−UnitySettingsSecretAgent* unity_settings_secret_agent_construct (GType object_type);
93−
94−void unity_settings_secret_agent_provide_secret (UnitySettingsSecretAgent *agent,
95− guint request,
96− GHashTable *secrets);
97−void unity_settings_secret_agent_cancel_request (UnitySettingsSecretAgent *agent,
98− guint request);
99−
100−G_END_DECLS
101−
102−#endif
plugins/Unity/Indicators/indicators.h−2
@@ -74,8 +74,6 @@ public:
74 enum Roles {
74 enum Roles {
75 Identifier = 0,
75 Identifier = 0,
76 Position,
76 Position,
77− Title,
78− Description,
79 WidgetSource,
77 WidgetSource,
80 PageSource,
78 PageSource,
81 IndicatorProperties,
79 IndicatorProperties,
plugins/Unity/Indicators/indicatorsmodel.cpp+2−55
@@ -201,8 +201,6 @@ QHash<int, QByteArray> IndicatorsModel::roleNames() const
201 {
201 {
202 roles[IndicatorsModelRole::Identifier] = "identifier";
202 roles[IndicatorsModelRole::Identifier] = "identifier";
203 roles[IndicatorsModelRole::Position] = "position";
203 roles[IndicatorsModelRole::Position] = "position";
204− roles[IndicatorsModelRole::Title] = "title";
205− roles[IndicatorsModelRole::Description] = "description";
206 roles[IndicatorsModelRole::WidgetSource] = "widgetSource";
204 roles[IndicatorsModelRole::WidgetSource] = "widgetSource";
207 roles[IndicatorsModelRole::PageSource] = "pageSource";
205 roles[IndicatorsModelRole::PageSource] = "pageSource";
208 roles[IndicatorsModelRole::IndicatorProperties] = "indicatorProperties";
206 roles[IndicatorsModelRole::IndicatorProperties] = "indicatorProperties";
@@ -216,25 +214,6 @@ int IndicatorsModel::columnCount(const QModelIndex &) const
216 return 1;
214 return 1;
217}
215}
218
216
219−/*! \internal */
220−QVariant IndicatorsModel::defaultData(Indicator::Ptr indicator, int role)
221−{
222− switch (role)
223− {
224− case IndicatorsModelRole::Position:
225− return 0;
226− case IndicatorsModelRole::Title:
227− return indicator ? indicator->identifier() : "Unknown";
228− case IndicatorsModelRole::Description:
229− return "";
230− case IndicatorsModelRole::WidgetSource:
231− return shellAppDirectory()+"/Panel/Indicators/DefaultIndicatorWidget2.qml";
232− case IndicatorsModelRole::PageSource:
233− return shellAppDirectory()+"/Panel/Indicators/DefaultIndicatorPage2.qml";
234− }
235− return QVariant();
236−}
237−
238Q_INVOKABLE QVariant IndicatorsModel::data(int row, int role) const
217Q_INVOKABLE QVariant IndicatorsModel::data(int row, int role) const
239{
218{
240 return data(index(row, 0), role);
219 return data(index(row, 0), role);
@@ -268,27 +247,16 @@ QVariant IndicatorsModel::data(const QModelIndex &index, int role) const
268 return QVariant(indicator->indicatorProperties());
247 return QVariant(indicator->indicatorProperties());
269 }
248 }
270 break;
249 break;
271− case IndicatorsModelRole::Title:
272− case IndicatorsModelRole::Description:
273 case IndicatorsModelRole::WidgetSource:
250 case IndicatorsModelRole::WidgetSource:
251+ return shellAppDirectory()+"/Panel/Indicators/DefaultIndicatorWidget.qml";
274 case IndicatorsModelRole::PageSource:
252 case IndicatorsModelRole::PageSource:
275− return indicatorData(indicator, role);
253+ return shellAppDirectory()+"/Panel/Indicators/DefaultIndicatorPage.qml";
276 default:
254 default:
277 break;
255 break;
278 }
256 }
279 return QVariant();
257 return QVariant();
280}
258}
281
259
282−QVariant IndicatorsModel::indicatorData(const Indicator::Ptr& indicator, int role) const
283−{
284− if (indicator && m_parsed_indicator_data.contains(indicator->identifier()))
285− {
286− QVariantMap data = m_parsed_indicator_data[indicator->identifier()];
287− return data.value(roleNames()[role], QVariant());
288− }
289− return defaultData(indicator, role);
290−}
291−
292/*! \internal */
260/*! \internal */
293QModelIndex IndicatorsModel::parent(const QModelIndex&) const
261QModelIndex IndicatorsModel::parent(const QModelIndex&) const
294{
262{
@@ -300,24 +268,3 @@ int IndicatorsModel::rowCount(const QModelIndex&) const
300{
268{
301 return m_indicators.count();
269 return m_indicators.count();
302}
270}
303−
304−void IndicatorsModel::setIndicatorData(const QVariant& data)
305−{
306− m_indicator_data = data;
307−
308− m_parsed_indicator_data.clear();
309− QMap<QString, QVariant> map = data.toMap();
310− QMapIterator<QString, QVariant> iter(map);
311− while(iter.hasNext())
312− {
313− iter.next();
314− m_parsed_indicator_data[iter.key()] = iter.value().toMap();
315− }
316−
317− Q_EMIT indicatorDataChanged(m_indicator_data);
318−}
319−
320−QVariant IndicatorsModel::indicatorData() const
321−{
322− return m_indicator_data;
323−}
plugins/Unity/Indicators/indicatorsmodel.h−8
@@ -34,7 +34,6 @@ class UNITYINDICATORS_EXPORT IndicatorsModel : public QAbstractListModel
34 Q_OBJECT
34 Q_OBJECT
35 Q_ENUMS(Roles)
35 Q_ENUMS(Roles)
36 Q_PROPERTY(int count READ count NOTIFY countChanged)
36 Q_PROPERTY(int count READ count NOTIFY countChanged)
37− Q_PROPERTY(QVariant indicatorData READ indicatorData WRITE setIndicatorData NOTIFY indicatorDataChanged)
38
37
39public:
38public:
40
39
@@ -53,9 +52,6 @@ public:
53 QModelIndex parent (const QModelIndex &index) const;
52 QModelIndex parent (const QModelIndex &index) const;
54 int rowCount(const QModelIndex &parent = QModelIndex()) const;
53 int rowCount(const QModelIndex &parent = QModelIndex()) const;
55
54
56− void setIndicatorData(const QVariant& data);
57− QVariant indicatorData() const;
58−
59
55
60Q_SIGNALS:
56Q_SIGNALS:
61 void countChanged();
57 void countChanged();
@@ -71,13 +67,9 @@ private:
71 IndicatorsManager *m_manager;
67 IndicatorsManager *m_manager;
72
68
73 QList<Indicator::Ptr> m_indicators;
69 QList<Indicator::Ptr> m_indicators;
74− QVariant m_indicator_data;
75− QMap<QString, QVariantMap> m_parsed_indicator_data;
76
70
77 void notifyDataChanged(QObject *sender, int role);
71 void notifyDataChanged(QObject *sender, int role);
78 int count() const;
72 int count() const;
79− QVariant indicatorData(const Indicator::Ptr& indicator, int role) const;
80− static QVariant defaultData(Indicator::Ptr indicator, int role);
81};
73};
82
74
83#endif // INDICATORSMODEL_H
75#endif // INDICATORSMODEL_H
plugins/Unity/Indicators/plugin.cpp+2
@@ -42,6 +42,8 @@ static QObject* menuModelCacheSingleton(QQmlEngine* engine, QJSEngine* scriptEng
42
42
43void Indicators2Plugin::registerTypes(const char *uri)
43void Indicators2Plugin::registerTypes(const char *uri)
44{
44{
45+ Q_INIT_RESOURCE(indicators);
46+
45 qmlRegisterType<IndicatorsManager>(uri, 0, 1, "IndicatorsManager");
47 qmlRegisterType<IndicatorsManager>(uri, 0, 1, "IndicatorsManager");
46 qmlRegisterType<IndicatorsModel>(uri, 0, 1, "IndicatorsModel");
48 qmlRegisterType<IndicatorsModel>(uri, 0, 1, "IndicatorsModel");
47 qmlRegisterType<MenuContentActivator>(uri, 0, 1, "MenuContentActivator");
49 qmlRegisterType<MenuContentActivator>(uri, 0, 1, "MenuContentActivator");
plugins/Unity/Indicators/qml/BaseMenuItem.qml+1−1
@@ -24,7 +24,7 @@ import Ubuntu.Components.ListItems 0.1 as ListItem
24ListItem.Standard {
24ListItem.Standard {
25 id: baseMenu
25 id: baseMenu
26
26
27− property bool menuActivated: false
27+ property bool menuSelected: false
28
28
29 signal selectMenu()
29 signal selectMenu()
30 signal deselectMenu()
30 signal deselectMenu()
plugins/Unity/Indicators/qml/IndicatorBase.qml+8−5
@@ -27,13 +27,11 @@ Item {
27 enabled: menuObjectPaths.hasOwnProperty(device)
27 enabled: menuObjectPaths.hasOwnProperty(device)
28
28
29 //const
29 //const
30− property string title
31 property string busName
30 property string busName
32 property string actionsObjectPath
31 property string actionsObjectPath
33 property var menuObjectPaths: undefined
32 property var menuObjectPaths: undefined
34 readonly property string device: "phone"
33 readonly property string device: "phone"
35 property string rootMenuType: "com.canonical.indicator.root"
34 property string rootMenuType: "com.canonical.indicator.root"
36− property bool active: false
37
35
38 property string deviceMenuObjectPath: menuObjectPaths.hasOwnProperty(device) ? menuObjectPaths[device] : ""
36 property string deviceMenuObjectPath: menuObjectPaths.hasOwnProperty(device) ? menuObjectPaths[device] : ""
39
37
@@ -41,8 +39,13 @@ Item {
41
39
42 CachedUnityMenuModel {
40 CachedUnityMenuModel {
43 id: cachedModel
41 id: cachedModel
44− busName: active ? indicatorItem.busName : ""
42+ busName: indicatorItem.busName
45− actionsObjectPath: active ? indicatorItem.actionsObjectPath : ""
43+ actionsObjectPath: indicatorItem.actionsObjectPath
46− menuObjectPath: active ? indicatorItem.deviceMenuObjectPath : ""
44+ menuObjectPath: indicatorItem.deviceMenuObjectPath
45+ }
46+
47+ property var rootActionState: Indicators.RootActionState {
48+ menu: menuModel
49+ onUpdated: indicatorItem.rootActionStateChanged()
47 }
50 }
48}
51}
plugins/Unity/Indicators/qml/IndicatorPage.qml+40−11
@@ -26,12 +26,14 @@ IndicatorBase {
26 id: main
26 id: main
27
27
28 //const
28 //const
29+ property bool contentActive: false
30+ property string title: rootActionState.title
29 property alias emptyText: emptyLabel.text
31 property alias emptyText: emptyLabel.text
30 property alias highlightFollowsCurrentItem : mainMenu.highlightFollowsCurrentItem
32 property alias highlightFollowsCurrentItem : mainMenu.highlightFollowsCurrentItem
31
33
32 Indicators.UnityMenuModelStack {
34 Indicators.UnityMenuModelStack {
33 id: menuStack
35 id: menuStack
34− head: main.menuModel
36+ head: contentActive ? main.menuModel : null
35 }
37 }
36
38
37 ListView {
39 ListView {
@@ -60,7 +62,34 @@ IndicatorBase {
60 // Only allow flicking if the content doesn't fit on the page
62 // Only allow flicking if the content doesn't fit on the page
61 interactive: contentHeight > height
63 interactive: contentHeight > height
62
64
65+ property int selectedIndex: -1
66+ property bool blockCurrentIndexChange: false
67+ // for count = 0
68+ onCountChanged: {
69+ if (count == 0 && selectedIndex != -1) {
70+ selectedIndex = -1;
71+ }
72+ }
73+ // for highlight following
74+ onSelectedIndexChanged: {
63− currentIndex: -1
75+ if (currentIndex != selectedIndex) {
76+ var blocked = blockCurrentIndexChange;
77+ blockCurrentIndexChange = true;
78+
79+ currentIndex = selectedIndex;
80+
81+ blockCurrentIndexChange = blocked;
82+ }
83+ }
84+ // for item addition/removal
85+ onCurrentIndexChanged: {
86+ if (!blockCurrentIndexChange) {
87+ if (selectedIndex != -1 && selectedIndex != currentIndex) {
88+ selectedIndex = currentIndex;
89+ }
90+ }
91+ }
92+
64 delegate: Item {
93 delegate: Item {
65 id: menuDelegate
94 id: menuDelegate
66
95
@@ -89,10 +118,10 @@ IndicatorBase {
89 menuStack.push(mainMenu.model.submenu(index));
118 menuStack.push(mainMenu.model.submenu(index));
90 }
119 }
91
120
92− if (item.hasOwnProperty("menuActivated")) {
121+ if (item.hasOwnProperty("menuSelected")) {
93− item.menuActivated = Qt.binding(function() { return ListView.isCurrentItem; });
122+ item.menuSelected = Qt.binding(function() { return mainMenu.selectedIndex == index; });
94− item.selectMenu.connect(function() { ListView.view.currentIndex = index });
123+ item.selectMenu.connect(function() { mainMenu.selectedIndex = index; });
95− item.deselectMenu.connect(function() { ListView.view.currentIndex = -1 });
124+ item.deselectMenu.connect(function() { mainMenu.selectedIndex = -1; });
96 }
125 }
97 if (item.hasOwnProperty("menu")) {
126 if (item.hasOwnProperty("menu")) {
98 item.menu = Qt.binding(function() { return model; });
127 item.menu = Qt.binding(function() { return model; });
@@ -135,21 +164,21 @@ IndicatorBase {
135 function start()
164 function start()
136 {
165 {
137 reset()
166 reset()
138− if (!active) {
167+ if (!contentActive) {
139− active = true;
168+ contentActive = true;
140 }
169 }
141 }
170 }
142
171
143 function stop()
172 function stop()
144 {
173 {
145− if (active) {
174+ if (contentActive) {
146− active = false;
175+ contentActive = false;
147 }
176 }
148 }
177 }
149
178
150 function reset()
179 function reset()
151 {
180 {
152− mainMenu.currentIndex = -1;
181+ mainMenu.selectedIndex = -1;
153 mainMenu.positionViewAtBeginning();
182 mainMenu.positionViewAtBeginning();
154 }
183 }
155}
184}
plugins/Unity/Indicators/qml/IndicatorWidget.qml−6
@@ -23,12 +23,6 @@ import Unity.Indicators 0.1 as Indicators
23IndicatorBase {
23IndicatorBase {
24 id: indicatorWidget
24 id: indicatorWidget
25
25
26− active: true
27 enabled: false
26 enabled: false
28 property int iconSize: height - units.gu(0.5)
27 property int iconSize: height - units.gu(0.5)
29−
30− property var actionState: Indicators.RootActionState {
31− menu: menuModel
32− onUpdated: indicatorWidget.actionStateChanged()
33− }
34}
28}
plugins/Unity/Indicators/qml/MenuItemFactory.qml+62−12
@@ -20,6 +20,7 @@
20import QtQuick 2.0
20import QtQuick 2.0
21import Unity.Indicators 0.1 as Indicators
21import Unity.Indicators 0.1 as Indicators
22import Unity.Indicators.Network 0.1 as ICNetwork
22import Unity.Indicators.Network 0.1 as ICNetwork
23+import Unity.Indicators.Messaging 0.1 as ICMessaging
23import QMenuModel 0.1 as QMenuModel
24import QMenuModel 0.1 as QMenuModel
24
25
25Item {
26Item {
@@ -38,6 +39,9 @@ Item {
38 "com.canonical.indicator.slider" : sliderMenu,
39 "com.canonical.indicator.slider" : sliderMenu,
39 "com.canonical.indicator.switch" : switchMenu,
40 "com.canonical.indicator.switch" : switchMenu,
40
41
42+ "com.canonical.indicator.messages.messageitem" : messageItem,
43+ "com.canonical.indicator.messages.sourceitem" : groupedMessage,
44+
41 "com.canonical.unity.slider" : sliderMenu,
45 "com.canonical.unity.slider" : sliderMenu,
42 "com.canonical.unity.switch" : switchMenu,
46 "com.canonical.unity.switch" : switchMenu,
43
47
@@ -45,15 +49,17 @@ Item {
45 "unity.widgets.systemsettings.tablet.accesspoint" : accessPoint,
49 "unity.widgets.systemsettings.tablet.accesspoint" : accessPoint,
46 }
50 }
47
51
52+ Component { id: divMenu; Indicators.DivMenuItem {} }
53+
48 Component {
54 Component {
49 id: sliderMenu;
55 id: sliderMenu;
50 Indicators.SliderMenuItem {
56 Indicators.SliderMenuItem {
51 property QtObject menu: null
57 property QtObject menu: null
52
58
53 text: menu && menu.label ? menu.label : ""
59 text: menu && menu.label ? menu.label : ""
54− icon: menu ? menu.icon : ""
60+ icon: menu && menu.icon ? menu.icon : ""
55− minIcon: menu.ext.minIcon
61+ minIcon: menu && menu.ext.minIcon ? menu.ext.minIcon : ""
56− maxIcon: menu.ext.maxIcon
62+ maxIcon: menu && menu.ext.maxIcon ? menu.ext.maxIcon : ""
57
63
58 minimumValue: menu.ext.minValue ? menu.ext.minValue : 0.0
64 minimumValue: menu.ext.minValue ? menu.ext.minValue : 0.0
59 maximumValue: {
65 maximumValue: {
@@ -79,8 +85,6 @@ Item {
79 }
85 }
80 }
86 }
81
87
82− Component { id: divMenu; Indicators.DivMenuItem {} }
83−
84 Component {
88 Component {
85 id: buttonMenu;
89 id: buttonMenu;
86 Indicators.ButtonMenuItem {
90 Indicators.ButtonMenuItem {
@@ -89,7 +93,9 @@ Item {
89 text: menu && menu.label ? menu.label : ""
93 text: menu && menu.label ? menu.label : ""
90 enabled: menu ? menu.sensitive : false
94 enabled: menu ? menu.sensitive : false
91
95
96+ onActivate: {
92− onActivate: model.activate(modelIndex);
97+ model.activate(modelIndex);
98+ }
93 }
99 }
94 }
100 }
95 Component {
101 Component {
@@ -118,12 +124,14 @@ Item {
118 property QtObject menu: null
124 property QtObject menu: null
119
125
120 text: menu && menu.label ? menu.label : ""
126 text: menu && menu.label ? menu.label : ""
121− icon: menu ? menu.icon : ""
127+ icon: menu && menu.icon ? menu.icon : ""
122 checkable: menu ? (menu.isCheck || menu.isRadio) : false
128 checkable: menu ? (menu.isCheck || menu.isRadio) : false
123 checked: checkable ? menu.isToggled : false
129 checked: checkable ? menu.isToggled : false
124 enabled: menu ? menu.sensitive : false
130 enabled: menu ? menu.sensitive : false
125
131
132+ onActivate: {
126− onActivate: model.activate(modelIndex);
133+ model.activate(modelIndex);
134+ }
127 }
135 }
128 }
136 }
129
137
@@ -133,11 +141,13 @@ Item {
133 property QtObject menu: null
141 property QtObject menu: null
134
142
135 text: menu && menu.label ? menu.label : ""
143 text: menu && menu.label ? menu.label : ""
136− icon: menu ? menu.icon : ""
144+ icon: menu && menu.icon ? menu.icon : ""
137 checked: menu ? menu.isToggled : false
145 checked: menu ? menu.isToggled : false
138 enabled: menu ? menu.sensitive : false
146 enabled: menu ? menu.sensitive : false
139
147
148+ onActivate: {
140− onActivate: model.activate(modelIndex);
149+ model.activate(modelIndex);
150+ }
141 }
151 }
142 }
152 }
143
153
@@ -161,11 +171,11 @@ Item {
161 property QtObject menu: null
171 property QtObject menu: null
162 property var strengthAction: QMenuModel.UnityMenuAction {
172 property var strengthAction: QMenuModel.UnityMenuAction {
163 model: menuFactory.model ? menuFactory.model : null
173 model: menuFactory.model ? menuFactory.model : null
174+ index: modelIndex
164 name: menu ? menu.ext.xCanonicalWifiApStrengthAction : ""
175 name: menu ? menu.ext.xCanonicalWifiApStrengthAction : ""
165 }
176 }
166
177
167 text: menu && menu.label ? menu.label : ""
178 text: menu && menu.label ? menu.label : ""
168− icon: menu ? menu.icon : ""
169 secure: menu ? menu.ext.xCanonicalWifiApIsSecure : false
179 secure: menu ? menu.ext.xCanonicalWifiApIsSecure : false
170 adHoc: menu ? menu.ext.xCanonicalWifiApIsAdhoc : false
180 adHoc: menu ? menu.ext.xCanonicalWifiApIsAdhoc : false
171 checked: menu ? menu.isToggled : false
181 checked: menu ? menu.isToggled : false
@@ -177,7 +187,47 @@ Item {
177 'x-canonical-wifi-ap-is-secure': 'bool',
187 'x-canonical-wifi-ap-is-secure': 'bool',
178 'x-canonical-wifi-ap-strength-action': 'string'});
188 'x-canonical-wifi-ap-strength-action': 'string'});
179 }
189 }
190+ onActivate: {
180− onActivate: model.activate(modelIndex);
191+ model.activate(modelIndex);
192+ }
193+ }
194+ }
195+
196+ Component {
197+ id: messageItem
198+ ICMessaging.MessageMenuItemFactory {
199+
200+ property QtObject menu: null
201+ model: menuFactory.model ? menuFactory.model : null
202+
203+ Component.onCompleted: {
204+ model.loadExtendedAttributes(modelIndex, {'x-canonical-time': 'int64',
205+ 'x-canonical-text': 'string',
206+ 'x-canonical-message-actions': 'variant',
207+ 'icon': 'icon',
208+ 'x-canonical-app-icon': 'icon'});
209+ }
210+ }
211+ }
212+
213+ Component {
214+ id: groupedMessage
215+ ICMessaging.GroupedMessage {
216+ property QtObject menu: null
217+
218+ title: menu && menu.label ? menu.label : ""
219+ count: menu && menu.actionState[0] ? menu.actionState[0] : "0"
220+ appIcon: menu && menu.ext.icon !== undefined ? menu.ext.icon : "qrc:/indicators/artwork/messaging/default_app.svg"
221+
222+ Component.onCompleted: {
223+ model.loadExtendedAttributes(modelIndex, {'icon': 'icon'});
224+ }
225+ onActivateApp: {
226+ model.activate(modelIndex, true);
227+ }
228+ onDismiss: {
229+ model.activate(modelIndex, false);
230+ }
181 }
231 }
182 }
232 }
183
233
plugins/Unity/Indicators/qml/SliderMenuItem.qml+1−1
@@ -71,7 +71,7 @@ FramedMenuItem {
71 leftMargin: leftImage.visible ? units.gu(0.5) : 0
71 leftMargin: leftImage.visible ? units.gu(0.5) : 0
72 rightMargin: rightImage.visible ? units.gu(0.5) : 0
72 rightMargin: rightImage.visible ? units.gu(0.5) : 0
73 }
73 }
74− live: false
74+ live: true
75
75
76 Component.onCompleted: {
76 Component.onCompleted: {
77 value = menuItem.value
77 value = menuItem.value
plugins/Unity/IndicatorsLegacy/resources/artwork/messaging/default_app.svg → plugins/Unity/Indicators/resources/artwork/messaging/default_app.svgrenamed

The content is the same.

plugins/Unity/IndicatorsLegacy/resources/artwork/messaging/default_contact.png → plugins/Unity/Indicators/resources/artwork/messaging/default_contact.pngrenamed

Binary file not shown.

plugins/Unity/IndicatorsLegacy/resources/artwork/messaging/message_sms01_54px.png → plugins/Unity/Indicators/resources/artwork/messaging/message_sms01_54px.pngrenamed

Binary file not shown.

plugins/Unity/Indicators/resources/indicators.qrc+3
@@ -1,5 +1,8 @@
1<RCC>
1<RCC>
2 <qresource prefix="/indicators">
2 <qresource prefix="/indicators">
3 <file>artwork/network/secure.svg</file>
3 <file>artwork/network/secure.svg</file>
4+ <file>artwork/messaging/default_contact.png</file>
5+ <file>artwork/messaging/default_app.svg</file>
6+ <file>artwork/messaging/message_sms01_54px.png</file>
4 </qresource>
7 </qresource>
5</RCC>
8</RCC>
plugins/Unity/Indicators/rootactionstate.cpp+7−1
@@ -102,12 +102,18 @@ void RootActionState::updateActionState()
102 Q_EMIT updated();
102 Q_EMIT updated();
103}
103}
104
104
105−
106bool RootActionState::isValid() const
105bool RootActionState::isValid() const
107{
106{
108 return m_menu && m_menu->rowCount() > 0;
107 return m_menu && m_menu->rowCount() > 0;
109}
108}
110
109
110+QString RootActionState::title() const
111+{
112+ if (!isValid()) return QString();
113+
114+ return m_cachedState.value("title", QVariant::fromValue(QString())).toString();
115+}
116+
111QString RootActionState::leftLabel() const
117QString RootActionState::leftLabel() const
112{
118{
113 if (!isValid()) return QString();
119 if (!isValid()) return QString();
plugins/Unity/Indicators/rootactionstate.h+3
@@ -32,6 +32,7 @@ class UNITYINDICATORS_EXPORT RootActionState : public ActionStateParser
32 Q_PROPERTY(UnityMenuModel* menu READ menu WRITE setMenu NOTIFY menuChanged)
32 Q_PROPERTY(UnityMenuModel* menu READ menu WRITE setMenu NOTIFY menuChanged)
33
33
34 Q_PROPERTY(bool valid READ isValid NOTIFY validChanged)
34 Q_PROPERTY(bool valid READ isValid NOTIFY validChanged)
35+ Q_PROPERTY(QString title READ title NOTIFY titleChanged)
35 Q_PROPERTY(QString leftLabel READ leftLabel NOTIFY leftLabelChanged)
36 Q_PROPERTY(QString leftLabel READ leftLabel NOTIFY leftLabelChanged)
36 Q_PROPERTY(QString rightLabel READ rightLabel NOTIFY rightLabelChanged)
37 Q_PROPERTY(QString rightLabel READ rightLabel NOTIFY rightLabelChanged)
37 Q_PROPERTY(QStringList icons READ icons NOTIFY iconsChanged)
38 Q_PROPERTY(QStringList icons READ icons NOTIFY iconsChanged)
@@ -48,6 +49,7 @@ public:
48 void setIndex(int index);
49 void setIndex(int index);
49
50
50 bool isValid() const;
51 bool isValid() const;
52+ QString title() const;
51 QString leftLabel() const;
53 QString leftLabel() const;
52 QString rightLabel() const;
54 QString rightLabel() const;
53 QStringList icons() const;
55 QStringList icons() const;
@@ -64,6 +66,7 @@ Q_SIGNALS:
64 void indexChanged();
66 void indexChanged();
65
67
66 void validChanged();
68 void validChanged();
69+ void titleChanged();
67 void leftLabelChanged();
70 void leftLabelChanged();
68 void rightLabelChanged();
71 void rightLabelChanged();
69 void iconsChanged();
72 void iconsChanged();
plugins/Unity/Indicators/visibleindicatorsmodel.cpp−2
@@ -33,8 +33,6 @@ QHash<int, QByteArray> VisibleIndicatorsModel::roleNames() const
33 {
33 {
34 roles[IndicatorsModelRole::Identifier] = "identifier";
34 roles[IndicatorsModelRole::Identifier] = "identifier";
35 roles[IndicatorsModelRole::Position] = "position";
35 roles[IndicatorsModelRole::Position] = "position";
36− roles[IndicatorsModelRole::Title] = "title";
37− roles[IndicatorsModelRole::Description] = "description";
38 roles[IndicatorsModelRole::WidgetSource] = "widgetSource";
36 roles[IndicatorsModelRole::WidgetSource] = "widgetSource";
39 roles[IndicatorsModelRole::PageSource] = "pageSource";
37 roles[IndicatorsModelRole::PageSource] = "pageSource";
40 roles[IndicatorsModelRole::IndicatorProperties] = "indicatorProperties";
38 roles[IndicatorsModelRole::IndicatorProperties] = "indicatorProperties";
plugins/Unity/IndicatorsLegacy/CMakeLists.txtdeleted−49
@@ -1,49 +0,0 @@
1−# export_qmlplugin macro
2−include(Plugins)
3−
4−project(IndicatorsLegacyQml)
5−
6−pkg_check_modules(QMENUMODEL REQUIRED qmenumodel)
7−find_package(Qt5Core REQUIRED)
8−find_package(Qt5Quick REQUIRED)
9−
10−add_subdirectory(qml)
11−add_subdirectory(Messaging)
12−add_subdirectory(Network)
13−
14−include_directories(
15− ${CMAKE_CURRENT_SOURCE_DIR}
16− ${CMAKE_CURRENT_BINARY_DIR}
17− ${QMENUMODEL_INCLUDE_DIRS}
18− ${CMAKE_SOURCE_DIR}/plugins/Unity/Indicators
19−)
20−
21−set(IndicatorsLegacyQML_SOURCES
22− ${CMAKE_SOURCE_DIR}/plugins/Unity/Indicators/indicators.h
23− flatmenuproxymodel.cpp
24− modelprinter.cpp
25− plugin.cpp
26−)
27−add_definitions(-DUNITYINDICATORS_LIBRARY)
28−
29−set(IndicatorsLegacyQML_RESOURCES
30− resources/indicators.qrc
31−)
32−
33−qt5_add_resources(IndicatorsLegacyQML_RESOURCES_RCC
34− ${IndicatorsLegacyQML_RESOURCES}
35−)
36−
37−add_library(IndicatorsLegacyQml SHARED
38− ${IndicatorsLegacyQML_RESOURCES_RCC}
39− ${IndicatorsLegacyQML_SOURCES}
40−)
41−
42−target_link_libraries(IndicatorsLegacyQml
43− ${QMENUMODEL_LDFLAGS}
44−)
45−
46−qt5_use_modules(IndicatorsLegacyQml Core Qml Quick)
47−
48−# export the qmltypes and plugin files
49−export_qmlplugin(Unity.IndicatorsLegacy 0.1 Unity/IndicatorsLegacy TARGETS IndicatorsLegacyQml)
plugins/Unity/IndicatorsLegacy/Messaging/qml/CMakeLists.txtdeleted−5
@@ -1,5 +0,0 @@
1−# export_qmlfiles macro
2−include(Plugins)
3−
4−# export the qmldir, *.qml files.
5−export_qmlfiles(Unity.IndicatorsLegacy.Messaging Unity/IndicatorsLegacy/Messaging)
plugins/Unity/IndicatorsLegacy/Messaging/qml/MessageMenuItem.qmldeleted−96
@@ -1,96 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− * Olivier Tilloy <olivier.tilloy@canonical.com>
19− */
20−
21−import QtQuick 2.0
22−import Ubuntu.Components 0.1
23−import Unity.IndicatorsLegacy 0.1 as Indicators
24−
25−Indicators.BasicMenuItem {
26− property variant actionsDescription: menu ? menu.extra.canonical_message_actions : undefined
27−
28− onActionGroupChanged: loadItem()
29− onActionsDescriptionChanged: loadItem()
30− implicitHeight: contents.status == Loader.Ready ? contents.item.implicitHeight : 0
31−
32− Loader {
33− id: contents
34−
35− anchors.fill: parent
36− // Binding all properties for the item, to make sure that any change in the
37− // property will be propagated to the contents.item at any time
38− Binding {
39− target: contents.item
40− property: "menuActivated"
41− value: menuActivated
42− when: (contents.status == Loader.Ready)
43− }
44−
45− Binding {
46− target: contents.item
47− property: "actionGroup"
48− value: actionGroup
49− when: (contents.status == Loader.Ready)
50− }
51−
52− Binding {
53− target: contents.item
54− property: "menu"
55− value: menu
56− when: (contents.status == Loader.Ready)
57− }
58−
59− Binding {
60− target: contents.item
61− property: "actionsDescription"
62− value: actionsDescription
63− when: (contents.status == Loader.Ready)
64− }
65−
66− Connections {
67− target: contents.item ? contents.item : null
68− onActivateMenu: activateMenu()
69− onDeactivateMenu: deactivateMenu()
70− }
71− }
72−
73−
74− function loadItem()
75− {
76− var parameterType = ""
77− for (var actIndex in actionsDescription) {
78− var desc = actionsDescription[actIndex];
79− if (desc["parameter-type"] !== undefined) {
80− parameterType += desc["parameter-type"];
81− } else {
82− parameterType += "_";
83− }
84− }
85−
86− if (parameterType === "") {
87− contents.source = "SimpleTextMessage.qml";
88− } else if (parameterType === "s") {
89− contents.source = "TextMessage.qml";
90− } else if (parameterType === "_s") {
91− contents.source = "SnapDecision.qml";
92− } else {
93− console.debug("Unknown paramater type: " + parameterType);
94− }
95− }
96−}
plugins/Unity/IndicatorsLegacy/Network/CMakeLists.txtdeleted−45
@@ -1,45 +0,0 @@
1−# export_qmlplugin macro
2−include(Plugins)
3−
4−project(IndicatorsLegacyNetworkQml)
5−
6−pkg_check_modules(GLIB glib-2.0>=2.32)
7−pkg_check_modules(LIBNM_GLIB libnm-glib>=0.9.6)
8−pkg_check_modules(LIBNM_UTIL libnm-util>=0.9.6)
9−
10−if(LIBNM_GLIB_FOUND AND LIBNM_UTIL_FOUND AND GLIB_FOUND)
11− set(INDICATORS_LEGACY_NETWORK_SRC
12− networkagent.cpp
13− plugin.cpp
14− secret-agent.c
15− )
16−
17− add_library(IndicatorsLegacyNetworkQml MODULE
18− ${INDICATORS_LEGACY_NETWORK_SRC}
19− )
20−
21− qt5_use_modules(IndicatorsLegacyNetworkQml Core Qml Widgets)
22−
23− set_target_properties(IndicatorsLegacyNetworkQml PROPERTIES COMPILE_FLAGS -fPIC)
24−
25− include_directories(
26− ${CMAKE_CURRENT_SOURCE_DIR}
27− ${GLIB_INCLUDE_DIRS}
28− ${LIBNM_GLIB_INCLUDE_DIRS}
29− ${LIBNM_UTIL_INCLUDE_DIRS}
30− )
31−
32− target_link_libraries(IndicatorsLegacyNetworkQml
33− ${GLIB_LIBRARIES}
34− ${LIBNM_GLIB_LIBRARIES}
35− ${LIBNM_UTIL_LIBRARIES}
36− )
37−
38− # export the qmltypes and plugin files
39− export_qmlplugin(Unity.IndicatorsLegacy.Network 0.1 Unity/IndicatorsLegacy/Network TARGETS IndicatorsLegacyNetworkQml)
40−
41−else()
42− message(WARNING "Missing glib or libnm dependency for the network plugin, not building")
43−endif()
44−
45−add_subdirectory(qml)
plugins/Unity/IndicatorsLegacy/Network/networkagent.cppdeleted−146
@@ -1,146 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Alberto Ruiz <alberto.ruiz@canonical.com>
18− * Renato Araujo Oliveira Filho <renato@canonical.com>
19− */
20−
21−#include "networkagent.h"
22−
23−#include <QVariant>
24−#include <QApplication>
25−#include <QDebug>
26−
27−class NetworkAgentToken
28−{
29−public:
30− NMConnection *connection;
31− NMSettingWirelessSecurity *wisec;
32− guint id;
33− QByteArray keyMgmt;
34−
35− NetworkAgentToken(NMConnection *connection,
36− NMSettingWirelessSecurity *wisec,
37− guint id,
38− QByteArray keyMgmt)
39− : connection(connection),
40− wisec(wisec),
41− id(id),
42− keyMgmt(keyMgmt)
43− {
44− if (connection) {
45− g_object_ref(connection);
46− } else {
47− qWarning() << "invalid connection object";
48− }
49− }
50−
51− ~NetworkAgentToken()
52− {
53− if (connection) {
54− g_object_unref(connection);
55− }
56− }
57−};
58−
59−NetworkAgent::NetworkAgent(QObject *parent)
60− : QObject(parent)
61−{
62− m_agent = unity_settings_secret_agent_new();
63− g_signal_connect(G_OBJECT(m_agent),
64− UNITY_SETTINGS_SECRET_AGENT_SECRET_REQUESTED,
65− G_CALLBACK(onSecretRequested),
66− this);
67−
68− g_signal_connect(G_OBJECT(m_agent),
69− UNITY_SETTINGS_SECRET_AGENT_REQUEST_CANCELLED,
70− G_CALLBACK(onSecretRequestCancelled),
71− this);
72−}
73−
74−NetworkAgent::~NetworkAgent()
75−{
76− nm_secret_agent_unregister(NM_SECRET_AGENT(m_agent));
77− g_object_unref(m_agent);
78−}
79−
80−void NetworkAgent::authenticate(const QVariant &token, const QString &key)
81−{
82− NetworkAgentToken *pToken = (NetworkAgentToken *) token.value<void *>();
83− if (pToken == NULL) {
84− return;
85− }
86−
87− if ((pToken->keyMgmt == "wpa-none") || (pToken->keyMgmt == "wpa-psk")) {
88− g_object_set(G_OBJECT(pToken->wisec),
89− NM_SETTING_WIRELESS_SECURITY_PSK, qPrintable(key),
90− NULL);
91− } else if (pToken->keyMgmt == "none") {
92− g_object_set(G_OBJECT(pToken->wisec),
93− NM_SETTING_WIRELESS_SECURITY_WEP_KEY0, qPrintable(key),
94− NULL);
95− }
96−
97− GHashTable *settings = nm_connection_to_hash(pToken->connection,
98− NM_SETTING_HASH_FLAG_ALL);
99−
100− unity_settings_secret_agent_provide_secret(m_agent,
101− pToken->id, settings);
102− g_hash_table_unref(settings);
103− delete pToken;
104−}
105−
106−void NetworkAgent::cancel(const QVariant &token)
107−{
108− NetworkAgentToken *pToken = (NetworkAgentToken *) token.value<void *>();
109− if (pToken != NULL) {
110− unity_settings_secret_agent_cancel_request(m_agent, pToken->id);
111− delete pToken;
112− }
113−}
114−
115−void NetworkAgent::onSecretRequested(UnitySettingsSecretAgent* /*agent*/,
116− guint id,
117− NMConnection* connection,
118− const char* /*setting_name*/,
119− const char** /*hints*/,
120− NMSecretAgentGetSecretsFlags /*flags*/,
121− NetworkAgent* self)
122−{
123− NetworkAgentToken *token = new NetworkAgentToken(connection,
124− NULL,
125− id,
126− NULL);
127−
128− token->wisec = nm_connection_get_setting_wireless_security(connection);
129− if (token->wisec) {
130− token->keyMgmt = nm_setting_wireless_security_get_key_mgmt(token->wisec);
131− }
132−
133− QVariant varToken = qVariantFromValue((void *) token);
134− Q_EMIT self->secretRequested(varToken);
135−}
136−
137−void NetworkAgent::onSecretRequestCancelled(UnitySettingsSecretAgent* /*agent*/,
138− guint /*id*/,
139− NMConnection* /*connection*/,
140− const char* /*setting_name*/,
141− const char** /*hints*/,
142− NMSecretAgentGetSecretsFlags /*flags*/,
143− NetworkAgent* /*self*/)
144−{
145− //Do nothing for now
146−}
plugins/Unity/IndicatorsLegacy/Network/networkagent.hdeleted−65
@@ -1,65 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Alberto Ruiz <alberto.ruiz@canonical.com>
18− * Renato Araujo Oliveira Filho <renato@canonical.com>
19− */
20−
21−#ifndef NETWORKAGENT_H
22−#define NETWORKAGENT_H
23−
24−#include "secret-agent.h"
25−
26−#include <QObject>
27−
28−class NetworkAgentToken;
29−
30−class NetworkAgent : public QObject
31−{
32− Q_OBJECT
33−public:
34− NetworkAgent(QObject *parent=0);
35− ~NetworkAgent();
36−
37− Q_INVOKABLE void authenticate(const QVariant &token, const QString &key);
38− Q_INVOKABLE void cancel(const QVariant &token);
39−
40−Q_SIGNALS:
41− void secretRequested(const QVariant &token);
42− void secretRequestCancelled();
43−
44−private:
45− UnitySettingsSecretAgent *m_agent;
46−
47− static void onSecretRequested(UnitySettingsSecretAgent *agent,
48− guint id,
49− NMConnection *connection,
50− const char *setting_name,
51− const char **hints,
52− NMSecretAgentGetSecretsFlags flags,
53− NetworkAgent *self);
54−
55− static void onSecretRequestCancelled(UnitySettingsSecretAgent *agent,
56− guint id,
57− NMConnection *connection,
58− const char *setting_name,
59− const char **hints,
60− NMSecretAgentGetSecretsFlags flags,
61− NetworkAgent *self);
62−
63−};
64−
65−#endif
plugins/Unity/IndicatorsLegacy/Network/plugin.hdeleted−32
@@ -1,32 +0,0 @@
1−/*
2− * Copyright (C) 2012 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Author: Nick Dedekind <nick.dedekind@canonical.com>
17− */
18−
19−#ifndef INDICATORS_NETWORK_PLUGIN_H
20−#define INDICATORS_NETWORK_PLUGIN_H
21−
22−#include <QtQml/QQmlExtensionPlugin>
23−
24−class IndicatorsNetworkPlugin : public QQmlExtensionPlugin
25−{
26− Q_OBJECT
27− Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
28−public:
29− void registerTypes(const char *uri);
30−};
31−
32−#endif // INDICATORS_NETWORK_PLUGIN_H
plugins/Unity/IndicatorsLegacy/Network/qml/AccessPoint.qmldeleted−68
@@ -1,68 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Ubuntu.Components 0.1
22−import Ubuntu.Components.ListItems 0.1 as ListItem
23−import Unity.IndicatorsLegacy 0.1 as Indicators
24−
25−Indicators.MenuItem {
26− id: accessPoint
27− property variant actionWifiApStrength : menu && actionGroup ? actionGroup.action(menu.extra.canonical_wifi_ap_strength_action) : null
28− property variant wifiApStrength : actionWifiApStrength && actionWifiApStrength.valid ? actionWifiApStrength.state : "0"
29−
30− function getNetworkIcon(data) {
31− var imageName = "nm-signal-100"
32− var signalStrength = parseInt(wifiApStrength)
33−
34− if (data.extra.canonical_wifi_ap_is_adhoc) {
35− imageName = "nm-adhoc";
36− } else if (signalStrength == 0) {
37− imageName = "nm-signal-00";
38− } else if (signalStrength <= 25) {
39− imageName = "nm-signal-25";
40− } else if (signalStrength <= 50) {
41− imageName = "nm-signal-50";
42− } else if (signalStrength <= 75) {
43− imageName = "nm-signal-75";
44− }
45−
46− if (data.extra.canonical_wifi_ap_is_secure) {
47− imageName += "-secure";
48− }
49−
50− return "image://theme/" + imageName;
51− }
52−
53− icon: menu && wifiApStrength ? getNetworkIcon(menu) : "image://theme/wifi-none"
54− iconFrame: false
55− control: CheckBox {
56− id: checkBoxActive
57− height: units.gu(4)
58− width: units.gu(4)
59− anchors.centerIn: parent
60− }
61−
62− Indicators.MenuActionBinding {
63− actionGroup: accessPoint.actionGroup
64− action: menu ? menu.action : ""
65− target: checkBoxActive
66− property: "checked"
67− }
68−}
plugins/Unity/IndicatorsLegacy/Network/qml/CMakeLists.txtdeleted−5
@@ -1,5 +0,0 @@
1−# export_qmlplugin macro
2−include(Plugins)
3−
4−# export the qmldir, *.qml files.
5−export_qmlfiles(Unity.IndicatorsLegacy.Network Unity/IndicatorsLegacy/Network)
plugins/Unity/IndicatorsLegacy/Network/qml/PasswordPage.qmldeleted−88
@@ -1,88 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Ubuntu.Components 0.1
22−import Ubuntu.Components.ListItems 0.1 as ListItem
23−import Unity.IndicatorsLegacy 0.1 as Indicators
24−
25−Page {
26− id: pagePassword
27−
28− property variant agent
29− property variant token
30−
31− anchors.fill: parent
32− title: "Network Authentication"
33−
34− Column {
35− anchors {
36− left: parent.left
37− right: parent.right
38− }
39−
40− Indicators.SectionMenuItem {
41− label: "Authentication"
42− }
43−
44− Indicators.MenuItem {
45− implicitHeight: password.height + units.gu(1)
46−
47− PasswordTextField {
48− id: password
49− anchors {
50− left: parent.left
51− right: parent.right
52− margins: units.gu(3)
53− verticalCenter: parent.verticalCenter
54− }
55− }
56− }
57−
58− Indicators.MenuItem {
59− Row {
60− anchors {
61− right: parent.right
62− verticalCenter: parent.verticalCenter
63− margins: units.gu(3)
64− }
65−
66− spacing: units.gu(1)
67−
68− Button {
69− text: "Cancel"
70− width: units.gu(10)
71− onClicked: {
72− agent.cancel(token);
73− pageStack.pop();
74− }
75− }
76−
77− Button {
78− text: "OK"
79− width: units.gu(10)
80− onClicked: {
81− agent.authenticate(token, password.text);
82− pageStack.pop();
83− }
84− }
85− }
86− }
87− }
88−}
plugins/Unity/IndicatorsLegacy/Network/qml/PasswordTextField.qmldeleted−68
@@ -1,68 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Ubuntu.Components 0.1
22−
23−Item {
24− id: textMenu
25−
26− property alias text: textField.text
27−
28− height: contentColumn.height
29−
30− Column {
31− id: contentColumn
32− spacing: units.gu(0.5)
33− anchors {
34− left: parent.left
35− right: parent.right
36− }
37−
38− TextField {
39− id: textField
40−
41− anchors {
42− left: parent.left
43− right: parent.right
44− }
45−
46− placeholderText: "Password"
47− echoMode: showPassword.checked ? TextInput.Normal : TextInput.Password
48− }
49−
50− Row {
51− anchors {
52− left: parent.left
53− right: parent.right
54− }
55−
56− spacing: units.gu(1)
57−
58− CheckBox {
59− id: showPassword
60− }
61−
62− Label {
63− text: "Show password"
64− anchors.verticalCenter: showPassword.verticalCenter
65− }
66− }
67− }
68−}
plugins/Unity/IndicatorsLegacy/Network/qml/WifiSection.qmldeleted−34
@@ -1,34 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Ubuntu.Components 0.1
22−import Unity.IndicatorsLegacy 0.1 as Indicators
23−
24−Indicators.SectionMenuItem {
25− id: wifiSectionMenu
26−
27− Indicators.MenuAction {
28− id: busyAction
29− actionGroup: wifiSectionMenu.actionGroup
30− action: menu ? menu.extra.canonical_busy_action : ""
31− }
32−
33− busy: busyAction.valid ? busyAction.state : false
34−}
plugins/Unity/IndicatorsLegacy/Network/qml/qmldirdeleted−9
@@ -1,9 +0,0 @@
1−module Unity.IndicatorsLegacy.Network
2−plugin IndicatorsLegacyNetworkQml
3−typeinfo plugin.qmltypes
4−
5−NetworkPage 0.1 NetworkPage.qml
6−AccessPoint 0.1 AccessPoint.qml
7−PasswordPage 0.1 PasswordPage.qml
8−PasswordTextField 0.1 PasswordTextField.qml
9−WifiSection 0.1 WifiSection.qml
plugins/Unity/IndicatorsLegacy/Network/secret-agent.cdeleted−382
@@ -1,382 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Alberto Ruiz <alberto.ruiz@canonical.com>
18− * Renato Araujo Oliveira Filho <renato@canonical.com>
19− */
20−
21−
22−#include <glib.h>
23−#include <glib-object.h>
24−#include <nm-secret-agent.h>
25−#include "secret-agent.h"
26−
27−#define UNITY_SETTINGS_TYPE_SECRET_AGENT (unity_settings_secret_agent_get_type ())
28−#define UNITY_SETTINGS_SECRET_AGENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), UNITY_SETTINGS_TYPE_SECRET_AGENT, UnitySettingsSecretAgent))
29−#define UNITY_SETTINGS_SECRET_AGENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), UNITY_SETTINGS_TYPE_SECRET_AGENT, UnitySettingsSecretAgentClass))
30−#define UNITY_SETTINGS_IS_SECRET_AGENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), UNITY_SETTINGS_TYPE_SECRET_AGENT))
31−#define UNITY_SETTINGS_IS_SECRET_AGENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), UNITY_SETTINGS_TYPE_SECRET_AGENT))
32−#define UNITY_SETTINGS_SECRET_AGENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), UNITY_SETTINGS_TYPE_SECRET_AGENT, UnitySettingsSecretAgentClass))
33−#define UNITY_SETTINGS_SECRET_AGENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), UNITY_SETTINGS_TYPE_SECRET_AGENT, UnitySettingsSecretAgentPrivate))
34−
35−#define AGENT_ID "com.canonical.settings.network.nm-agent"
36−
37−static gpointer unity_settings_secret_agent_parent_class = NULL;
38−
39−typedef struct _UnitySettingsSecretAgentPrivate UnitySettingsSecretAgentPrivate;
40−
41−struct _UnitySettingsSecretAgentPrivate {
42− GQueue *requests;
43−};
44−
45−typedef struct _SecretRequest {
46− gint id;
47− NMSecretAgent *agent;
48− NMConnection *connection;
49− const char *connection_path;
50− const char *setting_name;
51− const char **hints;
52− NMSecretAgentGetSecretsFlags flags;
53− NMSecretAgentGetSecretsFunc callback;
54− gpointer callback_data;
55−} SecretRequest;
56−
57−GType unity_settings_secret_agent_get_type (void) G_GNUC_CONST;
58−enum {
59− UNITY_SETTINGS_SECRET_AGENT_DUMMY_PROPERTY
60−};
61−
62−enum {
63− SECRET_REQUESTED,
64− REQUEST_CANCELLED,
65− LAST_SIGNAL
66−};
67−
68−static guint signals[LAST_SIGNAL] = { 0 };
69−
70−UnitySettingsSecretAgent* unity_settings_secret_agent_new (void);
71−UnitySettingsSecretAgent* unity_settings_secret_agent_construct (GType object_type);
72−
73−int
74−secret_request_find (SecretRequest *req,
75− guint *id)
76−{
77− if (req->id > *id)
78− return -1;
79−
80− if (req->id < *id)
81− return 1;
82−
83− return 0;
84−}
85−
86−void
87−unity_settings_secret_agent_provide_secret (UnitySettingsSecretAgent *agent,
88− guint request,
89− GHashTable *secrets)
90−{
91− GList *iter;
92− SecretRequest *req;
93− UnitySettingsSecretAgentPrivate *priv = agent->priv;
94−
95− iter = g_queue_find_custom (priv->requests,
96− &request,
97− (GCompareFunc)secret_request_find);
98−
99− if (iter == NULL || iter->data == NULL)
100− {
101− g_warning ("Secret request with id <%d> was not found", (int)request);
102− return;
103− }
104−
105− req = iter->data;
106−
107− req->callback (NM_SECRET_AGENT (agent),
108− req->connection,
109− secrets,
110− NULL,
111− req->callback_data);
112−
113− g_queue_remove_all (priv->requests, req);
114− g_free (req);
115− return;
116−}
117−
118−void
119−free_request (SecretRequest *req)
120−{
121− g_object_unref (req->connection);
122− g_free (req);
123−}
124−
125−void
126−unity_settings_secret_agent_cancel_request (UnitySettingsSecretAgent *agent,
127− guint request)
128−{
129− GList *iter;
130− SecretRequest *req;
131− UnitySettingsSecretAgentPrivate *priv = agent->priv;
132− GError *error;
133−
134− iter = g_queue_find_custom (priv->requests,
135− &request,
136− (GCompareFunc)secret_request_find);
137−
138− if (iter == NULL || iter->data == NULL)
139− {
140− g_warning ("Secret request with id <%d> was not found", (int)request);
141− return;
142− }
143−
144− req = iter->data;
145− error = g_error_new (NM_SECRET_AGENT_ERROR,
146− NM_SECRET_AGENT_ERROR_INTERNAL_ERROR,
147− "This secret request was canceled by the user.");
148−
149− req->callback (NM_SECRET_AGENT (agent),
150− req->connection,
151− NULL,
152− error,
153− req->callback_data);
154−
155− g_queue_remove_all (priv->requests, req);
156− free_request (req);
157− return;
158−}
159−
160−static void
161−delete_secrets (NMSecretAgent *agent,
162− NMConnection *connection,
163− const char *connection_path,
164− NMSecretAgentDeleteSecretsFunc callback,
165− gpointer callback_data)
166−{
167− g_debug ("delete secrets");
168−}
169−
170−/* If it returns G_MAXUINT it's considered an error */
171−static guint
172−find_available_id (UnitySettingsSecretAgentPrivate *priv)
173−{
174− guint i = 0;
175− guint candidate = 0;
176−
177− if (g_queue_get_length (priv->requests) == G_MAXUINT)
178− return G_MAXUINT;
179−
180− while (i < g_queue_get_length (priv->requests))
181− {
182− SecretRequest *req = (SecretRequest*)g_queue_peek_nth (priv->requests, i);
183−
184− if (req->id == candidate)
185− {
186− candidate++;
187− i = 0;
188− }
189− else
190− {
191− i++;
192− }
193− }
194−
195− return i;
196−}
197−
198−static void
199−get_secrets (NMSecretAgent *agent,
200− NMConnection *connection,
201− const char *connection_path,
202− const char *setting_name,
203− const char **hints,
204− NMSecretAgentGetSecretsFlags flags,
205− NMSecretAgentGetSecretsFunc callback,
206− gpointer callback_data)
207−{
208− guint id;
209− UnitySettingsSecretAgentPrivate *priv = UNITY_SETTINGS_SECRET_AGENT_GET_PRIVATE (agent);
210− SecretRequest *req = NULL;
211−
212− if (flags == NM_SECRET_AGENT_GET_SECRETS_FLAG_NONE)
213− {
214− GError *error = g_error_new (NM_SECRET_AGENT_ERROR,
215− NM_SECRET_AGENT_ERROR_INTERNAL_ERROR,
216− "No password found for this connection.");
217− callback (agent, connection, NULL, error, callback_data);
218− g_error_free (error);
219− return;
220− }
221−
222− id = find_available_id (priv);
223− if (id == G_MAXUINT)
224− {
225− GError *error = g_error_new (NM_SECRET_AGENT_ERROR,
226− NM_SECRET_AGENT_ERROR_INTERNAL_ERROR,
227− "Reached maximum number of requests.");
228− callback (agent, connection, NULL, error, callback_data);
229− g_error_free (error);
230− return;
231− }
232−
233− /* Adding a request */
234− req = (SecretRequest*) g_malloc0 (sizeof (SecretRequest));
235− *req = ((SecretRequest)
236− { id,
237− agent,
238− connection,
239− connection_path,
240− setting_name,
241− hints,
242− flags,
243− callback,
244− callback_data });
245−
246− g_object_ref (connection);
247−
248− g_queue_push_tail (priv->requests, req);
249−
250− g_signal_emit_by_name (agent,
251− UNITY_SETTINGS_SECRET_AGENT_SECRET_REQUESTED,
252− id,
253− connection,
254− setting_name,
255− hints,
256− flags);
257−}
258−
259−static void
260−save_secrets (NMSecretAgent *agent,
261− NMConnection *connection,
262− const char *connection_path,
263− NMSecretAgentSaveSecretsFunc callback,
264− gpointer callback_data)
265−{
266− g_debug ("save secrets");
267−}
268−
269−static void
270−cancel_get_secrets (NMSecretAgent *agent,
271− const char *connection_path,
272− const char *setting_name)
273−{
274− g_debug ("cancel get secrets");
275−}
276−
277−UnitySettingsSecretAgent*
278−unity_settings_secret_agent_construct (GType object_type)
279−{
280− UnitySettingsSecretAgent * self = NULL;
281− self = (UnitySettingsSecretAgent*) g_object_new (object_type,
282− NM_SECRET_AGENT_IDENTIFIER, AGENT_ID,
283− NULL);
284− return self;
285−}
286−
287−
288−UnitySettingsSecretAgent*
289−unity_settings_secret_agent_new (void)
290−{
291− return unity_settings_secret_agent_construct (UNITY_SETTINGS_TYPE_SECRET_AGENT);
292−}
293−
294−static void
295−destroy_pending_request (gpointer data)
296−{
297− SecretRequest* req = (SecretRequest*)data;
298− /* Reporting the cancellation of all pending requests */
299− g_signal_emit_by_name (req->agent,
300− UNITY_SETTINGS_SECRET_AGENT_REQUEST_CANCELLED,
301− req->id);
302−
303− free_request (req);
304−}
305−
306−static void
307−unity_settings_secret_agent_finalize (GObject *agent)
308−{
309− UnitySettingsSecretAgentPrivate *priv = UNITY_SETTINGS_SECRET_AGENT_GET_PRIVATE (agent);
310−
311− g_queue_free_full (priv->requests, destroy_pending_request);
312−}
313−
314−static void
315−unity_settings_secret_agent_class_init (UnitySettingsSecretAgentClass *klass)
316−{
317− unity_settings_secret_agent_parent_class = g_type_class_peek_parent (klass);
318− NMSecretAgentClass *parent_class = NM_SECRET_AGENT_CLASS (klass);
319− parent_class->get_secrets = get_secrets;
320− parent_class->save_secrets = save_secrets;
321− parent_class->delete_secrets = delete_secrets;
322− parent_class->cancel_get_secrets = cancel_get_secrets;
323−
324− g_type_class_add_private (klass, sizeof(UnitySettingsSecretAgentPrivate));
325− G_OBJECT_CLASS (klass)->finalize = unity_settings_secret_agent_finalize;
326−
327−
328− signals[SECRET_REQUESTED] = g_signal_new (UNITY_SETTINGS_SECRET_AGENT_SECRET_REQUESTED,
329− G_OBJECT_CLASS_TYPE (G_OBJECT_CLASS (klass)),
330− G_SIGNAL_RUN_FIRST,
331− G_STRUCT_OFFSET (UnitySettingsSecretAgentClass, secret_requested),
332− NULL, NULL, NULL,
333− G_TYPE_NONE, 5,
334− G_TYPE_UINT, G_TYPE_POINTER, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_UINT);
335−
336− signals[REQUEST_CANCELLED] = g_signal_new (UNITY_SETTINGS_SECRET_AGENT_REQUEST_CANCELLED,
337− G_OBJECT_CLASS_TYPE (G_OBJECT_CLASS (klass)),
338− G_SIGNAL_RUN_FIRST,
339− G_STRUCT_OFFSET (UnitySettingsSecretAgentClass, request_cancelled),
340− NULL, NULL, NULL,
341− G_TYPE_NONE, 1,
342− G_TYPE_UINT);
343−}
344−
345−
346−static void
347−unity_settings_secret_agent_instance_init (UnitySettingsSecretAgent *self)
348−{
349− self->priv = UNITY_SETTINGS_SECRET_AGENT_GET_PRIVATE (self);
350− self->priv->requests = g_queue_new ();
351−}
352−
353−GType
354−unity_settings_secret_agent_get_type (void)
355−{
356− static volatile gsize unity_settings_secret_agent_type_id__volatile = 0;
357− if (g_once_init_enter (&unity_settings_secret_agent_type_id__volatile))
358− {
359− static const GTypeInfo g_define_type_info =
360− {
361− sizeof (UnitySettingsSecretAgentClass),
362− (GBaseInitFunc) NULL,
363− (GBaseFinalizeFunc) NULL,
364− (GClassInitFunc) unity_settings_secret_agent_class_init,
365− (GClassFinalizeFunc) NULL,
366− NULL,
367− sizeof (UnitySettingsSecretAgent),
368− 0,
369− (GInstanceInitFunc) unity_settings_secret_agent_instance_init,
370− NULL
371− };
372− GType unity_settings_secret_agent_type_id;
373− unity_settings_secret_agent_type_id = g_type_register_static (NM_TYPE_SECRET_AGENT,
374− "UnitySettingsSecretAgent",
375− &g_define_type_info,
376− 0);
377− g_once_init_leave (&unity_settings_secret_agent_type_id__volatile,
378− unity_settings_secret_agent_type_id);
379− }
380−
381− return unity_settings_secret_agent_type_id__volatile;
382−}
plugins/Unity/IndicatorsLegacy/Network/secret-agent.hdeleted−102
@@ -1,102 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Alberto Ruiz <alberto.ruiz@canonical.com>
18− * Renato Araujo Oliveira Filho <renato@canonical.com>
19− */
20−
21−#ifndef __SECRET_AGENT_H__
22−#define __SECRET_AGENT_H__
23−
24−#include <glib.h>
25−#include <glib-object.h>
26−#include <nm-secret-agent.h>
27−
28−/*
29− * This class is a basic implementation of the NetworkManager SecretAgent base class.
30− *
31− * The purpose of this class is to handle credential requests from the network,
32− * for example, from a WiFi hotspot or a VPN network.
33− *
34− * It queues requests objects (SecretRequest) on a GQueue in the private struct
35− * of the class. And notifies the consumer of the class through the "secret-request"
36− * and the "request-cancelled" signals with the following callback prototypes:
37− *
38− * void (*secret_requested) (UnitySettingsSecretAgent *self,
39− * guint id,
40− * NMConnection *connection,
41− * const char *setting_name,
42− * const char **hints,
43− * NMSecretAgentGetSecretsFlags flags,
44− * gpointer user_data);
45− *
46− * void (*request_cancelled) (UnitySettingsSecretAgent *self,
47− * guint id,
48− * gpointer user_data);
49− *
50− */
51−
52−
53−G_BEGIN_DECLS
54−
55−
56−#define UNITY_SETTINGS_TYPE_SECRET_AGENT (unity_settings_secret_agent_get_type ())
57−#define UNITY_SETTINGS_SECRET_AGENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), UNITY_SETTINGS_TYPE_SECRET_AGENT, UnitySettingsSecretAgent))
58−#define UNITY_SETTINGS_SECRET_AGENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), UNITY_SETTINGS_TYPE_SECRET_AGENT, UnitySettingsSecretAgentClass))
59−#define UNITY_SETTINGS_IS_SECRET_AGENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), UNITY_SETTINGS_TYPE_SECRET_AGENT))
60−#define UNITY_SETTINGS_IS_SECRET_AGENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), UNITY_SETTINGS_TYPE_SECRET_AGENT))
61−#define UNITY_SETTINGS_SECRET_AGENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), UNITY_SETTINGS_TYPE_SECRET_AGENT, UnitySettingsSecretAgentClass))
62−
63−#define UNITY_SETTINGS_SECRET_AGENT_SECRET_REQUESTED "secret-requested"
64−#define UNITY_SETTINGS_SECRET_AGENT_REQUEST_CANCELLED "request-cancelled"
65−
66−typedef struct _UnitySettingsSecretAgent UnitySettingsSecretAgent;
67−typedef struct _UnitySettingsSecretAgentClass UnitySettingsSecretAgentClass;
68−typedef struct _UnitySettingsSecretAgentPrivate UnitySettingsSecretAgentPrivate;
69−
70−struct _UnitySettingsSecretAgent {
71− NMSecretAgent parent_instance;
72− UnitySettingsSecretAgentPrivate * priv;
73−};
74−
75−struct _UnitySettingsSecretAgentClass {
76− NMSecretAgentClass parent_class;
77−
78− void (*secret_requested) (UnitySettingsSecretAgent *self,
79− guint id,
80− NMConnection *connection,
81− const char *setting_name,
82− const char **hints,
83− NMSecretAgentGetSecretsFlags flags);
84−
85− void (*request_cancelled) (UnitySettingsSecretAgent *self,
86− guint id);
87−};
88−
89−
90−GType unity_settings_secret_agent_get_type (void) G_GNUC_CONST;
91−UnitySettingsSecretAgent* unity_settings_secret_agent_new (void);
92−UnitySettingsSecretAgent* unity_settings_secret_agent_construct (GType object_type);
93−
94−void unity_settings_secret_agent_provide_secret (UnitySettingsSecretAgent *agent,
95− guint request,
96− GHashTable *secrets);
97−void unity_settings_secret_agent_cancel_request (UnitySettingsSecretAgent *agent,
98− guint request);
99−
100−G_END_DECLS
101−
102−#endif
plugins/Unity/IndicatorsLegacy/flatmenuproxymodel.cppdeleted−288
@@ -1,288 +0,0 @@
1−/*
2− * Copyright 2012 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− */
19−
20−extern "C" {
21−#include <gio/gio.h>
22−}
23−
24−#include "flatmenuproxymodel.h"
25−#include <QString>
26−#include <QStringList>
27−
28−FlatMenuProxyModel::FlatMenuProxyModel(QAbstractItemModel *source)
29− : QAbstractProxyModel(source),
30− m_rowCount(0)
31−{
32− m_model = new QDBusMenuModel;
33− setSourceModel(m_model);
34−}
35−
36−/*! \internal */
37−FlatMenuProxyModel::~FlatMenuProxyModel()
38−{
39− delete m_model;
40−}
41−
42−void FlatMenuProxyModel::setSourceModel(QAbstractItemModel *source)
43−{
44− if (sourceModel()) {
45− QAbstractItemModel *oldSource = sourceModel();
46− if (oldSource == source) {
47− return;
48− }
49−
50− oldSource->disconnect(this);
51− }
52−
53− QAbstractProxyModel::setSourceModel(source);
54−
55− if (source) {
56−
57− // FIXME - not working correctly with dynamic inserts/removes
58− // FIXME 2 - We're using Queud connections as a workaround to QTBUG-32859
59− // The signals from qmenumodel are coming straight off the glib event loop,
60− // which is not supported and has the effect of listview delegates not to be deleted.
61−
62− connect(source,
63− SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int)),
64− SLOT(onModelAboutToBeReset()), Qt::QueuedConnection);
65− connect(source,
66− SIGNAL(rowsInserted(QModelIndex,int,int)),
67− SLOT(onModelReset()), Qt::QueuedConnection);
68−
69− connect(source,
70− SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
71− SLOT(onModelAboutToBeReset()), Qt::QueuedConnection);
72− connect(source,
73− SIGNAL(rowsRemoved(QModelIndex,int,int)),
74− SLOT(onModelReset()), Qt::QueuedConnection);
75−
76− connect(source,
77− SIGNAL(modelAboutToBeReset()),
78− SLOT(onModelAboutToBeReset()), Qt::QueuedConnection);
79− connect(source,
80− SIGNAL(modelReset()),
81− SLOT(onModelReset()), Qt::QueuedConnection);
82−
83− //Connection args
84− connect(source,
85− SIGNAL(busTypeChanged(DBusEnums::BusType)),
86− SIGNAL(busTypeChanged()));
87−
88− connect(source,
89− SIGNAL(busNameChanged(const QString&)),
90− SIGNAL(busNameChanged()));
91−
92− connect(source,
93− SIGNAL(objectPathChanged(const QString&)),
94− SIGNAL(objectPathChanged()));
95−
96− connect(source,
97− SIGNAL(statusChanged(DBusEnums::ConnectionStatus)),
98− SIGNAL(statusChanged()), Qt::QueuedConnection);
99−
100− // initiliaze rowCount
101− QModelIndex lastItem = source->index(source->rowCount() - 1, 0);
102− m_rowCount = recursiveRowCount(lastItem);
103− } else {
104− m_rowCount = 0;
105− }
106−
107− Q_EMIT countChanged();
108−}
109−
110−void FlatMenuProxyModel::setBusName(const QString &busName)
111−{
112− m_model->setBusName(busName);
113−}
114−
115−QString FlatMenuProxyModel::busName() const
116−{
117− return m_model->busName();
118−}
119−
120−void FlatMenuProxyModel::setObjectPath(const QString &busPath)
121−{
122− m_model->setObjectPath(busPath);
123−}
124−
125−QString FlatMenuProxyModel::objectPath() const
126−{
127− return m_model->objectPath();
128−}
129−
130−int FlatMenuProxyModel::status() const
131−{
132− return m_model->status();
133−}
134−
135−DBusEnums::BusType FlatMenuProxyModel::busType() const
136−{
137− return m_model->busType();
138−}
139−
140−void FlatMenuProxyModel::setIntBusType(int type)
141−{
142− m_model->setBusType((DBusEnums::BusType) type);
143−}
144−
145−void FlatMenuProxyModel::start()
146−{
147− m_model->start();
148−}
149−
150−void FlatMenuProxyModel::stop()
151−{
152− m_model->stop();
153−}
154−
155−QModelIndex FlatMenuProxyModel::mapFromSource(const QModelIndex &index) const
156−{
157− if (!index.isValid()) {
158− return QModelIndex();
159− }
160−
161− QModelIndex result = createIndex(rowOffsetOf(index, index.row()), 0);
162− return result;
163−}
164−
165−QModelIndex FlatMenuProxyModel::mapToSource(const QModelIndex &index) const
166−{
167− if (sourceModel() && m_indexCache.contains(index.row())) {
168− QString key = m_indexCache.value(index.row());
169− QStringList sections = key.split('.', QString::SkipEmptyParts);
170− QModelIndex sourceIndex = QModelIndex();
171− for(int i=0; i < sections.size(); i++) {
172− sourceIndex = sourceModel()->index(sections.at(i).toInt(), 9, sourceIndex);
173− }
174− return sourceIndex;
175− } else {
176− return QModelIndex();
177− }
178−}
179−
180−QModelIndex FlatMenuProxyModel::index(int row, int sectionRow, const QModelIndex &parent, const QString &key) const
181−{
182− for (int i = 0, count = 0; i < sourceModel()->rowCount(parent); i++) {
183− QModelIndex sourceIndex = sourceModel()->index(i, 0, parent);
184− int indexCount = recursiveRowCount(sourceIndex);
185−
186− if (count == sectionRow) {
187− QString sectionKey = key + "." + QString::number(i);
188− m_indexCache.insert(row, sectionKey);
189− return createIndex(row, 0);
190− } else if ((count + indexCount) >= sectionRow) {
191− count++;
192− return index(row, sectionRow - count, sourceIndex, key + "." + QString::number(i));
193− }
194−
195− count += indexCount + 1;
196− }
197− return QModelIndex();
198−}
199−
200−QModelIndex FlatMenuProxyModel::index(int row, int, const QModelIndex &) const
201−{
202− return index(row, row, QModelIndex(), "");
203−}
204−
205−QModelIndex FlatMenuProxyModel::parent(const QModelIndex &) const
206−{
207− return QModelIndex();
208−}
209−
210−int FlatMenuProxyModel::columnCount(const QModelIndex &) const
211−{
212− return 1;
213−}
214−
215−int FlatMenuProxyModel::rowCount(const QModelIndex &) const
216−{
217− return m_rowCount;
218−}
219−
220−int FlatMenuProxyModel::count() const
221−{
222− return rowCount(QModelIndex());
223−}
224−
225−void FlatMenuProxyModel::onModelAboutToBeReset()
226−{
227− beginResetModel();
228−}
229−
230−void FlatMenuProxyModel::onModelReset()
231−{
232− // initiliaze rowCount
233− m_rowCount = 0;
234− for (int i = 0, iMax = sourceModel()->rowCount(); i < iMax; i++) {
235− QModelIndex index = sourceModel()->index(i, 0);
236− m_rowCount += recursiveRowCount(index) + 1;
237− }
238− m_indexCache.clear();
239− endResetModel();
240− Q_EMIT countChanged();
241−}
242−
243−int FlatMenuProxyModel::recursiveRowCount(const QModelIndex &index) const
244−{
245− int size = sourceModel()->rowCount(index);
246− for (int i=0, iMax=size; i < iMax; i++) {
247− QModelIndex currentIndex = sourceModel()->index(i, 0, index);
248− size += recursiveRowCount(currentIndex);
249− }
250−
251− return size;
252−}
253−
254−int FlatMenuProxyModel::rowOffsetOf(const QModelIndex &index, int row, bool inclusive) const
255−{
256− int offset = 0;
257−
258− QModelIndex parent = index.parent();
259−
260− // Check row 0 offset
261− while(parent.isValid()) {
262− offset += 1;
263− for (int i = 0; i < parent.row(); i++) {
264− QModelIndex currentIndex = sourceModel()->index(i, 0, parent);
265− offset += recursiveRowCount(currentIndex) + 1;
266− }
267− parent = parent.parent();
268− }
269−
270− // Check index.row() offset
271− for(int i = 0; i < row; i++) {
272− QModelIndex currentIndex = sourceModel()->index(i, 0, index.parent());
273− offset += recursiveRowCount(currentIndex) + 1;
274− }
275−
276− if (inclusive) {
277− // itself
278− QModelIndex currentIndex = sourceModel()->index(row, 0, index.parent());
279− offset += recursiveRowCount(currentIndex);
280− }
281−
282− return offset;
283−}
284−
285−QVariant FlatMenuProxyModel::data(int row, int role) const
286−{
287− return QAbstractProxyModel::data(index(row, 0), role);
288−}
plugins/Unity/IndicatorsLegacy/flatmenuproxymodel.hdeleted−93
@@ -1,93 +0,0 @@
1−/*
2− * Copyright 2012 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− */
19−
20−#ifndef FLATMENUPROXYMODEL_H
21−#define FLATMENUPROXYMODEL_H
22−
23−#include "unityindicatorsglobal.h"
24−
25−#include <QAbstractProxyModel>
26−#include <qdbusmenumodel.h>
27−
28−class SectionInfo;
29−
30−class UNITYINDICATORS_EXPORT FlatMenuProxyModel : public QAbstractProxyModel
31−{
32− Q_OBJECT
33− Q_PROPERTY(int count READ count NOTIFY countChanged)
34− Q_PROPERTY(int busType READ busType WRITE setIntBusType NOTIFY busTypeChanged)
35− Q_PROPERTY(QString busName READ busName WRITE setBusName NOTIFY busNameChanged)
36− Q_PROPERTY(QString objectPath READ objectPath WRITE setObjectPath NOTIFY objectPathChanged)
37− Q_PROPERTY(int status READ status NOTIFY statusChanged)
38−
39− Q_ENUMS(Roles)
40−public:
41− FlatMenuProxyModel(QAbstractItemModel *source=0);
42− ~FlatMenuProxyModel();
43−
44− void setSourceModel(QAbstractItemModel * sourceModel);
45−
46− Q_INVOKABLE QVariant data(int row, int role = Qt::DisplayRole) const;
47−
48− QModelIndex mapFromSource(const QModelIndex &index) const;
49− QModelIndex mapToSource(const QModelIndex &index) const;
50−
51− QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const;
52− QModelIndex parent(const QModelIndex &index) const;
53− int rowCount(const QModelIndex &parent = QModelIndex()) const;
54− int count() const;
55− int columnCount(const QModelIndex &parent) const;
56−
57− void setBusName(const QString &busName);
58− QString busName() const;
59−
60− void setObjectPath(const QString &busName);
61− QString objectPath() const;
62−
63− DBusEnums::BusType busType() const;
64− void setIntBusType(int type);
65−
66− int status() const;
67−
68−public Q_SLOTS:
69− void onModelAboutToBeReset();
70− void onModelReset();
71−
72− void start();
73− void stop();
74−
75−Q_SIGNALS:
76− void countChanged();
77−
78− void busTypeChanged();
79− void busNameChanged();
80− void objectPathChanged();
81− void statusChanged();
82−
83−private:
84− QDBusMenuModel *m_model;
85− mutable QMap<int, QString> m_indexCache;
86− int m_rowCount;
87−
88− int rowOffsetOf(const QModelIndex &index, int row, bool inclusive = false) const;
89− int recursiveRowCount(const QModelIndex &index) const;
90− QModelIndex index(int row, int rowCount, const QModelIndex &parent, const QString &key) const;
91−};
92−
93−#endif
plugins/Unity/IndicatorsLegacy/modelprinter.cppdeleted−114
@@ -1,114 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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−// self
21−#include "modelprinter.h"
22−
23−// Qt
24−#include <QTextStream>
25−
26−ModelPrinter::ModelPrinter(QObject *parent)
27− : QObject(parent)
28− , m_model(NULL)
29−{
30−}
31−
32−void ModelPrinter::setSourceModel(QAbstractItemModel * sourceModel)
33−{
34− if (m_model != NULL) {
35− disconnect(m_model);
36− }
37− if (m_model != sourceModel) {
38− m_model = sourceModel;
39− Q_EMIT modelChanged();
40− Q_EMIT textChanged();
41− }
42− if (m_model != NULL) {
43− connect(m_model, SIGNAL(modelReset()), this, SIGNAL(textChanged()));
44− connect(m_model, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SIGNAL(textChanged()));
45− connect(m_model, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SIGNAL(textChanged()));
46− }
47−}
48−
49−QAbstractItemModel* ModelPrinter::sourceModel() const
50−{
51− return m_model;
52−}
53−
54−QString ModelPrinter::text(const QModelIndex& index) const
55−{
56− return recurseString(index, 0);
57−}
58−
59−QString tabify(int level) { QString str;
60− for (int i = 0; i < level; i++) {
61− str += " ";
62− }
63− return str;
64−}
65−
66−QString ModelPrinter::recurseString(const QModelIndex& index, int level) const
67−{
68− if (!m_model)
69− return "";
70−
71− QString str;
72− QTextStream stream(&str);
73−
74− QHash<int, QByteArray> roleNames = m_model->roleNames();
75− QList<int> roles = roleNames.keys();
76− qSort(roles);
77− Q_FOREACH(int role, roles) {
78− QVariant vData = m_model->data(index, role);
79− if (vData.canConvert(QMetaType::QVariantMap)) {
80− QMapIterator<QString, QVariant> iter(vData.toMap());
81− while (iter.hasNext()) {
82− iter.next();
83− stream << tabify(level)
84− << roleNames[role]
85− << "."
86− << iter.key()
87− << ": "
88− << iter.value().toString()
89− << endl;
90− }
91− }
92− else {
93− stream << tabify(level)
94− << roleNames[role]
95− << ": "
96− << vData.toString()
97− << endl;
98− }
99− }
100−
101− int rowCount = m_model->rowCount(index);
102− stream << tabify(level)
103− << "child count"
104− << ": "
105− << rowCount
106− << endl
107− << endl;
108−
109− for (int i = 0; i < rowCount; i++) {
110− QModelIndex child = m_model->index(i, 0, index);
111− str += recurseString(child, level+1);
112− }
113− return str;
114−}
plugins/Unity/IndicatorsLegacy/modelprinter.hdeleted−50
@@ -1,50 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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−#ifndef MODELPRINTER_H
21−#define MODELPRINTER_H
22−
23−#include <QSortFilterProxyModel>
24−
25−// This class acts as a namespace only, with the addition that its enums
26−// are registered to be exposed on the QML side.
27−class ModelPrinter : public QObject
28−{
29− Q_OBJECT
30−
31− Q_PROPERTY(QAbstractItemModel* model READ sourceModel WRITE setSourceModel NOTIFY modelChanged)
32− Q_PROPERTY(QString text READ text NOTIFY textChanged)
33−public:
34− ModelPrinter(QObject* parent=0);
35−
36− void setSourceModel(QAbstractItemModel* sourceModel);
37− QAbstractItemModel* sourceModel() const;
38−
39− Q_INVOKABLE QString text(const QModelIndex& index = QModelIndex()) const;
40−
41−Q_SIGNALS:
42− void modelChanged();
43− void textChanged();
44−
45−private:
46− QString recurseString(const QModelIndex& index, int level) const;
47− QAbstractItemModel* m_model;
48−};
49−
50−#endif // MODELPRINTER_H
plugins/Unity/IndicatorsLegacy/plugin.cppdeleted−42
@@ -1,42 +0,0 @@
1−/*
2− * Copyright (C) 2012 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Author: Nick Dedekind <nick.dedekind@canonical.com>
17− */
18−
19−// Qt
20−#include <QtQml/qqml.h>
21−
22−// self
23−#include "plugin.h"
24−
25−// local
26−#include "flatmenuproxymodel.h"
27−#include "indicators.h"
28−#include "modelprinter.h"
29−
30−void IndicatorsPlugin::registerTypes(const char *uri)
31−{
32− Q_INIT_RESOURCE(indicators);
33−
34− qmlRegisterType<FlatMenuProxyModel>(uri, 0, 1, "FlatMenuProxyModel");
35− qmlRegisterType<ModelPrinter>(uri, 0, 1, "ModelPrinter");
36−
37− qmlRegisterUncreatableType<ActionState>(uri, 0, 1, "ActionState", "Can't create ActionState class");
38− qmlRegisterUncreatableType<NetworkActionState>(uri, 0, 1, "NetworkActionState", "Can't create NetworkActionState class");
39− qmlRegisterUncreatableType<NetworkConnection>(uri, 0, 1, "NetworkConnection", "Can't create NetworkConnection class");
40− qmlRegisterUncreatableType<IndicatorsModelRole>(uri, 0, 1, "IndicatorsModelRole", "Can't create IndicatorsModelRole class");
41− qmlRegisterUncreatableType<FlatMenuProxyModelRole>(uri, 0, 1, "FlatMenuProxyModelRole", "Can't create FlatMenuProxyModelRole class");
42−}
plugins/Unity/IndicatorsLegacy/qml/BasicMenuItem.qmldeleted−48
@@ -1,48 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Ubuntu.Components.ListItems 0.1 as ListItem
22−
23−ListItem.Standard {
24− id: stdListItem
25−
26− property bool menuActivated: false
27− property QtObject menu
28− property QtObject actionGroup
29− property alias color: background.color
30−
31− signal activateMenu()
32− signal deactivateMenu()
33−
34− showDivider: false
35− __foregroundColor: "#e8e1d0"
36−
37− backgroundIndicator: RemoveBackground {
38− state: stdListItem.swipingState
39− }
40−
41− Rectangle {
42− id: background
43−
44− anchors.fill: parent
45− color: "#221e1c"
46− z: -1
47− }
48−}
plugins/Unity/IndicatorsLegacy/qml/ButtonMenuItem.qmldeleted−47
@@ -1,47 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Ubuntu.Components 0.1
22−
23−BasicMenuItem {
24− id: buttonMenu
25− color: "#221e1b"
26− implicitHeight: units.gu(7)
27−
28− Button {
29− id: button
30− enabled: menuAction.valid
31− text: menu ? menu.label : ""
32− anchors.centerIn: parent
33− height: units.gu(4)
34− width: units.gu(16)
35− color: "#1b1817"
36−
37− onClicked: {
38− menuAction.activate()
39− }
40− }
41−
42− MenuAction {
43− id: menuAction
44− actionGroup: buttonMenu.actionGroup
45− action: menu ? menu.action : ""
46− }
47−}
plugins/Unity/IndicatorsLegacy/qml/CMakeLists.txtdeleted−5
@@ -1,5 +0,0 @@
1−# export_qmlplugin macro
2−include(Plugins)
3−
4−# export the qmldir, *.qml files.
5−export_qmlfiles(Unity.IndicatorsLegacy Unity/IndicatorsLegacy)
plugins/Unity/IndicatorsLegacy/qml/DivMenuItem.qmldeleted−26
@@ -1,26 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Olivier Tilloy <olivier.tilloy@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Ubuntu.Components 0.1
22−
23−Rectangle {
24− color: "#181514"
25− implicitHeight: units.gu(1)
26−}
plugins/Unity/IndicatorsLegacy/qml/HLine.qmldeleted−29
@@ -1,29 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Ubuntu.Components 0.1
22−
23−Rectangle {
24− height: units.dp(1)
25− anchors {
26− left: parent.left
27− right: parent.right
28− }
29−}
plugins/Unity/IndicatorsLegacy/qml/IndicatorBase.qmldeleted−59
@@ -1,59 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− * Nick Dedekind <nick.dedekind@canonical.com>
19− */
20−
21−import QtQuick 2.0
22−import QMenuModel 0.1
23−import Unity.IndicatorsLegacy 0.1 as Indicators
24−
25−Item {
26− id: indicatorItem
27−
28− //const
29− property string title
30− property int busType
31− property string busName
32− property string actionsObjectPath
33− property var menuObjectPaths: undefined
34− readonly property string device: "phone"
35−
36− property string deviceMenuObjectPath: menuObjectPaths.hasOwnProperty(device) ? menuObjectPaths[device] : ""
37−
38− signal actionGroupUpdated()
39− signal modelUpdated()
40−
41− property var actionGroup: QDBusActionGroup {
42− busType: indicatorItem.busType
43− busName: indicatorItem.busName
44− objectPath: indicatorItem.actionsObjectPath
45−
46− onActionAppear: indicatorItem.actionGroupUpdated();
47− }
48−
49− property var proxyModel: Indicators.FlatMenuProxyModel {
50− busType: indicatorItem.busType
51− busName: indicatorItem.busName
52− objectPath: indicatorItem.deviceMenuObjectPath
53−
54− onStatusChanged: indicatorItem.modelUpdated();
55− onRowsInserted: indicatorItem.modelUpdated();
56− onRowsRemoved: indicatorItem.modelUpdated();
57− onDataChanged: indicatorItem.modelUpdated();
58− }
59−}
plugins/Unity/IndicatorsLegacy/qml/IndicatorPage.qmldeleted−191
@@ -1,191 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− * Nick Dedekind <nick.dedekind@canonical.com>
19− */
20−
21−import QtQuick 2.0
22−import Ubuntu.Components 0.1 as Components
23−
24−IndicatorBase {
25− id: main
26−
27− //const
28− property alias emptyText: emptyLabel.text
29− property alias highlightFollowsCurrentItem : mainMenu.highlightFollowsCurrentItem
30− property bool __active: false
31−
32− ListView {
33− id: mainMenu
34−
35− property int visibleItems: 0
36−
37− model: proxyModel
38− anchors {
39− fill: parent
40− bottomMargin: Qt.inputMethod.visible ? (Qt.inputMethod.keyboardRectangle.height - main.anchors.bottomMargin) : 0
41−
42− Behavior on bottomMargin {
43− NumberAnimation {
44− duration: 175
45− easing.type: Easing.OutQuad
46− }
47− }
48− // TODO - does ever frame.
49− onBottomMarginChanged: {
50− mainMenu.positionViewAtIndex(mainMenu.currentIndex, ListView.End)
51− }
52− }
53−
54− // Ensure all delegates are cached in order to improve smoothness of scrolling
55− cacheBuffer: 10000
56−
57− // Only allow flicking if the content doesn't fit on the page
58− interactive: contentHeight > height
59−
60− currentIndex: -1
61− delegate: Item {
62− id: item
63− property bool ready: false
64− property alias empty: factory.empty
65−
66− anchors {
67− left: parent.left
68− right: parent.right
69− }
70− height: div.height + factory.implicitHeight
71− visible: height > 0
72−
73− Component.onCompleted: {
74− if (!item.empty) {
75− mainMenu.visibleItems += 1;
76− }
77− ready = true;
78− }
79− Component.onDestruction: {
80− if (!item.empty) {
81− mainMenu.visibleItems -= 1;
82− }
83− ready = false;
84− }
85−
86− onEmptyChanged: {
87− if (!ready) {
88− return;
89− }
90− if (empty) {
91− mainMenu.visibleItems -= 1;
92− } else {
93− mainMenu.visibleItems += 1;
94− }
95− }
96−
97− ListView.onRemove: {
98− if (!highlightFollowsCurrentItem) {
99− mainMenu.currentIndex = -1;
100− }
101− }
102−
103− Column {
104− id: contents
105−
106− anchors.fill: parent
107−
108− DivMenuItem {
109− id: div
110−
111− anchors.left: parent.left
112− anchors.right: parent.right
113− // only visible if is a root or a section header element and the factory is visible
114− height: {
115− // skipe first item
116− if (item.y == 0) {
117− return 0;
118− }
119− if (hasSection || ((depth == 0) && (!factory.empty))) {
120− return implicitHeight;
121− } else {
122− return 0;
123− }
124− }
125− }
126−
127− MenuItemFactory {
128− id: factory
129−
130− actionGroup: main.actionGroup
131− isCurrentItem: item.ListView.isCurrentItem
132− anchors {
133− left: parent.left
134− right: parent.right
135− }
136− menu: model
137−
138− Connections {
139− target : factory
140− onActivated: item.ListView.view.currentIndex = index
141− onDeactivated: item.ListView.view.currentIndex = -1
142− }
143− }
144− }
145− }
146− }
147−
148− Components.Label {
149− id: emptyLabel
150− visible: (mainMenu.visibleItems === 0)
151− anchors {
152− top: parent.top
153− left: parent.left
154− right: parent.right
155− topMargin: units.gu(2)
156− }
157− wrapMode: Text.WordWrap
158− horizontalAlignment: Text.AlignHCenter
159−
160− //style
161− color: "#e8e1d0"
162− fontSize: "medium"
163−
164− text: "Empty!"
165− }
166−
167− function start()
168− {
169− reset()
170− if (!__active) {
171− proxyModel.start();
172− actionGroup.start();
173− __active = true;
174− }
175− }
176−
177− function stop()
178− {
179− if (__active) {
180− __active = false;
181− proxyModel.stop();
182− actionGroup.stop();
183− }
184− }
185−
186− function reset()
187− {
188− mainMenu.currentIndex = -1;
189− mainMenu.positionViewAtBeginning();
190− }
191−}
plugins/Unity/IndicatorsLegacy/qml/IndicatorWidget.qmldeleted−68
@@ -1,68 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU Lesser General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Nick Dedekind <nick.dedekind@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Unity.IndicatorsLegacy 0.1 as Indicators
22−
23−IndicatorBase {
24− id: indicatorWidget
25−
26− enabled: false
27− property var action: undefined
28− property bool started: (busType != 0) && (busName != "") && (deviceMenuObjectPath != "")
29− property int iconSize: height - units.gu(0.5)
30− property string rootMenuType: "com.canonical.indicator.root"
31−
32− signal actionStateChanged()
33−
34− onStartedChanged: {
35− if (started) {
36− proxyModel.start();
37− actionGroup.start();
38− } else {
39− proxyModel.stop();
40− actionGroup.stop();
41− }
42− }
43− onActionGroupUpdated: update_state()
44− onModelUpdated: update_state()
45−
46−
47− function update_state() {
48− var extra = proxyModel.data(0, Indicators.FlatMenuProxyModelRole.Extra);
49− if (extra == undefined) {
50− return;
51− }
52−
53− if (!extra.hasOwnProperty("canonical_type")) {
54− return;
55− }
56−
57− if (extra.canonical_type === rootMenuType) {
58− action = actionGroup.action(proxyModel.data(0, Indicators.FlatMenuProxyModelRole.Action));
59− actionStateChanged();
60− }
61− }
62−
63− Connections {
64− target: action == undefined ? null : action
65− onStateChanged: actionStateChanged()
66− onValidChanged: actionStateChanged()
67− }
68−}
plugins/Unity/IndicatorsLegacy/qml/MenuAction.qmldeleted−86
@@ -1,86 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−
22−/*!
23− \qmltype MenuAction
24− \inqmlmodule Indicators 0.1
25− \brief Helper class to connect to a qmenumodel action
26−
27− Example:
28− \qml
29− Button {
30− id: slide
31− onClick: { action.activate() }
32− }
33− MenuAction {
34− id: action
35− actionGroup: menuItem.actionGroup
36− action: "/ubuntu/sound/enabled"
37− }
38− \endqml
39−*/
40−
41−Item {
42− id: menuAction
43−
44− /*!
45− \preliminary
46− The dbus action name
47− */
48− property string action: ""
49−
50− /*!
51− \preliminary
52− The dbus action group object
53− */
54− property QtObject actionGroup: null
55−
56− /*!
57− \preliminary
58− This is a read-only property with the current validity of the action
59− */
60− readonly property bool valid: actionObject ? actionObject.valid : false
61−
62− readonly property var state: actionObject ? actionObject.state : undefined
63−
64− // internal
65− property QtObject actionObject: null
66−
67− function activate(param) {
68− if (valid) {
69− actionObject.activate(param);
70− }
71− }
72−
73− onActionGroupChanged: updateAction()
74− onActionChanged: updateAction()
75−
76− Connections {
77− target: menuAction.actionGroup != undefined ? menuAction.actionGroup : null
78− onActionAppear: menuAction.updateAction();
79− onActionVanish: menuAction.updateAction();
80− onStatusChanged: menuAction.updateAction();
81− }
82−
83− function updateAction() {
84− actionObject = action !== "" && actionGroup ? actionGroup.action(action) : null
85− }
86−}
plugins/Unity/IndicatorsLegacy/qml/MenuActionBinding.qmldeleted−106
@@ -1,106 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−
22−/*!
23− \qmltype MenuActionBinding
24− \inqmlmodule Indicators 0.1
25− \brief Helper class to connect a qmenumodel action state with a qml components property
26−
27− Example:
28− \qml
29− Slider {
30− id: slide
31− }
32− MenuActionBinding {
33− actionGroup: menuItem.actionGroup
34− action: "/ubuntu/sound/volume"
35− target: slider
36− property: "value"
37− }
38− \endqml
39−*/
40−
41−MenuAction {
42− id: menuAction
43−
44− /*!
45− \preliminary
46− The component which will have the property changed by action
47− */
48− property QtObject target: null
49−
50− /*!
51− \preliminary
52− The property name of \l target component which will be linked with action state
53− */
54− property string property
55−
56− /*!
57− \preliminary
58− Use this to enable or disable the action state propagation to component property.
59− */
60− property bool active: true
61−
62− Component.onCompleted: connectViewChanges()
63− onTargetChanged: connectViewChanges()
64− onPropertyChanged: connectViewChanges()
65−
66− Item {
67− id: d
68− property var currentTarget: undefined
69− property string currentSignal
70− }
71−
72− Binding {
73− id: propertyBinding
74− target: menuAction.target
75− property: menuAction.property
76− value: menuAction.state
77− when: menuAction.actionObject && menuAction.active
78− }
79−
80− // TODO - re-evaluate in c++
81− function connectViewChanges() {
82− if (d.currentTarget != undefined && d.currentSignal !== "") {
83− if (d.currentTarget[d.currentSignal] !== undefined) {
84− d.currentTarget[d.currentSignal].disconnect(onViewValueChanged);
85− }
86− }
87−
88− d.currentTarget = null;
89− d.currentSignal = "";
90− if (target) {
91− var signal = "on%1Changed".arg(property.charAt(0).toUpperCase() + property.slice(1));
92− if (target[signal] !== undefined) {
93− target[signal].connect(onViewValueChanged);
94− d.currentTarget = target;
95− d.currentSignal = signal;
96− }
97− }
98− }
99−
100− function onViewValueChanged() {
101− if (valid) {
102− var propertyValue = target[property];
103− actionObject.updateState(propertyValue);
104− }
105− }
106−}
plugins/Unity/IndicatorsLegacy/qml/MenuItem.qmldeleted−40
@@ -1,40 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Ubuntu.Components 0.1
22−import Ubuntu.Components.ListItems 0.1 as ListItem
23−
24−BasicMenuItem {
25− objectName: menu ? menu.action : ""
26− progression: menu && (menu.linkSubMenu !== undefined)
27− text: menu && menu.label ? menu.label : ""
28− color: "#221e1c"
29− implicitHeight: units.gu(7)
30−
31− HLine {
32− anchors.top: parent.top
33− color: "#403b37"
34− }
35−
36− HLine {
37− anchors.bottom: parent.bottom
38− color: "#060606"
39− }
40−}
plugins/Unity/IndicatorsLegacy/qml/MenuItemFactory.qmldeleted−110
@@ -1,110 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU Lesser General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Nick Dedekind <nick.dedekind@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Unity.IndicatorsLegacy 0.1 as Indicators
22−import Unity.IndicatorsLegacy.Messaging 0.1 as ICMessaging
23−import Unity.IndicatorsLegacy.Network 0.1 as ICNetwork
24−
25−Item {
26− id: menuFactory
27−
28− property QtObject menu
29− property QtObject listView
30− property QtObject actionGroup
31− property bool isCurrentItem
32− readonly property bool empty: (loader.item !== undefined && loader.status == Loader.Ready) ? loader.item.state === "EMPTY" : true
33−
34− implicitHeight: loader.height
35−
36− signal activated()
37− signal deactivated()
38−
39− property var _map: {
40− "unity.widgets.systemsettings.tablet.volumecontrol" : sliderMenu,
41− "unity.widgets.systemsettings.tablet.switch" : switchMenu,
42−
43− "com.canonical.indicator.button" : buttonMenu,
44− "com.canonical.indicator.div" : divMenu,
45− "com.canonical.indicator.section" : sectionMenu,
46− "com.canonical.indicator.progress" : progressMenu,
47− "com.canonical.indicator.slider" : sliderMenu,
48− "com.canonical.indicator.switch" : switchMenu,
49−
50− "com.canonical.indicator.messages.messageitem" : messageItem,
51− "com.canonical.indicator.messages.snapdecision" : snapDecision,
52− "com.canonical.indicator.messages.sourceitem" : groupedMessage,
53−
54− "unity.widget.systemsettings.tablet.sectiontitle" : wifiSection,
55− "unity.widgets.systemsettings.tablet.wifisection" : wifiSection,
56− "unity.widgets.systemsettings.tablet.accesspoint" : accessPoint,
57− }
58−
59− Component { id: sliderMenu; Indicators.SliderMenuItem {} }
60− Component { id: switchMenu; Indicators.SwitchMenuItem {} }
61− Component { id: buttonMenu; Indicators.ButtonMenuItem {} }
62− Component { id: divMenu; Indicators.DivMenuItem {} }
63− Component { id: sectionMenu; Indicators.SectionMenuItem {} }
64− Component { id: progressMenu; Indicators.ProgressMenuItem {} }
65− Component { id: messageItem; ICMessaging.MessageMenuItem {} }
66− Component { id: snapDecision; ICMessaging.SnapDecision {} }
67− Component { id: groupedMessage; ICMessaging.GroupedMessage {} }
68− Component { id: wifiSection; ICNetwork.WifiSection {} }
69− Component { id: accessPoint; ICNetwork.AccessPoint {} }
70− Component { id: indicatorMenu; Indicators.MenuItem {} }
71−
72− Loader {
73− id: loader
74− asynchronous: true
75−
76− anchors {
77− left: parent.left
78− right: parent.right
79− }
80−
81− sourceComponent: {
82− if (!menuFactory.menu || !menuFactory.menu.extra) {
83− return undefined;
84− }
85−
86− var widgetType = menuFactory.menu.extra.canonical_type;
87− if (widgetType) {
88− return _map[widgetType];
89− } else {
90− if (widgetType === "com.canonical.indicator.root") {
91− return undefined;
92− // Try discovery the item based on the basic properties
93− } else if (menu.hasSection) {
94− return sectionMenu;
95− } else {
96− return indicatorMenu;
97− }
98− }
99− }
100−
101− onLoaded: {
102− item.menuActivated = Qt.binding(function() { return isCurrentItem; });
103− item.actionGroup = Qt.binding(function() { return menuFactory.actionGroup; });
104− item.menu = Qt.binding(function() { return menuFactory.menu; });
105−
106− item.activateMenu.connect(function() { menuFactory.activated(); });
107− item.deactivateMenu.connect(function() { menuFactory.deactivated(); });
108− }
109− }
110−}
plugins/Unity/IndicatorsLegacy/qml/ProgressMenuItem.qmldeleted−65
@@ -1,65 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Michael Zanetti <michael.zanetti@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Ubuntu.Components 0.1
22−
23−MenuItem {
24− id: progressMenu
25− property alias value : progressBar.value
26−
27− // TODO: Replace this with the official ProgressBar component as soon as
28− // it is available. For now, this rebuilds the Mockup as close as possible.
29− UbuntuShape {
30− id: progressBar
31− anchors {
32− right: parent.right
33− rightMargin: units.gu(2)
34− left: parent.left
35− leftMargin: units.gu(2)
36− }
37− height: units.gu(4)
38− anchors.verticalCenter: parent.verticalCenter
39− color: "transparent"
40−
41− property int minimumValue: 0
42− property int maximumValue: 100
43− property int value: 50
44−
45− UbuntuShape {
46− anchors.fill: parent
47− anchors.rightMargin: parent.width - (parent.width * parent.value / parent.maximumValue)
48− color: "#c94212"
49− }
50−
51− Label {
52− anchors.centerIn: parent
53− text: parent.value + " %"
54− fontSize: "medium"
55− color: "#e8e1d0"
56− }
57− }
58−
59− MenuActionBinding {
60− actionGroup: progressMenu.actionGroup
61− action: menu ? menu.action : ""
62− target: progressBar
63− property: "value"
64− }
65−}
plugins/Unity/IndicatorsLegacy/qml/RemoveBackground.qmldeleted−55
@@ -1,55 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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−
17−import QtQuick 2.0
18−import Ubuntu.Components 0.1
19−
20−Rectangle {
21− anchors.fill: parent
22− color: "#333130"
23− Label {
24− id: backgroundText
25−
26− anchors.fill: parent
27− verticalAlignment: Text.AlignVCenter
28− text: "Clear"
29− fontSize: "medium"
30− color: "#e8e1d0"
31− font.bold: true
32− }
33−
34− states: [
35− State {
36− name: "SwipingRight"
37− PropertyChanges {
38− target: backgroundText
39− anchors.rightMargin: units.gu(3)
40− anchors.leftMargin: 0
41− horizontalAlignment: Text.AlignRight
42−
43− }
44− },
45− State {
46− name: "SwipingLeft"
47− PropertyChanges {
48− target: backgroundText
49− anchors.rightMargin: 0
50− anchors.leftMargin: units.gu(3)
51− horizontalAlignment: Text.AlignLeft
52− }
53− }
54− ]
55−}
plugins/Unity/IndicatorsLegacy/qml/SectionMenuItem.qmldeleted−57
@@ -1,57 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Ubuntu.Components 0.1
22−import Ubuntu.Components.ListItems 0.1 as ListItem
23−
24−BasicMenuItem {
25− property string label: menu && menu.label ? menu.label : ""
26− property bool busy: false
27− property int count: menu && menu.linkSection ? menu.linkSection.count : 0
28−
29− color: "#221e1b"
30− implicitHeight: label !== "" ? __header.height : 0
31− state: count === 0 ? "EMPTY" : ""
32−
33− ListItem.Header {
34− id: __header
35−
36− text: label
37− height: units.gu(4)
38− anchors {
39− left: parent.left
40− right: parent.right
41− top: parent.top
42− }
43− visible: text != ""
44−
45− ActivityIndicator {
46− id: indicator
47− running: busy
48− anchors {
49− margins: units.gu(0.5)
50− right: parent.right
51− }
52− height: parent.height - (anchors.margins * 2)
53− width: height
54− anchors.verticalCenter: parent.verticalCenter
55− }
56− }
57−}
plugins/Unity/IndicatorsLegacy/qml/SliderMenuItem.qmldeleted−64
@@ -1,64 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Ubuntu.Components 0.1
22−
23−MenuItem {
24− id: _sliderMenu
25−
26− property alias minimumValue: slider.minimumValue
27− property alias maximumValue: slider.maximumValue
28− property alias value: slider.value
29−
30− control: Slider {
31− id: slider
32− enabled: menuAction.valid
33− width: _sliderMenu.text ? units.gu(20) : _sliderMenu.width - units.gu(4)
34− anchors.verticalCenter: parent.verticalCenter
35− live: false
36− // FIXME: The interval should be [0.0 - 1.0]. Unfortunately, when
37− // reaching the boundaries (0.0 or 1.0), the value is converted
38− // to an integer when automatically wrapped in a variant when
39− // passed to QStateAction::updateState(…). The server chokes on
40− // those values, complaining that they’re not of the right type…
41− minimumValue: menu.extra.canonical_min ? menu.extra.canonical_min * 1.000001 : 0.0000001
42− maximumValue: {
43− var maximum = menu.extra.canonical_max ? menu.extra.canonical_max * 1.000001 : 0.9999999
44− if (maximum <= minimumValue) {
45− return minimumValue + 1;
46− }
47− return maximum;
48− }
49−
50− // FIXME - to be deprecated in Ubuntu.Components.
51− // Use this to disable the label, since there is not way to do it on the component.
52− function formatValue(v) {
53− return "";
54− }
55− }
56−
57− MenuActionBinding {
58− id: menuAction
59− actionGroup: _sliderMenu.actionGroup
60− action: menu ? menu.action : ""
61− target: slider
62− property: "value"
63− }
64−}
plugins/Unity/IndicatorsLegacy/qml/SwitchMenuItem.qmldeleted−43
@@ -1,43 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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− * Renato Araujo Oliveira Filho <renato@canonical.com>
18− */
19−
20−import QtQuick 2.0
21−import Ubuntu.Components 0.1
22−
23−MenuItem {
24− id: switchMenu
25−
26− property alias checked: switcher.checked
27−
28− control: Switch {
29− id: switcher
30− enabled: menuAction.valid
31−
32− anchors.verticalCenter: parent.verticalCenter
33− anchors.right: parent.right
34− }
35−
36− MenuActionBinding {
37− id: menuAction
38− actionGroup: switchMenu.actionGroup
39− action: menu ? menu.action : ""
40− target: switcher
41− property: "checked"
42− }
43−}
plugins/Unity/IndicatorsLegacy/qml/qmldirdeleted−21
@@ -1,21 +0,0 @@
1−module Unity.IndicatorsLegacy
2−plugin IndicatorsLegacyQml
3−typeinfo plugin.qmltypes
4−
5−BasicMenuItem 0.1 BasicMenuItem.qml
6−ButtonMenuItem 0.1 ButtonMenuItem.qml
7−DivMenuItem 0.1 DivMenuItem.qml
8−HLine 0.1 HLine.qml
9−IndicatorBase 0.1 IndicatorBase.qml
10−IndicatorPage 0.1 IndicatorPage.qml
11−IndicatorWidget 0.1 IndicatorWidget.qml
12−MenuItem 0.1 MenuItem.qml
13−MenuAction 0.1 MenuAction.qml
14−MenuActionBinding 0.1 MenuActionBinding.qml
15−MenuItemFactory 0.1 MenuItemFactory.qml
16−ProgressMenuItem 0.1 ProgressMenuItem.qml
17−SectionMenuItem 0.1 SectionMenuItem.qml
18−SliderMenuItem 0.1 SliderMenuItem.qml
19−SwitchMenuItem 0.1 SwitchMenuItem.qml
20−
21−internal RemoveBackground RemoveBackground.qml
plugins/Unity/IndicatorsLegacy/resources/indicators.qrcdeleted−7
@@ -1,7 +0,0 @@
1−<RCC>
2− <qresource prefix="/indicators">
3− <file>artwork/messaging/default_contact.png</file>
4− <file>artwork/messaging/default_app.svg</file>
5− <file>artwork/messaging/message_sms01_54px.png</file>
6− </qresource>
7−</RCC>
plugins/Unity/Launcher/backend/launcherbackend.cpp+4−4
@@ -38,13 +38,13 @@ public:
38 bool pinned;
38 bool pinned;
39};
39};
40
40
41−LauncherBackend::LauncherBackend(bool useStorage, QObject *parent):
41+LauncherBackend::LauncherBackend(QObject *parent):
42 QObject(parent),
42 QObject(parent),
43 m_accounts(nullptr)
43 m_accounts(nullptr)
44{
44{
45− if (useStorage) {
45+#ifndef LAUNCHER_TESTING
46− m_accounts = new AccountsServiceDBusAdaptor(this);
46+ m_accounts = new AccountsServiceDBusAdaptor(this);
47− }
47+#endif
48 m_user = qgetenv("USER");
48 m_user = qgetenv("USER");
49 syncFromAccounts();
49 syncFromAccounts();
50}
50}
plugins/Unity/Launcher/backend/launcherbackend.h+1−1
@@ -39,7 +39,7 @@ class LauncherBackend : public QObject
39
39
40
40
41public:
41public:
42− LauncherBackend(bool useStorage = true, QObject *parent = 0);
42+ LauncherBackend(QObject *parent = 0);
43 virtual ~LauncherBackend();
43 virtual ~LauncherBackend();
44
44
45 /**
45 /**
plugins/Unity/Launcher/launchermodel.cpp+13−4
@@ -27,7 +27,7 @@ using namespace unity::shell::application;
27
27
28LauncherModel::LauncherModel(QObject *parent):
28LauncherModel::LauncherModel(QObject *parent):
29 LauncherModelInterface(parent),
29 LauncherModelInterface(parent),
30− m_backend(new LauncherBackend(true, this)),
30+ m_backend(new LauncherBackend(this)),
31 m_appManager(0)
31 m_appManager(0)
32{
32{
33 connect(m_backend, SIGNAL(countChanged(QString,int)), SLOT(countChanged(QString,int)));
33 connect(m_backend, SIGNAL(countChanged(QString,int)), SLOT(countChanged(QString,int)));
@@ -115,9 +115,11 @@ void LauncherModel::move(int oldIndex, int newIndex)
115 m_list.move(oldIndex, newIndex);
115 m_list.move(oldIndex, newIndex);
116 endMoveRows();
116 endMoveRows();
117
117
118− storeAppList();
118+ if (!m_list.at(newIndex)->pinned()) {
119−
120− pin(m_list.at(newIndex)->appId());
119+ pin(m_list.at(newIndex)->appId());
120+ } else {
121+ storeAppList();
122+ }
121}
123}
122
124
123void LauncherModel::pin(const QString &appId, int index)
125void LauncherModel::pin(const QString &appId, int index)
@@ -146,6 +148,8 @@ void LauncherModel::pin(const QString &appId, int index)
146 m_list.insert(index, item);
148 m_list.insert(index, item);
147 endInsertRows();
149 endInsertRows();
148 }
150 }
151+
152+ storeAppList();
149}
153}
150
154
151void LauncherModel::requestRemove(const QString &appId)
155void LauncherModel::requestRemove(const QString &appId)
@@ -155,6 +159,11 @@ void LauncherModel::requestRemove(const QString &appId)
155 return;
159 return;
156 }
160 }
157
161
162+ if (m_appManager->findApplication(appId)) {
163+ m_list.at(index)->setPinned(false);
164+ return;
165+ }
166+
158 beginRemoveRows(QModelIndex(), index, index);
167 beginRemoveRows(QModelIndex(), index, index);
159 m_list.takeAt(index)->deleteLater();
168 m_list.takeAt(index)->deleteLater();
160 endRemoveRows();
169 endRemoveRows();
plugins/Unity/Launcher/quicklistmodel.cpp+1−1
@@ -32,7 +32,7 @@ QuickListModel::~QuickListModel()
32
32
33void QuickListModel::appendAction(const QuickListEntry &entry)
33void QuickListModel::appendAction(const QuickListEntry &entry)
34{
34{
35− beginInsertRows(QModelIndex(), m_list.count() - 1, m_list.count() -1);
35+ beginInsertRows(QModelIndex(), m_list.count(), m_list.count());
36 m_list.append(entry);
36 m_list.append(entry);
37 endInsertRows();
37 endInsertRows();
38}
38}
plugins/Unity/bottombarvisibilitycommunicatorshell.cpp+15−1
@@ -17,7 +17,8 @@
17#include "bottombarvisibilitycommunicatorshell.h"
17#include "bottombarvisibilitycommunicatorshell.h"
18
18
19BottomBarVisibilityCommunicatorShell::BottomBarVisibilityCommunicatorShell()
19BottomBarVisibilityCommunicatorShell::BottomBarVisibilityCommunicatorShell()
20− : m_forceHidden(false)
20+ : m_forceHidden(false),
21+ m_position(0)
21{
22{
22}
23}
23
24
@@ -26,6 +27,11 @@ bool BottomBarVisibilityCommunicatorShell::forceHidden() const
26 return m_forceHidden;
27 return m_forceHidden;
27}
28}
28
29
30+double BottomBarVisibilityCommunicatorShell::position() const
31+{
32+ return m_position;
33+}
34+
29void BottomBarVisibilityCommunicatorShell::setForceHidden(bool forceHidden)
35void BottomBarVisibilityCommunicatorShell::setForceHidden(bool forceHidden)
30{
36{
31 if (forceHidden != m_forceHidden) {
37 if (forceHidden != m_forceHidden) {
@@ -33,3 +39,11 @@ void BottomBarVisibilityCommunicatorShell::setForceHidden(bool forceHidden)
33 Q_EMIT forceHiddenChanged(forceHidden);
39 Q_EMIT forceHiddenChanged(forceHidden);
34 }
40 }
35}
41}
42+
43+void BottomBarVisibilityCommunicatorShell::setPosition(double position)
44+{
45+ if (position != m_position) {
46+ m_position = position;
47+ Q_EMIT positionChanged(position);
48+ }
49+}
plugins/Unity/bottombarvisibilitycommunicatorshell.h+6
@@ -30,6 +30,7 @@ class BottomBarVisibilityCommunicatorShell : public QObject
30{
30{
31 Q_OBJECT
31 Q_OBJECT
32 Q_PROPERTY(bool forceHidden READ forceHidden WRITE setForceHidden NOTIFY forceHiddenChanged)
32 Q_PROPERTY(bool forceHidden READ forceHidden WRITE setForceHidden NOTIFY forceHiddenChanged)
33+ Q_PROPERTY(double position READ position WRITE setPosition NOTIFY positionChanged)
33
34
34 Q_CLASSINFO("D-Bus Interface", "com.canonical.Shell.BottomBarVisibilityCommunicator")
35 Q_CLASSINFO("D-Bus Interface", "com.canonical.Shell.BottomBarVisibilityCommunicator")
35public:
36public:
@@ -41,13 +42,18 @@ public:
41 bool forceHidden() const;
42 bool forceHidden() const;
42 void setForceHidden(bool forceHidden);
43 void setForceHidden(bool forceHidden);
43
44
45+ double position() const;
46+ void setPosition(double position);
47+
44Q_SIGNALS:
48Q_SIGNALS:
45 void forceHiddenChanged(bool forceHidden);
49 void forceHiddenChanged(bool forceHidden);
50+ void positionChanged(double position);
46
51
47private:
52private:
48 BottomBarVisibilityCommunicatorShell();
53 BottomBarVisibilityCommunicatorShell();
49
54
50 bool m_forceHidden;
55 bool m_forceHidden;
56+ double m_position;
51};
57};
52
58
53#endif
59#endif
plugins/Unity/categories.cpp+18−1
@@ -21,6 +21,7 @@
21// self
21// self
22#include "categories.h"
22#include "categories.h"
23#include "categoryresults.h"
23#include "categoryresults.h"
24+#include <QDebug>
24
25
25// TODO: use something from libunity once it's public
26// TODO: use something from libunity once it's public
26enum CategoryColumn {
27enum CategoryColumn {
@@ -39,6 +40,7 @@ Categories::Categories(QObject* parent)
39 m_roles[Categories::RoleIcon] = "icon";
40 m_roles[Categories::RoleIcon] = "icon";
40 m_roles[Categories::RoleRenderer] = "renderer";
41 m_roles[Categories::RoleRenderer] = "renderer";
41 m_roles[Categories::RoleContentType] = "contentType";
42 m_roles[Categories::RoleContentType] = "contentType";
43+ m_roles[Categories::RoleRendererHint] = "rendererHint";
42 m_roles[Categories::RoleProgressSource] = "progressSource";
44 m_roles[Categories::RoleProgressSource] = "progressSource";
43 m_roles[Categories::RoleHints] = "hints";
45 m_roles[Categories::RoleHints] = "hints";
44 m_roles[Categories::RoleResults] = "results";
46 m_roles[Categories::RoleResults] = "results";
@@ -62,7 +64,17 @@ Categories::getResults(int index) const
62
64
63 unsigned categoryIndex = static_cast<unsigned>(index);
65 unsigned categoryIndex = static_cast<unsigned>(index);
64 auto unity_results = m_unityScope->GetResultsForCategory(categoryIndex);
66 auto unity_results = m_unityScope->GetResultsForCategory(categoryIndex);
67+ if (unity_results) {
65− results->setModel(unity_results->model());
68+ results->setModel(unity_results->model());
69+ } else {
70+ // No results model returned by unity core; this can be the case when the global
71+ // results model of this scope is still not set in unity core. Don't set backend
72+ // model in DeeListModel - it will still beahve properly as an empty model. Since
73+ // we're connected to the category model change signal, and it is set by unity core
74+ // at the same time as results model (on channel opening), we'll reset category
75+ // results models with proper models when we're notifed again.
76+ qWarning() << "No results model for category" << categoryIndex;
77+ }
66
78
67 m_results.insert(index, results);
79 m_results.insert(index, results);
68 }
80 }
@@ -198,6 +210,11 @@ Categories::data(const QModelIndex& index, int role) const
198 auto hints = DeeListModel::data(index, CategoryColumn::HINTS).toHash();
210 auto hints = DeeListModel::data(index, CategoryColumn::HINTS).toHash();
199 return hints.contains("content-type") ? hints["content-type"] : QVariant(QString("default"));
211 return hints.contains("content-type") ? hints["content-type"] : QVariant(QString("default"));
200 }
212 }
213+ case RoleRendererHint:
214+ {
215+ auto hints = DeeListModel::data(index, CategoryColumn::HINTS).toHash();
216+ return hints.contains("renderer-hint") ? hints["renderer-hint"] : QVariant(QString());
217+ }
201 case RoleProgressSource:
218 case RoleProgressSource:
202 {
219 {
203 auto hints = DeeListModel::data(index, CategoryColumn::HINTS).toHash();
220 auto hints = DeeListModel::data(index, CategoryColumn::HINTS).toHash();
plugins/Unity/categories.h+1
@@ -47,6 +47,7 @@ public:
47 RoleIcon,
47 RoleIcon,
48 RoleRenderer,
48 RoleRenderer,
49 RoleContentType,
49 RoleContentType,
50+ RoleRendererHint,
50 RoleProgressSource,
51 RoleProgressSource,
51 RoleHints,
52 RoleHints,
52 RoleResults,
53 RoleResults,
plugins/Unity/categoryresults.cpp+21
@@ -46,6 +46,7 @@ CategoryResults::CategoryResults(QObject* parent)
46 m_roles[CategoryResults::RoleComment] = "comment";
46 m_roles[CategoryResults::RoleComment] = "comment";
47 m_roles[CategoryResults::RoleDndUri] = "dndUri";
47 m_roles[CategoryResults::RoleDndUri] = "dndUri";
48 m_roles[CategoryResults::RoleMetadata] = "metadata";
48 m_roles[CategoryResults::RoleMetadata] = "metadata";
49+ m_roles[CategoryResults::RoleRendererHints] = "rendererHints";
49}
50}
50
51
51int CategoryResults::categoryIndex() const
52int CategoryResults::categoryIndex() const
@@ -79,6 +80,13 @@ CategoryResults::data(const QModelIndex& index, int role) const
79 return DeeListModel::data(index, ResultsColumn::URI);
80 return DeeListModel::data(index, ResultsColumn::URI);
80 case RoleIconHint: {
81 case RoleIconHint: {
81 QString giconString(DeeListModel::data(index, ResultsColumn::ICON_HINT).toString());
82 QString giconString(DeeListModel::data(index, ResultsColumn::ICON_HINT).toString());
83+ if (giconString.isEmpty()) {
84+ QString uri(DeeListModel::data(index, ResultsColumn::URI).toString());
85+ QString thumbnailerUri(uriToThumbnailerProviderString(uri));
86+ if (!thumbnailerUri.isNull()) {
87+ return QVariant::fromValue(thumbnailerUri);
88+ }
89+ }
82 return QVariant::fromValue(gIconToDeclarativeImageProviderString(giconString));
90 return QVariant::fromValue(gIconToDeclarativeImageProviderString(giconString));
83 }
91 }
84 case RoleCategory:
92 case RoleCategory:
@@ -93,6 +101,19 @@ CategoryResults::data(const QModelIndex& index, int role) const
93 return DeeListModel::data(index, ResultsColumn::DND_URI);
101 return DeeListModel::data(index, ResultsColumn::DND_URI);
94 case RoleMetadata:
102 case RoleMetadata:
95 return DeeListModel::data(index, ResultsColumn::METADATA);
103 return DeeListModel::data(index, ResultsColumn::METADATA);
104+ case RoleRendererHints:
105+ {
106+ QVariantHash hash(DeeListModel::data(index, ResultsColumn::METADATA).toHash());
107+ if (hash.contains("content")) {
108+ QVariantMap hints;
109+ QVariantHash innerHash(hash["content"].toHash());
110+ if (innerHash.contains("scope_disabled")) {
111+ hints["scope_disabled"] = innerHash["scope_disabled"];
112+ }
113+ return hints.empty() ? QVariant() : QVariant::fromValue(hints);
114+ }
115+ return QVariant();
116+ }
96 default:
117 default:
97 return QVariant();
118 return QVariant();
98 }
119 }
plugins/Unity/categoryresults.h+2−1
@@ -43,7 +43,8 @@ public:
43 RoleTitle,
43 RoleTitle,
44 RoleComment,
44 RoleComment,
45 RoleDndUri,
45 RoleDndUri,
46− RoleMetadata
46+ RoleMetadata,
47+ RoleRendererHints
47 };
48 };
48
49
49 QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
50 QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
plugins/Unity/iconutils.cpp+13−1
@@ -24,13 +24,14 @@
24#include "iconutils.h"
24#include "iconutils.h"
25
25
26#define BASE_THEME_ICON_URI "image://theme/"
26#define BASE_THEME_ICON_URI "image://theme/"
27+#define BASE_THUMBNAILER_URI "image://thumbnailer/"
27
28
28QString gIconToDeclarativeImageProviderString(QString const &giconString)
29QString gIconToDeclarativeImageProviderString(QString const &giconString)
29{
30{
30 if (giconString.isEmpty()) return giconString;
31 if (giconString.isEmpty()) return giconString;
31
32
32 if (giconString.startsWith('/') || giconString.startsWith(QLatin1String("http")) ||
33 if (giconString.startsWith('/') || giconString.startsWith(QLatin1String("http")) ||
33− giconString.startsWith(QLatin1String("file:"))) {
34+ giconString.startsWith(QLatin1String("file:")) || giconString.startsWith(QLatin1String("image:"))) {
34 return giconString;
35 return giconString;
35 }
36 }
36
37
@@ -89,3 +90,14 @@ QString gIconToDeclarativeImageProviderString(QString const &giconString)
89
90
90 return result;
91 return result;
91}
92}
93+
94+QString uriToThumbnailerProviderString(QString const &uri)
95+{
96+ if (uri.startsWith(QLatin1String("file:///"))) {
97+ QString thumbnailerUri(BASE_THUMBNAILER_URI);
98+ thumbnailerUri.append(uri.midRef(7));
99+ return thumbnailerUri;
100+ }
101+
102+ return QString::null;
103+}
plugins/Unity/iconutils.h+1
@@ -23,5 +23,6 @@
23#include <QString>
23#include <QString>
24
24
25QString gIconToDeclarativeImageProviderString(QString const &giconString);
25QString gIconToDeclarativeImageProviderString(QString const &giconString);
26+QString uriToThumbnailerProviderString(QString const &uri);
26
27
27#endif
28#endif
plugins/Unity/plugin.cpp+2
@@ -35,6 +35,7 @@
35#include "categoryresults.h"
35#include "categoryresults.h"
36#include "bottombarvisibilitycommunicatorshell.h"
36#include "bottombarvisibilitycommunicatorshell.h"
37#include "genericoptionsmodel.h"
37#include "genericoptionsmodel.h"
38+#include "result.h"
38
39
39// libqtdee
40// libqtdee
40#include "deelistmodel.h"
41#include "deelistmodel.h"
@@ -50,6 +51,7 @@ void UnityPlugin::registerTypes(const char *uri)
50 qmlRegisterUncreatableType<PreviewInfoHint>(uri, 0, 1, "PreviewInfoHint", "Can't create PreviewInfoHint object in QML.");
51 qmlRegisterUncreatableType<PreviewInfoHint>(uri, 0, 1, "PreviewInfoHint", "Can't create PreviewInfoHint object in QML.");
51 qmlRegisterUncreatableType<SocialPreviewComment>(uri, 0, 1, "SocialPreviewComment", "Can't create SocialPreviewComment object in QML.");
52 qmlRegisterUncreatableType<SocialPreviewComment>(uri, 0, 1, "SocialPreviewComment", "Can't create SocialPreviewComment object in QML.");
52 qmlRegisterUncreatableType<GenericOptionsModel>(uri, 0, 1, "GenericOptionsModel", "Can't create options model in QML.");
53 qmlRegisterUncreatableType<GenericOptionsModel>(uri, 0, 1, "GenericOptionsModel", "Can't create options model in QML.");
54+ qmlRegisterUncreatableType<Result>(uri, 0, 1, "Result", "Can't create result object in QML.");
53 qmlRegisterType<Scope>(uri, 0, 1, "Scope");
55 qmlRegisterType<Scope>(uri, 0, 1, "Scope");
54 qmlRegisterType<Scopes>(uri, 0, 1, "Scopes");
56 qmlRegisterType<Scopes>(uri, 0, 1, "Scopes");
55 qmlRegisterType<Categories>(uri, 0, 1, "Categories");
57 qmlRegisterType<Categories>(uri, 0, 1, "Categories");
plugins/Unity/preview.cpp+24−13
@@ -39,9 +39,12 @@
39#include <UnityCore/MusicPreview.h>
39#include <UnityCore/MusicPreview.h>
40#include <UnityCore/SocialPreview.h>
40#include <UnityCore/SocialPreview.h>
41
41
42+#include <UnityCore/GLibWrapper.h>
43+
42Preview::Preview(QObject *parent):
44Preview::Preview(QObject *parent):
43 QObject(parent),
45 QObject(parent),
44− m_unityPreview(nullptr)
46+ m_unityPreview(nullptr),
47+ m_result(new Result(this))
45{
48{
46}
49}
47
50
@@ -103,24 +106,25 @@ QVariantMap Preview::infoHintsHash() const
103QString Preview::image() const
106QString Preview::image() const
104{
107{
105 if (m_unityPreview) {
108 if (m_unityPreview) {
109+ if (m_unityPreview->image() != nullptr) {
106− auto giconString = g_icon_to_string(m_unityPreview->image());
110+ auto giconString = g_icon_to_string(m_unityPreview->image());
107− QString result(gIconToDeclarativeImageProviderString(QString::fromUtf8(giconString)));
111+ QString result(gIconToDeclarativeImageProviderString(QString::fromUtf8(giconString)));
108− g_free(giconString);
112+ g_free(giconString);
109− return result;
113+ return result;
114+ } else {
115+ QString sourceMedia(QString::fromStdString(m_unityPreview->image_source_uri()));
116+ QString thumbnailUri(uriToThumbnailerProviderString(sourceMedia));
117+ if (!thumbnailUri.isNull()) return thumbnailUri;
118+ }
110 } else {
119 } else {
111 qWarning() << "Preview not set";
120 qWarning() << "Preview not set";
112 }
121 }
113 return QString::null;
122 return QString::null;
114}
123}
115
124
116−QString Preview::imageSourceUri() const
125+QVariant Preview::result() const
117{
126{
118− if (m_unityPreview) {
127+ return QVariant::fromValue(m_result);
119− return QString::fromStdString(m_unityPreview->image_source_uri());
120− } else {
121− qWarning() << "Preview not set";
122− }
123− return QString::null;
124}
128}
125
129
126Preview* Preview::newFromUnityPreview(unity::dash::Preview::Ptr unityPreview)
130Preview* Preview::newFromUnityPreview(unity::dash::Preview::Ptr unityPreview)
@@ -151,6 +155,7 @@ Preview* Preview::newFromUnityPreview(unity::dash::Preview::Ptr unityPreview)
151void Preview::setUnityPreviewBase(unity::dash::Preview::Ptr unityPreview)
155void Preview::setUnityPreviewBase(unity::dash::Preview::Ptr unityPreview)
152{
156{
153 m_unityPreview = unityPreview;
157 m_unityPreview = unityPreview;
158+ m_result->setPreview(unityPreview);
154
159
155 qDeleteAll(m_infoHints);
160 qDeleteAll(m_infoHints);
156 m_infoHints.clear();
161 m_infoHints.clear();
@@ -181,8 +186,14 @@ void Preview::execute(const QString& actionId, const QHash<QString, QVariant>& h
181{
186{
182 if (m_unityPreview) {
187 if (m_unityPreview) {
183 auto unityHints = convertToHintsMap(hints);
188 auto unityHints = convertToHintsMap(hints);
189+ m_actionCancellable.Renew();
184− m_unityPreview->PerformAction(actionId.toStdString(), unityHints);
190+ m_unityPreview->PerformAction(actionId.toStdString(), unityHints, nullptr, m_actionCancellable);
185 } else {
191 } else {
186 qWarning() << "Preview not set";
192 qWarning() << "Preview not set";
187 }
193 }
188}
194}
195+
196+void Preview::cancelAction()
197+{
198+ m_actionCancellable.Cancel();
199+}
plugins/Unity/preview.h+7−2
@@ -31,7 +31,9 @@
31#include <UnityCore/Preview.h>
31#include <UnityCore/Preview.h>
32
32
33// local
33// local
34+#include "result.h"
34#include "previewaction.h"
35#include "previewaction.h"
36+#include <UnityCore/GLibWrapper.h>
35
37
36class Q_DECL_EXPORT Preview : public QObject
38class Q_DECL_EXPORT Preview : public QObject
37{
39{
@@ -45,7 +47,7 @@ class Q_DECL_EXPORT Preview : public QObject
45 Q_PROPERTY(QVariant infoHints READ infoHints NOTIFY previewChanged)
47 Q_PROPERTY(QVariant infoHints READ infoHints NOTIFY previewChanged)
46 Q_PROPERTY(QVariantMap infoMap READ infoHintsHash NOTIFY previewChanged)
48 Q_PROPERTY(QVariantMap infoMap READ infoHintsHash NOTIFY previewChanged)
47 Q_PROPERTY(QString image READ image NOTIFY previewChanged)
49 Q_PROPERTY(QString image READ image NOTIFY previewChanged)
48− Q_PROPERTY(QString imageSourceUri READ imageSourceUri NOTIFY previewChanged)
50+ Q_PROPERTY(QVariant result READ result NOTIFY previewChanged)
49
51
50public:
52public:
51 explicit Preview(QObject *parent = 0);
53 explicit Preview(QObject *parent = 0);
@@ -59,9 +61,10 @@ public:
59 QVariant infoHints();
61 QVariant infoHints();
60 QVariantMap infoHintsHash() const;
62 QVariantMap infoHintsHash() const;
61 QString image() const;
63 QString image() const;
62− QString imageSourceUri() const;
64+ QVariant result() const;
63
65
64 Q_INVOKABLE void execute(const QString& actionId, const QHash<QString, QVariant>& hints);
66 Q_INVOKABLE void execute(const QString& actionId, const QHash<QString, QVariant>& hints);
67+ Q_INVOKABLE void cancelAction();
65
68
66Q_SIGNALS:
69Q_SIGNALS:
67 void previewChanged();
70 void previewChanged();
@@ -70,6 +73,7 @@ protected:
70 virtual void setUnityPreview(unity::dash::Preview::Ptr unityPreview);
73 virtual void setUnityPreview(unity::dash::Preview::Ptr unityPreview);
71
74
72 unity::dash::Preview::Ptr m_unityPreview;
75 unity::dash::Preview::Ptr m_unityPreview;
76+ Result* m_result;
73
77
74private:
78private:
75 void setUnityPreviewBase(unity::dash::Preview::Ptr unityPreview);
79 void setUnityPreviewBase(unity::dash::Preview::Ptr unityPreview);
@@ -77,6 +81,7 @@ private:
77 QList<QObject *> m_actions;
81 QList<QObject *> m_actions;
78 QList<QObject *> m_infoHints;
82 QList<QObject *> m_infoHints;
79 QVariantMap m_infoHintsHash;
83 QVariantMap m_infoHintsHash;
84+ unity::glib::Cancellable m_actionCancellable;
80};
85};
81
86
82Q_DECLARE_METATYPE(Preview *)
87Q_DECLARE_METATYPE(Preview *)
plugins/Unity/result.cppnew file+82
@@ -0,0 +1,82 @@
1+/*
2+ * Copyright (C) 2013 Canonical, Ltd.
3+ *
4+ * Authors:
5+ * Pawel Stolowski <pawel.stolowski@canonical.com>
6+ *
7+ * This program is free software; you can redistribute it and/or modify
8+ * it under the terms of the GNU General Public License as published by
9+ * the Free Software Foundation; version 3.
10+ *
11+ * This program is distributed in the hope that it will be useful,
12+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+ * GNU General Public License for more details.
15+ *
16+ * You should have received a copy of the GNU General Public License
17+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
18+ */
19+
20+#include "result.h"
21+#include "variantutils.h"
22+
23+Result::Result(QObject *parent) :
24+ QObject(parent)
25+{
26+}
27+
28+Result::Result(unity::dash::Preview::Ptr preview, QObject *parent) :
29+ QObject(parent),
30+ m_preview(preview)
31+{
32+}
33+
34+void Result::setPreview(unity::dash::Preview::Ptr preview)
35+{
36+ m_preview = preview;
37+}
38+
39+QString Result::uri() const
40+{
41+ return m_preview != nullptr ? QString::fromStdString(m_preview->preview_result.uri) : QString::null;
42+}
43+
44+QString Result::iconHint() const
45+{
46+ return m_preview != nullptr ? QString::fromStdString(m_preview->preview_result.icon_hint) : QString::null;
47+}
48+
49+unsigned Result::categoryIndex() const
50+{
51+ return m_preview != nullptr ? m_preview->preview_result.category_index : 0;
52+}
53+
54+unsigned Result::resultType() const
55+{
56+ return m_preview != nullptr ? m_preview->preview_result.result_type : 0;
57+}
58+
59+QString Result::mimeType() const
60+{
61+ return m_preview != nullptr ? QString::fromStdString(m_preview->preview_result.mimetype) : QString::null;
62+}
63+
64+QString Result::title() const
65+{
66+ return m_preview != nullptr ? QString::fromStdString(m_preview->preview_result.name) : QString::null;
67+}
68+
69+QString Result::comment() const
70+{
71+ return m_preview != nullptr ? QString::fromStdString(m_preview->preview_result.comment) : QString::null;
72+}
73+
74+QString Result::dndUri() const
75+{
76+ return m_preview != nullptr ? QString::fromStdString(m_preview->preview_result.dnd_uri) : QString::null;
77+}
78+
79+QVariant Result::metadata() const
80+{
81+ return m_preview != nullptr ? convertToQVariantHash(m_preview->preview_result.hints) : QVariant();
82+}
plugins/Unity/result.hnew file+69
@@ -0,0 +1,69 @@
1+/*
2+ * Copyright (C) 2013 Canonical, Ltd.
3+ *
4+ * Authors:
5+ * Pawel Stolowski <pawel.stolowski@canonical.com>
6+ *
7+ * This program is free software; you can redistribute it and/or modify
8+ * it under the terms of the GNU General Public License as published by
9+ * the Free Software Foundation; version 3.
10+ *
11+ * This program is distributed in the hope that it will be useful,
12+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+ * GNU General Public License for more details.
15+ *
16+ * You should have received a copy of the GNU General Public License
17+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
18+ */
19+
20+#ifndef RESULT_H
21+#define RESULT_H
22+
23+// Qt
24+#include <QObject>
25+#include <QVariant>
26+
27+// libunity-core
28+#include <UnityCore/Preview.h>
29+
30+class Q_DECL_EXPORT Result : public QObject
31+{
32+ Q_OBJECT
33+
34+ Q_PROPERTY(QString uri READ uri CONSTANT)
35+ Q_PROPERTY(QString iconHint READ iconHint CONSTANT)
36+ Q_PROPERTY(unsigned categoryIndex READ categoryIndex CONSTANT)
37+ Q_PROPERTY(unsigned resultType READ resultType CONSTANT)
38+ Q_PROPERTY(QString mimeType READ mimeType CONSTANT)
39+ Q_PROPERTY(QString title READ title CONSTANT)
40+ Q_PROPERTY(QString comment READ comment CONSTANT)
41+ Q_PROPERTY(QString dndUri READ dndUri CONSTANT)
42+ Q_PROPERTY(QVariant metadata READ metadata CONSTANT)
43+
44+public:
45+ Result(QObject *parent = nullptr);
46+ Result(unity::dash::Preview::Ptr preview, QObject *parent = nullptr);
47+
48+ void setPreview(unity::dash::Preview::Ptr preview);
49+
50+ QString uri() const;
51+ QString iconHint() const;
52+ unsigned categoryIndex() const;
53+ unsigned resultType() const;
54+ QString mimeType() const;
55+ QString title() const;
56+ QString comment() const;
57+ QString dndUri() const;
58+ QVariant metadata() const;
59+
60+private:
61+ /* Keep reference to the original preview to access result attributes via it, rather than keeping copies of them;
62+ this will save us a bit on copying, especially as UI is mostly interested in just uri.
63+ */
64+ unity::dash::Preview::Ptr m_preview;
65+};
66+
67+Q_DECLARE_METATYPE(Result *)
68+
69+#endif
plugins/Unity/scope.cpp+50−6
@@ -33,12 +33,14 @@
33#include <QQmlEngine>
33#include <QQmlEngine>
34
34
35#include <UnityCore/Variant.h>
35#include <UnityCore/Variant.h>
36+#include <UnityCore/GLibWrapper.h>
36
37
37#include <libintl.h>
38#include <libintl.h>
38#include <glib.h>
39#include <glib.h>
39
40
40Scope::Scope(QObject *parent) : QObject(parent)
41Scope::Scope(QObject *parent) : QObject(parent)
41 , m_formFactor("phone")
42 , m_formFactor("phone")
43+ , m_searchInProgress(false)
42{
44{
43 m_categories.reset(new Categories(this));
45 m_categories.reset(new Categories(this));
44}
46}
@@ -68,6 +70,11 @@ QString Scope::searchHint() const
68 return QString::fromStdString(m_unityScope->search_hint());
70 return QString::fromStdString(m_unityScope->search_hint());
69}
71}
70
72
73+bool Scope::searchInProgress() const
74+{
75+ return m_searchInProgress;
76+}
77+
71bool Scope::visible() const
78bool Scope::visible() const
72{
79{
73 return m_unityScope->visible();
80 return m_unityScope->visible();
@@ -115,10 +122,15 @@ void Scope::setSearchQuery(const QString& search_query)
115 string ("") and m_searchQuery is the null string,
122 string ("") and m_searchQuery is the null string,
116 search_query != m_searchQuery is still true.
123 search_query != m_searchQuery is still true.
117 */
124 */
125+ using namespace std::placeholders;
126+
118 if (m_searchQuery.isNull() || search_query != m_searchQuery) {
127 if (m_searchQuery.isNull() || search_query != m_searchQuery) {
119 m_searchQuery = search_query;
128 m_searchQuery = search_query;
129+ m_cancellable.Renew();
130+ m_searchInProgress = true;
120− m_unityScope->Search(search_query.toStdString(), sigc::mem_fun(this, &Scope::searchFinished));
131+ m_unityScope->Search(search_query.toStdString(), std::bind(&Scope::onSearchFinished, this, _1, _2, _3), m_cancellable);
121 Q_EMIT searchQueryChanged();
132 Q_EMIT searchQueryChanged();
133+ Q_EMIT searchInProgressChanged();
122 }
134 }
123}
135}
124
136
@@ -175,7 +187,19 @@ void Scope::preview(const QVariant &uri, const QVariant &icon_hint, const QVaria
175 const QVariant &comment, const QVariant &dnd_uri, const QVariant &metadata)
187 const QVariant &comment, const QVariant &dnd_uri, const QVariant &metadata)
176{
188{
177 auto res = createLocalResult(uri, icon_hint, category, result_type, mimetype, title, comment, dnd_uri, metadata);
189 auto res = createLocalResult(uri, icon_hint, category, result_type, mimetype, title, comment, dnd_uri, metadata);
190+ m_previewCancellable.Renew();
191+
192+ // canned queries don't have previews, must be activated
193+ if (uri.toString().startsWith("x-unity-no-preview-scopes-query://")) {
194+ m_unityScope->Activate(res);
195+ } else {
178− m_unityScope->Preview(res);
196+ m_unityScope->Preview(res, nullptr, m_previewCancellable);
197+ }
198+}
199+
200+void Scope::cancelActivation()
201+{
202+ m_previewCancellable.Cancel();
179}
203}
180
204
181void Scope::onActivated(unity::dash::LocalResult const& result, unity::dash::ScopeHandledType type, unity::glib::HintsMap const& hints)
205void Scope::onActivated(unity::dash::LocalResult const& result, unity::dash::ScopeHandledType type, unity::glib::HintsMap const& hints)
@@ -199,6 +223,13 @@ void Scope::onActivated(unity::dash::LocalResult const& result, unity::dash::Sco
199 qWarning() << "Missing goto-uri hint for GOTO_DASH_URI activation reply";
223 qWarning() << "Missing goto-uri hint for GOTO_DASH_URI activation reply";
200 }
224 }
201 break;
225 break;
226+ case unity::dash::PERFORM_SEARCH:
227+ if (hints.find("query") != hints.end()) {
228+ // note: this will emit searchQueryChanged, and shell will call setSearchQuery back with a new query,
229+ // but it will get ignored.
230+ setSearchQuery(QString::fromStdString(g_variant_get_string(hints.at("query"), nullptr)));
231+ }
232+ break;
202 default:
233 default:
203 qWarning() << "Unhandled activation response:" << type;
234 qWarning() << "Unhandled activation response:" << type;
204 }
235 }
@@ -275,8 +306,6 @@ void Scope::setUnityScope(const unity::dash::Scope::Ptr& scope)
275 m_unityScope->visible.changed.connect(sigc::mem_fun(this, &Scope::visibleChanged));
306 m_unityScope->visible.changed.connect(sigc::mem_fun(this, &Scope::visibleChanged));
276 m_unityScope->shortcut.changed.connect(sigc::mem_fun(this, &Scope::shortcutChanged));
307 m_unityScope->shortcut.changed.connect(sigc::mem_fun(this, &Scope::shortcutChanged));
277 m_unityScope->connected.changed.connect(sigc::mem_fun(this, &Scope::connectedChanged));
308 m_unityScope->connected.changed.connect(sigc::mem_fun(this, &Scope::connectedChanged));
278− /* Signals forwarding */
279− connect(this, SIGNAL(searchFinished(const std::string &, unity::glib::HintsMap const &, unity::glib::Error const &)), SLOT(onSearchFinished(const std::string &, unity::glib::HintsMap const &)));
280
309
281 /* FIXME: signal should be forwarded instead of calling the handler directly */
310 /* FIXME: signal should be forwarded instead of calling the handler directly */
282 m_unityScope->activated.connect(sigc::mem_fun(this, &Scope::onActivated));
311 m_unityScope->activated.connect(sigc::mem_fun(this, &Scope::onActivated));
@@ -297,18 +326,33 @@ unity::dash::Scope::Ptr Scope::unityScope() const
297
326
298void Scope::synchronizeStates()
327void Scope::synchronizeStates()
299{
328{
329+ using namespace std::placeholders;
330+
300 if (connected()) {
331 if (connected()) {
301 /* Forward local states to m_unityScope */
332 /* Forward local states to m_unityScope */
302 if (!m_searchQuery.isNull()) {
333 if (!m_searchQuery.isNull()) {
334+ m_cancellable.Renew();
335+ m_searchInProgress = true;
303− m_unityScope->Search(m_searchQuery.toStdString());
336+ m_unityScope->Search(m_searchQuery.toStdString(), std::bind(&Scope::onSearchFinished, this, _1, _2, _3), m_cancellable);
337+ Q_EMIT searchInProgressChanged();
304 }
338 }
305 }
339 }
306}
340}
307
341
308−void Scope::onSearchFinished(const std::string& /* query */, unity::glib::HintsMap const &hints)
342+void Scope::onSearchFinished(std::string const& /* query */, unity::glib::HintsMap const& hints, unity::glib::Error const& err)
309{
343{
310 QString hint;
344 QString hint;
311
345
346+ GError* error = const_cast<unity::glib::Error&>(err);
347+
348+ if (!err || !g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
349+ m_searchInProgress = false;
350+ Q_EMIT searchInProgressChanged();
351+ } else {
352+ // no need to check the results hint, we're still searching
353+ return;
354+ }
355+
312 if (!m_unityScope->results()->count()) {
356 if (!m_unityScope->results()->count()) {
313 unity::glib::HintsMap::const_iterator it = hints.find("no-results-hint");
357 unity::glib::HintsMap::const_iterator it = hints.find("no-results-hint");
314 if (it != hints.end()) {
358 if (it != hints.end()) {
plugins/Unity/scope.h+10−2
@@ -28,6 +28,7 @@
28// libunity-core
28// libunity-core
29#include <UnityCore/Scope.h>
29#include <UnityCore/Scope.h>
30#include <UnityCore/Results.h>
30#include <UnityCore/Results.h>
31+#include <UnityCore/GLibWrapper.h>
31
32
32#include "categories.h"
33#include "categories.h"
33#include "filters.h"
34#include "filters.h"
@@ -43,6 +44,7 @@ class Scope : public QObject
43 Q_PROPERTY(QString iconHint READ iconHint NOTIFY iconHintChanged)
44 Q_PROPERTY(QString iconHint READ iconHint NOTIFY iconHintChanged)
44 Q_PROPERTY(QString description READ description NOTIFY descriptionChanged)
45 Q_PROPERTY(QString description READ description NOTIFY descriptionChanged)
45 Q_PROPERTY(QString searchHint READ searchHint NOTIFY searchHintChanged)
46 Q_PROPERTY(QString searchHint READ searchHint NOTIFY searchHintChanged)
47+ Q_PROPERTY(bool searchInProgress READ searchInProgress NOTIFY searchInProgressChanged)
46 Q_PROPERTY(bool visible READ visible NOTIFY visibleChanged)
48 Q_PROPERTY(bool visible READ visible NOTIFY visibleChanged)
47 Q_PROPERTY(QString shortcut READ shortcut NOTIFY shortcutChanged)
49 Q_PROPERTY(QString shortcut READ shortcut NOTIFY shortcutChanged)
48 Q_PROPERTY(bool connected READ connected NOTIFY connectedChanged)
50 Q_PROPERTY(bool connected READ connected NOTIFY connectedChanged)
@@ -65,6 +67,7 @@ public:
65 bool visible() const;
67 bool visible() const;
66 QString shortcut() const;
68 QString shortcut() const;
67 bool connected() const;
69 bool connected() const;
70+ bool searchInProgress() const;
68 Categories* categories() const;
71 Categories* categories() const;
69 Filters* filters() const;
72 Filters* filters() const;
70 QString searchQuery() const;
73 QString searchQuery() const;
@@ -82,6 +85,8 @@ public:
82 Q_INVOKABLE void preview(const QVariant &uri, const QVariant &icon_hint, const QVariant &category,
85 Q_INVOKABLE void preview(const QVariant &uri, const QVariant &icon_hint, const QVariant &category,
83 const QVariant &result_type, const QVariant &mimetype, const QVariant &title,
86 const QVariant &result_type, const QVariant &mimetype, const QVariant &title,
84 const QVariant &comment, const QVariant &dnd_uri, const QVariant &metadata);
87 const QVariant &comment, const QVariant &dnd_uri, const QVariant &metadata);
88+ Q_INVOKABLE void cancelActivation();
89+
85 void setUnityScope(const unity::dash::Scope::Ptr& scope);
90 void setUnityScope(const unity::dash::Scope::Ptr& scope);
86 unity::dash::Scope::Ptr unityScope() const;
91 unity::dash::Scope::Ptr unityScope() const;
87
92
@@ -93,11 +98,11 @@ Q_SIGNALS:
93 void iconHintChanged(const std::string&);
98 void iconHintChanged(const std::string&);
94 void descriptionChanged(const std::string&);
99 void descriptionChanged(const std::string&);
95 void searchHintChanged(const std::string&);
100 void searchHintChanged(const std::string&);
101+ void searchInProgressChanged();
96 void visibleChanged(bool);
102 void visibleChanged(bool);
97 void shortcutChanged(const std::string&);
103 void shortcutChanged(const std::string&);
98 void connectedChanged(bool);
104 void connectedChanged(bool);
99 void categoriesChanged();
105 void categoriesChanged();
100− void searchFinished(const std::string&, unity::glib::HintsMap const&, unity::glib::Error const&);
101 void searchQueryChanged();
106 void searchQueryChanged();
102 void noResultsHintChanged();
107 void noResultsHintChanged();
103 void formFactorChanged();
108 void formFactorChanged();
@@ -113,7 +118,7 @@ Q_SIGNALS:
113
118
114private Q_SLOTS:
119private Q_SLOTS:
115 void synchronizeStates();
120 void synchronizeStates();
116− void onSearchFinished(const std::string &, unity::glib::HintsMap const &);
121+ void onSearchFinished(std::string const &, unity::glib::HintsMap const &, unity::glib::Error const&);
117
122
118private:
123private:
119 unity::dash::LocalResult createLocalResult(const QVariant &uri, const QVariant &icon_hint,
124 unity::dash::LocalResult createLocalResult(const QVariant &uri, const QVariant &icon_hint,
@@ -131,6 +136,9 @@ private:
131 QString m_searchQuery;
136 QString m_searchQuery;
132 QString m_noResultsHint;
137 QString m_noResultsHint;
133 QString m_formFactor;
138 QString m_formFactor;
139+ bool m_searchInProgress;
140+ unity::glib::Cancellable m_cancellable;
141+ unity::glib::Cancellable m_previewCancellable;
134};
142};
135
143
136Q_DECLARE_METATYPE(Scope*)
144Q_DECLARE_METATYPE(Scope*)
plugins/Unity/variantutils.cpp+9
@@ -40,3 +40,12 @@ unity::glib::HintsMap convertToHintsMap(const QVariant &var)
40 }
40 }
41 return unity::glib::HintsMap();
41 return unity::glib::HintsMap();
42}
42}
43+
44+QVariantHash convertToQVariantHash(const unity::glib::HintsMap& var)
45+{
46+ QVariantHash hash;
47+ for (auto hint: var) {
48+ hash.insert(QString::fromStdString(hint.first), DeeListModel::VariantForData(hint.second));
49+ }
50+ return hash;
51+}
plugins/Unity/variantutils.h+1
@@ -28,5 +28,6 @@
28
28
29unity::glib::HintsMap convertToHintsMap(const QHash<QString, QVariant> &val);
29unity::glib::HintsMap convertToHintsMap(const QHash<QString, QVariant> &val);
30unity::glib::HintsMap convertToHintsMap(const QVariant &var);
30unity::glib::HintsMap convertToHintsMap(const QVariant &var);
31+QVariantHash convertToQVariantHash(const unity::glib::HintsMap& var);
31
32
32#endif
33#endif
plugins/Utils/CMakeLists.txt+2−1
@@ -9,6 +9,7 @@ set(QMLPLUGIN_SRC
9 qlimitproxymodelqml.cpp
9 qlimitproxymodelqml.cpp
10 qsortfilterproxymodelqml.cpp
10 qsortfilterproxymodelqml.cpp
11 ubuntuwindow.cpp
11 ubuntuwindow.cpp
12+ unitymenumodelpaths.cpp
12 plugin.cpp
13 plugin.cpp
13 )
14 )
14
15
@@ -21,7 +22,7 @@ add_library(Utils-qml SHARED
21# files directly in targets.
22# files directly in targets.
22set_target_properties(Utils-qml PROPERTIES COMPILE_FLAGS -fvisibility=default)
23set_target_properties(Utils-qml PROPERTIES COMPILE_FLAGS -fvisibility=default)
23
24
24−qt5_use_modules(Utils-qml Qml Quick)
25+qt5_use_modules(Utils-qml Qml Quick DBus)
25
26
26# export the qmldir qmltypes and plugin files
27# export the qmldir qmltypes and plugin files
27export_qmlfiles(Utils Utils)
28export_qmlfiles(Utils Utils)
plugins/Utils/plugin.cpp+2
@@ -28,6 +28,7 @@
28#include "qlimitproxymodelqml.h"
28#include "qlimitproxymodelqml.h"
29#include "qsortfilterproxymodelqml.h"
29#include "qsortfilterproxymodelqml.h"
30#include "ubuntuwindow.h"
30#include "ubuntuwindow.h"
31+#include "unitymenumodelpaths.h"
31
32
32static QObject* applicationsPathsSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
33static QObject* applicationsPathsSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
33 Q_UNUSED(engine);
34 Q_UNUSED(engine);
@@ -41,6 +42,7 @@ void UtilsPlugin::registerTypes(const char *uri)
41 qmlRegisterType<QAbstractItemModel>();
42 qmlRegisterType<QAbstractItemModel>();
42 qmlRegisterType<QLimitProxyModelQML>(uri, 0, 1, "LimitProxyModel");
43 qmlRegisterType<QLimitProxyModelQML>(uri, 0, 1, "LimitProxyModel");
43 qmlRegisterType<QSortFilterProxyModelQML>(uri, 0, 1, "SortFilterProxyModel");
44 qmlRegisterType<QSortFilterProxyModelQML>(uri, 0, 1, "SortFilterProxyModel");
45+ qmlRegisterType<UnityMenuModelPaths>(uri, 0, 1, "UnityMenuModelPaths");
44 qmlRegisterExtendedType<QQuickWindow, UbuntuWindow>(uri, 0, 1, "Window");
46 qmlRegisterExtendedType<QQuickWindow, UbuntuWindow>(uri, 0, 1, "Window");
45 qmlRegisterSingletonType<ApplicationPaths>(uri, 0, 1, "ApplicationPaths", applicationsPathsSingleton);
47 qmlRegisterSingletonType<ApplicationPaths>(uri, 0, 1, "ApplicationPaths", applicationsPathsSingleton);
46}
48}
plugins/Utils/unitymenumodelpaths.cppnew file+182
@@ -0,0 +1,182 @@
1+/*
2+ * Copyright (C) 2013 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ * Author: Nick Dedekind <nick.dedekind@canonical.com>
17+ */
18+
19+
20+#include "unitymenumodelpaths.h"
21+#include <QDBusArgument>
22+
23+static QVariant parseVariantData(const QVariant& var);
24+
25+const QDBusArgument &operator>>(const QDBusArgument &arg, QVariantMap &map)
26+{
27+ arg.beginMap();
28+ map.clear();
29+ while (!arg.atEnd()) {
30+ QString key;
31+ QVariant value;
32+ arg.beginMapEntry();
33+
34+ arg >> key >> value;
35+ map.insertMulti(key, parseVariantData(value)); // re-parse for qdbusargument
36+
37+ arg.endMapEntry();
38+ }
39+ arg.endMap();
40+ return arg;
41+}
42+
43+static QVariant parseVariantData(const QVariant& var) {
44+ if ((int)var.type() == QMetaType::User && var.userType() == qMetaTypeId<QDBusArgument>()) {
45+ QDBusArgument arg(var.value<QDBusArgument>());
46+ if (arg.currentType() == QDBusArgument::MapType) {
47+ QVariantMap map;
48+ arg >> map;
49+ return map;
50+ }
51+ return arg.asVariant();
52+ }
53+
54+ return var;
55+}
56+
57+UnityMenuModelPaths::UnityMenuModelPaths(QObject *parent)
58+ : QObject(parent)
59+{
60+}
61+
62+QVariant UnityMenuModelPaths::source() const
63+{
64+ return m_sourceData;
65+}
66+
67+void UnityMenuModelPaths::setSource(const QVariant& data)
68+{
69+ if (m_sourceData != data) {
70+ m_sourceData = data;
71+ Q_EMIT sourceChanged();
72+
73+ updateData();
74+ }
75+}
76+
77+void UnityMenuModelPaths::updateData()
78+{
79+ QVariantMap dataMap = parseVariantData(m_sourceData).toMap();
80+
81+ if (!m_busNameHint.isEmpty() && dataMap.contains(m_busNameHint)) {
82+ setBusName(dataMap[m_busNameHint].toByteArray());
83+ } else {
84+ setBusName("");
85+ }
86+
87+ if (!m_menuObjectPathHint.isEmpty() && dataMap.contains(m_menuObjectPathHint)) {
88+ setMenuObjectPath(dataMap[m_menuObjectPathHint].toByteArray());
89+ } else {
90+ setMenuObjectPath("");
91+ }
92+
93+ if (!m_actionsHint.isEmpty() && dataMap.contains(m_actionsHint)) {
94+ setActions(dataMap[m_actionsHint].toMap());
95+ } else {
96+ setActions(QVariantMap());
97+ }
98+}
99+
100+QByteArray UnityMenuModelPaths::busName() const
101+{
102+ return m_busName;
103+}
104+
105+void UnityMenuModelPaths::setBusName(const QByteArray &name)
106+{
107+ if (m_busName != name) {
108+ m_busName = name;
109+ Q_EMIT busNameChanged();
110+ }
111+}
112+
113+QVariantMap UnityMenuModelPaths::actions() const
114+{
115+ return m_actions;
116+}
117+
118+void UnityMenuModelPaths::setActions(const QVariantMap &actions)
119+{
120+ if (m_actions != actions) {
121+ m_actions = actions;
122+ Q_EMIT actionsChanged();
123+ }
124+}
125+
126+QByteArray UnityMenuModelPaths::menuObjectPath() const
127+{
128+ return m_menuObjectPath;
129+}
130+
131+void UnityMenuModelPaths::setMenuObjectPath(const QByteArray &path)
132+{
133+ if (m_menuObjectPath != path) {
134+ m_menuObjectPath = path;
135+ Q_EMIT menuObjectPathChanged();
136+ }
137+}
138+
139+QByteArray UnityMenuModelPaths::busNameHint() const
140+{
141+ return m_busNameHint;
142+}
143+
144+void UnityMenuModelPaths::setBusNameHint(const QByteArray &nameHint)
145+{
146+ if (m_busNameHint != nameHint) {
147+ m_busNameHint = nameHint;
148+ Q_EMIT busNameHintChanged();
149+
150+ updateData();
151+ }
152+}
153+
154+QByteArray UnityMenuModelPaths::actionsHint() const
155+{
156+ return m_actionsHint;
157+}
158+
159+void UnityMenuModelPaths::setActionsHint(const QByteArray &actionsHint)
160+{
161+ if (m_actionsHint != actionsHint) {
162+ m_actionsHint = actionsHint;
163+ Q_EMIT actionsHintChanged();
164+
165+ updateData();
166+ }
167+}
168+
169+QByteArray UnityMenuModelPaths::menuObjectPathHint() const
170+{
171+ return m_menuObjectPathHint;
172+}
173+
174+void UnityMenuModelPaths::setMenuObjectPathHint(const QByteArray &pathHint)
175+{
176+ if (m_menuObjectPathHint != pathHint) {
177+ m_menuObjectPathHint = pathHint;
178+ Q_EMIT menuObjectPathHintChanged();
179+
180+ updateData();
181+ }
182+}
plugins/Utils/unitymenumodelpaths.hnew file+82
@@ -0,0 +1,82 @@
1+/*
2+ * Copyright (C) 2013 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ * Author: Nick Dedekind <nick.dedekind@canonical.com>
17+ */
18+
19+#ifndef UNITY_MENU_MODEL_PATHS_H
20+#define UNITY_MENU_MODEL_PATHS_H
21+
22+#include <QVariant>
23+
24+class UnityMenuModelPaths : public QObject
25+{
26+ Q_OBJECT
27+
28+ Q_PROPERTY(QVariant source READ source WRITE setSource NOTIFY sourceChanged)
29+ Q_PROPERTY(QByteArray busName READ busName NOTIFY busNameChanged)
30+ Q_PROPERTY(QVariantMap actions READ actions NOTIFY actionsChanged)
31+ Q_PROPERTY(QByteArray menuObjectPath READ menuObjectPath NOTIFY menuObjectPathChanged)
32+
33+ Q_PROPERTY(QByteArray busNameHint READ busNameHint WRITE setBusNameHint NOTIFY busNameHintChanged)
34+ Q_PROPERTY(QByteArray actionsHint READ actionsHint WRITE setActionsHint NOTIFY actionsHintChanged)
35+ Q_PROPERTY(QByteArray menuObjectPathHint READ menuObjectPathHint WRITE setMenuObjectPathHint NOTIFY menuObjectPathHintChanged)
36+
37+public:
38+ explicit UnityMenuModelPaths(QObject *parent = 0);
39+
40+ QVariant source() const;
41+ void setSource(const QVariant& data);
42+
43+ QByteArray busName() const;
44+ QVariantMap actions() const;
45+ QByteArray menuObjectPath() const;
46+
47+ QByteArray busNameHint() const;
48+ QByteArray actionsHint() const;
49+ QByteArray menuObjectPathHint() const;
50+
51+Q_SIGNALS:
52+ void sourceChanged();
53+ void busNameChanged();
54+ void actionsChanged();
55+ void menuObjectPathChanged();
56+
57+ void busNameHintChanged();
58+ void actionsHintChanged();
59+ void menuObjectPathHintChanged();
60+
61+private:
62+ void setBusName(const QByteArray &name);
63+ void setActions(const QVariantMap& actions);
64+ void setMenuObjectPath(const QByteArray &path);
65+
66+ void setBusNameHint(const QByteArray& nameHint);
67+ void setActionsHint(const QByteArray &actionsHint);
68+ void setMenuObjectPathHint(const QByteArray &pathHint);
69+
70+ void updateData();
71+
72+ QVariant m_sourceData;
73+ QByteArray m_busName;
74+ QVariantMap m_actions;
75+ QByteArray m_menuObjectPath;
76+
77+ QByteArray m_busNameHint;
78+ QByteArray m_actionsHint;
79+ QByteArray m_menuObjectPathHint;
80+};
81+
82+#endif // UNITY_MENU_MODEL_PATHS_H
po/ar.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-26 23:26+0000\n"
11"PO-Revision-Date: 2013-06-26 23:26+0000\n"
12"Last-Translator: Ibrahim Saed <ibraheem5000@gmail.com>\n"
12"Last-Translator: Ibrahim Saed <ibraheem5000@gmail.com>\n"
13"Language-Team: Arabic <ar@li.org>\n"
13"Language-Team: Arabic <ar@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= "
17"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= "
18"3 && n % 100 <= 10 ? 3 : n % 100 >= 11 && n % 100 <= 99 ? 4 : 5;\n"
18"3 && n % 100 <= 10 ? 3 : n % 100 >= 11 && n % 100 <= 99 ? 4 : 5;\n"
19−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
20−"X-Generator: Launchpad (build 16750)\n"
20+"X-Generator: Launchpad (build 16774)\n"
21
21
22#: Applications/applications.js:23
22#: Applications/applications.js:23
23msgid "Phone"
23msgid "Phone"
@@ -87,48 +87,50 @@ msgstr "ويكيبيديا"
87msgid "YouTube"
87msgid "YouTube"
88msgstr "يوتيوب"
88msgstr "يوتيوب"
89
89
90−#: Components/EdgeDemoOverlay.qml:145
90+#: Components/EdgeDemoOverlay.qml:150
91msgid "Skip intro"
91msgid "Skip intro"
92msgstr ""
92msgstr ""
93
93
94−#: Components/EdgeDemo.qml:98
94+#: Components/EdgeDemo.qml:112
95msgid "Right edge"
95msgid "Right edge"
96msgstr ""
96msgstr ""
97
97
98−#: Components/EdgeDemo.qml:99
98+#: Components/EdgeDemo.qml:113
99msgid "Try swiping from the right edge to unlock the phone"
99msgid "Try swiping from the right edge to unlock the phone"
100msgstr ""
100msgstr ""
101
101
102−#: Components/EdgeDemo.qml:135
102+#: Components/EdgeDemo.qml:144
103msgid "Top edge"
103msgid "Top edge"
104msgstr ""
104msgstr ""
105
105
106−#: Components/EdgeDemo.qml:136
106+#: Components/EdgeDemo.qml:145
107msgid "Try swiping from the top edge to access the indicators"
107msgid "Try swiping from the top edge to access the indicators"
108msgstr ""
108msgstr ""
109
109
110−#: Components/EdgeDemo.qml:161
110+#: Components/EdgeDemo.qml:170
111msgid "Close"
111msgid "Close"
112msgstr ""
112msgstr ""
113
113
114−#: Components/EdgeDemo.qml:162
114+#: Components/EdgeDemo.qml:171
115msgid "Swipe up again to close the settings screen"
115msgid "Swipe up again to close the settings screen"
116msgstr ""
116msgstr ""
117
117
118−#: Components/EdgeDemo.qml:189
118+#: Components/EdgeDemo.qml:198
119msgid "Left edge"
119msgid "Left edge"
120msgstr ""
120msgstr ""
121
121
122−#: Components/EdgeDemo.qml:190
122+#: Components/EdgeDemo.qml:199
123msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgid "Swipe from the left to reveal the launcher for quick access to apps"
124msgstr ""
124msgstr ""
125
125
126−#: Components/EdgeDemo.qml:217
126+#: Components/EdgeDemo.qml:226
127msgid "Well done"
127msgid "Well done"
128msgstr ""
128msgstr ""
129
129
130−#: Components/EdgeDemo.qml:218
130+#: Components/EdgeDemo.qml:227
131+msgid ""
131−msgid "You have now mastered the edge gestures and can start using the phone"
132+"You have now mastered the edge gestures and can start using the "
133+"phone<br><br>Tap anywhere to start"
132msgstr ""
134msgstr ""
133
135
134#: Components/PageHeader.qml:298
136#: Components/PageHeader.qml:298
@@ -149,23 +151,23 @@ msgid_plural "%1 reviews"
149msgstr[0] ""
151msgstr[0] ""
150msgstr[1] ""
152msgstr[1] ""
151
153
152−#: Dash/Apps/AppPreview.qml:175
154+#: Dash/Apps/AppPreview.qml:178
153msgid "Rate this"
155msgid "Rate this"
154msgstr ""
156msgstr ""
155
157
156−#: Dash/Apps/AppReviews.qml:72
158+#: Dash/Apps/AppReviews.qml:74
157msgid "Add a review"
159msgid "Add a review"
158msgstr ""
160msgstr ""
159
161
160−#: Dash/Apps/AppReviews.qml:84
162+#: Dash/Apps/AppReviews.qml:86
161msgid "Review"
163msgid "Review"
162msgstr ""
164msgstr ""
163
165
164−#: Dash/Apps/AppReviews.qml:118
166+#: Dash/Apps/AppReviews.qml:121
165msgid "Send"
167msgid "Send"
166msgstr ""
168msgstr ""
167
169
168−#: Dash/Apps/AppReviews.qml:136
170+#: Dash/Apps/AppReviews.qml:139
169msgid "Comments:"
171msgid "Comments:"
170msgstr ""
172msgstr ""
171
173
@@ -209,7 +211,7 @@ msgstr "النجوم:"
209msgid "Author:"
211msgid "Author:"
210msgstr "المؤلف:"
212msgstr "المؤلف:"
211
213
212−#: Greeter/Lockscreen.qml:134
214+#: Greeter/Lockscreen.qml:142
213msgid "Emergency Call"
215msgid "Emergency Call"
214msgstr ""
216msgstr ""
215
217
@@ -246,11 +248,15 @@ msgstr "تتكلم الآن..."
246msgid "Search"
248msgid "Search"
247msgstr "ابحث"
249msgstr "ابحث"
248
250
249−#: plugins/Unity/scope.cpp:317
251+#: plugins/Unity/scope.cpp:336
250msgid "Sorry, there is nothing that matches your search."
252msgid "Sorry, there is nothing that matches your search."
251msgstr "عذراً، لا يوجد ما يطابق بحثك."
253msgstr "عذراً، لا يوجد ما يطابق بحثك."
252
254
255+#: plugins/Unity/showallfilteroption.cpp:41
256+msgid "All"
257+msgstr ""
258+
253−#: Shell.qml:429
259+#: Shell.qml:453
254#, qt-format
260#, qt-format
255msgid "Please enter %1"
261msgid "Please enter %1"
256msgstr ""
262msgstr ""
po/ast.ponew file+265
@@ -0,0 +1,265 @@
1+# Asturian 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-01 09:43+0200\n"
11+"PO-Revision-Date: 2013-10-03 14:02+0000\n"
12+"Last-Translator: ivarela <ivarela@ubuntu.com>\n"
13+"Language-Team: Asturian <ast@li.org>\n"
14+"MIME-Version: 1.0\n"
15+"Content-Type: text/plain; charset=UTF-8\n"
16+"Content-Transfer-Encoding: 8bit\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2013-10-04 06:11+0000\n"
19+"X-Generator: Launchpad (build 16791)\n"
20+
21+#: Applications/applications.js:23
22+msgid "Phone"
23+msgstr "Teléfonu"
24+
25+#: Applications/applications.js:29
26+msgid "Camera"
27+msgstr "Cámara"
28+
29+#: Applications/applications.js:35
30+msgid "Gallery"
31+msgstr "Galería"
32+
33+#: Applications/applications.js:40
34+msgid "Facebook"
35+msgstr "Facebook"
36+
37+#: Applications/applications.js:46
38+msgid "Browser"
39+msgstr "Navegador"
40+
41+#: Applications/applications.js:51
42+msgid "Twitter"
43+msgstr "Twitter"
44+
45+#: Applications/applications.js:57
46+msgid "GMail"
47+msgstr "GMail"
48+
49+#: Applications/applications.js:62
50+msgid "Weather"
51+msgstr "Meteoroloxía"
52+
53+#: Applications/applications.js:68
54+msgid "Notepad"
55+msgstr "Bloc de notes"
56+
57+#: Applications/applications.js:74
58+msgid "Calendar"
59+msgstr "Calendariu"
60+
61+#: Applications/applications.js:80
62+msgid "Media Player"
63+msgstr "Reproductor multimedia"
64+
65+#: Applications/applications.js:86
66+msgid "Evernote"
67+msgstr "Evernote"
68+
69+#: Applications/applications.js:91
70+msgid "Map"
71+msgstr "Map"
72+
73+#: Applications/applications.js:96
74+msgid "Pinterest"
75+msgstr "Pinterest"
76+
77+#: Applications/applications.js:101
78+msgid "SoundCloud"
79+msgstr "SoundCloud"
80+
81+#: Applications/applications.js:106
82+msgid "Wikipedia"
83+msgstr "Wikipedia"
84+
85+#: Applications/applications.js:111
86+msgid "YouTube"
87+msgstr "YouTube"
88+
89+#: Components/EdgeDemoOverlay.qml:150
90+msgid "Skip intro"
91+msgstr "Omitir la intro"
92+
93+#: Components/EdgeDemo.qml:112
94+msgid "Right edge"
95+msgstr "Berbesu drechu"
96+
97+#: Components/EdgeDemo.qml:113
98+msgid "Try swiping from the right edge to unlock the phone"
99+msgstr "Esliza'l deu dende'l berbesu drechu pa desbloquiar el teléfonu"
100+
101+#: Components/EdgeDemo.qml:144
102+msgid "Top edge"
103+msgstr "Berbesu superior"
104+
105+#: Components/EdgeDemo.qml:145
106+msgid "Try swiping from the top edge to access the indicators"
107+msgstr "Esliza'l deu dende'l berbesu superior p'acceder a los menús"
108+
109+#: Components/EdgeDemo.qml:170
110+msgid "Close"
111+msgstr "Zarrar"
112+
113+#: Components/EdgeDemo.qml:171
114+msgid "Swipe up again to close the settings screen"
115+msgstr "Esliza hacia arriba pa zarrar la pantalla d'axustes"
116+
117+#: Components/EdgeDemo.qml:198
118+msgid "Left edge"
119+msgstr "Berbesu esquierdu"
120+
121+#: Components/EdgeDemo.qml:199
122+msgid "Swipe from the left to reveal the launcher for quick access to apps"
123+msgstr ""
124+"Esliza'l deu dende la esquierda p'amosar el llanzador y acceder rápidamente "
125+"a les aplicaciones"
126+
127+#: Components/EdgeDemo.qml:226
128+msgid "Well done"
129+msgstr "Bien fecho"
130+
131+#: Components/EdgeDemo.qml:227
132+msgid ""
133+"You have now mastered the edge gestures and can start using the "
134+"phone<br><br>Tap anywhere to start"
135+msgstr ""
136+"Agora domines los xestos de berbesos y pues usar el teléfonu<br><br>Toca la "
137+"pantalla pa entamar"
138+
139+#: Components/PageHeader.qml:298
140+msgid "Recent searches"
141+msgstr "Busques recientes"
142+
143+#. TRANSLATORS: Number of persons who rated this app
144+#: Dash/Apps/AppInfo.qml:73
145+#, qt-format
146+msgid "(%1)"
147+msgstr "(%1)"
148+
149+#. TRANSLATORS: Number of persons who wrote reviews for this app
150+#: Dash/Apps/AppInfo.qml:85
151+#, qt-format
152+msgid "%1 review"
153+msgid_plural "%1 reviews"
154+msgstr[0] "%1 reseña"
155+msgstr[1] "%1 reseñes"
156+
157+#: Dash/Apps/AppPreview.qml:178
158+msgid "Rate this"
159+msgstr "Valorar esto"
160+
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+
177+#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
178+msgid "Featured"
179+msgstr "Destacaos"
180+
181+#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
182+msgid "Recent"
183+msgstr "Recientes"
184+
185+#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
186+msgid "New Releases"
187+msgstr "Llanzamientos nuevos"
188+
189+#: Dash/DashMusic.qml:30
190+msgid "Top Charting"
191+msgstr "Meyor posicionaes"
192+
193+#: Dash/DashMusic.qml:91
194+msgid "Music"
195+msgstr "Música"
196+
197+#: Dash/DashVideos.qml:31
198+msgid "Popular Online"
199+msgstr "Populares en llinia"
200+
201+#: Dash/DashVideos.qml:146
202+msgid "Videos"
203+msgstr "Vídeos"
204+
205+#: Dash/Video/VideoPreview.qml:130
206+msgid "Directed by:"
207+msgstr "Dirixida por:"
208+
209+#: Dash/Video/VideoPreview.qml:153
210+msgid "Starring:"
211+msgstr "Protagonistes:"
212+
213+#: Dash/Video/VideoPreview.qml:176
214+msgid "Author:"
215+msgstr "Autor:"
216+
217+#: Greeter/Lockscreen.qml:142
218+msgid "Emergency Call"
219+msgstr "Llamada d'emerxencia"
220+
221+#: Greeter/PassphraseLockscreen.qml:59
222+#, qt-format
223+msgid "Hello %1"
224+msgstr "Hola %1"
225+
226+#: Greeter/PassphraseLockscreen.qml:59
227+msgid "Hello"
228+msgstr "Hola"
229+
230+#: Hud/HudParametrizedActionsPage.qml:132
231+msgid "Confirm"
232+msgstr "Confirmar"
233+
234+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
235+msgid "Type or say a command"
236+msgstr "Escribi o di una orde"
237+
238+#: Hud/Hud.qml:84
239+msgid "Loading. Please Wait..."
240+msgstr "Cargando, espera…"
241+
242+#: Hud/Hud.qml:89
243+msgid "Speak Now..."
244+msgstr "Fala agora…"
245+
246+#: Hud/Hud.qml:94
247+msgid "Speaking..."
248+msgstr "Falando…"
249+
250+#: Panel/SearchIndicator.qml:27
251+msgid "Search"
252+msgstr "Guetar"
253+
254+#: plugins/Unity/scope.cpp:336
255+msgid "Sorry, there is nothing that matches your search."
256+msgstr "Sentímoslo, nun hai res que concase cola gueta"
257+
258+#: plugins/Unity/showallfilteroption.cpp:41
259+msgid "All"
260+msgstr "Too"
261+
262+#: Shell.qml:453
263+#, qt-format
264+msgid "Please enter %1"
265+msgstr "Introduz %1"
po/az.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-26 23:48+0000\n"
11"PO-Revision-Date: 2013-06-26 23:48+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Azerbaijani <az@li.org>\n"
13"Language-Team: Azerbaijani <az@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95msgstr ""
95msgstr ""
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr ""
99msgstr ""
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103msgstr ""
103msgstr ""
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
107msgstr ""
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111msgstr ""
111msgstr ""
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115msgstr ""
115msgstr ""
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119msgstr ""
119msgstr ""
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127msgstr ""
127msgstr ""
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148msgstr[0] ""
150msgstr[0] ""
149msgstr[1] ""
151msgstr[1] ""
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153msgstr ""
155msgstr ""
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157msgstr ""
159msgstr ""
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161msgstr ""
163msgstr ""
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165msgstr ""
167msgstr ""
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169msgstr ""
171msgstr ""
170
172
@@ -208,7 +210,7 @@ msgstr ""
208msgid "Author:"
210msgid "Author:"
209msgstr ""
211msgstr ""
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213msgstr ""
215msgstr ""
214
216
@@ -245,11 +247,15 @@ msgstr "Söylənilir..."
245msgid "Search"
247msgid "Search"
246msgstr "Axtar"
248msgstr "Axtar"
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr "Bağışlayın, amma axtarışınıza heç bir nəticə uyğun gəlmir."
252msgstr "Bağışlayın, amma axtarışınıza heç bir nəticə uyğun gəlmir."
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255msgstr ""
261msgstr ""
po/bg.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-27 00:06+0000\n"
11"PO-Revision-Date: 2013-06-27 00:06+0000\n"
12"Last-Translator: Miroslav E. Hadzhiev (Хаджиев) "
12"Last-Translator: Miroslav E. Hadzhiev (Хаджиев) "
13"<miroslav.hadzhiev@gmail.com>\n"
13"<miroslav.hadzhiev@gmail.com>\n"
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"
17"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
18"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
20−"X-Generator: Launchpad (build 16750)\n"
20+"X-Generator: Launchpad (build 16774)\n"
21
21
22#: Applications/applications.js:23
22#: Applications/applications.js:23
23msgid "Phone"
23msgid "Phone"
@@ -87,48 +87,50 @@ msgstr "Уикипедия"
87msgid "YouTube"
87msgid "YouTube"
88msgstr "YouTube"
88msgstr "YouTube"
89
89
90−#: Components/EdgeDemoOverlay.qml:145
90+#: Components/EdgeDemoOverlay.qml:150
91msgid "Skip intro"
91msgid "Skip intro"
92msgstr ""
92msgstr ""
93
93
94−#: Components/EdgeDemo.qml:98
94+#: Components/EdgeDemo.qml:112
95msgid "Right edge"
95msgid "Right edge"
96msgstr ""
96msgstr ""
97
97
98−#: Components/EdgeDemo.qml:99
98+#: Components/EdgeDemo.qml:113
99msgid "Try swiping from the right edge to unlock the phone"
99msgid "Try swiping from the right edge to unlock the phone"
100msgstr ""
100msgstr ""
101
101
102−#: Components/EdgeDemo.qml:135
102+#: Components/EdgeDemo.qml:144
103msgid "Top edge"
103msgid "Top edge"
104msgstr ""
104msgstr ""
105
105
106−#: Components/EdgeDemo.qml:136
106+#: Components/EdgeDemo.qml:145
107msgid "Try swiping from the top edge to access the indicators"
107msgid "Try swiping from the top edge to access the indicators"
108msgstr ""
108msgstr ""
109
109
110−#: Components/EdgeDemo.qml:161
110+#: Components/EdgeDemo.qml:170
111msgid "Close"
111msgid "Close"
112msgstr ""
112msgstr ""
113
113
114−#: Components/EdgeDemo.qml:162
114+#: Components/EdgeDemo.qml:171
115msgid "Swipe up again to close the settings screen"
115msgid "Swipe up again to close the settings screen"
116msgstr ""
116msgstr ""
117
117
118−#: Components/EdgeDemo.qml:189
118+#: Components/EdgeDemo.qml:198
119msgid "Left edge"
119msgid "Left edge"
120msgstr ""
120msgstr ""
121
121
122−#: Components/EdgeDemo.qml:190
122+#: Components/EdgeDemo.qml:199
123msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgid "Swipe from the left to reveal the launcher for quick access to apps"
124msgstr ""
124msgstr ""
125
125
126−#: Components/EdgeDemo.qml:217
126+#: Components/EdgeDemo.qml:226
127msgid "Well done"
127msgid "Well done"
128msgstr ""
128msgstr ""
129
129
130−#: Components/EdgeDemo.qml:218
130+#: Components/EdgeDemo.qml:227
131+msgid ""
131−msgid "You have now mastered the edge gestures and can start using the phone"
132+"You have now mastered the edge gestures and can start using the "
133+"phone<br><br>Tap anywhere to start"
132msgstr ""
134msgstr ""
133
135
134#: Components/PageHeader.qml:298
136#: Components/PageHeader.qml:298
@@ -149,23 +151,23 @@ msgid_plural "%1 reviews"
149msgstr[0] ""
151msgstr[0] ""
150msgstr[1] ""
152msgstr[1] ""
151
153
152−#: Dash/Apps/AppPreview.qml:175
154+#: Dash/Apps/AppPreview.qml:178
153msgid "Rate this"
155msgid "Rate this"
154msgstr ""
156msgstr ""
155
157
156−#: Dash/Apps/AppReviews.qml:72
158+#: Dash/Apps/AppReviews.qml:74
157msgid "Add a review"
159msgid "Add a review"
158msgstr ""
160msgstr ""
159
161
160−#: Dash/Apps/AppReviews.qml:84
162+#: Dash/Apps/AppReviews.qml:86
161msgid "Review"
163msgid "Review"
162msgstr ""
164msgstr ""
163
165
164−#: Dash/Apps/AppReviews.qml:118
166+#: Dash/Apps/AppReviews.qml:121
165msgid "Send"
167msgid "Send"
166msgstr ""
168msgstr ""
167
169
168−#: Dash/Apps/AppReviews.qml:136
170+#: Dash/Apps/AppReviews.qml:139
169msgid "Comments:"
171msgid "Comments:"
170msgstr ""
172msgstr ""
171
173
@@ -209,7 +211,7 @@ msgstr ""
209msgid "Author:"
211msgid "Author:"
210msgstr "Автор:"
212msgstr "Автор:"
211
213
212−#: Greeter/Lockscreen.qml:134
214+#: Greeter/Lockscreen.qml:142
213msgid "Emergency Call"
215msgid "Emergency Call"
214msgstr ""
216msgstr ""
215
217
@@ -246,11 +248,15 @@ msgstr ""
246msgid "Search"
248msgid "Search"
247msgstr "Търсене"
249msgstr "Търсене"
248
250
249−#: plugins/Unity/scope.cpp:317
251+#: plugins/Unity/scope.cpp:336
250msgid "Sorry, there is nothing that matches your search."
252msgid "Sorry, there is nothing that matches your search."
251msgstr "Съжаляваме, няма нищо, което да отговаря на вашето търсене."
253msgstr "Съжаляваме, няма нищо, което да отговаря на вашето търсене."
252
254
255+#: plugins/Unity/showallfilteroption.cpp:41
256+msgid "All"
257+msgstr ""
258+
253−#: Shell.qml:429
259+#: Shell.qml:453
254#, qt-format
260#, qt-format
255msgid "Please enter %1"
261msgid "Please enter %1"
256msgstr ""
262msgstr ""
po/ca.po+50−38
@@ -7,16 +7,16 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11−"PO-Revision-Date: 2013-09-11 10:30+0000\n"
11+"PO-Revision-Date: 2013-09-28 07:38+0000\n"
12"Last-Translator: David Planella <david.planella@ubuntu.com>\n"
12"Last-Translator: David Planella <david.planella@ubuntu.com>\n"
13"Language-Team: Catalan <ca@li.org>\n"
13"Language-Team: Catalan <ca@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-09-12 08:06+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16761)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,48 +86,56 @@ msgstr "Viquipèdia"
86msgid "YouTube"
86msgid "YouTube"
87msgstr "YouTube"
87msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91−msgstr ""
91+msgstr "Omet la introducció"
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95msgstr "Vora dreta"
95msgstr "Vora dreta"
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr ""
99msgstr ""
100+"Proveu de lliscar el dit des de la vora dreta per desblocar el telèfon"
100
101
101−#: Components/EdgeDemo.qml:135
102+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
103msgid "Top edge"
103msgstr "Vora superior"
104msgstr "Vora superior"
104
105
105−#: Components/EdgeDemo.qml:136
106+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
107msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
108msgstr ""
109+"Proveu de lliscar el dit des de la vora superior per accedir als indicadors"
108
110
109−#: Components/EdgeDemo.qml:161
111+#: Components/EdgeDemo.qml:170
110msgid "Close"
112msgid "Close"
111−msgstr ""
113+msgstr "Tanca"
112
114
113−#: Components/EdgeDemo.qml:162
115+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
116msgid "Swipe up again to close the settings screen"
115msgstr ""
117msgstr ""
118+"Llisqueu el dit cap amunt una altra vegada per tancar la pantalla de "
119+"configuració"
116
120
117−#: Components/EdgeDemo.qml:189
121+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
122msgid "Left edge"
119msgstr "Vora esquerra"
123msgstr "Vora esquerra"
120
124
121−#: Components/EdgeDemo.qml:190
125+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
126msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
127msgstr ""
128+"Llisqueu el dit des de la vora esquerra per mostrar el llançador i accedir "
129+"ràpidament a les aplicacions"
124
130
125−#: Components/EdgeDemo.qml:217
131+#: Components/EdgeDemo.qml:226
126msgid "Well done"
132msgid "Well done"
127msgstr "Enhorabona!"
133msgstr "Enhorabona!"
128
134
129−#: Components/EdgeDemo.qml:218
135+#: Components/EdgeDemo.qml:227
136+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
137+"You have now mastered the edge gestures and can start using the "
138+"phone<br><br>Tap anywhere to start"
131msgstr ""
139msgstr ""
132
140
133#: Components/PageHeader.qml:298
141#: Components/PageHeader.qml:298
@@ -145,26 +153,26 @@ msgstr "(%1)"
145#, qt-format
153#, qt-format
146msgid "%1 review"
154msgid "%1 review"
147msgid_plural "%1 reviews"
155msgid_plural "%1 reviews"
148−msgstr[0] ""
156+msgstr[0] "%1 ressenya"
149−msgstr[1] ""
157+msgstr[1] "%1 ressenyes"
150
158
151−#: Dash/Apps/AppPreview.qml:175
159+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
160msgid "Rate this"
153msgstr ""
161msgstr ""
154
162
155−#: Dash/Apps/AppReviews.qml:72
163+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
164msgid "Add a review"
157−msgstr ""
165+msgstr "Afegiu una ressenya"
158
166
159−#: Dash/Apps/AppReviews.qml:84
167+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
168msgid "Review"
161msgstr "Ressenya"
169msgstr "Ressenya"
162
170
163−#: Dash/Apps/AppReviews.qml:118
171+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
172msgid "Send"
165−msgstr ""
173+msgstr "Envia"
166
174
167−#: Dash/Apps/AppReviews.qml:136
175+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
176msgid "Comments:"
169msgstr "Comentaris:"
177msgstr "Comentaris:"
170
178
@@ -178,11 +186,11 @@ msgstr "Recents"
178
186
179#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
187#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
180msgid "New Releases"
188msgid "New Releases"
181−msgstr ""
189+msgstr "Novetats"
182
190
183#: Dash/DashMusic.qml:30
191#: Dash/DashMusic.qml:30
184msgid "Top Charting"
192msgid "Top Charting"
185−msgstr ""
193+msgstr "El millor de les llistes"
186
194
187#: Dash/DashMusic.qml:91
195#: Dash/DashMusic.qml:91
188msgid "Music"
196msgid "Music"
@@ -190,7 +198,7 @@ msgstr "Música"
190
198
191#: Dash/DashVideos.qml:31
199#: Dash/DashVideos.qml:31
192msgid "Popular Online"
200msgid "Popular Online"
193−msgstr ""
201+msgstr "Popular a la xarxa"
194
202
195#: Dash/DashVideos.qml:146
203#: Dash/DashVideos.qml:146
196msgid "Videos"
204msgid "Videos"
@@ -198,24 +206,24 @@ msgstr "Vídeos"
198
206
199#: Dash/Video/VideoPreview.qml:130
207#: Dash/Video/VideoPreview.qml:130
200msgid "Directed by:"
208msgid "Directed by:"
201−msgstr ""
209+msgstr "Dirigit per:"
202
210
203#: Dash/Video/VideoPreview.qml:153
211#: Dash/Video/VideoPreview.qml:153
204msgid "Starring:"
212msgid "Starring:"
205−msgstr ""
213+msgstr "Protagonistes:"
206
214
207#: Dash/Video/VideoPreview.qml:176
215#: Dash/Video/VideoPreview.qml:176
208msgid "Author:"
216msgid "Author:"
209msgstr "Autor:"
217msgstr "Autor:"
210
218
211−#: Greeter/Lockscreen.qml:134
219+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
220msgid "Emergency Call"
213−msgstr ""
221+msgstr "Trucada d'emergència"
214
222
215#: Greeter/PassphraseLockscreen.qml:59
223#: Greeter/PassphraseLockscreen.qml:59
216#, qt-format
224#, qt-format
217msgid "Hello %1"
225msgid "Hello %1"
218−msgstr ""
226+msgstr "Hola %1"
219
227
220#: Greeter/PassphraseLockscreen.qml:59
228#: Greeter/PassphraseLockscreen.qml:59
221msgid "Hello"
229msgid "Hello"
@@ -245,11 +253,15 @@ msgstr "S'està parlant..."
245msgid "Search"
253msgid "Search"
246msgstr "Cerca"
254msgstr "Cerca"
247
255
248−#: plugins/Unity/scope.cpp:317
256+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
257msgid "Sorry, there is nothing that matches your search."
250msgstr "No hi ha res que coincideixi amb la cerca"
258msgstr "No hi ha res que coincideixi amb la cerca"
251
259
260+#: plugins/Unity/showallfilteroption.cpp:41
261+msgid "All"
262+msgstr ""
263+
252−#: Shell.qml:429
264+#: Shell.qml:453
253#, qt-format
265#, qt-format
254msgid "Please enter %1"
266msgid "Please enter %1"
255−msgstr ""
267+msgstr "Introduïu %1"
po/de.po+47−41
@@ -7,16 +7,16 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11−"PO-Revision-Date: 2013-06-27 00:37+0000\n"
11+"PO-Revision-Date: 2013-10-06 10:57+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12+"Last-Translator: SaGrLand <sg@samuel-greef.de>\n"
13"Language-Team: German <de@li.org>\n"
13"Language-Team: German <de@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-07 06:14+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16791)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,48 +86,50 @@ msgstr "Wikipedia"
86msgid "YouTube"
86msgid "YouTube"
87msgstr "YouTube"
87msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91−msgstr ""
91+msgstr "Überspringe Einführung"
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95−msgstr ""
95+msgstr "Rechter Rand"
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr ""
99msgstr ""
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103−msgstr ""
103+msgstr "Oberer Rand"
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
107msgstr ""
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111−msgstr ""
111+msgstr "Schließen"
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115msgstr ""
115msgstr ""
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119−msgstr ""
119+msgstr "Linker Rand"
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127−msgstr ""
127+msgstr "Gut gemacht"
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -138,35 +140,35 @@ msgstr "Letzte Suchbegriffe"
138#: Dash/Apps/AppInfo.qml:73
140#: Dash/Apps/AppInfo.qml:73
139#, qt-format
141#, qt-format
140msgid "(%1)"
142msgid "(%1)"
141−msgstr ""
143+msgstr "(%1)"
142
144
143#. TRANSLATORS: Number of persons who wrote reviews for this app
145#. TRANSLATORS: Number of persons who wrote reviews for this app
144#: Dash/Apps/AppInfo.qml:85
146#: Dash/Apps/AppInfo.qml:85
145#, qt-format
147#, qt-format
146msgid "%1 review"
148msgid "%1 review"
147msgid_plural "%1 reviews"
149msgid_plural "%1 reviews"
148−msgstr[0] ""
150+msgstr[0] "%1 Bewertung"
149−msgstr[1] ""
151+msgstr[1] "%1 Bewertungen"
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153−msgstr ""
155+msgstr "Bewerten"
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157−msgstr ""
159+msgstr "Bewertung hinzufügen"
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161−msgstr ""
163+msgstr "Bewertung"
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165−msgstr ""
167+msgstr "Senden"
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169−msgstr ""
171+msgstr "Kommentare:"
170
172
171#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
173#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
172msgid "Featured"
174msgid "Featured"
@@ -208,9 +210,9 @@ msgstr "Darsteller:"
208msgid "Author:"
210msgid "Author:"
209msgstr "Autor:"
211msgstr "Autor:"
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213−msgstr ""
215+msgstr "Notruf"
214
216
215#: Greeter/PassphraseLockscreen.qml:59
217#: Greeter/PassphraseLockscreen.qml:59
216#, qt-format
218#, qt-format
@@ -245,11 +247,15 @@ msgstr "Sie sprechen …"
245msgid "Search"
247msgid "Search"
246msgstr "Suchen"
248msgstr "Suchen"
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr "Entschuldigung, es wurden keine Treffer erzielt."
252msgstr "Entschuldigung, es wurden keine Treffer erzielt."
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr "Alle"
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255−msgstr ""
261+msgstr "Bitte geben Sie %1 ein"
po/el.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-27 00:53+0000\n"
11"PO-Revision-Date: 2013-06-27 00:53+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Greek <el@li.org>\n"
13"Language-Team: Greek <el@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95msgstr ""
95msgstr ""
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr ""
99msgstr ""
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103msgstr ""
103msgstr ""
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
107msgstr ""
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111msgstr ""
111msgstr ""
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115msgstr ""
115msgstr ""
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119msgstr ""
119msgstr ""
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127msgstr ""
127msgstr ""
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148msgstr[0] ""
150msgstr[0] ""
149msgstr[1] ""
151msgstr[1] ""
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153msgstr ""
155msgstr ""
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157msgstr ""
159msgstr ""
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161msgstr ""
163msgstr ""
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165msgstr ""
167msgstr ""
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169msgstr ""
171msgstr ""
170
172
@@ -208,7 +210,7 @@ msgstr ""
208msgid "Author:"
210msgid "Author:"
209msgstr ""
211msgstr ""
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213msgstr ""
215msgstr ""
214
216
@@ -245,11 +247,15 @@ msgstr "Ομιλία..."
245msgid "Search"
247msgid "Search"
246msgstr "Αναζήτηση"
248msgstr "Αναζήτηση"
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr "Λυπούμαστε, δεν υπάρχει τίποτα που να ταιριάζει στην αναζήτησή σας."
252msgstr "Λυπούμαστε, δεν υπάρχει τίποτα που να ταιριάζει στην αναζήτησή σας."
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255msgstr ""
261msgstr ""
po/en_AU.po+53−47
@@ -7,16 +7,16 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11−"PO-Revision-Date: 2013-06-27 01:13+0000\n"
11+"PO-Revision-Date: 2013-09-28 07:46+0000\n"
12−"Last-Translator: Jackson Doak <Doak.jackson@gmail.com>\n"
12+"Last-Translator: Jared Norris <jarednorris@ubuntu.com>\n"
13"Language-Team: English (Australia) <en_AU@li.org>\n"
13"Language-Team: English (Australia) <en_AU@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,48 +86,50 @@ msgstr "Wikipedia"
86msgid "YouTube"
86msgid "YouTube"
87msgstr "YouTube"
87msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91−msgstr ""
91+msgstr "Skip intro"
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95−msgstr ""
95+msgstr "Right edge"
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99−msgstr ""
99+msgstr "Try swiping from the right edge to unlock the phone"
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103−msgstr ""
103+msgstr "Top edge"
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107−msgstr ""
107+msgstr "Try swiping from the top edge to access the indicators"
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111−msgstr ""
111+msgstr "Close"
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115−msgstr ""
115+msgstr "Swipe up again to close the settings screen"
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119−msgstr ""
119+msgstr "Left edge"
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123−msgstr ""
123+msgstr "Swipe from the left to reveal the launcher for quick access to apps"
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127−msgstr ""
127+msgstr "Well done"
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -138,35 +140,35 @@ msgstr "Recent searches"
138#: Dash/Apps/AppInfo.qml:73
140#: Dash/Apps/AppInfo.qml:73
139#, qt-format
141#, qt-format
140msgid "(%1)"
142msgid "(%1)"
141−msgstr ""
143+msgstr "(%1)"
142
144
143#. TRANSLATORS: Number of persons who wrote reviews for this app
145#. TRANSLATORS: Number of persons who wrote reviews for this app
144#: Dash/Apps/AppInfo.qml:85
146#: Dash/Apps/AppInfo.qml:85
145#, qt-format
147#, qt-format
146msgid "%1 review"
148msgid "%1 review"
147msgid_plural "%1 reviews"
149msgid_plural "%1 reviews"
148−msgstr[0] ""
150+msgstr[0] "%1 review"
149−msgstr[1] ""
151+msgstr[1] "%1 reviews"
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153−msgstr ""
155+msgstr "Rate this"
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157−msgstr ""
159+msgstr "Add a review"
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161−msgstr ""
163+msgstr "Review"
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165−msgstr ""
167+msgstr "Send"
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169−msgstr ""
171+msgstr "Comments:"
170
172
171#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
173#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
172msgid "Featured"
174msgid "Featured"
@@ -208,18 +210,18 @@ msgstr "Starring:"
208msgid "Author:"
210msgid "Author:"
209msgstr "Author:"
211msgstr "Author:"
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213−msgstr ""
215+msgstr "Emergency Call"
214
216
215#: Greeter/PassphraseLockscreen.qml:59
217#: Greeter/PassphraseLockscreen.qml:59
216#, qt-format
218#, qt-format
217msgid "Hello %1"
219msgid "Hello %1"
218−msgstr ""
220+msgstr "Hello %1"
219
221
220#: Greeter/PassphraseLockscreen.qml:59
222#: Greeter/PassphraseLockscreen.qml:59
221msgid "Hello"
223msgid "Hello"
222−msgstr ""
224+msgstr "Hello"
223
225
224#: Hud/HudParametrizedActionsPage.qml:132
226#: Hud/HudParametrizedActionsPage.qml:132
225msgid "Confirm"
227msgid "Confirm"
@@ -245,11 +247,15 @@ msgstr "Speaking..."
245msgid "Search"
247msgid "Search"
246msgstr "Search"
248msgstr "Search"
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr "Sorry, there is nothing that matches your search."
252msgstr "Sorry, there is nothing that matches your search."
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255−msgstr ""
261+msgstr "Please enter %1"
po/en_GB.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-27 08:53+0000\n"
11"PO-Revision-Date: 2013-06-27 08:53+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
13"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,48 +86,50 @@ msgstr "Wikipedia"
86msgid "YouTube"
86msgid "YouTube"
87msgstr "YouTube"
87msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95msgstr ""
95msgstr ""
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr ""
99msgstr ""
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103msgstr ""
103msgstr ""
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
107msgstr ""
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111msgstr ""
111msgstr ""
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115msgstr ""
115msgstr ""
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119msgstr ""
119msgstr ""
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127msgstr ""
127msgstr ""
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148msgstr[0] ""
150msgstr[0] ""
149msgstr[1] ""
151msgstr[1] ""
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153msgstr ""
155msgstr ""
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157msgstr ""
159msgstr ""
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161msgstr ""
163msgstr ""
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165msgstr ""
167msgstr ""
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169msgstr ""
171msgstr ""
170
172
@@ -208,7 +210,7 @@ msgstr "Starring:"
208msgid "Author:"
210msgid "Author:"
209msgstr "Author:"
211msgstr "Author:"
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213msgstr ""
215msgstr ""
214
216
@@ -245,11 +247,15 @@ msgstr "Speaking..."
245msgid "Search"
247msgid "Search"
246msgstr "Search"
248msgstr "Search"
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr "Sorry, there is nothing that matches your search."
252msgstr "Sorry, there is nothing that matches your search."
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255msgstr "Please enter %1"
261msgstr "Please enter %1"
po/eo.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-26 22:35+0000\n"
11"PO-Revision-Date: 2013-06-26 22:35+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Esperanto <eo@li.org>\n"
13"Language-Team: Esperanto <eo@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95msgstr ""
95msgstr ""
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr ""
99msgstr ""
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103msgstr ""
103msgstr ""
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
107msgstr ""
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111msgstr ""
111msgstr ""
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115msgstr ""
115msgstr ""
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119msgstr ""
119msgstr ""
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127msgstr ""
127msgstr ""
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148msgstr[0] ""
150msgstr[0] ""
149msgstr[1] ""
151msgstr[1] ""
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153msgstr ""
155msgstr ""
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157msgstr ""
159msgstr ""
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161msgstr ""
163msgstr ""
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165msgstr ""
167msgstr ""
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169msgstr ""
171msgstr ""
170
172
@@ -208,7 +210,7 @@ msgstr ""
208msgid "Author:"
210msgid "Author:"
209msgstr ""
211msgstr ""
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213msgstr ""
215msgstr ""
214
216
@@ -245,11 +247,15 @@ msgstr ""
245msgid "Search"
247msgid "Search"
246msgstr ""
248msgstr ""
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr ""
252msgstr ""
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255msgstr ""
261msgstr ""
po/es.po+34−26
@@ -7,16 +7,16 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11−"PO-Revision-Date: 2013-09-04 22:12+0000\n"
11+"PO-Revision-Date: 2013-10-02 04:59+0000\n"
12"Last-Translator: Adolfo Jayme Barrientos <fitoschido@gmail.com>\n"
12"Last-Translator: Adolfo Jayme Barrientos <fitoschido@gmail.com>\n"
13"Language-Team: Spanish <es@li.org>\n"
13"Language-Team: Spanish <es@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-09-05 05:35+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-03 06:08+0000\n"
19−"X-Generator: Launchpad (build 16758)\n"
19+"X-Generator: Launchpad (build 16791)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -48,7 +48,7 @@ msgstr "GMail"
48
48
49#: Applications/applications.js:62
49#: Applications/applications.js:62
50msgid "Weather"
50msgid "Weather"
51−msgstr "Metereología"
51+msgstr "Meteorología"
52
52
53#: Applications/applications.js:68
53#: Applications/applications.js:68
54msgid "Notepad"
54msgid "Notepad"
@@ -86,51 +86,55 @@ msgstr "Wikipedia"
86msgid "YouTube"
86msgid "YouTube"
87msgstr "YouTube"
87msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr "Omitir la introducción"
91msgstr "Omitir la introducción"
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95msgstr "Borde derecho"
95msgstr "Borde derecho"
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr "Deslice el dedo desde el borde derecho para desbloquear el teléfono"
99msgstr "Deslice el dedo desde el borde derecho para desbloquear el teléfono"
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103msgstr "Borde superior"
103msgstr "Borde superior"
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr "Deslice el dedo desde el borde superior para acceder a los menús"
107msgstr "Deslice el dedo desde el borde superior para acceder a los menús"
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111msgstr "Cerrar"
111msgstr "Cerrar"
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115msgstr "Deslice hacia arriba para cerrar la pantalla de configuración"
115msgstr "Deslice hacia arriba para cerrar la pantalla de configuración"
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119msgstr "Borde izquierdo"
119msgstr "Borde izquierdo"
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124"Deslice el dedo desde la izquierda para mostrar el lanzador y acceder "
124"Deslice el dedo desde la izquierda para mostrar el lanzador y acceder "
125"rápidamente a las aplicaciones"
125"rápidamente a las aplicaciones"
126
126
127−#: Components/EdgeDemo.qml:217
127+#: Components/EdgeDemo.qml:226
128msgid "Well done"
128msgid "Well done"
129msgstr "Bien hecho"
129msgstr "Bien hecho"
130
130
131−#: Components/EdgeDemo.qml:218
131+#: Components/EdgeDemo.qml:227
132+msgid ""
132−msgid "You have now mastered the edge gestures and can start using the phone"
133+"You have now mastered the edge gestures and can start using the "
134+"phone<br><br>Tap anywhere to start"
135+msgstr ""
133−msgstr "Ahora domina el uso de gestos de los bordes. Puede usar el teléfono"
136+"Ahora domina los gestos de bordes y puede usar el teléfono<br><br>Toque la "
137+"pantalla para comenzar"
134
138
135#: Components/PageHeader.qml:298
139#: Components/PageHeader.qml:298
136msgid "Recent searches"
140msgid "Recent searches"
@@ -150,23 +154,23 @@ msgid_plural "%1 reviews"
150msgstr[0] "%1 reseña"
154msgstr[0] "%1 reseña"
151msgstr[1] "%1 reseñas"
155msgstr[1] "%1 reseñas"
152
156
153−#: Dash/Apps/AppPreview.qml:175
157+#: Dash/Apps/AppPreview.qml:178
154msgid "Rate this"
158msgid "Rate this"
155msgstr "Valorar esto"
159msgstr "Valorar esto"
156
160
157−#: Dash/Apps/AppReviews.qml:72
161+#: Dash/Apps/AppReviews.qml:74
158msgid "Add a review"
162msgid "Add a review"
159msgstr "Añadir una reseña"
163msgstr "Añadir una reseña"
160
164
161−#: Dash/Apps/AppReviews.qml:84
165+#: Dash/Apps/AppReviews.qml:86
162msgid "Review"
166msgid "Review"
163msgstr "Reseñar"
167msgstr "Reseñar"
164
168
165−#: Dash/Apps/AppReviews.qml:118
169+#: Dash/Apps/AppReviews.qml:121
166msgid "Send"
170msgid "Send"
167msgstr "Enviar"
171msgstr "Enviar"
168
172
169−#: Dash/Apps/AppReviews.qml:136
173+#: Dash/Apps/AppReviews.qml:139
170msgid "Comments:"
174msgid "Comments:"
171msgstr "Comentarios:"
175msgstr "Comentarios:"
172
176
@@ -210,7 +214,7 @@ msgstr "Protagonistas:"
210msgid "Author:"
214msgid "Author:"
211msgstr "Autor:"
215msgstr "Autor:"
212
216
213−#: Greeter/Lockscreen.qml:134
217+#: Greeter/Lockscreen.qml:142
214msgid "Emergency Call"
218msgid "Emergency Call"
215msgstr "Llamada de emergencia"
219msgstr "Llamada de emergencia"
216
220
@@ -247,11 +251,15 @@ msgstr "Hablando…"
247msgid "Search"
251msgid "Search"
248msgstr "Buscar"
252msgstr "Buscar"
249
253
250−#: plugins/Unity/scope.cpp:317
254+#: plugins/Unity/scope.cpp:336
251msgid "Sorry, there is nothing that matches your search."
255msgid "Sorry, there is nothing that matches your search."
252msgstr "No hay nada que coincida con su búsqueda."
256msgstr "No hay nada que coincida con su búsqueda."
253
257
258+#: plugins/Unity/showallfilteroption.cpp:41
259+msgid "All"
260+msgstr "Todo"
261+
254−#: Shell.qml:429
262+#: Shell.qml:453
255#, qt-format
263#, qt-format
256msgid "Please enter %1"
264msgid "Please enter %1"
257msgstr "Introduzca %1"
265msgstr "Introduzca %1"
po/fi.po+43−35
@@ -7,16 +7,16 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11−"PO-Revision-Date: 2013-08-23 16:15+0000\n"
11+"PO-Revision-Date: 2013-10-03 09:21+0000\n"
12−"Last-Translator: Timo Jyrinki <timo.jyrinki@canonical.com>\n"
12+"Last-Translator: Jiri Grönroos <Unknown>\n"
13"Language-Team: Finnish <fi@li.org>\n"
13"Language-Team: Finnish <fi@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-04 06:11+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16791)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,49 +86,53 @@ msgstr "Wikipedia"
86msgid "YouTube"
86msgid "YouTube"
87msgstr "YouTube"
87msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91−msgstr ""
91+msgstr "Ohita esittely"
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95−msgstr ""
95+msgstr "Oikea reuna"
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99−msgstr ""
99+msgstr "Vedä oikealta avataksesi puhelimen lukituksen"
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103−msgstr ""
103+msgstr "Yläreuna"
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107−msgstr ""
107+msgstr "Vedä yläreunasta käyttääksesi ilmaisimia"
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111−msgstr ""
111+msgstr "Sulje"
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115−msgstr ""
115+msgstr "Vedä uudestaan sulkeaksesi asetusnäkymän"
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119−msgstr ""
119+msgstr "Vasen reuna"
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123−msgstr ""
123+msgstr "Vedä vasemmalta saattaaksesi sovellusten käynnistimen esiin"
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127−msgstr ""
127+msgstr "Hyvin tehty"
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
134+"Hallitset nyt reunaeleet, joten voit aloittaa puhelimen "
135+"käytön<br><br>Napauta missä tahansa aloittaaksesi"
132
136
133#: Components/PageHeader.qml:298
137#: Components/PageHeader.qml:298
134msgid "Recent searches"
138msgid "Recent searches"
@@ -148,23 +152,23 @@ msgid_plural "%1 reviews"
148msgstr[0] "%1 arvostelu"
152msgstr[0] "%1 arvostelu"
149msgstr[1] "%1 arvostelua"
153msgstr[1] "%1 arvostelua"
150
154
151−#: Dash/Apps/AppPreview.qml:175
155+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
156msgid "Rate this"
153msgstr "Arvioi tämä"
157msgstr "Arvioi tämä"
154
158
155−#: Dash/Apps/AppReviews.qml:72
159+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
160msgid "Add a review"
157msgstr "Lisää arvostelu"
161msgstr "Lisää arvostelu"
158
162
159−#: Dash/Apps/AppReviews.qml:84
163+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
164msgid "Review"
161msgstr "Arvostelu"
165msgstr "Arvostelu"
162
166
163−#: Dash/Apps/AppReviews.qml:118
167+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
168msgid "Send"
165msgstr "Lähetä"
169msgstr "Lähetä"
166
170
167−#: Dash/Apps/AppReviews.qml:136
171+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
172msgid "Comments:"
169msgstr "Kommentit:"
173msgstr "Kommentit:"
170
174
@@ -208,7 +212,7 @@ msgstr "Pääosissa:"
208msgid "Author:"
212msgid "Author:"
209msgstr "Tekijä:"
213msgstr "Tekijä:"
210
214
211−#: Greeter/Lockscreen.qml:134
215+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
216msgid "Emergency Call"
213msgstr "Hätäpuhelu"
217msgstr "Hätäpuhelu"
214
218
@@ -245,11 +249,15 @@ msgstr "Puhutaan..."
245msgid "Search"
249msgid "Search"
246msgstr "Hae"
250msgstr "Hae"
247
251
248−#: plugins/Unity/scope.cpp:317
252+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
253msgid "Sorry, there is nothing that matches your search."
250msgstr "Hakuun täsmääviä tuloksia ei löydy."
254msgstr "Hakuun täsmääviä tuloksia ei löydy."
251
255
256+#: plugins/Unity/showallfilteroption.cpp:41
257+msgid "All"
258+msgstr "Kaikki"
259+
252−#: Shell.qml:429
260+#: Shell.qml:453
253#, qt-format
261#, qt-format
254msgid "Please enter %1"
262msgid "Please enter %1"
255msgstr "Kirjoita %1"
263msgstr "Kirjoita %1"
po/fo.po+41−35
@@ -7,56 +7,56 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11−"PO-Revision-Date: 2013-06-27 02:57+0000\n"
11+"PO-Revision-Date: 2013-10-01 15:13+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12+"Last-Translator: Jógvan Olsen <jeggy@jebster.net>\n"
13"Language-Team: Faroese <fo@li.org>\n"
13"Language-Team: Faroese <fo@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
23−msgstr ""
23+msgstr "Fartelefon"
24
24
25#: Applications/applications.js:29
25#: Applications/applications.js:29
26msgid "Camera"
26msgid "Camera"
27−msgstr ""
27+msgstr "Myndatól"
28
28
29#: Applications/applications.js:35
29#: Applications/applications.js:35
30msgid "Gallery"
30msgid "Gallery"
31−msgstr ""
31+msgstr "Myndasavn"
32
32
33#: Applications/applications.js:40
33#: Applications/applications.js:40
34msgid "Facebook"
34msgid "Facebook"
35−msgstr ""
35+msgstr "Facebook"
36
36
37#: Applications/applications.js:46
37#: Applications/applications.js:46
38msgid "Browser"
38msgid "Browser"
39−msgstr ""
39+msgstr "Kagi"
40
40
41#: Applications/applications.js:51
41#: Applications/applications.js:51
42msgid "Twitter"
42msgid "Twitter"
43−msgstr ""
43+msgstr "Twitter"
44
44
45#: Applications/applications.js:57
45#: Applications/applications.js:57
46msgid "GMail"
46msgid "GMail"
47−msgstr ""
47+msgstr "GMail"
48
48
49#: Applications/applications.js:62
49#: Applications/applications.js:62
50msgid "Weather"
50msgid "Weather"
51−msgstr ""
51+msgstr "Veðrið"
52
52
53#: Applications/applications.js:68
53#: Applications/applications.js:68
54msgid "Notepad"
54msgid "Notepad"
55−msgstr ""
55+msgstr "Skriviblokkur"
56
56
57#: Applications/applications.js:74
57#: Applications/applications.js:74
58msgid "Calendar"
58msgid "Calendar"
59−msgstr ""
59+msgstr "Kalendari"
60
60
61#: Applications/applications.js:80
61#: Applications/applications.js:80
62msgid "Media Player"
62msgid "Media Player"
@@ -86,48 +86,50 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95msgstr ""
95msgstr ""
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr ""
99msgstr ""
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103msgstr ""
103msgstr ""
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
107msgstr ""
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111msgstr ""
111msgstr ""
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115msgstr ""
115msgstr ""
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119msgstr ""
119msgstr ""
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127msgstr ""
127msgstr ""
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148msgstr[0] ""
150msgstr[0] ""
149msgstr[1] ""
151msgstr[1] ""
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153msgstr ""
155msgstr ""
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157msgstr ""
159msgstr ""
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161msgstr ""
163msgstr ""
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165msgstr ""
167msgstr ""
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169msgstr ""
171msgstr ""
170
172
@@ -208,7 +210,7 @@ msgstr ""
208msgid "Author:"
210msgid "Author:"
209msgstr ""
211msgstr ""
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213msgstr ""
215msgstr ""
214
216
@@ -245,11 +247,15 @@ msgstr "Snakkar..."
245msgid "Search"
247msgid "Search"
246msgstr "Leita"
248msgstr "Leita"
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr "Tíanverri er tað einki sum hóskar til tína leiting."
252msgstr "Tíanverri er tað einki sum hóskar til tína leiting."
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255msgstr ""
261msgstr ""
po/fr.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-27 03:21+0000\n"
11"PO-Revision-Date: 2013-06-27 03:21+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: French <fr@li.org>\n"
13"Language-Team: French <fr@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95msgstr ""
95msgstr ""
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr ""
99msgstr ""
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103msgstr ""
103msgstr ""
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
107msgstr ""
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111msgstr ""
111msgstr ""
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115msgstr ""
115msgstr ""
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119msgstr ""
119msgstr ""
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127msgstr ""
127msgstr ""
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148msgstr[0] ""
150msgstr[0] ""
149msgstr[1] ""
151msgstr[1] ""
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153msgstr ""
155msgstr ""
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157msgstr ""
159msgstr ""
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161msgstr ""
163msgstr ""
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165msgstr ""
167msgstr ""
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169msgstr ""
171msgstr ""
170
172
@@ -208,7 +210,7 @@ msgstr ""
208msgid "Author:"
210msgid "Author:"
209msgstr ""
211msgstr ""
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213msgstr ""
215msgstr ""
214
216
@@ -245,11 +247,15 @@ msgstr ""
245msgid "Search"
247msgid "Search"
246msgstr ""
248msgstr ""
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr ""
252msgstr ""
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255msgstr ""
261msgstr ""
po/gd.ponew file+270
@@ -0,0 +1,270 @@
1+# Gaelic; Scottish 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-01 09:43+0200\n"
11+"PO-Revision-Date: 2013-09-30 10:34+0000\n"
12+"Last-Translator: Akerbeltz <fios@akerbeltz.org>\n"
13+"Language-Team: Gaelic; Scottish <gd@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=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
18+"(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"
21+
22+#: Applications/applications.js:23
23+msgid "Phone"
24+msgstr "Fòn"
25+
26+#: Applications/applications.js:29
27+msgid "Camera"
28+msgstr "Camara"
29+
30+#: Applications/applications.js:35
31+msgid "Gallery"
32+msgstr "Gailearaidh"
33+
34+#: Applications/applications.js:40
35+msgid "Facebook"
36+msgstr "Facebook"
37+
38+#: Applications/applications.js:46
39+msgid "Browser"
40+msgstr "Brabhsair"
41+
42+#: Applications/applications.js:51
43+msgid "Twitter"
44+msgstr "Twitter"
45+
46+#: Applications/applications.js:57
47+msgid "GMail"
48+msgstr "GMail"
49+
50+#: Applications/applications.js:62
51+msgid "Weather"
52+msgstr "An aimsir"
53+
54+#: Applications/applications.js:68
55+msgid "Notepad"
56+msgstr "Pada nan nòtaichean"
57+
58+#: Applications/applications.js:74
59+msgid "Calendar"
60+msgstr "Am mìosachan"
61+
62+#: Applications/applications.js:80
63+msgid "Media Player"
64+msgstr "Cluicheadair mheadhanan"
65+
66+#: Applications/applications.js:86
67+msgid "Evernote"
68+msgstr "Evernote"
69+
70+#: Applications/applications.js:91
71+msgid "Map"
72+msgstr "Mapa"
73+
74+#: Applications/applications.js:96
75+msgid "Pinterest"
76+msgstr "Pinterest"
77+
78+#: Applications/applications.js:101
79+msgid "SoundCloud"
80+msgstr "SoundCloud"
81+
82+#: Applications/applications.js:106
83+msgid "Wikipedia"
84+msgstr "An Uicipeid"
85+
86+#: Applications/applications.js:111
87+msgid "YouTube"
88+msgstr "YouTube"
89+
90+#: Components/EdgeDemoOverlay.qml:150
91+msgid "Skip intro"
92+msgstr "Gearr leum thairis air an ro-ràdh"
93+
94+#: Components/EdgeDemo.qml:112
95+msgid "Right edge"
96+msgstr "An oir dheas"
97+
98+#: Components/EdgeDemo.qml:113
99+msgid "Try swiping from the right edge to unlock the phone"
100+msgstr ""
101+"Feuch is dèan grad-shlaighdeadh a-steach on oir dheas gus a' ghlas a thoirt "
102+"far an fhòn"
103+
104+#: Components/EdgeDemo.qml:144
105+msgid "Top edge"
106+msgstr "An oir aig a' bharr"
107+
108+#: Components/EdgeDemo.qml:145
109+msgid "Try swiping from the top edge to access the indicators"
110+msgstr ""
111+"Feuch is dèan grad-shlaighdeadh a-steach on oir aig a' bharr gus greim "
112+"fhaighinn air na taisbeanairean"
113+
114+#: Components/EdgeDemo.qml:170
115+msgid "Close"
116+msgstr "Dùin"
117+
118+#: Components/EdgeDemo.qml:171
119+msgid "Swipe up again to close the settings screen"
120+msgstr "Dèan grad-shlaighdeadh a-nìos gus sgrìn nan roghainnean a dhùnadh"
121+
122+#: Components/EdgeDemo.qml:198
123+msgid "Left edge"
124+msgstr "An oir chlì"
125+
126+#: Components/EdgeDemo.qml:199
127+msgid "Swipe from the left to reveal the launcher for quick access to apps"
128+msgstr ""
129+"Dèan grad-shlaighdeadh on oir chlì air an lòinseir a bheir dhut cothrom "
130+"luath air na h-aplacaidean"
131+
132+#: Components/EdgeDemo.qml:226
133+msgid "Well done"
134+msgstr "Gasta!"
135+
136+#: Components/EdgeDemo.qml:227
137+msgid ""
138+"You have now mastered the edge gestures and can start using the "
139+"phone<br><br>Tap anywhere to start"
140+msgstr ""
141+
142+#: Components/PageHeader.qml:298
143+msgid "Recent searches"
144+msgstr "Na lorg thu o chionn goirid"
145+
146+#. TRANSLATORS: Number of persons who rated this app
147+#: Dash/Apps/AppInfo.qml:73
148+#, qt-format
149+msgid "(%1)"
150+msgstr "(%1)"
151+
152+#. TRANSLATORS: Number of persons who wrote reviews for this app
153+#: Dash/Apps/AppInfo.qml:85
154+#, qt-format
155+msgid "%1 review"
156+msgid_plural "%1 reviews"
157+msgstr[0] "%1 lèirmheas"
158+msgstr[1] "%1 lèirmheas"
159+msgstr[2] "%1 lèirmheasan"
160+msgstr[3] "%1 lèirmheas"
161+
162+#: Dash/Apps/AppPreview.qml:178
163+msgid "Rate this"
164+msgstr "Rangaich seo"
165+
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+
182+#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
183+msgid "Featured"
184+msgstr "Brosnaichte"
185+
186+#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
187+msgid "Recent"
188+msgstr "O chionn goirid"
189+
190+#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
191+msgid "New Releases"
192+msgstr "Air ùr-sgaoileadh"
193+
194+#: Dash/DashMusic.qml:30
195+msgid "Top Charting"
196+msgstr "Gràinnean-mullaich nan cairt"
197+
198+#: Dash/DashMusic.qml:91
199+msgid "Music"
200+msgstr "Ceòl"
201+
202+#: Dash/DashVideos.qml:31
203+msgid "Popular Online"
204+msgstr "Fèill mhòr air air loidhne"
205+
206+#: Dash/DashVideos.qml:146
207+msgid "Videos"
208+msgstr "Videothan"
209+
210+#: Dash/Video/VideoPreview.qml:130
211+msgid "Directed by:"
212+msgstr "Air a stiùireadh le:"
213+
214+#: Dash/Video/VideoPreview.qml:153
215+msgid "Starring:"
216+msgstr "Leis na daoine a leanas:"
217+
218+#: Dash/Video/VideoPreview.qml:176
219+msgid "Author:"
220+msgstr "Ùghdar:"
221+
222+#: Greeter/Lockscreen.qml:142
223+msgid "Emergency Call"
224+msgstr "Gairm èiginn"
225+
226+#: Greeter/PassphraseLockscreen.qml:59
227+#, qt-format
228+msgid "Hello %1"
229+msgstr "Shin thu, %1"
230+
231+#: Greeter/PassphraseLockscreen.qml:59
232+msgid "Hello"
233+msgstr "Shin thu"
234+
235+#: Hud/HudParametrizedActionsPage.qml:132
236+msgid "Confirm"
237+msgstr "Dearbhaich"
238+
239+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
240+msgid "Type or say a command"
241+msgstr "Sgrìobh no can àithne"
242+
243+#: Hud/Hud.qml:84
244+msgid "Loading. Please Wait..."
245+msgstr "'Ga luchdadh, fuirich ort..."
246+
247+#: Hud/Hud.qml:89
248+msgid "Speak Now..."
249+msgstr "Can rud a-nis..."
250+
251+#: Hud/Hud.qml:94
252+msgid "Speaking..."
253+msgstr "A' bruidhinn..."
254+
255+#: Panel/SearchIndicator.qml:27
256+msgid "Search"
257+msgstr "Lorg"
258+
259+#: plugins/Unity/scope.cpp:336
260+msgid "Sorry, there is nothing that matches your search."
261+msgstr "Tha sinn duilich ach chan eil dad a' freagairt ris na lorg thu."
262+
263+#: plugins/Unity/showallfilteroption.cpp:41
264+msgid "All"
265+msgstr ""
266+
267+#: Shell.qml:453
268+#, qt-format
269+msgid "Please enter %1"
270+msgstr "Cuir a-steach %1"
po/gl.po+79−71
@@ -7,128 +7,132 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11−"PO-Revision-Date: 2013-06-27 03:38+0000\n"
11+"PO-Revision-Date: 2013-10-03 18:49+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12+"Last-Translator: Marcos Lans <Unknown>\n"
13"Language-Team: Galician <gl@li.org>\n"
13"Language-Team: Galician <gl@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-04 06:11+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16791)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
23−msgstr ""
23+msgstr "Teléfono"
24
24
25#: Applications/applications.js:29
25#: Applications/applications.js:29
26msgid "Camera"
26msgid "Camera"
27−msgstr ""
27+msgstr "Cámara"
28
28
29#: Applications/applications.js:35
29#: Applications/applications.js:35
30msgid "Gallery"
30msgid "Gallery"
31−msgstr ""
31+msgstr "Galería"
32
32
33#: Applications/applications.js:40
33#: Applications/applications.js:40
34msgid "Facebook"
34msgid "Facebook"
35−msgstr ""
35+msgstr "Facebook"
36
36
37#: Applications/applications.js:46
37#: Applications/applications.js:46
38msgid "Browser"
38msgid "Browser"
39−msgstr ""
39+msgstr "Navegador"
40
40
41#: Applications/applications.js:51
41#: Applications/applications.js:51
42msgid "Twitter"
42msgid "Twitter"
43−msgstr ""
43+msgstr "Twitter"
44
44
45#: Applications/applications.js:57
45#: Applications/applications.js:57
46msgid "GMail"
46msgid "GMail"
47−msgstr ""
47+msgstr "GMail"
48
48
49#: Applications/applications.js:62
49#: Applications/applications.js:62
50msgid "Weather"
50msgid "Weather"
51−msgstr ""
51+msgstr "O tempo"
52
52
53#: Applications/applications.js:68
53#: Applications/applications.js:68
54msgid "Notepad"
54msgid "Notepad"
55−msgstr ""
55+msgstr "Bloc de notas"
56
56
57#: Applications/applications.js:74
57#: Applications/applications.js:74
58msgid "Calendar"
58msgid "Calendar"
59−msgstr ""
59+msgstr "Calendario"
60
60
61#: Applications/applications.js:80
61#: Applications/applications.js:80
62msgid "Media Player"
62msgid "Media Player"
63−msgstr ""
63+msgstr "Reprodutor multimedia"
64
64
65#: Applications/applications.js:86
65#: Applications/applications.js:86
66msgid "Evernote"
66msgid "Evernote"
67−msgstr ""
67+msgstr "Evernote"
68
68
69#: Applications/applications.js:91
69#: Applications/applications.js:91
70msgid "Map"
70msgid "Map"
71−msgstr ""
71+msgstr "Mapa"
72
72
73#: Applications/applications.js:96
73#: Applications/applications.js:96
74msgid "Pinterest"
74msgid "Pinterest"
75−msgstr ""
75+msgstr "Pinterest"
76
76
77#: Applications/applications.js:101
77#: Applications/applications.js:101
78msgid "SoundCloud"
78msgid "SoundCloud"
79−msgstr ""
79+msgstr "SoundCloud"
80
80
81#: Applications/applications.js:106
81#: Applications/applications.js:106
82msgid "Wikipedia"
82msgid "Wikipedia"
83−msgstr ""
83+msgstr "Wikipedia"
84
84
85#: Applications/applications.js:111
85#: Applications/applications.js:111
86msgid "YouTube"
86msgid "YouTube"
87−msgstr ""
87+msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91−msgstr ""
91+msgstr "Saltar introdución"
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95−msgstr ""
95+msgstr "Bordo dereito"
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99−msgstr ""
99+msgstr "Probe o arrastre desde o bordo dereito para desbloquear o teléfono"
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103−msgstr ""
103+msgstr "Bordo superior"
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107−msgstr ""
107+msgstr "Esvare desde o bordo superior para acceder aos indicadores."
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111−msgstr ""
111+msgstr "Pechar"
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115−msgstr ""
115+msgstr "Esvare cara a arriba para pechar os axustes"
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119−msgstr ""
119+msgstr "Bordo esquerdo"
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123−msgstr ""
123+msgstr "Esvare desde a esquerda para mostrar o iniciador de acceso rápido"
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127−msgstr ""
127+msgstr "Ben feito"
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
134+"Xa domina os xestos desde os bordos e pode comezar a usar o "
135+"móbil<br><br>Toque en calquera sitio para comezar"
132
136
133#: Components/PageHeader.qml:298
137#: Components/PageHeader.qml:298
134msgid "Recent searches"
138msgid "Recent searches"
@@ -138,47 +142,47 @@ msgstr "Buscas recentes"
138#: Dash/Apps/AppInfo.qml:73
142#: Dash/Apps/AppInfo.qml:73
139#, qt-format
143#, qt-format
140msgid "(%1)"
144msgid "(%1)"
141−msgstr ""
145+msgstr "(%1)"
142
146
143#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app
144#: Dash/Apps/AppInfo.qml:85
148#: Dash/Apps/AppInfo.qml:85
145#, qt-format
149#, qt-format
146msgid "%1 review"
150msgid "%1 review"
147msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
148−msgstr[0] ""
152+msgstr[0] "%1 opinión"
149−msgstr[1] ""
153+msgstr[1] "%1 opinións"
150
154
151−#: Dash/Apps/AppPreview.qml:175
155+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
156msgid "Rate this"
153−msgstr ""
157+msgstr "Valore isto"
154
158
155−#: Dash/Apps/AppReviews.qml:72
159+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
160msgid "Add a review"
157−msgstr ""
161+msgstr "Engadir unha opinión"
158
162
159−#: Dash/Apps/AppReviews.qml:84
163+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
164msgid "Review"
161−msgstr ""
165+msgstr "Opinión"
162
166
163−#: Dash/Apps/AppReviews.qml:118
167+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
168msgid "Send"
165−msgstr ""
169+msgstr "Enviar"
166
170
167−#: Dash/Apps/AppReviews.qml:136
171+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
172msgid "Comments:"
169−msgstr ""
173+msgstr "Comentarios:"
170
174
171#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
175#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
172msgid "Featured"
176msgid "Featured"
173−msgstr ""
177+msgstr "Destacado"
174
178
175#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
179#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
176msgid "Recent"
180msgid "Recent"
177−msgstr ""
181+msgstr "Recentes"
178
182
179#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
183#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
180msgid "New Releases"
184msgid "New Releases"
181−msgstr ""
185+msgstr "Novas versións"
182
186
183#: Dash/DashMusic.qml:30
187#: Dash/DashMusic.qml:30
184msgid "Top Charting"
188msgid "Top Charting"
@@ -190,7 +194,7 @@ msgstr "Música"
190
194
191#: Dash/DashVideos.qml:31
195#: Dash/DashVideos.qml:31
192msgid "Popular Online"
196msgid "Popular Online"
193−msgstr ""
197+msgstr "Populares en liña"
194
198
195#: Dash/DashVideos.qml:146
199#: Dash/DashVideos.qml:146
196msgid "Videos"
200msgid "Videos"
@@ -198,28 +202,28 @@ msgstr "Vídeos"
198
202
199#: Dash/Video/VideoPreview.qml:130
203#: Dash/Video/VideoPreview.qml:130
200msgid "Directed by:"
204msgid "Directed by:"
201−msgstr ""
205+msgstr "Dirixido por"
202
206
203#: Dash/Video/VideoPreview.qml:153
207#: Dash/Video/VideoPreview.qml:153
204msgid "Starring:"
208msgid "Starring:"
205−msgstr ""
209+msgstr "Favoritos"
206
210
207#: Dash/Video/VideoPreview.qml:176
211#: Dash/Video/VideoPreview.qml:176
208msgid "Author:"
212msgid "Author:"
209−msgstr ""
213+msgstr "Autor:"
210
214
211−#: Greeter/Lockscreen.qml:134
215+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
216msgid "Emergency Call"
213−msgstr ""
217+msgstr "Chamada de emerxencia"
214
218
215#: Greeter/PassphraseLockscreen.qml:59
219#: Greeter/PassphraseLockscreen.qml:59
216#, qt-format
220#, qt-format
217msgid "Hello %1"
221msgid "Hello %1"
218−msgstr ""
222+msgstr "Ola %1"
219
223
220#: Greeter/PassphraseLockscreen.qml:59
224#: Greeter/PassphraseLockscreen.qml:59
221msgid "Hello"
225msgid "Hello"
222−msgstr ""
226+msgstr "Ola"
223
227
224#: Hud/HudParametrizedActionsPage.qml:132
228#: Hud/HudParametrizedActionsPage.qml:132
225msgid "Confirm"
229msgid "Confirm"
@@ -245,11 +249,15 @@ msgstr "Falando…"
245msgid "Search"
249msgid "Search"
246msgstr "Buscar"
250msgstr "Buscar"
247
251
248−#: plugins/Unity/scope.cpp:317
252+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
253msgid "Sorry, there is nothing that matches your search."
250msgstr "Sentímolo, non hai nada que coincida con esta busca."
254msgstr "Sentímolo, non hai nada que coincida con esta busca."
251
255
256+#: plugins/Unity/showallfilteroption.cpp:41
257+msgid "All"
258+msgstr "Todo"
259+
252−#: Shell.qml:429
260+#: Shell.qml:453
253#, qt-format
261#, qt-format
254msgid "Please enter %1"
262msgid "Please enter %1"
255−msgstr ""
263+msgstr "Introduza %1"
po/he.po+79−73
@@ -7,127 +7,129 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11−"PO-Revision-Date: 2013-06-27 03:54+0000\n"
11+"PO-Revision-Date: 2013-10-01 09:19+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12+"Last-Translator: Yaron <sh.yaron@gmail.com>\n"
13"Language-Team: Hebrew <he@li.org>\n"
13"Language-Team: Hebrew <he@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
23−msgstr ""
23+msgstr "טלפון"
24
24
25#: Applications/applications.js:29
25#: Applications/applications.js:29
26msgid "Camera"
26msgid "Camera"
27−msgstr ""
27+msgstr "מצלמה"
28
28
29#: Applications/applications.js:35
29#: Applications/applications.js:35
30msgid "Gallery"
30msgid "Gallery"
31−msgstr ""
31+msgstr "גלריה"
32
32
33#: Applications/applications.js:40
33#: Applications/applications.js:40
34msgid "Facebook"
34msgid "Facebook"
35−msgstr ""
35+msgstr "Facebook"
36
36
37#: Applications/applications.js:46
37#: Applications/applications.js:46
38msgid "Browser"
38msgid "Browser"
39−msgstr ""
39+msgstr "דפדפן"
40
40
41#: Applications/applications.js:51
41#: Applications/applications.js:51
42msgid "Twitter"
42msgid "Twitter"
43−msgstr ""
43+msgstr "Twitter"
44
44
45#: Applications/applications.js:57
45#: Applications/applications.js:57
46msgid "GMail"
46msgid "GMail"
47−msgstr ""
47+msgstr "GMail"
48
48
49#: Applications/applications.js:62
49#: Applications/applications.js:62
50msgid "Weather"
50msgid "Weather"
51−msgstr ""
51+msgstr "מזג אוויר"
52
52
53#: Applications/applications.js:68
53#: Applications/applications.js:68
54msgid "Notepad"
54msgid "Notepad"
55−msgstr ""
55+msgstr "פנקס רשימות"
56
56
57#: Applications/applications.js:74
57#: Applications/applications.js:74
58msgid "Calendar"
58msgid "Calendar"
59−msgstr ""
59+msgstr "לוח שנה"
60
60
61#: Applications/applications.js:80
61#: Applications/applications.js:80
62msgid "Media Player"
62msgid "Media Player"
63−msgstr ""
63+msgstr "נגן מדיה"
64
64
65#: Applications/applications.js:86
65#: Applications/applications.js:86
66msgid "Evernote"
66msgid "Evernote"
67−msgstr ""
67+msgstr "Evernote"
68
68
69#: Applications/applications.js:91
69#: Applications/applications.js:91
70msgid "Map"
70msgid "Map"
71−msgstr ""
71+msgstr "מפה"
72
72
73#: Applications/applications.js:96
73#: Applications/applications.js:96
74msgid "Pinterest"
74msgid "Pinterest"
75−msgstr ""
75+msgstr "Pinterest"
76
76
77#: Applications/applications.js:101
77#: Applications/applications.js:101
78msgid "SoundCloud"
78msgid "SoundCloud"
79−msgstr ""
79+msgstr "SoundCloud"
80
80
81#: Applications/applications.js:106
81#: Applications/applications.js:106
82msgid "Wikipedia"
82msgid "Wikipedia"
83−msgstr ""
83+msgstr "ויקיפדיה"
84
84
85#: Applications/applications.js:111
85#: Applications/applications.js:111
86msgid "YouTube"
86msgid "YouTube"
87−msgstr ""
87+msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91−msgstr ""
91+msgstr "לדלג על הפתיחה"
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95−msgstr ""
95+msgstr "שול ימני"
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99−msgstr ""
99+msgstr "נא לנסות למשוך מהשול הימני כדי לשחרר את נעילת הטלפון"
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103−msgstr ""
103+msgstr "השול העליון"
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107−msgstr ""
107+msgstr "נא לנסות למשוך מהשול העליון כדי לגשת למחוונים"
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111−msgstr ""
111+msgstr "סגירה"
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115−msgstr ""
115+msgstr "ניתן למשוך שוב כדי לסגור את מסך ההגדרות"
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119−msgstr ""
119+msgstr "שול שמאלי"
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123−msgstr ""
123+msgstr "יש למשוך משמאל כדי לחשוף את המשגר לצורך גישה מהירה ליישומים"
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127−msgstr ""
127+msgstr "כל הכבוד"
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -138,51 +140,51 @@ msgstr "חיפושים אחרונים"
138#: Dash/Apps/AppInfo.qml:73
140#: Dash/Apps/AppInfo.qml:73
139#, qt-format
141#, qt-format
140msgid "(%1)"
142msgid "(%1)"
141−msgstr ""
143+msgstr "(%1)"
142
144
143#. TRANSLATORS: Number of persons who wrote reviews for this app
145#. TRANSLATORS: Number of persons who wrote reviews for this app
144#: Dash/Apps/AppInfo.qml:85
146#: Dash/Apps/AppInfo.qml:85
145#, qt-format
147#, qt-format
146msgid "%1 review"
148msgid "%1 review"
147msgid_plural "%1 reviews"
149msgid_plural "%1 reviews"
148−msgstr[0] ""
150+msgstr[0] "סקירה %1"
149−msgstr[1] ""
151+msgstr[1] "%1 סקירות"
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153−msgstr ""
155+msgstr "דירוג היישום"
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157−msgstr ""
159+msgstr "הוספת סקירה"
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161−msgstr ""
163+msgstr "סקירה"
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165−msgstr ""
167+msgstr "שליחה"
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169−msgstr ""
171+msgstr "הערות:"
170
172
171#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
173#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
172msgid "Featured"
174msgid "Featured"
173−msgstr ""
175+msgstr "מומלצים"
174
176
175#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
177#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
176msgid "Recent"
178msgid "Recent"
177−msgstr ""
179+msgstr "אחרונים"
178
180
179#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
181#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
180msgid "New Releases"
182msgid "New Releases"
181−msgstr ""
183+msgstr "מהדורות חדשות"
182
184
183#: Dash/DashMusic.qml:30
185#: Dash/DashMusic.qml:30
184msgid "Top Charting"
186msgid "Top Charting"
185−msgstr ""
187+msgstr "בראש הטבלה"
186
188
187#: Dash/DashMusic.qml:91
189#: Dash/DashMusic.qml:91
188msgid "Music"
190msgid "Music"
@@ -190,7 +192,7 @@ msgstr "מוזיקה"
190
192
191#: Dash/DashVideos.qml:31
193#: Dash/DashVideos.qml:31
192msgid "Popular Online"
194msgid "Popular Online"
193−msgstr ""
195+msgstr "פופולריים ברחבי הרשת"
194
196
195#: Dash/DashVideos.qml:146
197#: Dash/DashVideos.qml:146
196msgid "Videos"
198msgid "Videos"
@@ -198,28 +200,28 @@ msgstr "סרטונים"
198
200
199#: Dash/Video/VideoPreview.qml:130
201#: Dash/Video/VideoPreview.qml:130
200msgid "Directed by:"
202msgid "Directed by:"
201−msgstr ""
203+msgstr "בוים ע״י:"
202
204
203#: Dash/Video/VideoPreview.qml:153
205#: Dash/Video/VideoPreview.qml:153
204msgid "Starring:"
206msgid "Starring:"
205−msgstr ""
207+msgstr "בכיכוב:"
206
208
207#: Dash/Video/VideoPreview.qml:176
209#: Dash/Video/VideoPreview.qml:176
208msgid "Author:"
210msgid "Author:"
209−msgstr ""
211+msgstr "יוצר:"
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213−msgstr ""
215+msgstr "שיחת חירום"
214
216
215#: Greeter/PassphraseLockscreen.qml:59
217#: Greeter/PassphraseLockscreen.qml:59
216#, qt-format
218#, qt-format
217msgid "Hello %1"
219msgid "Hello %1"
218−msgstr ""
220+msgstr "שלום %1"
219
221
220#: Greeter/PassphraseLockscreen.qml:59
222#: Greeter/PassphraseLockscreen.qml:59
221msgid "Hello"
223msgid "Hello"
222−msgstr ""
224+msgstr "שלום"
223
225
224#: Hud/HudParametrizedActionsPage.qml:132
226#: Hud/HudParametrizedActionsPage.qml:132
225msgid "Confirm"
227msgid "Confirm"
@@ -239,17 +241,21 @@ msgstr "יש לדבר כעת..."
239
241
240#: Hud/Hud.qml:94
242#: Hud/Hud.qml:94
241msgid "Speaking..."
243msgid "Speaking..."
242−msgstr "מושמע דיבור..."
244+msgstr "הדיבור מושמע…"
243
245
244#: Panel/SearchIndicator.qml:27
246#: Panel/SearchIndicator.qml:27
245msgid "Search"
247msgid "Search"
246msgstr "חיפוש"
248msgstr "חיפוש"
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr "שום דבר אינו תואם לחיפוש שלך, עמך הסליחה."
252msgstr "שום דבר אינו תואם לחיפוש שלך, עמך הסליחה."
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255−msgstr ""
261+msgstr "נא להזין %1"
po/hr.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-27 04:14+0000\n"
11"PO-Revision-Date: 2013-06-27 04:14+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Croatian <hr@li.org>\n"
13"Language-Team: Croatian <hr@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
20−"X-Generator: Launchpad (build 16750)\n"
20+"X-Generator: Launchpad (build 16774)\n"
21
21
22#: Applications/applications.js:23
22#: Applications/applications.js:23
23msgid "Phone"
23msgid "Phone"
@@ -87,48 +87,50 @@ msgstr ""
87msgid "YouTube"
87msgid "YouTube"
88msgstr ""
88msgstr ""
89
89
90−#: Components/EdgeDemoOverlay.qml:145
90+#: Components/EdgeDemoOverlay.qml:150
91msgid "Skip intro"
91msgid "Skip intro"
92msgstr ""
92msgstr ""
93
93
94−#: Components/EdgeDemo.qml:98
94+#: Components/EdgeDemo.qml:112
95msgid "Right edge"
95msgid "Right edge"
96msgstr ""
96msgstr ""
97
97
98−#: Components/EdgeDemo.qml:99
98+#: Components/EdgeDemo.qml:113
99msgid "Try swiping from the right edge to unlock the phone"
99msgid "Try swiping from the right edge to unlock the phone"
100msgstr ""
100msgstr ""
101
101
102−#: Components/EdgeDemo.qml:135
102+#: Components/EdgeDemo.qml:144
103msgid "Top edge"
103msgid "Top edge"
104msgstr ""
104msgstr ""
105
105
106−#: Components/EdgeDemo.qml:136
106+#: Components/EdgeDemo.qml:145
107msgid "Try swiping from the top edge to access the indicators"
107msgid "Try swiping from the top edge to access the indicators"
108msgstr ""
108msgstr ""
109
109
110−#: Components/EdgeDemo.qml:161
110+#: Components/EdgeDemo.qml:170
111msgid "Close"
111msgid "Close"
112msgstr ""
112msgstr ""
113
113
114−#: Components/EdgeDemo.qml:162
114+#: Components/EdgeDemo.qml:171
115msgid "Swipe up again to close the settings screen"
115msgid "Swipe up again to close the settings screen"
116msgstr ""
116msgstr ""
117
117
118−#: Components/EdgeDemo.qml:189
118+#: Components/EdgeDemo.qml:198
119msgid "Left edge"
119msgid "Left edge"
120msgstr ""
120msgstr ""
121
121
122−#: Components/EdgeDemo.qml:190
122+#: Components/EdgeDemo.qml:199
123msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgid "Swipe from the left to reveal the launcher for quick access to apps"
124msgstr ""
124msgstr ""
125
125
126−#: Components/EdgeDemo.qml:217
126+#: Components/EdgeDemo.qml:226
127msgid "Well done"
127msgid "Well done"
128msgstr ""
128msgstr ""
129
129
130−#: Components/EdgeDemo.qml:218
130+#: Components/EdgeDemo.qml:227
131+msgid ""
131−msgid "You have now mastered the edge gestures and can start using the phone"
132+"You have now mastered the edge gestures and can start using the "
133+"phone<br><br>Tap anywhere to start"
132msgstr ""
134msgstr ""
133
135
134#: Components/PageHeader.qml:298
136#: Components/PageHeader.qml:298
@@ -149,23 +151,23 @@ msgid_plural "%1 reviews"
149msgstr[0] ""
151msgstr[0] ""
150msgstr[1] ""
152msgstr[1] ""
151
153
152−#: Dash/Apps/AppPreview.qml:175
154+#: Dash/Apps/AppPreview.qml:178
153msgid "Rate this"
155msgid "Rate this"
154msgstr ""
156msgstr ""
155
157
156−#: Dash/Apps/AppReviews.qml:72
158+#: Dash/Apps/AppReviews.qml:74
157msgid "Add a review"
159msgid "Add a review"
158msgstr ""
160msgstr ""
159
161
160−#: Dash/Apps/AppReviews.qml:84
162+#: Dash/Apps/AppReviews.qml:86
161msgid "Review"
163msgid "Review"
162msgstr ""
164msgstr ""
163
165
164−#: Dash/Apps/AppReviews.qml:118
166+#: Dash/Apps/AppReviews.qml:121
165msgid "Send"
167msgid "Send"
166msgstr ""
168msgstr ""
167
169
168−#: Dash/Apps/AppReviews.qml:136
170+#: Dash/Apps/AppReviews.qml:139
169msgid "Comments:"
171msgid "Comments:"
170msgstr ""
172msgstr ""
171
173
@@ -209,7 +211,7 @@ msgstr ""
209msgid "Author:"
211msgid "Author:"
210msgstr ""
212msgstr ""
211
213
212−#: Greeter/Lockscreen.qml:134
214+#: Greeter/Lockscreen.qml:142
213msgid "Emergency Call"
215msgid "Emergency Call"
214msgstr ""
216msgstr ""
215
217
@@ -246,11 +248,15 @@ msgstr "Govor..."
246msgid "Search"
248msgid "Search"
247msgstr "Pretraživanje"
249msgstr "Pretraživanje"
248
250
249−#: plugins/Unity/scope.cpp:317
251+#: plugins/Unity/scope.cpp:336
250msgid "Sorry, there is nothing that matches your search."
252msgid "Sorry, there is nothing that matches your search."
251msgstr "Nažalost, ne postoji ništa što odgovara vašoj pretrazi."
253msgstr "Nažalost, ne postoji ništa što odgovara vašoj pretrazi."
252
254
255+#: plugins/Unity/showallfilteroption.cpp:41
256+msgid "All"
257+msgstr ""
258+
253−#: Shell.qml:429
259+#: Shell.qml:453
254#, qt-format
260#, qt-format
255msgid "Please enter %1"
261msgid "Please enter %1"
256msgstr ""
262msgstr ""
po/hu.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-27 04:28+0000\n"
11"PO-Revision-Date: 2013-06-27 04:28+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Hungarian <hu@li.org>\n"
13"Language-Team: Hungarian <hu@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95msgstr ""
95msgstr ""
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr ""
99msgstr ""
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103msgstr ""
103msgstr ""
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
107msgstr ""
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111msgstr ""
111msgstr ""
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115msgstr ""
115msgstr ""
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119msgstr ""
119msgstr ""
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127msgstr ""
127msgstr ""
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148msgstr[0] ""
150msgstr[0] ""
149msgstr[1] ""
151msgstr[1] ""
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153msgstr ""
155msgstr ""
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157msgstr ""
159msgstr ""
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161msgstr ""
163msgstr ""
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165msgstr ""
167msgstr ""
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169msgstr ""
171msgstr ""
170
172
@@ -208,7 +210,7 @@ msgstr ""
208msgid "Author:"
210msgid "Author:"
209msgstr ""
211msgstr ""
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213msgstr ""
215msgstr ""
214
216
@@ -245,11 +247,15 @@ msgstr "Beszéd…"
245msgid "Search"
247msgid "Search"
246msgstr "Keresés"
248msgstr "Keresés"
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr "Elnézést, nincs találat a keresésre."
252msgstr "Elnézést, nincs találat a keresésre."
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255msgstr ""
261msgstr ""
po/hy.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-27 04:43+0000\n"
11"PO-Revision-Date: 2013-06-27 04:43+0000\n"
12"Last-Translator: iAbaS <sosabazyan@yandex.ru>\n"
12"Last-Translator: iAbaS <sosabazyan@yandex.ru>\n"
13"Language-Team: Armenian <hy@li.org>\n"
13"Language-Team: Armenian <hy@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95msgstr ""
95msgstr ""
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr ""
99msgstr ""
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103msgstr ""
103msgstr ""
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
107msgstr ""
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111msgstr ""
111msgstr ""
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115msgstr ""
115msgstr ""
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119msgstr ""
119msgstr ""
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127msgstr ""
127msgstr ""
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148msgstr[0] ""
150msgstr[0] ""
149msgstr[1] ""
151msgstr[1] ""
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153msgstr ""
155msgstr ""
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157msgstr ""
159msgstr ""
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161msgstr ""
163msgstr ""
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165msgstr ""
167msgstr ""
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169msgstr ""
171msgstr ""
170
172
@@ -208,7 +210,7 @@ msgstr ""
208msgid "Author:"
210msgid "Author:"
209msgstr ""
211msgstr ""
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213msgstr ""
215msgstr ""
214
216
@@ -245,11 +247,15 @@ msgstr "Խոսում եմ..."
245msgid "Search"
247msgid "Search"
246msgstr "Որոնում"
248msgstr "Որոնում"
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr "Կներերք, բայց Ձեր հարցումով ոչինչ չկար"
252msgstr "Կներերք, բայց Ձեր հարցումով ոչինչ չկար"
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255msgstr ""
261msgstr ""
po/id.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-26 22:35+0000\n"
11"PO-Revision-Date: 2013-06-26 22:35+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Indonesian <id@li.org>\n"
13"Language-Team: Indonesian <id@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95msgstr ""
95msgstr ""
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr ""
99msgstr ""
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103msgstr ""
103msgstr ""
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
107msgstr ""
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111msgstr ""
111msgstr ""
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115msgstr ""
115msgstr ""
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119msgstr ""
119msgstr ""
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127msgstr ""
127msgstr ""
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148msgstr[0] ""
150msgstr[0] ""
149msgstr[1] ""
151msgstr[1] ""
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153msgstr ""
155msgstr ""
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157msgstr ""
159msgstr ""
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161msgstr ""
163msgstr ""
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165msgstr ""
167msgstr ""
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169msgstr ""
171msgstr ""
170
172
@@ -208,7 +210,7 @@ msgstr ""
208msgid "Author:"
210msgid "Author:"
209msgstr ""
211msgstr ""
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213msgstr ""
215msgstr ""
214
216
@@ -245,11 +247,15 @@ msgstr ""
245msgid "Search"
247msgid "Search"
246msgstr ""
248msgstr ""
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr ""
252msgstr ""
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255msgstr ""
261msgstr ""
po/is.ponew file+262
@@ -0,0 +1,262 @@
1+# Icelandic 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-01 09:43+0200\n"
11+"PO-Revision-Date: 2013-09-18 16:22+0000\n"
12+"Last-Translator: Andri Thorlacius <Unknown>\n"
13+"Language-Team: Icelandic <is@li.org>\n"
14+"MIME-Version: 1.0\n"
15+"Content-Type: text/plain; charset=UTF-8\n"
16+"Content-Transfer-Encoding: 8bit\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
20+
21+#: Applications/applications.js:23
22+msgid "Phone"
23+msgstr "Sími"
24+
25+#: Applications/applications.js:29
26+msgid "Camera"
27+msgstr "Myndavél"
28+
29+#: Applications/applications.js:35
30+msgid "Gallery"
31+msgstr "Myndasafn"
32+
33+#: Applications/applications.js:40
34+msgid "Facebook"
35+msgstr "Facebook"
36+
37+#: Applications/applications.js:46
38+msgid "Browser"
39+msgstr "Vafri"
40+
41+#: Applications/applications.js:51
42+msgid "Twitter"
43+msgstr "Twitter"
44+
45+#: Applications/applications.js:57
46+msgid "GMail"
47+msgstr "GMail"
48+
49+#: Applications/applications.js:62
50+msgid "Weather"
51+msgstr "Veður"
52+
53+#: Applications/applications.js:68
54+msgid "Notepad"
55+msgstr "Skrifblokk"
56+
57+#: Applications/applications.js:74
58+msgid "Calendar"
59+msgstr "Dagatal"
60+
61+#: Applications/applications.js:80
62+msgid "Media Player"
63+msgstr "Margmiðlunarspilari"
64+
65+#: Applications/applications.js:86
66+msgid "Evernote"
67+msgstr "Evernote"
68+
69+#: Applications/applications.js:91
70+msgid "Map"
71+msgstr "Kort"
72+
73+#: Applications/applications.js:96
74+msgid "Pinterest"
75+msgstr "Pinterest"
76+
77+#: Applications/applications.js:101
78+msgid "SoundCloud"
79+msgstr "SoundCloud"
80+
81+#: Applications/applications.js:106
82+msgid "Wikipedia"
83+msgstr "Wikipedia"
84+
85+#: Applications/applications.js:111
86+msgid "YouTube"
87+msgstr "YouTube"
88+
89+#: Components/EdgeDemoOverlay.qml:150
90+msgid "Skip intro"
91+msgstr "Hoppa yfir kynningu"
92+
93+#: Components/EdgeDemo.qml:112
94+msgid "Right edge"
95+msgstr "Hægri brún"
96+
97+#: Components/EdgeDemo.qml:113
98+msgid "Try swiping from the right edge to unlock the phone"
99+msgstr ""
100+"Prufaðu að renna puttanum frá hægri brúninni til að aflæsa símanum þínum."
101+
102+#: Components/EdgeDemo.qml:144
103+msgid "Top edge"
104+msgstr "Efri brún"
105+
106+#: Components/EdgeDemo.qml:145
107+msgid "Try swiping from the top edge to access the indicators"
108+msgstr ""
109+
110+#: Components/EdgeDemo.qml:170
111+msgid "Close"
112+msgstr "Loka"
113+
114+#: Components/EdgeDemo.qml:171
115+msgid "Swipe up again to close the settings screen"
116+msgstr ""
117+
118+#: Components/EdgeDemo.qml:198
119+msgid "Left edge"
120+msgstr "Vinstri brún"
121+
122+#: Components/EdgeDemo.qml:199
123+msgid "Swipe from the left to reveal the launcher for quick access to apps"
124+msgstr ""
125+
126+#: Components/EdgeDemo.qml:226
127+msgid "Well done"
128+msgstr "Vel gert"
129+
130+#: Components/EdgeDemo.qml:227
131+msgid ""
132+"You have now mastered the edge gestures and can start using the "
133+"phone<br><br>Tap anywhere to start"
134+msgstr ""
135+
136+#: Components/PageHeader.qml:298
137+msgid "Recent searches"
138+msgstr "Nýlegar leitir"
139+
140+#. TRANSLATORS: Number of persons who rated this app
141+#: Dash/Apps/AppInfo.qml:73
142+#, qt-format
143+msgid "(%1)"
144+msgstr "(%1)"
145+
146+#. TRANSLATORS: Number of persons who wrote reviews for this app
147+#: Dash/Apps/AppInfo.qml:85
148+#, qt-format
149+msgid "%1 review"
150+msgid_plural "%1 reviews"
151+msgstr[0] "%1 ummæli"
152+msgstr[1] "%1 ummæli"
153+
154+#: Dash/Apps/AppPreview.qml:178
155+msgid "Rate this"
156+msgstr "Gefa þessu einkunn"
157+
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+
174+#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
175+msgid "Featured"
176+msgstr "Efst á baugi"
177+
178+#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
179+msgid "Recent"
180+msgstr "Nýlegt"
181+
182+#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
183+msgid "New Releases"
184+msgstr "Nýjar Útgáfur"
185+
186+#: Dash/DashMusic.qml:30
187+msgid "Top Charting"
188+msgstr "Topp Listi"
189+
190+#: Dash/DashMusic.qml:91
191+msgid "Music"
192+msgstr "Tónlist"
193+
194+#: Dash/DashVideos.qml:31
195+msgid "Popular Online"
196+msgstr "Vinsælt á Netinu"
197+
198+#: Dash/DashVideos.qml:146
199+msgid "Videos"
200+msgstr "Myndbönd"
201+
202+#: Dash/Video/VideoPreview.qml:130
203+msgid "Directed by:"
204+msgstr "Leikstýrt af:"
205+
206+#: Dash/Video/VideoPreview.qml:153
207+msgid "Starring:"
208+msgstr "Meðal leikara eru:"
209+
210+#: Dash/Video/VideoPreview.qml:176
211+msgid "Author:"
212+msgstr "Höfundur:"
213+
214+#: Greeter/Lockscreen.qml:142
215+msgid "Emergency Call"
216+msgstr "Neyðarsímtal"
217+
218+#: Greeter/PassphraseLockscreen.qml:59
219+#, qt-format
220+msgid "Hello %1"
221+msgstr "Hæ %1"
222+
223+#: Greeter/PassphraseLockscreen.qml:59
224+msgid "Hello"
225+msgstr "Hæ"
226+
227+#: Hud/HudParametrizedActionsPage.qml:132
228+msgid "Confirm"
229+msgstr "Staðfesta"
230+
231+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
232+msgid "Type or say a command"
233+msgstr "Skrifaðu eða segðu eitthvað"
234+
235+#: Hud/Hud.qml:84
236+msgid "Loading. Please Wait..."
237+msgstr "Hleð. Vinsamlegast Bíðið..."
238+
239+#: Hud/Hud.qml:89
240+msgid "Speak Now..."
241+msgstr "Talaðu Núna..."
242+
243+#: Hud/Hud.qml:94
244+msgid "Speaking..."
245+msgstr "Tala..."
246+
247+#: Panel/SearchIndicator.qml:27
248+msgid "Search"
249+msgstr "Leita"
250+
251+#: plugins/Unity/scope.cpp:336
252+msgid "Sorry, there is nothing that matches your search."
253+msgstr "Því miður, það var ekkert sem passaði við leitarorðið þitt."
254+
255+#: plugins/Unity/showallfilteroption.cpp:41
256+msgid "All"
257+msgstr ""
258+
259+#: Shell.qml:453
260+#, qt-format
261+msgid "Please enter %1"
262+msgstr ""
po/it.po+80−69
@@ -7,127 +7,134 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11−"PO-Revision-Date: 2013-06-27 05:14+0000\n"
11+"PO-Revision-Date: 2013-09-28 10:05+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12+"Last-Translator: Claudio Arseni <claudio.arseni@gmail.com>\n"
13"Language-Team: Italian <it@li.org>\n"
13"Language-Team: Italian <it@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
23−msgstr ""
23+msgstr "Telefono"
24
24
25#: Applications/applications.js:29
25#: Applications/applications.js:29
26msgid "Camera"
26msgid "Camera"
27−msgstr ""
27+msgstr "Fotocamera"
28
28
29#: Applications/applications.js:35
29#: Applications/applications.js:35
30msgid "Gallery"
30msgid "Gallery"
31−msgstr ""
31+msgstr "Galleria"
32
32
33#: Applications/applications.js:40
33#: Applications/applications.js:40
34msgid "Facebook"
34msgid "Facebook"
35−msgstr ""
35+msgstr "Facebook"
36
36
37#: Applications/applications.js:46
37#: Applications/applications.js:46
38msgid "Browser"
38msgid "Browser"
39−msgstr ""
39+msgstr "Browser"
40
40
41#: Applications/applications.js:51
41#: Applications/applications.js:51
42msgid "Twitter"
42msgid "Twitter"
43−msgstr ""
43+msgstr "Twitter"
44
44
45#: Applications/applications.js:57
45#: Applications/applications.js:57
46msgid "GMail"
46msgid "GMail"
47−msgstr ""
47+msgstr "GMail"
48
48
49#: Applications/applications.js:62
49#: Applications/applications.js:62
50msgid "Weather"
50msgid "Weather"
51−msgstr ""
51+msgstr "Meteo"
52
52
53#: Applications/applications.js:68
53#: Applications/applications.js:68
54msgid "Notepad"
54msgid "Notepad"
55−msgstr ""
55+msgstr "Blocco note"
56
56
57#: Applications/applications.js:74
57#: Applications/applications.js:74
58msgid "Calendar"
58msgid "Calendar"
59−msgstr ""
59+msgstr "Calendario"
60
60
61#: Applications/applications.js:80
61#: Applications/applications.js:80
62msgid "Media Player"
62msgid "Media Player"
63−msgstr ""
63+msgstr "Riproduttore multimediale"
64
64
65#: Applications/applications.js:86
65#: Applications/applications.js:86
66msgid "Evernote"
66msgid "Evernote"
67−msgstr ""
67+msgstr "Evernote"
68
68
69#: Applications/applications.js:91
69#: Applications/applications.js:91
70msgid "Map"
70msgid "Map"
71−msgstr ""
71+msgstr "Mappa"
72
72
73#: Applications/applications.js:96
73#: Applications/applications.js:96
74msgid "Pinterest"
74msgid "Pinterest"
75−msgstr ""
75+msgstr "Pinterest"
76
76
77#: Applications/applications.js:101
77#: Applications/applications.js:101
78msgid "SoundCloud"
78msgid "SoundCloud"
79−msgstr ""
79+msgstr "SoundCloud"
80
80
81#: Applications/applications.js:106
81#: Applications/applications.js:106
82msgid "Wikipedia"
82msgid "Wikipedia"
83−msgstr ""
83+msgstr "Wikipedia"
84
84
85#: Applications/applications.js:111
85#: Applications/applications.js:111
86msgid "YouTube"
86msgid "YouTube"
87−msgstr ""
87+msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91−msgstr ""
91+msgstr "Salta introduzione"
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95−msgstr ""
95+msgstr "Bordo destro"
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99−msgstr ""
99+msgstr "Provare a far scorrere dal bordo destro per sbloccare il telefono"
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103−msgstr ""
103+msgstr "Bordo superiore"
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
107msgstr ""
108+"Provare a far scorrere dal bordo in alto per accedere agli indicatori"
108
109
109−#: Components/EdgeDemo.qml:161
110+#: Components/EdgeDemo.qml:170
110msgid "Close"
111msgid "Close"
111−msgstr ""
112+msgstr "Chiudi"
112
113
113−#: Components/EdgeDemo.qml:162
114+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
115msgid "Swipe up again to close the settings screen"
115msgstr ""
116msgstr ""
117+"Far scorrere verso l'alto nuovamente per chiudere la schermata delle "
118+"impostazioni"
116
119
117−#: Components/EdgeDemo.qml:189
120+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
121msgid "Left edge"
119−msgstr ""
122+msgstr "Bordo sinistro"
120
123
121−#: Components/EdgeDemo.qml:190
124+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
125msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
126msgstr ""
127+"Far scorrere il bordo sinistro per mostrare il Launcher e avere un rapido "
128+"accesso alle applicazioni"
124
129
125−#: Components/EdgeDemo.qml:217
130+#: Components/EdgeDemo.qml:226
126msgid "Well done"
131msgid "Well done"
127−msgstr ""
132+msgstr "Ben fatto"
128
133
129−#: Components/EdgeDemo.qml:218
134+#: Components/EdgeDemo.qml:227
135+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
136+"You have now mastered the edge gestures and can start using the "
137+"phone<br><br>Tap anywhere to start"
131msgstr ""
138msgstr ""
132
139
133#: Components/PageHeader.qml:298
140#: Components/PageHeader.qml:298
@@ -138,51 +145,51 @@ msgstr "Ricerche recenti"
138#: Dash/Apps/AppInfo.qml:73
145#: Dash/Apps/AppInfo.qml:73
139#, qt-format
146#, qt-format
140msgid "(%1)"
147msgid "(%1)"
141−msgstr ""
148+msgstr "(%1)"
142
149
143#. TRANSLATORS: Number of persons who wrote reviews for this app
150#. TRANSLATORS: Number of persons who wrote reviews for this app
144#: Dash/Apps/AppInfo.qml:85
151#: Dash/Apps/AppInfo.qml:85
145#, qt-format
152#, qt-format
146msgid "%1 review"
153msgid "%1 review"
147msgid_plural "%1 reviews"
154msgid_plural "%1 reviews"
148−msgstr[0] ""
155+msgstr[0] "%1 recensione"
149−msgstr[1] ""
156+msgstr[1] "%1 recensioni"
150
157
151−#: Dash/Apps/AppPreview.qml:175
158+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
159msgid "Rate this"
153−msgstr ""
160+msgstr "Valuta"
154
161
155−#: Dash/Apps/AppReviews.qml:72
162+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
163msgid "Add a review"
157−msgstr ""
164+msgstr "Aggiungi una recensione"
158
165
159−#: Dash/Apps/AppReviews.qml:84
166+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
167msgid "Review"
161−msgstr ""
168+msgstr "Recensisci"
162
169
163−#: Dash/Apps/AppReviews.qml:118
170+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
171msgid "Send"
165−msgstr ""
172+msgstr "Invia"
166
173
167−#: Dash/Apps/AppReviews.qml:136
174+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
175msgid "Comments:"
169−msgstr ""
176+msgstr "Commenti:"
170
177
171#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
178#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
172msgid "Featured"
179msgid "Featured"
173−msgstr ""
180+msgstr "In evidenza"
174
181
175#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
182#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
176msgid "Recent"
183msgid "Recent"
177−msgstr ""
184+msgstr "Recenti"
178
185
179#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
186#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
180msgid "New Releases"
187msgid "New Releases"
181−msgstr ""
188+msgstr "Nuovi rilasci"
182
189
183#: Dash/DashMusic.qml:30
190#: Dash/DashMusic.qml:30
184msgid "Top Charting"
191msgid "Top Charting"
185−msgstr ""
192+msgstr "Più votate"
186
193
187#: Dash/DashMusic.qml:91
194#: Dash/DashMusic.qml:91
188msgid "Music"
195msgid "Music"
@@ -190,7 +197,7 @@ msgstr "Musica"
190
197
191#: Dash/DashVideos.qml:31
198#: Dash/DashVideos.qml:31
192msgid "Popular Online"
199msgid "Popular Online"
193−msgstr ""
200+msgstr "Popolari online"
194
201
195#: Dash/DashVideos.qml:146
202#: Dash/DashVideos.qml:146
196msgid "Videos"
203msgid "Videos"
@@ -198,28 +205,28 @@ msgstr "Video"
198
205
199#: Dash/Video/VideoPreview.qml:130
206#: Dash/Video/VideoPreview.qml:130
200msgid "Directed by:"
207msgid "Directed by:"
201−msgstr ""
208+msgstr "Diretto da:"
202
209
203#: Dash/Video/VideoPreview.qml:153
210#: Dash/Video/VideoPreview.qml:153
204msgid "Starring:"
211msgid "Starring:"
205−msgstr ""
212+msgstr "Valutazioni:"
206
213
207#: Dash/Video/VideoPreview.qml:176
214#: Dash/Video/VideoPreview.qml:176
208msgid "Author:"
215msgid "Author:"
209−msgstr ""
216+msgstr "Autore:"
210
217
211−#: Greeter/Lockscreen.qml:134
218+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
219msgid "Emergency Call"
213−msgstr ""
220+msgstr "Chiamata di emergenza"
214
221
215#: Greeter/PassphraseLockscreen.qml:59
222#: Greeter/PassphraseLockscreen.qml:59
216#, qt-format
223#, qt-format
217msgid "Hello %1"
224msgid "Hello %1"
218−msgstr ""
225+msgstr "Ciao %1"
219
226
220#: Greeter/PassphraseLockscreen.qml:59
227#: Greeter/PassphraseLockscreen.qml:59
221msgid "Hello"
228msgid "Hello"
222−msgstr ""
229+msgstr "Ciao"
223
230
224#: Hud/HudParametrizedActionsPage.qml:132
231#: Hud/HudParametrizedActionsPage.qml:132
225msgid "Confirm"
232msgid "Confirm"
@@ -245,11 +252,15 @@ msgstr "Sto parlando..."
245msgid "Search"
252msgid "Search"
246msgstr "Cerca"
253msgstr "Cerca"
247
254
248−#: plugins/Unity/scope.cpp:317
255+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
256msgid "Sorry, there is nothing that matches your search."
250msgstr "Nessun risultato corrispondente alla ricerca."
257msgstr "Nessun risultato corrispondente alla ricerca."
251
258
259+#: plugins/Unity/showallfilteroption.cpp:41
260+msgid "All"
261+msgstr ""
262+
252−#: Shell.qml:429
263+#: Shell.qml:453
253#, qt-format
264#, qt-format
254msgid "Please enter %1"
265msgid "Please enter %1"
255−msgstr ""
266+msgstr "Inserire %1"
po/ja.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-26 22:36+0000\n"
11"PO-Revision-Date: 2013-06-26 22:36+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Japanese <ja@li.org>\n"
13"Language-Team: Japanese <ja@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95msgstr ""
95msgstr ""
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr ""
99msgstr ""
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103msgstr ""
103msgstr ""
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
107msgstr ""
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111msgstr ""
111msgstr ""
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115msgstr ""
115msgstr ""
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119msgstr ""
119msgstr ""
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127msgstr ""
127msgstr ""
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148msgstr[0] ""
150msgstr[0] ""
149msgstr[1] ""
151msgstr[1] ""
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153msgstr ""
155msgstr ""
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157msgstr ""
159msgstr ""
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161msgstr ""
163msgstr ""
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165msgstr ""
167msgstr ""
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169msgstr ""
171msgstr ""
170
172
@@ -208,7 +210,7 @@ msgstr ""
208msgid "Author:"
210msgid "Author:"
209msgstr ""
211msgstr ""
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213msgstr ""
215msgstr ""
214
216
@@ -245,11 +247,15 @@ msgstr ""
245msgid "Search"
247msgid "Search"
246msgstr ""
248msgstr ""
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr ""
252msgstr ""
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255msgstr ""
261msgstr ""
po/kn.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-27 05:43+0000\n"
11"PO-Revision-Date: 2013-06-27 05:43+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Kannada <kn@li.org>\n"
13"Language-Team: Kannada <kn@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95msgstr ""
95msgstr ""
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr ""
99msgstr ""
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103msgstr ""
103msgstr ""
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
107msgstr ""
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111msgstr ""
111msgstr ""
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115msgstr ""
115msgstr ""
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119msgstr ""
119msgstr ""
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127msgstr ""
127msgstr ""
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148msgstr[0] ""
150msgstr[0] ""
149msgstr[1] ""
151msgstr[1] ""
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153msgstr ""
155msgstr ""
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157msgstr ""
159msgstr ""
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161msgstr ""
163msgstr ""
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165msgstr ""
167msgstr ""
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169msgstr ""
171msgstr ""
170
172
@@ -208,7 +210,7 @@ msgstr ""
208msgid "Author:"
210msgid "Author:"
209msgstr ""
211msgstr ""
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213msgstr ""
215msgstr ""
214
216
@@ -245,11 +247,15 @@ msgstr "ಮಾತನಾಡುತಿದ್ದೀರಿ"
245msgid "Search"
247msgid "Search"
246msgstr "ಹುಡುಕು"
248msgstr "ಹುಡುಕು"
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr "ಕ್ಷಮಿಸಿ ನಿಮ್ಮ ಶೋಧನೆಗೆ ಸರಿಯಾದ ಹೊಂದಾಣಿಕೆಗಳು ದೊರಕುತ್ತಿಲ್ಲ"
252msgstr "ಕ್ಷಮಿಸಿ ನಿಮ್ಮ ಶೋಧನೆಗೆ ಸರಿಯಾದ ಹೊಂದಾಣಿಕೆಗಳು ದೊರಕುತ್ತಿಲ್ಲ"
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255msgstr ""
261msgstr ""
po/ko.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-27 05:59+0000\n"
11"PO-Revision-Date: 2013-06-27 05:59+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Korean <ko@li.org>\n"
13"Language-Team: Korean <ko@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95msgstr ""
95msgstr ""
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr ""
99msgstr ""
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103msgstr ""
103msgstr ""
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
107msgstr ""
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111msgstr ""
111msgstr ""
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115msgstr ""
115msgstr ""
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119msgstr ""
119msgstr ""
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127msgstr ""
127msgstr ""
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148msgstr[0] ""
150msgstr[0] ""
149msgstr[1] ""
151msgstr[1] ""
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153msgstr ""
155msgstr ""
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157msgstr ""
159msgstr ""
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161msgstr ""
163msgstr ""
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165msgstr ""
167msgstr ""
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169msgstr ""
171msgstr ""
170
172
@@ -208,7 +210,7 @@ msgstr ""
208msgid "Author:"
210msgid "Author:"
209msgstr ""
211msgstr ""
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213msgstr ""
215msgstr ""
214
216
@@ -245,11 +247,15 @@ msgstr ""
245msgid "Search"
247msgid "Search"
246msgstr "찾기"
248msgstr "찾기"
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr ""
252msgstr ""
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255msgstr ""
261msgstr ""
po/ky.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-27 06:17+0000\n"
11"PO-Revision-Date: 2013-06-27 06:17+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Kirghiz <ky@li.org>\n"
13"Language-Team: Kirghiz <ky@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95msgstr ""
95msgstr ""
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr ""
99msgstr ""
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103msgstr ""
103msgstr ""
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
107msgstr ""
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111msgstr ""
111msgstr ""
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115msgstr ""
115msgstr ""
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119msgstr ""
119msgstr ""
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127msgstr ""
127msgstr ""
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148msgstr[0] ""
150msgstr[0] ""
149msgstr[1] ""
151msgstr[1] ""
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153msgstr ""
155msgstr ""
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157msgstr ""
159msgstr ""
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161msgstr ""
163msgstr ""
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165msgstr ""
167msgstr ""
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169msgstr ""
171msgstr ""
170
172
@@ -208,7 +210,7 @@ msgstr ""
208msgid "Author:"
210msgid "Author:"
209msgstr ""
211msgstr ""
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213msgstr ""
215msgstr ""
214
216
@@ -245,11 +247,15 @@ msgstr "Сүйлөнүүдө..."
245msgid "Search"
247msgid "Search"
246msgstr "Издөө"
248msgstr "Издөө"
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr "Тилекке каршы, сиздин издөөңүзгө эч нерсе дал келген жок."
252msgstr "Тилекке каршы, сиздин издөөңүзгө эч нерсе дал келген жок."
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255msgstr ""
261msgstr ""
po/lo.ponew file+261
@@ -0,0 +1,261 @@
1+# Lao 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-01 09:43+0200\n"
11+"PO-Revision-Date: 2013-10-02 10:00+0000\n"
12+"Last-Translator: Anousak <anousak@gmail.com>\n"
13+"Language-Team: Lao <lo@li.org>\n"
14+"MIME-Version: 1.0\n"
15+"Content-Type: text/plain; charset=UTF-8\n"
16+"Content-Transfer-Encoding: 8bit\n"
17+"Plural-Forms: nplurals=1; plural=0;\n"
18+"X-Launchpad-Export-Date: 2013-10-03 06:08+0000\n"
19+"X-Generator: Launchpad (build 16791)\n"
20+
21+#: Applications/applications.js:23
22+msgid "Phone"
23+msgstr "ໂທລະສັບ"
24+
25+#: Applications/applications.js:29
26+msgid "Camera"
27+msgstr "ກ້ອງ"
28+
29+#: Applications/applications.js:35
30+msgid "Gallery"
31+msgstr "Gallery"
32+
33+#: Applications/applications.js:40
34+msgid "Facebook"
35+msgstr "Facebook"
36+
37+#: Applications/applications.js:46
38+msgid "Browser"
39+msgstr "ບາວເຊິ"
40+
41+#: Applications/applications.js:51
42+msgid "Twitter"
43+msgstr "Twitter"
44+
45+#: Applications/applications.js:57
46+msgid "GMail"
47+msgstr "GMail"
48+
49+#: Applications/applications.js:62
50+msgid "Weather"
51+msgstr "ສະພາບອາກາດ"
52+
53+#: Applications/applications.js:68
54+msgid "Notepad"
55+msgstr "Noetpad"
56+
57+#: Applications/applications.js:74
58+msgid "Calendar"
59+msgstr "ປະຕິທິນ"
60+
61+#: Applications/applications.js:80
62+msgid "Media Player"
63+msgstr ""
64+
65+#: Applications/applications.js:86
66+msgid "Evernote"
67+msgstr ""
68+
69+#: Applications/applications.js:91
70+msgid "Map"
71+msgstr "ເເຜນທີ່"
72+
73+#: Applications/applications.js:96
74+msgid "Pinterest"
75+msgstr ""
76+
77+#: Applications/applications.js:101
78+msgid "SoundCloud"
79+msgstr ""
80+
81+#: Applications/applications.js:106
82+msgid "Wikipedia"
83+msgstr ""
84+
85+#: Applications/applications.js:111
86+msgid "YouTube"
87+msgstr "ິYouTube"
88+
89+#: Components/EdgeDemoOverlay.qml:150
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:298
136+msgid "Recent searches"
137+msgstr ""
138+
139+#. TRANSLATORS: Number of persons who rated this app
140+#: Dash/Apps/AppInfo.qml:73
141+#, qt-format
142+msgid "(%1)"
143+msgstr "(%1)"
144+
145+#. TRANSLATORS: Number of persons who wrote reviews for this app
146+#: Dash/Apps/AppInfo.qml:85
147+#, qt-format
148+msgid "%1 review"
149+msgid_plural "%1 reviews"
150+msgstr[0] ""
151+msgstr[1] ""
152+
153+#: Dash/Apps/AppPreview.qml:178
154+msgid "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 "ຄໍ່ເຫັນ"
172+
173+#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174+msgid "Featured"
175+msgstr ""
176+
177+#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178+msgid "Recent"
179+msgstr ""
180+
181+#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182+msgid "New Releases"
183+msgstr ""
184+
185+#: Dash/DashMusic.qml:30
186+msgid "Top Charting"
187+msgstr ""
188+
189+#: Dash/DashMusic.qml:91
190+msgid "Music"
191+msgstr "ດົນຕີ"
192+
193+#: Dash/DashVideos.qml:31
194+msgid "Popular Online"
195+msgstr ""
196+
197+#: Dash/DashVideos.qml:146
198+msgid "Videos"
199+msgstr "ວິດີໂອ"
200+
201+#: Dash/Video/VideoPreview.qml:130
202+msgid "Directed by:"
203+msgstr ""
204+
205+#: Dash/Video/VideoPreview.qml:153
206+msgid "Starring:"
207+msgstr ""
208+
209+#: Dash/Video/VideoPreview.qml:176
210+msgid "Author:"
211+msgstr ""
212+
213+#: Greeter/Lockscreen.qml:142
214+msgid "Emergency Call"
215+msgstr ""
216+
217+#: Greeter/PassphraseLockscreen.qml:59
218+#, qt-format
219+msgid "Hello %1"
220+msgstr "ສະບາຍດີ %1"
221+
222+#: Greeter/PassphraseLockscreen.qml:59
223+msgid "Hello"
224+msgstr "ສະບາຍດີ"
225+
226+#: Hud/HudParametrizedActionsPage.qml:132
227+msgid "Confirm"
228+msgstr "ຢືນຢັນ"
229+
230+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
231+msgid "Type or say a command"
232+msgstr ""
233+
234+#: Hud/Hud.qml:84
235+msgid "Loading. Please Wait..."
236+msgstr ""
237+
238+#: Hud/Hud.qml:89
239+msgid "Speak Now..."
240+msgstr "ເວົ້າໂລດ"
241+
242+#: Hud/Hud.qml:94
243+msgid "Speaking..."
244+msgstr "ກໍາລັງເວົ້າ"
245+
246+#: Panel/SearchIndicator.qml:27
247+msgid "Search"
248+msgstr "ຊອກຫາ"
249+
250+#: plugins/Unity/scope.cpp:336
251+msgid "Sorry, there is nothing that matches your search."
252+msgstr ""
253+
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr "ທັງໝົດ"
257+
258+#: Shell.qml:453
259+#, qt-format
260+msgid "Please enter %1"
261+msgstr "ກະລູນາປ້ອນ %1"
po/lv.po+48−42
@@ -7,60 +7,60 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11−"PO-Revision-Date: 2013-06-27 06:31+0000\n"
11+"PO-Revision-Date: 2013-09-28 16:29+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12+"Last-Translator: Jānis-Marks Gailis <jeanmarc.gailis@gmail.com>\n"
13"Language-Team: Latvian <lv@li.org>\n"
13"Language-Team: Latvian <lv@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
23−msgstr ""
23+msgstr "Tālrunis"
24
24
25#: Applications/applications.js:29
25#: Applications/applications.js:29
26msgid "Camera"
26msgid "Camera"
27−msgstr ""
27+msgstr "Fotokamera"
28
28
29#: Applications/applications.js:35
29#: Applications/applications.js:35
30msgid "Gallery"
30msgid "Gallery"
31−msgstr ""
31+msgstr "Galerija"
32
32
33#: Applications/applications.js:40
33#: Applications/applications.js:40
34msgid "Facebook"
34msgid "Facebook"
35−msgstr ""
35+msgstr "Facebook"
36
36
37#: Applications/applications.js:46
37#: Applications/applications.js:46
38msgid "Browser"
38msgid "Browser"
39−msgstr ""
39+msgstr "Pārlūkprogramma"
40
40
41#: Applications/applications.js:51
41#: Applications/applications.js:51
42msgid "Twitter"
42msgid "Twitter"
43−msgstr ""
43+msgstr "Twitter"
44
44
45#: Applications/applications.js:57
45#: Applications/applications.js:57
46msgid "GMail"
46msgid "GMail"
47−msgstr ""
47+msgstr "GMail"
48
48
49#: Applications/applications.js:62
49#: Applications/applications.js:62
50msgid "Weather"
50msgid "Weather"
51−msgstr ""
51+msgstr "Laikapstākļi"
52
52
53#: Applications/applications.js:68
53#: Applications/applications.js:68
54msgid "Notepad"
54msgid "Notepad"
55−msgstr ""
55+msgstr "Bloknots"
56
56
57#: Applications/applications.js:74
57#: Applications/applications.js:74
58msgid "Calendar"
58msgid "Calendar"
59−msgstr ""
59+msgstr "Kalendārs"
60
60
61#: Applications/applications.js:80
61#: Applications/applications.js:80
62msgid "Media Player"
62msgid "Media Player"
63−msgstr ""
63+msgstr "Mēdiju Atskaņotājs"
64
64
65#: Applications/applications.js:86
65#: Applications/applications.js:86
66msgid "Evernote"
66msgid "Evernote"
@@ -68,66 +68,68 @@ msgstr ""
68
68
69#: Applications/applications.js:91
69#: Applications/applications.js:91
70msgid "Map"
70msgid "Map"
71−msgstr ""
71+msgstr "Karte"
72
72
73#: Applications/applications.js:96
73#: Applications/applications.js:96
74msgid "Pinterest"
74msgid "Pinterest"
75−msgstr ""
75+msgstr "Pinterest"
76
76
77#: Applications/applications.js:101
77#: Applications/applications.js:101
78msgid "SoundCloud"
78msgid "SoundCloud"
79−msgstr ""
79+msgstr "SoundCloud"
80
80
81#: Applications/applications.js:106
81#: Applications/applications.js:106
82msgid "Wikipedia"
82msgid "Wikipedia"
83−msgstr ""
83+msgstr "Vikipēdija"
84
84
85#: Applications/applications.js:111
85#: Applications/applications.js:111
86msgid "YouTube"
86msgid "YouTube"
87−msgstr ""
87+msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95−msgstr ""
95+msgstr "Labā mala"
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr ""
99msgstr ""
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103msgstr ""
103msgstr ""
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
107msgstr ""
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111msgstr ""
111msgstr ""
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115msgstr ""
115msgstr ""
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119msgstr ""
119msgstr ""
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127msgstr ""
127msgstr ""
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148msgstr[0] ""
150msgstr[0] ""
149msgstr[1] ""
151msgstr[1] ""
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153msgstr ""
155msgstr ""
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157msgstr ""
159msgstr ""
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161msgstr ""
163msgstr ""
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165msgstr ""
167msgstr ""
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169msgstr ""
171msgstr ""
170
172
@@ -208,7 +210,7 @@ msgstr ""
208msgid "Author:"
210msgid "Author:"
209msgstr ""
211msgstr ""
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213msgstr ""
215msgstr ""
214
216
@@ -245,11 +247,15 @@ msgstr "Runa..."
245msgid "Search"
247msgid "Search"
246msgstr "Meklēt"
248msgstr "Meklēt"
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr "Diemžēl nekas neatbilst jūsu meklētajam."
252msgstr "Diemžēl nekas neatbilst jūsu meklētajam."
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255msgstr ""
261msgstr ""
po/my.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-27 06:47+0000\n"
11"PO-Revision-Date: 2013-06-27 06:47+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Burmese <my@li.org>\n"
13"Language-Team: Burmese <my@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95msgstr ""
95msgstr ""
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr ""
99msgstr ""
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103msgstr ""
103msgstr ""
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
107msgstr ""
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111msgstr ""
111msgstr ""
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115msgstr ""
115msgstr ""
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119msgstr ""
119msgstr ""
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127msgstr ""
127msgstr ""
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148msgstr[0] ""
150msgstr[0] ""
149msgstr[1] ""
151msgstr[1] ""
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153msgstr ""
155msgstr ""
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157msgstr ""
159msgstr ""
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161msgstr ""
163msgstr ""
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165msgstr ""
167msgstr ""
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169msgstr ""
171msgstr ""
170
172
@@ -208,7 +210,7 @@ msgstr ""
208msgid "Author:"
210msgid "Author:"
209msgstr ""
211msgstr ""
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213msgstr ""
215msgstr ""
214
216
@@ -245,11 +247,15 @@ msgstr "ပြောနေသည်"
245msgid "Search"
247msgid "Search"
246msgstr "ရှာဖွေ"
248msgstr "ရှာဖွေ"
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr "ဆောရီး၊ သင်၏ရှာဖွေမူနှင့်တူညီတာဘာမှမရှိပါ။"
252msgstr "ဆောရီး၊ သင်၏ရှာဖွေမူနှင့်တူညီတာဘာမှမရှိပါ။"
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255msgstr ""
261msgstr ""
po/nb.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-27 07:02+0000\n"
11"PO-Revision-Date: 2013-06-27 07:02+0000\n"
12"Last-Translator: Joakim Langvand <jlangvand@gmail.com>\n"
12"Last-Translator: Joakim Langvand <jlangvand@gmail.com>\n"
13"Language-Team: Norwegian Bokmal <nb@li.org>\n"
13"Language-Team: Norwegian Bokmal <nb@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95msgstr ""
95msgstr ""
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr ""
99msgstr ""
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103msgstr ""
103msgstr ""
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
107msgstr ""
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111msgstr ""
111msgstr ""
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115msgstr ""
115msgstr ""
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119msgstr ""
119msgstr ""
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127msgstr ""
127msgstr ""
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148msgstr[0] ""
150msgstr[0] ""
149msgstr[1] ""
151msgstr[1] ""
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153msgstr ""
155msgstr ""
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157msgstr ""
159msgstr ""
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161msgstr ""
163msgstr ""
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165msgstr ""
167msgstr ""
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169msgstr ""
171msgstr ""
170
172
@@ -208,7 +210,7 @@ msgstr ""
208msgid "Author:"
210msgid "Author:"
209msgstr ""
211msgstr ""
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213msgstr ""
215msgstr ""
214
216
@@ -245,11 +247,15 @@ msgstr "Snakker …"
245msgid "Search"
247msgid "Search"
246msgstr "Søk"
248msgstr "Søk"
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr "Søket ga ingen treff."
252msgstr "Søket ga ingen treff."
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255msgstr ""
261msgstr ""
po/nl.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-27 07:19+0000\n"
11"PO-Revision-Date: 2013-06-27 07:19+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Dutch <nl@li.org>\n"
13"Language-Team: Dutch <nl@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95msgstr ""
95msgstr ""
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr ""
99msgstr ""
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103msgstr ""
103msgstr ""
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
107msgstr ""
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111msgstr ""
111msgstr ""
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115msgstr ""
115msgstr ""
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119msgstr ""
119msgstr ""
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127msgstr ""
127msgstr ""
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148msgstr[0] ""
150msgstr[0] ""
149msgstr[1] ""
151msgstr[1] ""
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153msgstr ""
155msgstr ""
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157msgstr ""
159msgstr ""
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161msgstr ""
163msgstr ""
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165msgstr ""
167msgstr ""
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169msgstr ""
171msgstr ""
170
172
@@ -208,7 +210,7 @@ msgstr ""
208msgid "Author:"
210msgid "Author:"
209msgstr ""
211msgstr ""
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213msgstr ""
215msgstr ""
214
216
@@ -245,11 +247,15 @@ msgstr "Inspreken…"
245msgid "Search"
247msgid "Search"
246msgstr "Zoeken"
248msgstr "Zoeken"
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr "Er is helaas niets dat met uw zoekopdracht overeenkomt."
252msgstr "Er is helaas niets dat met uw zoekopdracht overeenkomt."
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255msgstr ""
261msgstr ""
po/pl.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-27 08:52+0000\n"
11"PO-Revision-Date: 2013-06-27 08:52+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Polish <pl@li.org>\n"
13"Language-Team: Polish <pl@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
17"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
18"|| n%100>=20) ? 1 : 2;\n"
18"|| n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
20−"X-Generator: Launchpad (build 16750)\n"
20+"X-Generator: Launchpad (build 16774)\n"
21
21
22#: Applications/applications.js:23
22#: Applications/applications.js:23
23msgid "Phone"
23msgid "Phone"
@@ -87,48 +87,50 @@ msgstr "Wikipedia"
87msgid "YouTube"
87msgid "YouTube"
88msgstr "YouTube"
88msgstr "YouTube"
89
89
90−#: Components/EdgeDemoOverlay.qml:145
90+#: Components/EdgeDemoOverlay.qml:150
91msgid "Skip intro"
91msgid "Skip intro"
92msgstr ""
92msgstr ""
93
93
94−#: Components/EdgeDemo.qml:98
94+#: Components/EdgeDemo.qml:112
95msgid "Right edge"
95msgid "Right edge"
96msgstr ""
96msgstr ""
97
97
98−#: Components/EdgeDemo.qml:99
98+#: Components/EdgeDemo.qml:113
99msgid "Try swiping from the right edge to unlock the phone"
99msgid "Try swiping from the right edge to unlock the phone"
100msgstr ""
100msgstr ""
101
101
102−#: Components/EdgeDemo.qml:135
102+#: Components/EdgeDemo.qml:144
103msgid "Top edge"
103msgid "Top edge"
104msgstr ""
104msgstr ""
105
105
106−#: Components/EdgeDemo.qml:136
106+#: Components/EdgeDemo.qml:145
107msgid "Try swiping from the top edge to access the indicators"
107msgid "Try swiping from the top edge to access the indicators"
108msgstr ""
108msgstr ""
109
109
110−#: Components/EdgeDemo.qml:161
110+#: Components/EdgeDemo.qml:170
111msgid "Close"
111msgid "Close"
112msgstr ""
112msgstr ""
113
113
114−#: Components/EdgeDemo.qml:162
114+#: Components/EdgeDemo.qml:171
115msgid "Swipe up again to close the settings screen"
115msgid "Swipe up again to close the settings screen"
116msgstr ""
116msgstr ""
117
117
118−#: Components/EdgeDemo.qml:189
118+#: Components/EdgeDemo.qml:198
119msgid "Left edge"
119msgid "Left edge"
120msgstr ""
120msgstr ""
121
121
122−#: Components/EdgeDemo.qml:190
122+#: Components/EdgeDemo.qml:199
123msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgid "Swipe from the left to reveal the launcher for quick access to apps"
124msgstr ""
124msgstr ""
125
125
126−#: Components/EdgeDemo.qml:217
126+#: Components/EdgeDemo.qml:226
127msgid "Well done"
127msgid "Well done"
128msgstr ""
128msgstr ""
129
129
130−#: Components/EdgeDemo.qml:218
130+#: Components/EdgeDemo.qml:227
131+msgid ""
131−msgid "You have now mastered the edge gestures and can start using the phone"
132+"You have now mastered the edge gestures and can start using the "
133+"phone<br><br>Tap anywhere to start"
132msgstr ""
134msgstr ""
133
135
134#: Components/PageHeader.qml:298
136#: Components/PageHeader.qml:298
@@ -149,23 +151,23 @@ msgid_plural "%1 reviews"
149msgstr[0] ""
151msgstr[0] ""
150msgstr[1] ""
152msgstr[1] ""
151
153
152−#: Dash/Apps/AppPreview.qml:175
154+#: Dash/Apps/AppPreview.qml:178
153msgid "Rate this"
155msgid "Rate this"
154msgstr ""
156msgstr ""
155
157
156−#: Dash/Apps/AppReviews.qml:72
158+#: Dash/Apps/AppReviews.qml:74
157msgid "Add a review"
159msgid "Add a review"
158msgstr ""
160msgstr ""
159
161
160−#: Dash/Apps/AppReviews.qml:84
162+#: Dash/Apps/AppReviews.qml:86
161msgid "Review"
163msgid "Review"
162msgstr ""
164msgstr ""
163
165
164−#: Dash/Apps/AppReviews.qml:118
166+#: Dash/Apps/AppReviews.qml:121
165msgid "Send"
167msgid "Send"
166msgstr ""
168msgstr ""
167
169
168−#: Dash/Apps/AppReviews.qml:136
170+#: Dash/Apps/AppReviews.qml:139
169msgid "Comments:"
171msgid "Comments:"
170msgstr ""
172msgstr ""
171
173
@@ -209,7 +211,7 @@ msgstr "Obsada:"
209msgid "Author:"
211msgid "Author:"
210msgstr "Autor:"
212msgstr "Autor:"
211
213
212−#: Greeter/Lockscreen.qml:134
214+#: Greeter/Lockscreen.qml:142
213msgid "Emergency Call"
215msgid "Emergency Call"
214msgstr ""
216msgstr ""
215
217
@@ -246,11 +248,15 @@ msgstr "Rozpoznanie..."
246msgid "Search"
248msgid "Search"
247msgstr "Szukaj"
249msgstr "Szukaj"
248
250
249−#: plugins/Unity/scope.cpp:317
251+#: plugins/Unity/scope.cpp:336
250msgid "Sorry, there is nothing that matches your search."
252msgid "Sorry, there is nothing that matches your search."
251msgstr "Nie znaleziono pasujących wyników."
253msgstr "Nie znaleziono pasujących wyników."
252
254
255+#: plugins/Unity/showallfilteroption.cpp:41
256+msgid "All"
257+msgstr ""
258+
253−#: Shell.qml:429
259+#: Shell.qml:453
254#, qt-format
260#, qt-format
255msgid "Please enter %1"
261msgid "Please enter %1"
256msgstr "Wprowadź %1"
262msgstr "Wprowadź %1"
po/pt_BR.po+79−71
@@ -7,127 +7,131 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11−"PO-Revision-Date: 2013-06-27 07:39+0000\n"
11+"PO-Revision-Date: 2013-10-01 13:05+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12+"Last-Translator: Rafael Neri <Unknown>\n"
13"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
13"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
23−msgstr ""
23+msgstr "Telefone"
24
24
25#: Applications/applications.js:29
25#: Applications/applications.js:29
26msgid "Camera"
26msgid "Camera"
27−msgstr ""
27+msgstr "Câmera"
28
28
29#: Applications/applications.js:35
29#: Applications/applications.js:35
30msgid "Gallery"
30msgid "Gallery"
31−msgstr ""
31+msgstr "Galeria"
32
32
33#: Applications/applications.js:40
33#: Applications/applications.js:40
34msgid "Facebook"
34msgid "Facebook"
35−msgstr ""
35+msgstr "Facebook"
36
36
37#: Applications/applications.js:46
37#: Applications/applications.js:46
38msgid "Browser"
38msgid "Browser"
39−msgstr ""
39+msgstr "Navegador"
40
40
41#: Applications/applications.js:51
41#: Applications/applications.js:51
42msgid "Twitter"
42msgid "Twitter"
43−msgstr ""
43+msgstr "Twitter"
44
44
45#: Applications/applications.js:57
45#: Applications/applications.js:57
46msgid "GMail"
46msgid "GMail"
47−msgstr ""
47+msgstr "GMail"
48
48
49#: Applications/applications.js:62
49#: Applications/applications.js:62
50msgid "Weather"
50msgid "Weather"
51−msgstr ""
51+msgstr "Clima"
52
52
53#: Applications/applications.js:68
53#: Applications/applications.js:68
54msgid "Notepad"
54msgid "Notepad"
55−msgstr ""
55+msgstr "Bloco de notas"
56
56
57#: Applications/applications.js:74
57#: Applications/applications.js:74
58msgid "Calendar"
58msgid "Calendar"
59−msgstr ""
59+msgstr "Calendário"
60
60
61#: Applications/applications.js:80
61#: Applications/applications.js:80
62msgid "Media Player"
62msgid "Media Player"
63−msgstr ""
63+msgstr "Media Player"
64
64
65#: Applications/applications.js:86
65#: Applications/applications.js:86
66msgid "Evernote"
66msgid "Evernote"
67−msgstr ""
67+msgstr "Evernote"
68
68
69#: Applications/applications.js:91
69#: Applications/applications.js:91
70msgid "Map"
70msgid "Map"
71−msgstr ""
71+msgstr "Mapa"
72
72
73#: Applications/applications.js:96
73#: Applications/applications.js:96
74msgid "Pinterest"
74msgid "Pinterest"
75−msgstr ""
75+msgstr "Pinterest"
76
76
77#: Applications/applications.js:101
77#: Applications/applications.js:101
78msgid "SoundCloud"
78msgid "SoundCloud"
79−msgstr ""
79+msgstr "SoundCloud"
80
80
81#: Applications/applications.js:106
81#: Applications/applications.js:106
82msgid "Wikipedia"
82msgid "Wikipedia"
83−msgstr ""
83+msgstr "Wikipédia"
84
84
85#: Applications/applications.js:111
85#: Applications/applications.js:111
86msgid "YouTube"
86msgid "YouTube"
87−msgstr ""
87+msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91−msgstr ""
91+msgstr "Pular introdução"
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95−msgstr ""
95+msgstr "Borda direita"
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99−msgstr ""
99+msgstr "Tente deslizar da borda direita para desbloquear o telefone"
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103−msgstr ""
103+msgstr "Borda superior"
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107−msgstr ""
107+msgstr "Tente deslizar da borda superior para acessar os indicadores"
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111−msgstr ""
111+msgstr "Fechar"
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115−msgstr ""
115+msgstr "Deslize novamente para cima para fechar a tela de configurações"
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119−msgstr ""
119+msgstr "Borda esquerda"
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124+"Deslize da esquerda para revelar o lançador para acesso rápido aos "
125+"aplicativos"
124
126
125−#: Components/EdgeDemo.qml:217
127+#: Components/EdgeDemo.qml:226
126msgid "Well done"
128msgid "Well done"
127−msgstr ""
129+msgstr "Bem feito"
128
130
129−#: Components/EdgeDemo.qml:218
131+#: Components/EdgeDemo.qml:227
132+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
133+"You have now mastered the edge gestures and can start using the "
134+"phone<br><br>Tap anywhere to start"
131msgstr ""
135msgstr ""
132
136
133#: Components/PageHeader.qml:298
137#: Components/PageHeader.qml:298
@@ -138,51 +142,51 @@ msgstr "Pesquisas recentes"
138#: Dash/Apps/AppInfo.qml:73
142#: Dash/Apps/AppInfo.qml:73
139#, qt-format
143#, qt-format
140msgid "(%1)"
144msgid "(%1)"
141−msgstr ""
145+msgstr "(%1)"
142
146
143#. TRANSLATORS: Number of persons who wrote reviews for this app
147#. TRANSLATORS: Number of persons who wrote reviews for this app
144#: Dash/Apps/AppInfo.qml:85
148#: Dash/Apps/AppInfo.qml:85
145#, qt-format
149#, qt-format
146msgid "%1 review"
150msgid "%1 review"
147msgid_plural "%1 reviews"
151msgid_plural "%1 reviews"
148−msgstr[0] ""
152+msgstr[0] "%1 análise"
149−msgstr[1] ""
153+msgstr[1] "%1 análises"
150
154
151−#: Dash/Apps/AppPreview.qml:175
155+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
156msgid "Rate this"
153−msgstr ""
157+msgstr "Avaliar isto"
154
158
155−#: Dash/Apps/AppReviews.qml:72
159+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
160msgid "Add a review"
157−msgstr ""
161+msgstr "Adicionar uma análise"
158
162
159−#: Dash/Apps/AppReviews.qml:84
163+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
164msgid "Review"
161−msgstr ""
165+msgstr "Revisão"
162
166
163−#: Dash/Apps/AppReviews.qml:118
167+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
168msgid "Send"
165−msgstr ""
169+msgstr "Enviar"
166
170
167−#: Dash/Apps/AppReviews.qml:136
171+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
172msgid "Comments:"
169−msgstr ""
173+msgstr "Comentários:"
170
174
171#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
175#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
172msgid "Featured"
176msgid "Featured"
173−msgstr ""
177+msgstr "Em destaque"
174
178
175#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
179#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
176msgid "Recent"
180msgid "Recent"
177−msgstr ""
181+msgstr "Recente"
178
182
179#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
183#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
180msgid "New Releases"
184msgid "New Releases"
181−msgstr ""
185+msgstr "Lançamentos"
182
186
183#: Dash/DashMusic.qml:30
187#: Dash/DashMusic.qml:30
184msgid "Top Charting"
188msgid "Top Charting"
185−msgstr ""
189+msgstr "Top gráficos"
186
190
187#: Dash/DashMusic.qml:91
191#: Dash/DashMusic.qml:91
188msgid "Music"
192msgid "Music"
@@ -190,7 +194,7 @@ msgstr "Músicas"
190
194
191#: Dash/DashVideos.qml:31
195#: Dash/DashVideos.qml:31
192msgid "Popular Online"
196msgid "Popular Online"
193−msgstr ""
197+msgstr "Popular Online"
194
198
195#: Dash/DashVideos.qml:146
199#: Dash/DashVideos.qml:146
196msgid "Videos"
200msgid "Videos"
@@ -198,28 +202,28 @@ msgstr "Vídeos"
198
202
199#: Dash/Video/VideoPreview.qml:130
203#: Dash/Video/VideoPreview.qml:130
200msgid "Directed by:"
204msgid "Directed by:"
201−msgstr ""
205+msgstr "Realizado por:"
202
206
203#: Dash/Video/VideoPreview.qml:153
207#: Dash/Video/VideoPreview.qml:153
204msgid "Starring:"
208msgid "Starring:"
205−msgstr ""
209+msgstr "Estrelando:"
206
210
207#: Dash/Video/VideoPreview.qml:176
211#: Dash/Video/VideoPreview.qml:176
208msgid "Author:"
212msgid "Author:"
209−msgstr ""
213+msgstr "Autor:"
210
214
211−#: Greeter/Lockscreen.qml:134
215+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
216msgid "Emergency Call"
213−msgstr ""
217+msgstr "Chamada de emergência"
214
218
215#: Greeter/PassphraseLockscreen.qml:59
219#: Greeter/PassphraseLockscreen.qml:59
216#, qt-format
220#, qt-format
217msgid "Hello %1"
221msgid "Hello %1"
218−msgstr ""
222+msgstr "Olá %1"
219
223
220#: Greeter/PassphraseLockscreen.qml:59
224#: Greeter/PassphraseLockscreen.qml:59
221msgid "Hello"
225msgid "Hello"
222−msgstr ""
226+msgstr "Olá"
223
227
224#: Hud/HudParametrizedActionsPage.qml:132
228#: Hud/HudParametrizedActionsPage.qml:132
225msgid "Confirm"
229msgid "Confirm"
@@ -245,11 +249,15 @@ msgstr "Falando..."
245msgid "Search"
249msgid "Search"
246msgstr "Pesquisar"
250msgstr "Pesquisar"
247
251
248−#: plugins/Unity/scope.cpp:317
252+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
253msgid "Sorry, there is nothing that matches your search."
250msgstr "Desculpe, não há nada que corresponda à sua pesquisa."
254msgstr "Desculpe, não há nada que corresponda à sua pesquisa."
251
255
256+#: plugins/Unity/showallfilteroption.cpp:41
257+msgid "All"
258+msgstr ""
259+
252−#: Shell.qml:429
260+#: Shell.qml:453
253#, qt-format
261#, qt-format
254msgid "Please enter %1"
262msgid "Please enter %1"
255−msgstr ""
263+msgstr "Por favor, digite %1"
po/ro.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-27 07:53+0000\n"
11"PO-Revision-Date: 2013-06-27 07:53+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Romanian <ro@li.org>\n"
13"Language-Team: Romanian <ro@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 "
17"Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 "
18"== 0) && (n != 0))) ? 2: 1));\n"
18"== 0) && (n != 0))) ? 2: 1));\n"
19−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
20−"X-Generator: Launchpad (build 16750)\n"
20+"X-Generator: Launchpad (build 16774)\n"
21
21
22#: Applications/applications.js:23
22#: Applications/applications.js:23
23msgid "Phone"
23msgid "Phone"
@@ -87,48 +87,50 @@ msgstr ""
87msgid "YouTube"
87msgid "YouTube"
88msgstr ""
88msgstr ""
89
89
90−#: Components/EdgeDemoOverlay.qml:145
90+#: Components/EdgeDemoOverlay.qml:150
91msgid "Skip intro"
91msgid "Skip intro"
92msgstr ""
92msgstr ""
93
93
94−#: Components/EdgeDemo.qml:98
94+#: Components/EdgeDemo.qml:112
95msgid "Right edge"
95msgid "Right edge"
96msgstr ""
96msgstr ""
97
97
98−#: Components/EdgeDemo.qml:99
98+#: Components/EdgeDemo.qml:113
99msgid "Try swiping from the right edge to unlock the phone"
99msgid "Try swiping from the right edge to unlock the phone"
100msgstr ""
100msgstr ""
101
101
102−#: Components/EdgeDemo.qml:135
102+#: Components/EdgeDemo.qml:144
103msgid "Top edge"
103msgid "Top edge"
104msgstr ""
104msgstr ""
105
105
106−#: Components/EdgeDemo.qml:136
106+#: Components/EdgeDemo.qml:145
107msgid "Try swiping from the top edge to access the indicators"
107msgid "Try swiping from the top edge to access the indicators"
108msgstr ""
108msgstr ""
109
109
110−#: Components/EdgeDemo.qml:161
110+#: Components/EdgeDemo.qml:170
111msgid "Close"
111msgid "Close"
112msgstr ""
112msgstr ""
113
113
114−#: Components/EdgeDemo.qml:162
114+#: Components/EdgeDemo.qml:171
115msgid "Swipe up again to close the settings screen"
115msgid "Swipe up again to close the settings screen"
116msgstr ""
116msgstr ""
117
117
118−#: Components/EdgeDemo.qml:189
118+#: Components/EdgeDemo.qml:198
119msgid "Left edge"
119msgid "Left edge"
120msgstr ""
120msgstr ""
121
121
122−#: Components/EdgeDemo.qml:190
122+#: Components/EdgeDemo.qml:199
123msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgid "Swipe from the left to reveal the launcher for quick access to apps"
124msgstr ""
124msgstr ""
125
125
126−#: Components/EdgeDemo.qml:217
126+#: Components/EdgeDemo.qml:226
127msgid "Well done"
127msgid "Well done"
128msgstr ""
128msgstr ""
129
129
130−#: Components/EdgeDemo.qml:218
130+#: Components/EdgeDemo.qml:227
131+msgid ""
131−msgid "You have now mastered the edge gestures and can start using the phone"
132+"You have now mastered the edge gestures and can start using the "
133+"phone<br><br>Tap anywhere to start"
132msgstr ""
134msgstr ""
133
135
134#: Components/PageHeader.qml:298
136#: Components/PageHeader.qml:298
@@ -149,23 +151,23 @@ msgid_plural "%1 reviews"
149msgstr[0] ""
151msgstr[0] ""
150msgstr[1] ""
152msgstr[1] ""
151
153
152−#: Dash/Apps/AppPreview.qml:175
154+#: Dash/Apps/AppPreview.qml:178
153msgid "Rate this"
155msgid "Rate this"
154msgstr ""
156msgstr ""
155
157
156−#: Dash/Apps/AppReviews.qml:72
158+#: Dash/Apps/AppReviews.qml:74
157msgid "Add a review"
159msgid "Add a review"
158msgstr ""
160msgstr ""
159
161
160−#: Dash/Apps/AppReviews.qml:84
162+#: Dash/Apps/AppReviews.qml:86
161msgid "Review"
163msgid "Review"
162msgstr ""
164msgstr ""
163
165
164−#: Dash/Apps/AppReviews.qml:118
166+#: Dash/Apps/AppReviews.qml:121
165msgid "Send"
167msgid "Send"
166msgstr ""
168msgstr ""
167
169
168−#: Dash/Apps/AppReviews.qml:136
170+#: Dash/Apps/AppReviews.qml:139
169msgid "Comments:"
171msgid "Comments:"
170msgstr ""
172msgstr ""
171
173
@@ -209,7 +211,7 @@ msgstr ""
209msgid "Author:"
211msgid "Author:"
210msgstr ""
212msgstr ""
211
213
212−#: Greeter/Lockscreen.qml:134
214+#: Greeter/Lockscreen.qml:142
213msgid "Emergency Call"
215msgid "Emergency Call"
214msgstr ""
216msgstr ""
215
217
@@ -246,12 +248,16 @@ msgstr "Vorbire..."
246msgid "Search"
248msgid "Search"
247msgstr "Căutare"
249msgstr "Căutare"
248
250
249−#: plugins/Unity/scope.cpp:317
251+#: plugins/Unity/scope.cpp:336
250msgid "Sorry, there is nothing that matches your search."
252msgid "Sorry, there is nothing that matches your search."
251msgstr ""
253msgstr ""
252"Ne pare rău, nu este nimic care se potrivește căutării dumneavoastră."
254"Ne pare rău, nu este nimic care se potrivește căutării dumneavoastră."
253
255
256+#: plugins/Unity/showallfilteroption.cpp:41
257+msgid "All"
258+msgstr ""
259+
254−#: Shell.qml:429
260+#: Shell.qml:453
255#, qt-format
261#, qt-format
256msgid "Please enter %1"
262msgid "Please enter %1"
257msgstr ""
263msgstr ""
po/ru.po+59−49
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11−"PO-Revision-Date: 2013-06-28 06:40+0000\n"
11+"PO-Revision-Date: 2013-10-01 05:55+0000\n"
12−"Last-Translator: Eugene Marshal <Unknown>\n"
12+"Last-Translator: Zonov Roman <Unknown>\n"
13"Language-Team: Russian <ru@li.org>\n"
13"Language-Team: Russian <ru@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
20−"X-Generator: Launchpad (build 16750)\n"
20+"X-Generator: Launchpad (build 16774)\n"
21
21
22#: Applications/applications.js:23
22#: Applications/applications.js:23
23msgid "Phone"
23msgid "Phone"
@@ -69,7 +69,7 @@ msgstr "Evernote"
69
69
70#: Applications/applications.js:91
70#: Applications/applications.js:91
71msgid "Map"
71msgid "Map"
72−msgstr "Карта"
72+msgstr "Карты"
73
73
74#: Applications/applications.js:96
74#: Applications/applications.js:96
75msgid "Pinterest"
75msgid "Pinterest"
@@ -87,48 +87,55 @@ msgstr "Википедия"
87msgid "YouTube"
87msgid "YouTube"
88msgstr "YouTube"
88msgstr "YouTube"
89
89
90−#: Components/EdgeDemoOverlay.qml:145
90+#: Components/EdgeDemoOverlay.qml:150
91msgid "Skip intro"
91msgid "Skip intro"
92−msgstr ""
92+msgstr "Пропустить обучение"
93
93
94−#: Components/EdgeDemo.qml:98
94+#: Components/EdgeDemo.qml:112
95msgid "Right edge"
95msgid "Right edge"
96−msgstr ""
96+msgstr "Правый край"
97
97
98−#: Components/EdgeDemo.qml:99
98+#: Components/EdgeDemo.qml:113
99msgid "Try swiping from the right edge to unlock the phone"
99msgid "Try swiping from the right edge to unlock the phone"
100msgstr ""
100msgstr ""
101+"Попробуйте переместить палец от правого края к левому для разблокировки "
102+"устройства"
101
103
102−#: Components/EdgeDemo.qml:135
104+#: Components/EdgeDemo.qml:144
103msgid "Top edge"
105msgid "Top edge"
104−msgstr ""
106+msgstr "Верхний край"
105
107
106−#: Components/EdgeDemo.qml:136
108+#: Components/EdgeDemo.qml:145
107msgid "Try swiping from the top edge to access the indicators"
109msgid "Try swiping from the top edge to access the indicators"
108msgstr ""
110msgstr ""
111+"Попробуйте переместить палец от верхнего края вниз для доступа к индикаторам"
109
112
110−#: Components/EdgeDemo.qml:161
113+#: Components/EdgeDemo.qml:170
111msgid "Close"
114msgid "Close"
112−msgstr ""
115+msgstr "Закрыть"
113
116
114−#: Components/EdgeDemo.qml:162
117+#: Components/EdgeDemo.qml:171
115msgid "Swipe up again to close the settings screen"
118msgid "Swipe up again to close the settings screen"
116−msgstr ""
119+msgstr "Снова переместите палец вверх для закрытия экрана настроек"
117
120
118−#: Components/EdgeDemo.qml:189
121+#: Components/EdgeDemo.qml:198
119msgid "Left edge"
122msgid "Left edge"
120−msgstr ""
123+msgstr "Левый край"
121
124
122−#: Components/EdgeDemo.qml:190
125+#: Components/EdgeDemo.qml:199
123msgid "Swipe from the left to reveal the launcher for quick access to apps"
126msgid "Swipe from the left to reveal the launcher for quick access to apps"
124msgstr ""
127msgstr ""
128+"Переместите палец от левого края вправо для открытия лаунчера для быстрого "
129+"доступа к приложениям"
125
130
126−#: Components/EdgeDemo.qml:217
131+#: Components/EdgeDemo.qml:226
127msgid "Well done"
132msgid "Well done"
128−msgstr ""
133+msgstr "Великолепно"
129
134
130−#: Components/EdgeDemo.qml:218
135+#: Components/EdgeDemo.qml:227
136+msgid ""
131−msgid "You have now mastered the edge gestures and can start using the phone"
137+"You have now mastered the edge gestures and can start using the "
138+"phone<br><br>Tap anywhere to start"
132msgstr ""
139msgstr ""
133
140
134#: Components/PageHeader.qml:298
141#: Components/PageHeader.qml:298
@@ -139,39 +146,38 @@ msgstr "Последние поисковые запросы"
139#: Dash/Apps/AppInfo.qml:73
146#: Dash/Apps/AppInfo.qml:73
140#, qt-format
147#, qt-format
141msgid "(%1)"
148msgid "(%1)"
142−msgstr ""
149+msgstr "(%1)"
143
150
144#. TRANSLATORS: Number of persons who wrote reviews for this app
151#. TRANSLATORS: Number of persons who wrote reviews for this app
145#: Dash/Apps/AppInfo.qml:85
152#: Dash/Apps/AppInfo.qml:85
146#, qt-format
153#, qt-format
147msgid "%1 review"
154msgid "%1 review"
148msgid_plural "%1 reviews"
155msgid_plural "%1 reviews"
149−msgstr[0] ""
156+msgstr[0] "%1 отзыв"
150−msgstr[1] ""
151
157
152−#: Dash/Apps/AppPreview.qml:175
158+#: Dash/Apps/AppPreview.qml:178
153msgid "Rate this"
159msgid "Rate this"
154−msgstr ""
160+msgstr "Оцените это"
155
161
156−#: Dash/Apps/AppReviews.qml:72
162+#: Dash/Apps/AppReviews.qml:74
157msgid "Add a review"
163msgid "Add a review"
158−msgstr ""
164+msgstr "Добавьте отзыв"
159
165
160−#: Dash/Apps/AppReviews.qml:84
166+#: Dash/Apps/AppReviews.qml:86
161msgid "Review"
167msgid "Review"
162−msgstr ""
168+msgstr "Отзыв"
163
169
164−#: Dash/Apps/AppReviews.qml:118
170+#: Dash/Apps/AppReviews.qml:121
165msgid "Send"
171msgid "Send"
166−msgstr ""
172+msgstr "Отправить"
167
173
168−#: Dash/Apps/AppReviews.qml:136
174+#: Dash/Apps/AppReviews.qml:139
169msgid "Comments:"
175msgid "Comments:"
170−msgstr ""
176+msgstr "Комментарии:"
171
177
172#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
178#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
173msgid "Featured"
179msgid "Featured"
174−msgstr ""
180+msgstr "Рекомендованное"
175
181
176#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
182#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
177msgid "Recent"
183msgid "Recent"
@@ -183,7 +189,7 @@ msgstr "Новые релизы"
183
189
184#: Dash/DashMusic.qml:30
190#: Dash/DashMusic.qml:30
185msgid "Top Charting"
191msgid "Top Charting"
186−msgstr ""
192+msgstr "Наиболее популярное"
187
193
188#: Dash/DashMusic.qml:91
194#: Dash/DashMusic.qml:91
189msgid "Music"
195msgid "Music"
@@ -191,7 +197,7 @@ msgstr "Музыка"
191
197
192#: Dash/DashVideos.qml:31
198#: Dash/DashVideos.qml:31
193msgid "Popular Online"
199msgid "Popular Online"
194−msgstr ""
200+msgstr "Популярное в Интернете"
195
201
196#: Dash/DashVideos.qml:146
202#: Dash/DashVideos.qml:146
197msgid "Videos"
203msgid "Videos"
@@ -203,28 +209,28 @@ msgstr "Режиссёр"
203
209
204#: Dash/Video/VideoPreview.qml:153
210#: Dash/Video/VideoPreview.qml:153
205msgid "Starring:"
211msgid "Starring:"
206−msgstr "В главных ролях"
212+msgstr "В главных ролях:"
207
213
208#: Dash/Video/VideoPreview.qml:176
214#: Dash/Video/VideoPreview.qml:176
209msgid "Author:"
215msgid "Author:"
210msgstr "Автор:"
216msgstr "Автор:"
211
217
212−#: Greeter/Lockscreen.qml:134
218+#: Greeter/Lockscreen.qml:142
213msgid "Emergency Call"
219msgid "Emergency Call"
214−msgstr ""
220+msgstr "Экстренный вызов"
215
221
216#: Greeter/PassphraseLockscreen.qml:59
222#: Greeter/PassphraseLockscreen.qml:59
217#, qt-format
223#, qt-format
218msgid "Hello %1"
224msgid "Hello %1"
219−msgstr ""
225+msgstr "Привет, %1"
220
226
221#: Greeter/PassphraseLockscreen.qml:59
227#: Greeter/PassphraseLockscreen.qml:59
222msgid "Hello"
228msgid "Hello"
223−msgstr ""
229+msgstr "Привет"
224
230
225#: Hud/HudParametrizedActionsPage.qml:132
231#: Hud/HudParametrizedActionsPage.qml:132
226msgid "Confirm"
232msgid "Confirm"
227−msgstr "Подвердить"
233+msgstr "Подтвердить"
228
234
229#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
235#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
230msgid "Type or say a command"
236msgid "Type or say a command"
@@ -246,11 +252,15 @@ msgstr "Говорите..."
246msgid "Search"
252msgid "Search"
247msgstr "Поиск"
253msgstr "Поиск"
248
254
249−#: plugins/Unity/scope.cpp:317
255+#: plugins/Unity/scope.cpp:336
250msgid "Sorry, there is nothing that matches your search."
256msgid "Sorry, there is nothing that matches your search."
251msgstr "Извините, поиск не дал результатов."
257msgstr "Извините, поиск не дал результатов."
252
258
259+#: plugins/Unity/showallfilteroption.cpp:41
260+msgid "All"
261+msgstr ""
262+
253−#: Shell.qml:429
263+#: Shell.qml:453
254#, qt-format
264#, qt-format
255msgid "Please enter %1"
265msgid "Please enter %1"
256msgstr "Пожалуйста, введите %1"
266msgstr "Пожалуйста, введите %1"
po/si.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-26 22:36+0000\n"
11"PO-Revision-Date: 2013-06-26 22:36+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Sinhalese <si@li.org>\n"
13"Language-Team: Sinhalese <si@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95msgstr ""
95msgstr ""
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr ""
99msgstr ""
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103msgstr ""
103msgstr ""
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
107msgstr ""
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111msgstr ""
111msgstr ""
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115msgstr ""
115msgstr ""
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119msgstr ""
119msgstr ""
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127msgstr ""
127msgstr ""
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148msgstr[0] ""
150msgstr[0] ""
149msgstr[1] ""
151msgstr[1] ""
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153msgstr ""
155msgstr ""
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157msgstr ""
159msgstr ""
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161msgstr ""
163msgstr ""
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165msgstr ""
167msgstr ""
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169msgstr ""
171msgstr ""
170
172
@@ -208,7 +210,7 @@ msgstr ""
208msgid "Author:"
210msgid "Author:"
209msgstr ""
211msgstr ""
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213msgstr ""
215msgstr ""
214
216
@@ -245,11 +247,15 @@ msgstr ""
245msgid "Search"
247msgid "Search"
246msgstr ""
248msgstr ""
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr ""
252msgstr ""
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255msgstr ""
261msgstr ""
po/sl.po+60−48
@@ -7,8 +7,8 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11−"PO-Revision-Date: 2013-07-02 12:59+0000\n"
11+"PO-Revision-Date: 2013-10-02 10:55+0000\n"
12"Last-Translator: Damir Jerovšek <Unknown>\n"
12"Last-Translator: Damir Jerovšek <Unknown>\n"
13"Language-Team: Slovenian <sl@li.org>\n"
13"Language-Team: Slovenian <sl@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || "
17"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || "
18"n%100==4 ? 3 : 0);\n"
18"n%100==4 ? 3 : 0);\n"
19−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19+"X-Launchpad-Export-Date: 2013-10-03 06:08+0000\n"
20−"X-Generator: Launchpad (build 16750)\n"
20+"X-Generator: Launchpad (build 16791)\n"
21
21
22#: Applications/applications.js:23
22#: Applications/applications.js:23
23msgid "Phone"
23msgid "Phone"
@@ -25,7 +25,7 @@ msgstr "Telefon"
25
25
26#: Applications/applications.js:29
26#: Applications/applications.js:29
27msgid "Camera"
27msgid "Camera"
28−msgstr ""
28+msgstr "Fotoaparat"
29
29
30#: Applications/applications.js:35
30#: Applications/applications.js:35
31msgid "Gallery"
31msgid "Gallery"
@@ -87,49 +87,55 @@ msgstr "Wikipedija"
87msgid "YouTube"
87msgid "YouTube"
88msgstr "YouTube"
88msgstr "YouTube"
89
89
90−#: Components/EdgeDemoOverlay.qml:145
90+#: Components/EdgeDemoOverlay.qml:150
91msgid "Skip intro"
91msgid "Skip intro"
92−msgstr ""
92+msgstr "Preskoči uvod"
93
93
94−#: Components/EdgeDemo.qml:98
94+#: Components/EdgeDemo.qml:112
95msgid "Right edge"
95msgid "Right edge"
96−msgstr ""
96+msgstr "Desni rob"
97
97
98−#: Components/EdgeDemo.qml:99
98+#: Components/EdgeDemo.qml:113
99msgid "Try swiping from the right edge to unlock the phone"
99msgid "Try swiping from the right edge to unlock the phone"
100−msgstr ""
100+msgstr "Poskusite povleči od desnega roba za odklep telefona"
101
101
102−#: Components/EdgeDemo.qml:135
102+#: Components/EdgeDemo.qml:144
103msgid "Top edge"
103msgid "Top edge"
104−msgstr ""
104+msgstr "Zgornji rob"
105
105
106−#: Components/EdgeDemo.qml:136
106+#: Components/EdgeDemo.qml:145
107msgid "Try swiping from the top edge to access the indicators"
107msgid "Try swiping from the top edge to access the indicators"
108−msgstr ""
108+msgstr "Poskusite povleči od zgornjega roba za dostop do kazalnikov"
109
109
110−#: Components/EdgeDemo.qml:161
110+#: Components/EdgeDemo.qml:170
111msgid "Close"
111msgid "Close"
112−msgstr ""
112+msgstr "Zapri"
113
113
114−#: Components/EdgeDemo.qml:162
114+#: Components/EdgeDemo.qml:171
115msgid "Swipe up again to close the settings screen"
115msgid "Swipe up again to close the settings screen"
116−msgstr ""
116+msgstr "Povlecite ponovno navzgor za zaprtje zaslona z nastavitvami"
117
117
118−#: Components/EdgeDemo.qml:189
118+#: Components/EdgeDemo.qml:198
119msgid "Left edge"
119msgid "Left edge"
120−msgstr ""
120+msgstr "Levi rob"
121
121
122−#: Components/EdgeDemo.qml:190
122+#: Components/EdgeDemo.qml:199
123msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgid "Swipe from the left to reveal the launcher for quick access to apps"
124msgstr ""
124msgstr ""
125+"Poskusite povleči od leve za razkritje zaganjalnika za hiter dostop do "
126+"programov"
125
127
126−#: Components/EdgeDemo.qml:217
128+#: Components/EdgeDemo.qml:226
127msgid "Well done"
129msgid "Well done"
128−msgstr ""
130+msgstr "Odlično"
129
131
130−#: Components/EdgeDemo.qml:218
132+#: Components/EdgeDemo.qml:227
133+msgid ""
131−msgid "You have now mastered the edge gestures and can start using the phone"
134+"You have now mastered the edge gestures and can start using the "
135+"phone<br><br>Tap anywhere to start"
132msgstr ""
136msgstr ""
137+"Sedaj ste osvojili poteze robov ter lahko začnete uporabljati "
138+"telefon<br><br>Tapnite kjerkoli na začetek"
133
139
134#: Components/PageHeader.qml:298
140#: Components/PageHeader.qml:298
135msgid "Recent searches"
141msgid "Recent searches"
@@ -139,35 +145,37 @@ msgstr "Nedavna iskanja"
139#: Dash/Apps/AppInfo.qml:73
145#: Dash/Apps/AppInfo.qml:73
140#, qt-format
146#, qt-format
141msgid "(%1)"
147msgid "(%1)"
142−msgstr ""
148+msgstr "(%1)"
143
149
144#. TRANSLATORS: Number of persons who wrote reviews for this app
150#. TRANSLATORS: Number of persons who wrote reviews for this app
145#: Dash/Apps/AppInfo.qml:85
151#: Dash/Apps/AppInfo.qml:85
146#, qt-format
152#, qt-format
147msgid "%1 review"
153msgid "%1 review"
148msgid_plural "%1 reviews"
154msgid_plural "%1 reviews"
149−msgstr[0] ""
155+msgstr[0] "%1 ocen"
156+msgstr[1] "%1 ocena"
150−msgstr[1] ""
157+msgstr[2] "%1 oceni"
158+msgstr[3] "%1 ocene"
151
159
152−#: Dash/Apps/AppPreview.qml:175
160+#: Dash/Apps/AppPreview.qml:178
153msgid "Rate this"
161msgid "Rate this"
154−msgstr ""
162+msgstr "Ocenite"
155
163
156−#: Dash/Apps/AppReviews.qml:72
164+#: Dash/Apps/AppReviews.qml:74
157msgid "Add a review"
165msgid "Add a review"
158−msgstr ""
166+msgstr "Dodaj oceno"
159
167
160−#: Dash/Apps/AppReviews.qml:84
168+#: Dash/Apps/AppReviews.qml:86
161msgid "Review"
169msgid "Review"
162−msgstr ""
170+msgstr "Ocena"
163
171
164−#: Dash/Apps/AppReviews.qml:118
172+#: Dash/Apps/AppReviews.qml:121
165msgid "Send"
173msgid "Send"
166−msgstr ""
174+msgstr "Pošlji"
167
175
168−#: Dash/Apps/AppReviews.qml:136
176+#: Dash/Apps/AppReviews.qml:139
169msgid "Comments:"
177msgid "Comments:"
170−msgstr ""
178+msgstr "Opombe:"
171
179
172#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
180#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
173msgid "Featured"
181msgid "Featured"
@@ -199,19 +207,19 @@ msgstr "Videi"
199
207
200#: Dash/Video/VideoPreview.qml:130
208#: Dash/Video/VideoPreview.qml:130
201msgid "Directed by:"
209msgid "Directed by:"
202−msgstr ""
210+msgstr "Režija:"
203
211
204#: Dash/Video/VideoPreview.qml:153
212#: Dash/Video/VideoPreview.qml:153
205msgid "Starring:"
213msgid "Starring:"
206−msgstr ""
214+msgstr "Igrajo:"
207
215
208#: Dash/Video/VideoPreview.qml:176
216#: Dash/Video/VideoPreview.qml:176
209msgid "Author:"
217msgid "Author:"
210−msgstr ""
218+msgstr "Avtor:"
211
219
212−#: Greeter/Lockscreen.qml:134
220+#: Greeter/Lockscreen.qml:142
213msgid "Emergency Call"
221msgid "Emergency Call"
214−msgstr ""
222+msgstr "Klic v sili"
215
223
216#: Greeter/PassphraseLockscreen.qml:59
224#: Greeter/PassphraseLockscreen.qml:59
217#, qt-format
225#, qt-format
@@ -220,7 +228,7 @@ msgstr "Pozdravljeni, %1"
220
228
221#: Greeter/PassphraseLockscreen.qml:59
229#: Greeter/PassphraseLockscreen.qml:59
222msgid "Hello"
230msgid "Hello"
223−msgstr ""
231+msgstr "Pozdravljeni"
224
232
225#: Hud/HudParametrizedActionsPage.qml:132
233#: Hud/HudParametrizedActionsPage.qml:132
226msgid "Confirm"
234msgid "Confirm"
@@ -246,11 +254,15 @@ msgstr "Govorjenje ..."
246msgid "Search"
254msgid "Search"
247msgstr "Iskanje"
255msgstr "Iskanje"
248
256
249−#: plugins/Unity/scope.cpp:317
257+#: plugins/Unity/scope.cpp:336
250msgid "Sorry, there is nothing that matches your search."
258msgid "Sorry, there is nothing that matches your search."
251msgstr "Nič se ne ujema z vašim iskalnim nizom."
259msgstr "Nič se ne ujema z vašim iskalnim nizom."
252
260
261+#: plugins/Unity/showallfilteroption.cpp:41
262+msgid "All"
263+msgstr "Vse"
264+
253−#: Shell.qml:429
265+#: Shell.qml:453
254#, qt-format
266#, qt-format
255msgid "Please enter %1"
267msgid "Please enter %1"
256−msgstr ""
268+msgstr "Vnesite %1"
po/sr.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-27 09:19+0000\n"
11"PO-Revision-Date: 2013-06-27 09:19+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Serbian <sr@li.org>\n"
13"Language-Team: Serbian <sr@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
20−"X-Generator: Launchpad (build 16750)\n"
20+"X-Generator: Launchpad (build 16774)\n"
21
21
22#: Applications/applications.js:23
22#: Applications/applications.js:23
23msgid "Phone"
23msgid "Phone"
@@ -87,48 +87,50 @@ msgstr ""
87msgid "YouTube"
87msgid "YouTube"
88msgstr ""
88msgstr ""
89
89
90−#: Components/EdgeDemoOverlay.qml:145
90+#: Components/EdgeDemoOverlay.qml:150
91msgid "Skip intro"
91msgid "Skip intro"
92msgstr ""
92msgstr ""
93
93
94−#: Components/EdgeDemo.qml:98
94+#: Components/EdgeDemo.qml:112
95msgid "Right edge"
95msgid "Right edge"
96msgstr ""
96msgstr ""
97
97
98−#: Components/EdgeDemo.qml:99
98+#: Components/EdgeDemo.qml:113
99msgid "Try swiping from the right edge to unlock the phone"
99msgid "Try swiping from the right edge to unlock the phone"
100msgstr ""
100msgstr ""
101
101
102−#: Components/EdgeDemo.qml:135
102+#: Components/EdgeDemo.qml:144
103msgid "Top edge"
103msgid "Top edge"
104msgstr ""
104msgstr ""
105
105
106−#: Components/EdgeDemo.qml:136
106+#: Components/EdgeDemo.qml:145
107msgid "Try swiping from the top edge to access the indicators"
107msgid "Try swiping from the top edge to access the indicators"
108msgstr ""
108msgstr ""
109
109
110−#: Components/EdgeDemo.qml:161
110+#: Components/EdgeDemo.qml:170
111msgid "Close"
111msgid "Close"
112msgstr ""
112msgstr ""
113
113
114−#: Components/EdgeDemo.qml:162
114+#: Components/EdgeDemo.qml:171
115msgid "Swipe up again to close the settings screen"
115msgid "Swipe up again to close the settings screen"
116msgstr ""
116msgstr ""
117
117
118−#: Components/EdgeDemo.qml:189
118+#: Components/EdgeDemo.qml:198
119msgid "Left edge"
119msgid "Left edge"
120msgstr ""
120msgstr ""
121
121
122−#: Components/EdgeDemo.qml:190
122+#: Components/EdgeDemo.qml:199
123msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgid "Swipe from the left to reveal the launcher for quick access to apps"
124msgstr ""
124msgstr ""
125
125
126−#: Components/EdgeDemo.qml:217
126+#: Components/EdgeDemo.qml:226
127msgid "Well done"
127msgid "Well done"
128msgstr ""
128msgstr ""
129
129
130−#: Components/EdgeDemo.qml:218
130+#: Components/EdgeDemo.qml:227
131+msgid ""
131−msgid "You have now mastered the edge gestures and can start using the phone"
132+"You have now mastered the edge gestures and can start using the "
133+"phone<br><br>Tap anywhere to start"
132msgstr ""
134msgstr ""
133
135
134#: Components/PageHeader.qml:298
136#: Components/PageHeader.qml:298
@@ -149,23 +151,23 @@ msgid_plural "%1 reviews"
149msgstr[0] ""
151msgstr[0] ""
150msgstr[1] ""
152msgstr[1] ""
151
153
152−#: Dash/Apps/AppPreview.qml:175
154+#: Dash/Apps/AppPreview.qml:178
153msgid "Rate this"
155msgid "Rate this"
154msgstr ""
156msgstr ""
155
157
156−#: Dash/Apps/AppReviews.qml:72
158+#: Dash/Apps/AppReviews.qml:74
157msgid "Add a review"
159msgid "Add a review"
158msgstr ""
160msgstr ""
159
161
160−#: Dash/Apps/AppReviews.qml:84
162+#: Dash/Apps/AppReviews.qml:86
161msgid "Review"
163msgid "Review"
162msgstr ""
164msgstr ""
163
165
164−#: Dash/Apps/AppReviews.qml:118
166+#: Dash/Apps/AppReviews.qml:121
165msgid "Send"
167msgid "Send"
166msgstr ""
168msgstr ""
167
169
168−#: Dash/Apps/AppReviews.qml:136
170+#: Dash/Apps/AppReviews.qml:139
169msgid "Comments:"
171msgid "Comments:"
170msgstr ""
172msgstr ""
171
173
@@ -209,7 +211,7 @@ msgstr ""
209msgid "Author:"
211msgid "Author:"
210msgstr ""
212msgstr ""
211
213
212−#: Greeter/Lockscreen.qml:134
214+#: Greeter/Lockscreen.qml:142
213msgid "Emergency Call"
215msgid "Emergency Call"
214msgstr ""
216msgstr ""
215
217
@@ -246,11 +248,15 @@ msgstr "Говор..."
246msgid "Search"
248msgid "Search"
247msgstr "Претрага"
249msgstr "Претрага"
248
250
249−#: plugins/Unity/scope.cpp:317
251+#: plugins/Unity/scope.cpp:336
250msgid "Sorry, there is nothing that matches your search."
252msgid "Sorry, there is nothing that matches your search."
251msgstr "Нажалост, претрага није наишла на икакво подударање."
253msgstr "Нажалост, претрага није наишла на икакво подударање."
252
254
255+#: plugins/Unity/showallfilteroption.cpp:41
256+msgid "All"
257+msgstr ""
258+
253−#: Shell.qml:429
259+#: Shell.qml:453
254#, qt-format
260#, qt-format
255msgid "Please enter %1"
261msgid "Please enter %1"
256msgstr ""
262msgstr ""
po/sv.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-26 22:36+0000\n"
11"PO-Revision-Date: 2013-06-26 22:36+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Swedish <sv@li.org>\n"
13"Language-Team: Swedish <sv@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95msgstr ""
95msgstr ""
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr ""
99msgstr ""
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103msgstr ""
103msgstr ""
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
107msgstr ""
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111msgstr ""
111msgstr ""
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115msgstr ""
115msgstr ""
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119msgstr ""
119msgstr ""
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127msgstr ""
127msgstr ""
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148msgstr[0] ""
150msgstr[0] ""
149msgstr[1] ""
151msgstr[1] ""
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153msgstr ""
155msgstr ""
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157msgstr ""
159msgstr ""
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161msgstr ""
163msgstr ""
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165msgstr ""
167msgstr ""
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169msgstr ""
171msgstr ""
170
172
@@ -208,7 +210,7 @@ msgstr ""
208msgid "Author:"
210msgid "Author:"
209msgstr ""
211msgstr ""
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213msgstr ""
215msgstr ""
214
216
@@ -245,11 +247,15 @@ msgstr ""
245msgid "Search"
247msgid "Search"
246msgstr ""
248msgstr ""
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr ""
252msgstr ""
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255msgstr ""
261msgstr ""
po/te.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-27 09:57+0000\n"
11"PO-Revision-Date: 2013-06-27 09:57+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Telugu <te@li.org>\n"
13"Language-Team: Telugu <te@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95msgstr ""
95msgstr ""
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr ""
99msgstr ""
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103msgstr ""
103msgstr ""
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
107msgstr ""
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111msgstr ""
111msgstr ""
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115msgstr ""
115msgstr ""
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119msgstr ""
119msgstr ""
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127msgstr ""
127msgstr ""
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148msgstr[0] ""
150msgstr[0] ""
149msgstr[1] ""
151msgstr[1] ""
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153msgstr ""
155msgstr ""
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157msgstr ""
159msgstr ""
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161msgstr ""
163msgstr ""
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165msgstr ""
167msgstr ""
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169msgstr ""
171msgstr ""
170
172
@@ -208,7 +210,7 @@ msgstr ""
208msgid "Author:"
210msgid "Author:"
209msgstr ""
211msgstr ""
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213msgstr ""
215msgstr ""
214
216
@@ -245,11 +247,15 @@ msgstr ""
245msgid "Search"
247msgid "Search"
246msgstr ""
248msgstr ""
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr ""
252msgstr ""
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255msgstr ""
261msgstr ""
po/tr.po+58−51
@@ -7,16 +7,16 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11−"PO-Revision-Date: 2013-06-27 10:08+0000\n"
11+"PO-Revision-Date: 2013-10-01 13:21+0000\n"
12−"Last-Translator: Adar Cem EREN <adarcemeren34@gmail.com>\n"
12+"Last-Translator: Volkan Gezer <Unknown>\n"
13"Language-Team: Turkish <tr@li.org>\n"
13"Language-Team: Turkish <tr@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -64,7 +64,7 @@ msgstr "Ortam Oynatıcı"
64
64
65#: Applications/applications.js:86
65#: Applications/applications.js:86
66msgid "Evernote"
66msgid "Evernote"
67−msgstr ""
67+msgstr "Evernote"
68
68
69#: Applications/applications.js:91
69#: Applications/applications.js:91
70msgid "Map"
70msgid "Map"
@@ -72,11 +72,11 @@ msgstr "Harita"
72
72
73#: Applications/applications.js:96
73#: Applications/applications.js:96
74msgid "Pinterest"
74msgid "Pinterest"
75−msgstr ""
75+msgstr "Pinterest"
76
76
77#: Applications/applications.js:101
77#: Applications/applications.js:101
78msgid "SoundCloud"
78msgid "SoundCloud"
79−msgstr ""
79+msgstr "SoundCloud"
80
80
81#: Applications/applications.js:106
81#: Applications/applications.js:106
82msgid "Wikipedia"
82msgid "Wikipedia"
@@ -86,48 +86,51 @@ msgstr "Vikipedi"
86msgid "YouTube"
86msgid "YouTube"
87msgstr "YouTube"
87msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91−msgstr ""
91+msgstr "İntro'yu geç"
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95−msgstr ""
95+msgstr "Sağ kenar"
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99−msgstr ""
99+msgstr "Kilidi açmak için sağ kenara sürüklemeyi deneyin"
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103−msgstr ""
103+msgstr "Üst kenar"
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107−msgstr ""
107+msgstr "Bildiricilere erişmek için üst kenarı sürüklemeyi deneyin"
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111−msgstr ""
111+msgstr "Kapat"
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115−msgstr ""
115+msgstr "Ayarlar ekranını kapatmak için tekrar yukarı kaydırın"
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119−msgstr ""
119+msgstr "Sol kenar"
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124+"Uygulamalara hızlı erişim çalıştırıcısını açmak için sol kenarı sürükleyin"
124
125
125−#: Components/EdgeDemo.qml:217
126+#: Components/EdgeDemo.qml:226
126msgid "Well done"
127msgid "Well done"
127−msgstr ""
128+msgstr "Tebrikler"
128
129
129−#: Components/EdgeDemo.qml:218
130+#: Components/EdgeDemo.qml:227
131+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
132+"You have now mastered the edge gestures and can start using the "
133+"phone<br><br>Tap anywhere to start"
131msgstr ""
134msgstr ""
132
135
133#: Components/PageHeader.qml:298
136#: Components/PageHeader.qml:298
@@ -138,35 +141,35 @@ msgstr "Son Arananlar"
138#: Dash/Apps/AppInfo.qml:73
141#: Dash/Apps/AppInfo.qml:73
139#, qt-format
142#, qt-format
140msgid "(%1)"
143msgid "(%1)"
141−msgstr ""
144+msgstr "(%1)"
142
145
143#. TRANSLATORS: Number of persons who wrote reviews for this app
146#. TRANSLATORS: Number of persons who wrote reviews for this app
144#: Dash/Apps/AppInfo.qml:85
147#: Dash/Apps/AppInfo.qml:85
145#, qt-format
148#, qt-format
146msgid "%1 review"
149msgid "%1 review"
147msgid_plural "%1 reviews"
150msgid_plural "%1 reviews"
148−msgstr[0] ""
151+msgstr[0] "%1 inceleme"
149−msgstr[1] ""
152+msgstr[1] "%1 inceleme"
150
153
151−#: Dash/Apps/AppPreview.qml:175
154+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
155msgid "Rate this"
153−msgstr ""
156+msgstr "Oyla"
154
157
155−#: Dash/Apps/AppReviews.qml:72
158+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
159msgid "Add a review"
157−msgstr ""
160+msgstr "Bir inceleme ekle"
158
161
159−#: Dash/Apps/AppReviews.qml:84
162+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
163msgid "Review"
161−msgstr ""
164+msgstr "İnceleme"
162
165
163−#: Dash/Apps/AppReviews.qml:118
166+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
167msgid "Send"
165−msgstr ""
168+msgstr "Gönder"
166
169
167−#: Dash/Apps/AppReviews.qml:136
170+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
171msgid "Comments:"
169−msgstr ""
172+msgstr "Yorumlar:"
170
173
171#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
172msgid "Featured"
175msgid "Featured"
@@ -178,11 +181,11 @@ msgstr "En Son"
178
181
179#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
180msgid "New Releases"
183msgid "New Releases"
181−msgstr ""
184+msgstr "Yeni Sürümler"
182
185
183#: Dash/DashMusic.qml:30
186#: Dash/DashMusic.qml:30
184msgid "Top Charting"
187msgid "Top Charting"
185−msgstr ""
188+msgstr "En Çok Beğenilenler"
186
189
187#: Dash/DashMusic.qml:91
190#: Dash/DashMusic.qml:91
188msgid "Music"
191msgid "Music"
@@ -202,20 +205,20 @@ msgstr "Yönetmen"
202
205
203#: Dash/Video/VideoPreview.qml:153
206#: Dash/Video/VideoPreview.qml:153
204msgid "Starring:"
207msgid "Starring:"
205−msgstr ""
208+msgstr "Başroller:"
206
209
207#: Dash/Video/VideoPreview.qml:176
210#: Dash/Video/VideoPreview.qml:176
208msgid "Author:"
211msgid "Author:"
209msgstr "Yazar:"
212msgstr "Yazar:"
210
213
211−#: Greeter/Lockscreen.qml:134
214+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
215msgid "Emergency Call"
213−msgstr ""
216+msgstr "Acil Arama"
214
217
215#: Greeter/PassphraseLockscreen.qml:59
218#: Greeter/PassphraseLockscreen.qml:59
216#, qt-format
219#, qt-format
217msgid "Hello %1"
220msgid "Hello %1"
218−msgstr ""
221+msgstr "Merhaba %1"
219
222
220#: Greeter/PassphraseLockscreen.qml:59
223#: Greeter/PassphraseLockscreen.qml:59
221msgid "Hello"
224msgid "Hello"
@@ -245,11 +248,15 @@ msgstr "Konuşuyor..."
245msgid "Search"
248msgid "Search"
246msgstr "Ara"
249msgstr "Ara"
247
250
248−#: plugins/Unity/scope.cpp:317
251+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
252msgid "Sorry, there is nothing that matches your search."
250msgstr "Üzgünüz, aramanızla eşleşen hiçbir şey yok."
253msgstr "Üzgünüz, aramanızla eşleşen hiçbir şey yok."
251
254
255+#: plugins/Unity/showallfilteroption.cpp:41
256+msgid "All"
257+msgstr ""
258+
252−#: Shell.qml:429
259+#: Shell.qml:453
253#, qt-format
260#, qt-format
254msgid "Please enter %1"
261msgid "Please enter %1"
255−msgstr ""
262+msgstr "Lütfen %1 girin"
po/ug.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-27 11:02+0000\n"
11"PO-Revision-Date: 2013-06-27 11:02+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Uyghur <ug@li.org>\n"
13"Language-Team: Uyghur <ug@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,48 +86,50 @@ msgstr "ۋىكىپېدىيە"
86msgid "YouTube"
86msgid "YouTube"
87msgstr "YouTube"
87msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95msgstr ""
95msgstr ""
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr ""
99msgstr ""
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103msgstr ""
103msgstr ""
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
107msgstr ""
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111msgstr ""
111msgstr ""
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115msgstr ""
115msgstr ""
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119msgstr ""
119msgstr ""
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127msgstr ""
127msgstr ""
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148msgstr[0] ""
150msgstr[0] ""
149msgstr[1] ""
151msgstr[1] ""
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153msgstr ""
155msgstr ""
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157msgstr ""
159msgstr ""
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161msgstr ""
163msgstr ""
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165msgstr ""
167msgstr ""
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169msgstr ""
171msgstr ""
170
172
@@ -208,7 +210,7 @@ msgstr ""
208msgid "Author:"
210msgid "Author:"
209msgstr "ئاپتور:"
211msgstr "ئاپتور:"
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213msgstr ""
215msgstr ""
214
216
@@ -245,11 +247,15 @@ msgstr "سۆزلەۋاتىسىز…"
245msgid "Search"
247msgid "Search"
246msgstr "ئىزدە"
248msgstr "ئىزدە"
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr "كەچۈرۈڭ، ئىزدىگىنىڭىزگە ماس نەتىجە تېپىلمىدى."
252msgstr "كەچۈرۈڭ، ئىزدىگىنىڭىزگە ماس نەتىجە تېپىلمىدى."
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255msgstr ""
261msgstr ""
po/uk.po+52−42
@@ -7,17 +7,17 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11−"PO-Revision-Date: 2013-07-21 05:47+0000\n"
11+"PO-Revision-Date: 2013-09-28 07:54+0000\n"
12−"Last-Translator: Ярослав Смук <Smuk.Slavko@yandex.ua>\n"
12+"Last-Translator: Yuri Chornoivan <yurchor@gmail.com>\n"
13"Language-Team: Ukrainian <uk@li.org>\n"
13"Language-Team: Ukrainian <uk@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
20−"X-Generator: Launchpad (build 16750)\n"
20+"X-Generator: Launchpad (build 16774)\n"
21
21
22#: Applications/applications.js:23
22#: Applications/applications.js:23
23msgid "Phone"
23msgid "Phone"
@@ -87,48 +87,53 @@ msgstr "Вікіпедія"
87msgid "YouTube"
87msgid "YouTube"
88msgstr "YouTube"
88msgstr "YouTube"
89
89
90−#: Components/EdgeDemoOverlay.qml:145
90+#: Components/EdgeDemoOverlay.qml:150
91msgid "Skip intro"
91msgid "Skip intro"
92−msgstr ""
92+msgstr "Пропустити вступ"
93
93
94−#: Components/EdgeDemo.qml:98
94+#: Components/EdgeDemo.qml:112
95msgid "Right edge"
95msgid "Right edge"
96−msgstr ""
96+msgstr "Правий край"
97
97
98−#: Components/EdgeDemo.qml:99
98+#: Components/EdgeDemo.qml:113
99msgid "Try swiping from the right edge to unlock the phone"
99msgid "Try swiping from the right edge to unlock the phone"
100−msgstr ""
100+msgstr "Спробуйте провести пальцем від правою краю, щоб розблокувати телефон"
101
101
102−#: Components/EdgeDemo.qml:135
102+#: Components/EdgeDemo.qml:144
103msgid "Top edge"
103msgid "Top edge"
104−msgstr ""
104+msgstr "Верхній край"
105
105
106−#: Components/EdgeDemo.qml:136
106+#: Components/EdgeDemo.qml:145
107msgid "Try swiping from the top edge to access the indicators"
107msgid "Try swiping from the top edge to access the indicators"
108msgstr ""
108msgstr ""
109+"Спробуйте провести пальцем від верхнього краю, щоб розблокувати телефон"
109
110
110−#: Components/EdgeDemo.qml:161
111+#: Components/EdgeDemo.qml:170
111msgid "Close"
112msgid "Close"
112−msgstr ""
113+msgstr "Закрити"
113
114
114−#: Components/EdgeDemo.qml:162
115+#: Components/EdgeDemo.qml:171
115msgid "Swipe up again to close the settings screen"
116msgid "Swipe up again to close the settings screen"
116−msgstr ""
117+msgstr "Проведіть пальцем ще раз, щоб закрити вікно параметрів"
117
118
118−#: Components/EdgeDemo.qml:189
119+#: Components/EdgeDemo.qml:198
119msgid "Left edge"
120msgid "Left edge"
120−msgstr ""
121+msgstr "Лівий край"
121
122
122−#: Components/EdgeDemo.qml:190
123+#: Components/EdgeDemo.qml:199
123msgid "Swipe from the left to reveal the launcher for quick access to apps"
124msgid "Swipe from the left to reveal the launcher for quick access to apps"
124msgstr ""
125msgstr ""
126+"Проведіть пальцем від лівого краю, щоб відкрити панель запуску для "
127+"пришвидшення доступу до програм"
125
128
126−#: Components/EdgeDemo.qml:217
129+#: Components/EdgeDemo.qml:226
127msgid "Well done"
130msgid "Well done"
128−msgstr ""
131+msgstr "Добре"
129
132
130−#: Components/EdgeDemo.qml:218
133+#: Components/EdgeDemo.qml:227
134+msgid ""
131−msgid "You have now mastered the edge gestures and can start using the phone"
135+"You have now mastered the edge gestures and can start using the "
136+"phone<br><br>Tap anywhere to start"
132msgstr ""
137msgstr ""
133
138
134#: Components/PageHeader.qml:298
139#: Components/PageHeader.qml:298
@@ -139,35 +144,36 @@ msgstr "Нещодавні пошуки"
139#: Dash/Apps/AppInfo.qml:73
144#: Dash/Apps/AppInfo.qml:73
140#, qt-format
145#, qt-format
141msgid "(%1)"
146msgid "(%1)"
142−msgstr ""
147+msgstr "(%1)"
143
148
144#. TRANSLATORS: Number of persons who wrote reviews for this app
149#. TRANSLATORS: Number of persons who wrote reviews for this app
145#: Dash/Apps/AppInfo.qml:85
150#: Dash/Apps/AppInfo.qml:85
146#, qt-format
151#, qt-format
147msgid "%1 review"
152msgid "%1 review"
148msgid_plural "%1 reviews"
153msgid_plural "%1 reviews"
149−msgstr[0] ""
154+msgstr[0] "%1 рецензія"
150−msgstr[1] ""
155+msgstr[1] "%1 рецензії"
156+msgstr[2] "%1 рецензій"
151
157
152−#: Dash/Apps/AppPreview.qml:175
158+#: Dash/Apps/AppPreview.qml:178
153msgid "Rate this"
159msgid "Rate this"
154−msgstr ""
160+msgstr "Оцінити"
155
161
156−#: Dash/Apps/AppReviews.qml:72
162+#: Dash/Apps/AppReviews.qml:74
157msgid "Add a review"
163msgid "Add a review"
158−msgstr ""
164+msgstr "Додати рецензію"
159
165
160−#: Dash/Apps/AppReviews.qml:84
166+#: Dash/Apps/AppReviews.qml:86
161msgid "Review"
167msgid "Review"
162−msgstr ""
168+msgstr "Рецензія"
163
169
164−#: Dash/Apps/AppReviews.qml:118
170+#: Dash/Apps/AppReviews.qml:121
165msgid "Send"
171msgid "Send"
166−msgstr ""
172+msgstr "Надіслати"
167
173
168−#: Dash/Apps/AppReviews.qml:136
174+#: Dash/Apps/AppReviews.qml:139
169msgid "Comments:"
175msgid "Comments:"
170−msgstr ""
176+msgstr "Коментарі:"
171
177
172#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
178#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
173msgid "Featured"
179msgid "Featured"
@@ -209,9 +215,9 @@ msgstr "Актори:"
209msgid "Author:"
215msgid "Author:"
210msgstr "Автор:"
216msgstr "Автор:"
211
217
212−#: Greeter/Lockscreen.qml:134
218+#: Greeter/Lockscreen.qml:142
213msgid "Emergency Call"
219msgid "Emergency Call"
214−msgstr ""
220+msgstr "Терміновий виклик"
215
221
216#: Greeter/PassphraseLockscreen.qml:59
222#: Greeter/PassphraseLockscreen.qml:59
217#, qt-format
223#, qt-format
@@ -246,11 +252,15 @@ msgstr "Мовлення…"
246msgid "Search"
252msgid "Search"
247msgstr "Пошук"
253msgstr "Пошук"
248
254
249−#: plugins/Unity/scope.cpp:317
255+#: plugins/Unity/scope.cpp:336
250msgid "Sorry, there is nothing that matches your search."
256msgid "Sorry, there is nothing that matches your search."
251msgstr "Вибачте, для вказаних вами ключових слів нічого не знайдено."
257msgstr "Вибачте, для вказаних вами ключових слів нічого не знайдено."
252
258
259+#: plugins/Unity/showallfilteroption.cpp:41
260+msgid "All"
261+msgstr ""
262+
253−#: Shell.qml:429
263+#: Shell.qml:453
254#, qt-format
264#, qt-format
255msgid "Please enter %1"
265msgid "Please enter %1"
256msgstr "Будь ласка, введіть %1"
266msgstr "Будь ласка, введіть %1"
po/unity8.pot+27−21
@@ -8,7 +8,7 @@ msgid ""
8msgstr ""
8msgstr ""
9"Project-Id-Version: unity8\n"
9"Project-Id-Version: unity8\n"
10"Report-Msgid-Bugs-To: \n"
10"Report-Msgid-Bugs-To: \n"
11−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
11+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -86,48 +86,50 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95msgstr ""
95msgstr ""
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr ""
99msgstr ""
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103msgstr ""
103msgstr ""
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
107msgstr ""
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111msgstr ""
111msgstr ""
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115msgstr ""
115msgstr ""
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119msgstr ""
119msgstr ""
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127msgstr ""
127msgstr ""
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148msgstr[0] ""
150msgstr[0] ""
149msgstr[1] ""
151msgstr[1] ""
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153msgstr ""
155msgstr ""
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157msgstr ""
159msgstr ""
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161msgstr ""
163msgstr ""
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165msgstr ""
167msgstr ""
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169msgstr ""
171msgstr ""
170
172
@@ -208,7 +210,7 @@ msgstr ""
208msgid "Author:"
210msgid "Author:"
209msgstr ""
211msgstr ""
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213msgstr ""
215msgstr ""
214
216
@@ -245,11 +247,15 @@ msgstr ""
245msgid "Search"
247msgid "Search"
246msgstr ""
248msgstr ""
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr ""
252msgstr ""
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255msgstr ""
261msgstr ""
po/xh.ponew file+261
@@ -0,0 +1,261 @@
1+# Xhosa 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-01 09:43+0200\n"
11+"PO-Revision-Date: 2013-09-28 13:20+0000\n"
12+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13+"Language-Team: Xhosa <xh@li.org>\n"
14+"MIME-Version: 1.0\n"
15+"Content-Type: text/plain; charset=UTF-8\n"
16+"Content-Transfer-Encoding: 8bit\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\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:150
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:298
136+msgid "Recent searches"
137+msgstr ""
138+
139+#. TRANSLATORS: Number of persons who rated this app
140+#: Dash/Apps/AppInfo.qml:73
141+#, qt-format
142+msgid "(%1)"
143+msgstr ""
144+
145+#. TRANSLATORS: Number of persons who wrote reviews for this app
146+#: Dash/Apps/AppInfo.qml:85
147+#, qt-format
148+msgid "%1 review"
149+msgid_plural "%1 reviews"
150+msgstr[0] ""
151+msgstr[1] ""
152+
153+#: Dash/Apps/AppPreview.qml:178
154+msgid "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 ""
172+
173+#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
174+msgid "Featured"
175+msgstr ""
176+
177+#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
178+msgid "Recent"
179+msgstr ""
180+
181+#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
182+msgid "New Releases"
183+msgstr ""
184+
185+#: Dash/DashMusic.qml:30
186+msgid "Top Charting"
187+msgstr ""
188+
189+#: Dash/DashMusic.qml:91
190+msgid "Music"
191+msgstr ""
192+
193+#: Dash/DashVideos.qml:31
194+msgid "Popular Online"
195+msgstr ""
196+
197+#: Dash/DashVideos.qml:146
198+msgid "Videos"
199+msgstr ""
200+
201+#: Dash/Video/VideoPreview.qml:130
202+msgid "Directed by:"
203+msgstr ""
204+
205+#: Dash/Video/VideoPreview.qml:153
206+msgid "Starring:"
207+msgstr ""
208+
209+#: Dash/Video/VideoPreview.qml:176
210+msgid "Author:"
211+msgstr ""
212+
213+#: Greeter/Lockscreen.qml:142
214+msgid "Emergency Call"
215+msgstr ""
216+
217+#: Greeter/PassphraseLockscreen.qml:59
218+#, qt-format
219+msgid "Hello %1"
220+msgstr ""
221+
222+#: Greeter/PassphraseLockscreen.qml:59
223+msgid "Hello"
224+msgstr ""
225+
226+#: Hud/HudParametrizedActionsPage.qml:132
227+msgid "Confirm"
228+msgstr ""
229+
230+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
231+msgid "Type or say a command"
232+msgstr ""
233+
234+#: Hud/Hud.qml:84
235+msgid "Loading. Please Wait..."
236+msgstr ""
237+
238+#: Hud/Hud.qml:89
239+msgid "Speak Now..."
240+msgstr ""
241+
242+#: Hud/Hud.qml:94
243+msgid "Speaking..."
244+msgstr ""
245+
246+#: Panel/SearchIndicator.qml:27
247+msgid "Search"
248+msgstr ""
249+
250+#: plugins/Unity/scope.cpp:336
251+msgid "Sorry, there is nothing that matches your search."
252+msgstr ""
253+
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
259+#, qt-format
260+msgid "Please enter %1"
261+msgstr ""
po/zh_CN.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-27 10:33+0000\n"
11"PO-Revision-Date: 2013-06-27 10:33+0000\n"
12"Last-Translator: Anthony Wong <anthony.wong@canonical.com>\n"
12"Last-Translator: Anthony Wong <anthony.wong@canonical.com>\n"
13"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
13"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,48 +86,50 @@ msgstr "维基百科"
86msgid "YouTube"
86msgid "YouTube"
87msgstr "YouTube"
87msgstr "YouTube"
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95msgstr ""
95msgstr ""
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr ""
99msgstr ""
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103msgstr ""
103msgstr ""
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
107msgstr ""
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111msgstr ""
111msgstr ""
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115msgstr ""
115msgstr ""
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119msgstr ""
119msgstr ""
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127msgstr ""
127msgstr ""
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148msgstr[0] ""
150msgstr[0] ""
149msgstr[1] ""
151msgstr[1] ""
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153msgstr ""
155msgstr ""
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157msgstr ""
159msgstr ""
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161msgstr ""
163msgstr ""
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165msgstr ""
167msgstr ""
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169msgstr ""
171msgstr ""
170
172
@@ -208,7 +210,7 @@ msgstr "主演:"
208msgid "Author:"
210msgid "Author:"
209msgstr "作者:"
211msgstr "作者:"
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213msgstr ""
215msgstr ""
214
216
@@ -245,11 +247,15 @@ msgstr "讲话中..."
245msgid "Search"
247msgid "Search"
246msgstr "搜索"
248msgstr "搜索"
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr "对不起,没有找到您想要的结果。"
252msgstr "对不起,没有找到您想要的结果。"
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255msgstr ""
261msgstr ""
po/zh_TW.po+29−23
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11"PO-Revision-Date: 2013-06-27 10:24+0000\n"
11"PO-Revision-Date: 2013-06-27 10:24+0000\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
12"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
13"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
13"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
17"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
19+"X-Generator: Launchpad (build 16774)\n"
20
20
21#: Applications/applications.js:23
21#: Applications/applications.js:23
22msgid "Phone"
22msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
86msgid "YouTube"
86msgid "YouTube"
87msgstr ""
87msgstr ""
88
88
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
90msgid "Skip intro"
90msgid "Skip intro"
91msgstr ""
91msgstr ""
92
92
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
94msgid "Right edge"
94msgid "Right edge"
95msgstr ""
95msgstr ""
96
96
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
98msgid "Try swiping from the right edge to unlock the phone"
98msgid "Try swiping from the right edge to unlock the phone"
99msgstr ""
99msgstr ""
100
100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102msgid "Top edge"
102msgid "Top edge"
103msgstr ""
103msgstr ""
104
104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106msgid "Try swiping from the top edge to access the indicators"
106msgid "Try swiping from the top edge to access the indicators"
107msgstr ""
107msgstr ""
108
108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110msgid "Close"
110msgid "Close"
111msgstr ""
111msgstr ""
112
112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114msgid "Swipe up again to close the settings screen"
114msgid "Swipe up again to close the settings screen"
115msgstr ""
115msgstr ""
116
116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118msgid "Left edge"
118msgid "Left edge"
119msgstr ""
119msgstr ""
120
120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123msgstr ""
123msgstr ""
124
124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126msgid "Well done"
126msgid "Well done"
127msgstr ""
127msgstr ""
128
128
129−#: Components/EdgeDemo.qml:218
129+#: Components/EdgeDemo.qml:227
130+msgid ""
130−msgid "You have now mastered the edge gestures and can start using the phone"
131+"You have now mastered the edge gestures and can start using the "
132+"phone<br><br>Tap anywhere to start"
131msgstr ""
133msgstr ""
132
134
133#: Components/PageHeader.qml:298
135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148msgstr[0] ""
150msgstr[0] ""
149msgstr[1] ""
151msgstr[1] ""
150
152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152msgid "Rate this"
154msgid "Rate this"
153msgstr ""
155msgstr ""
154
156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156msgid "Add a review"
158msgid "Add a review"
157msgstr ""
159msgstr ""
158
160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160msgid "Review"
162msgid "Review"
161msgstr ""
163msgstr ""
162
164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164msgid "Send"
166msgid "Send"
165msgstr ""
167msgstr ""
166
168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168msgid "Comments:"
170msgid "Comments:"
169msgstr ""
171msgstr ""
170
172
@@ -208,7 +210,7 @@ msgstr ""
208msgid "Author:"
210msgid "Author:"
209msgstr ""
211msgstr ""
210
212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212msgid "Emergency Call"
214msgid "Emergency Call"
213msgstr ""
215msgstr ""
214
216
@@ -245,11 +247,15 @@ msgstr "說話中..."
245msgid "Search"
247msgid "Search"
246msgstr "搜尋"
248msgstr "搜尋"
247
249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249msgid "Sorry, there is nothing that matches your search."
251msgid "Sorry, there is nothing that matches your search."
250msgstr "很抱歉,找不到符合您想搜尋的結果。"
252msgstr "很抱歉,找不到符合您想搜尋的結果。"
251
253
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
252−#: Shell.qml:429
258+#: Shell.qml:453
253#, qt-format
259#, qt-format
254msgid "Please enter %1"
260msgid "Please enter %1"
255msgstr ""
261msgstr ""
run_on_device+1−1
@@ -52,7 +52,7 @@ adb_root() {
52install_ssh_key() {
52install_ssh_key() {
53 ssh-keygen -R $TARGET_IP
53 ssh-keygen -R $TARGET_IP
54 HOME_DIR="${CHROOT_PREFIX}/home/phablet"
54 HOME_DIR="${CHROOT_PREFIX}/home/phablet"
55− adb push ~/.ssh/id_rsa.pub $HOME_DIR/.ssh/authorized_keys
55+ adb push ~/.ssh/phone_rsa.pub $HOME_DIR/.ssh/authorized_keys
56 adb shell chown $USER_ID:$USER_ID $HOME_DIR/.ssh
56 adb shell chown $USER_ID:$USER_ID $HOME_DIR/.ssh
57 adb shell chown $USER_ID:$USER_ID $HOME_DIR/.ssh/authorized_keys
57 adb shell chown $USER_ID:$USER_ID $HOME_DIR/.ssh/authorized_keys
58 adb shell chmod 700 $HOME_DIR/.ssh
58 adb shell chmod 700 $HOME_DIR/.ssh
src/Panel/Indicators/CMakeLists.txt−1
@@ -1,2 +1 @@
1add_subdirectory(client)
1add_subdirectory(client)
2−add_subdirectory(servicefiles)
src/Panel/Indicators/servicefiles/CMakeLists.txtdeleted−14
@@ -1,14 +0,0 @@
1−file(GLOB INDICATOR_SERVICE_FILES
2− ${CMAKE_CURRENT_SOURCE_DIR}/com.canonical.indicator.messages
3−)
4−
5−# copy indicators files into build directory for shadow builds
6−add_custom_target(IndicatorsServiceFiles ALL
7− COMMAND mkdir -p ${CMAKE_BINARY_DIR}/share/unity/indicators
8− COMMAND cp ${INDICATOR_SERVICE_FILES} ${CMAKE_BINARY_DIR}/share/unity/indicators
9− DEPENDS ${INDICATOR_SERVICE_FILES}
10−)
11−
12−install(FILES ${INDICATOR_SERVICE_FILES}
13− DESTINATION ${SHELL_APP_DIR}/unity/indicators
14−)
src/Panel/Indicators/servicefiles/com.canonical.indicator.messagesdeleted−10
@@ -1,10 +0,0 @@
1−[Indicator Service]
2−Name=indicator-messages
3−ObjectPath=/com/canonical/indicator/messages
4−Position=50
5−
6−[phone]
7−ObjectPath=/com/canonical/indicator/messages/phone
8−
9−[desktop]
10−ObjectPath=/com/canonical/indicator/messages/menu
tests/autopilot/unity8/application_lifecycle/__init__.pynew file+20
@@ -0,0 +1,20 @@
1+# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2+#
3+# Unity Autopilot Test Suite
4+# Copyright (C) 2013 Canonical
5+#
6+# This program is free software: you can redistribute it and/or modify
7+# it under the terms of the GNU General Public License as published by
8+# the Free Software Foundation, either version 3 of the License, or
9+# (at your option) any later version.
10+#
11+# This program is distributed in the hope that it will be useful,
12+# but WITHOUT ANY WARRANTY; without even the implied warranty of
13+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+# GNU General Public License for more details.
15+#
16+# You should have received a copy of the GNU General Public License
17+# along with this program. If not, see <http://www.gnu.org/licenses/>.
18+#
19+
20+"""Tests for the application lifecycle base package."""
tests/autopilot/unity8/application_lifecycle/tests/__init__.pynew file

No changes to the content.

tests/autopilot/unity8/application_lifecycle/tests/test_application_lifecycle.pynew file+136
@@ -0,0 +1,136 @@
1+# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2+#
3+# Unity Autopilot Test Suite
4+# Copyright (C) 2013 Canonical
5+#
6+# This program is free software: you can redistribute it and/or modify
7+# it under the terms of the GNU General Public License as published by
8+# the Free Software Foundation, either version 3 of the License, or
9+# (at your option) any later version.
10+#
11+# This program is distributed in the hope that it will be useful,
12+# but WITHOUT ANY WARRANTY; without even the implied warranty of
13+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+# GNU General Public License for more details.
15+#
16+# You should have received a copy of the GNU General Public License
17+# along with this program. If not, see <http://www.gnu.org/licenses/>.
18+#
19+
20+"""Tests for the application lifecycle."""
21+
22+from __future__ import absolute_import
23+
24+from unity8.shell import disable_qml_mocking
25+from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
26+
27+from autopilot.matchers import Eventually
28+from autopilot.platform import model
29+from testtools.matchers import Equals, NotEquals
30+
31+import logging
32+
33+logger = logging.getLogger(__name__)
34+
35+
36+class ApplicationLifecycleTests(UnityTestCase):
37+
38+ scenarios = _get_device_emulation_scenarios()
39+
40+ def setUp(self):
41+ super(ApplicationLifecycleTests, self).setUp()
42+ if model() == "Desktop":
43+ self.skipTest("Test cannot be run on the desktop.")
44+
45+ def swipe_screen_from_right(self):
46+ qml_view = self.main_window.get_qml_view()
47+ width = qml_view.width
48+ height = qml_view.height
49+ start_x = width
50+ start_y = int(height/2)
51+ end_x = int(width/2)
52+ end_y = start_y
53+
54+ logger.info("Swiping screen from the right edge")
55+ self.touch.drag(start_x, start_y, end_x, end_y)
56+
57+ def _get_current_focused_app_id(self):
58+ return self._proxy.select_single("Shell").currentFocusedAppId
59+
60+ def _launch_app(self, app_name):
61+ """Launches the application *app_name*
62+
63+ Assumes that the desktop file resides at:
64+ /usr/share/applications/{app_name}.desktop
65+
66+ """
67+ desktop_file = "--desktop_file_hint="\
68+ "/usr/share/applications/{app_name}.desktop".format(
69+ app_name=app_name
70+ )
71+ return self.launch_test_application(
72+ app_name,
73+ desktop_file,
74+ "--stage_hint=main_stage",
75+ app_type='qt'
76+ )
77+
78+ @disable_qml_mocking
79+ def test_can_launch_application(self):
80+ """Must be able to launch an application."""
81+ self.launch_unity()
82+ self.main_window.get_greeter().swipe()
83+
84+ app = self._launch_app("messaging-app")
85+
86+ self.assertThat(app, NotEquals(None))
87+ self.assertThat(
88+ self._get_current_focused_app_id(),
89+ Eventually(Equals("messaging-app"))
90+ )
91+
92+ @disable_qml_mocking
93+ def test_can_launch_multiple_applications(self):
94+ """A second application launched must be focused."""
95+ self.launch_unity()
96+ self.main_window.get_greeter().swipe()
97+
98+ self._launch_app("messaging-app")
99+ self.assertThat(
100+ self._get_current_focused_app_id(),
101+ Eventually(Equals("messaging-app"))
102+ )
103+
104+ self._launch_app("address-book-app")
105+ self.assertThat(
106+ self._get_current_focused_app_id(),
107+ Eventually(Equals("address-book-app"))
108+ )
109+
110+ @disable_qml_mocking
111+ def test_app_moves_from_unfocused_to_focused(self):
112+ """An application that is in the unfocused state must be able to be
113+ brought back to the focused state.
114+
115+ """
116+ self.launch_unity()
117+ self.main_window.get_greeter().swipe()
118+
119+ self._launch_app("messaging-app")
120+ self.assertThat(
121+ self._get_current_focused_app_id(),
122+ Eventually(Equals("messaging-app"))
123+ )
124+
125+ self._launch_app("address-book-app")
126+ self.assertThat(
127+ self._get_current_focused_app_id(),
128+ Eventually(Equals("address-book-app"))
129+ )
130+
131+ self.swipe_screen_from_right()
132+
133+ self.assertThat(
134+ self._get_current_focused_app_id(),
135+ Eventually(Equals("messaging-app"))
136+ )
tests/autopilot/unity8/indicators_client/__init__.pydeleted−8
@@ -1,8 +0,0 @@
1−# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2−# Copyright 2013 Canonical
3−#
4−# This program is free software: you can redistribute it and/or modify it
5−# under the terms of the GNU General Public License version 3, as published
6−# by the Free Software Foundation.
7−
8−"""unity indicators-client autopilot tests and emulators - sub level package."""
tests/autopilot/unity8/indicators_client/emulators/__init__.pydeleted−31
@@ -1,31 +0,0 @@
1−# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2−# Copyright 2013 Canonical
3−#
4−# This program is free software: you can redistribute it and/or modify it
5−# under the terms of the GNU General Public License version 3, as published
6−# by the Free Software Foundation.
7−
8−from autopilot.introspection.dbus import DBusIntrospectionObject
9−from autopilot.input import Mouse, Touch, Pointer
10−from autopilot.platform import model
11−
12−from time import sleep
13−
14−from autopilot.introspection.dbus import IntrospectableObjectMetaclass
15−
16−class IndicatorsIntrospectionObject(DBusIntrospectionObject):
17−
18− """A common class that provides introspection and other helpers to indictors."""
19−
20− if model() == 'Desktop':
21− scenarios = [
22− ('with mouse', dict(input_device_class=Mouse)),
23− ]
24− else:
25− scenarios = [
26− ('with touch', dict(input_device_class=Touch)),
27− ]
28−
29− def setUp(self):
30− self.pointing_device = Pointer(self.input_device_class.create())
31− super(IndicatorsTestCase, self).setUp()
tests/autopilot/unity8/indicators_client/emulators/common.pydeleted−14
@@ -1,14 +0,0 @@
1−# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2−# Copyright 2013 Canonical
3−#
4−# This program is free software: you can redistribute it and/or modify it
5−# under the terms of the GNU General Public License version 3, as published
6−# by the Free Software Foundation.
7−
8−from indicators_client.emulators import IndicatorsIntrospectionObject
9−
10−class SwitchMenu(IndicatorsIntrospectionObject):
11− """A switch menu control."""
12−
13−class Switch(IndicatorsIntrospectionObject):
14− """A switch control."""
tests/autopilot/unity8/indicators_client/emulators/main_window.pydeleted−27
@@ -1,27 +0,0 @@
1−# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2−# Copyright 2013 Canonical
3−#
4−# This program is free software: you can redistribute it and/or modify it
5−# under the terms of the GNU General Public License version 3, as published
6−# by the Free Software Foundation.
7−
8−class MainWindow(object):
9− """An emulator class that makes it easy to interact with the shell"""
10−
11− def __init__(self, app):
12− self.app = app
13−
14− def get_qml_view(self):
15− """Get the main QML view"""
16− return self.app.select_single("QQuickView")
17−
18− def get_indicators_client(self):
19− return self.app.select_single("IndicatorsClient")
20−
21− def get_page_stack(self):
22− """Get the page stack"""
23− return self.app.select_single("PageStack")
24−
25− def get_battery_menu(self):
26− """Get the battery menu from the list"""
27− return self.app.select_single("BasicMenuItem", objectName="indicator-battery");
tests/autopilot/unity8/indicators_client/tests/__init__.pydeleted−91
@@ -1,91 +0,0 @@
1−# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2−# Copyright 2013 Canonical
3−#
4−# This program is free software: you can redistribute it and/or modify it
5−# under the terms of the GNU General Public License version 3, as published
6−# by the Free Software Foundation.
7−
8−"""indicators-client autopilot tests."""
9−
10−import os.path
11−
12−from autopilot.input import Mouse, Touch, Pointer
13−from autopilot.testcase import AutopilotTestCase
14−from autopilot.matchers import Eventually
15−from autopilot.platform import model
16−from testtools.matchers import Equals
17−
18−from unity8 import get_binary_path
19−from unity8.indicators_client.emulators.main_window import MainWindow
20−from logging import getLogger
21−import sys
22−from time import sleep
23−
24−log = getLogger(__name__)
25−
26−class FormFactors(object):
27− Phone, Tablet, Desktop = range(3)
28−
29−class IndicatorsTestCase(AutopilotTestCase):
30−
31− """A common test case class that provides several useful methods for indicator tests."""
32−
33− geometry = None
34− grid_unit = None
35−
36− if model() == 'Desktop':
37− scenarios = [
38− ('with mouse', dict(input_device_class=Mouse, geometry="400x800", grid_unit="12")),
39− ]
40− else:
41− scenarios = [
42− ('with touch', dict(input_device_class=Touch)),
43− ]
44−
45− def setUp(self, geometry, grid_size):
46− self.pointing_device = Pointer(self.input_device_class.create())
47− super(IndicatorsTestCase, self).setUp()
48− if grid_size is not None:
49− self.patch_environment("GRID_UNIT_PX", str(grid_size))
50− self.grid_size = int(grid_size)
51− else:
52− self.grid_size = int(os.getenv('GRID_UNIT_PX'))
53−
54− if os.path.realpath(__file__).startswith("/usr/"):
55− self.launch_test_installed(geometry)
56− else:
57− self.launch_test_local(geometry)
58−
59− def launch_test_local(self, geometry):
60− if geometry is None:
61− self.app = self.launch_test_application(get_binary_path("indicators-client"),
62− "-geometry", geometry, app_type='qt')
63− else:
64− self.app = self.launch_test_application(get_binary_path("indicators-client"),
65− app_type='qt')
66−
67− def launch_test_installed(self, geometry):
68− if geometry is not None:
69− self.app = self.launch_test_application("indicators-client", "-geometry", geometry, app_type='qt')
70− else:
71− self.app = self.launch_test_application("indicators-client", app_type='qt')
72−
73− def skipWrapper(*args, **kwargs):
74− pass
75−
76− def form_factor(self):
77− return FormFactors.Desktop
78−
79− def __getattribute__(self, attr_name):
80− attr = object.__getattribute__(self, attr_name);
81− if attr_name.startswith("test_"):
82− try:
83− if self.form_factor() in attr.blacklist:
84− return self.skipWrapper
85− except:
86− pass
87− return attr
88−
89− @property
90− def main_window(self):
91− return MainWindow(self.app)
tests/autopilot/unity8/indicators_client/tests/test_battery.pydeleted−114
@@ -1,114 +0,0 @@
1−# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2−# Copyright 2013 Canonical
3−#
4−# This program is free software: you can redistribute it and/or modify it
5−# under the terms of the GNU General Public License version 3, as published
6−# by the Free Software Foundation.
7−
8−"""Add tests here if you want to ensure the behaviour of the power indicator menus are correct"""
9−
10−from testtools.matchers import Equals, NotEquals
11−from autopilot.input import Touch
12−from autopilot.matchers import Eventually
13−
14−from unity8.indicators_client.tests import IndicatorsTestCase
15−from time import sleep
16−import random
17−import math
18−import unittest
19−
20−class TestDisplayMenus(IndicatorsTestCase):
21− def setUp(self):
22− super(TestDisplayMenus, self).setUp(self.geometry, self.grid_unit)
23−
24− def tearDown(self):
25− # self.main_window.get_indicators_client().reset()
26− super(TestDisplayMenus, self).tearDown()
27−
28− # START SECTION
29− # We need to move these to emulators once autopilot supports emulators for
30− # applications started with AutopilotTestCase.launch_test_application
31−
32− def open_battery_menu(self):
33− # This opens the messaging menu so you don't have to do that in
34− # every test case
35− self.assertThat(lambda: self.main_window.get_battery_menu(), Eventually(NotEquals(None)));
36− self.pointing_device.move_to_object(self.main_window.get_battery_menu())
37− self.pointing_device.click()
38−
39− fn_loader = lambda: self.app.select_single("IndicatorsPage/QQuickLoader", objectName="pageLoader");
40− self.assertThat(fn_loader, Eventually(NotEquals(None)));
41− page_loader = fn_loader();
42− self.assertThat(page_loader.progress, Eventually(Equals(1.0)))
43−
44− def switch_auto_brightness(self, auto_brightness):
45− ab_switch = auto_brightness.select_single("CheckBox");
46− self.assertThat(ab_switch, NotEquals(None))
47−
48− self.pointing_device.move_to_object(ab_switch)
49− self.pointing_device.click()
50−
51− def set_brightness_to_value(self, brightness_menu, new_value):
52− brightness_slider = brightness_menu.select_single("Slider");
53− self.assertThat(brightness_slider, NotEquals(None))
54−
55− self.pointing_device.move_to_object(brightness_slider)
56−
57− old_ab_value = brightness_slider.value
58− pixel_ratio = brightness_slider.width / (brightness_slider.maximumValue - brightness_slider.minimumValue)
59−
60− while True:
61−
62− pixels_to_move = int(pixel_ratio * (new_value - old_ab_value) / 15)
63− if pixels_to_move == 0:
64− break;
65−
66− self.pointing_device.drag(self.pointing_device.x, self.pointing_device.y, self.pointing_device.x + pixels_to_move, self.pointing_device.y)
67−
68− old_ab_value = brightness_slider.value
69−
70− @unittest.skip("Battery indicator has been removed.")
71− def test_auto_bright_switch(self):
72− """Test the auto-bright switch"""
73− self.open_battery_menu()
74−
75− # wait for the switch menu item
76− fn_auto_brightness = lambda: self.app.select_single("SwitchMenuItem", objectName="auto-brightness");
77− # FIXME: this should go away when we switch to indicator-power
78− try:
79− self.assertThat(fn_auto_brightness, Eventually(NotEquals(None)));
80− except AssertionError:
81− self.skipTest("WARNING: test skipped due to missing indicator-battery")
82− auto_brightness = fn_auto_brightness();
83−
84− old_ab_value = auto_brightness.checked
85−
86− self.switch_auto_brightness(auto_brightness)
87−
88− # TODO - should check backend when it's introspectable.
89− self.assertThat(auto_brightness.checked, Eventually(NotEquals(old_ab_value)))
90−
91− @unittest.skip("Battery indicator has been removed.")
92− def test_brightness_slider(self):
93− """Test the auto-bright switch"""
94− self.open_battery_menu()
95−
96− fn_brightness_menu = lambda: self.app.select_single("SliderMenuItem", objectName="brightness");
97− # FIXME: this should go away when we switch to indicator-power
98− try:
99− self.assertThat(fn_brightness_menu, Eventually(NotEquals(None)));
100− except AssertionError:
101− self.skipTest("WARNING: test skipped due to missing indicator-battery")
102− brightness_menu = fn_brightness_menu();
103−
104− old_ab_value = brightness_menu.value
105− # find a new value to do to. At least 1/4 distance away from current value
106− while True:
107− desired_value = random.uniform(brightness_menu.minimumValue, brightness_menu.maximumValue)
108− if (abs(desired_value - old_ab_value) >= (brightness_menu.maximumValue - brightness_menu.minimumValue)/4):
109− break;
110−
111− self.set_brightness_to_value(brightness_menu, desired_value)
112−
113− # TODO - should check backend when it's introspectable.
114− self.assertThat(brightness_menu.value, Eventually(NotEquals(old_ab_value)))
tests/autopilot/unity8/shell/__init__.py+24
@@ -19,6 +19,7 @@
19
19
20"""unity shell autopilot tests and emulators - sub level package."""
20"""unity shell autopilot tests and emulators - sub level package."""
21
21
22+from time import sleep
22from functools import wraps
23from functools import wraps
23import logging
24import logging
24
25
@@ -36,3 +37,26 @@ def with_lightdm_mock(mock_type):
36 return fn(*args, **kwargs)
37 return fn(*args, **kwargs)
37 return wrapper
38 return wrapper
38 return with_lightdm_mock_internal
39 return with_lightdm_mock_internal
40+
41+
42+def disable_qml_mocking(fn):
43+ """Simple decorator that disables the QML mocks from being loaded."""
44+ @wraps(fn)
45+ def wrapper(*args, **kwargs):
46+ tests_self = args[0]
47+ tests_self._qml_mock_enabled = False
48+ return fn(*args, **kwargs)
49+ return wrapper
50+
51+class DragMixin(object):
52+ def _drag(self, x1, y1, x2, y2):
53+ cur_x = x1
54+ cur_y = y1
55+ dx = 1.0 * (x2 - x1) / 100
56+ dy = 1.0 * (y2 - y1) / 100
57+ for i in range(0, 100):
58+ self.touch._finger_move(int(cur_x), int(cur_y))
59+ sleep(0.002)
60+ cur_x += dx
61+ cur_y += dy
62+ self.touch._finger_move(int(x2), int(y2))
tests/autopilot/unity8/shell/emulators/dash.py+15−6
@@ -18,17 +18,22 @@
18#
18#
19
19
20from unity8.shell.emulators import UnityEmulatorBase
20from unity8.shell.emulators import UnityEmulatorBase
21−
21+from time import sleep
22
22
23class Dash(UnityEmulatorBase):
23class Dash(UnityEmulatorBase):
24
24
25 """An emulator that understands the Dash."""
25 """An emulator that understands the Dash."""
26
26
27 def get_home_applications_grid(self):
27 def get_home_applications_grid(self):
28+ for i in range(1,10):
28− return self.get_scope('home').select_single(
29+ get_grid = self.get_scope('home').select_single(
29− "GenericFilterGrid",
30+ "GenericFilterGrid",
30− objectName="applications.scope"
31+ objectName="applications.scope"
31− )
32+ )
33+ if get_grid != None:
34+ break
35+ sleep(1)
36+ return get_grid
32
37
33 def get_application_icon(self, text):
38 def get_application_icon(self, text):
34 """Returns a 'Tile' icon that has the text 'text' from the application
39 """Returns a 'Tile' icon that has the text 'text' from the application
@@ -40,7 +45,11 @@ class Dash(UnityEmulatorBase):
40
45
41 """
46 """
42 app_grid = self.get_home_applications_grid()
47 app_grid = self.get_home_applications_grid()
48+ for i in range(1,10):
43− resp_grid = app_grid.select_single('ResponsiveGridView')
49+ resp_grid = app_grid.select_single('ResponsiveGridView')
50+ if resp_grid != None:
51+ break
52+ sleep(1)
44 return resp_grid.select_single('Tile', text=text)
53 return resp_grid.select_single('Tile', text=text)
45
54
46 def get_scope(self, scope_name='home'):
55 def get_scope(self, scope_name='home'):
tests/autopilot/unity8/shell/emulators/hud.py+8−9
@@ -21,36 +21,35 @@ from collections import namedtuple
21
21
22from unity8 import get_grid_size
22from unity8 import get_grid_size
23from unity8.shell.emulators import UnityEmulatorBase
23from unity8.shell.emulators import UnityEmulatorBase
24+from unity8.shell import DragMixin
24from autopilot.input import Touch
25from autopilot.input import Touch
25
26
26−
27SwipeCoords = namedtuple('SwipeCoords', 'start_x end_x start_y end_y')
27SwipeCoords = namedtuple('SwipeCoords', 'start_x end_x start_y end_y')
28
28
29−
30−class Hud(UnityEmulatorBase):
29+class Hud(UnityEmulatorBase, DragMixin):
31
30
32 """An emulator that understands the Hud."""
31 """An emulator that understands the Hud."""
33
32
34 def show(self):
33 def show(self):
35 """Swipes open the Hud."""
34 """Swipes open the Hud."""
36− touch = Touch.create()
35+ self.touch = Touch.create()
37
36
38 window = self.get_root_instance().select_single('QQuickView')
37 window = self.get_root_instance().select_single('QQuickView')
39 hud_show_button = window.select_single("HudButton")
38 hud_show_button = window.select_single("HudButton")
40
39
41 swipe_coords = self.get_button_swipe_coords(window, hud_show_button)
40 swipe_coords = self.get_button_swipe_coords(window, hud_show_button)
42
41
43− touch.press(swipe_coords.start_x, swipe_coords.start_y)
42+ self.touch.press(swipe_coords.start_x, swipe_coords.start_y)
44− touch._finger_move(swipe_coords.end_x, swipe_coords.end_y)
43+ self._drag(swipe_coords.start_x, swipe_coords.start_y, swipe_coords.start_x, swipe_coords.end_y)
45 try:
44 try:
46 hud_show_button.opacity.wait_for(1.0)
45 hud_show_button.opacity.wait_for(1.0)
47− touch.release()
46+ self.touch.release()
48 self.shown.wait_for(True)
47 self.shown.wait_for(True)
49 except AssertionError:
48 except AssertionError:
50 raise
49 raise
51 finally:
50 finally:
52− if touch._touch_finger is not None:
51+ if self.touch._touch_finger is not None:
53− touch.release()
52+ self.touch.release()
54
53
55 def dismiss(self):
54 def dismiss(self):
56 """Closes the open Hud."""
55 """Closes the open Hud."""
tests/autopilot/unity8/shell/emulators/main_window.py+3
@@ -58,6 +58,9 @@ class MainWindow(object):
58 def get_hud_show_button(self):
58 def get_hud_show_button(self):
59 return self.app.select_single("HudButton")
59 return self.app.select_single("HudButton")
60
60
61+ def get_hud_edge_drag_area(self):
62+ return self.app.select_single(objectName="hudDragArea")
63+
61 def get_dash(self):
64 def get_dash(self):
62 return self.app.select_single(Dash)
65 return self.app.select_single(Dash)
63
66
tests/autopilot/unity8/shell/tests/__init__.py+19−8
@@ -86,6 +86,7 @@ class UnityTestCase(AutopilotTestCase):
86
86
87 self._proxy = None
87 self._proxy = None
88 self._lightdm_mock_type = None
88 self._lightdm_mock_type = None
89+ self._qml_mock_enabled = True
89 self.touch = Touch.create()
90 self.touch = Touch.create()
90 self._setup_display_details()
91 self._setup_display_details()
91
92
@@ -102,9 +103,8 @@ class UnityTestCase(AutopilotTestCase):
102 width = getattr(self, 'app_width', 0)
103 width = getattr(self, 'app_width', 0)
103 height = getattr(self, 'app_height', 0)
104 height = getattr(self, 'app_height', 0)
104 scale_divisor = 1
105 scale_divisor = 1
105− if width == 0 and width == 0:
106− self.unity_geometry_args = ['-fullscreen']
106+ self.unity_geometry_args = []
107− else:
107+ if width > 0 and height > 0:
108 if self._geo_larger_than_display(width, height):
108 if self._geo_larger_than_display(width, height):
109 scale_divisor = self._get_scaled_down_geo(width, height)
109 scale_divisor = self._get_scaled_down_geo(width, height)
110 width = width / scale_divisor
110 width = width / scale_divisor
@@ -160,7 +160,9 @@ class UnityTestCase(AutopilotTestCase):
160
160
161 if self._lightdm_mock_type is None:
161 if self._lightdm_mock_type is None:
162 self.patch_lightdm_mock()
162 self.patch_lightdm_mock()
163+
164+ if self._qml_mock_enabled:
163− self._setup_extra_mock_environment_patch()
165+ self._setup_extra_mock_environment_patch()
164
166
165 app_proxy = self.launch_test_application(
167 app_proxy = self.launch_test_application(
166 binary_path,
168 binary_path,
@@ -181,10 +183,14 @@ class UnityTestCase(AutopilotTestCase):
181 def patch_lightdm_mock(self, mock_type='single'):
183 def patch_lightdm_mock(self, mock_type='single'):
182 self._lightdm_mock_type = mock_type
184 self._lightdm_mock_type = mock_type
183 logger.info("Setting up LightDM mock type '%s'", mock_type)
185 logger.info("Setting up LightDM mock type '%s'", mock_type)
184− new_ld_library_path = "%s:%s" % (
186+ new_ld_library_path = [
185 get_default_extra_mock_libraries(),
187 get_default_extra_mock_libraries(),
186 self._get_lightdm_mock_path(mock_type)
188 self._get_lightdm_mock_path(mock_type)
187− )
189+ ]
190+ if os.getenv('LD_LIBRARY_PATH') is not None:
191+ new_ld_library_path.append(os.getenv('LD_LIBRARY_PATH'))
192+
193+ new_ld_library_path = ':'.join(new_ld_library_path)
188 logger.info("New library path: %s", new_ld_library_path)
194 logger.info("New library path: %s", new_ld_library_path)
189
195
190 self.patch_environment('LD_LIBRARY_PATH', new_ld_library_path)
196 self.patch_environment('LD_LIBRARY_PATH', new_ld_library_path)
@@ -203,8 +209,13 @@ class UnityTestCase(AutopilotTestCase):
203 return lightdm_mock_path
209 return lightdm_mock_path
204
210
205 def _setup_extra_mock_environment_patch(self):
211 def _setup_extra_mock_environment_patch(self):
206− mocks_library_path = get_mocks_library_path()
212+ qml_import_path = [get_mocks_library_path()]
213+ if os.getenv('QML2_IMPORT_PATH') is not None:
214+ qml_import_path.append(os.getenv('QML2_IMPORT_PATH'))
215+
216+ qml_import_path = ':'.join(qml_import_path)
217+ logger.info("New QML2 import path: %s", qml_import_path)
207− self.patch_environment('QML2_IMPORT_PATH', mocks_library_path)
218+ self.patch_environment('QML2_IMPORT_PATH', qml_import_path)
208
219
209 def _set_proxy(self, proxy):
220 def _set_proxy(self, proxy):
210 """Keep a copy of the proxy object, so we can use it to get common
221 """Keep a copy of the proxy object, so we can use it to get common
tests/autopilot/unity8/shell/tests/test_hud.py+43−9
@@ -19,29 +19,30 @@
19
19
20from __future__ import absolute_import
20from __future__ import absolute_import
21
21
22−from unity8.shell import with_lightdm_mock
22+from unity8.shell import with_lightdm_mock, DragMixin
23from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
23from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
24
24
25from testtools.matchers import Equals
25from testtools.matchers import Equals
26from autopilot.matchers import Eventually
26from autopilot.matchers import Eventually
27
27
28−
29−class TestHud(UnityTestCase):
28+class TestHud(UnityTestCase, DragMixin):
30
29
31 """Tests the Shell HUD."""
30 """Tests the Shell HUD."""
32
31
33 scenarios = _get_device_emulation_scenarios()
32 scenarios = _get_device_emulation_scenarios()
34
33
35 def test_show_hud_button_appears(self):
34 def test_show_hud_button_appears(self):
36− """Swiping up while an app is active must show the 'show hud' button.
35+ """Swiping up while an app is active must show the 'show hud' button, following some behaviours.
37 The button must disappear not opening the HUD when releasing the
36 The button must disappear not opening the HUD when releasing the
38− mouse again somewhere on the screen except on the button itself.
37+ mouse again somewhere on the screen except on the button itself following a timeout.
38+ The button must disappear when touching somewhere on the screen except the button itself.
39
39
40 """
40 """
41 self.launch_unity()
41 self.launch_unity()
42 self.main_window.get_greeter().swipe()
42 self.main_window.get_greeter().swipe()
43 window = self.main_window.get_qml_view()
43 window = self.main_window.get_qml_view()
44 hud_show_button = self.main_window.get_hud_show_button()
44 hud_show_button = self.main_window.get_hud_show_button()
45+ edge_drag_area = self.main_window.get_hud_edge_drag_area()
45 hud = self.main_window.get_hud()
46 hud = self.main_window.get_hud()
46
47
47 self._launch_test_app_from_app_screen()
48 self._launch_test_app_from_app_screen()
@@ -50,16 +51,33 @@ class TestHud(UnityTestCase):
50 window,
51 window,
51 hud_show_button
52 hud_show_button
52 )
53 )
54+ initialBottomMargin = int(hud_show_button.bottomMargin)
55+
53 self.touch.press(swipe_coords.start_x, swipe_coords.start_y)
56 self.touch.press(swipe_coords.start_x, swipe_coords.start_y)
54 self.addCleanup(self._maybe_release_finger)
57 self.addCleanup(self._maybe_release_finger)
55− self.touch._finger_move(swipe_coords.end_x, swipe_coords.end_y + hud_show_button.height);
58+ self._drag(swipe_coords.start_x, swipe_coords.start_y, swipe_coords.start_x, swipe_coords.start_y - int(edge_drag_area.distanceThreshold) - 5)
59+ self.assertThat(hud_show_button.opacity, Eventually(Equals(0.5)))
60+ self.assertThat(hud_show_button.bottomMargin, Eventually(Equals(initialBottomMargin)))
61+ self._drag(swipe_coords.start_x, swipe_coords.start_y - int(edge_drag_area.distanceThreshold) - 5, swipe_coords.end_x, swipe_coords.start_y - int(edge_drag_area.distanceThreshold) - int(edge_drag_area.commitDistance) - 5)
56 self.assertThat(hud_show_button.opacity, Eventually(Equals(1.0)))
62 self.assertThat(hud_show_button.opacity, Eventually(Equals(1.0)))
63+ self.assertThat(hud_show_button.bottomMargin, Eventually(Equals(0.0)))
57 self.touch.release();
64 self.touch.release();
65+ self.assertThat(hud.shown, Equals(False))
58 self.assertThat(hud_show_button.opacity, Eventually(Equals(0.0)))
66 self.assertThat(hud_show_button.opacity, Eventually(Equals(0.0)))
67+
68+ self.touch.press(swipe_coords.start_x, swipe_coords.start_y)
69+ self._drag(swipe_coords.start_x, swipe_coords.start_y, swipe_coords.start_x, swipe_coords.end_y - int(hud_show_button.height))
70+ self.assertThat(hud.shown, Equals(False))
71+ self.assertThat(hud_show_button.opacity, Eventually(Equals(1.0)))
72+ self.touch.release()
73+ self.assertThat(hud_show_button.opacity, Eventually(Equals(1.0)))
74+ self.touch.tap(swipe_coords.end_x, swipe_coords.end_y - int(hud_show_button.height))
59 self.assertThat(hud.shown, Equals(False))
75 self.assertThat(hud.shown, Equals(False))
76+ self.assertThat(hud_show_button.opacity, Eventually(Equals(0.0)))
60
77
61 def test_show_hud_appears(self):
78 def test_show_hud_appears(self):
62 """Releasing the touch on the 'show hud' button must display the hud.
79 """Releasing the touch on the 'show hud' button must display the hud.
80+ Test that the hud button stays on screen and tapping it opens the hud.
63
81
64 """
82 """
65 self.launch_unity()
83 self.launch_unity()
@@ -74,14 +92,28 @@ class TestHud(UnityTestCase):
74 window,
92 window,
75 hud_show_button
93 hud_show_button
76 )
94 )
95+
77 self.touch.press(swipe_coords.start_x, swipe_coords.start_y)
96 self.touch.press(swipe_coords.start_x, swipe_coords.start_y)
78 self.addCleanup(self._maybe_release_finger)
97 self.addCleanup(self._maybe_release_finger)
79− self.touch._finger_move(swipe_coords.end_x, swipe_coords.end_y)
98+ self._drag(swipe_coords.start_x, swipe_coords.start_y, swipe_coords.start_x, swipe_coords.end_y)
80−
99+ self.assertThat(hud.shown, Eventually(Equals(False)))
100+ self.assertThat(hud_show_button.opacity, Eventually(Equals(1.0)))
101+ self.touch.release()
102+ self.assertThat(hud.shown, Eventually(Equals(True)))
103+ self.assertThat(hud_show_button.opacity, Eventually(Equals(0.0)))
104+ x, y = hud.get_close_button_coords()
105+ self.touch.tap(x, y)
81 self.assertThat(hud.shown, Eventually(Equals(False)))
106 self.assertThat(hud.shown, Eventually(Equals(False)))
107+
108+ self.touch.press(swipe_coords.start_x, swipe_coords.start_y)
109+ self._drag(swipe_coords.start_x, swipe_coords.start_y, swipe_coords.start_x, swipe_coords.end_y - int(hud_show_button.height))
110+ self.assertThat(hud.shown, Equals(False))
82 self.assertThat(hud_show_button.opacity, Eventually(Equals(1.0)))
111 self.assertThat(hud_show_button.opacity, Eventually(Equals(1.0)))
83 self.touch.release()
112 self.touch.release()
113+ self.assertThat(hud_show_button.opacity, Eventually(Equals(1.0)))
114+ self.touch.tap(swipe_coords.end_x, swipe_coords.end_y)
84 self.assertThat(hud.shown, Eventually(Equals(True)))
115 self.assertThat(hud.shown, Eventually(Equals(True)))
116+ self.assertThat(hud_show_button.opacity, Eventually(Equals(0.0)))
85
117
86 def test_hide_hud_click(self):
118 def test_hide_hud_click(self):
87 """Tapping the close button of the Hud must dismiss it."""
119 """Tapping the close button of the Hud must dismiss it."""
@@ -90,6 +122,7 @@ class TestHud(UnityTestCase):
90 hud = self.main_window.get_hud()
122 hud = self.main_window.get_hud()
91
123
92 self._launch_test_app_from_app_screen()
124 self._launch_test_app_from_app_screen()
125+
93 hud.show()
126 hud.show()
94
127
95 x, y = hud.get_close_button_coords()
128 x, y = hud.get_close_button_coords()
@@ -103,10 +136,11 @@ class TestHud(UnityTestCase):
103 """
136 """
104 self.launch_unity()
137 self.launch_unity()
105 self.main_window.get_greeter().swipe()
138 self.main_window.get_greeter().swipe()
106− hud = self.main_window.get_hud()
107 window = self.main_window.get_qml_view()
139 window = self.main_window.get_qml_view()
140+ hud = self.main_window.get_hud()
108
141
109 self._launch_test_app_from_app_screen()
142 self._launch_test_app_from_app_screen()
143+
110 hud.show()
144 hud.show()
111
145
112 start_x, start_y = hud.get_close_button_coords()
146 start_x, start_y = hud.get_close_button_coords()
tests/mocks/AccountsService/AccountsService.cpp+16−4
@@ -20,11 +20,12 @@
20
20
21AccountsService::AccountsService(QObject* parent)
21AccountsService::AccountsService(QObject* parent)
22 : QObject(parent),
22 : QObject(parent),
23− m_backgroundFile(TOP_SRCDIR "/graphics/phone_background.jpg")
23+ m_backgroundFile(TOP_SRCDIR "/graphics/phone_background.jpg"),
24+ m_statsWelcomeScreen(true)
24{
25{
25}
26}
26
27
27−QString AccountsService::getUser()
28+QString AccountsService::user() const
28{
29{
29 return "testuser";
30 return "testuser";
30}
31}
@@ -34,7 +35,7 @@ void AccountsService::setUser(const QString &user)
34 Q_UNUSED(user)
35 Q_UNUSED(user)
35}
36}
36
37
37−bool AccountsService::getDemoEdges()
38+bool AccountsService::demoEdges() const
38{
39{
39 return false;
40 return false;
40}
41}
@@ -44,7 +45,7 @@ void AccountsService::setDemoEdges(bool demoEdges)
44 Q_UNUSED(demoEdges)
45 Q_UNUSED(demoEdges)
45}
46}
46
47
47−QString AccountsService::getBackgroundFile()
48+QString AccountsService::backgroundFile() const
48{
49{
49 return m_backgroundFile;
50 return m_backgroundFile;
50}
51}
@@ -54,3 +55,14 @@ void AccountsService::setBackgroundFile(const QString &backgroundFile)
54 m_backgroundFile = backgroundFile;
55 m_backgroundFile = backgroundFile;
55 backgroundFileChanged();
56 backgroundFileChanged();
56}
57}
58+
59+bool AccountsService::statsWelcomeScreen() const
60+{
61+ return m_statsWelcomeScreen;
62+}
63+
64+void AccountsService::setStatsWelcomeScreen(bool statsWelcomeScreen)
65+{
66+ m_statsWelcomeScreen = statsWelcomeScreen;
67+ statsWelcomeScreenChanged();
68+}
tests/mocks/AccountsService/AccountsService.h+14−6
@@ -28,35 +28,43 @@ class AccountsService: public QObject
28{
28{
29 Q_OBJECT
29 Q_OBJECT
30 Q_PROPERTY (QString user
30 Q_PROPERTY (QString user
31− READ getUser
31+ READ user
32 WRITE setUser
32 WRITE setUser
33 NOTIFY userChanged)
33 NOTIFY userChanged)
34 Q_PROPERTY (bool demoEdges
34 Q_PROPERTY (bool demoEdges
35− READ getDemoEdges
35+ READ demoEdges
36 WRITE setDemoEdges
36 WRITE setDemoEdges
37 NOTIFY demoEdgesChanged)
37 NOTIFY demoEdgesChanged)
38 Q_PROPERTY (QString backgroundFile
38 Q_PROPERTY (QString backgroundFile
39− READ getBackgroundFile
39+ READ backgroundFile
40 WRITE setBackgroundFile // only available in mock
40 WRITE setBackgroundFile // only available in mock
41 NOTIFY backgroundFileChanged)
41 NOTIFY backgroundFileChanged)
42+ Q_PROPERTY (bool statsWelcomeScreen
43+ READ statsWelcomeScreen
44+ WRITE setStatsWelcomeScreen // only available in mock
45+ NOTIFY statsWelcomeScreenChanged)
42
46
43public:
47public:
44 explicit AccountsService(QObject *parent = 0);
48 explicit AccountsService(QObject *parent = 0);
45
49
46− QString getUser();
50+ QString user() const;
47 void setUser(const QString &user);
51 void setUser(const QString &user);
48− bool getDemoEdges();
52+ bool demoEdges() const;
49 void setDemoEdges(bool demoEdges);
53 void setDemoEdges(bool demoEdges);
50− QString getBackgroundFile();
54+ QString backgroundFile() const;
51 void setBackgroundFile(const QString &backgroundFile);
55 void setBackgroundFile(const QString &backgroundFile);
56+ bool statsWelcomeScreen() const;
57+ void setStatsWelcomeScreen(bool statsWelcomeScreen);
52
58
53Q_SIGNALS:
59Q_SIGNALS:
54 void userChanged();
60 void userChanged();
55 void demoEdgesChanged();
61 void demoEdgesChanged();
56 void backgroundFileChanged();
62 void backgroundFileChanged();
63+ void statsWelcomeScreenChanged();
57
64
58private:
65private:
59 QString m_backgroundFile;
66 QString m_backgroundFile;
67+ bool m_statsWelcomeScreen;
60};
68};
61
69
62#endif
70#endif
plugins/Unity/Indicators/Network/plugin.cpp → tests/mocks/QMenuModel/UnityMenuModel.qmlrenamed+9−14
@@ -1,5 +1,8 @@
1/*
1/*
2− * Copyright (C) 2012 Canonical, Ltd.
2+ * Copyright (C) 2013 Canonical, Ltd.
3+ *
4+ * Authors:
5+ * Mirco Müller <mirco.mueller@canonical.com>
3 *
6 *
4 * This program is free software; you can redistribute it and/or modify
7 * 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
8 * it under the terms of the GNU General Public License as published by
@@ -12,20 +15,12 @@
12 *
15 *
13 * You should have received a copy of the GNU General Public License
16 * 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/>.
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Author: Nick Dedekind <nick.dedekind@canonical.com>
17 */
18 */
18
19
19−// Qt
20+import QtQuick 2.0
20−#include <QtQml/qqml.h>
21−
22−// self
23−#include "plugin.h"
24−
25−// local
26−#include "networkagent.h"
27
21
28−void IndicatorsNetworkPlugin::registerTypes(const char *uri)
22+QtObject {
29−{
23+ property variant busName
30− qmlRegisterType<NetworkAgent>(uri, 0, 1, "NetworkAgent");
24+ property variant actions
25+ property variant menuObjectPath
31}
26}
tests/mocks/QMenuModel/qmldir+1
@@ -1,2 +1,3 @@
1module QMenuModel
1module QMenuModel
2QDBusActionGroup 0.1 QDBusActionGroup.qml
2QDBusActionGroup 0.1 QDBusActionGroup.qml
3+UnityMenuModel 0.1 UnityMenuModel.qml
tests/mocks/Ubuntu/DownloadDaemonListener/MockDownloadTracker.cpp+5
@@ -63,5 +63,10 @@ void MockDownloadTracker::startService()
63 if(!m_service.isEmpty() && !m_dbusPath.isEmpty()) {
63 if(!m_service.isEmpty() && !m_dbusPath.isEmpty()) {
64 m_active = true;
64 m_active = true;
65 Q_EMIT serviceReadyChanged(m_active);
65 Q_EMIT serviceReadyChanged(m_active);
66+ if(m_dbusPath == "finish") {
67+ Q_EMIT finished("downloadComplete");
68+ }else if(m_dbusPath == "error") {
69+ Q_EMIT error("DOWNLOAD ERROR");
70+ }
66 }
71 }
67}
72}
tests/mocks/Unity/Indicators/IndicatorsModel.qml+5−15
@@ -28,45 +28,35 @@ ListModel {
28 // which throws off the filter for non-visible indicators.
28 // which throws off the filter for non-visible indicators.
29 Component.onCompleted: {
29 Component.onCompleted: {
30 append({ "identifier": "indicator-fake1",
30 append({ "identifier": "indicator-fake1",
31− "priority": 0,
31+ "position": 0,
32− "title": "Menu1",
33− "description": "",
34 "widgetSource": "qrc:/tests/indciators/qml/fake_menu_widget1.qml",
32 "widgetSource": "qrc:/tests/indciators/qml/fake_menu_widget1.qml",
35 "pageSource": "qrc:/tests/indciators/qml/fake_menu_page1.qml",
33 "pageSource": "qrc:/tests/indciators/qml/fake_menu_page1.qml",
36 "indicatorProperties": ""
34 "indicatorProperties": ""
37 });
35 });
38
36
39 append({ "identifier": "indicator-fake2",
37 append({ "identifier": "indicator-fake2",
40− "priority": 1,
38+ "position": 1,
41− "title": "Menu2",
42− "description": "",
43 "widgetSource": "qrc:/tests/indciators/qml/fake_menu_widget2.qml",
39 "widgetSource": "qrc:/tests/indciators/qml/fake_menu_widget2.qml",
44 "pageSource": "qrc:/tests/indciators/qml/fake_menu_page2.qml",
40 "pageSource": "qrc:/tests/indciators/qml/fake_menu_page2.qml",
45 "indicatorProperties": ""
41 "indicatorProperties": ""
46 });
42 });
47
43
48 append({ "identifier": "indicator-fake3",
44 append({ "identifier": "indicator-fake3",
49− "priority": 2,
45+ "position": 2,
50− "title": "Menu3",
51− "description": "",
52 "widgetSource": "qrc:/tests/indciators/qml/fake_menu_widget3.qml",
46 "widgetSource": "qrc:/tests/indciators/qml/fake_menu_widget3.qml",
53 "pageSource": "qrc:/tests/indciators/qml/fake_menu_page3.qml",
47 "pageSource": "qrc:/tests/indciators/qml/fake_menu_page3.qml",
54 "indicatorProperties": ""
48 "indicatorProperties": ""
55 });
49 });
56
50
57 append({ "identifier": "indicator-fake4",
51 append({ "identifier": "indicator-fake4",
58− "priority": 3,
52+ "position": 3,
59− "title": "Menu4",
60− "description": "",
61 "widgetSource": "qrc:/tests/indciators/qml/fake_menu_widget4.qml",
53 "widgetSource": "qrc:/tests/indciators/qml/fake_menu_widget4.qml",
62 "pageSource": "qrc:/tests/indciators/qml/fake_menu_page4.qml",
54 "pageSource": "qrc:/tests/indciators/qml/fake_menu_page4.qml",
63 "indicatorProperties": ""
55 "indicatorProperties": ""
64 });
56 });
65
57
66 append({ "identifier": "indicator-fake5",
58 append({ "identifier": "indicator-fake5",
67− "priority": 4,
59+ "position": 4,
68− "title": "Menu5",
69− "description": "",
70 "widgetSource": "qrc:/tests/indciators/qml/fake_menu_widget5.qml",
60 "widgetSource": "qrc:/tests/indciators/qml/fake_menu_widget5.qml",
71 "pageSource": "qrc:/tests/indciators/qml/fake_menu_page5.qml",
61 "pageSource": "qrc:/tests/indciators/qml/fake_menu_page5.qml",
72 "indicatorProperties": ""
62 "indicatorProperties": ""
tests/mocks/Unity/fake_applications_scope.cpp+7
@@ -64,5 +64,12 @@ DeeModel* ApplicationsScope::createCategoriesModel()
64 "grid",
64 "grid",
65 hints);
65 hints);
66
66
67+ dee_model_append(category_model,
68+ "outdated",
69+ "Outdaded",
70+ "gtk-apply",
71+ "grid",
72+ hints);
73+
67 return category_model;
74 return category_model;
68}
75}
tests/mocks/Unity/fake_categories.cpp+6
@@ -42,6 +42,7 @@ Categories::Categories(QObject* parent)
42 m_roles[Categories::RoleIcon] = "icon";
42 m_roles[Categories::RoleIcon] = "icon";
43 m_roles[Categories::RoleRenderer] = "renderer";
43 m_roles[Categories::RoleRenderer] = "renderer";
44 m_roles[Categories::RoleContentType] = "contentType";
44 m_roles[Categories::RoleContentType] = "contentType";
45+ m_roles[Categories::RoleRendererHint] = "rendererHint";
45 m_roles[Categories::RoleHints] = "hints";
46 m_roles[Categories::RoleHints] = "hints";
46 m_roles[Categories::RoleResults] = "results";
47 m_roles[Categories::RoleResults] = "results";
47 m_roles[Categories::RoleCount] = "count";
48 m_roles[Categories::RoleCount] = "count";
@@ -229,6 +230,11 @@ Categories::data(const QModelIndex& index, int role) const
229 auto hints = DeeListModel::data(index, CategoryColumn::HINTS).toHash();
230 auto hints = DeeListModel::data(index, CategoryColumn::HINTS).toHash();
230 return hints.contains("content-type") ? hints["content-type"] : QVariant(QString("default"));
231 return hints.contains("content-type") ? hints["content-type"] : QVariant(QString("default"));
231 }
232 }
233+ case RoleRendererHint:
234+ {
235+ auto hints = DeeListModel::data(index, CategoryColumn::HINTS).toHash();
236+ return hints.contains("renderer-hint") ? hints["renderer-hint"] : QVariant(QString());
237+ }
232 case RoleHints:
238 case RoleHints:
233 return DeeListModel::data(index, CategoryColumn::HINTS);
239 return DeeListModel::data(index, CategoryColumn::HINTS);
234 case RoleResults:
240 case RoleResults:
tests/mocks/Unity/fake_categories.h+1
@@ -39,6 +39,7 @@ public:
39 RoleIcon,
39 RoleIcon,
40 RoleRenderer,
40 RoleRenderer,
41 RoleContentType,
41 RoleContentType,
42+ RoleRendererHint,
42 RoleHints,
43 RoleHints,
43 RoleResults,
44 RoleResults,
44 RoleCount
45 RoleCount
tests/mocks/Unity/fake_preview.cpp+2−5
@@ -56,11 +56,8 @@ QString Preview::image() const
56 return "";
56 return "";
57}
57}
58
58
59−QString Preview::imageSourceUri() const
60−{
61− return "";
62−}
63−
64void Preview::execute(const QString& actionId, const QHash<QString, QVariant>& hints)
59void Preview::execute(const QString& actionId, const QHash<QString, QVariant>& hints)
65{
60{
61+ Q_UNUSED(actionId);
62+ Q_UNUSED(hints);
66}
63}
tests/mocks/Unity/fake_preview.h−2
@@ -36,7 +36,6 @@ class Q_DECL_EXPORT Preview : public QObject
36 Q_PROPERTY(QVariant infoHints READ infoHints NOTIFY previewChanged)
36 Q_PROPERTY(QVariant infoHints READ infoHints NOTIFY previewChanged)
37 Q_PROPERTY(QVariantMap infoMap READ infoHintsHash NOTIFY previewChanged)
37 Q_PROPERTY(QVariantMap infoMap READ infoHintsHash NOTIFY previewChanged)
38 Q_PROPERTY(QString image READ image NOTIFY previewChanged)
38 Q_PROPERTY(QString image READ image NOTIFY previewChanged)
39− Q_PROPERTY(QString imageSourceUri READ imageSourceUri NOTIFY previewChanged)
40
39
41public:
40public:
42 explicit Preview(QObject *parent = 0);
41 explicit Preview(QObject *parent = 0);
@@ -49,7 +48,6 @@ public:
49 QVariant infoHints();
48 QVariant infoHints();
50 QVariantMap infoHintsHash() const;
49 QVariantMap infoHintsHash() const;
51 QString image() const;
50 QString image() const;
52− QString imageSourceUri() const;
53
51
54 Q_INVOKABLE void execute(const QString& actionId, const QHash<QString, QVariant>& hints);
52 Q_INVOKABLE void execute(const QString& actionId, const QHash<QString, QVariant>& hints);
55
53
tests/mocks/Unity/fake_scope.cpp+13
@@ -30,6 +30,7 @@ static DeeModel* create_results_model(unsigned category_count, unsigned result_c
30Scope::Scope(QObject* parent)
30Scope::Scope(QObject* parent)
31 : QObject(parent)
31 : QObject(parent)
32 , m_visible(false)
32 , m_visible(false)
33+ , m_searching(false)
33 , m_categories(new Categories(this))
34 , m_categories(new Categories(this))
34 , m_results(new DeeListModel(this))
35 , m_results(new DeeListModel(this))
35{
36{
@@ -44,6 +45,7 @@ Scope::Scope(QString const& id, QString const& name, bool visible, QObject* pare
44 , m_id(id)
45 , m_id(id)
45 , m_name(name)
46 , m_name(name)
46 , m_visible(visible)
47 , m_visible(visible)
48+ , m_searching(false)
47 , m_categories(new Categories(this))
49 , m_categories(new Categories(this))
48 , m_results(new DeeListModel(this))
50 , m_results(new DeeListModel(this))
49{
51{
@@ -85,6 +87,10 @@ bool Scope::connected() const {
85 return true;
87 return true;
86}
88}
87
89
90+bool Scope::searchInProgress() const {
91+ return m_searching;
92+}
93+
88Categories* Scope::categories() const {
94Categories* Scope::categories() const {
89 return m_categories;
95 return m_categories;
90}
96}
@@ -122,6 +128,13 @@ void Scope::setFormFactor(const QString &str) {
122 }
128 }
123}
129}
124
130
131+void Scope::setSearchInProgress(const bool inProg) {
132+ if (inProg != m_searching) {
133+ m_searching = inProg;
134+ Q_EMIT searchInProgressChanged();
135+ }
136+}
137+
125void Scope::setNoResultsHint(const QString& str) {
138void Scope::setNoResultsHint(const QString& str) {
126 if (str != m_noResultsHint) {
139 if (str != m_noResultsHint) {
127 m_noResultsHint = str;
140 m_noResultsHint = str;
tests/mocks/Unity/fake_scope.h+7−1
@@ -37,6 +37,7 @@ class Scope : public QObject
37 Q_PROPERTY(bool connected READ connected NOTIFY connectedChanged)
37 Q_PROPERTY(bool connected READ connected NOTIFY connectedChanged)
38 Q_PROPERTY(Categories* categories READ categories NOTIFY categoriesChanged)
38 Q_PROPERTY(Categories* categories READ categories NOTIFY categoriesChanged)
39
39
40+ Q_PROPERTY(bool searchInProgress READ searchInProgress WRITE setSearchInProgress NOTIFY searchInProgressChanged)
40 Q_PROPERTY(QString searchQuery READ searchQuery WRITE setSearchQuery NOTIFY searchQueryChanged)
41 Q_PROPERTY(QString searchQuery READ searchQuery WRITE setSearchQuery NOTIFY searchQueryChanged)
41 Q_PROPERTY(QString noResultsHint READ noResultsHint WRITE setNoResultsHint NOTIFY noResultsHintChanged)
42 Q_PROPERTY(QString noResultsHint READ noResultsHint WRITE setNoResultsHint NOTIFY noResultsHintChanged)
42 Q_PROPERTY(QString formFactor READ formFactor WRITE setFormFactor NOTIFY formFactorChanged)
43 Q_PROPERTY(QString formFactor READ formFactor WRITE setFormFactor NOTIFY formFactorChanged)
@@ -54,6 +55,7 @@ public:
54 bool visible() const;
55 bool visible() const;
55 QString shortcut() const;
56 QString shortcut() const;
56 bool connected() const;
57 bool connected() const;
58+ bool searchInProgress() const;
57 Categories* categories() const;
59 Categories* categories() const;
58 QString searchQuery() const;
60 QString searchQuery() const;
59 QString noResultsHint() const;
61 QString noResultsHint() const;
@@ -64,6 +66,7 @@ public:
64 void setSearchQuery(const QString& search_query);
66 void setSearchQuery(const QString& search_query);
65 void setNoResultsHint(const QString& hint);
67 void setNoResultsHint(const QString& hint);
66 void setFormFactor(const QString& form_factor);
68 void setFormFactor(const QString& form_factor);
69+ void setSearchInProgress(const bool inProg);
67
70
68 Q_INVOKABLE void activate(const QVariant &uri, const QVariant &icon_hint, const QVariant &category,
71 Q_INVOKABLE void activate(const QVariant &uri, const QVariant &icon_hint, const QVariant &category,
69 const QVariant &result_type, const QVariant &mimetype, const QVariant &title,
72 const QVariant &result_type, const QVariant &mimetype, const QVariant &title,
@@ -78,11 +81,11 @@ Q_SIGNALS:
78 void iconHintChanged(const QString&);
81 void iconHintChanged(const QString&);
79 void descriptionChanged(const QString&);
82 void descriptionChanged(const QString&);
80 void searchHintChanged(const QString&);
83 void searchHintChanged(const QString&);
84+ void searchInProgressChanged();
81 void visibleChanged(bool);
85 void visibleChanged(bool);
82 void shortcutChanged(const QString&);
86 void shortcutChanged(const QString&);
83 void connectedChanged(bool);
87 void connectedChanged(bool);
84 void categoriesChanged();
88 void categoriesChanged();
85− void searchFinished(const QString&);
86 void searchQueryChanged();
89 void searchQueryChanged();
87 void noResultsHintChanged();
90 void noResultsHintChanged();
88 void formFactorChanged();
91 void formFactorChanged();
@@ -90,6 +93,8 @@ Q_SIGNALS:
90 // signals triggered by activate(..) or preview(..) requests.
93 // signals triggered by activate(..) or preview(..) requests.
91 void previewReady(Preview *preview);
94 void previewReady(Preview *preview);
92 void activateApplication(const QString &desktop);
95 void activateApplication(const QString &desktop);
96+ void showDash();
97+ void hideDash();
93
98
94protected:
99protected:
95
100
@@ -101,6 +106,7 @@ protected:
101 QString m_noResultsHint;
106 QString m_noResultsHint;
102 QString m_formFactor;
107 QString m_formFactor;
103 bool m_visible;
108 bool m_visible;
109+ bool m_searching;
104
110
105 Categories* m_categories;
111 Categories* m_categories;
106 DeeListModel* m_results;
112 DeeListModel* m_results;
tests/mocks/libusermetrics/UserMetrics.cpp+6−2
@@ -228,7 +228,7 @@ UserMetricsPrivate::~UserMetricsPrivate()
228
228
229void UserMetricsPrivate::setUsername(const QString &username)
229void UserMetricsPrivate::setUsername(const QString &username)
230{
230{
231− if (m_username == username) {
231+ if (m_username == username && m_newData) {
232 return;
232 return;
233 }
233 }
234
234
@@ -407,7 +407,11 @@ UserMetrics::~UserMetrics()
407
407
408QString UserMetrics::label() const
408QString UserMetrics::label() const
409{
409{
410+ if (d_ptr->m_label.isEmpty()) {
411+ return "No data";
412+ } else {
410− return d_ptr->m_label;
413+ return d_ptr->m_label;
414+ }
411}
415}
412
416
413QString UserMetrics::username() const
417QString UserMetrics::username() const
tests/plugins/AccountsService/client.cpp+2−2
@@ -50,9 +50,9 @@ private Q_SLOTS:
50 AccountsService session;
50 AccountsService session;
51 session.setUser("testuser");
51 session.setUser("testuser");
52 session.setDemoEdges(true);
52 session.setDemoEdges(true);
53− QCOMPARE(session.getDemoEdges(), true);
53+ QCOMPARE(session.demoEdges(), true);
54 session.setDemoEdges(false);
54 session.setDemoEdges(false);
55− QCOMPARE(session.getDemoEdges(), false);
55+ QCOMPARE(session.demoEdges(), false);
56 }
56 }
57};
57};
58
58
tests/plugins/ListViewWithPageHeader/CMakeLists.txt+6
@@ -32,5 +32,11 @@ qt5_use_modules(listviewwithpageheadertestsectionExec Test Core Qml)
32target_link_libraries(listviewwithpageheadertestsectionExec ${Qt5Gui_LIBRARIES} ${Qt5Quick_LIBRARIES})
32target_link_libraries(listviewwithpageheadertestsectionExec ${Qt5Gui_LIBRARIES} ${Qt5Quick_LIBRARIES})
33add_custom_target(testlistviewwithpageheadersection ${CMAKE_CURRENT_BINARY_DIR}/listviewwithpageheadertestsectionExec -o ${CMAKE_BINARY_DIR}/testlistviewwithpageheadersection.xml,xunitxml -o -,txt)
33add_custom_target(testlistviewwithpageheadersection ${CMAKE_CURRENT_BINARY_DIR}/listviewwithpageheadertestsectionExec -o ${CMAKE_BINARY_DIR}/testlistviewwithpageheadersection.xml,xunitxml -o -,txt)
34
34
35+add_executable(listviewwithpageheadertestsectionexternalmodelExec listviewwithpageheadertestsectionexternalmodel.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/ListViewWithPageHeader/listviewwithpageheader.cpp)
36+qt5_use_modules(listviewwithpageheadertestsectionexternalmodelExec Test Core Qml)
37+target_link_libraries(listviewwithpageheadertestsectionexternalmodelExec ${Qt5Gui_LIBRARIES} ${Qt5Quick_LIBRARIES})
38+add_custom_target(testlistviewwithpageheadersectionexternalmodel ${CMAKE_CURRENT_BINARY_DIR}/listviewwithpageheadertestsectionexternalmodelExec -o ${CMAKE_BINARY_DIR}/testlistviewwithpageheadersectionexternalmodel.xml,xunitxml -o -,txt)
39+
35add_dependencies(qmluitests testlistviewwithpageheader)
40add_dependencies(qmluitests testlistviewwithpageheader)
36add_dependencies(qmluitests testlistviewwithpageheadersection)
41add_dependencies(qmluitests testlistviewwithpageheadersection)
42+add_dependencies(qmluitests testlistviewwithpageheadersectionexternalmodel)
tests/plugins/ListViewWithPageHeader/listviewwithpageheadertest.cpp+169
@@ -1655,6 +1655,175 @@ private Q_SLOTS:
1655 QCOMPARE(spy.count(), 0);
1655 QCOMPARE(spy.count(), 0);
1656 }
1656 }
1657
1657
1658+ void testOvershootOnSameSize()
1659+ {
1660+ QMetaObject::invokeMethod(model, "removeItems", Q_ARG(QVariant, 0), Q_ARG(QVariant, 6));
1661+ QTRY_COMPARE(lvwph->m_visibleItems.count(), 0);
1662+ QCOMPARE(lvwph->m_minYExtent, 0.);
1663+ QCOMPARE(lvwph->m_clipItem->y(), 0.);
1664+ QCOMPARE(lvwph->m_clipItem->clip(), false);
1665+ QCOMPARE(lvwph->m_headerItem->y(), 0.);
1666+ QCOMPARE(lvwph->m_headerItem->height(), 50.);
1667+ QCOMPARE(lvwph->contentY(), 0.);
1668+
1669+ QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 0), Q_ARG(QVariant, 100));
1670+ QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 0), Q_ARG(QVariant, 392));
1671+ QTRY_COMPARE(lvwph->m_visibleItems.count(), 2);
1672+ QCOMPARE(lvwph->m_firstVisibleIndex, 0);
1673+ verifyItem(0, 50., 392., false);
1674+ verifyItem(1, 442., 100., false);
1675+
1676+ QCOMPARE(lvwph->contentHeight(), lvwph->height());
1677+
1678+ QTest::mousePress(view, Qt::LeftButton, Qt::NoModifier, QPoint(0, 0));
1679+ QTest::qWait(100);
1680+ QTest::mouseMove(view, QPoint(0, 5));
1681+ QTest::qWait(100);
1682+ QTest::mouseMove(view, QPoint(0, 10));
1683+ QTest::qWait(100);
1684+ QTest::mouseMove(view, QPoint(0, 15));
1685+ QTest::qWait(100);
1686+ QTest::mouseMove(view, QPoint(0, 20));
1687+ QTest::qWait(100);
1688+ QTRY_COMPARE(lvwph->m_visibleItems.count(), 2);
1689+ QCOMPARE(lvwph->m_firstVisibleIndex, 0);
1690+ verifyItem(0, 55., 392., false);
1691+ verifyItem(1, 447., 100., false);
1692+ QCOMPARE(lvwph->m_minYExtent, 0.);
1693+ QCOMPARE(lvwph->m_clipItem->y(), -5.);
1694+
1695+ QTest::mouseRelease(view, Qt::LeftButton, Qt::NoModifier, QPoint(0, 15));
1696+ QTRY_COMPARE(lvwph->m_visibleItems.count(), 2);
1697+ QCOMPARE(lvwph->m_firstVisibleIndex, 0);
1698+ verifyItem(0, 50., 392., false);
1699+ verifyItem(1, 442., 100., false);
1700+ }
1701+
1702+ void testMaximizeVisibleAreaMoveDownAndShowHeader()
1703+ {
1704+ model->setProperty(0, "size", 800);
1705+ verifyItem(0, 50., 800., false);
1706+
1707+ lvwph->maximizeVisibleArea(0);
1708+ QTRY_COMPARE(lvwph->contentY(), 50.);
1709+
1710+ changeContentY(10);
1711+ QTRY_COMPARE(lvwph->contentY(), 60.);
1712+
1713+ lvwph->showHeader();
1714+ QTRY_VERIFY(!lvwph->m_contentYAnimation->isRunning());
1715+ QTRY_COMPARE(lvwph->m_visibleItems.count(), 2);
1716+ QCOMPARE(lvwph->m_minYExtent, 50.);
1717+ QCOMPARE(lvwph->m_clipItem->y(), 60.);
1718+ QCOMPARE(lvwph->m_clipItem->clip(), true);
1719+ QCOMPARE(lvwph->m_headerItem->y(), 10.);
1720+ QCOMPARE(lvwph->m_headerItem->height(), 50.);
1721+ QCOMPARE(lvwph->contentY(), 10.);
1722+ verifyItem(0, -60., 800., false);
1723+ }
1724+
1725+ void testMaximizeVisibleAreaMoveUpAndShowHeader()
1726+ {
1727+ model->setProperty(0, "size", 800);
1728+ verifyItem(0, 50., 800., false);
1729+
1730+ lvwph->maximizeVisibleArea(0);
1731+ QTRY_COMPARE(lvwph->contentY(), 50.);
1732+
1733+ changeContentY(-10);
1734+ QTRY_COMPARE(lvwph->contentY(), 40.);
1735+
1736+ lvwph->showHeader();
1737+ QTRY_VERIFY(!lvwph->m_contentYAnimation->isRunning());
1738+ QTRY_COMPARE(lvwph->m_visibleItems.count(), 2);
1739+ QCOMPARE(lvwph->m_minYExtent, 40.);
1740+ QCOMPARE(lvwph->m_clipItem->y(), 50.);
1741+ QCOMPARE(lvwph->m_clipItem->clip(), true);
1742+ QTRY_COMPARE(lvwph->m_headerItem->y(), 0.);
1743+ QCOMPARE(lvwph->m_headerItem->height(), 50.);
1744+ QCOMPARE(lvwph->contentY(), 0.);
1745+ verifyItem(0, -40., 800., false);
1746+ }
1747+
1748+ void testMaximizeVisibleAreaMoveDownAndUpAndShowHeader()
1749+ {
1750+ model->setProperty(0, "size", 800);
1751+ verifyItem(0, 50., 800., false);
1752+
1753+ lvwph->maximizeVisibleArea(0);
1754+ QTRY_COMPARE(lvwph->contentY(), 50.);
1755+
1756+ changeContentY(-10);
1757+ QTRY_COMPARE(lvwph->contentY(), 40.);
1758+ changeContentY(10);
1759+ QTRY_COMPARE(lvwph->contentY(), 50.);
1760+
1761+ lvwph->showHeader();
1762+ QTRY_VERIFY(!lvwph->m_contentYAnimation->isRunning());
1763+
1764+ QTRY_COMPARE(lvwph->m_visibleItems.count(), 2);
1765+ QCOMPARE(lvwph->m_minYExtent, 50.);
1766+ QCOMPARE(lvwph->m_clipItem->y(), 50.);
1767+ QCOMPARE(lvwph->m_clipItem->clip(), true);
1768+ QCOMPARE(lvwph->m_headerItem->y(), 0.);
1769+ QCOMPARE(lvwph->m_headerItem->height(), 50.);
1770+ QCOMPARE(lvwph->contentY(), 0.);
1771+ verifyItem(0, -50., 800., false);
1772+ }
1773+
1774+ void testMaximizeVisibleAreaMoveUpAndDownAndShowHeader()
1775+ {
1776+ model->setProperty(0, "size", 800);
1777+ verifyItem(0, 50., 800., false);
1778+
1779+ lvwph->maximizeVisibleArea(0);
1780+ QTRY_COMPARE(lvwph->contentY(), 50.);
1781+
1782+ changeContentY(10);
1783+ QTRY_COMPARE(lvwph->contentY(), 60.);
1784+ changeContentY(-10);
1785+ QTRY_COMPARE(lvwph->contentY(), 50.);
1786+
1787+ lvwph->showHeader();
1788+ QTRY_VERIFY(!lvwph->m_contentYAnimation->isRunning());
1789+ QTRY_COMPARE(lvwph->m_visibleItems.count(), 2);
1790+ QCOMPARE(lvwph->m_minYExtent, 40.);
1791+ QCOMPARE(lvwph->m_clipItem->y(), 60.);
1792+ QCOMPARE(lvwph->m_clipItem->clip(), true);
1793+ QCOMPARE(lvwph->m_headerItem->y(), 10.);
1794+ QCOMPARE(lvwph->m_headerItem->height(), 50.);
1795+ QCOMPARE(lvwph->contentY(), 10.);
1796+ verifyItem(0, -50., 800., false);
1797+ }
1798+
1799+ void testMaximizeVisibleAreaAndShowHeader()
1800+ {
1801+ model->setProperty(0, "size", 800);
1802+ verifyItem(0, 50., 800., false);
1803+
1804+ lvwph->maximizeVisibleArea(0);
1805+ QTRY_COMPARE(lvwph->contentY(), 50.);
1806+
1807+ lvwph->showHeader();
1808+ QTRY_VERIFY(!lvwph->m_contentYAnimation->isRunning());
1809+ QTRY_COMPARE(lvwph->m_visibleItems.count(), 2);
1810+ QCOMPARE(lvwph->m_minYExtent, 50.);
1811+ QCOMPARE(lvwph->m_clipItem->y(), 50.);
1812+ QCOMPARE(lvwph->m_clipItem->clip(), true);
1813+ QCOMPARE(lvwph->m_headerItem->y(), 0.);
1814+ QCOMPARE(lvwph->m_headerItem->height(), 50.);
1815+ QCOMPARE(lvwph->contentY(), 0.);
1816+ verifyItem(0, -50., 800., false);
1817+ }
1818+
1819+ void positionAtBeginningEmpty()
1820+ {
1821+ QMetaObject::invokeMethod(model, "removeItems", Q_ARG(QVariant, 0), Q_ARG(QVariant, 6));
1822+ QTRY_COMPARE(lvwph->m_visibleItems.count(), 0);
1823+
1824+ lvwph->positionAtBeginning();
1825+ }
1826+
1658private:
1827private:
1659 QQuickView *view;
1828 QQuickView *view;
1660 ListViewWithPageHeader *lvwph;
1829 ListViewWithPageHeader *lvwph;
tests/plugins/ListViewWithPageHeader/listviewwithpageheadertestsectionexternalmodel.cppnew file+251
@@ -0,0 +1,251 @@
1+/*
2+ * Copyright (C) 2013 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "listviewwithpageheader.h"
18+
19+#include <QAbstractItemModel>
20+#include <QQmlEngine>
21+#include <QQuickView>
22+#include <QSignalSpy>
23+#include <QSortFilterProxyModel>
24+#include <QtTestGui>
25+#pragma GCC diagnostic push
26+#pragma GCC diagnostic ignored "-pedantic"
27+#if QT_VERSION < QT_VERSION_CHECK(5, 1, 0)
28+#include <private/qquicklistmodel_p.h>
29+#else
30+#include <private/qqmllistmodel_p.h>
31+#endif
32+#include <private/qquickanimation_p.h>
33+#include <private/qquickitem_p.h>
34+#pragma GCC diagnostic pop
35+
36+class StringListModel : public QAbstractListModel
37+{
38+public:
39+ StringListModel()
40+ {
41+ list << "A" << "B" << "C" << "D" << "E" << "F" << "G" << "H";
42+ }
43+
44+ int rowCount(const QModelIndex &parent) const
45+ {
46+ if (parent.isValid())
47+ return 0;
48+ else
49+ return list.count();
50+ }
51+
52+ QVariant data(const QModelIndex &index, int role) const
53+ {
54+ if (role == Qt::SizeHintRole) return 50;
55+ else if (role == Qt::DisplayRole) return list[index.row()];
56+ return QVariant();
57+ }
58+
59+ QHash<int, QByteArray> roleNames() const
60+ {
61+ QHash<int, QByteArray> hash;
62+ hash.insert(Qt::DisplayRole, "type");
63+ hash.insert(Qt::SizeHintRole, "size");
64+ return hash;
65+ }
66+
67+ void moveLastToFirst()
68+ {
69+ const int last = list.count() - 1;
70+ beginMoveRows(QModelIndex(), last, last, QModelIndex(), 0);
71+ list.move(last, 0);
72+ endMoveRows();
73+ }
74+
75+ QStringList list;
76+};
77+
78+class ListViewWithPageHeaderTestSection : public QObject
79+{
80+ Q_OBJECT
81+
82+private:
83+ void verifyItem(int visibleIndex, qreal pos, qreal height, bool culled, const QString &sectionHeader, bool sectionHeaderCulled)
84+ {
85+ QTRY_VERIFY(visibleIndex < lvwph->m_visibleItems.count());
86+ QTRY_COMPARE(lvwph->m_visibleItems[visibleIndex]->y(), pos);
87+ QTRY_COMPARE(lvwph->m_visibleItems[visibleIndex]->height(), height);
88+ QCOMPARE(QQuickItemPrivate::get(lvwph->m_visibleItems[visibleIndex]->m_item)->culled, culled);
89+ QCOMPARE(section(lvwph->m_visibleItems[visibleIndex]->m_sectionItem), sectionHeader);
90+ if (!sectionHeader.isNull()) {
91+ QCOMPARE(QQuickItemPrivate::get(lvwph->m_visibleItems[visibleIndex]->m_sectionItem)->culled, sectionHeaderCulled);
92+ QCOMPARE(sectionDelegateIndex(lvwph->m_visibleItems[visibleIndex]->m_sectionItem), lvwph->m_firstVisibleIndex + visibleIndex);
93+ }
94+ }
95+
96+ void changeContentY(qreal change)
97+ {
98+ const qreal dest = lvwph->contentY() + change;
99+ if (dest > lvwph->contentY()) {
100+ const qreal jump = 25;
101+ while (lvwph->contentY() + jump < dest) {
102+ lvwph->setContentY(lvwph->contentY() + jump);
103+ QTest::qWait(1);
104+ }
105+ } else {
106+ const qreal jump = -25;
107+ while (lvwph->contentY() + jump > dest) {
108+ lvwph->setContentY(lvwph->contentY() + jump);
109+ QTest::qWait(1);
110+ }
111+ }
112+ lvwph->setContentY(dest);
113+ QTest::qWait(1);
114+ }
115+
116+ void scrollToTop()
117+ {
118+ const qreal jump = -25;
119+ while (!lvwph->isAtYBeginning()) {
120+ if (lvwph->contentY() + jump > -lvwph->minYExtent()) {
121+ lvwph->setContentY(lvwph->contentY() + jump);
122+ } else {
123+ lvwph->setContentY(lvwph->contentY() - 1);
124+ }
125+ QTest::qWait(1);
126+ }
127+ }
128+
129+ void scrollToBottom()
130+ {
131+ const qreal jump = 25;
132+ while (!lvwph->isAtYEnd()) {
133+ if (lvwph->contentY() + lvwph->height() + jump < lvwph->contentHeight()) {
134+ lvwph->setContentY(lvwph->contentY() + jump);
135+ } else {
136+ lvwph->setContentY(lvwph->contentY() + 1);
137+ }
138+ QTest::qWait(1);
139+ }
140+ }
141+
142+ void verifyInitialTopPosition()
143+ {
144+ QTRY_COMPARE(lvwph->m_visibleItems.count(), 0);
145+ QCOMPARE(lvwph->m_firstVisibleIndex, -1);
146+ QCOMPARE(lvwph->m_minYExtent, 0.);
147+ QCOMPARE(lvwph->m_clipItem->y(), 0.);
148+ QCOMPARE(lvwph->m_clipItem->clip(), false);
149+ QCOMPARE(lvwph->m_headerItem->y(), 0.);
150+ QCOMPARE(lvwph->m_headerItem->height(), 50.);
151+ QCOMPARE(lvwph->contentY(), 0.);
152+ QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
153+ QVERIFY(QQuickItemPrivate::get(lvwph->m_topSectionItem)->culled);
154+ }
155+
156+ QString section(QQuickItem *item)
157+ {
158+ return item ? QQmlEngine::contextForObject(item)->parentContext()->contextProperty(QLatin1String("section")).toString() : QString();
159+ }
160+
161+ int sectionDelegateIndex(QQuickItem *item)
162+ {
163+ return item ? QQmlEngine::contextForObject(item)->parentContext()->contextProperty(QLatin1String("delegateIndex")).toInt() : -1;
164+ }
165+
166+private Q_SLOTS:
167+
168+ void initTestCase()
169+ {
170+ }
171+
172+ void init()
173+ {
174+ view = new QQuickView();
175+ view->engine()->addImportPath(BUILT_PLUGINS_DIR);
176+ view->setSource(QUrl::fromLocalFile(LISTVIEWWITHPAGEHEADER_FOLDER "/test_sectionexternalmodel.qml"));
177+ lvwph = dynamic_cast<ListViewWithPageHeader*>(view->rootObject()->findChild<QQuickFlickable*>());
178+ QVERIFY(lvwph);
179+ view->show();
180+ QTest::qWaitForWindowExposed(view);
181+
182+ verifyInitialTopPosition();
183+ }
184+
185+ void cleanup()
186+ {
187+ delete view;
188+ }
189+
190+ void testCreationDeletion()
191+ {
192+ // Nothing, init/cleanup already tests this
193+ }
194+
195+ void testMoveWithProxy()
196+ {
197+ StringListModel m;
198+ QSortFilterProxyModel proxy;
199+ proxy.setSourceModel(&m);
200+
201+ lvwph->setModel(&proxy);
202+
203+ QTRY_COMPARE(lvwph->m_visibleItems.count(), 8);
204+ QCOMPARE(lvwph->m_firstVisibleIndex, 0);
205+ verifyItem(0, 50., 90., false, "A", false);
206+ verifyItem(1, 140., 90., false, "B", false);
207+ verifyItem(2, 230., 90., false, "C", false);
208+ verifyItem(3, 320., 90., false, "D", false);
209+ verifyItem(4, 410., 90., false, "E", false);
210+ verifyItem(5, 500., 90., false, "F", false);
211+ verifyItem(6, 590., 90., true, "G", true);
212+ verifyItem(7, 680., 90., true, "H", true);
213+ QCOMPARE(lvwph->m_minYExtent, 0.);
214+ QCOMPARE(lvwph->m_clipItem->y(), 0.);
215+ QCOMPARE(lvwph->m_clipItem->clip(), false);
216+ QCOMPARE(lvwph->m_headerItem->y(), 0.);
217+ QCOMPARE(lvwph->m_headerItem->height(), 50.);
218+ QCOMPARE(lvwph->contentY(), 0.);
219+ QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
220+ QVERIFY(QQuickItemPrivate::get(lvwph->m_topSectionItem)->culled);
221+
222+ m.moveLastToFirst();
223+
224+ QTRY_COMPARE(lvwph->m_visibleItems.count(), 8);
225+ QCOMPARE(lvwph->m_firstVisibleIndex, 0);
226+ verifyItem(0, 50., 90., false, "H", false);
227+ verifyItem(1, 140., 90., false, "A", false);
228+ verifyItem(2, 230., 90., false, "B", false);
229+ verifyItem(3, 320., 90., false, "C", false);
230+ verifyItem(4, 410., 90., false, "D", false);
231+ verifyItem(5, 500., 90., false, "E", false);
232+ verifyItem(6, 590., 90., true, "F", true);
233+ verifyItem(7, 680., 90., true, "G", true);
234+ QCOMPARE(lvwph->m_minYExtent, 0.);
235+ QCOMPARE(lvwph->m_clipItem->y(), 0.);
236+ QCOMPARE(lvwph->m_clipItem->clip(), false);
237+ QCOMPARE(lvwph->m_headerItem->y(), 0.);
238+ QCOMPARE(lvwph->m_headerItem->height(), 50.);
239+ QCOMPARE(lvwph->contentY(), 0.);
240+ QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
241+ QVERIFY(QQuickItemPrivate::get(lvwph->m_topSectionItem)->culled);
242+ }
243+
244+private:
245+ QQuickView *view;
246+ ListViewWithPageHeader *lvwph;
247+};
248+
249+QTEST_MAIN(ListViewWithPageHeaderTestSection)
250+
251+#include "listviewwithpageheadertestsectionexternalmodel.moc"
tests/plugins/ListViewWithPageHeader/test_sectionexternalmodel.qmlnew file+74
@@ -0,0 +1,74 @@
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 ListViewWithPageHeader 0.1
19+
20+Rectangle {
21+ width: 300
22+ height: 542
23+ color: "lightblue"
24+
25+ ListViewWithPageHeader {
26+ id: listView
27+ width: parent.width
28+ anchors.top: parent.top
29+ anchors.bottom: parent.bottom
30+ model: model
31+ delegate: Rectangle {
32+ property bool timerDone: false
33+ width: parent.width - 20
34+ x: 10
35+ color: index % 2 == 0 ? "red" : "blue"
36+ height: timerDone ? size : 350
37+ Text {
38+ text: index
39+ }
40+ Timer {
41+ id: sizeTimer
42+ interval: 10;
43+ onTriggered: {
44+ timerDone = true
45+ }
46+ }
47+ Component.onCompleted: {
48+ sizeTimer.start()
49+ }
50+ }
51+
52+ pageHeader: Rectangle {
53+ color: "transparent"
54+ width: parent.width
55+ height: 50
56+ implicitHeight: 50
57+ Text {
58+ anchors.fill: parent
59+ text: "APPS"
60+ font.pixelSize: 40
61+ }
62+ }
63+
64+ sectionProperty: "type"
65+ sectionDelegate: Component {
66+ Rectangle {
67+ color: "green"
68+ height: 40
69+ Text { text: section; font.pixelSize: 34 }
70+ anchors { left: parent.left; right: parent.right }
71+ }
72+ }
73+ }
74+}
tests/plugins/Unity/Indicators/indicatorsmodeltest.cpp−15
@@ -65,40 +65,25 @@ private Q_SLOTS:
65 void testDataAndOrder()
65 void testDataAndOrder()
66 {
66 {
67 // Priority order. (2, 1, 4, 3)
67 // Priority order. (2, 1, 4, 3)
68− QVariantMap map;
69− QVariantMap map1; map1["title"] = "fake1";
70− QVariantMap map2; map2["title"] = "fake2";
71− QVariantMap map3; map3["title"] = "fake3";
72− QVariantMap map4; map4["title"] = "fake4";
73− map["indicator-fake1"] = map1;
74− map["indicator-fake2"] = map2;
75− map["indicator-fake3"] = map3;
76− map["indicator-fake4"] = map4;
77−
78 IndicatorsModel model;
68 IndicatorsModel model;
79− model.setIndicatorData(map);
80 model.load();
69 model.load();
81
70
82 // should be in order:
71 // should be in order:
83 // fake3, fake4, fake1, fake2
72 // fake3, fake4, fake1, fake2
84
73
85 QCOMPARE(model.data(0, IndicatorsModelRole::Identifier).toString(), QString("indicator-fake3"));
74 QCOMPARE(model.data(0, IndicatorsModelRole::Identifier).toString(), QString("indicator-fake3"));
86− QCOMPARE(model.data(0, IndicatorsModelRole::Title).toString(), QString("fake3"));
87 QCOMPARE(model.data(0, IndicatorsModelRole::Position).toInt(), 3);
75 QCOMPARE(model.data(0, IndicatorsModelRole::Position).toInt(), 3);
88 QCOMPARE(model.data(0, IndicatorsModelRole::IndicatorProperties).toMap()["busName"].toString(), QString("com.canonical.indicator.fake3"));
76 QCOMPARE(model.data(0, IndicatorsModelRole::IndicatorProperties).toMap()["busName"].toString(), QString("com.canonical.indicator.fake3"));
89
77
90 QCOMPARE(model.data(1, IndicatorsModelRole::Identifier).toString(), QString("indicator-fake4"));
78 QCOMPARE(model.data(1, IndicatorsModelRole::Identifier).toString(), QString("indicator-fake4"));
91− QCOMPARE(model.data(1, IndicatorsModelRole::Title).toString(), QString("fake4"));
92 QCOMPARE(model.data(1, IndicatorsModelRole::Position).toInt(), 2);
79 QCOMPARE(model.data(1, IndicatorsModelRole::Position).toInt(), 2);
93 QCOMPARE(model.data(1, IndicatorsModelRole::IndicatorProperties).toMap()["busName"].toString(), QString("com.canonical.indicator.fake4"));
80 QCOMPARE(model.data(1, IndicatorsModelRole::IndicatorProperties).toMap()["busName"].toString(), QString("com.canonical.indicator.fake4"));
94
81
95 QCOMPARE(model.data(2, IndicatorsModelRole::Identifier).toString(), QString("indicator-fake1"));
82 QCOMPARE(model.data(2, IndicatorsModelRole::Identifier).toString(), QString("indicator-fake1"));
96− QCOMPARE(model.data(2, IndicatorsModelRole::Title).toString(), QString("fake1"));
97 QCOMPARE(model.data(2, IndicatorsModelRole::Position).toInt(), 1);
83 QCOMPARE(model.data(2, IndicatorsModelRole::Position).toInt(), 1);
98 QCOMPARE(model.data(2, IndicatorsModelRole::IndicatorProperties).toMap()["busName"].toString(), QString("com.canonical.indicator.fake1"));
84 QCOMPARE(model.data(2, IndicatorsModelRole::IndicatorProperties).toMap()["busName"].toString(), QString("com.canonical.indicator.fake1"));
99
85
100 QCOMPARE(model.data(3, IndicatorsModelRole::Identifier).toString(), QString("indicator-fake2"));
86 QCOMPARE(model.data(3, IndicatorsModelRole::Identifier).toString(), QString("indicator-fake2"));
101− QCOMPARE(model.data(3, IndicatorsModelRole::Title).toString(), QString("fake2"));
102 QCOMPARE(model.data(3, IndicatorsModelRole::Position).toInt(), 0);
87 QCOMPARE(model.data(3, IndicatorsModelRole::Position).toInt(), 0);
103 QCOMPARE(model.data(3, IndicatorsModelRole::IndicatorProperties).toMap()["busName"].toString(), QString("com.canonical.indicator.fake2"));
88 QCOMPARE(model.data(3, IndicatorsModelRole::IndicatorProperties).toMap()["busName"].toString(), QString("com.canonical.indicator.fake2"));
104 }
89 }
tests/plugins/Unity/Launcher/launcherbackendtest.cpp+3−3
@@ -37,7 +37,7 @@ private Q_SLOTS:
37
37
38 void testFileNames()
38 void testFileNames()
39 {
39 {
40− LauncherBackend backend(false);
40+ LauncherBackend backend;
41
41
42 backend.setStoredApplications(QStringList() << "rel-icon" << "abs-icon" << "invalid");
42 backend.setStoredApplications(QStringList() << "rel-icon" << "abs-icon" << "invalid");
43 QCOMPARE(backend.storedApplications(), QStringList() << "rel-icon" << "abs-icon");
43 QCOMPARE(backend.storedApplications(), QStringList() << "rel-icon" << "abs-icon");
@@ -45,7 +45,7 @@ private Q_SLOTS:
45
45
46 void testPinning()
46 void testPinning()
47 {
47 {
48− LauncherBackend backend(false);
48+ LauncherBackend backend;
49
49
50 backend.setStoredApplications(QStringList() << "rel-icon" << "abs-icon");
50 backend.setStoredApplications(QStringList() << "rel-icon" << "abs-icon");
51 QCOMPARE(backend.isPinned("rel-icon"), false);
51 QCOMPARE(backend.isPinned("rel-icon"), false);
@@ -82,7 +82,7 @@ private Q_SLOTS:
82 QFETCH(QString, appId);
82 QFETCH(QString, appId);
83 QFETCH(QString, expectedIcon);
83 QFETCH(QString, expectedIcon);
84
84
85− LauncherBackend backend(false);
85+ LauncherBackend backend;
86 backend.setStoredApplications(QStringList() << appId);
86 backend.setStoredApplications(QStringList() << appId);
87
87
88 QCOMPARE(backend.icon(appId), expectedIcon);
88 QCOMPARE(backend.icon(appId), expectedIcon);
tests/plugins/Unity/Launcher/launchermodeltest.cpp+61−2
@@ -62,7 +62,14 @@ public:
62 return QString();
62 return QString();
63 }
63 }
64 unity::shell::application::ApplicationInfoInterface *get(int index) const { return m_list.at(index); }
64 unity::shell::application::ApplicationInfoInterface *get(int index) const { return m_list.at(index); }
65− unity::shell::application::ApplicationInfoInterface *findApplication(const QString &) const { return nullptr; }
65+ unity::shell::application::ApplicationInfoInterface *findApplication(const QString &appId) const {
66+ Q_FOREACH(MockApp* app, m_list) {
67+ if (app->appId() == appId) {
68+ return app;
69+ }
70+ }
71+ return nullptr;
72+ }
66 unity::shell::application::ApplicationInfoInterface *startApplication(const QString &, const QStringList &) { return nullptr; }
73 unity::shell::application::ApplicationInfoInterface *startApplication(const QString &, const QStringList &) { return nullptr; }
67 bool stopApplication(const QString &) { return false; }
74 bool stopApplication(const QString &) { return false; }
68 bool focusApplication(const QString &appId) {
75 bool focusApplication(const QString &appId) {
@@ -151,9 +158,54 @@ private Q_SLOTS:
151 QCOMPARE(launcherModel->get(1)->pinned(), false);
158 QCOMPARE(launcherModel->get(1)->pinned(), false);
152 }
159 }
153
160
161+ void testRemove_data() {
162+
163+ QTest::addColumn<bool>("pinned");
164+ QTest::addColumn<bool>("running");
165+
166+ QTest::newRow("non-pinned, running") << false << true;
167+ QTest::newRow("pinned, running") << true << false;
168+ QTest::newRow("pinned, non-running") << true << false;
169+ }
170+
154 void testRemove() {
171 void testRemove() {
172+ QFETCH(bool, pinned);
173+ QFETCH(bool, running);
174+
175+ // In the beginning we always have two items
155 QCOMPARE(launcherModel->rowCount(QModelIndex()), 2);
176 QCOMPARE(launcherModel->rowCount(QModelIndex()), 2);
177+
178+ // pin one if required
179+ if (pinned) {
180+ launcherModel->pin(launcherModel->get(1)->appId());
181+ }
182+
183+ // stop it if required
184+ if (!running) {
185+ appManager->removeApplication(1);
186+ }
187+
188+ // Now remove it
156− launcherModel->requestRemove(launcherModel->get(0)->appId());
189+ launcherModel->requestRemove(launcherModel->get(1)->appId());
190+
191+ if (running) {
192+ // both apps are running, both apps must still be here
193+ QCOMPARE(launcherModel->rowCount(QModelIndex()), 2);
194+
195+ // Item must be unpinned now
196+ QCOMPARE(launcherModel->get(1)->pinned(), false);
197+
198+ } else if (pinned) {
199+ // Item 1 must go away, item 0 is here to stay
200+ QCOMPARE(launcherModel->rowCount(QModelIndex()), 1);
201+ }
202+
203+ // done our checks. now stop the app if was still running
204+ if (running) {
205+ appManager->removeApplication(1);
206+ }
207+
208+ // It needs to go away in any case now
157 QCOMPARE(launcherModel->rowCount(QModelIndex()), 1);
209 QCOMPARE(launcherModel->rowCount(QModelIndex()), 1);
158 }
210 }
159
211
@@ -181,6 +233,13 @@ private Q_SLOTS:
181
233
182 // quicklist needs to transform to remove item. trigger it and check it item goes away
234 // quicklist needs to transform to remove item. trigger it and check it item goes away
183 launcherModel->quickListActionInvoked(launcherModel->get(0)->appId(), pinActionIndex);
235 launcherModel->quickListActionInvoked(launcherModel->get(0)->appId(), pinActionIndex);
236+ QCOMPARE(launcherModel->get(0)->pinned(), false);
237+
238+ // still needs to be here as the app is still here
239+ QCOMPARE(launcherModel->rowCount(QModelIndex()), 2);
240+ // close the app
241+ appManager->removeApplication(0);
242+ // Now it needs to go away
184 QCOMPARE(launcherModel->rowCount(QModelIndex()), 1);
243 QCOMPARE(launcherModel->rowCount(QModelIndex()), 1);
185 }
244 }
186
245
tests/plugins/Unity/previewbindingstest.cpp+27
@@ -19,6 +19,7 @@
19
19
20#include <UnityCore/Preview.h>
20#include <UnityCore/Preview.h>
21#include <UnityCore/GLibWrapper.h>
21#include <UnityCore/GLibWrapper.h>
22+#include <UnityCore/Variant.h>
22#include <unity-protocol.h>
23#include <unity-protocol.h>
23
24
24#include "genericpreview.h"
25#include "genericpreview.h"
@@ -48,7 +49,23 @@ void PreviewBindingsTest::testGenericPreview()
48 UNITY_PROTOCOL_LAYOUT_HINT_LEFT);
49 UNITY_PROTOCOL_LAYOUT_HINT_LEFT);
49 unity::glib::Object<GObject> genPrv(rawPreview);
50 unity::glib::Object<GObject> genPrv(rawPreview);
50
51
52+ // create local result
53+ unity::glib::HintsMap hints;
54+ hints["a"] = unity::glib::Variant(g_variant_new_string("b"));
55+ unity::dash::LocalResult localResult;
56+ localResult.uri = "http://foo";
57+ localResult.icon_hint = "xyz";
58+ localResult.category_index = 1;
59+ localResult.result_type = 2;
60+ localResult.mimetype = "abc";
61+ localResult.name = "baz";
62+ localResult.comment = "qwerty";
63+ localResult.dnd_uri = "zzz";
64+ localResult.hints = hints;
65+
51 auto corePrv = unity::dash::Preview::PreviewForProtocolObject(genPrv);
66 auto corePrv = unity::dash::Preview::PreviewForProtocolObject(genPrv);
67+ corePrv->preview_result = localResult;
68+
52 auto prv = Preview::newFromUnityPreview(corePrv);
69 auto prv = Preview::newFromUnityPreview(corePrv);
53
70
54 QCOMPARE(prv != nullptr, true);
71 QCOMPARE(prv != nullptr, true);
@@ -64,6 +81,16 @@ void PreviewBindingsTest::testGenericPreview()
64 QCOMPARE(act->displayName(), QString("Action1"));
81 QCOMPARE(act->displayName(), QString("Action1"));
65 QCOMPARE(act->iconHint(), QString("/foo.png"));
82 QCOMPARE(act->iconHint(), QString("/foo.png"));
66
83
84+ Result* res = prv->result().value<Result*>();
85+ QCOMPARE(res->uri(), QString("http://foo"));
86+ QCOMPARE(res->iconHint(), QString("xyz"));
87+ QCOMPARE(res->categoryIndex(), 1u);
88+ QCOMPARE(res->resultType(), 2u);
89+ QCOMPARE(res->mimeType(), QString("abc"));
90+ QCOMPARE(res->title(), QString("baz"));
91+ QCOMPARE(res->dndUri(), QString("zzz"));
92+ QCOMPARE(res->metadata().toHash()["a"].toString(), QString("b"));
93+
67 g_object_unref(icon);
94 g_object_unref(icon);
68 g_object_unref(iconFile);
95 g_object_unref(iconFile);
69}
96}
tests/plugins/Unity/resultstest.cpp+13−8
@@ -65,25 +65,30 @@ void ResultsTest::testAllColumns()
65
65
66void ResultsTest::testIconColumn_data()
66void ResultsTest::testIconColumn_data()
67{
67{
68+ QTest::addColumn<QString>("uri");
68 QTest::addColumn<QString>("giconString");
69 QTest::addColumn<QString>("giconString");
69 QTest::addColumn<QString>("result");
70 QTest::addColumn<QString>("result");
70
71
72+ QTest::newRow("unspecified") << "test:uri" << "" << "";
71− QTest::newRow("absolute path") << "/usr/share/icons/example.png" << "/usr/share/icons/example.png";
73+ QTest::newRow("absolute path") << "test:uri" << "/usr/share/icons/example.png" << "/usr/share/icons/example.png";
72− QTest::newRow("file uri") << "file:///usr/share/icons/example.png" << "file:///usr/share/icons/example.png";
74+ QTest::newRow("file uri") << "test:uri" << "file:///usr/share/icons/example.png" << "file:///usr/share/icons/example.png";
73− QTest::newRow("http uri") << "http://images.ubuntu.com/example.jpg" << "http://images.ubuntu.com/example.jpg";
75+ QTest::newRow("http uri") << "test:uri" << "http://images.ubuntu.com/example.jpg" << "http://images.ubuntu.com/example.jpg";
76+ QTest::newRow("image uri") << "test:uri" << "image://thumbnail/with/arguments?passed_to=ImageProvider" << "image://thumbnail/with/arguments?passed_to=ImageProvider";
74− QTest::newRow("themed icon") << "accessories-other" << "image://theme/accessories-other";
77+ QTest::newRow("themed icon") << "test:uri" << "accessories-other" << "image://theme/accessories-other";
75− QTest::newRow("fileicon") << ". GFileIcon http://example.org/resource.gif" << "http://example.org/resource.gif";
78+ QTest::newRow("fileicon") << "test:uri" << ". GFileIcon http://example.org/resource.gif" << "http://example.org/resource.gif";
76− QTest::newRow("themedicon") << ". GThemedIcon accessories-other accessories generic" << "image://theme/accessories-other,accessories,generic";
79+ QTest::newRow("themedicon") << "test:uri" << ". GThemedIcon accessories-other accessories generic" << "image://theme/accessories-other,accessories,generic";
77− QTest::newRow("annotatedicon") << ". UnityProtocolAnnotatedIcon %7B'base-icon':%20%3C'.%20GThemedIcon%20accessories-other%20accessories%20generic'%3E%7D" << "image://theme/accessories-other,accessories,generic";
80+ QTest::newRow("annotatedicon") << "test:uri" << ". UnityProtocolAnnotatedIcon %7B'base-icon':%20%3C'.%20GThemedIcon%20accessories-other%20accessories%20generic'%3E%7D" << "image://theme/accessories-other,accessories,generic";
81+ QTest::newRow("thumbnailer icon") << "file:///usr/share/samples/video/foo.avi" << "" << "image://thumbnailer//usr/share/samples/video/foo.avi";
78}
82}
79
83
80void ResultsTest::testIconColumn()
84void ResultsTest::testIconColumn()
81{
85{
86+ QFETCH(QString, uri);
82 QFETCH(QString, giconString);
87 QFETCH(QString, giconString);
83 QFETCH(QString, result);
88 QFETCH(QString, result);
84 auto deeModel = createBackendModel();
89 auto deeModel = createBackendModel();
85 dee_model_append (deeModel,
90 dee_model_append (deeModel,
86− "test:uri",
91+ uri.toLocal8Bit().constData(),
87 giconString.toLocal8Bit().constData(),
92 giconString.toLocal8Bit().constData(),
88 0,
93 0,
89 0,
94 0,
tests/qmltests/CMakeLists.txt+2−2
@@ -13,7 +13,6 @@ set(qmltest_DEFAULT_NO_ADD_TEST FALSE)
13set(qmltest_DEFAULT_PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=minimal")
13set(qmltest_DEFAULT_PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=minimal")
14add_qml_test(Components AnimationControllerWithSignals)
14add_qml_test(Components AnimationControllerWithSignals)
15add_qml_test(Components Carousel)
15add_qml_test(Components Carousel)
16−add_qml_test(Components CrossFadeImage)
17add_qml_test(Components MathLocal)
16add_qml_test(Components MathLocal)
18add_qml_test(Components OpenEffect)
17add_qml_test(Components OpenEffect)
19add_qml_test(Components RatingStars)
18add_qml_test(Components RatingStars)
@@ -32,6 +31,7 @@ add_manual_qml_test(Components DragHandle IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugi
32add_qml_test(Components DraggingArea)
31add_qml_test(Components DraggingArea)
33add_qml_test(Components EdgeDemoOverlay)
32add_qml_test(Components EdgeDemoOverlay)
34add_qml_test(Components FilterGrid IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/plugins)
33add_qml_test(Components FilterGrid IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/plugins)
34+add_qml_test(Components LazyImage)
35add_qml_test(Components ResponsiveFlowView)
35add_qml_test(Components ResponsiveFlowView)
36add_qml_test(Components ResponsiveGridView)
36add_qml_test(Components ResponsiveGridView)
37add_qml_test(Components Revealer)
37add_qml_test(Components Revealer)
@@ -63,7 +63,7 @@ add_qml_test(Greeter Infographics IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qml
63add_qml_test(Hud Hud)
63add_qml_test(Hud Hud)
64add_qml_test(Hud Result)
64add_qml_test(Hud Result)
65add_qml_test(Launcher Launcher IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
65add_qml_test(Launcher Launcher IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
66−add_qml_test(Notifications Notifications IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_SOURCE_DIR}/tests/mocks)
66+add_qml_test(Notifications Notifications IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_SOURCE_DIR}/tests/mocks)
67add_qml_test(Panel IndicatorRow)
67add_qml_test(Panel IndicatorRow)
68add_qml_test(Panel Indicators IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
68add_qml_test(Panel Indicators IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
69add_qml_test(Panel MenuContent IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
69add_qml_test(Panel MenuContent IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
tests/qmltests/Components/tst_CrossFadeImage.qmldeleted−125
@@ -1,125 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import QtTest 1.0
19−import "../../../Components"
20−
21−TestCase {
22− name: "CrossFadeImage"
23−
24− property alias status: crossFadeImage.status
25− property alias source: crossFadeImage.source
26− property alias crossFade: crossFadeImage.crossFade
27− property alias fadeInFirst: crossFadeImage.fadeInFirst
28− property alias running: crossFadeImage.running
29−
30− CrossFadeImage {
31− id: crossFadeImage
32− }
33−
34− SignalSpy {
35− id: signalSpy
36− target: crossFadeImage
37− }
38−
39− function initTestFunction(argCrossFade, argFadeInFirst) {
40− source = ""
41− crossFade = argCrossFade
42− fadeInFirst = argFadeInFirst
43− compare(status, Image.Null, "Could not reset CrossFadeImage")
44− }
45−
46− function loadImage(url) {
47− console.log("Loading image...")
48− source = url
49−
50− signalSpy.signalName = "statusChanged"
51− signalSpy.wait()
52−
53− if (status == Image.Null) {
54− signalSpy.clear()
55− signalSpy.wait()
56− }
57−
58− if (status == Image.Loading) {
59− signalSpy.clear()
60− signalSpy.wait()
61− }
62−
63− compare(status, Image.Ready, "Image not ready")
64− console.log("Image loaded.")
65− }
66−
67− function waitForAnimation() {
68− signalSpy.signalName = "runningChanged"
69−
70− if (!running) {
71− signalSpy.clear()
72− signalSpy.wait()
73− compare(running, true, "Animation did not start")
74− }
75−
76− signalSpy.clear()
77− console.log("Waiting for animation to finish...")
78− signalSpy.wait()
79− compare(running, false, "Animation did not stop within 5 seconds.")
80− }
81−
82− function cleanupTest() {
83− compare(running, false, "Animation is running after testcase")
84− compare(crossFadeImage.__nextImage.source, "", "nextimage source is not reset")
85− }
86−
87− function test_fadeFirst() {
88− initTestFunction(true, true)
89−
90− loadImage("../../../graphics/phone_background.jpg")
91−
92− waitForAnimation()
93−
94− cleanupTest()
95− }
96−
97− function test_no_fadeFirst() {
98− initTestFunction(true, false)
99−
100− loadImage("../../../graphics/phone_background.jpg")
101−
102− cleanupTest()
103− }
104−
105− function test_crossFade() {
106− initTestFunction(true, false)
107−
108− loadImage("../../../graphics/phone_background.jpg")
109−
110− loadImage("../../../graphics/tablet_background.jpg")
111−
112− // Due to the internal implementation, __currentImage and __nextImage are swapped before the animation starts
113− // Make sure z order reflects that too.
114− compare(crossFadeImage.__currentImage.z > crossFadeImage.__nextImage.z, true, "new image should be above old image")
115− compare(crossFadeImage.__currentImage.opacity < 0.5, true)
116− compare(crossFadeImage.__nextImage.opacity > 0.5, true)
117−
118− waitForAnimation()
119−
120− compare(crossFadeImage.__currentImage.opacity > 0.5, true)
121− compare(crossFadeImage.__nextImage.opacity < 0.5, true)
122−
123− cleanupTest()
124− }
125−}
tests/qmltests/Components/tst_LazyImage.qmlnew file+156
@@ -0,0 +1,156 @@
1+/*
2+ * Copyright 2013 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+import QtTest 1.0
19+import "../../../Components"
20+import Ubuntu.Components 0.1
21+import Unity.Test 0.1 as UT
22+import "tst_LazyImage"
23+
24+Rectangle {
25+ width: units.gu(120)
26+ height: units.gu(70)
27+
28+ Rectangle {
29+ id: baseRect
30+ anchors {
31+ fill: parent
32+ rightMargin: 2 * parent.width / 3
33+ }
34+
35+ color: "grey"
36+
37+ Column {
38+ anchors { fill: parent; margins: units.gu(5) }
39+
40+ Label {
41+ height: units.gu(4)
42+ text: "Unbound"
43+ color: "white"
44+ verticalAlignment: Text.AlignBottom
45+ }
46+
47+ LazyImage {
48+ id: lazy1
49+ }
50+
51+ Label {
52+ height: units.gu(4)
53+ text: "Width-bound"
54+ color: "white"
55+ verticalAlignment: Text.AlignBottom
56+ }
57+
58+ LazyImage {
59+ id: lazy2
60+ width: units.gu(30)
61+ scaleTo: "width"
62+ }
63+
64+ Label {
65+ height: units.gu(4)
66+ text: "Height-bound"
67+ color: "white"
68+ verticalAlignment: Text.AlignBottom
69+ }
70+
71+ LazyImage {
72+ id: lazy3
73+ height: units.gu(10)
74+ scaleTo: "height"
75+ }
76+ }
77+ }
78+
79+ Rectangle {
80+ id: controlsRect
81+ anchors {
82+ fill: parent
83+ leftMargin: parent.width / 3
84+ }
85+
86+ color: "lightgrey"
87+
88+ Column {
89+ id: controls
90+ spacing: units.gu(1)
91+
92+ anchors { fill: parent; margins: units.gu(3) }
93+
94+ ImageControls { id: controls1; image: lazy1 }
95+ ImageControls { id: controls2; image: lazy2 }
96+ ImageControls { id: controls3; image: lazy3 }
97+ }
98+ }
99+
100+ UT.UnityTestCase {
101+ name: "Stage"
102+ when: windowShown
103+
104+ function cleanup() {
105+ controls1.blank();
106+ tryCompare(lazy1, "width", units.gu(10));
107+ controls2.blank();
108+ tryCompare(lazy2, "height", units.gu(10));
109+ controls3.blank();
110+ tryCompare(lazy3, "width", units.gu(10));
111+ }
112+
113+ function test_lazyimage_data() {
114+ 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+ ]
131+ }
132+
133+ function test_lazyimage(data) {
134+ data.func();
135+
136+ if (data.transition) {
137+ // wait for the transition to complete
138+ var transition = findInvisibleChild(data.image, data.transition);
139+ tryCompare(transition, "running", true);
140+ tryCompare(transition, "running", false);
141+ }
142+
143+ // check the dimensions
144+ compare(data.image.width, data.width);
145+ compare(data.image.height, data.height);
146+
147+ // check the placeholder
148+ var placeholder = findChild(data.image, "placeholder");
149+ compare(placeholder.visible, data.placeholder ? true : false);
150+
151+ // check the error image
152+ var error = findChild(data.image, "errorImage");
153+ compare(error.visible, data.error ? true : false);
154+ }
155+ }
156+}
tests/qmltests/Components/tst_LazyImage/ImageControls.qmlnew file+67
@@ -0,0 +1,67 @@
1+/*
2+ * Copyright 2013 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+import Ubuntu.Components 0.1
19+import "../../../../Components"
20+
21+Row {
22+ property LazyImage image
23+
24+ anchors { left: parent.left; right: parent.right }
25+ spacing: units.gu(1)
26+
27+ function blank() { blankButton.clicked() }
28+ function wide() { wideButton.clicked() }
29+ function square() { squareButton.clicked() }
30+ function portrait() { portraitButton.clicked() }
31+ function badpath() { badpathButton.clicked() }
32+
33+ Button {
34+ id: blankButton
35+ width: parent / 5
36+ text: "Blank"
37+ onClicked: image.source = ""
38+ }
39+
40+ Button {
41+ id: wideButton
42+ width: parent / 5
43+ text: "Wide"
44+ onClicked: image.source = "wide.png"
45+ }
46+
47+ Button {
48+ id: squareButton
49+ width: parent / 5
50+ text: "Square"
51+ onClicked: image.source = "square.png"
52+ }
53+
54+ Button {
55+ id: portraitButton
56+ width: parent / 5
57+ text: "Portrait"
58+ onClicked: image.source = "portrait.png"
59+ }
60+
61+ Button {
62+ id: badpathButton
63+ width: parent / 5
64+ text: "Bad path"
65+ onClicked: image.source = "bad/path"
66+ }
67+}
tests/qmltests/Components/tst_LazyImage/portrait.pngnew file

Binary file not shown.

tests/qmltests/Components/tst_LazyImage/square.pngnew file

Binary file not shown.

tests/qmltests/Components/tst_LazyImage/wide.pngnew file

Binary file not shown.

tests/qmltests/Components/tst_PageHeader.qml+28
@@ -19,12 +19,17 @@ import QtTest 1.0
19import ".."
19import ".."
20import "../../../Components"
20import "../../../Components"
21import Ubuntu.Components 0.1
21import Ubuntu.Components 0.1
22+import Unity 0.1
22import Unity.Test 0.1 as UT
23import Unity.Test 0.1 as UT
23
24
24Item {
25Item {
25 width: units.gu(110)
26 width: units.gu(110)
26 height: units.gu(30)
27 height: units.gu(30)
27
28
29+ Scope {
30+ id: scopeMock
31+ }
32+
28 UT.UnityTestCase {
33 UT.UnityTestCase {
29 name: "PageHeaderTest"
34 name: "PageHeaderTest"
30 when: windowShown
35 when: windowShown
@@ -132,6 +137,27 @@ Item {
132 compare(pageHeader.searchHistory.count, 3)
137 compare(pageHeader.searchHistory.count, 3)
133 compare(pageHeader.searchHistory.get(0).query, "humppa4")
138 compare(pageHeader.searchHistory.get(0).query, "humppa4")
134 }
139 }
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+ }
135 }
161 }
136
162
137 Column {
163 Column {
@@ -145,6 +171,8 @@ Item {
145 right: parent.right
171 right: parent.right
146 }
172 }
147
173
174+ scope: scopeMock
175+
148 searchEntryEnabled: true
176 searchEntryEnabled: true
149 text: "%^$%^%^&%^&%^$%GHR%"
177 text: "%^$%^%^&%^&%^$%GHR%"
150 }
178 }
tests/qmltests/Components/tst_Showable.qml+27
@@ -155,5 +155,32 @@ Item {
155 show1.created = true;
155 show1.created = true;
156 compare(show1.shown, true, "Showable should automatically show when created changes to true if attempted to show before.");
156 compare(show1.shown, true, "Showable should automatically show when created changes to true if attempted to show before.");
157 }
157 }
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+ }
158 }
185 }
159}
186}
tests/qmltests/Dash/Apps/tst_AppPreview.qml+75−2
@@ -25,6 +25,9 @@ Item {
25 width: units.gu(60)
25 width: units.gu(60)
26 height: units.gu(80)
26 height: units.gu(80)
27
27
28+ // Fake shell
29+ QtObject { id: shell; property int height: appPreview.height }
30+
28 property var calls: []
31 property var calls: []
29
32
30 SignalSpy {
33 SignalSpy {
@@ -45,6 +48,8 @@ Item {
45 ["Unity User", 10, "10/02/2013", root.commentary],
48 ["Unity User", 10, "10/02/2013", root.commentary],
46 ]
49 ]
47 }
50 }
51+ QtObject { id: showProgress; property bool value: true }
52+ QtObject { id: progressSource; property string value: "service" }
48
53
49 QtObject {
54 QtObject {
50 id: data
55 id: data
@@ -66,8 +71,30 @@ Item {
66 ]
71 ]
67 }
72 }
68
73
74+ QtObject {
75+ id: dataProgress
76+ property string title: "Unity App"
77+ property string appIcon: "fake_image.png"
78+ property string description: "This is an Application description"
79+ property real rating: rating.value
80+ property int numRatings: reviews.value
81+ property var execute: root.fake_call
82+ property var infoMap: {
83+ "show_progressbar": showProgress,
84+ "more-screenshots": screenshots,
85+ "rated": rated,
86+ "comments": comments,
87+ "progressbar_source": progressSource
88+ }
89+ property var actions: [
90+ { "id": 123, "displayName": "action1" },
91+ { "id": 456, "displayName": "action2" },
92+ { "id": 789, "displayName": "action3" },
93+ ]
94+ }
95+
69 function fake_call(id, data){
96 function fake_call(id, data){
70− root.calls[root.calls.length] = id;
97+ root.calls[root.calls.length] = [id, data];
71 }
98 }
72
99
73 // The component under test
100 // The component under test
@@ -89,6 +116,10 @@ Item {
89 reviewField.focus = false;
116 reviewField.focus = false;
90 reviewField.text = "";
117 reviewField.text = "";
91 data.rating = rating.value;
118 data.rating = rating.value;
119+ dataProgress.infoMap["progressbar_source"].value = "service";
120+ var appReviews = findChild(appPreview, "appReviews");
121+ appReviews.visible = false;
122+ appPreview.keyboardSize = 0;
92 }
123 }
93
124
94 function test_actions() {
125 function test_actions() {
@@ -102,7 +133,7 @@ Item {
102
133
103 var actions = data.actions;
134 var actions = data.actions;
104 for(var i = 0; i < actions.length; i++) {
135 for(var i = 0; i < actions.length; i++) {
105− compare(root.calls[i], actions[i].id, "Id of action not found.");
136+ compare(root.calls[i][0], actions[i].id, "Id of action not found.");
106 }
137 }
107 }
138 }
108
139
@@ -124,6 +155,7 @@ Item {
124
155
125 function test_review_focus() {
156 function test_review_focus() {
126 var appReviews = findChild(appPreview, "appReviews");
157 var appReviews = findChild(appPreview, "appReviews");
158+ appReviews.visible = true;
127 var sendButton = findChild(appReviews, "sendButton");
159 var sendButton = findChild(appReviews, "sendButton");
128 var reviewField = findChild(appReviews, "reviewField");
160 var reviewField = findChild(appReviews, "reviewField");
129
161
@@ -162,5 +194,46 @@ Item {
162 verify(buttons.visible == true);
194 verify(buttons.visible == true);
163 }
195 }
164
196
197+ function test_progress_show() {
198+ appPreview.previewData = dataProgress;
199+ var progress = findChild(appPreview, "progressBar");
200+ verify(progress.visible == true);
201+ }
202+
203+ function test_progress_download_finish() {
204+ appPreview.previewData = dataProgress;
205+ var progress = findChild(appPreview, "progressBar");
206+ dataProgress.infoMap["progressbar_source"].value = "finish";
207+
208+ var actions = dataProgress.actions;
209+ compare(root.calls[0][0], actions[0].id, "Id of action not found.");
210+ compare(root.calls[0][1], {}, "Data of action not found.");
211+ }
212+
213+ function test_progress_download_error() {
214+ appPreview.previewData = dataProgress;
215+ var progress = findChild(appPreview, "progressBar");
216+ dataProgress.infoMap["progressbar_source"].value = "error";
217+
218+ var actions = dataProgress.actions;
219+ compare(root.calls[0][0], actions[1].id, "Id of action not found.");
220+ compare(root.calls[0][1], {"error": "DOWNLOAD ERROR"}, "Data of action not found.");
221+ }
222+
223+ function test_automatic_scroll_on_keyboard_shown() {
224+ waitForRendering(appPreview);
225+ var appReviews = findChild(appPreview, "appReviews");
226+ appReviews.visible = true;
227+
228+ var leftFlickable = findChild(appPreview, "leftFlickable");
229+ leftFlickable.contentY = leftFlickable.contentHeight;
230+ var reviewField = findChild(appReviews, "reviewField");
231+ appPreview.keyboardSize = 400;
232+ appReviews.editing(reviewField);
233+ var newFlickPos = leftFlickable.contentY;
234+ var keyboardY = shell.height - appPreview.keyboardSize;
235+ verify(newFlickPos < keyboardY);
236+ }
237+
165 }
238 }
166}
239}
tests/qmltests/Dash/tst_DashContent.qml+1−1
@@ -106,7 +106,7 @@ Item {
106 contentEndReachedSpy.clear()
106 contentEndReachedSpy.clear()
107 clear_scope_status();
107 clear_scope_status();
108
108
109− // clear, wait for dahs to empty and load scopes.
109+ // clear, wait for dash to empty and load scopes.
110 var dashContentList = findChild(dashContent, "dashContentList");
110 var dashContentList = findChild(dashContent, "dashContentList");
111 verify(dashContentList != undefined)
111 verify(dashContentList != undefined)
112 scopesModel.clear();
112 scopesModel.clear();
tests/qmltests/Dash/tst_GenericScopeView.qml+17
@@ -44,10 +44,27 @@ Item {
44
44
45 function test_isCurrent() {
45 function test_isCurrent() {
46 var pageHeader = findChild(genericScopeView, "pageHeader");
46 var pageHeader = findChild(genericScopeView, "pageHeader");
47+ var previewLoader = findChild(genericScopeView, "previewLoader");
47 genericScopeView.isCurrent = true
48 genericScopeView.isCurrent = true
48 pageHeader.searchQuery = "test"
49 pageHeader.searchQuery = "test"
50+ previewLoader.open = true
49 genericScopeView.isCurrent = false
51 genericScopeView.isCurrent = false
50 tryCompare(pageHeader, "searchQuery", "")
52 tryCompare(pageHeader, "searchQuery", "")
53+ tryCompare(genericScopeView, "previewShown", false);
54+ }
55+
56+ function test_showDash() {
57+ var previewLoader = findChild(genericScopeView, "previewLoader");
58+ previewLoader.open = true;
59+ scopes.get(0).showDash();
60+ tryCompare(genericScopeView, "previewShown", false);
61+ }
62+
63+ function test_hideDash() {
64+ var previewLoader = findChild(genericScopeView, "previewLoader");
65+ previewLoader.open = true;
66+ scopes.get(0).hideDash();
67+ tryCompare(genericScopeView, "previewShown", false);
51 }
68 }
52 }
69 }
53 }
70 }
tests/qmltests/Greeter/tst_Infographics.qml+4−4
@@ -64,15 +64,15 @@ Item {
64
64
65 function test_set_username_data() {
65 function test_set_username_data() {
66 return [
66 return [
67− { username: "has-password" },
67+ { username: "has-password", label: "<b>19</b> minutes talk time" },
68− { username: "no-password" },
68+ { username: "two-factor", label: "No data" },
69− { username: "empty-name" }
69+ { username: "", label: "No data" },
70 ]
70 ]
71 }
71 }
72
72
73 function test_set_username(data) {
73 function test_set_username(data) {
74 infographicModel.username = data.username
74 infographicModel.username = data.username
75− tryCompare(label, "text", "<b>19</b> minutes talk time")
75+ tryCompare(label, "text", data.label)
76 }
76 }
77 }
77 }
78
78
tests/qmltests/Greeter/tst_Phone.qml+15

This diff is too big to show here.

tests/qmltests/Panel/tst_IndicatorRow.qml+3−3

This diff is too big to show here.

tests/qmltests/tst_Shell.qml+68

This diff is too big to show here.

tests/uqmlscene/main.cpp−2

This diff is too big to show here.