on xenial help sign in
merged with trunk
commit106133c0b843d5833a4443f336705315f66b32f6 authorNick Dedekind <nicholas.dedekind@gmail.com> dateMon 7 Oct 2013, 13:53 (13 years ago) parente90719964e5148
277 files changed+6653−7062
Bottombar/Bottombar.qml+81−16 CMakeLists.txt−1 Components/CrossFadeImage.qml−151 Components/EdgeDemo.qml+1−1 Components/EdgeDemoOverlay.qml+12−2 Components/LazyImage.qml+172 Components/PageHeader.qml+44−1 Greeter/PinPadButton.qml → Components/PinPadButton.qml Components/ResponsiveGridView.qml+1−1 Components/Showable.qml+11 Components/Stage.qml+4−1 Components/VolumeControl.qml+5−20 Components/graphics/close@20.png Dash/Apps/AppPreview.qml+11 Dash/Apps/AppReviews.qml+3 Dash/Apps/RunningApplicationsGrid.qml+20−1 Dash/DashApps.qml+2 Dash/DashContent.qml+1 Dash/DashPreview.qml+13 Dash/GenericScopeView.qml+47−11 Dash/Music/MusicFilterGrid.qml+12−2 Greeter/Gradient.js+7−3 Greeter/GreeterContent.qml+12−8 Greeter/Infographics.qml+10−1 MouseTouchAdaptor.cpp+29−12 MouseTouchAdaptor.h+2−5 Notifications/Notification.qml+42−1 Notifications/NotificationMenuItemFactory.qml+97 Panel/Indicators.qml+5−1 Panel/Indicators/DatetimeIndicatorPage.qml−97 Panel/Indicators/DatetimeIndicatorWidget.qml−67 Panel/Indicators/DefaultIndicatorPage.qml+1−1 Panel/Indicators/DefaultIndicatorPage2.qml−25 Panel/Indicators/DefaultIndicatorWidget.qml+47−21 Panel/Indicators/DefaultIndicatorWidget2.qml−103 Panel/Indicators/MessagingIndicatorPage.qml−35 Panel/Indicators/MessagingIndicatorWidget.qml−25 Panel/Indicators/NetworkIndicatorPage.qml−83 Panel/Indicators/NetworkIndicatorPage2.qml−82 Panel/Indicators/NetworkIndicatorWidget.qml−112 Panel/Indicators/SoundIndicatorWidget.qml−26 Panel/Indicators/client/IndicatorsList.qml+16−14 Panel/Indicators/client/IndicatorsTree.qml+4 Panel/IndicatorsDataModel.qml−79 Panel/MenuContent.qml+20−3 Shell.qml+26−13 debian/changelog+244 debian/control+4−9 debian/unity8-private.install+1 debian/unity8.install−1 main.cpp+4−5 plugins/AccountsService/AccountsService.cpp+22−3 plugins/AccountsService/AccountsService.h+13−6 plugins/AccountsService/AccountsServiceDBusAdaptor.cpp+15−15 plugins/AccountsService/AccountsServiceDBusAdaptor.h+2−2 plugins/CMakeLists.txt+1 plugins/ListViewWithPageHeader/listviewwithpageheader.cpp+23−1 plugins/ListViewWithPageHeader/listviewwithpageheader.h+1 plugins/SessionBroadcast/CMakeLists.txt+13 plugins/SessionBroadcast/SessionBroadcast.cpp+41 plugins/Unity/Indicators/Network/plugin.h → plugins/SessionBroadcast/SessionBroadcast.h+18−9 plugins/Unity/IndicatorsLegacy/Network/plugin.cpp → plugins/SessionBroadcast/plugin.cpp+14−10 plugins/Unity/IndicatorsLegacy/plugin.h → plugins/SessionBroadcast/plugin.h+8−7 plugins/SessionBroadcast/qmldir+3 plugins/Unity/CMakeLists.txt+1−1 plugins/Unity/Indicators/CMakeLists.txt+1 plugins/Unity/IndicatorsLegacy/Messaging/CMakeLists.txt → plugins/Unity/Indicators/Messaging/CMakeLists.txt plugins/Unity/IndicatorsLegacy/Messaging/qml/ActionButton.qml → plugins/Unity/Indicators/Messaging/qml/ActionButton.qml plugins/Unity/IndicatorsLegacy/Messaging/qml/ActionTextField.qml → plugins/Unity/Indicators/Messaging/qml/ActionTextField.qml+10−7 plugins/Unity/Indicators/Messaging/qml/CMakeLists.txt+5 plugins/Unity/IndicatorsLegacy/Messaging/qml/GroupedMessage.qml → plugins/Unity/Indicators/Messaging/qml/GroupedMessage.qml+13−18 plugins/Unity/IndicatorsLegacy/Messaging/qml/HeroMessage.qml → plugins/Unity/Indicators/Messaging/qml/HeroMessage.qml+25−22 plugins/Unity/IndicatorsLegacy/Messaging/qml/HeroMessageHeader.qml → plugins/Unity/Indicators/Messaging/qml/HeroMessageHeader.qml plugins/Unity/Indicators/Messaging/qml/MessageMenuItemFactory.qml+180 plugins/Unity/IndicatorsLegacy/Messaging/qml/QuickReply.qml → plugins/Unity/Indicators/Messaging/qml/QuickReply.qml+11−6 plugins/Unity/IndicatorsLegacy/Messaging/qml/SimpleTextMessage.qml → plugins/Unity/Indicators/Messaging/qml/SimpleTextMessage.qml+7−4 plugins/Unity/IndicatorsLegacy/Messaging/qml/SnapDecision.qml → plugins/Unity/Indicators/Messaging/qml/SnapDecision.qml+33−14 plugins/Unity/IndicatorsLegacy/Messaging/qml/TextMessage.qml → plugins/Unity/Indicators/Messaging/qml/TextMessage.qml+12−4 plugins/Unity/IndicatorsLegacy/Messaging/qml/qmldir → plugins/Unity/Indicators/Messaging/qml/qmldir+2−2 plugins/Unity/IndicatorsLegacy/Messaging/qml/utils.js → plugins/Unity/Indicators/Messaging/qml/utils.js plugins/Unity/Indicators/Network/CMakeLists.txt−44 plugins/Unity/Indicators/Network/networkagent.cpp−146 plugins/Unity/Indicators/Network/networkagent.h−65 plugins/Unity/Indicators/Network/qml/PasswordPage.qml−88 plugins/Unity/Indicators/Network/qml/PasswordTextField.qml−68 plugins/Unity/Indicators/Network/qml/qmldir−5 plugins/Unity/Indicators/Network/secret-agent.c−382 plugins/Unity/Indicators/Network/secret-agent.h−102 plugins/Unity/Indicators/indicators.h−2 plugins/Unity/Indicators/indicatorsmodel.cpp+2−55 plugins/Unity/Indicators/indicatorsmodel.h−8 plugins/Unity/Indicators/plugin.cpp+2 plugins/Unity/Indicators/qml/BaseMenuItem.qml+1−1 plugins/Unity/Indicators/qml/IndicatorBase.qml+8−5 plugins/Unity/Indicators/qml/IndicatorPage.qml+40−11 plugins/Unity/Indicators/qml/IndicatorWidget.qml−6 plugins/Unity/Indicators/qml/MenuItemFactory.qml+62−12 plugins/Unity/Indicators/qml/SliderMenuItem.qml+1−1 plugins/Unity/IndicatorsLegacy/resources/artwork/messaging/default_app.svg → plugins/Unity/Indicators/resources/artwork/messaging/default_app.svg plugins/Unity/IndicatorsLegacy/resources/artwork/messaging/default_contact.png → plugins/Unity/Indicators/resources/artwork/messaging/default_contact.png plugins/Unity/IndicatorsLegacy/resources/artwork/messaging/message_sms01_54px.png → plugins/Unity/Indicators/resources/artwork/messaging/message_sms01_54px.png plugins/Unity/Indicators/resources/indicators.qrc+3 plugins/Unity/Indicators/rootactionstate.cpp+7−1 plugins/Unity/Indicators/rootactionstate.h+3 plugins/Unity/Indicators/visibleindicatorsmodel.cpp−2 plugins/Unity/IndicatorsLegacy/CMakeLists.txt−49 plugins/Unity/IndicatorsLegacy/Messaging/qml/CMakeLists.txt−5 plugins/Unity/IndicatorsLegacy/Messaging/qml/MessageMenuItem.qml−96 plugins/Unity/IndicatorsLegacy/Network/CMakeLists.txt−45 plugins/Unity/IndicatorsLegacy/Network/networkagent.cpp−146 plugins/Unity/IndicatorsLegacy/Network/networkagent.h−65 plugins/Unity/IndicatorsLegacy/Network/plugin.h−32 plugins/Unity/IndicatorsLegacy/Network/qml/AccessPoint.qml−68 plugins/Unity/IndicatorsLegacy/Network/qml/CMakeLists.txt−5 plugins/Unity/IndicatorsLegacy/Network/qml/PasswordPage.qml−88 plugins/Unity/IndicatorsLegacy/Network/qml/PasswordTextField.qml−68 plugins/Unity/IndicatorsLegacy/Network/qml/WifiSection.qml−34 plugins/Unity/IndicatorsLegacy/Network/qml/qmldir−9 plugins/Unity/IndicatorsLegacy/Network/secret-agent.c−382 plugins/Unity/IndicatorsLegacy/Network/secret-agent.h−102 plugins/Unity/IndicatorsLegacy/flatmenuproxymodel.cpp−288 plugins/Unity/IndicatorsLegacy/flatmenuproxymodel.h−93 plugins/Unity/IndicatorsLegacy/modelprinter.cpp−114 plugins/Unity/IndicatorsLegacy/modelprinter.h−50 plugins/Unity/IndicatorsLegacy/plugin.cpp−42 plugins/Unity/IndicatorsLegacy/qml/BasicMenuItem.qml−48 plugins/Unity/IndicatorsLegacy/qml/ButtonMenuItem.qml−47 plugins/Unity/IndicatorsLegacy/qml/CMakeLists.txt−5 plugins/Unity/IndicatorsLegacy/qml/DivMenuItem.qml−26 plugins/Unity/IndicatorsLegacy/qml/HLine.qml−29 plugins/Unity/IndicatorsLegacy/qml/IndicatorBase.qml−59 plugins/Unity/IndicatorsLegacy/qml/IndicatorPage.qml−191 plugins/Unity/IndicatorsLegacy/qml/IndicatorWidget.qml−68 plugins/Unity/IndicatorsLegacy/qml/MenuAction.qml−86 plugins/Unity/IndicatorsLegacy/qml/MenuActionBinding.qml−106 plugins/Unity/IndicatorsLegacy/qml/MenuItem.qml−40 plugins/Unity/IndicatorsLegacy/qml/MenuItemFactory.qml−110 plugins/Unity/IndicatorsLegacy/qml/ProgressMenuItem.qml−65 plugins/Unity/IndicatorsLegacy/qml/RemoveBackground.qml−55 plugins/Unity/IndicatorsLegacy/qml/SectionMenuItem.qml−57 plugins/Unity/IndicatorsLegacy/qml/SliderMenuItem.qml−64 plugins/Unity/IndicatorsLegacy/qml/SwitchMenuItem.qml−43 plugins/Unity/IndicatorsLegacy/qml/qmldir−21 plugins/Unity/IndicatorsLegacy/resources/indicators.qrc−7 plugins/Unity/Launcher/backend/launcherbackend.cpp+4−4 plugins/Unity/Launcher/backend/launcherbackend.h+1−1 plugins/Unity/Launcher/launchermodel.cpp+13−4 plugins/Unity/Launcher/quicklistmodel.cpp+1−1 plugins/Unity/bottombarvisibilitycommunicatorshell.cpp+15−1 plugins/Unity/bottombarvisibilitycommunicatorshell.h+6 plugins/Unity/categories.cpp+18−1 plugins/Unity/categories.h+1 plugins/Unity/categoryresults.cpp+21 plugins/Unity/categoryresults.h+2−1 plugins/Unity/iconutils.cpp+13−1 plugins/Unity/iconutils.h+1 plugins/Unity/plugin.cpp+2 plugins/Unity/preview.cpp+24−13 plugins/Unity/preview.h+7−2 plugins/Unity/result.cpp+82 plugins/Unity/result.h+69 plugins/Unity/scope.cpp+50−6 plugins/Unity/scope.h+10−2 plugins/Unity/variantutils.cpp+9 plugins/Unity/variantutils.h+1 plugins/Utils/CMakeLists.txt+2−1 plugins/Utils/plugin.cpp+2 plugins/Utils/unitymenumodelpaths.cpp+182 plugins/Utils/unitymenumodelpaths.h+82 po/ar.po+29−23 po/ast.po+265 po/az.po+29−23 po/bg.po+29−23 po/ca.po+50−38 po/de.po+47−41 po/el.po+29−23 po/en_AU.po+53−47 po/en_GB.po+29−23 po/eo.po+29−23 po/es.po+34−26 po/fi.po+43−35 po/fo.po+41−35 po/fr.po+29−23 po/gd.po+270 po/gl.po+79−71 po/he.po+79−73 po/hr.po+29−23 po/hu.po+29−23 po/hy.po+29−23 po/id.po+29−23 po/is.po+262 po/it.po+80−69 po/ja.po+29−23 po/kn.po+29−23 po/ko.po+29−23 po/ky.po+29−23 po/lo.po+261 po/lv.po+48−42 po/my.po+29−23 po/nb.po+29−23 po/nl.po+29−23 po/pl.po+29−23 po/pt_BR.po+79−71 po/ro.po+29−23 po/ru.po+59−49 po/si.po+29−23 po/sl.po+60−48 po/sr.po+29−23 po/sv.po+29−23 po/te.po+29−23 po/tr.po+58−51 po/ug.po+29−23 po/uk.po+52−42 po/unity8.pot+27−21 po/xh.po+261 po/zh_CN.po+29−23 po/zh_TW.po+29−23 run_on_device+1−1 src/Panel/Indicators/CMakeLists.txt−1 src/Panel/Indicators/servicefiles/CMakeLists.txt−14 src/Panel/Indicators/servicefiles/com.canonical.indicator.messages−10 tests/autopilot/unity8/application_lifecycle/__init__.py+20 tests/autopilot/unity8/application_lifecycle/tests/__init__.py tests/autopilot/unity8/application_lifecycle/tests/test_application_lifecycle.py+136 tests/autopilot/unity8/indicators_client/__init__.py−8 tests/autopilot/unity8/indicators_client/emulators/__init__.py−31 tests/autopilot/unity8/indicators_client/emulators/common.py−14 tests/autopilot/unity8/indicators_client/emulators/main_window.py−27 tests/autopilot/unity8/indicators_client/tests/__init__.py−91 tests/autopilot/unity8/indicators_client/tests/test_battery.py−114 tests/autopilot/unity8/shell/__init__.py+24 tests/autopilot/unity8/shell/emulators/dash.py+15−6 tests/autopilot/unity8/shell/emulators/hud.py+8−9 tests/autopilot/unity8/shell/emulators/main_window.py+3 tests/autopilot/unity8/shell/tests/__init__.py+19−8 tests/autopilot/unity8/shell/tests/test_hud.py+43−9 tests/mocks/AccountsService/AccountsService.cpp+16−4 tests/mocks/AccountsService/AccountsService.h+14−6 plugins/Unity/Indicators/Network/plugin.cpp → tests/mocks/QMenuModel/UnityMenuModel.qml+9−14 tests/mocks/QMenuModel/qmldir+1 tests/mocks/Ubuntu/DownloadDaemonListener/MockDownloadTracker.cpp+5 tests/mocks/Unity/Indicators/IndicatorsModel.qml+5−15 tests/mocks/Unity/fake_applications_scope.cpp+7 tests/mocks/Unity/fake_categories.cpp+6 tests/mocks/Unity/fake_categories.h+1 tests/mocks/Unity/fake_preview.cpp+2−5 tests/mocks/Unity/fake_preview.h−2 tests/mocks/Unity/fake_scope.cpp+13 tests/mocks/Unity/fake_scope.h+7−1 tests/mocks/libusermetrics/UserMetrics.cpp+6−2 tests/plugins/AccountsService/client.cpp+2−2 tests/plugins/ListViewWithPageHeader/CMakeLists.txt+6 tests/plugins/ListViewWithPageHeader/listviewwithpageheadertest.cpp+169 tests/plugins/ListViewWithPageHeader/listviewwithpageheadertestsectionexternalmodel.cpp+251 tests/plugins/ListViewWithPageHeader/test_sectionexternalmodel.qml+74 tests/plugins/Unity/Indicators/indicatorsmodeltest.cpp−15 tests/plugins/Unity/Launcher/launcherbackendtest.cpp+3−3 tests/plugins/Unity/Launcher/launchermodeltest.cpp+61−2 tests/plugins/Unity/previewbindingstest.cpp+27 tests/plugins/Unity/resultstest.cpp+13−8 tests/qmltests/CMakeLists.txt+2−2 tests/qmltests/Components/tst_CrossFadeImage.qml−125 tests/qmltests/Components/tst_LazyImage.qml+156 tests/qmltests/Components/tst_LazyImage/ImageControls.qml+67 tests/qmltests/Components/tst_LazyImage/portrait.png tests/qmltests/Components/tst_LazyImage/square.png tests/qmltests/Components/tst_LazyImage/wide.png tests/qmltests/Components/tst_PageHeader.qml+28 tests/qmltests/Components/tst_Showable.qml+27 tests/qmltests/Dash/Apps/tst_AppPreview.qml+75−2 tests/qmltests/Dash/tst_DashContent.qml+1−1 tests/qmltests/Dash/tst_GenericScopeView.qml+17 tests/qmltests/Greeter/tst_Infographics.qml+4−4 tests/qmltests/Greeter/tst_Phone.qml+15 tests/qmltests/Panel/tst_IndicatorRow.qml+3−3 tests/qmltests/tst_Shell.qml+68 tests/uqmlscene/main.cpp−2
Bottombar/Bottombar.qml+81−16
@@ -34,15 +34,32 @@ Item {
3434
3535 state: "hidden"
3636
37+ function hide() {
38+ dismissTimer.stop()
39+ bottombar.state = "hidden"
40+ }
41+
42+ onApplicationIsOnForegroundChanged: {
43+ if (!applicationIsOnForeground) {
44+ hide()
45+ }
46+ }
47+
3748 onStateChanged: {
3849 if (state == "hidden") {
3950 dismissTimer.stop()
51+ bottomBarVisibilityCommunicatorShell.forceHidden = false
4052 } else {
4153 dismissTimer.restart()
4254 }
4355 }
4456
4557 onPreventHidingChanged: {
58+ if (!preventHiding) {
59+ if (state == "hint" || state == "reveal")
60+ hide()
61+ }
62+
4663 if (dismissTimer.running) {
4764 dismissTimer.restart();
4865 }
@@ -50,7 +67,7 @@ Item {
5067
5168 Timer {
5269 id: dismissTimer
53− interval: 5000
70+ interval: 1000
5471 onTriggered: {
5572 if (!bottombar.preventHiding) {
5673 bottombar.state = "hidden"
@@ -103,24 +120,29 @@ Item {
103120
104121 EdgeDragArea {
105122 id: dragArea
123+ objectName: "hudDragArea"
106124 width: parent.width
107125 height: distanceThreshold
108126 anchors.bottom: parent.bottom
109127
110− distanceThreshold: units.gu(1)
128+ distanceThreshold: units.gu(8)
111129 enabled: !theHud.shown && bottombar.enabled && applicationIsOnForeground
112130 direction: Direction.Upwards
131+ maxSilenceTime: 2000
113132
114133 property int previousStatus: -1
115134 property real touchStartX: -1
116135
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+
117141 onStatusChanged: {
118142 if (status === DirectionalDragArea.WaitingForTouch) {
119143 if (previousStatus == DirectionalDragArea.Recognized) {
120144 if (hudButton.mouseOver) {
121145 hudButton.clicked()
122− } else {
123− bottombar.state = "hidden"
124146 }
125147 }
126148 } else if (status === DirectionalDragArea.Undecided) {
@@ -128,35 +150,78 @@ Item {
128150 touchStartX = touchX
129151 }
130152 } else if (status === DirectionalDragArea.Recognized) {
131− bottombar.state = "shown"
153+ bottombar.state = "hint"
132154 }
133155 previousStatus = status
134156 }
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+ }
135190 }
136191
137192 MouseArea {
138− anchors.fill: parent
139− enabled: bottombar.state == "shown"
193+ anchors {
194+ top: dismissArea.bottom
195+ left: parent.left
196+ right: parent.right
197+ bottom: parent.bottom
198+ }
199+ enabled: bottombar.state == "shown" && bottomBarVisibilityCommunicatorShell.position > 0
140200 onPressed: {
141201 bottombar.state = "hidden"
142202 }
143203 }
144204
145− InputFilterArea {
146− anchors.fill: parent
147− blockInput: (hudButton.opacity == 1)
148− }
149−
150205 states: [
151206 State {
152207 name: "hidden"
153− PropertyChanges { target: hudButton; opacity: 0}
154− PropertyChanges { target: hudButton; bottomMargin: units.gu(-1)}
208+ PropertyChanges { target: hudButton; opacity: 0 }
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 }
155220 },
156221 State {
157222 name: "shown"
158− PropertyChanges { target: hudButton; opacity: 1}
159− PropertyChanges { target: hudButton; bottomMargin: units.gu(0)}
223+ PropertyChanges { target: hudButton; opacity: 1 }
224+ PropertyChanges { target: hudButton; bottomMargin: units.gu(0) }
160225 }
161226 ]
162227}
CMakeLists.txt−1
@@ -96,7 +96,6 @@ enable_testing()
9696# Autopilot tests
9797include(autopilot)
9898declare_autopilot_test(shell unity8.shell ${CMAKE_SOURCE_DIR}/tests/autopilot/)
99−declare_autopilot_test(indicators_client unity8.indicators_client ${CMAKE_SOURCE_DIR}/tests/autopilot/)
10099
101100set(SHELL_APP unity8)
102101
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 {
169169 "edge": "bottom",
170170 "title": i18n.tr("Close"),
171171 "text": i18n.tr("Swipe up again to close the settings screen"),
172− "anchors.fill": demo.indicators,
172+ "anchors.fill": demo.indicators.content,
173173 });
174174 }
175175 if (d.bottomEdgeDemo) {
Components/EdgeDemoOverlay.qml+12−2
@@ -121,7 +121,6 @@ Showable {
121121
122122 Column {
123123 id: labelGroup
124− layer.enabled: true // otherwise the underlining on "Skip intro" jumps
125124 spacing: units.gu(3)
126125
127126 anchors {
@@ -150,10 +149,21 @@ Showable {
150149 text: i18n.tr("Skip intro")
151150 color: UbuntuColors.orange
152151 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+ }
154161
155162 MouseArea {
163+ // Make clickable area bigger than just the link because
164+ // otherwise, the edge demo will feel hard to dismiss.
156165 anchors.fill: parent
166+ anchors.margins: -units.gu(5)
157167 onClicked: overlay.doSkip()
158168 }
159169 }
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
1818import Ubuntu.Components 0.1
1919import Ubuntu.Components.Popups 0.1
2020import Ubuntu.Components.ListItems 0.1 as ListItem
21+import Unity 0.1
2122
2223Item {
2324 /*!
@@ -30,6 +31,7 @@ Item {
3031 property bool searchEntryEnabled: false
3132 property alias searchQuery: searchField.text
3233 property ListModel searchHistory: SearchHistoryModel {}
34+ property Scope scope
3335
3436 height: units.gu(8.5)
3537 implicitHeight: units.gu(8.5)
@@ -148,7 +150,7 @@ Item {
148150 hasClearButton: false
149151
150152 primaryItem: AbstractButton {
151− enabled: searchField.text != ""
153+ enabled: searchField.text != "" && !searchIndicator.running
152154 onClicked: {
153155 if (searchField.text != "") {
154156 searchHistory.addQuery(searchField.text)
@@ -158,8 +160,22 @@ Item {
158160 height: parent.height
159161 width: height
160162
163+ ActivityIndicator {
164+ id: searchIndicator
165+ objectName: "searchIndicator"
166+
167+ anchors {
168+ verticalCenter: parent.verticalCenter
169+ left: parent.left
170+ leftMargin: units.gu(0.5)
171+ }
172+
173+ running: opacity > 0
174+ }
175+
161176 Image {
162177 id: primaryImage
178+ objectName: "primaryImage"
163179 anchors {
164180 verticalCenter: parent.verticalCenter
165181 left: parent.left
@@ -167,6 +183,7 @@ Item {
167183 }
168184 width: units.gu(3)
169185 height: units.gu(3)
186+ visible: opacity > 0
170187 }
171188
172189 Item {
@@ -185,6 +202,32 @@ Item {
185202 onActiveFocusChanged: {
186203 if (!activeFocus) searchContainer.closePopover()
187204 }
205+
206+ states: [
207+ State {
208+ name: "searching"
209+ when: scope && scope.searchInProgress
210+ PropertyChanges { target: searchIndicator; running: true; opacity: 1 }
211+ PropertyChanges { target: primaryImage; opacity: 0 }
212+ },
213+ State {
214+ name: "idle"
215+ when: !scope || !scope.searchInProgress
216+ PropertyChanges { target: searchIndicator; opacity: 0 }
217+ PropertyChanges { target: primaryImage; opacity: 1 }
218+ }
219+ ]
220+
221+ transitions: [
222+ Transition {
223+ to: "searching"
224+ reversible: true
225+ SequentialAnimation {
226+ NumberAnimation { target: primaryImage; property: "opacity"; duration: UbuntuAnimation.FastDuration; easing.type: Easing.Linear }
227+ NumberAnimation { target: searchIndicator; property: "opacity"; duration: UbuntuAnimation.FastDuration; easing.type: Easing.Linear }
228+ }
229+ }
230+ ]
188231 }
189232
190233 states: [
Greeter/PinPadButton.qml → Components/PinPadButton.qmlrenamed

The content is the same.

Components/ResponsiveGridView.qml+1−1
@@ -67,7 +67,7 @@ Item {
6767
6868 function columnsForSpacing(spacing) {
6969 // 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)));
7171 }
7272
7373 property real allocatableHorizontalSpace: parent.width - columns * delegateWidth
Components/Showable.qml+11
@@ -30,6 +30,7 @@ Item {
3030 property bool created: true
3131 property bool required
3232 property bool __shouldShow: false
33+ property bool __skipShowAnimation: false
3334
3435 property list<QtObject> hides
3536 property var showAnimation
@@ -58,6 +59,11 @@ Item {
5859 }
5960 }
6061
62+ function showNow() {
63+ __skipShowAnimation = true;
64+ show();
65+ }
66+
6167 onCreatedChanged: {
6268 if (created && __shouldShow) {
6369 __reallyShow();
@@ -67,6 +73,7 @@ Item {
6773
6874 function __reallyShow() {
6975 if (!available) {
76+ __skipShowAnimation = false;
7077 return false;
7178 }
7279
@@ -80,11 +87,15 @@ Item {
8087 if (!showAnimation.running) {
8188 showAnimation.restart()
8289 }
90+ if (__skipShowAnimation) {
91+ showAnimation.complete();
92+ }
8393 } else {
8494 visible = true;
8595 }
8696
8797 shown = true;
98+ __skipShowAnimation = false;
8899 return true;
89100 }
90101
Components/Stage.qml+4−1
@@ -97,7 +97,9 @@ Showable {
9797 if (shouldUseScreenshots) {
9898 stage.__focusApplicationUsingScreenshots(stage.focusedApplication);
9999 } else {
100− stage.__focusActualApplication(stage.focusedApplicationWhenUsingScreenshots);
100+ if (stage.focusedApplicationWhenUsingScreenshots) {
101+ stage.__focusActualApplication(stage.focusedApplicationWhenUsingScreenshots);
102+ }
101103 }
102104 }
103105
@@ -244,6 +246,7 @@ Showable {
244246 */
245247 delayedHideScreenshots.start();
246248 } else {
249+ stage.focusedApplicationWhenUsingScreenshots = null;
247250 stage.__hideScreenshots();
248251 }
249252 }
Components/VolumeControl.qml+5−20
@@ -21,37 +21,22 @@ Item {
2121 id: root
2222 objectName: "volumeControl"
2323 visible: false
24− property int volume
2524
2625 QDBusActionGroup {
2726 id: actionGroup
2827 busType: 1
29− busName: "com.canonical.settings.sound"
30− objectPath: "/com/canonical/settings/sound"
28+ busName: "com.canonical.indicator.sound"
29+ objectPath: "/com/canonical/indicator/sound"
3130
32− property variant actionObject: action("volume")
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− }
31+ property variant actionObject: action("scroll")
4732 }
4833
4934 function volumeUp() {
50− actionGroup.actionObject.updateState(Math.min(1, volume/100 + 0.10));
35+ actionGroup.actionObject.activate(1);
5136 }
5237
5338 function volumeDown() {
54− actionGroup.actionObject.updateState(Math.max(0, volume/100 - 0.10));
39+ actionGroup.actionObject.activate(-1);
5540 }
5641
5742 Component.onCompleted: actionGroup.start()
Components/graphics/close@20.pngnew file

Binary file not shown.

Dash/Apps/AppPreview.qml+11
@@ -110,6 +110,10 @@ DashPreview {
110110 onFinished: {
111111 root.previewData.execute(progressBar.model[0].id, { })
112112 }
113+
114+ onError: {
115+ root.previewData.execute(progressBar.model[1].id, { "error": error });
116+ }
113117 }
114118
115119 }
@@ -187,12 +191,19 @@ DashPreview {
187191 ListItem.ThinDivider { }
188192
189193 AppReviews {
194+ id: appReviews
190195 objectName: "appReviews"
196+ // TODO: This should make this visible when the feature for reviews/comments is complete.
197+ visible: false
191198 anchors { left: parent.left; right: parent.right }
192199
193200 model: root.previewData.infoMap["comments"] ? root.previewData.infoMap["comments"].value : undefined
194201
195202 onSendReview: root.sendUserReview(review);
203+
204+ onEditing: {
205+ root.ensureVisible(appReviews.textArea);
206+ }
196207 }
197208 }
198209 }
Dash/Apps/AppReviews.qml+3
@@ -23,8 +23,10 @@ Column {
2323 id: root
2424
2525 property var model
26+ property alias textArea: reviewField
2627
2728 signal sendReview(string review)
29+ signal editing
2830
2931 spacing: units.gu(2)
3032 state: ""
@@ -93,6 +95,7 @@ Column {
9395 if(reviewField.focus){
9496 root.state = "editing";
9597 reviewField.selectAll();
98+ root.editing();
9699 }
97100 }
98101
Dash/Apps/RunningApplicationsGrid.qml+20−1
@@ -22,6 +22,8 @@ ResponsiveFlowView {
2222 clip: true
2323
2424 signal updateScreenshots
25+ property alias enableHeightBehavior: heightBehaviour.enabled
26+ property bool enableHeightBehaviorOnNextCreation: firstModel.count + secondModel.count == 0
2527
2628 Connections {
2729 target: shell
@@ -29,7 +31,24 @@ ResponsiveFlowView {
2931 onStageScreenshotsReadyChanged: if (shell.dashShown && shell.stageScreenshotsReady) updateScreenshots();
3032 }
3133
32− Behavior on height { NumberAnimation { duration: 200; easing.type: Easing.InOutQuad } }
34+ Behavior on height {
35+ id: heightBehaviour
36+ enabled: false
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+ }
3352
3453 property bool canEnableTerminationMode: true
3554
Dash/DashApps.qml+2
@@ -24,6 +24,7 @@ import "Apps"
2424
2525GenericScopeView {
2626 id: scopeView
27+ objectName: "DashApps"
2728
2829 // FIXME: a way to aggregate these models would be ideal
2930 property var mainStageApplicationsModel: shell.applicationManager.mainStageApplications
@@ -51,5 +52,6 @@ GenericScopeView {
5152
5253 onScopeChanged: {
5354 scopeView.scope.categories.overrideResults("recent", runningApplicationsModel);
55+ enableHeightBehaviorOnNextCreation = (mainStageApplicationsModel.count + sideStageApplicationModel.count == 0)
5456 }
5557}
Dash/DashContent.qml+1
@@ -114,6 +114,7 @@ Item {
114114 height: ListView.view.height
115115 asynchronous: true
116116 source: scopeMapper.map(scope.id)
117+ objectName: scope.id + " loader"
117118
118119 // these are needed for autopilot tests
119120 readonly property string scopeId: scope.id
Dash/DashPreview.qml+13
@@ -20,6 +20,7 @@ import Ubuntu.Components 0.1
2020Rectangle {
2121 id: root
2222
23+ property int keyboardSize: Qt.inputMethod.visible ? Qt.inputMethod.keyboardRectangle.height : 0
2324 property var previewData
2425
2526 property string title: ""
@@ -38,6 +39,14 @@ Rectangle {
3839 color: Qt.rgba(0, 0, 0, .3)
3940 clip: true
4041
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+
4150 Connections {
4251 target: shell.applicationManager
4352 onMainStageFocusedApplicationChanged: {
@@ -128,12 +137,16 @@ Rectangle {
128137
129138 Flickable {
130139 id: leftFlickable
140+ objectName: "leftFlickable"
131141 anchors.top: parent.top
132142 anchors.bottom: parent.bottom
133143 width: root.narrowMode ? contentRow.width : contentRow.width * root.previewWidthRatio
134144 contentHeight: leftColumn.height
145+ anchors.bottomMargin: root.keyboardSize
135146 clip: true
136147
148+ Behavior on contentY { NumberAnimation { duration: 300 } }
149+
137150 Column {
138151 id: leftColumn
139152 objectName: "leftColumn"
Dash/GenericScopeView.qml+47−11
@@ -21,20 +21,30 @@ import "../Components/ListItems" as ListItems
2121
2222ScopeView {
2323 id: scopeView
24− property alias previewShown: previewLoader.onScreen
24+ readonly property alias previewShown: previewLoader.onScreen
25+ property bool enableHeightBehaviorOnNextCreation: false
2526
2627 onIsCurrentChanged: {
2728 pageHeader.resetSearch();
29+ previewLoader.open = false;
2830 }
2931
3032 onMovementStarted: categoryView.showHeader()
3133
34+ onPositionedAtBeginning: categoryView.positionAtBeginning()
35+
3236 Binding {
3337 target: scopeView.scope
3438 property: "searchQuery"
3539 value: pageHeader.searchQuery
3640 }
3741
42+ Binding {
43+ target: pageHeader
44+ property: "searchQuery"
45+ value: scopeView.scope.searchQuery
46+ }
47+
3848 Connections {
3949 target: panel
4050 onSearchClicked: if (isCurrent) {
@@ -43,8 +53,15 @@ ScopeView {
4353 }
4454 }
4555
56+ Connections {
57+ target: scopeView.scope
58+ onShowDash: previewLoader.open = false;
59+ onHideDash: previewLoader.open = false;
60+ }
61+
4662 ScopeListView {
4763 id: categoryView
64+ objectName: "categoryListView"
4865 anchors.fill: parent
4966 model: scopeView.categories
5067 forceNoClip: previewLoader.onScreen
@@ -52,13 +69,14 @@ ScopeView {
5269 onAtYEndChanged: if (atYEnd) endReached()
5370 onMovingChanged: if (moving && atYEnd) endReached()
5471
55− property int expandedIndex: -1
72+ property string expandedCategoryId: ""
5673
5774 delegate: ListItems.Base {
5875 highlightWhenPressed: false
5976
6077 readonly property bool expandable: rendererLoader.item ? rendererLoader.item.expandable : false
6178 readonly property bool filtered: rendererLoader.item ? rendererLoader.item.filter : true
79+ readonly property string category: categoryId
6280
6381 Loader {
6482 id: rendererLoader
@@ -68,9 +86,13 @@ ScopeView {
6886 right: parent.right
6987 }
7088
71− source: getRenderer(model.renderer, model.contentType)
89+ source: getRenderer(model.renderer, model.contentType, model.rendererHint)
7290
7391 onLoaded: {
92+ if (item.enableHeightBehavior !== undefined && item.enableHeightBehaviorOnNextCreation !== undefined) {
93+ item.enableHeightBehavior = scopeView.enableHeightBehaviorOnNextCreation;
94+ scopeView.enableHeightBehaviorOnNextCreation = false;
95+ }
7496 if (source.toString().indexOf("Apps/RunningApplicationsGrid.qml") != -1) {
7597 // TODO: the running apps grid doesn't support standard scope results model yet
7698 item.firstModel = Qt.binding(function() { return results.firstModel })
@@ -80,13 +102,19 @@ ScopeView {
80102 }
81103 item.objectName = Qt.binding(function() { return categoryId })
82104 if (item.expandable) {
83− var shouldFilter = index != categoryView.expandedIndex;
105+ var shouldFilter = categoryId != categoryView.expandedCategoryId;
84106 if (shouldFilter != item.filter) {
85107 item.filter = shouldFilter;
86108 }
87109 }
88110 }
89111
112+ Component.onDestruction: {
113+ if (item.enableHeightBehavior !== undefined && item.enableHeightBehaviorOnNextCreation !== undefined) {
114+ scopeView.enableHeightBehaviorOnNextCreation = item.enableHeightBehaviorOnNextCreation;
115+ }
116+ }
117+
90118 Connections {
91119 target: rendererLoader.item
92120 onClicked: {
@@ -116,10 +144,10 @@ ScopeView {
116144 }
117145 Connections {
118146 target: categoryView
119− onExpandedIndexChanged: {
147+ onExpandedCategoryIdChanged: {
120148 var item = rendererLoader.item;
121149 if (item.expandable) {
122− var shouldFilter = index != categoryView.expandedIndex;
150+ var shouldFilter = categoryId != categoryView.expandedCategoryId;
123151 if (shouldFilter != item.filter) {
124152 // If the filter animation will be seen start it, otherwise, just flip the switch
125153 var shrinkingVisible = shouldFilter && y + item.collapsedHeight < categoryView.height;
@@ -150,10 +178,10 @@ ScopeView {
150178 return "";
151179 }
152180 onClicked: {
153− if (categoryView.expandedIndex != delegateIndex)
154− categoryView.expandedIndex = delegateIndex;
181+ if (categoryView.expandedCategoryId != delegate.category)
182+ categoryView.expandedCategoryId = delegate.category;
155183 else
156− categoryView.expandedIndex = -1;
184+ categoryView.expandedCategoryId = "";
157185 }
158186 }
159187 pageHeader: PageHeader {
@@ -162,6 +190,7 @@ ScopeView {
162190 width: categoryView.width
163191 text: scopeView.scope.name
164192 searchEntryEnabled: true
193+ scope: scopeView.scope
165194 }
166195 }
167196
@@ -171,7 +200,7 @@ ScopeView {
171200 }
172201 }
173202
174− function getRenderer(rendererId, contentType) {
203+ function getRenderer(rendererId, contentType, rendererHint) {
175204 if (rendererId == "default") {
176205 rendererId = getDefaultRendererId(contentType);
177206 }
@@ -179,10 +208,16 @@ ScopeView {
179208 case "grid": {
180209 switch (contentType) {
181210 case "video": return "Generic/GenericFilterGridPotrait.qml";
211+ case "music": return "Music/MusicFilterGrid.qml";
182212 default: return "Generic/GenericFilterGrid.qml";
183213 }
184214 }
185− case "carousel": return "Generic/GenericCarousel.qml";
215+ case "carousel": {
216+ switch (contentType) {
217+ case "music": return "Music/MusicCarousel.qml";
218+ default: return "Generic/GenericCarousel.qml";
219+ }
220+ }
186221 case "special": {
187222 switch (contentType) {
188223 case "apps": return "Apps/RunningApplicationsGrid.qml";
@@ -246,6 +281,7 @@ ScopeView {
246281 }
247282
248283 Loader {
284+ objectName: "previewLoader"
249285 id: previewLoader
250286 property var previewData
251287 height: effect.bottomGapPx - effect.topGapPx
Dash/Music/MusicFilterGrid.qml+12−2
@@ -29,19 +29,29 @@ FilterGrid {
2929 readonly property int iconWidth: (width / columns) * 0.8
3030 readonly property int iconHeight: iconWidth
3131
32− signal clicked(int index)
32+ signal clicked(int index, var delegateItem, real itemY)
33+ signal pressAndHold(int index, var delegateItem, real itemY)
3334
3435 delegate: AlbumTile {
36+ id: tile
3537 objectName: "delegate" + index
3638 width: filterGrid.cellWidth
3739 height: filterGrid.cellHeight
3840 iconWidth: filterGrid.iconWidth
3941 iconHeight: filterGrid.iconHeight
42+
4043 artist: model.title
4144 album: model.comment
4245 source: model.icon
46+
4347 onClicked: {
44− filterGrid.clicked(index);
48+ var data = { model: model }
49+ filterGrid.clicked(index, data, tile.y)
50+ }
51+
52+ onPressAndHold: {
53+ var data = { model: model }
54+ filterGrid.pressAndHold(index, data, tile.y)
4555 }
4656 }
4757}
Greeter/Gradient.js+7−3
@@ -15,8 +15,12 @@
1515 */
1616
1717function threeColorByIndex(index, total, colors) {
18− var red, green, blue
19− var p = index / total
18+ var red, green, blue;
19+ var p = 0.0;
20+
21+ if(total > 0) {
22+ p = index / total;
23+ }
2024
2125 if (p < 0.5) {
2226 red = (colors.main.r * p * 2.0) + colors.start.r * (0.5 - p) * 2.0;
@@ -28,5 +32,5 @@ function threeColorByIndex(index, total, colors) {
2832 blue = colors.end.b * (p - 0.5) * 2.0 + colors.main.b * (1.0 - p) * 2.0;
2933 }
3034
31− return Qt.rgba(red, green, blue, 1)
35+ return Qt.rgba(red, green, blue, 1);
3236}
Greeter/GreeterContent.qml+12−8
@@ -47,7 +47,7 @@ MouseArea {
4747 id: wallpaper
4848 objectName: "wallpaper"
4949 anchors.fill: parent
50− fadeInFirst: false
50+ fillMode: Image.PreserveAspectCrop
5151 }
5252
5353 // See Shell.qml's backgroundSettings treatment for why we need a separate
@@ -135,19 +135,23 @@ MouseArea {
135135
136136 Infographics {
137137 id: infographics
138+ objectName: "infographics"
138139 height: narrowMode ? parent.height : 0.75 * parent.height
139140 model: greeterContentLoader.infographicModel
140141
141− Component.onCompleted: infographics.updateUsername(greeterContentLoader.currentIndex)
142+ property string selectedUser
143+ property string infographicUser: AccountsService.statsWelcomeScreen ? selectedUser : ""
144+ onInfographicUserChanged: greeterContentLoader.infographicModel.username = infographicUser
142145
143− Connections {
144− target: root
145− onSelected: infographics.updateUsername(uid)
146+ Component.onCompleted: {
147+ selectedUser = greeterContentLoader.model.data(greeterContentLoader.currentIndex, LightDM.UserRoles.NameRole)
148+ greeterContentLoader.infographicModel.username = infographicUser
149+ greeterContentLoader.infographicModel.readyForDataChange()
146150 }
147151
148− function updateUsername(uid) {
149− greeterContentLoader.infographicModel.username = greeterContentLoader.model.data(uid, LightDM.UserRoles.NameRole)
150− greeterContentLoader.infographicModel.readyForDataChangeSlot();
152+ Connections {
153+ target: root
154+ onSelected: infographics.selectedUser = greeterContentLoader.model.data(uid, LightDM.UserRoles.NameRole)
151155 }
152156
153157 anchors {
Greeter/Infographics.qml+10−1
@@ -29,21 +29,30 @@ Item {
2929 Connections {
3030 target: model
3131
32+ onDataAboutToAppear: startHideAnimation() // hide "no data" label
3233 onDataAppeared: startShowAnimation()
3334
3435 onDataAboutToChange: startHideAnimation()
35−
3636 onDataChanged: startShowAnimation()
3737
3838 onDataAboutToDisappear: startHideAnimation()
39+ onDataDisappeared: startShowAnimation() // show "no data" label
3940 }
4041
4142 function startShowAnimation() {
43+ dotHideAnimTimer.stop()
44+ circleShrinkAnimTimer.stop()
45+ notification.hideAnim.stop()
46+
4247 dotShowAnimTimer.startFromBeginning()
4348 notification.showAnim.start()
4449 }
4550
4651 function startHideAnimation() {
52+ dotShowAnimTimer.stop()
53+ circleGrowAnimTimer.stop()
54+ notification.showAnim.stop()
55+
4756 dotHideAnimTimer.startFromBeginning()
4857 notification.hideAnim.start()
4958 }
MouseTouchAdaptor.cpp+29−12
@@ -39,24 +39,16 @@ Qt::MouseButton translateMouseButton(xcb_button_t detail)
3939} // end of anonymous namespace
4040
4141MouseTouchAdaptor::MouseTouchAdaptor()
42− : m_targetWindow(0)
43− , m_leftButtonIsPressed(false)
42+ : m_leftButtonIsPressed(false)
4443{
4544 m_touchDevice = new QTouchDevice;
4645 m_touchDevice->setType(QTouchDevice::TouchScreen);
4746 QWindowSystemInterface::registerTouchDevice(m_touchDevice);
4847}
4948
50−void MouseTouchAdaptor::setTargetWindow(QWindow *window)
51−{
52− m_targetWindow = window;
53−}
54−
5549bool MouseTouchAdaptor::nativeEventFilter(const QByteArray & eventType,
5650 void * message, long * /*result*/)
5751{
58− Q_ASSERT(m_targetWindow);
59−
6052 if (eventType != "xcb_generic_event_t") {
6153 // wrong backend.
6254 qWarning("MouseTouchAdaptor: XCB backend not in use. Adaptor inoperative!");
@@ -91,7 +83,9 @@ bool MouseTouchAdaptor::handleButtonPress(xcb_button_press_event_t *pressEvent)
9183
9284 QPoint windowPos(pressEvent->event_x, pressEvent->event_y);
9385
94− QTouchEventSequence touchEvent = QTest::touchEvent(m_targetWindow, m_touchDevice,
86+ QWindow *targetWindow = findQWindowWithXWindowID(static_cast<WId>(pressEvent->event));
87+
88+ QTouchEventSequence touchEvent = QTest::touchEvent(targetWindow, m_touchDevice,
9589 false /* autoCommit */);
9690 touchEvent.press(0 /* touchId */, windowPos);
9791 touchEvent.commit(false /* processEvents */);
@@ -110,7 +104,9 @@ bool MouseTouchAdaptor::handleButtonRelease(xcb_button_release_event_t *releaseE
110104
111105 QPoint windowPos(releaseEvent->event_x, releaseEvent->event_y);
112106
113− QTouchEventSequence touchEvent = QTest::touchEvent(m_targetWindow, m_touchDevice,
107+ QWindow *targetWindow = findQWindowWithXWindowID(static_cast<WId>(releaseEvent->event));
108+
109+ QTouchEventSequence touchEvent = QTest::touchEvent(targetWindow, m_touchDevice,
114110 false /* autoCommit */);
115111 touchEvent.release(0 /* touchId */, windowPos);
116112 touchEvent.commit(false /* processEvents */);
@@ -127,10 +123,31 @@ bool MouseTouchAdaptor::handleMotionNotify(xcb_motion_notify_event_t *event)
127123
128124 QPoint windowPos(event->event_x, event->event_y);
129125
130− QTouchEventSequence touchEvent = QTest::touchEvent(m_targetWindow, m_touchDevice,
126+ QWindow *targetWindow = findQWindowWithXWindowID(static_cast<WId>(event->event));
127+
128+ QTouchEventSequence touchEvent = QTest::touchEvent(targetWindow, m_touchDevice,
131129 false /* autoCommit */);
132130 touchEvent.move(0 /* touchId */, windowPos);
133131 touchEvent.commit(false /* processEvents */);
134132
135133 return true;
136134}
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 @@
2020#define MOUSE_TOUCH_ADAPTOR_H
2121
2222#include <QtCore/QAbstractNativeEventFilter>
23+#include <QWindow>
2324#include <xcb/xcb.h>
2425
2526class QMouseEvent;
2627class QTouchDevice;
27−class QWindow;
2828
2929// Transforms QMouseEvents into single-finger QTouchEvents.
3030class MouseTouchAdaptor : public QAbstractNativeEventFilter {
@@ -32,9 +32,6 @@ class MouseTouchAdaptor : public QAbstractNativeEventFilter {
3232public:
3333 MouseTouchAdaptor();
3434
35− // The window that will receive the generated QTouchEvents
36− void setTargetWindow(QWindow *window);
37−
3835 // Filters mouse events and posts the equivalent QTouchEvents.
3936 virtual bool nativeEventFilter(const QByteArray & eventType, void *message, long *result);
4037
@@ -43,8 +40,8 @@ private:
4340 bool handleButtonPress(xcb_button_press_event_t *pressEvent);
4441 bool handleButtonRelease(xcb_button_release_event_t *releaseEvent);
4542 bool handleMotionNotify(xcb_motion_notify_event_t *event);
43+ QWindow *findQWindowWithXWindowID(WId windowId);
4644
47− QWindow *m_targetWindow;
4845 QTouchDevice *m_touchDevice;
4946 bool m_leftButtonIsPressed;
5047};
Notifications/Notification.qml+42−1
@@ -17,6 +17,8 @@
1717import QtQuick 2.0
1818import Ubuntu.Components 0.1
1919import Unity.Notifications 1.0
20+import QMenuModel 0.1
21+import Utils 0.1
2022
2123UbuntuShape {
2224 id: notification
@@ -38,6 +40,24 @@ UbuntuShape {
3840
3941 clip: true
4042
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+
4161 Behavior on implicitHeight {
4262 id: heightBehavior
4363
@@ -141,6 +161,27 @@ UbuntuShape {
141161 }
142162 }
143163
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+
144185 Item {
145186 id: buttonRow
146187
@@ -195,7 +236,7 @@ UbuntuShape {
195236 top: parent.top
196237 bottom: parent.bottom
197238 }
198− gradient: notification.hints == Notification.ButtonTint ? UbuntuColors.orangeGradient : UbuntuColors.greyGradient
239+ gradient: notification.hints["x-canonical-private-button-tint"] == "true" ? UbuntuColors.orangeGradient : UbuntuColors.greyGradient
199240 visible: width > 0
200241 onClicked: notification.notification.invokeAction(actionRepeater.itemAt(0).actionId)
201242 }
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 @@
1717import QtQuick 2.0
1818import Ubuntu.Components 0.1
1919import Ubuntu.Gestures 0.1
20+import Unity.Indicators 0.1 as Indicators
2021
2122import "../Components"
2223import "../Components/ListItems"
@@ -36,6 +37,7 @@ Showable {
3637 property real visualBottom: Math.max(y+height, y+indicatorRow.y+indicatorRow.height)
3738 property bool contentEnabled: true
3839 property bool initalizeItem: true
40+ readonly property alias content: menuContent
3941
4042 // TODO: Perhaps we need a animation standard for showing/hiding? Each showable seems to
4143 // use its own values. Need to ask design about this.
@@ -249,8 +251,10 @@ Showable {
249251 anchors.fill: indicatorRow
250252 }
251253
252− IndicatorsDataModel {
254+ Indicators.IndicatorsModel {
253255 id: indicatorsModel
256+
257+ Component.onCompleted: load()
254258 }
255259
256260 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 @@
1818 */
1919
2020import QtQuick 2.0
21−import Unity.IndicatorsLegacy 0.1 as Indicators
21+import Unity.Indicators 0.1 as Indicators
2222
2323Indicators.IndicatorPage {
2424 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 @@
1919
2020import QtQuick 2.0
2121import Ubuntu.Components 0.1
22−import Unity.IndicatorsLegacy 0.1 as Indicators
22+import Unity.Indicators 0.1 as Indicators
2323
2424Indicators.IndicatorWidget {
2525 id: indicatorWidget
2626
27− enabled:true
2827 width: itemRow.width + units.gu(0.5)
2928
30− property alias label: itemLabel.text
31− property alias iconSource: itemImage.source
29+ property alias leftLabel: itemLeftLabel.text
30+ property alias rightLabel: itemRightLabel.text
31+ property var icons: undefined
3232
3333 Row {
3434 id: itemRow
@@ -40,19 +40,43 @@ Indicators.IndicatorWidget {
4040 }
4141 spacing: units.gu(0.5)
4242
43− // FIXME : Should us Ubuntu.Icon . results in low res images
44− Image {
45− id: itemImage
46− objectName: "itemImage"
47− visible: source != ""
48− height: indicatorWidget.iconSize
49− width: indicatorWidget.iconSize
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"
5050 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+ }
5175 }
5276
5377 Label {
54− id: itemLabel
55− objectName: "itemLabel"
78+ id: itemRightLabel
79+ objectName: "rightLabel"
5680 color: Theme.palette.selected.backgroundText
5781 opacity: 0.8
5882 font.family: "Ubuntu"
@@ -62,16 +86,18 @@ Indicators.IndicatorWidget {
6286 }
6387 }
6488
65− onActionStateChanged: {
66− if (action == undefined || !action.valid) {
67− return;
68− }
69−
70− if (action.state == undefined) {
89+ onRootActionStateChanged: {
90+ if (rootActionState == undefined) {
91+ leftLabel = "";
92+ rightLabel = "";
93+ icons = undefined;
94+ enabled = false;
7195 return;
7296 }
7397
74− label = action.state[Indicators.ActionState.Label];
75− iconSource = "image://theme/" + action.state[Indicators.ActionState.IconSource];
98+ leftLabel = rootActionState.leftLabel ? rootActionState.leftLabel : "";
99+ rightLabel = rootActionState.rightLabel ? rootActionState.rightLabel : "";
100+ icons = rootActionState.icons;
101+ enabled = rootActionState.visible;
76102 }
77103}
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 @@
2020import QtQuick 2.0
2121import Ubuntu.Components 0.1
2222import Ubuntu.Components.ListItems 0.1 as ListItem
23−import Unity.IndicatorsLegacy 0.1 as Indicators
23+import Unity.Indicators 0.1 as Indicators
2424import "../.."
2525
2626Page {
@@ -28,8 +28,10 @@ Page {
2828 anchors.fill: parent
2929 title: "Plugin list"
3030
31− IndicatorsDataModel {
31+ Indicators.IndicatorsModel {
3232 id: indicatorsModel
33+
34+ Component.onCompleted: load()
3335 }
3436
3537 ListView {
@@ -38,24 +40,24 @@ Page {
3840 anchors.fill: parent
3941 model: indicatorsModel
4042
41− delegate: Indicators.MenuItem {
43+ delegate: Indicators.FramedMenuItem {
4244 anchors.left: parent.left
4345 anchors.right: parent.right
44− progression: isValid
4546 objectName: identifier
4647
47− Label {
48− anchors.left: parent.left
49− anchors.leftMargin: units.gu(0.5)
50− anchors.verticalCenter: parent.verticalCenter
51− text: title
52− }
48+ text: title
5349
5450 onClicked: {
55− if (progression) {
56− var new_page = Qt.createComponent("IndicatorsPage.qml");
57− page.pageStack.push(new_page.createObject(pages), {"indicatorProperties" : model.indicatorProperties, "pageSource" : model.pageSource});
58− }
51+ var new_page = Qt.createComponent("IndicatorsPage.qml");
52+ page.pageStack.push(new_page.createObject(pages), {"indicatorProperties" : model.indicatorProperties, "pageSource" : model.pageSource});
53+ }
54+
55+ Rectangle {
56+ id: background
57+
58+ anchors.fill: parent
59+ color: "#221e1c"
60+ z: -1
5961 }
6062 }
6163 }
Panel/Indicators/client/IndicatorsTree.qml+4
@@ -44,6 +44,10 @@ Page {
4444 menuObjectPath: page.deviceMenuObjectPath
4545 }
4646
47+ Indicators.RootActionState {
48+ menu: unityModel
49+ }
50+
4751 Indicators.ModelPrinter {
4852 id: printer
4953 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 {
100100 Tab {
101101 id: tab
102102 objectName: model.identifier
103− title: model.title
104103
105104 page: Page {
106105 Loader {
106+ id: loader
107107 clip: true
108108 anchors.fill: parent
109109 source: pageSource
110110 asynchronous: true
111111
112− property bool contentActive: content.__contentActive
112+ readonly property bool indexActive: index >= 0 && index < menuActivator.count && menuActivator.content[index].active
113+ readonly property bool contentActive: content.__contentActive && indexActive
113114
114115 onContentActiveChanged: {
115116 if (contentActive && item) {
@@ -136,6 +137,12 @@ MainView {
136137 item.start()
137138 }
138139 }
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+ }
139146 }
140147 }
141148 }
@@ -146,6 +153,16 @@ MainView {
146153 id: contentReleaseTimer
147154
148155 interval: contentReleaseInterval
149− onTriggered: content.__contentActive = false
156+ onTriggered: {
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
150167 }
151168}
Shell.qml+26−13
@@ -23,6 +23,7 @@ import Ubuntu.Gestures 0.1
2323import Unity.Launcher 0.1
2424import LightDM 0.1 as LightDM
2525import Powerd 0.1
26+import SessionBroadcast 0.1
2627import "Dash"
2728import "Greeter"
2829import "Launcher"
@@ -83,6 +84,8 @@ FocusScope {
8384
8485 readonly property bool applicationFocused: !!applicationManager.mainStageFocusedApplication
8586 || !!applicationManager.sideStageFocusedApplication
87+ // Used for autopilot testing.
88+ readonly property string currentFocusedAppId: ApplicationManager.focusedApplicationId
8689
8790 readonly property bool fullscreenMode: {
8891 if (greeter.shown || lockscreen.shown) {
@@ -195,6 +198,7 @@ FocusScope {
195198
196199 anchors.fill: parent
197200 source: shell.background
201+ fillMode: Image.PreserveAspectCrop
198202 }
199203
200204 Rectangle {
@@ -531,7 +535,7 @@ FocusScope {
531535 // is active. This usually indicates something like a phone call.
532536 if (status == Powerd.Off && (flags & Powerd.UseProximity) == 0) {
533537 powerConnection.setFocused(false);
534− greeter.show();
538+ greeter.showNow();
535539 } else if (status == Powerd.On) {
536540 powerConnection.setFocused(true);
537541 }
@@ -545,6 +549,17 @@ FocusScope {
545549 }
546550 }
547551
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+
548563 Item {
549564 id: overlay
550565
@@ -608,9 +623,10 @@ FocusScope {
608623 }
609624
610625 Bottombar {
626+ id: bottombar
611627 theHud: hud
612628 anchors.fill: parent
613− enabled: !panel.indicators.shown
629+ enabled: hud.available
614630 applicationIsOnForeground: applicationFocused
615631 }
616632
@@ -632,19 +648,10 @@ FocusScope {
632648 width: parent.width
633649 dragAreaWidth: shell.edgeSize
634650 available: (!greeter.shown || greeter.narrowMode) && edgeDemo.launcherEnabled
635− onDashItemSelected: {
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− }
651+ onDashItemSelected: showHome()
645652 onDash: {
646653 if (stages.shown) {
647− dash.setCurrentScope("applications.scope", true, false)
654+ dash.setCurrentScope("applications.scope", true /* animate */, true /* reset */)
648655 stages.hide();
649656 launcher.hide();
650657 }
@@ -657,6 +664,7 @@ FocusScope {
657664 if (shown) {
658665 panel.indicators.hide()
659666 hud.hide()
667+ bottombar.hide()
660668 }
661669 }
662670 }
@@ -749,4 +757,9 @@ FocusScope {
749757 indicators: panel.indicators
750758 underlay: underlay
751759 }
760+
761+ Connections {
762+ target: SessionBroadcast
763+ onShowHome: showHome()
764+ }
752765}
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+
1245unity8 (7.81.3+13.10.20130916-0ubuntu1) saucy; urgency=low
2246
3247 [ Michael Zanetti ]
debian/control+4−9
@@ -14,14 +14,12 @@ Build-Depends: cmake,
1414 libjson-perl,
1515 libnih-dbus-dev,
1616 libnih-dev,
17− libnm-glib-dev,
18− libnm-util-dev,
1917 libpulse-dev,
2018 libqmenumodel-dev (>= 0.2.7),
2119 libqt5v8-5-private-dev,
2220 libsigc++-2.0-dev,
2321 libunity-api-dev (>= 7.80.3),
24− libunity-core-6.0-dev (<< 7.80),
22+ libunity-core-6.0-dev (>= 7.1.1),
2523 libunity-dev (>= 7.0.12),
2624 libunity-mir-dev,
2725 libunity-scopes-json-def-phone,
@@ -74,23 +72,20 @@ Depends: gsettings-desktop-schemas,
7472 qtdeclarative5-unity-notifications-plugin | unity-notifications-impl,
7573 qtdeclarative5-xmllistmodel-plugin,
7674 unity-launcher-impl-3,
77− unity-notifications-impl-1,
75+ unity-notifications-impl-2,
7876 unity8-fake-env | qtubuntu-shell,
7977 unity8-private (= ${binary:Version}),
8078 unity8-private | unity-launcher-impl,
8179 ${misc:Depends},
8280 ${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)
8783Description: Unity 8 shell
8884 The Unity 8 shell is the primary user interface for Ubuntu devices.
8985
9086Package: unity8-autopilot
9187Architecture: all
9288Depends: gir1.2-glib-2.0,
93− indicators-client (>= ${source:Version}),
9489 libautopilot-qt,
9590 libqt5test5,
9691 libqt5widgets5,
debian/unity8-private.install+1
@@ -3,6 +3,7 @@ usr/lib/*/unity8/qml/HudClient
33usr/lib/*/unity8/qml/LightDM
44usr/lib/*/unity8/qml/ListViewWithPageHeader
55usr/lib/*/unity8/qml/Powerd
6+usr/lib/*/unity8/qml/SessionBroadcast
67usr/lib/*/unity8/qml/Ubuntu
78usr/lib/*/unity8/qml/Unity
89usr/lib/*/unity8/qml/Utils
debian/unity8.install−1
@@ -13,4 +13,3 @@ usr/share/unity8/Panel
1313usr/share/unity8/Shell.qml
1414usr/share/unity8/SideStage
1515usr/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)
113113
114114 // The testability driver is only loaded by QApplication but not by QGuiApplication.
115115 // 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")) {
117117 QLibrary testLib(QLatin1String("qttestability"));
118118 if (testLib.load()) {
119119 typedef void (*TasInitialize)(void);
@@ -144,7 +144,6 @@ int startShell(int argc, const char** argv, void* server)
144144 MouseTouchAdaptor *mouseTouchAdaptor = 0;
145145 if (args.contains(QLatin1String("-mousetouch"))) {
146146 mouseTouchAdaptor = new MouseTouchAdaptor;
147− mouseTouchAdaptor->setTargetWindow(view);
148147 application->installNativeEventFilter(mouseTouchAdaptor);
149148 }
150149
@@ -161,10 +160,10 @@ int startShell(int argc, const char** argv, void* server)
161160 prependImportPaths(view->engine(), ::overrideImportPaths());
162161 appendImportPaths(view->engine(), ::fallbackImportPaths());
163162
164− QStringList importPath = view->engine()->importPathList().filter("qt5/imports");
165163 if (isUbuntuMirServer) {
166− importPath.first().append("/Unity-Mir");
167− view->engine()->addImportPath(importPath.first());
164+ QStringList importPaths = view->engine()->importPathList();
165+ importPaths.replaceInStrings(QRegExp("qt5/imports$"), "qt5/imports/Unity-Mir");
166+ view->engine()->setImportPathList(importPaths);
168167 }
169168
170169 view->setSource(source);
plugins/AccountsService/AccountsService.cpp+22−3
@@ -32,7 +32,7 @@ AccountsService::AccountsService(QObject* parent)
3232 this, SLOT(maybeChanged(const QString &)));
3333}
3434
35−QString AccountsService::getUser()
35+QString AccountsService::user() const
3636{
3737 return m_user;
3838}
@@ -44,9 +44,10 @@ void AccountsService::setUser(const QString &user)
4444
4545 updateDemoEdges();
4646 updateBackgroundFile();
47+ updateStatsWelcomeScreen();
4748}
4849
49−bool AccountsService::getDemoEdges()
50+bool AccountsService::demoEdges() const
5051{
5152 return m_demoEdges;
5253}
@@ -57,11 +58,16 @@ void AccountsService::setDemoEdges(bool demoEdges)
5758 m_service->setUserProperty(m_user, "com.canonical.unity.AccountsService", "demo-edges", demoEdges);
5859}
5960
60−QString AccountsService::getBackgroundFile()
61+QString AccountsService::backgroundFile() const
6162{
6263 return m_backgroundFile;
6364}
6465
66+bool AccountsService::statsWelcomeScreen() const
67+{
68+ return m_statsWelcomeScreen;
69+}
70+
6571void AccountsService::updateDemoEdges()
6672{
6773 auto demoEdges = m_service->getUserProperty(m_user, "com.canonical.unity.AccountsService", "demo-edges").toBool();
@@ -80,6 +86,15 @@ void AccountsService::updateBackgroundFile()
8086 }
8187}
8288
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+
8398void AccountsService::propertiesChanged(const QString &user, const QString &interface, const QStringList &changed)
8499{
85100 if (m_user != user) {
@@ -90,6 +105,10 @@ void AccountsService::propertiesChanged(const QString &user, const QString &inte
90105 if (changed.contains("demo-edges")) {
91106 updateDemoEdges();
92107 }
108+ } else if (interface == "com.ubuntu.touch.AccountsService.SecurityPrivacy") {
109+ if (changed.contains("StatsWelcomeScreen")) {
110+ updateStatsWelcomeScreen();
111+ }
93112 }
94113}
95114
plugins/AccountsService/AccountsService.h+13−6
@@ -28,30 +28,35 @@ class AccountsService: public QObject
2828{
2929 Q_OBJECT
3030 Q_PROPERTY (QString user
31− READ getUser
31+ READ user
3232 WRITE setUser
3333 NOTIFY userChanged)
3434 Q_PROPERTY (bool demoEdges
35− READ getDemoEdges
35+ READ demoEdges
3636 WRITE setDemoEdges
3737 NOTIFY demoEdgesChanged)
3838 Q_PROPERTY (QString backgroundFile
39− READ getBackgroundFile
39+ READ backgroundFile
4040 NOTIFY backgroundFileChanged)
41+ Q_PROPERTY (bool statsWelcomeScreen
42+ READ statsWelcomeScreen
43+ NOTIFY statsWelcomeScreenChanged)
4144
4245public:
4346 explicit AccountsService(QObject *parent = 0);
4447
45− QString getUser();
48+ QString user() const;
4649 void setUser(const QString &user);
47− bool getDemoEdges();
50+ bool demoEdges() const;
4851 void setDemoEdges(bool demoEdges);
49− QString getBackgroundFile();
52+ QString backgroundFile() const;
53+ bool statsWelcomeScreen() const;
5054
5155Q_SIGNALS:
5256 void userChanged();
5357 void demoEdgesChanged();
5458 void backgroundFileChanged();
59+ void statsWelcomeScreenChanged();
5560
5661private Q_SLOTS:
5762 void propertiesChanged(const QString &user, const QString &interface, const QStringList &changed);
@@ -60,11 +65,13 @@ private Q_SLOTS:
6065private:
6166 void updateDemoEdges();
6267 void updateBackgroundFile();
68+ void updateStatsWelcomeScreen();
6369
6470 AccountsServiceDBusAdaptor *m_service;
6571 QString m_user;
6672 bool m_demoEdges;
6773 QString m_backgroundFile;
74+ bool m_statsWelcomeScreen;
6875};
6976
7077#endif
plugins/AccountsService/AccountsServiceDBusAdaptor.cpp+15−15
@@ -24,13 +24,13 @@
2424
2525AccountsServiceDBusAdaptor::AccountsServiceDBusAdaptor(QObject* parent)
2626 : QObject(parent),
27− accounts_manager(NULL),
28− users()
27+ m_accountsManager(NULL),
28+ m_users()
2929{
30− auto connection = QDBusConnection::SM_BUSNAME();
31− auto interface = connection.interface();
30+ QDBusConnection connection = QDBusConnection::SM_BUSNAME();
31+ QDBusConnectionInterface *interface = connection.interface();
3232 interface->startService("org.freedesktop.Accounts");
33− accounts_manager = new QDBusInterface("org.freedesktop.Accounts",
33+ m_accountsManager = new QDBusInterface("org.freedesktop.Accounts",
3434 "/org/freedesktop/Accounts",
3535 "org.freedesktop.Accounts",
3636 connection, this);
@@ -38,9 +38,9 @@ AccountsServiceDBusAdaptor::AccountsServiceDBusAdaptor(QObject* parent)
3838
3939QVariant AccountsServiceDBusAdaptor::getUserProperty(const QString &user, const QString &interface, const QString &property)
4040{
41− auto iface = getUserInterface(user);
41+ QDBusInterface *iface = getUserInterface(user);
4242 if (iface != nullptr && iface->isValid()) {
43− auto answer = iface->call("Get", interface, property);
43+ QDBusMessage answer = iface->call("Get", interface, property);
4444 if (answer.type() == QDBusMessage::ReplyMessage) {
4545 return answer.arguments()[0].value<QDBusVariant>().variant();
4646 }
@@ -50,7 +50,7 @@ QVariant AccountsServiceDBusAdaptor::getUserProperty(const QString &user, const
5050
5151void AccountsServiceDBusAdaptor::setUserProperty(const QString &user, const QString &interface, const QString &property, const QVariant &value)
5252{
53− auto iface = getUserInterface(user);
53+ QDBusInterface *iface = getUserInterface(user);
5454 if (iface != nullptr && iface->isValid()) {
5555 // The value needs to be carefully wrapped
5656 iface->call("Set", interface, property, QVariant::fromValue(QDBusVariant(value)));
@@ -76,7 +76,7 @@ void AccountsServiceDBusAdaptor::maybeChangedSlot()
7676QString AccountsServiceDBusAdaptor::getUserForPath(const QString &path)
7777{
7878 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) {
8080 if (i.value()->path() == path) {
8181 return i.key();
8282 }
@@ -86,16 +86,16 @@ QString AccountsServiceDBusAdaptor::getUserForPath(const QString &path)
8686
8787QDBusInterface *AccountsServiceDBusAdaptor::getUserInterface(const QString &user)
8888{
89− auto iface = users.value(user);
90− if (iface == nullptr && accounts_manager->isValid()) {
91− auto answer = accounts_manager->call("FindUserByName", user);
89+ QDBusInterface *iface = m_users.value(user);
90+ if (iface == nullptr && m_accountsManager->isValid()) {
91+ QDBusMessage answer = m_accountsManager->call("FindUserByName", user);
9292 if (answer.type() == QDBusMessage::ReplyMessage) {
93− auto path = answer.arguments()[0].value<QDBusObjectPath>().path();
93+ QString path = answer.arguments()[0].value<QDBusObjectPath>().path();
9494
9595 iface = new QDBusInterface("org.freedesktop.Accounts",
9696 path,
9797 "org.freedesktop.DBus.Properties",
98− accounts_manager->connection(), this);
98+ m_accountsManager->connection(), this);
9999
100100 // With its own pre-defined properties, AccountsService is oddly
101101 // close-lipped. It won't send out proper DBus.Properties notices,
@@ -119,7 +119,7 @@ QDBusInterface *AccountsServiceDBusAdaptor::getUserInterface(const QString &user
119119 this,
120120 SLOT(propertiesChangedSlot(QString, QVariantMap, QStringList)));
121121
122− users.insert(user, iface);
122+ m_users.insert(user, iface);
123123 }
124124 }
125125 return iface;
plugins/AccountsService/AccountsServiceDBusAdaptor.h+2−2
@@ -47,8 +47,8 @@ private:
4747 QDBusInterface *getUserInterface(const QString &user);
4848 QString getUserForPath(const QString &path);
4949
50− QDBusInterface *accounts_manager;
51− QMap<QString, QDBusInterface *> users;
50+ QDBusInterface *m_accountsManager;
51+ QMap<QString, QDBusInterface *> m_users;
5252};
5353
5454#endif
plugins/CMakeLists.txt+1
@@ -3,6 +3,7 @@ add_subdirectory(HudClient)
33add_subdirectory(LightDM)
44add_subdirectory(ListViewWithPageHeader)
55add_subdirectory(Powerd)
6+add_subdirectory(SessionBroadcast)
67add_subdirectory(Ubuntu)
78add_subdirectory(Unity)
89add_subdirectory(Utils)
plugins/ListViewWithPageHeader/listviewwithpageheader.cpp+23−1
@@ -170,6 +170,8 @@ ListViewWithPageHeader::ListViewWithPageHeader()
170170 connect(this, SIGNAL(contentHeightChanged()), this, SLOT(onContentHeightChanged()));
171171 connect(this, SIGNAL(heightChanged()), this, SLOT(onHeightChanged()));
172172 connect(m_contentYAnimation, SIGNAL(stopped()), this, SLOT(onShowHeaderAnimationFinished()));
173+
174+ setFlickableDirection(VerticalFlick);
173175}
174176
175177ListViewWithPageHeader::~ListViewWithPageHeader()
@@ -199,6 +201,7 @@ void ListViewWithPageHeader::setModel(QAbstractItemModel *model)
199201 connect(m_delegateModel, SIGNAL(modelUpdated(QQmlChangeSet,bool)), this, SLOT(onModelUpdated(QQmlChangeSet,bool)));
200202#endif
201203 Q_EMIT modelChanged();
204+ polish();
202205 // TODO?
203206// Q_EMIT contentHeightChanged();
204207// Q_EMIT contentYChanged();
@@ -324,6 +327,9 @@ void ListViewWithPageHeader::setForceNoClip(bool noClip)
324327
325328void ListViewWithPageHeader::positionAtBeginning()
326329{
330+ if (m_delegateModel->count() <= 0)
331+ return;
332+
327333 qreal headerHeight = (m_headerItem ? m_headerItem->height() : 0);
328334 if (m_firstVisibleIndex != 0) {
329335 // TODO This could be optimized by trying to reuse the interesection
@@ -482,7 +488,7 @@ void ListViewWithPageHeader::viewportMoved(Qt::Orientations orient)
482488 // or the header is partially shown and we are not doing a maximizeVisibleArea either
483489 const bool scrolledUp = m_previousContentY > contentY();
484490 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();
486492 const bool maximizeVisibleAreaRunning = m_contentYAnimation->isRunning() && contentYAnimationType == ContentYAnimationMaximizeVisibleArea;
487493
488494 if (!scrolledUp && contentY() == -m_minYExtent) {
@@ -1006,6 +1012,22 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
10061012 }
10071013 }
10081014
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+
10091031 if (m_firstVisibleIndex != oldFirstVisibleIndex) {
10101032 adjustMinYExtent();
10111033 }
plugins/ListViewWithPageHeader/listviewwithpageheader.h+1
@@ -63,6 +63,7 @@ class ListViewWithPageHeader : public QQuickFlickable, public QQuickItemChangeLi
6363
6464 friend class ListViewWithPageHeaderTest;
6565 friend class ListViewWithPageHeaderTestSection;
66+ friend class ListViewWithPageHeaderTestExternalModel;
6667
6768public:
6869 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 @@
11/*
2− * Copyright (C) 2012 Canonical, Ltd.
2+ * Copyright (C) 2013 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -13,20 +13,29 @@
1313 * You should have received a copy of the GNU General Public License
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1515 *
16− * Author: Nick Dedekind <nick.dedekind@canonical.com>
16+ * Authors: Michael Terry <michael.terry@canonical.com>
1717 */
1818
19−#ifndef INDICATORS_NETWORK_PLUGIN_H
20−#define INDICATORS_NETWORK_PLUGIN_H
19+#ifndef UNITY_SESSIONBROADCAST_H
20+#define UNITY_SESSIONBROADCAST_H
2121
22−#include <QtQml/QQmlExtensionPlugin>
22+#include <QObject>
23+#include <QString>
2324
24−class IndicatorsNetworkPlugin : public QQmlExtensionPlugin
25+class QDBusInterface;
26+
27+class SessionBroadcast: public QObject
2528{
2629 Q_OBJECT
27− Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
30+
2831public:
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);
3039};
3140
32−#endif // INDICATORS_NETWORK_PLUGIN_H
41+#endif
plugins/Unity/IndicatorsLegacy/Network/plugin.cpp → plugins/SessionBroadcast/plugin.cpprenamed+14−10
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2012 Canonical, Ltd.
2+ * Copyright (C) 2013 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -13,19 +13,23 @@
1313 * You should have received a copy of the GNU General Public License
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1515 *
16− * Author: Nick Dedekind <nick.dedekind@canonical.com>
16+ * Authors: Michael Terry <michael.terry@canonical.com>
1717 */
1818
19−// Qt
20−#include <QtQml/qqml.h>
21−
22−// self
2319#include "plugin.h"
20+#include "SessionBroadcast.h"
21+
22+#include <QtQml>
2423
25−// local
26−#include "networkagent.h"
24+static QObject *broadcast_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
25+{
26+ Q_UNUSED(engine)
27+ Q_UNUSED(scriptEngine)
28+ return new SessionBroadcast();
29+}
2730
28−void IndicatorsNetworkPlugin::registerTypes(const char *uri)
31+void SessionBroadcastPlugin::registerTypes(const char *uri)
2932{
30− qmlRegisterType<NetworkAgent>(uri, 0, 1, "NetworkAgent");
33+ Q_ASSERT(uri == QLatin1String("SessionBroadcast"));
34+ qmlRegisterSingletonType<SessionBroadcast>(uri, 0, 1, "SessionBroadcast", broadcast_provider);
3135}
plugins/Unity/IndicatorsLegacy/plugin.h → plugins/SessionBroadcast/plugin.hrenamed+8−7
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2012 Canonical, Ltd.
2+ * Copyright (C) 2013 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -13,20 +13,21 @@
1313 * You should have received a copy of the GNU General Public License
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1515 *
16− * Author: Nick Dedekind <nick.dedekind@canonical.com>
16+ * Authors: Michael Terry <michael.terry@canonical.com>
1717 */
1818
19−#ifndef INDICATORS_PLUGIN_H
20−#define INDICATORS_PLUGIN_H
19+#ifndef UNITY_SESSIONBROADCAST_PLUGIN_H
20+#define UNITY_SESSIONBROADCAST_PLUGIN_H
2121
22−#include <QtQml/QQmlExtensionPlugin>
22+#include <QQmlExtensionPlugin>
2323
24−class IndicatorsPlugin : public QQmlExtensionPlugin
24+class SessionBroadcastPlugin : public QQmlExtensionPlugin
2525{
2626 Q_OBJECT
2727 Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
28+
2829public:
2930 void registerTypes(const char *uri);
3031};
3132
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 @@
22include(Plugins)
33
44add_subdirectory(Indicators)
5−add_subdirectory(IndicatorsLegacy)
65
76# Dependencies
87include(FindPkgConfig)
@@ -43,6 +42,7 @@ set(QMLPLUGIN_SRC
4342 preview.cpp
4443 previewaction.cpp
4544 previewinfohint.cpp
45+ result.cpp
4646 showallfilteroption.cpp
4747 signalslist.cpp
4848 socialpreview.cpp
plugins/Unity/Indicators/CMakeLists.txt+1
@@ -12,6 +12,7 @@ find_package(Qt5Core REQUIRED)
1212find_package(Qt5Quick REQUIRED)
1313
1414add_subdirectory(qml)
15+add_subdirectory(Messaging)
1516add_subdirectory(Network)
1617
1718include_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
2222import Ubuntu.Components 0.1
2323
2424Item {
25− property alias actionGroup: sendButton.actionGroup
26− property alias action: sendButton.action
27−
25+ id: textField
2826 property alias text: replyField.text
2927 property alias buttonText: sendButton.text
28+ property bool activateEnabled: false
29+
30+ signal activate(var value)
3031
3132 TextField {
3233 id: replyField
@@ -50,17 +51,19 @@ Item {
5051 }
5152 }
5253
53− ActionButton {
54+ Button {
5455 id: sendButton
55−
56− actionParameter: replyField.text
5756 anchors {
5857 top: parent.top
5958 bottom: parent.bottom
6059 right: parent.right
6160 }
6261 width: units.gu(9)
63− enabled: replyField.text !== ""
62+ enabled: replyField.text !== "" && textField.activateEnabled
6463 color: enabled ? "#c94212" : "#bababa"
64+
65+ onClicked: {
66+ textField.activate(replyField.text);
67+ }
6568 }
6669}
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 @@
2020
2121import QtQuick 2.0
2222import Ubuntu.Components 0.1
23−import Unity.IndicatorsLegacy 0.1 as Indicators
23+import Unity.Indicators 0.1 as Indicators
2424
25−Indicators.BasicMenuItem {
25+Indicators.BaseMenuItem {
2626 id: groupedMessage
27+
28+ property alias title: __title.text
2729 property alias count: label.text
30+ property string appIcon: "qrc:/indicators/artwork/messaging/default_app.svg"
2831
29− color: "#221e1b"
30− implicitHeight: units.gu(10)
32+ signal activateApp()
33+ signal dismiss()
3134
32− Indicators.MenuAction {
33− id: menuAction
34− actionGroup: groupedMessage.actionGroup
35− action: menu ? menu.action : ""
36− }
35+ implicitHeight: units.gu(10)
3736
3837 Row {
3938 anchors.fill: parent
@@ -44,17 +43,17 @@ Indicators.BasicMenuItem {
4443 height: units.gu(6)
4544 width: units.gu(6)
4645 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
4847 fillMode: Image.PreserveAspectFit
4948 }
5049 }
5150
5251 Label {
52+ id: __title
5353 anchors.verticalCenter: parent.verticalCenter
5454 color: "#e8e1d0"
5555 font.weight: Font.DemiBold
5656 fontSize: "medium"
57− text: menu && menu.label ? menu.label : ""
5857 }
5958
6059 Label {
@@ -65,7 +64,7 @@ Indicators.BasicMenuItem {
6564 color: "#e8e1d0"
6665 font.weight: Font.DemiBold
6766 fontSize: "medium"
68− text: menuAction.valid ? menuAction.state[0] : "0"
67+ text: "0"
6968 }
7069 }
7170
@@ -82,15 +81,11 @@ Indicators.BasicMenuItem {
8281 MouseArea {
8382 anchors.fill: parent
8483 onClicked: {
85− if (menuAction.valid) {
86− menuAction.activate(true);
87− }
84+ groupedMessage.activateApp();
8885 }
8986 }
9087
9188 onItemRemoved: {
92− if (menuAction.valid) {
93− menuAction.activate(false);
94− }
89+ groupedMessage.dismiss();
9590 }
9691}
plugins/Unity/IndicatorsLegacy/Messaging/qml/HeroMessage.qml → plugins/Unity/Indicators/Messaging/qml/HeroMessage.qmlrenamed+25−22
@@ -20,25 +20,30 @@
2020
2121import QtQuick 2.0
2222import Ubuntu.Components 0.1
23−import Unity.IndicatorsLegacy 0.1 as Indicators
23+import Unity.Indicators 0.1 as Indicators
2424
25−Indicators.BasicMenuItem {
25+Indicators.BaseMenuItem {
2626 id: heroMessage
2727
28− property variant actionsDescription: null
2928 property alias heroMessageHeader: __heroMessageHeader
3029 property real collapsedHeight: heroMessageHeader.y + heroMessageHeader.bodyBottom + units.gu(2)
3130 property real expandedHeight: collapsedHeight
3231
33− color: "#221e1c"
32+ property alias avatar: __heroMessageHeader.avatar
33+ property alias appIcon: __heroMessageHeader.icon
34+
35+ signal activateApp
36+ signal dismiss
3437
3538 removable: state !== "expanded"
3639 implicitHeight: collapsedHeight
3740
38− Indicators.MenuAction {
39− id: menuAction
40− actionGroup: heroMessage.actionGroup
41− action: menu ? menu.action : ""
41+ Rectangle {
42+ id: background
43+ property real alpha: 0.0
44+ anchors.fill: parent
45+ color: Qt.rgba(1.0, 1.0, 1.0, alpha)
46+ z: -1
4247 }
4348
4449 HeroMessageHeader {
@@ -48,25 +53,22 @@ Indicators.BasicMenuItem {
4853 anchors.left: parent.left
4954 anchors.right: parent.right
5055
51− avatar: menu && (menu.extra.canonical_icon.length > 0) ? "image://theme/" + encodeURI(menu.extra.canonical_icon) : "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) : ""
56+ avatar: "qrc:/indicators/artwork/messaging/default_contact.png"
5357 appIcon: icon
5458
5559 state: heroMessage.state
5660
5761 onAppIconClicked: {
58− if (menuAction.valid) {
59− deactivateMenu();
60− action.activate(true);
61− }
62+ deselectMenu();
63+ heroMessage.activateApp();
6264 }
6365 }
6466
6567 onClicked: {
66− if (menuActivated) {
67− deactivateMenu();
68+ if (menuSelected) {
69+ deselectMenu();
6870 } else {
69− activateMenu();
71+ selectMenu();
7072 }
7173 }
7274
@@ -84,13 +86,16 @@ Indicators.BasicMenuItem {
8486
8587 states: State {
8688 name: "expanded"
87− when: menuActivated
89+ when: menuSelected
8890
8991 PropertyChanges {
9092 target: heroMessage
91− color: "#333130"
9293 implicitHeight: heroMessage.expandedHeight
9394 }
95+ PropertyChanges {
96+ target: background
97+ alpha: 0.05
98+ }
9499 PropertyChanges {
95100 target: __topHLine
96101 opacity: 0.0
@@ -113,8 +118,6 @@ Indicators.BasicMenuItem {
113118 }
114119
115120 onItemRemoved: {
116− if (menuAction.valid) {
117− menuAction.activate(false);
118− }
121+ heroMessage.dismiss();
119122 }
120123}
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 @@
2020
2121import QtQuick 2.0
2222import Ubuntu.Components 0.1
23−import Unity.IndicatorsLegacy 0.1 as Indicators
23+import Unity.Indicators 0.1 as Indicators
2424
2525Item {
26− property alias actionGroup: actionTextField.actionGroup
27− property alias action: actionTextField.action
28−
26+ id: quickReply
2927 property alias buttonText: actionTextField.buttonText
3028 property real expandedHeight: childrenRect.height
3129 property alias messages : messagelistRepeater.model
30+ property alias replyEnabled: actionTextField.activateEnabled
31+
32+ signal reply(var value)
3233
3334 Item {
3435 id: header
@@ -83,10 +84,9 @@ Item {
8384
8485 height: childrenRect.height
8586
86− Rectangle {
87+ Item {
8788 width: messagelist.width
8889 height: units.gu(5)
89− color: "#333230"
9090
9191 Label {
9292 id: __label
@@ -150,6 +150,11 @@ Item {
150150
151151 anchors.fill: parent
152152 anchors.margins: units.gu(1)
153+ activateEnabled: replyEnabled
154+
155+ onActivate: {
156+ quickReply.reply(value)
157+ }
153158 }
154159
155160 Indicators.HLine {
plugins/Unity/IndicatorsLegacy/Messaging/qml/SimpleTextMessage.qml → plugins/Unity/Indicators/Messaging/qml/SimpleTextMessage.qmlrenamed+7−4
@@ -20,17 +20,20 @@
2020
2121import QtQuick 2.0
2222import Ubuntu.Components 0.1
23−import "utils.js" as Utils
2423
2524HeroMessage {
2625 id: __heroMessage
2726
27+ property string title: ""
28+ property string time: ""
29+ property string message: ""
30+
2831 property alias footer: footerLoader.sourceComponent
2932
3033 expandedHeight: fullMessage.y + fullMessage.height + units.gu(2)
31− heroMessageHeader.titleText.text: menu ? menu.label : ""
32− heroMessageHeader.subtitleText.text: menu ? Utils.formatDate(menu.extra.canonical_time) : ""
33− heroMessageHeader.bodyText.text: menu ? menu.extra.canonical_text : ""
34+ heroMessageHeader.titleText.text: title
35+ heroMessageHeader.subtitleText.text: time
36+ heroMessageHeader.bodyText.text: message
3437
3538 Item {
3639 id: fullMessage
plugins/Unity/IndicatorsLegacy/Messaging/qml/SnapDecision.qml → plugins/Unity/Indicators/Messaging/qml/SnapDecision.qmlrenamed+33−14
@@ -20,19 +20,33 @@
2020
2121import QtQuick 2.0
2222import Ubuntu.Components 0.1
23−import Unity.IndicatorsLegacy 0.1 as Indicators
23+import Unity.Indicators 0.1 as Indicators
2424import "utils.js" as Utils
2525
2626HeroMessage {
2727 id: snapDecision
2828
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+
2940 expandedHeight: buttons.y + buttons.height + quickreply.height + units.gu(2)
30− heroMessageHeader.titleText.text: menu ? menu.label : ""
31− heroMessageHeader.subtitleText.text: menu ? menu.extra.canonical_text : ""
41+ heroMessageHeader.titleText.text: title
42+ heroMessageHeader.subtitleText.text: message
3243 heroMessageHeader.subtitleText.color: "#e8e1d0"
33− heroMessageHeader.bodyText.text: menu ? Utils.formatDate(menu.extra.canonical_time) : ""
44+ heroMessageHeader.bodyText.text: time
3445 heroMessageHeader.bodyText.color: "#8f8f88"
3546
47+ signal activate
48+ signal reply(string value)
49+
3650 Item {
3751 id: buttons
3852
@@ -62,16 +76,19 @@ HeroMessage {
6276 }
6377 }
6478
65− ActionButton {
66− actionGroup: snapDecision.actionGroup
67− action: actionsDescription[0].name
68−
69− text: actionsDescription ? actionsDescription[0].label : "Call back"
70− color: "#c94212"
79+ Button {
80+ id: actionButton
81+ text: "Call back"
82+ color: enabled ? "#c94212" : "#bababa"
7183 anchors.right: parent.right
7284 anchors.top: parent.top
7385 anchors.bottom: parent.bottom
7486 width: (parent.width - units.gu(1)) / 2
87+ enabled: snapDecision.activateEnabled
88+
89+ onClicked: {
90+ snapDecision.activate();
91+ }
7592 }
7693
7794 states: State {
@@ -95,11 +112,12 @@ HeroMessage {
95112 QuickReply {
96113 id: quickreply
97114
98− actionGroup: snapDecision.actionGroup
99− action: actionsDescription[1].name
115+ onReply: {
116+ snapDecision.reply(value);
117+ }
100118
101− messages: actionsDescription ? actionsDescription[1]["parameter-hint"] : ""
102− buttonText: actionsDescription ? actionsDescription[1].label : "send"
119+ messages: ""
120+ buttonText: "Send"
103121 anchors {
104122 top: buttons.bottom
105123 topMargin: units.gu(2)
@@ -109,6 +127,7 @@ HeroMessage {
109127 height: 0
110128 opacity: 0.0
111129 enabled: false
130+ replyEnabled: snapDecision.replyEnabled
112131
113132 states: State {
114133 name: "expanded"
plugins/Unity/IndicatorsLegacy/Messaging/qml/TextMessage.qml → plugins/Unity/Indicators/Messaging/qml/TextMessage.qmlrenamed+12−4
@@ -20,16 +20,24 @@
2020
2121import QtQuick 2.0
2222import Ubuntu.Components 0.1
23−import Unity.IndicatorsLegacy 0.1 as Indicators
23+import Unity.Indicators 0.1 as Indicators
2424
2525SimpleTextMessage {
2626 id: simpleMessage
2727
28+ property bool replyEnabled: false
29+ property string replyButtonText: "Send"
30+
31+ signal reply(string value)
32+
2833 footer: ActionTextField {
2934 anchors.fill: parent
30− actionGroup: simpleMessage.actionGroup
31− action: actionsDescription[0].name
3235
33− buttonText: actionsDescription ? actionsDescription[0].label : "Send"
36+ activateEnabled: simpleMessage.replyEnabled
37+ buttonText: simpleMessage.replyButtonText
38+
39+ onActivate: {
40+ simpleMessage.reply(value);
41+ }
3442 }
3543}
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
22
33ActionButton 0.1 ActionButton.qml
44ActionTextField 0.1 ActionTextField.qml
55GroupedMessage 0.1 GroupedMessage.qml
66HeroMessage 0.1 HeroMessage.qml
77HeroMessageHeader 0.1 HeroMessageHeader.qml
8−MessageMenuItem 0.1 MessageMenuItem.qml
8+MessageMenuItemFactory 0.1 MessageMenuItemFactory.qml
99QuickReply 0.1 QuickReply.qml
1010SimpleTextMessage 0.1 SimpleTextMessage.qml
1111SnapDecision 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−
451add_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 @@
11module Unity.Indicators.Network
2−plugin IndicatorsNetworkQml
3−typeinfo plugin.qmltypes
42
5−NetworkPage 0.1 NetworkPage.qml
63AccessPoint 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:
7474 enum Roles {
7575 Identifier = 0,
7676 Position,
77− Title,
78− Description,
7977 WidgetSource,
8078 PageSource,
8179 IndicatorProperties,
plugins/Unity/Indicators/indicatorsmodel.cpp+2−55
@@ -201,8 +201,6 @@ QHash<int, QByteArray> IndicatorsModel::roleNames() const
201201 {
202202 roles[IndicatorsModelRole::Identifier] = "identifier";
203203 roles[IndicatorsModelRole::Position] = "position";
204− roles[IndicatorsModelRole::Title] = "title";
205− roles[IndicatorsModelRole::Description] = "description";
206204 roles[IndicatorsModelRole::WidgetSource] = "widgetSource";
207205 roles[IndicatorsModelRole::PageSource] = "pageSource";
208206 roles[IndicatorsModelRole::IndicatorProperties] = "indicatorProperties";
@@ -216,25 +214,6 @@ int IndicatorsModel::columnCount(const QModelIndex &) const
216214 return 1;
217215}
218216
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−
238217Q_INVOKABLE QVariant IndicatorsModel::data(int row, int role) const
239218{
240219 return data(index(row, 0), role);
@@ -268,27 +247,16 @@ QVariant IndicatorsModel::data(const QModelIndex &index, int role) const
268247 return QVariant(indicator->indicatorProperties());
269248 }
270249 break;
271− case IndicatorsModelRole::Title:
272− case IndicatorsModelRole::Description:
273250 case IndicatorsModelRole::WidgetSource:
251+ return shellAppDirectory()+"/Panel/Indicators/DefaultIndicatorWidget.qml";
274252 case IndicatorsModelRole::PageSource:
275− return indicatorData(indicator, role);
253+ return shellAppDirectory()+"/Panel/Indicators/DefaultIndicatorPage.qml";
276254 default:
277255 break;
278256 }
279257 return QVariant();
280258}
281259
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−
292260/*! \internal */
293261QModelIndex IndicatorsModel::parent(const QModelIndex&) const
294262{
@@ -300,24 +268,3 @@ int IndicatorsModel::rowCount(const QModelIndex&) const
300268{
301269 return m_indicators.count();
302270}
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
3434 Q_OBJECT
3535 Q_ENUMS(Roles)
3636 Q_PROPERTY(int count READ count NOTIFY countChanged)
37− Q_PROPERTY(QVariant indicatorData READ indicatorData WRITE setIndicatorData NOTIFY indicatorDataChanged)
3837
3938public:
4039
@@ -53,9 +52,6 @@ public:
5352 QModelIndex parent (const QModelIndex &index) const;
5453 int rowCount(const QModelIndex &parent = QModelIndex()) const;
5554
56− void setIndicatorData(const QVariant& data);
57− QVariant indicatorData() const;
58−
5955
6056Q_SIGNALS:
6157 void countChanged();
@@ -71,13 +67,9 @@ private:
7167 IndicatorsManager *m_manager;
7268
7369 QList<Indicator::Ptr> m_indicators;
74− QVariant m_indicator_data;
75− QMap<QString, QVariantMap> m_parsed_indicator_data;
7670
7771 void notifyDataChanged(QObject *sender, int role);
7872 int count() const;
79− QVariant indicatorData(const Indicator::Ptr& indicator, int role) const;
80− static QVariant defaultData(Indicator::Ptr indicator, int role);
8173};
8274
8375#endif // INDICATORSMODEL_H
plugins/Unity/Indicators/plugin.cpp+2
@@ -42,6 +42,8 @@ static QObject* menuModelCacheSingleton(QQmlEngine* engine, QJSEngine* scriptEng
4242
4343void Indicators2Plugin::registerTypes(const char *uri)
4444{
45+ Q_INIT_RESOURCE(indicators);
46+
4547 qmlRegisterType<IndicatorsManager>(uri, 0, 1, "IndicatorsManager");
4648 qmlRegisterType<IndicatorsModel>(uri, 0, 1, "IndicatorsModel");
4749 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
2424ListItem.Standard {
2525 id: baseMenu
2626
27− property bool menuActivated: false
27+ property bool menuSelected: false
2828
2929 signal selectMenu()
3030 signal deselectMenu()
plugins/Unity/Indicators/qml/IndicatorBase.qml+8−5
@@ -27,13 +27,11 @@ Item {
2727 enabled: menuObjectPaths.hasOwnProperty(device)
2828
2929 //const
30− property string title
3130 property string busName
3231 property string actionsObjectPath
3332 property var menuObjectPaths: undefined
3433 readonly property string device: "phone"
3534 property string rootMenuType: "com.canonical.indicator.root"
36− property bool active: false
3735
3836 property string deviceMenuObjectPath: menuObjectPaths.hasOwnProperty(device) ? menuObjectPaths[device] : ""
3937
@@ -41,8 +39,13 @@ Item {
4139
4240 CachedUnityMenuModel {
4341 id: cachedModel
44− busName: active ? indicatorItem.busName : ""
45− actionsObjectPath: active ? indicatorItem.actionsObjectPath : ""
46− menuObjectPath: active ? indicatorItem.deviceMenuObjectPath : ""
42+ busName: indicatorItem.busName
43+ actionsObjectPath: indicatorItem.actionsObjectPath
44+ menuObjectPath: indicatorItem.deviceMenuObjectPath
45+ }
46+
47+ property var rootActionState: Indicators.RootActionState {
48+ menu: menuModel
49+ onUpdated: indicatorItem.rootActionStateChanged()
4750 }
4851}
plugins/Unity/Indicators/qml/IndicatorPage.qml+40−11
@@ -26,12 +26,14 @@ IndicatorBase {
2626 id: main
2727
2828 //const
29+ property bool contentActive: false
30+ property string title: rootActionState.title
2931 property alias emptyText: emptyLabel.text
3032 property alias highlightFollowsCurrentItem : mainMenu.highlightFollowsCurrentItem
3133
3234 Indicators.UnityMenuModelStack {
3335 id: menuStack
34− head: main.menuModel
36+ head: contentActive ? main.menuModel : null
3537 }
3638
3739 ListView {
@@ -60,7 +62,34 @@ IndicatorBase {
6062 // Only allow flicking if the content doesn't fit on the page
6163 interactive: contentHeight > height
6264
63− currentIndex: -1
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: {
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+
6493 delegate: Item {
6594 id: menuDelegate
6695
@@ -89,10 +118,10 @@ IndicatorBase {
89118 menuStack.push(mainMenu.model.submenu(index));
90119 }
91120
92− if (item.hasOwnProperty("menuActivated")) {
93− item.menuActivated = Qt.binding(function() { return ListView.isCurrentItem; });
94− item.selectMenu.connect(function() { ListView.view.currentIndex = index });
95− item.deselectMenu.connect(function() { ListView.view.currentIndex = -1 });
121+ if (item.hasOwnProperty("menuSelected")) {
122+ item.menuSelected = Qt.binding(function() { return mainMenu.selectedIndex == index; });
123+ item.selectMenu.connect(function() { mainMenu.selectedIndex = index; });
124+ item.deselectMenu.connect(function() { mainMenu.selectedIndex = -1; });
96125 }
97126 if (item.hasOwnProperty("menu")) {
98127 item.menu = Qt.binding(function() { return model; });
@@ -135,21 +164,21 @@ IndicatorBase {
135164 function start()
136165 {
137166 reset()
138− if (!active) {
139− active = true;
167+ if (!contentActive) {
168+ contentActive = true;
140169 }
141170 }
142171
143172 function stop()
144173 {
145− if (active) {
146− active = false;
174+ if (contentActive) {
175+ contentActive = false;
147176 }
148177 }
149178
150179 function reset()
151180 {
152− mainMenu.currentIndex = -1;
181+ mainMenu.selectedIndex = -1;
153182 mainMenu.positionViewAtBeginning();
154183 }
155184}
plugins/Unity/Indicators/qml/IndicatorWidget.qml−6
@@ -23,12 +23,6 @@ import Unity.Indicators 0.1 as Indicators
2323IndicatorBase {
2424 id: indicatorWidget
2525
26− active: true
2726 enabled: false
2827 property int iconSize: height - units.gu(0.5)
29−
30− property var actionState: Indicators.RootActionState {
31− menu: menuModel
32− onUpdated: indicatorWidget.actionStateChanged()
33− }
3428}
plugins/Unity/Indicators/qml/MenuItemFactory.qml+62−12
@@ -20,6 +20,7 @@
2020import QtQuick 2.0
2121import Unity.Indicators 0.1 as Indicators
2222import Unity.Indicators.Network 0.1 as ICNetwork
23+import Unity.Indicators.Messaging 0.1 as ICMessaging
2324import QMenuModel 0.1 as QMenuModel
2425
2526Item {
@@ -38,6 +39,9 @@ Item {
3839 "com.canonical.indicator.slider" : sliderMenu,
3940 "com.canonical.indicator.switch" : switchMenu,
4041
42+ "com.canonical.indicator.messages.messageitem" : messageItem,
43+ "com.canonical.indicator.messages.sourceitem" : groupedMessage,
44+
4145 "com.canonical.unity.slider" : sliderMenu,
4246 "com.canonical.unity.switch" : switchMenu,
4347
@@ -45,15 +49,17 @@ Item {
4549 "unity.widgets.systemsettings.tablet.accesspoint" : accessPoint,
4650 }
4751
52+ Component { id: divMenu; Indicators.DivMenuItem {} }
53+
4854 Component {
4955 id: sliderMenu;
5056 Indicators.SliderMenuItem {
5157 property QtObject menu: null
5258
5359 text: menu && menu.label ? menu.label : ""
54− icon: menu ? menu.icon : ""
55− minIcon: menu.ext.minIcon
56− maxIcon: menu.ext.maxIcon
60+ icon: menu && menu.icon ? menu.icon : ""
61+ minIcon: menu && menu.ext.minIcon ? menu.ext.minIcon : ""
62+ maxIcon: menu && menu.ext.maxIcon ? menu.ext.maxIcon : ""
5763
5864 minimumValue: menu.ext.minValue ? menu.ext.minValue : 0.0
5965 maximumValue: {
@@ -79,8 +85,6 @@ Item {
7985 }
8086 }
8187
82− Component { id: divMenu; Indicators.DivMenuItem {} }
83−
8488 Component {
8589 id: buttonMenu;
8690 Indicators.ButtonMenuItem {
@@ -89,7 +93,9 @@ Item {
8993 text: menu && menu.label ? menu.label : ""
9094 enabled: menu ? menu.sensitive : false
9195
92− onActivate: model.activate(modelIndex);
96+ onActivate: {
97+ model.activate(modelIndex);
98+ }
9399 }
94100 }
95101 Component {
@@ -118,12 +124,14 @@ Item {
118124 property QtObject menu: null
119125
120126 text: menu && menu.label ? menu.label : ""
121− icon: menu ? menu.icon : ""
127+ icon: menu && menu.icon ? menu.icon : ""
122128 checkable: menu ? (menu.isCheck || menu.isRadio) : false
123129 checked: checkable ? menu.isToggled : false
124130 enabled: menu ? menu.sensitive : false
125131
126− onActivate: model.activate(modelIndex);
132+ onActivate: {
133+ model.activate(modelIndex);
134+ }
127135 }
128136 }
129137
@@ -133,11 +141,13 @@ Item {
133141 property QtObject menu: null
134142
135143 text: menu && menu.label ? menu.label : ""
136− icon: menu ? menu.icon : ""
144+ icon: menu && menu.icon ? menu.icon : ""
137145 checked: menu ? menu.isToggled : false
138146 enabled: menu ? menu.sensitive : false
139147
140− onActivate: model.activate(modelIndex);
148+ onActivate: {
149+ model.activate(modelIndex);
150+ }
141151 }
142152 }
143153
@@ -161,11 +171,11 @@ Item {
161171 property QtObject menu: null
162172 property var strengthAction: QMenuModel.UnityMenuAction {
163173 model: menuFactory.model ? menuFactory.model : null
174+ index: modelIndex
164175 name: menu ? menu.ext.xCanonicalWifiApStrengthAction : ""
165176 }
166177
167178 text: menu && menu.label ? menu.label : ""
168− icon: menu ? menu.icon : ""
169179 secure: menu ? menu.ext.xCanonicalWifiApIsSecure : false
170180 adHoc: menu ? menu.ext.xCanonicalWifiApIsAdhoc : false
171181 checked: menu ? menu.isToggled : false
@@ -177,7 +187,47 @@ Item {
177187 'x-canonical-wifi-ap-is-secure': 'bool',
178188 'x-canonical-wifi-ap-strength-action': 'string'});
179189 }
180− onActivate: model.activate(modelIndex);
190+ onActivate: {
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+ }
181231 }
182232 }
183233
plugins/Unity/Indicators/qml/SliderMenuItem.qml+1−1
@@ -71,7 +71,7 @@ FramedMenuItem {
7171 leftMargin: leftImage.visible ? units.gu(0.5) : 0
7272 rightMargin: rightImage.visible ? units.gu(0.5) : 0
7373 }
74− live: false
74+ live: true
7575
7676 Component.onCompleted: {
7777 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 @@
11<RCC>
22 <qresource prefix="/indicators">
33 <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>
47 </qresource>
58</RCC>
plugins/Unity/Indicators/rootactionstate.cpp+7−1
@@ -102,12 +102,18 @@ void RootActionState::updateActionState()
102102 Q_EMIT updated();
103103}
104104
105−
106105bool RootActionState::isValid() const
107106{
108107 return m_menu && m_menu->rowCount() > 0;
109108}
110109
110+QString RootActionState::title() const
111+{
112+ if (!isValid()) return QString();
113+
114+ return m_cachedState.value("title", QVariant::fromValue(QString())).toString();
115+}
116+
111117QString RootActionState::leftLabel() const
112118{
113119 if (!isValid()) return QString();
plugins/Unity/Indicators/rootactionstate.h+3
@@ -32,6 +32,7 @@ class UNITYINDICATORS_EXPORT RootActionState : public ActionStateParser
3232 Q_PROPERTY(UnityMenuModel* menu READ menu WRITE setMenu NOTIFY menuChanged)
3333
3434 Q_PROPERTY(bool valid READ isValid NOTIFY validChanged)
35+ Q_PROPERTY(QString title READ title NOTIFY titleChanged)
3536 Q_PROPERTY(QString leftLabel READ leftLabel NOTIFY leftLabelChanged)
3637 Q_PROPERTY(QString rightLabel READ rightLabel NOTIFY rightLabelChanged)
3738 Q_PROPERTY(QStringList icons READ icons NOTIFY iconsChanged)
@@ -48,6 +49,7 @@ public:
4849 void setIndex(int index);
4950
5051 bool isValid() const;
52+ QString title() const;
5153 QString leftLabel() const;
5254 QString rightLabel() const;
5355 QStringList icons() const;
@@ -64,6 +66,7 @@ Q_SIGNALS:
6466 void indexChanged();
6567
6668 void validChanged();
69+ void titleChanged();
6770 void leftLabelChanged();
6871 void rightLabelChanged();
6972 void iconsChanged();
plugins/Unity/Indicators/visibleindicatorsmodel.cpp−2
@@ -33,8 +33,6 @@ QHash<int, QByteArray> VisibleIndicatorsModel::roleNames() const
3333 {
3434 roles[IndicatorsModelRole::Identifier] = "identifier";
3535 roles[IndicatorsModelRole::Position] = "position";
36− roles[IndicatorsModelRole::Title] = "title";
37− roles[IndicatorsModelRole::Description] = "description";
3836 roles[IndicatorsModelRole::WidgetSource] = "widgetSource";
3937 roles[IndicatorsModelRole::PageSource] = "pageSource";
4038 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:
3838 bool pinned;
3939};
4040
41−LauncherBackend::LauncherBackend(bool useStorage, QObject *parent):
41+LauncherBackend::LauncherBackend(QObject *parent):
4242 QObject(parent),
4343 m_accounts(nullptr)
4444{
45− if (useStorage) {
46− m_accounts = new AccountsServiceDBusAdaptor(this);
47− }
45+#ifndef LAUNCHER_TESTING
46+ m_accounts = new AccountsServiceDBusAdaptor(this);
47+#endif
4848 m_user = qgetenv("USER");
4949 syncFromAccounts();
5050}
plugins/Unity/Launcher/backend/launcherbackend.h+1−1
@@ -39,7 +39,7 @@ class LauncherBackend : public QObject
3939
4040
4141public:
42− LauncherBackend(bool useStorage = true, QObject *parent = 0);
42+ LauncherBackend(QObject *parent = 0);
4343 virtual ~LauncherBackend();
4444
4545 /**
plugins/Unity/Launcher/launchermodel.cpp+13−4
@@ -27,7 +27,7 @@ using namespace unity::shell::application;
2727
2828LauncherModel::LauncherModel(QObject *parent):
2929 LauncherModelInterface(parent),
30− m_backend(new LauncherBackend(true, this)),
30+ m_backend(new LauncherBackend(this)),
3131 m_appManager(0)
3232{
3333 connect(m_backend, SIGNAL(countChanged(QString,int)), SLOT(countChanged(QString,int)));
@@ -115,9 +115,11 @@ void LauncherModel::move(int oldIndex, int newIndex)
115115 m_list.move(oldIndex, newIndex);
116116 endMoveRows();
117117
118− storeAppList();
119−
120− pin(m_list.at(newIndex)->appId());
118+ if (!m_list.at(newIndex)->pinned()) {
119+ pin(m_list.at(newIndex)->appId());
120+ } else {
121+ storeAppList();
122+ }
121123}
122124
123125void LauncherModel::pin(const QString &appId, int index)
@@ -146,6 +148,8 @@ void LauncherModel::pin(const QString &appId, int index)
146148 m_list.insert(index, item);
147149 endInsertRows();
148150 }
151+
152+ storeAppList();
149153}
150154
151155void LauncherModel::requestRemove(const QString &appId)
@@ -155,6 +159,11 @@ void LauncherModel::requestRemove(const QString &appId)
155159 return;
156160 }
157161
162+ if (m_appManager->findApplication(appId)) {
163+ m_list.at(index)->setPinned(false);
164+ return;
165+ }
166+
158167 beginRemoveRows(QModelIndex(), index, index);
159168 m_list.takeAt(index)->deleteLater();
160169 endRemoveRows();
plugins/Unity/Launcher/quicklistmodel.cpp+1−1
@@ -32,7 +32,7 @@ QuickListModel::~QuickListModel()
3232
3333void QuickListModel::appendAction(const QuickListEntry &entry)
3434{
35− beginInsertRows(QModelIndex(), m_list.count() - 1, m_list.count() -1);
35+ beginInsertRows(QModelIndex(), m_list.count(), m_list.count());
3636 m_list.append(entry);
3737 endInsertRows();
3838}
plugins/Unity/bottombarvisibilitycommunicatorshell.cpp+15−1
@@ -17,7 +17,8 @@
1717#include "bottombarvisibilitycommunicatorshell.h"
1818
1919BottomBarVisibilityCommunicatorShell::BottomBarVisibilityCommunicatorShell()
20− : m_forceHidden(false)
20+ : m_forceHidden(false),
21+ m_position(0)
2122{
2223}
2324
@@ -26,6 +27,11 @@ bool BottomBarVisibilityCommunicatorShell::forceHidden() const
2627 return m_forceHidden;
2728}
2829
30+double BottomBarVisibilityCommunicatorShell::position() const
31+{
32+ return m_position;
33+}
34+
2935void BottomBarVisibilityCommunicatorShell::setForceHidden(bool forceHidden)
3036{
3137 if (forceHidden != m_forceHidden) {
@@ -33,3 +39,11 @@ void BottomBarVisibilityCommunicatorShell::setForceHidden(bool forceHidden)
3339 Q_EMIT forceHiddenChanged(forceHidden);
3440 }
3541}
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
3030{
3131 Q_OBJECT
3232 Q_PROPERTY(bool forceHidden READ forceHidden WRITE setForceHidden NOTIFY forceHiddenChanged)
33+ Q_PROPERTY(double position READ position WRITE setPosition NOTIFY positionChanged)
3334
3435 Q_CLASSINFO("D-Bus Interface", "com.canonical.Shell.BottomBarVisibilityCommunicator")
3536public:
@@ -41,13 +42,18 @@ public:
4142 bool forceHidden() const;
4243 void setForceHidden(bool forceHidden);
4344
45+ double position() const;
46+ void setPosition(double position);
47+
4448Q_SIGNALS:
4549 void forceHiddenChanged(bool forceHidden);
50+ void positionChanged(double position);
4651
4752private:
4853 BottomBarVisibilityCommunicatorShell();
4954
5055 bool m_forceHidden;
56+ double m_position;
5157};
5258
5359#endif
plugins/Unity/categories.cpp+18−1
@@ -21,6 +21,7 @@
2121// self
2222#include "categories.h"
2323#include "categoryresults.h"
24+#include <QDebug>
2425
2526// TODO: use something from libunity once it's public
2627enum CategoryColumn {
@@ -39,6 +40,7 @@ Categories::Categories(QObject* parent)
3940 m_roles[Categories::RoleIcon] = "icon";
4041 m_roles[Categories::RoleRenderer] = "renderer";
4142 m_roles[Categories::RoleContentType] = "contentType";
43+ m_roles[Categories::RoleRendererHint] = "rendererHint";
4244 m_roles[Categories::RoleProgressSource] = "progressSource";
4345 m_roles[Categories::RoleHints] = "hints";
4446 m_roles[Categories::RoleResults] = "results";
@@ -62,7 +64,17 @@ Categories::getResults(int index) const
6264
6365 unsigned categoryIndex = static_cast<unsigned>(index);
6466 auto unity_results = m_unityScope->GetResultsForCategory(categoryIndex);
65− results->setModel(unity_results->model());
67+ if (unity_results) {
68+ results->setModel(unity_results->model());
69+ } else {
70+ // No results model returned by unity core; this can be the case when the global
71+ // results model of this scope is still not set in unity core. Don't set backend
72+ // model in DeeListModel - it will still beahve properly as an empty model. Since
73+ // we're connected to the category model change signal, and it is set by unity core
74+ // at the same time as results model (on channel opening), we'll reset category
75+ // results models with proper models when we're notifed again.
76+ qWarning() << "No results model for category" << categoryIndex;
77+ }
6678
6779 m_results.insert(index, results);
6880 }
@@ -198,6 +210,11 @@ Categories::data(const QModelIndex& index, int role) const
198210 auto hints = DeeListModel::data(index, CategoryColumn::HINTS).toHash();
199211 return hints.contains("content-type") ? hints["content-type"] : QVariant(QString("default"));
200212 }
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+ }
201218 case RoleProgressSource:
202219 {
203220 auto hints = DeeListModel::data(index, CategoryColumn::HINTS).toHash();
plugins/Unity/categories.h+1
@@ -47,6 +47,7 @@ public:
4747 RoleIcon,
4848 RoleRenderer,
4949 RoleContentType,
50+ RoleRendererHint,
5051 RoleProgressSource,
5152 RoleHints,
5253 RoleResults,
plugins/Unity/categoryresults.cpp+21
@@ -46,6 +46,7 @@ CategoryResults::CategoryResults(QObject* parent)
4646 m_roles[CategoryResults::RoleComment] = "comment";
4747 m_roles[CategoryResults::RoleDndUri] = "dndUri";
4848 m_roles[CategoryResults::RoleMetadata] = "metadata";
49+ m_roles[CategoryResults::RoleRendererHints] = "rendererHints";
4950}
5051
5152int CategoryResults::categoryIndex() const
@@ -79,6 +80,13 @@ CategoryResults::data(const QModelIndex& index, int role) const
7980 return DeeListModel::data(index, ResultsColumn::URI);
8081 case RoleIconHint: {
8182 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+ }
8290 return QVariant::fromValue(gIconToDeclarativeImageProviderString(giconString));
8391 }
8492 case RoleCategory:
@@ -93,6 +101,19 @@ CategoryResults::data(const QModelIndex& index, int role) const
93101 return DeeListModel::data(index, ResultsColumn::DND_URI);
94102 case RoleMetadata:
95103 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+ }
96117 default:
97118 return QVariant();
98119 }
plugins/Unity/categoryresults.h+2−1
@@ -43,7 +43,8 @@ public:
4343 RoleTitle,
4444 RoleComment,
4545 RoleDndUri,
46− RoleMetadata
46+ RoleMetadata,
47+ RoleRendererHints
4748 };
4849
4950 QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
plugins/Unity/iconutils.cpp+13−1
@@ -24,13 +24,14 @@
2424#include "iconutils.h"
2525
2626#define BASE_THEME_ICON_URI "image://theme/"
27+#define BASE_THUMBNAILER_URI "image://thumbnailer/"
2728
2829QString gIconToDeclarativeImageProviderString(QString const &giconString)
2930{
3031 if (giconString.isEmpty()) return giconString;
3132
3233 if (giconString.startsWith('/') || giconString.startsWith(QLatin1String("http")) ||
33− giconString.startsWith(QLatin1String("file:"))) {
34+ giconString.startsWith(QLatin1String("file:")) || giconString.startsWith(QLatin1String("image:"))) {
3435 return giconString;
3536 }
3637
@@ -89,3 +90,14 @@ QString gIconToDeclarativeImageProviderString(QString const &giconString)
8990
9091 return result;
9192}
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 @@
2323#include <QString>
2424
2525QString gIconToDeclarativeImageProviderString(QString const &giconString);
26+QString uriToThumbnailerProviderString(QString const &uri);
2627
2728#endif
plugins/Unity/plugin.cpp+2
@@ -35,6 +35,7 @@
3535#include "categoryresults.h"
3636#include "bottombarvisibilitycommunicatorshell.h"
3737#include "genericoptionsmodel.h"
38+#include "result.h"
3839
3940// libqtdee
4041#include "deelistmodel.h"
@@ -50,6 +51,7 @@ void UnityPlugin::registerTypes(const char *uri)
5051 qmlRegisterUncreatableType<PreviewInfoHint>(uri, 0, 1, "PreviewInfoHint", "Can't create PreviewInfoHint object in QML.");
5152 qmlRegisterUncreatableType<SocialPreviewComment>(uri, 0, 1, "SocialPreviewComment", "Can't create SocialPreviewComment object in QML.");
5253 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.");
5355 qmlRegisterType<Scope>(uri, 0, 1, "Scope");
5456 qmlRegisterType<Scopes>(uri, 0, 1, "Scopes");
5557 qmlRegisterType<Categories>(uri, 0, 1, "Categories");
plugins/Unity/preview.cpp+24−13
@@ -39,9 +39,12 @@
3939#include <UnityCore/MusicPreview.h>
4040#include <UnityCore/SocialPreview.h>
4141
42+#include <UnityCore/GLibWrapper.h>
43+
4244Preview::Preview(QObject *parent):
4345 QObject(parent),
44− m_unityPreview(nullptr)
46+ m_unityPreview(nullptr),
47+ m_result(new Result(this))
4548{
4649}
4750
@@ -103,24 +106,25 @@ QVariantMap Preview::infoHintsHash() const
103106QString Preview::image() const
104107{
105108 if (m_unityPreview) {
106− auto giconString = g_icon_to_string(m_unityPreview->image());
107− QString result(gIconToDeclarativeImageProviderString(QString::fromUtf8(giconString)));
108− g_free(giconString);
109− return result;
109+ if (m_unityPreview->image() != nullptr) {
110+ auto giconString = g_icon_to_string(m_unityPreview->image());
111+ QString result(gIconToDeclarativeImageProviderString(QString::fromUtf8(giconString)));
112+ g_free(giconString);
113+ return result;
114+ } else {
115+ QString sourceMedia(QString::fromStdString(m_unityPreview->image_source_uri()));
116+ QString thumbnailUri(uriToThumbnailerProviderString(sourceMedia));
117+ if (!thumbnailUri.isNull()) return thumbnailUri;
118+ }
110119 } else {
111120 qWarning() << "Preview not set";
112121 }
113122 return QString::null;
114123}
115124
116−QString Preview::imageSourceUri() const
125+QVariant Preview::result() const
117126{
118− if (m_unityPreview) {
119− return QString::fromStdString(m_unityPreview->image_source_uri());
120− } else {
121− qWarning() << "Preview not set";
122− }
123− return QString::null;
127+ return QVariant::fromValue(m_result);
124128}
125129
126130Preview* Preview::newFromUnityPreview(unity::dash::Preview::Ptr unityPreview)
@@ -151,6 +155,7 @@ Preview* Preview::newFromUnityPreview(unity::dash::Preview::Ptr unityPreview)
151155void Preview::setUnityPreviewBase(unity::dash::Preview::Ptr unityPreview)
152156{
153157 m_unityPreview = unityPreview;
158+ m_result->setPreview(unityPreview);
154159
155160 qDeleteAll(m_infoHints);
156161 m_infoHints.clear();
@@ -181,8 +186,14 @@ void Preview::execute(const QString& actionId, const QHash<QString, QVariant>& h
181186{
182187 if (m_unityPreview) {
183188 auto unityHints = convertToHintsMap(hints);
184− m_unityPreview->PerformAction(actionId.toStdString(), unityHints);
189+ m_actionCancellable.Renew();
190+ m_unityPreview->PerformAction(actionId.toStdString(), unityHints, nullptr, m_actionCancellable);
185191 } else {
186192 qWarning() << "Preview not set";
187193 }
188194}
195+
196+void Preview::cancelAction()
197+{
198+ m_actionCancellable.Cancel();
199+}
plugins/Unity/preview.h+7−2
@@ -31,7 +31,9 @@
3131#include <UnityCore/Preview.h>
3232
3333// local
34+#include "result.h"
3435#include "previewaction.h"
36+#include <UnityCore/GLibWrapper.h>
3537
3638class Q_DECL_EXPORT Preview : public QObject
3739{
@@ -45,7 +47,7 @@ class Q_DECL_EXPORT Preview : public QObject
4547 Q_PROPERTY(QVariant infoHints READ infoHints NOTIFY previewChanged)
4648 Q_PROPERTY(QVariantMap infoMap READ infoHintsHash NOTIFY previewChanged)
4749 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)
4951
5052public:
5153 explicit Preview(QObject *parent = 0);
@@ -59,9 +61,10 @@ public:
5961 QVariant infoHints();
6062 QVariantMap infoHintsHash() const;
6163 QString image() const;
62− QString imageSourceUri() const;
64+ QVariant result() const;
6365
6466 Q_INVOKABLE void execute(const QString& actionId, const QHash<QString, QVariant>& hints);
67+ Q_INVOKABLE void cancelAction();
6568
6669Q_SIGNALS:
6770 void previewChanged();
@@ -70,6 +73,7 @@ protected:
7073 virtual void setUnityPreview(unity::dash::Preview::Ptr unityPreview);
7174
7275 unity::dash::Preview::Ptr m_unityPreview;
76+ Result* m_result;
7377
7478private:
7579 void setUnityPreviewBase(unity::dash::Preview::Ptr unityPreview);
@@ -77,6 +81,7 @@ private:
7781 QList<QObject *> m_actions;
7882 QList<QObject *> m_infoHints;
7983 QVariantMap m_infoHintsHash;
84+ unity::glib::Cancellable m_actionCancellable;
8085};
8186
8287Q_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 @@
3333#include <QQmlEngine>
3434
3535#include <UnityCore/Variant.h>
36+#include <UnityCore/GLibWrapper.h>
3637
3738#include <libintl.h>
3839#include <glib.h>
3940
4041Scope::Scope(QObject *parent) : QObject(parent)
4142 , m_formFactor("phone")
43+ , m_searchInProgress(false)
4244{
4345 m_categories.reset(new Categories(this));
4446}
@@ -68,6 +70,11 @@ QString Scope::searchHint() const
6870 return QString::fromStdString(m_unityScope->search_hint());
6971}
7072
73+bool Scope::searchInProgress() const
74+{
75+ return m_searchInProgress;
76+}
77+
7178bool Scope::visible() const
7279{
7380 return m_unityScope->visible();
@@ -115,10 +122,15 @@ void Scope::setSearchQuery(const QString& search_query)
115122 string ("") and m_searchQuery is the null string,
116123 search_query != m_searchQuery is still true.
117124 */
125+ using namespace std::placeholders;
126+
118127 if (m_searchQuery.isNull() || search_query != m_searchQuery) {
119128 m_searchQuery = search_query;
120− m_unityScope->Search(search_query.toStdString(), sigc::mem_fun(this, &Scope::searchFinished));
129+ m_cancellable.Renew();
130+ m_searchInProgress = true;
131+ m_unityScope->Search(search_query.toStdString(), std::bind(&Scope::onSearchFinished, this, _1, _2, _3), m_cancellable);
121132 Q_EMIT searchQueryChanged();
133+ Q_EMIT searchInProgressChanged();
122134 }
123135}
124136
@@ -175,7 +187,19 @@ void Scope::preview(const QVariant &uri, const QVariant &icon_hint, const QVaria
175187 const QVariant &comment, const QVariant &dnd_uri, const QVariant &metadata)
176188{
177189 auto res = createLocalResult(uri, icon_hint, category, result_type, mimetype, title, comment, dnd_uri, metadata);
178− m_unityScope->Preview(res);
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 {
196+ m_unityScope->Preview(res, nullptr, m_previewCancellable);
197+ }
198+}
199+
200+void Scope::cancelActivation()
201+{
202+ m_previewCancellable.Cancel();
179203}
180204
181205void 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
199223 qWarning() << "Missing goto-uri hint for GOTO_DASH_URI activation reply";
200224 }
201225 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;
202233 default:
203234 qWarning() << "Unhandled activation response:" << type;
204235 }
@@ -275,8 +306,6 @@ void Scope::setUnityScope(const unity::dash::Scope::Ptr& scope)
275306 m_unityScope->visible.changed.connect(sigc::mem_fun(this, &Scope::visibleChanged));
276307 m_unityScope->shortcut.changed.connect(sigc::mem_fun(this, &Scope::shortcutChanged));
277308 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 &)));
280309
281310 /* FIXME: signal should be forwarded instead of calling the handler directly */
282311 m_unityScope->activated.connect(sigc::mem_fun(this, &Scope::onActivated));
@@ -297,18 +326,33 @@ unity::dash::Scope::Ptr Scope::unityScope() const
297326
298327void Scope::synchronizeStates()
299328{
329+ using namespace std::placeholders;
330+
300331 if (connected()) {
301332 /* Forward local states to m_unityScope */
302333 if (!m_searchQuery.isNull()) {
303− m_unityScope->Search(m_searchQuery.toStdString());
334+ m_cancellable.Renew();
335+ m_searchInProgress = true;
336+ m_unityScope->Search(m_searchQuery.toStdString(), std::bind(&Scope::onSearchFinished, this, _1, _2, _3), m_cancellable);
337+ Q_EMIT searchInProgressChanged();
304338 }
305339 }
306340}
307341
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)
309343{
310344 QString hint;
311345
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+
312356 if (!m_unityScope->results()->count()) {
313357 unity::glib::HintsMap::const_iterator it = hints.find("no-results-hint");
314358 if (it != hints.end()) {
plugins/Unity/scope.h+10−2
@@ -28,6 +28,7 @@
2828// libunity-core
2929#include <UnityCore/Scope.h>
3030#include <UnityCore/Results.h>
31+#include <UnityCore/GLibWrapper.h>
3132
3233#include "categories.h"
3334#include "filters.h"
@@ -43,6 +44,7 @@ class Scope : public QObject
4344 Q_PROPERTY(QString iconHint READ iconHint NOTIFY iconHintChanged)
4445 Q_PROPERTY(QString description READ description NOTIFY descriptionChanged)
4546 Q_PROPERTY(QString searchHint READ searchHint NOTIFY searchHintChanged)
47+ Q_PROPERTY(bool searchInProgress READ searchInProgress NOTIFY searchInProgressChanged)
4648 Q_PROPERTY(bool visible READ visible NOTIFY visibleChanged)
4749 Q_PROPERTY(QString shortcut READ shortcut NOTIFY shortcutChanged)
4850 Q_PROPERTY(bool connected READ connected NOTIFY connectedChanged)
@@ -65,6 +67,7 @@ public:
6567 bool visible() const;
6668 QString shortcut() const;
6769 bool connected() const;
70+ bool searchInProgress() const;
6871 Categories* categories() const;
6972 Filters* filters() const;
7073 QString searchQuery() const;
@@ -82,6 +85,8 @@ public:
8285 Q_INVOKABLE void preview(const QVariant &uri, const QVariant &icon_hint, const QVariant &category,
8386 const QVariant &result_type, const QVariant &mimetype, const QVariant &title,
8487 const QVariant &comment, const QVariant &dnd_uri, const QVariant &metadata);
88+ Q_INVOKABLE void cancelActivation();
89+
8590 void setUnityScope(const unity::dash::Scope::Ptr& scope);
8691 unity::dash::Scope::Ptr unityScope() const;
8792
@@ -93,11 +98,11 @@ Q_SIGNALS:
9398 void iconHintChanged(const std::string&);
9499 void descriptionChanged(const std::string&);
95100 void searchHintChanged(const std::string&);
101+ void searchInProgressChanged();
96102 void visibleChanged(bool);
97103 void shortcutChanged(const std::string&);
98104 void connectedChanged(bool);
99105 void categoriesChanged();
100− void searchFinished(const std::string&, unity::glib::HintsMap const&, unity::glib::Error const&);
101106 void searchQueryChanged();
102107 void noResultsHintChanged();
103108 void formFactorChanged();
@@ -113,7 +118,7 @@ Q_SIGNALS:
113118
114119private Q_SLOTS:
115120 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&);
117122
118123private:
119124 unity::dash::LocalResult createLocalResult(const QVariant &uri, const QVariant &icon_hint,
@@ -131,6 +136,9 @@ private:
131136 QString m_searchQuery;
132137 QString m_noResultsHint;
133138 QString m_formFactor;
139+ bool m_searchInProgress;
140+ unity::glib::Cancellable m_cancellable;
141+ unity::glib::Cancellable m_previewCancellable;
134142};
135143
136144Q_DECLARE_METATYPE(Scope*)
plugins/Unity/variantutils.cpp+9
@@ -40,3 +40,12 @@ unity::glib::HintsMap convertToHintsMap(const QVariant &var)
4040 }
4141 return unity::glib::HintsMap();
4242}
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 @@
2828
2929unity::glib::HintsMap convertToHintsMap(const QHash<QString, QVariant> &val);
3030unity::glib::HintsMap convertToHintsMap(const QVariant &var);
31+QVariantHash convertToQVariantHash(const unity::glib::HintsMap& var);
3132
3233#endif
plugins/Utils/CMakeLists.txt+2−1
@@ -9,6 +9,7 @@ set(QMLPLUGIN_SRC
99 qlimitproxymodelqml.cpp
1010 qsortfilterproxymodelqml.cpp
1111 ubuntuwindow.cpp
12+ unitymenumodelpaths.cpp
1213 plugin.cpp
1314 )
1415
@@ -21,7 +22,7 @@ add_library(Utils-qml SHARED
2122# files directly in targets.
2223set_target_properties(Utils-qml PROPERTIES COMPILE_FLAGS -fvisibility=default)
2324
24−qt5_use_modules(Utils-qml Qml Quick)
25+qt5_use_modules(Utils-qml Qml Quick DBus)
2526
2627# export the qmldir qmltypes and plugin files
2728export_qmlfiles(Utils Utils)
plugins/Utils/plugin.cpp+2
@@ -28,6 +28,7 @@
2828#include "qlimitproxymodelqml.h"
2929#include "qsortfilterproxymodelqml.h"
3030#include "ubuntuwindow.h"
31+#include "unitymenumodelpaths.h"
3132
3233static QObject* applicationsPathsSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
3334 Q_UNUSED(engine);
@@ -41,6 +42,7 @@ void UtilsPlugin::registerTypes(const char *uri)
4142 qmlRegisterType<QAbstractItemModel>();
4243 qmlRegisterType<QLimitProxyModelQML>(uri, 0, 1, "LimitProxyModel");
4344 qmlRegisterType<QSortFilterProxyModelQML>(uri, 0, 1, "SortFilterProxyModel");
45+ qmlRegisterType<UnityMenuModelPaths>(uri, 0, 1, "UnityMenuModelPaths");
4446 qmlRegisterExtendedType<QQuickWindow, UbuntuWindow>(uri, 0, 1, "Window");
4547 qmlRegisterSingletonType<ApplicationPaths>(uri, 0, 1, "ApplicationPaths", applicationsPathsSingleton);
4648}
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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-06-26 23:26+0000\n"
1212"Last-Translator: Ibrahim Saed <ibraheem5000@gmail.com>\n"
1313"Language-Team: Arabic <ar@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= "
1818"3 && n % 100 <= 10 ? 3 : n % 100 >= 11 && n % 100 <= 99 ? 4 : 5;\n"
19−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
20−"X-Generator: Launchpad (build 16750)\n"
19+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
20+"X-Generator: Launchpad (build 16774)\n"
2121
2222#: Applications/applications.js:23
2323msgid "Phone"
@@ -87,48 +87,50 @@ msgstr "ويكيبيديا"
8787msgid "YouTube"
8888msgstr "يوتيوب"
8989
90−#: Components/EdgeDemoOverlay.qml:145
90+#: Components/EdgeDemoOverlay.qml:150
9191msgid "Skip intro"
9292msgstr ""
9393
94−#: Components/EdgeDemo.qml:98
94+#: Components/EdgeDemo.qml:112
9595msgid "Right edge"
9696msgstr ""
9797
98−#: Components/EdgeDemo.qml:99
98+#: Components/EdgeDemo.qml:113
9999msgid "Try swiping from the right edge to unlock the phone"
100100msgstr ""
101101
102−#: Components/EdgeDemo.qml:135
102+#: Components/EdgeDemo.qml:144
103103msgid "Top edge"
104104msgstr ""
105105
106−#: Components/EdgeDemo.qml:136
106+#: Components/EdgeDemo.qml:145
107107msgid "Try swiping from the top edge to access the indicators"
108108msgstr ""
109109
110−#: Components/EdgeDemo.qml:161
110+#: Components/EdgeDemo.qml:170
111111msgid "Close"
112112msgstr ""
113113
114−#: Components/EdgeDemo.qml:162
114+#: Components/EdgeDemo.qml:171
115115msgid "Swipe up again to close the settings screen"
116116msgstr ""
117117
118−#: Components/EdgeDemo.qml:189
118+#: Components/EdgeDemo.qml:198
119119msgid "Left edge"
120120msgstr ""
121121
122−#: Components/EdgeDemo.qml:190
122+#: Components/EdgeDemo.qml:199
123123msgid "Swipe from the left to reveal the launcher for quick access to apps"
124124msgstr ""
125125
126−#: Components/EdgeDemo.qml:217
126+#: Components/EdgeDemo.qml:226
127127msgid "Well done"
128128msgstr ""
129129
130−#: Components/EdgeDemo.qml:218
131−msgid "You have now mastered the edge gestures and can start using the phone"
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"
132134msgstr ""
133135
134136#: Components/PageHeader.qml:298
@@ -149,23 +151,23 @@ msgid_plural "%1 reviews"
149151msgstr[0] ""
150152msgstr[1] ""
151153
152−#: Dash/Apps/AppPreview.qml:175
154+#: Dash/Apps/AppPreview.qml:178
153155msgid "Rate this"
154156msgstr ""
155157
156−#: Dash/Apps/AppReviews.qml:72
158+#: Dash/Apps/AppReviews.qml:74
157159msgid "Add a review"
158160msgstr ""
159161
160−#: Dash/Apps/AppReviews.qml:84
162+#: Dash/Apps/AppReviews.qml:86
161163msgid "Review"
162164msgstr ""
163165
164−#: Dash/Apps/AppReviews.qml:118
166+#: Dash/Apps/AppReviews.qml:121
165167msgid "Send"
166168msgstr ""
167169
168−#: Dash/Apps/AppReviews.qml:136
170+#: Dash/Apps/AppReviews.qml:139
169171msgid "Comments:"
170172msgstr ""
171173
@@ -209,7 +211,7 @@ msgstr "النجوم:"
209211msgid "Author:"
210212msgstr "المؤلف:"
211213
212−#: Greeter/Lockscreen.qml:134
214+#: Greeter/Lockscreen.qml:142
213215msgid "Emergency Call"
214216msgstr ""
215217
@@ -246,11 +248,15 @@ msgstr "تتكلم الآن..."
246248msgid "Search"
247249msgstr "ابحث"
248250
249−#: plugins/Unity/scope.cpp:317
251+#: plugins/Unity/scope.cpp:336
250252msgid "Sorry, there is nothing that matches your search."
251253msgstr "عذراً، لا يوجد ما يطابق بحثك."
252254
253−#: Shell.qml:429
255+#: plugins/Unity/showallfilteroption.cpp:41
256+msgid "All"
257+msgstr ""
258+
259+#: Shell.qml:453
254260#, qt-format
255261msgid "Please enter %1"
256262msgstr ""
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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-06-26 23:48+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Azerbaijani <az@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
9191msgstr ""
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
9595msgstr ""
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr ""
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103103msgstr ""
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr ""
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111111msgstr ""
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115115msgstr ""
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119119msgstr ""
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127127msgstr ""
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148150msgstr[0] ""
149151msgstr[1] ""
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153155msgstr ""
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157159msgstr ""
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161163msgstr ""
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165167msgstr ""
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169171msgstr ""
170172
@@ -208,7 +210,7 @@ msgstr ""
208210msgid "Author:"
209211msgstr ""
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213215msgstr ""
214216
@@ -245,11 +247,15 @@ msgstr "Söylənilir..."
245247msgid "Search"
246248msgstr "Axtar"
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr "Bağışlayın, amma axtarışınıza heç bir nəticə uyğun gəlmir."
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255261msgstr ""
po/bg.po+29−23
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
1111"PO-Revision-Date: 2013-06-27 00:06+0000\n"
1212"Last-Translator: Miroslav E. Hadzhiev (Хаджиев) "
1313"<miroslav.hadzhiev@gmail.com>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Type: text/plain; charset=UTF-8\n"
1717"Content-Transfer-Encoding: 8bit\n"
1818"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
20−"X-Generator: Launchpad (build 16750)\n"
19+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
20+"X-Generator: Launchpad (build 16774)\n"
2121
2222#: Applications/applications.js:23
2323msgid "Phone"
@@ -87,48 +87,50 @@ msgstr "Уикипедия"
8787msgid "YouTube"
8888msgstr "YouTube"
8989
90−#: Components/EdgeDemoOverlay.qml:145
90+#: Components/EdgeDemoOverlay.qml:150
9191msgid "Skip intro"
9292msgstr ""
9393
94−#: Components/EdgeDemo.qml:98
94+#: Components/EdgeDemo.qml:112
9595msgid "Right edge"
9696msgstr ""
9797
98−#: Components/EdgeDemo.qml:99
98+#: Components/EdgeDemo.qml:113
9999msgid "Try swiping from the right edge to unlock the phone"
100100msgstr ""
101101
102−#: Components/EdgeDemo.qml:135
102+#: Components/EdgeDemo.qml:144
103103msgid "Top edge"
104104msgstr ""
105105
106−#: Components/EdgeDemo.qml:136
106+#: Components/EdgeDemo.qml:145
107107msgid "Try swiping from the top edge to access the indicators"
108108msgstr ""
109109
110−#: Components/EdgeDemo.qml:161
110+#: Components/EdgeDemo.qml:170
111111msgid "Close"
112112msgstr ""
113113
114−#: Components/EdgeDemo.qml:162
114+#: Components/EdgeDemo.qml:171
115115msgid "Swipe up again to close the settings screen"
116116msgstr ""
117117
118−#: Components/EdgeDemo.qml:189
118+#: Components/EdgeDemo.qml:198
119119msgid "Left edge"
120120msgstr ""
121121
122−#: Components/EdgeDemo.qml:190
122+#: Components/EdgeDemo.qml:199
123123msgid "Swipe from the left to reveal the launcher for quick access to apps"
124124msgstr ""
125125
126−#: Components/EdgeDemo.qml:217
126+#: Components/EdgeDemo.qml:226
127127msgid "Well done"
128128msgstr ""
129129
130−#: Components/EdgeDemo.qml:218
131−msgid "You have now mastered the edge gestures and can start using the phone"
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"
132134msgstr ""
133135
134136#: Components/PageHeader.qml:298
@@ -149,23 +151,23 @@ msgid_plural "%1 reviews"
149151msgstr[0] ""
150152msgstr[1] ""
151153
152−#: Dash/Apps/AppPreview.qml:175
154+#: Dash/Apps/AppPreview.qml:178
153155msgid "Rate this"
154156msgstr ""
155157
156−#: Dash/Apps/AppReviews.qml:72
158+#: Dash/Apps/AppReviews.qml:74
157159msgid "Add a review"
158160msgstr ""
159161
160−#: Dash/Apps/AppReviews.qml:84
162+#: Dash/Apps/AppReviews.qml:86
161163msgid "Review"
162164msgstr ""
163165
164−#: Dash/Apps/AppReviews.qml:118
166+#: Dash/Apps/AppReviews.qml:121
165167msgid "Send"
166168msgstr ""
167169
168−#: Dash/Apps/AppReviews.qml:136
170+#: Dash/Apps/AppReviews.qml:139
169171msgid "Comments:"
170172msgstr ""
171173
@@ -209,7 +211,7 @@ msgstr ""
209211msgid "Author:"
210212msgstr "Автор:"
211213
212−#: Greeter/Lockscreen.qml:134
214+#: Greeter/Lockscreen.qml:142
213215msgid "Emergency Call"
214216msgstr ""
215217
@@ -246,11 +248,15 @@ msgstr ""
246248msgid "Search"
247249msgstr "Търсене"
248250
249−#: plugins/Unity/scope.cpp:317
251+#: plugins/Unity/scope.cpp:336
250252msgid "Sorry, there is nothing that matches your search."
251253msgstr "Съжаляваме, няма нищо, което да отговаря на вашето търсене."
252254
253−#: Shell.qml:429
255+#: plugins/Unity/showallfilteroption.cpp:41
256+msgid "All"
257+msgstr ""
258+
259+#: Shell.qml:453
254260#, qt-format
255261msgid "Please enter %1"
256262msgstr ""
po/ca.po+50−38
@@ -7,16 +7,16 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
11−"PO-Revision-Date: 2013-09-11 10:30+0000\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11+"PO-Revision-Date: 2013-09-28 07:38+0000\n"
1212"Last-Translator: David Planella <david.planella@ubuntu.com>\n"
1313"Language-Team: Catalan <ca@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-09-12 08:06+0000\n"
19−"X-Generator: Launchpad (build 16761)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,48 +86,56 @@ msgstr "Viquipèdia"
8686msgid "YouTube"
8787msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
91−msgstr ""
91+msgstr "Omet la introducció"
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
9595msgstr "Vora dreta"
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr ""
100+"Proveu de lliscar el dit des de la vora dreta per desblocar el telèfon"
100101
101−#: Components/EdgeDemo.qml:135
102+#: Components/EdgeDemo.qml:144
102103msgid "Top edge"
103104msgstr "Vora superior"
104105
105−#: Components/EdgeDemo.qml:136
106+#: Components/EdgeDemo.qml:145
106107msgid "Try swiping from the top edge to access the indicators"
107108msgstr ""
109+"Proveu de lliscar el dit des de la vora superior per accedir als indicadors"
108110
109−#: Components/EdgeDemo.qml:161
111+#: Components/EdgeDemo.qml:170
110112msgid "Close"
111−msgstr ""
113+msgstr "Tanca"
112114
113−#: Components/EdgeDemo.qml:162
115+#: Components/EdgeDemo.qml:171
114116msgid "Swipe up again to close the settings screen"
115117msgstr ""
118+"Llisqueu el dit cap amunt una altra vegada per tancar la pantalla de "
119+"configuració"
116120
117−#: Components/EdgeDemo.qml:189
121+#: Components/EdgeDemo.qml:198
118122msgid "Left edge"
119123msgstr "Vora esquerra"
120124
121−#: Components/EdgeDemo.qml:190
125+#: Components/EdgeDemo.qml:199
122126msgid "Swipe from the left to reveal the launcher for quick access to apps"
123127msgstr ""
128+"Llisqueu el dit des de la vora esquerra per mostrar el llançador i accedir "
129+"ràpidament a les aplicacions"
124130
125−#: Components/EdgeDemo.qml:217
131+#: Components/EdgeDemo.qml:226
126132msgid "Well done"
127133msgstr "Enhorabona!"
128134
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
135+#: Components/EdgeDemo.qml:227
136+msgid ""
137+"You have now mastered the edge gestures and can start using the "
138+"phone<br><br>Tap anywhere to start"
131139msgstr ""
132140
133141#: Components/PageHeader.qml:298
@@ -145,26 +153,26 @@ msgstr "(%1)"
145153#, qt-format
146154msgid "%1 review"
147155msgid_plural "%1 reviews"
148−msgstr[0] ""
149−msgstr[1] ""
156+msgstr[0] "%1 ressenya"
157+msgstr[1] "%1 ressenyes"
150158
151−#: Dash/Apps/AppPreview.qml:175
159+#: Dash/Apps/AppPreview.qml:178
152160msgid "Rate this"
153161msgstr ""
154162
155−#: Dash/Apps/AppReviews.qml:72
163+#: Dash/Apps/AppReviews.qml:74
156164msgid "Add a review"
157−msgstr ""
165+msgstr "Afegiu una ressenya"
158166
159−#: Dash/Apps/AppReviews.qml:84
167+#: Dash/Apps/AppReviews.qml:86
160168msgid "Review"
161169msgstr "Ressenya"
162170
163−#: Dash/Apps/AppReviews.qml:118
171+#: Dash/Apps/AppReviews.qml:121
164172msgid "Send"
165−msgstr ""
173+msgstr "Envia"
166174
167−#: Dash/Apps/AppReviews.qml:136
175+#: Dash/Apps/AppReviews.qml:139
168176msgid "Comments:"
169177msgstr "Comentaris:"
170178
@@ -178,11 +186,11 @@ msgstr "Recents"
178186
179187#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
180188msgid "New Releases"
181−msgstr ""
189+msgstr "Novetats"
182190
183191#: Dash/DashMusic.qml:30
184192msgid "Top Charting"
185−msgstr ""
193+msgstr "El millor de les llistes"
186194
187195#: Dash/DashMusic.qml:91
188196msgid "Music"
@@ -190,7 +198,7 @@ msgstr "Música"
190198
191199#: Dash/DashVideos.qml:31
192200msgid "Popular Online"
193−msgstr ""
201+msgstr "Popular a la xarxa"
194202
195203#: Dash/DashVideos.qml:146
196204msgid "Videos"
@@ -198,24 +206,24 @@ msgstr "Vídeos"
198206
199207#: Dash/Video/VideoPreview.qml:130
200208msgid "Directed by:"
201−msgstr ""
209+msgstr "Dirigit per:"
202210
203211#: Dash/Video/VideoPreview.qml:153
204212msgid "Starring:"
205−msgstr ""
213+msgstr "Protagonistes:"
206214
207215#: Dash/Video/VideoPreview.qml:176
208216msgid "Author:"
209217msgstr "Autor:"
210218
211−#: Greeter/Lockscreen.qml:134
219+#: Greeter/Lockscreen.qml:142
212220msgid "Emergency Call"
213−msgstr ""
221+msgstr "Trucada d'emergència"
214222
215223#: Greeter/PassphraseLockscreen.qml:59
216224#, qt-format
217225msgid "Hello %1"
218−msgstr ""
226+msgstr "Hola %1"
219227
220228#: Greeter/PassphraseLockscreen.qml:59
221229msgid "Hello"
@@ -245,11 +253,15 @@ msgstr "S'està parlant..."
245253msgid "Search"
246254msgstr "Cerca"
247255
248−#: plugins/Unity/scope.cpp:317
256+#: plugins/Unity/scope.cpp:336
249257msgid "Sorry, there is nothing that matches your search."
250258msgstr "No hi ha res que coincideixi amb la cerca"
251259
252−#: Shell.qml:429
260+#: plugins/Unity/showallfilteroption.cpp:41
261+msgid "All"
262+msgstr ""
263+
264+#: Shell.qml:453
253265#, qt-format
254266msgid "Please enter %1"
255−msgstr ""
267+msgstr "Introduïu %1"
po/de.po+47−41
@@ -7,16 +7,16 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
11−"PO-Revision-Date: 2013-06-27 00:37+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11+"PO-Revision-Date: 2013-10-06 10:57+0000\n"
12+"Last-Translator: SaGrLand <sg@samuel-greef.de>\n"
1313"Language-Team: German <de@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-07 06:14+0000\n"
19+"X-Generator: Launchpad (build 16791)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,48 +86,50 @@ msgstr "Wikipedia"
8686msgid "YouTube"
8787msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
91−msgstr ""
91+msgstr "Überspringe Einführung"
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
95−msgstr ""
95+msgstr "Rechter Rand"
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr ""
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103−msgstr ""
103+msgstr "Oberer Rand"
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr ""
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111−msgstr ""
111+msgstr "Schließen"
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115115msgstr ""
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119−msgstr ""
119+msgstr "Linker Rand"
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127−msgstr ""
127+msgstr "Gut gemacht"
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -138,35 +140,35 @@ msgstr "Letzte Suchbegriffe"
138140#: Dash/Apps/AppInfo.qml:73
139141#, qt-format
140142msgid "(%1)"
141−msgstr ""
143+msgstr "(%1)"
142144
143145#. TRANSLATORS: Number of persons who wrote reviews for this app
144146#: Dash/Apps/AppInfo.qml:85
145147#, qt-format
146148msgid "%1 review"
147149msgid_plural "%1 reviews"
148−msgstr[0] ""
149−msgstr[1] ""
150+msgstr[0] "%1 Bewertung"
151+msgstr[1] "%1 Bewertungen"
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153−msgstr ""
155+msgstr "Bewerten"
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157−msgstr ""
159+msgstr "Bewertung hinzufügen"
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161−msgstr ""
163+msgstr "Bewertung"
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165−msgstr ""
167+msgstr "Senden"
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169−msgstr ""
171+msgstr "Kommentare:"
170172
171173#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
172174msgid "Featured"
@@ -208,9 +210,9 @@ msgstr "Darsteller:"
208210msgid "Author:"
209211msgstr "Autor:"
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213−msgstr ""
215+msgstr "Notruf"
214216
215217#: Greeter/PassphraseLockscreen.qml:59
216218#, qt-format
@@ -245,11 +247,15 @@ msgstr "Sie sprechen …"
245247msgid "Search"
246248msgstr "Suchen"
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr "Entschuldigung, es wurden keine Treffer erzielt."
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr "Alle"
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255−msgstr ""
261+msgstr "Bitte geben Sie %1 ein"
po/el.po+29−23
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
1111"PO-Revision-Date: 2013-06-27 00:53+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Greek <el@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
9191msgstr ""
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
9595msgstr ""
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr ""
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103103msgstr ""
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr ""
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111111msgstr ""
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115115msgstr ""
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119119msgstr ""
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127127msgstr ""
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148150msgstr[0] ""
149151msgstr[1] ""
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153155msgstr ""
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157159msgstr ""
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161163msgstr ""
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165167msgstr ""
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169171msgstr ""
170172
@@ -208,7 +210,7 @@ msgstr ""
208210msgid "Author:"
209211msgstr ""
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213215msgstr ""
214216
@@ -245,11 +247,15 @@ msgstr "Ομιλία..."
245247msgid "Search"
246248msgstr "Αναζήτηση"
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr "Λυπούμαστε, δεν υπάρχει τίποτα που να ταιριάζει στην αναζήτησή σας."
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255261msgstr ""
po/en_AU.po+53−47
@@ -7,16 +7,16 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
11−"PO-Revision-Date: 2013-06-27 01:13+0000\n"
12−"Last-Translator: Jackson Doak <Doak.jackson@gmail.com>\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11+"PO-Revision-Date: 2013-09-28 07:46+0000\n"
12+"Last-Translator: Jared Norris <jarednorris@ubuntu.com>\n"
1313"Language-Team: English (Australia) <en_AU@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,48 +86,50 @@ msgstr "Wikipedia"
8686msgid "YouTube"
8787msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
91−msgstr ""
91+msgstr "Skip intro"
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
95−msgstr ""
95+msgstr "Right edge"
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
99−msgstr ""
99+msgstr "Try swiping from the right edge to unlock the phone"
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103−msgstr ""
103+msgstr "Top edge"
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107−msgstr ""
107+msgstr "Try swiping from the top edge to access the indicators"
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111−msgstr ""
111+msgstr "Close"
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115−msgstr ""
115+msgstr "Swipe up again to close the settings screen"
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119−msgstr ""
119+msgstr "Left edge"
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "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"
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127−msgstr ""
127+msgstr "Well done"
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -138,35 +140,35 @@ msgstr "Recent searches"
138140#: Dash/Apps/AppInfo.qml:73
139141#, qt-format
140142msgid "(%1)"
141−msgstr ""
143+msgstr "(%1)"
142144
143145#. TRANSLATORS: Number of persons who wrote reviews for this app
144146#: Dash/Apps/AppInfo.qml:85
145147#, qt-format
146148msgid "%1 review"
147149msgid_plural "%1 reviews"
148−msgstr[0] ""
149−msgstr[1] ""
150+msgstr[0] "%1 review"
151+msgstr[1] "%1 reviews"
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153−msgstr ""
155+msgstr "Rate this"
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157−msgstr ""
159+msgstr "Add a review"
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161−msgstr ""
163+msgstr "Review"
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165−msgstr ""
167+msgstr "Send"
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169−msgstr ""
171+msgstr "Comments:"
170172
171173#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
172174msgid "Featured"
@@ -208,18 +210,18 @@ msgstr "Starring:"
208210msgid "Author:"
209211msgstr "Author:"
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213−msgstr ""
215+msgstr "Emergency Call"
214216
215217#: Greeter/PassphraseLockscreen.qml:59
216218#, qt-format
217219msgid "Hello %1"
218−msgstr ""
220+msgstr "Hello %1"
219221
220222#: Greeter/PassphraseLockscreen.qml:59
221223msgid "Hello"
222−msgstr ""
224+msgstr "Hello"
223225
224226#: Hud/HudParametrizedActionsPage.qml:132
225227msgid "Confirm"
@@ -245,11 +247,15 @@ msgstr "Speaking..."
245247msgid "Search"
246248msgstr "Search"
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr "Sorry, there is nothing that matches your search."
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255−msgstr ""
261+msgstr "Please enter %1"
po/en_GB.po+29−23
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
1111"PO-Revision-Date: 2013-06-27 08:53+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,48 +86,50 @@ msgstr "Wikipedia"
8686msgid "YouTube"
8787msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
9191msgstr ""
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
9595msgstr ""
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr ""
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103103msgstr ""
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr ""
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111111msgstr ""
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115115msgstr ""
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119119msgstr ""
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127127msgstr ""
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148150msgstr[0] ""
149151msgstr[1] ""
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153155msgstr ""
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157159msgstr ""
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161163msgstr ""
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165167msgstr ""
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169171msgstr ""
170172
@@ -208,7 +210,7 @@ msgstr "Starring:"
208210msgid "Author:"
209211msgstr "Author:"
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213215msgstr ""
214216
@@ -245,11 +247,15 @@ msgstr "Speaking..."
245247msgid "Search"
246248msgstr "Search"
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr "Sorry, there is nothing that matches your search."
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255261msgstr "Please enter %1"
po/eo.po+29−23
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
1111"PO-Revision-Date: 2013-06-26 22:35+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Esperanto <eo@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
9191msgstr ""
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
9595msgstr ""
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr ""
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103103msgstr ""
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr ""
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111111msgstr ""
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115115msgstr ""
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119119msgstr ""
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127127msgstr ""
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148150msgstr[0] ""
149151msgstr[1] ""
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153155msgstr ""
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157159msgstr ""
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161163msgstr ""
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165167msgstr ""
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169171msgstr ""
170172
@@ -208,7 +210,7 @@ msgstr ""
208210msgid "Author:"
209211msgstr ""
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213215msgstr ""
214216
@@ -245,11 +247,15 @@ msgstr ""
245247msgid "Search"
246248msgstr ""
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr ""
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255261msgstr ""
po/es.po+34−26
@@ -7,16 +7,16 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
11−"PO-Revision-Date: 2013-09-04 22:12+0000\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11+"PO-Revision-Date: 2013-10-02 04:59+0000\n"
1212"Last-Translator: Adolfo Jayme Barrientos <fitoschido@gmail.com>\n"
1313"Language-Team: Spanish <es@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-09-05 05:35+0000\n"
19−"X-Generator: Launchpad (build 16758)\n"
18+"X-Launchpad-Export-Date: 2013-10-03 06:08+0000\n"
19+"X-Generator: Launchpad (build 16791)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -48,7 +48,7 @@ msgstr "GMail"
4848
4949#: Applications/applications.js:62
5050msgid "Weather"
51−msgstr "Metereología"
51+msgstr "Meteorología"
5252
5353#: Applications/applications.js:68
5454msgid "Notepad"
@@ -86,51 +86,55 @@ msgstr "Wikipedia"
8686msgid "YouTube"
8787msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
9191msgstr "Omitir la introducción"
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
9595msgstr "Borde derecho"
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr "Deslice el dedo desde el borde derecho para desbloquear el teléfono"
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103103msgstr "Borde superior"
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr "Deslice el dedo desde el borde superior para acceder a los menús"
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111111msgstr "Cerrar"
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115115msgstr "Deslice hacia arriba para cerrar la pantalla de configuración"
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119119msgstr "Borde izquierdo"
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124124"Deslice el dedo desde la izquierda para mostrar el lanzador y acceder "
125125"rápidamente a las aplicaciones"
126126
127−#: Components/EdgeDemo.qml:217
127+#: Components/EdgeDemo.qml:226
128128msgid "Well done"
129129msgstr "Bien hecho"
130130
131−#: Components/EdgeDemo.qml:218
132−msgid "You have now mastered the edge gestures and can start using the phone"
133−msgstr "Ahora domina el uso de gestos de los bordes. Puede usar el teléfono"
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+"Ahora domina los gestos de bordes y puede usar el teléfono<br><br>Toque la "
137+"pantalla para comenzar"
134138
135139#: Components/PageHeader.qml:298
136140msgid "Recent searches"
@@ -150,23 +154,23 @@ msgid_plural "%1 reviews"
150154msgstr[0] "%1 reseña"
151155msgstr[1] "%1 reseñas"
152156
153−#: Dash/Apps/AppPreview.qml:175
157+#: Dash/Apps/AppPreview.qml:178
154158msgid "Rate this"
155159msgstr "Valorar esto"
156160
157−#: Dash/Apps/AppReviews.qml:72
161+#: Dash/Apps/AppReviews.qml:74
158162msgid "Add a review"
159163msgstr "Añadir una reseña"
160164
161−#: Dash/Apps/AppReviews.qml:84
165+#: Dash/Apps/AppReviews.qml:86
162166msgid "Review"
163167msgstr "Reseñar"
164168
165−#: Dash/Apps/AppReviews.qml:118
169+#: Dash/Apps/AppReviews.qml:121
166170msgid "Send"
167171msgstr "Enviar"
168172
169−#: Dash/Apps/AppReviews.qml:136
173+#: Dash/Apps/AppReviews.qml:139
170174msgid "Comments:"
171175msgstr "Comentarios:"
172176
@@ -210,7 +214,7 @@ msgstr "Protagonistas:"
210214msgid "Author:"
211215msgstr "Autor:"
212216
213−#: Greeter/Lockscreen.qml:134
217+#: Greeter/Lockscreen.qml:142
214218msgid "Emergency Call"
215219msgstr "Llamada de emergencia"
216220
@@ -247,11 +251,15 @@ msgstr "Hablando…"
247251msgid "Search"
248252msgstr "Buscar"
249253
250−#: plugins/Unity/scope.cpp:317
254+#: plugins/Unity/scope.cpp:336
251255msgid "Sorry, there is nothing that matches your search."
252256msgstr "No hay nada que coincida con su búsqueda."
253257
254−#: Shell.qml:429
258+#: plugins/Unity/showallfilteroption.cpp:41
259+msgid "All"
260+msgstr "Todo"
261+
262+#: Shell.qml:453
255263#, qt-format
256264msgid "Please enter %1"
257265msgstr "Introduzca %1"
po/fi.po+43−35
@@ -7,16 +7,16 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
11−"PO-Revision-Date: 2013-08-23 16:15+0000\n"
12−"Last-Translator: Timo Jyrinki <timo.jyrinki@canonical.com>\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11+"PO-Revision-Date: 2013-10-03 09:21+0000\n"
12+"Last-Translator: Jiri Grönroos <Unknown>\n"
1313"Language-Team: Finnish <fi@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-04 06:11+0000\n"
19+"X-Generator: Launchpad (build 16791)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,49 +86,53 @@ msgstr "Wikipedia"
8686msgid "YouTube"
8787msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
91−msgstr ""
91+msgstr "Ohita esittely"
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
95−msgstr ""
95+msgstr "Oikea reuna"
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
99−msgstr ""
99+msgstr "Vedä oikealta avataksesi puhelimen lukituksen"
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103−msgstr ""
103+msgstr "Yläreuna"
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107−msgstr ""
107+msgstr "Vedä yläreunasta käyttääksesi ilmaisimia"
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111−msgstr ""
111+msgstr "Sulje"
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115−msgstr ""
115+msgstr "Vedä uudestaan sulkeaksesi asetusnäkymän"
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119−msgstr ""
119+msgstr "Vasen reuna"
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123−msgstr ""
123+msgstr "Vedä vasemmalta saattaaksesi sovellusten käynnistimen esiin"
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127−msgstr ""
127+msgstr "Hyvin tehty"
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
134+"Hallitset nyt reunaeleet, joten voit aloittaa puhelimen "
135+"käytön<br><br>Napauta missä tahansa aloittaaksesi"
132136
133137#: Components/PageHeader.qml:298
134138msgid "Recent searches"
@@ -148,23 +152,23 @@ msgid_plural "%1 reviews"
148152msgstr[0] "%1 arvostelu"
149153msgstr[1] "%1 arvostelua"
150154
151−#: Dash/Apps/AppPreview.qml:175
155+#: Dash/Apps/AppPreview.qml:178
152156msgid "Rate this"
153157msgstr "Arvioi tämä"
154158
155−#: Dash/Apps/AppReviews.qml:72
159+#: Dash/Apps/AppReviews.qml:74
156160msgid "Add a review"
157161msgstr "Lisää arvostelu"
158162
159−#: Dash/Apps/AppReviews.qml:84
163+#: Dash/Apps/AppReviews.qml:86
160164msgid "Review"
161165msgstr "Arvostelu"
162166
163−#: Dash/Apps/AppReviews.qml:118
167+#: Dash/Apps/AppReviews.qml:121
164168msgid "Send"
165169msgstr "Lähetä"
166170
167−#: Dash/Apps/AppReviews.qml:136
171+#: Dash/Apps/AppReviews.qml:139
168172msgid "Comments:"
169173msgstr "Kommentit:"
170174
@@ -208,7 +212,7 @@ msgstr "Pääosissa:"
208212msgid "Author:"
209213msgstr "Tekijä:"
210214
211−#: Greeter/Lockscreen.qml:134
215+#: Greeter/Lockscreen.qml:142
212216msgid "Emergency Call"
213217msgstr "Hätäpuhelu"
214218
@@ -245,11 +249,15 @@ msgstr "Puhutaan..."
245249msgid "Search"
246250msgstr "Hae"
247251
248−#: plugins/Unity/scope.cpp:317
252+#: plugins/Unity/scope.cpp:336
249253msgid "Sorry, there is nothing that matches your search."
250254msgstr "Hakuun täsmääviä tuloksia ei löydy."
251255
252−#: Shell.qml:429
256+#: plugins/Unity/showallfilteroption.cpp:41
257+msgid "All"
258+msgstr "Kaikki"
259+
260+#: Shell.qml:453
253261#, qt-format
254262msgid "Please enter %1"
255263msgstr "Kirjoita %1"
po/fo.po+41−35
@@ -7,56 +7,56 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
11−"PO-Revision-Date: 2013-06-27 02:57+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11+"PO-Revision-Date: 2013-10-01 15:13+0000\n"
12+"Last-Translator: Jógvan Olsen <jeggy@jebster.net>\n"
1313"Language-Team: Faroese <fo@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
23−msgstr ""
23+msgstr "Fartelefon"
2424
2525#: Applications/applications.js:29
2626msgid "Camera"
27−msgstr ""
27+msgstr "Myndatól"
2828
2929#: Applications/applications.js:35
3030msgid "Gallery"
31−msgstr ""
31+msgstr "Myndasavn"
3232
3333#: Applications/applications.js:40
3434msgid "Facebook"
35−msgstr ""
35+msgstr "Facebook"
3636
3737#: Applications/applications.js:46
3838msgid "Browser"
39−msgstr ""
39+msgstr "Kagi"
4040
4141#: Applications/applications.js:51
4242msgid "Twitter"
43−msgstr ""
43+msgstr "Twitter"
4444
4545#: Applications/applications.js:57
4646msgid "GMail"
47−msgstr ""
47+msgstr "GMail"
4848
4949#: Applications/applications.js:62
5050msgid "Weather"
51−msgstr ""
51+msgstr "Veðrið"
5252
5353#: Applications/applications.js:68
5454msgid "Notepad"
55−msgstr ""
55+msgstr "Skriviblokkur"
5656
5757#: Applications/applications.js:74
5858msgid "Calendar"
59−msgstr ""
59+msgstr "Kalendari"
6060
6161#: Applications/applications.js:80
6262msgid "Media Player"
@@ -86,48 +86,50 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
9191msgstr ""
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
9595msgstr ""
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr ""
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103103msgstr ""
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr ""
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111111msgstr ""
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115115msgstr ""
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119119msgstr ""
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127127msgstr ""
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148150msgstr[0] ""
149151msgstr[1] ""
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153155msgstr ""
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157159msgstr ""
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161163msgstr ""
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165167msgstr ""
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169171msgstr ""
170172
@@ -208,7 +210,7 @@ msgstr ""
208210msgid "Author:"
209211msgstr ""
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213215msgstr ""
214216
@@ -245,11 +247,15 @@ msgstr "Snakkar..."
245247msgid "Search"
246248msgstr "Leita"
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr "Tíanverri er tað einki sum hóskar til tína leiting."
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255261msgstr ""
po/fr.po+29−23
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
1111"PO-Revision-Date: 2013-06-27 03:21+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: French <fr@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
9191msgstr ""
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
9595msgstr ""
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr ""
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103103msgstr ""
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr ""
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111111msgstr ""
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115115msgstr ""
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119119msgstr ""
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127127msgstr ""
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148150msgstr[0] ""
149151msgstr[1] ""
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153155msgstr ""
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157159msgstr ""
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161163msgstr ""
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165167msgstr ""
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169171msgstr ""
170172
@@ -208,7 +210,7 @@ msgstr ""
208210msgid "Author:"
209211msgstr ""
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213215msgstr ""
214216
@@ -245,11 +247,15 @@ msgstr ""
245247msgid "Search"
246248msgstr ""
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr ""
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255261msgstr ""
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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
11−"PO-Revision-Date: 2013-06-27 03:38+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11+"PO-Revision-Date: 2013-10-03 18:49+0000\n"
12+"Last-Translator: Marcos Lans <Unknown>\n"
1313"Language-Team: Galician <gl@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-04 06:11+0000\n"
19+"X-Generator: Launchpad (build 16791)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
23−msgstr ""
23+msgstr "Teléfono"
2424
2525#: Applications/applications.js:29
2626msgid "Camera"
27−msgstr ""
27+msgstr "Cámara"
2828
2929#: Applications/applications.js:35
3030msgid "Gallery"
31−msgstr ""
31+msgstr "Galería"
3232
3333#: Applications/applications.js:40
3434msgid "Facebook"
35−msgstr ""
35+msgstr "Facebook"
3636
3737#: Applications/applications.js:46
3838msgid "Browser"
39−msgstr ""
39+msgstr "Navegador"
4040
4141#: Applications/applications.js:51
4242msgid "Twitter"
43−msgstr ""
43+msgstr "Twitter"
4444
4545#: Applications/applications.js:57
4646msgid "GMail"
47−msgstr ""
47+msgstr "GMail"
4848
4949#: Applications/applications.js:62
5050msgid "Weather"
51−msgstr ""
51+msgstr "O tempo"
5252
5353#: Applications/applications.js:68
5454msgid "Notepad"
55−msgstr ""
55+msgstr "Bloc de notas"
5656
5757#: Applications/applications.js:74
5858msgid "Calendar"
59−msgstr ""
59+msgstr "Calendario"
6060
6161#: Applications/applications.js:80
6262msgid "Media Player"
63−msgstr ""
63+msgstr "Reprodutor multimedia"
6464
6565#: Applications/applications.js:86
6666msgid "Evernote"
67−msgstr ""
67+msgstr "Evernote"
6868
6969#: Applications/applications.js:91
7070msgid "Map"
71−msgstr ""
71+msgstr "Mapa"
7272
7373#: Applications/applications.js:96
7474msgid "Pinterest"
75−msgstr ""
75+msgstr "Pinterest"
7676
7777#: Applications/applications.js:101
7878msgid "SoundCloud"
79−msgstr ""
79+msgstr "SoundCloud"
8080
8181#: Applications/applications.js:106
8282msgid "Wikipedia"
83−msgstr ""
83+msgstr "Wikipedia"
8484
8585#: Applications/applications.js:111
8686msgid "YouTube"
87−msgstr ""
87+msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
91−msgstr ""
91+msgstr "Saltar introdución"
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
95−msgstr ""
95+msgstr "Bordo dereito"
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "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"
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103−msgstr ""
103+msgstr "Bordo superior"
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107−msgstr ""
107+msgstr "Esvare desde o bordo superior para acceder aos indicadores."
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111−msgstr ""
111+msgstr "Pechar"
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115−msgstr ""
115+msgstr "Esvare cara a arriba para pechar os axustes"
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119−msgstr ""
119+msgstr "Bordo esquerdo"
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "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"
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127−msgstr ""
127+msgstr "Ben feito"
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
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"
132136
133137#: Components/PageHeader.qml:298
134138msgid "Recent searches"
@@ -138,47 +142,47 @@ msgstr "Buscas recentes"
138142#: Dash/Apps/AppInfo.qml:73
139143#, qt-format
140144msgid "(%1)"
141−msgstr ""
145+msgstr "(%1)"
142146
143147#. TRANSLATORS: Number of persons who wrote reviews for this app
144148#: Dash/Apps/AppInfo.qml:85
145149#, qt-format
146150msgid "%1 review"
147151msgid_plural "%1 reviews"
148−msgstr[0] ""
149−msgstr[1] ""
152+msgstr[0] "%1 opinión"
153+msgstr[1] "%1 opinións"
150154
151−#: Dash/Apps/AppPreview.qml:175
155+#: Dash/Apps/AppPreview.qml:178
152156msgid "Rate this"
153−msgstr ""
157+msgstr "Valore isto"
154158
155−#: Dash/Apps/AppReviews.qml:72
159+#: Dash/Apps/AppReviews.qml:74
156160msgid "Add a review"
157−msgstr ""
161+msgstr "Engadir unha opinión"
158162
159−#: Dash/Apps/AppReviews.qml:84
163+#: Dash/Apps/AppReviews.qml:86
160164msgid "Review"
161−msgstr ""
165+msgstr "Opinión"
162166
163−#: Dash/Apps/AppReviews.qml:118
167+#: Dash/Apps/AppReviews.qml:121
164168msgid "Send"
165−msgstr ""
169+msgstr "Enviar"
166170
167−#: Dash/Apps/AppReviews.qml:136
171+#: Dash/Apps/AppReviews.qml:139
168172msgid "Comments:"
169−msgstr ""
173+msgstr "Comentarios:"
170174
171175#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
172176msgid "Featured"
173−msgstr ""
177+msgstr "Destacado"
174178
175179#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
176180msgid "Recent"
177−msgstr ""
181+msgstr "Recentes"
178182
179183#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
180184msgid "New Releases"
181−msgstr ""
185+msgstr "Novas versións"
182186
183187#: Dash/DashMusic.qml:30
184188msgid "Top Charting"
@@ -190,7 +194,7 @@ msgstr "Música"
190194
191195#: Dash/DashVideos.qml:31
192196msgid "Popular Online"
193−msgstr ""
197+msgstr "Populares en liña"
194198
195199#: Dash/DashVideos.qml:146
196200msgid "Videos"
@@ -198,28 +202,28 @@ msgstr "Vídeos"
198202
199203#: Dash/Video/VideoPreview.qml:130
200204msgid "Directed by:"
201−msgstr ""
205+msgstr "Dirixido por"
202206
203207#: Dash/Video/VideoPreview.qml:153
204208msgid "Starring:"
205−msgstr ""
209+msgstr "Favoritos"
206210
207211#: Dash/Video/VideoPreview.qml:176
208212msgid "Author:"
209−msgstr ""
213+msgstr "Autor:"
210214
211−#: Greeter/Lockscreen.qml:134
215+#: Greeter/Lockscreen.qml:142
212216msgid "Emergency Call"
213−msgstr ""
217+msgstr "Chamada de emerxencia"
214218
215219#: Greeter/PassphraseLockscreen.qml:59
216220#, qt-format
217221msgid "Hello %1"
218−msgstr ""
222+msgstr "Ola %1"
219223
220224#: Greeter/PassphraseLockscreen.qml:59
221225msgid "Hello"
222−msgstr ""
226+msgstr "Ola"
223227
224228#: Hud/HudParametrizedActionsPage.qml:132
225229msgid "Confirm"
@@ -245,11 +249,15 @@ msgstr "Falando…"
245249msgid "Search"
246250msgstr "Buscar"
247251
248−#: plugins/Unity/scope.cpp:317
252+#: plugins/Unity/scope.cpp:336
249253msgid "Sorry, there is nothing that matches your search."
250254msgstr "Sentímolo, non hai nada que coincida con esta busca."
251255
252−#: Shell.qml:429
256+#: plugins/Unity/showallfilteroption.cpp:41
257+msgid "All"
258+msgstr "Todo"
259+
260+#: Shell.qml:453
253261#, qt-format
254262msgid "Please enter %1"
255−msgstr ""
263+msgstr "Introduza %1"
po/he.po+79−73
@@ -7,127 +7,129 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
11−"PO-Revision-Date: 2013-06-27 03:54+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11+"PO-Revision-Date: 2013-10-01 09:19+0000\n"
12+"Last-Translator: Yaron <sh.yaron@gmail.com>\n"
1313"Language-Team: Hebrew <he@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
23−msgstr ""
23+msgstr "טלפון"
2424
2525#: Applications/applications.js:29
2626msgid "Camera"
27−msgstr ""
27+msgstr "מצלמה"
2828
2929#: Applications/applications.js:35
3030msgid "Gallery"
31−msgstr ""
31+msgstr "גלריה"
3232
3333#: Applications/applications.js:40
3434msgid "Facebook"
35−msgstr ""
35+msgstr "Facebook"
3636
3737#: Applications/applications.js:46
3838msgid "Browser"
39−msgstr ""
39+msgstr "דפדפן"
4040
4141#: Applications/applications.js:51
4242msgid "Twitter"
43−msgstr ""
43+msgstr "Twitter"
4444
4545#: Applications/applications.js:57
4646msgid "GMail"
47−msgstr ""
47+msgstr "GMail"
4848
4949#: Applications/applications.js:62
5050msgid "Weather"
51−msgstr ""
51+msgstr "מזג אוויר"
5252
5353#: Applications/applications.js:68
5454msgid "Notepad"
55−msgstr ""
55+msgstr "פנקס רשימות"
5656
5757#: Applications/applications.js:74
5858msgid "Calendar"
59−msgstr ""
59+msgstr "לוח שנה"
6060
6161#: Applications/applications.js:80
6262msgid "Media Player"
63−msgstr ""
63+msgstr "נגן מדיה"
6464
6565#: Applications/applications.js:86
6666msgid "Evernote"
67−msgstr ""
67+msgstr "Evernote"
6868
6969#: Applications/applications.js:91
7070msgid "Map"
71−msgstr ""
71+msgstr "מפה"
7272
7373#: Applications/applications.js:96
7474msgid "Pinterest"
75−msgstr ""
75+msgstr "Pinterest"
7676
7777#: Applications/applications.js:101
7878msgid "SoundCloud"
79−msgstr ""
79+msgstr "SoundCloud"
8080
8181#: Applications/applications.js:106
8282msgid "Wikipedia"
83−msgstr ""
83+msgstr "ויקיפדיה"
8484
8585#: Applications/applications.js:111
8686msgid "YouTube"
87−msgstr ""
87+msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
91−msgstr ""
91+msgstr "לדלג על הפתיחה"
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
95−msgstr ""
95+msgstr "שול ימני"
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
99−msgstr ""
99+msgstr "נא לנסות למשוך מהשול הימני כדי לשחרר את נעילת הטלפון"
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103−msgstr ""
103+msgstr "השול העליון"
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107−msgstr ""
107+msgstr "נא לנסות למשוך מהשול העליון כדי לגשת למחוונים"
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111−msgstr ""
111+msgstr "סגירה"
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115−msgstr ""
115+msgstr "ניתן למשוך שוב כדי לסגור את מסך ההגדרות"
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119−msgstr ""
119+msgstr "שול שמאלי"
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123−msgstr ""
123+msgstr "יש למשוך משמאל כדי לחשוף את המשגר לצורך גישה מהירה ליישומים"
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127−msgstr ""
127+msgstr "כל הכבוד"
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -138,51 +140,51 @@ msgstr "חיפושים אחרונים"
138140#: Dash/Apps/AppInfo.qml:73
139141#, qt-format
140142msgid "(%1)"
141−msgstr ""
143+msgstr "(%1)"
142144
143145#. TRANSLATORS: Number of persons who wrote reviews for this app
144146#: Dash/Apps/AppInfo.qml:85
145147#, qt-format
146148msgid "%1 review"
147149msgid_plural "%1 reviews"
148−msgstr[0] ""
149−msgstr[1] ""
150+msgstr[0] "סקירה %1"
151+msgstr[1] "%1 סקירות"
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153−msgstr ""
155+msgstr "דירוג היישום"
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157−msgstr ""
159+msgstr "הוספת סקירה"
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161−msgstr ""
163+msgstr "סקירה"
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165−msgstr ""
167+msgstr "שליחה"
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169−msgstr ""
171+msgstr "הערות:"
170172
171173#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
172174msgid "Featured"
173−msgstr ""
175+msgstr "מומלצים"
174176
175177#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
176178msgid "Recent"
177−msgstr ""
179+msgstr "אחרונים"
178180
179181#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
180182msgid "New Releases"
181−msgstr ""
183+msgstr "מהדורות חדשות"
182184
183185#: Dash/DashMusic.qml:30
184186msgid "Top Charting"
185−msgstr ""
187+msgstr "בראש הטבלה"
186188
187189#: Dash/DashMusic.qml:91
188190msgid "Music"
@@ -190,7 +192,7 @@ msgstr "מוזיקה"
190192
191193#: Dash/DashVideos.qml:31
192194msgid "Popular Online"
193−msgstr ""
195+msgstr "פופולריים ברחבי הרשת"
194196
195197#: Dash/DashVideos.qml:146
196198msgid "Videos"
@@ -198,28 +200,28 @@ msgstr "סרטונים"
198200
199201#: Dash/Video/VideoPreview.qml:130
200202msgid "Directed by:"
201−msgstr ""
203+msgstr "בוים ע״י:"
202204
203205#: Dash/Video/VideoPreview.qml:153
204206msgid "Starring:"
205−msgstr ""
207+msgstr "בכיכוב:"
206208
207209#: Dash/Video/VideoPreview.qml:176
208210msgid "Author:"
209−msgstr ""
211+msgstr "יוצר:"
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213−msgstr ""
215+msgstr "שיחת חירום"
214216
215217#: Greeter/PassphraseLockscreen.qml:59
216218#, qt-format
217219msgid "Hello %1"
218−msgstr ""
220+msgstr "שלום %1"
219221
220222#: Greeter/PassphraseLockscreen.qml:59
221223msgid "Hello"
222−msgstr ""
224+msgstr "שלום"
223225
224226#: Hud/HudParametrizedActionsPage.qml:132
225227msgid "Confirm"
@@ -239,17 +241,21 @@ msgstr "יש לדבר כעת..."
239241
240242#: Hud/Hud.qml:94
241243msgid "Speaking..."
242−msgstr "מושמע דיבור..."
244+msgstr "הדיבור מושמע…"
243245
244246#: Panel/SearchIndicator.qml:27
245247msgid "Search"
246248msgstr "חיפוש"
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr "שום דבר אינו תואם לחיפוש שלך, עמך הסליחה."
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255−msgstr ""
261+msgstr "נא להזין %1"
po/hr.po+29−23
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
1111"PO-Revision-Date: 2013-06-27 04:14+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Croatian <hr@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
20−"X-Generator: Launchpad (build 16750)\n"
19+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
20+"X-Generator: Launchpad (build 16774)\n"
2121
2222#: Applications/applications.js:23
2323msgid "Phone"
@@ -87,48 +87,50 @@ msgstr ""
8787msgid "YouTube"
8888msgstr ""
8989
90−#: Components/EdgeDemoOverlay.qml:145
90+#: Components/EdgeDemoOverlay.qml:150
9191msgid "Skip intro"
9292msgstr ""
9393
94−#: Components/EdgeDemo.qml:98
94+#: Components/EdgeDemo.qml:112
9595msgid "Right edge"
9696msgstr ""
9797
98−#: Components/EdgeDemo.qml:99
98+#: Components/EdgeDemo.qml:113
9999msgid "Try swiping from the right edge to unlock the phone"
100100msgstr ""
101101
102−#: Components/EdgeDemo.qml:135
102+#: Components/EdgeDemo.qml:144
103103msgid "Top edge"
104104msgstr ""
105105
106−#: Components/EdgeDemo.qml:136
106+#: Components/EdgeDemo.qml:145
107107msgid "Try swiping from the top edge to access the indicators"
108108msgstr ""
109109
110−#: Components/EdgeDemo.qml:161
110+#: Components/EdgeDemo.qml:170
111111msgid "Close"
112112msgstr ""
113113
114−#: Components/EdgeDemo.qml:162
114+#: Components/EdgeDemo.qml:171
115115msgid "Swipe up again to close the settings screen"
116116msgstr ""
117117
118−#: Components/EdgeDemo.qml:189
118+#: Components/EdgeDemo.qml:198
119119msgid "Left edge"
120120msgstr ""
121121
122−#: Components/EdgeDemo.qml:190
122+#: Components/EdgeDemo.qml:199
123123msgid "Swipe from the left to reveal the launcher for quick access to apps"
124124msgstr ""
125125
126−#: Components/EdgeDemo.qml:217
126+#: Components/EdgeDemo.qml:226
127127msgid "Well done"
128128msgstr ""
129129
130−#: Components/EdgeDemo.qml:218
131−msgid "You have now mastered the edge gestures and can start using the phone"
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"
132134msgstr ""
133135
134136#: Components/PageHeader.qml:298
@@ -149,23 +151,23 @@ msgid_plural "%1 reviews"
149151msgstr[0] ""
150152msgstr[1] ""
151153
152−#: Dash/Apps/AppPreview.qml:175
154+#: Dash/Apps/AppPreview.qml:178
153155msgid "Rate this"
154156msgstr ""
155157
156−#: Dash/Apps/AppReviews.qml:72
158+#: Dash/Apps/AppReviews.qml:74
157159msgid "Add a review"
158160msgstr ""
159161
160−#: Dash/Apps/AppReviews.qml:84
162+#: Dash/Apps/AppReviews.qml:86
161163msgid "Review"
162164msgstr ""
163165
164−#: Dash/Apps/AppReviews.qml:118
166+#: Dash/Apps/AppReviews.qml:121
165167msgid "Send"
166168msgstr ""
167169
168−#: Dash/Apps/AppReviews.qml:136
170+#: Dash/Apps/AppReviews.qml:139
169171msgid "Comments:"
170172msgstr ""
171173
@@ -209,7 +211,7 @@ msgstr ""
209211msgid "Author:"
210212msgstr ""
211213
212−#: Greeter/Lockscreen.qml:134
214+#: Greeter/Lockscreen.qml:142
213215msgid "Emergency Call"
214216msgstr ""
215217
@@ -246,11 +248,15 @@ msgstr "Govor..."
246248msgid "Search"
247249msgstr "Pretraživanje"
248250
249−#: plugins/Unity/scope.cpp:317
251+#: plugins/Unity/scope.cpp:336
250252msgid "Sorry, there is nothing that matches your search."
251253msgstr "Nažalost, ne postoji ništa što odgovara vašoj pretrazi."
252254
253−#: Shell.qml:429
255+#: plugins/Unity/showallfilteroption.cpp:41
256+msgid "All"
257+msgstr ""
258+
259+#: Shell.qml:453
254260#, qt-format
255261msgid "Please enter %1"
256262msgstr ""
po/hu.po+29−23
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
1111"PO-Revision-Date: 2013-06-27 04:28+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Hungarian <hu@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
9191msgstr ""
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
9595msgstr ""
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr ""
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103103msgstr ""
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr ""
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111111msgstr ""
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115115msgstr ""
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119119msgstr ""
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127127msgstr ""
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148150msgstr[0] ""
149151msgstr[1] ""
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153155msgstr ""
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157159msgstr ""
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161163msgstr ""
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165167msgstr ""
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169171msgstr ""
170172
@@ -208,7 +210,7 @@ msgstr ""
208210msgid "Author:"
209211msgstr ""
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213215msgstr ""
214216
@@ -245,11 +247,15 @@ msgstr "Beszéd…"
245247msgid "Search"
246248msgstr "Keresés"
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr "Elnézést, nincs találat a keresésre."
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255261msgstr ""
po/hy.po+29−23
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
1111"PO-Revision-Date: 2013-06-27 04:43+0000\n"
1212"Last-Translator: iAbaS <sosabazyan@yandex.ru>\n"
1313"Language-Team: Armenian <hy@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
9191msgstr ""
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
9595msgstr ""
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr ""
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103103msgstr ""
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr ""
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111111msgstr ""
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115115msgstr ""
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119119msgstr ""
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127127msgstr ""
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148150msgstr[0] ""
149151msgstr[1] ""
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153155msgstr ""
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157159msgstr ""
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161163msgstr ""
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165167msgstr ""
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169171msgstr ""
170172
@@ -208,7 +210,7 @@ msgstr ""
208210msgid "Author:"
209211msgstr ""
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213215msgstr ""
214216
@@ -245,11 +247,15 @@ msgstr "Խոսում եմ..."
245247msgid "Search"
246248msgstr "Որոնում"
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr "Կներերք, բայց Ձեր հարցումով ոչինչ չկար"
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255261msgstr ""
po/id.po+29−23
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
1111"PO-Revision-Date: 2013-06-26 22:35+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Indonesian <id@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
9191msgstr ""
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
9595msgstr ""
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr ""
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103103msgstr ""
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr ""
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111111msgstr ""
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115115msgstr ""
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119119msgstr ""
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127127msgstr ""
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148150msgstr[0] ""
149151msgstr[1] ""
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153155msgstr ""
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157159msgstr ""
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161163msgstr ""
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165167msgstr ""
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169171msgstr ""
170172
@@ -208,7 +210,7 @@ msgstr ""
208210msgid "Author:"
209211msgstr ""
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213215msgstr ""
214216
@@ -245,11 +247,15 @@ msgstr ""
245247msgid "Search"
246248msgstr ""
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr ""
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255261msgstr ""
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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
11−"PO-Revision-Date: 2013-06-27 05:14+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11+"PO-Revision-Date: 2013-09-28 10:05+0000\n"
12+"Last-Translator: Claudio Arseni <claudio.arseni@gmail.com>\n"
1313"Language-Team: Italian <it@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
23−msgstr ""
23+msgstr "Telefono"
2424
2525#: Applications/applications.js:29
2626msgid "Camera"
27−msgstr ""
27+msgstr "Fotocamera"
2828
2929#: Applications/applications.js:35
3030msgid "Gallery"
31−msgstr ""
31+msgstr "Galleria"
3232
3333#: Applications/applications.js:40
3434msgid "Facebook"
35−msgstr ""
35+msgstr "Facebook"
3636
3737#: Applications/applications.js:46
3838msgid "Browser"
39−msgstr ""
39+msgstr "Browser"
4040
4141#: Applications/applications.js:51
4242msgid "Twitter"
43−msgstr ""
43+msgstr "Twitter"
4444
4545#: Applications/applications.js:57
4646msgid "GMail"
47−msgstr ""
47+msgstr "GMail"
4848
4949#: Applications/applications.js:62
5050msgid "Weather"
51−msgstr ""
51+msgstr "Meteo"
5252
5353#: Applications/applications.js:68
5454msgid "Notepad"
55−msgstr ""
55+msgstr "Blocco note"
5656
5757#: Applications/applications.js:74
5858msgid "Calendar"
59−msgstr ""
59+msgstr "Calendario"
6060
6161#: Applications/applications.js:80
6262msgid "Media Player"
63−msgstr ""
63+msgstr "Riproduttore multimediale"
6464
6565#: Applications/applications.js:86
6666msgid "Evernote"
67−msgstr ""
67+msgstr "Evernote"
6868
6969#: Applications/applications.js:91
7070msgid "Map"
71−msgstr ""
71+msgstr "Mappa"
7272
7373#: Applications/applications.js:96
7474msgid "Pinterest"
75−msgstr ""
75+msgstr "Pinterest"
7676
7777#: Applications/applications.js:101
7878msgid "SoundCloud"
79−msgstr ""
79+msgstr "SoundCloud"
8080
8181#: Applications/applications.js:106
8282msgid "Wikipedia"
83−msgstr ""
83+msgstr "Wikipedia"
8484
8585#: Applications/applications.js:111
8686msgid "YouTube"
87−msgstr ""
87+msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
91−msgstr ""
91+msgstr "Salta introduzione"
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
95−msgstr ""
95+msgstr "Bordo destro"
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "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"
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103−msgstr ""
103+msgstr "Bordo superiore"
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr ""
108+"Provare a far scorrere dal bordo in alto per accedere agli indicatori"
108109
109−#: Components/EdgeDemo.qml:161
110+#: Components/EdgeDemo.qml:170
110111msgid "Close"
111−msgstr ""
112+msgstr "Chiudi"
112113
113−#: Components/EdgeDemo.qml:162
114+#: Components/EdgeDemo.qml:171
114115msgid "Swipe up again to close the settings screen"
115116msgstr ""
117+"Far scorrere verso l'alto nuovamente per chiudere la schermata delle "
118+"impostazioni"
116119
117−#: Components/EdgeDemo.qml:189
120+#: Components/EdgeDemo.qml:198
118121msgid "Left edge"
119−msgstr ""
122+msgstr "Bordo sinistro"
120123
121−#: Components/EdgeDemo.qml:190
124+#: Components/EdgeDemo.qml:199
122125msgid "Swipe from the left to reveal the launcher for quick access to apps"
123126msgstr ""
127+"Far scorrere il bordo sinistro per mostrare il Launcher e avere un rapido "
128+"accesso alle applicazioni"
124129
125−#: Components/EdgeDemo.qml:217
130+#: Components/EdgeDemo.qml:226
126131msgid "Well done"
127−msgstr ""
132+msgstr "Ben fatto"
128133
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
134+#: Components/EdgeDemo.qml:227
135+msgid ""
136+"You have now mastered the edge gestures and can start using the "
137+"phone<br><br>Tap anywhere to start"
131138msgstr ""
132139
133140#: Components/PageHeader.qml:298
@@ -138,51 +145,51 @@ msgstr "Ricerche recenti"
138145#: Dash/Apps/AppInfo.qml:73
139146#, qt-format
140147msgid "(%1)"
141−msgstr ""
148+msgstr "(%1)"
142149
143150#. TRANSLATORS: Number of persons who wrote reviews for this app
144151#: Dash/Apps/AppInfo.qml:85
145152#, qt-format
146153msgid "%1 review"
147154msgid_plural "%1 reviews"
148−msgstr[0] ""
149−msgstr[1] ""
155+msgstr[0] "%1 recensione"
156+msgstr[1] "%1 recensioni"
150157
151−#: Dash/Apps/AppPreview.qml:175
158+#: Dash/Apps/AppPreview.qml:178
152159msgid "Rate this"
153−msgstr ""
160+msgstr "Valuta"
154161
155−#: Dash/Apps/AppReviews.qml:72
162+#: Dash/Apps/AppReviews.qml:74
156163msgid "Add a review"
157−msgstr ""
164+msgstr "Aggiungi una recensione"
158165
159−#: Dash/Apps/AppReviews.qml:84
166+#: Dash/Apps/AppReviews.qml:86
160167msgid "Review"
161−msgstr ""
168+msgstr "Recensisci"
162169
163−#: Dash/Apps/AppReviews.qml:118
170+#: Dash/Apps/AppReviews.qml:121
164171msgid "Send"
165−msgstr ""
172+msgstr "Invia"
166173
167−#: Dash/Apps/AppReviews.qml:136
174+#: Dash/Apps/AppReviews.qml:139
168175msgid "Comments:"
169−msgstr ""
176+msgstr "Commenti:"
170177
171178#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
172179msgid "Featured"
173−msgstr ""
180+msgstr "In evidenza"
174181
175182#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
176183msgid "Recent"
177−msgstr ""
184+msgstr "Recenti"
178185
179186#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
180187msgid "New Releases"
181−msgstr ""
188+msgstr "Nuovi rilasci"
182189
183190#: Dash/DashMusic.qml:30
184191msgid "Top Charting"
185−msgstr ""
192+msgstr "Più votate"
186193
187194#: Dash/DashMusic.qml:91
188195msgid "Music"
@@ -190,7 +197,7 @@ msgstr "Musica"
190197
191198#: Dash/DashVideos.qml:31
192199msgid "Popular Online"
193−msgstr ""
200+msgstr "Popolari online"
194201
195202#: Dash/DashVideos.qml:146
196203msgid "Videos"
@@ -198,28 +205,28 @@ msgstr "Video"
198205
199206#: Dash/Video/VideoPreview.qml:130
200207msgid "Directed by:"
201−msgstr ""
208+msgstr "Diretto da:"
202209
203210#: Dash/Video/VideoPreview.qml:153
204211msgid "Starring:"
205−msgstr ""
212+msgstr "Valutazioni:"
206213
207214#: Dash/Video/VideoPreview.qml:176
208215msgid "Author:"
209−msgstr ""
216+msgstr "Autore:"
210217
211−#: Greeter/Lockscreen.qml:134
218+#: Greeter/Lockscreen.qml:142
212219msgid "Emergency Call"
213−msgstr ""
220+msgstr "Chiamata di emergenza"
214221
215222#: Greeter/PassphraseLockscreen.qml:59
216223#, qt-format
217224msgid "Hello %1"
218−msgstr ""
225+msgstr "Ciao %1"
219226
220227#: Greeter/PassphraseLockscreen.qml:59
221228msgid "Hello"
222−msgstr ""
229+msgstr "Ciao"
223230
224231#: Hud/HudParametrizedActionsPage.qml:132
225232msgid "Confirm"
@@ -245,11 +252,15 @@ msgstr "Sto parlando..."
245252msgid "Search"
246253msgstr "Cerca"
247254
248−#: plugins/Unity/scope.cpp:317
255+#: plugins/Unity/scope.cpp:336
249256msgid "Sorry, there is nothing that matches your search."
250257msgstr "Nessun risultato corrispondente alla ricerca."
251258
252−#: Shell.qml:429
259+#: plugins/Unity/showallfilteroption.cpp:41
260+msgid "All"
261+msgstr ""
262+
263+#: Shell.qml:453
253264#, qt-format
254265msgid "Please enter %1"
255−msgstr ""
266+msgstr "Inserire %1"
po/ja.po+29−23
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
1111"PO-Revision-Date: 2013-06-26 22:36+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Japanese <ja@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
9191msgstr ""
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
9595msgstr ""
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr ""
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103103msgstr ""
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr ""
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111111msgstr ""
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115115msgstr ""
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119119msgstr ""
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127127msgstr ""
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148150msgstr[0] ""
149151msgstr[1] ""
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153155msgstr ""
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157159msgstr ""
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161163msgstr ""
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165167msgstr ""
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169171msgstr ""
170172
@@ -208,7 +210,7 @@ msgstr ""
208210msgid "Author:"
209211msgstr ""
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213215msgstr ""
214216
@@ -245,11 +247,15 @@ msgstr ""
245247msgid "Search"
246248msgstr ""
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr ""
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255261msgstr ""
po/kn.po+29−23
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
1111"PO-Revision-Date: 2013-06-27 05:43+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Kannada <kn@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
9191msgstr ""
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
9595msgstr ""
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr ""
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103103msgstr ""
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr ""
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111111msgstr ""
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115115msgstr ""
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119119msgstr ""
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127127msgstr ""
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148150msgstr[0] ""
149151msgstr[1] ""
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153155msgstr ""
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157159msgstr ""
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161163msgstr ""
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165167msgstr ""
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169171msgstr ""
170172
@@ -208,7 +210,7 @@ msgstr ""
208210msgid "Author:"
209211msgstr ""
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213215msgstr ""
214216
@@ -245,11 +247,15 @@ msgstr "ಮಾತನಾಡುತಿದ್ದೀರಿ"
245247msgid "Search"
246248msgstr "ಹುಡುಕು"
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr "ಕ್ಷಮಿಸಿ ನಿಮ್ಮ ಶೋಧನೆಗೆ ಸರಿಯಾದ ಹೊಂದಾಣಿಕೆಗಳು ದೊರಕುತ್ತಿಲ್ಲ"
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255261msgstr ""
po/ko.po+29−23
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
1111"PO-Revision-Date: 2013-06-27 05:59+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Korean <ko@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
9191msgstr ""
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
9595msgstr ""
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr ""
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103103msgstr ""
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr ""
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111111msgstr ""
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115115msgstr ""
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119119msgstr ""
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127127msgstr ""
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148150msgstr[0] ""
149151msgstr[1] ""
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153155msgstr ""
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157159msgstr ""
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161163msgstr ""
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165167msgstr ""
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169171msgstr ""
170172
@@ -208,7 +210,7 @@ msgstr ""
208210msgid "Author:"
209211msgstr ""
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213215msgstr ""
214216
@@ -245,11 +247,15 @@ msgstr ""
245247msgid "Search"
246248msgstr "찾기"
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr ""
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255261msgstr ""
po/ky.po+29−23
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
1111"PO-Revision-Date: 2013-06-27 06:17+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Kirghiz <ky@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
9191msgstr ""
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
9595msgstr ""
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr ""
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103103msgstr ""
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr ""
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111111msgstr ""
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115115msgstr ""
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119119msgstr ""
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127127msgstr ""
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148150msgstr[0] ""
149151msgstr[1] ""
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153155msgstr ""
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157159msgstr ""
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161163msgstr ""
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165167msgstr ""
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169171msgstr ""
170172
@@ -208,7 +210,7 @@ msgstr ""
208210msgid "Author:"
209211msgstr ""
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213215msgstr ""
214216
@@ -245,11 +247,15 @@ msgstr "Сүйлөнүүдө..."
245247msgid "Search"
246248msgstr "Издөө"
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr "Тилекке каршы, сиздин издөөңүзгө эч нерсе дал келген жок."
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255261msgstr ""
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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
11−"PO-Revision-Date: 2013-06-27 06:31+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11+"PO-Revision-Date: 2013-09-28 16:29+0000\n"
12+"Last-Translator: Jānis-Marks Gailis <jeanmarc.gailis@gmail.com>\n"
1313"Language-Team: Latvian <lv@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
23−msgstr ""
23+msgstr "Tālrunis"
2424
2525#: Applications/applications.js:29
2626msgid "Camera"
27−msgstr ""
27+msgstr "Fotokamera"
2828
2929#: Applications/applications.js:35
3030msgid "Gallery"
31−msgstr ""
31+msgstr "Galerija"
3232
3333#: Applications/applications.js:40
3434msgid "Facebook"
35−msgstr ""
35+msgstr "Facebook"
3636
3737#: Applications/applications.js:46
3838msgid "Browser"
39−msgstr ""
39+msgstr "Pārlūkprogramma"
4040
4141#: Applications/applications.js:51
4242msgid "Twitter"
43−msgstr ""
43+msgstr "Twitter"
4444
4545#: Applications/applications.js:57
4646msgid "GMail"
47−msgstr ""
47+msgstr "GMail"
4848
4949#: Applications/applications.js:62
5050msgid "Weather"
51−msgstr ""
51+msgstr "Laikapstākļi"
5252
5353#: Applications/applications.js:68
5454msgid "Notepad"
55−msgstr ""
55+msgstr "Bloknots"
5656
5757#: Applications/applications.js:74
5858msgid "Calendar"
59−msgstr ""
59+msgstr "Kalendārs"
6060
6161#: Applications/applications.js:80
6262msgid "Media Player"
63−msgstr ""
63+msgstr "Mēdiju Atskaņotājs"
6464
6565#: Applications/applications.js:86
6666msgid "Evernote"
@@ -68,66 +68,68 @@ msgstr ""
6868
6969#: Applications/applications.js:91
7070msgid "Map"
71−msgstr ""
71+msgstr "Karte"
7272
7373#: Applications/applications.js:96
7474msgid "Pinterest"
75−msgstr ""
75+msgstr "Pinterest"
7676
7777#: Applications/applications.js:101
7878msgid "SoundCloud"
79−msgstr ""
79+msgstr "SoundCloud"
8080
8181#: Applications/applications.js:106
8282msgid "Wikipedia"
83−msgstr ""
83+msgstr "Vikipēdija"
8484
8585#: Applications/applications.js:111
8686msgid "YouTube"
87−msgstr ""
87+msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
9191msgstr ""
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
95−msgstr ""
95+msgstr "Labā mala"
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr ""
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103103msgstr ""
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr ""
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111111msgstr ""
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115115msgstr ""
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119119msgstr ""
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127127msgstr ""
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148150msgstr[0] ""
149151msgstr[1] ""
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153155msgstr ""
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157159msgstr ""
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161163msgstr ""
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165167msgstr ""
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169171msgstr ""
170172
@@ -208,7 +210,7 @@ msgstr ""
208210msgid "Author:"
209211msgstr ""
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213215msgstr ""
214216
@@ -245,11 +247,15 @@ msgstr "Runa..."
245247msgid "Search"
246248msgstr "Meklēt"
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr "Diemžēl nekas neatbilst jūsu meklētajam."
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255261msgstr ""
po/my.po+29−23
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
1111"PO-Revision-Date: 2013-06-27 06:47+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Burmese <my@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
9191msgstr ""
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
9595msgstr ""
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr ""
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103103msgstr ""
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr ""
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111111msgstr ""
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115115msgstr ""
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119119msgstr ""
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127127msgstr ""
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148150msgstr[0] ""
149151msgstr[1] ""
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153155msgstr ""
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157159msgstr ""
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161163msgstr ""
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165167msgstr ""
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169171msgstr ""
170172
@@ -208,7 +210,7 @@ msgstr ""
208210msgid "Author:"
209211msgstr ""
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213215msgstr ""
214216
@@ -245,11 +247,15 @@ msgstr "ပြောနေသည်"
245247msgid "Search"
246248msgstr "ရှာဖွေ"
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr "ဆောရီး၊ သင်၏ရှာဖွေမူနှင့်တူညီတာဘာမှမရှိပါ။"
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255261msgstr ""
po/nb.po+29−23
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
1111"PO-Revision-Date: 2013-06-27 07:02+0000\n"
1212"Last-Translator: Joakim Langvand <jlangvand@gmail.com>\n"
1313"Language-Team: Norwegian Bokmal <nb@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
9191msgstr ""
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
9595msgstr ""
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr ""
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103103msgstr ""
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr ""
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111111msgstr ""
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115115msgstr ""
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119119msgstr ""
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127127msgstr ""
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148150msgstr[0] ""
149151msgstr[1] ""
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153155msgstr ""
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157159msgstr ""
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161163msgstr ""
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165167msgstr ""
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169171msgstr ""
170172
@@ -208,7 +210,7 @@ msgstr ""
208210msgid "Author:"
209211msgstr ""
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213215msgstr ""
214216
@@ -245,11 +247,15 @@ msgstr "Snakker …"
245247msgid "Search"
246248msgstr "Søk"
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr "Søket ga ingen treff."
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255261msgstr ""
po/nl.po+29−23
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
1111"PO-Revision-Date: 2013-06-27 07:19+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Dutch <nl@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
9191msgstr ""
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
9595msgstr ""
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr ""
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103103msgstr ""
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr ""
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111111msgstr ""
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115115msgstr ""
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119119msgstr ""
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127127msgstr ""
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148150msgstr[0] ""
149151msgstr[1] ""
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153155msgstr ""
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157159msgstr ""
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161163msgstr ""
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165167msgstr ""
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169171msgstr ""
170172
@@ -208,7 +210,7 @@ msgstr ""
208210msgid "Author:"
209211msgstr ""
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213215msgstr ""
214216
@@ -245,11 +247,15 @@ msgstr "Inspreken…"
245247msgid "Search"
246248msgstr "Zoeken"
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr "Er is helaas niets dat met uw zoekopdracht overeenkomt."
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255261msgstr ""
po/pl.po+29−23
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
1111"PO-Revision-Date: 2013-06-27 08:52+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Polish <pl@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
1818"|| n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
20−"X-Generator: Launchpad (build 16750)\n"
19+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
20+"X-Generator: Launchpad (build 16774)\n"
2121
2222#: Applications/applications.js:23
2323msgid "Phone"
@@ -87,48 +87,50 @@ msgstr "Wikipedia"
8787msgid "YouTube"
8888msgstr "YouTube"
8989
90−#: Components/EdgeDemoOverlay.qml:145
90+#: Components/EdgeDemoOverlay.qml:150
9191msgid "Skip intro"
9292msgstr ""
9393
94−#: Components/EdgeDemo.qml:98
94+#: Components/EdgeDemo.qml:112
9595msgid "Right edge"
9696msgstr ""
9797
98−#: Components/EdgeDemo.qml:99
98+#: Components/EdgeDemo.qml:113
9999msgid "Try swiping from the right edge to unlock the phone"
100100msgstr ""
101101
102−#: Components/EdgeDemo.qml:135
102+#: Components/EdgeDemo.qml:144
103103msgid "Top edge"
104104msgstr ""
105105
106−#: Components/EdgeDemo.qml:136
106+#: Components/EdgeDemo.qml:145
107107msgid "Try swiping from the top edge to access the indicators"
108108msgstr ""
109109
110−#: Components/EdgeDemo.qml:161
110+#: Components/EdgeDemo.qml:170
111111msgid "Close"
112112msgstr ""
113113
114−#: Components/EdgeDemo.qml:162
114+#: Components/EdgeDemo.qml:171
115115msgid "Swipe up again to close the settings screen"
116116msgstr ""
117117
118−#: Components/EdgeDemo.qml:189
118+#: Components/EdgeDemo.qml:198
119119msgid "Left edge"
120120msgstr ""
121121
122−#: Components/EdgeDemo.qml:190
122+#: Components/EdgeDemo.qml:199
123123msgid "Swipe from the left to reveal the launcher for quick access to apps"
124124msgstr ""
125125
126−#: Components/EdgeDemo.qml:217
126+#: Components/EdgeDemo.qml:226
127127msgid "Well done"
128128msgstr ""
129129
130−#: Components/EdgeDemo.qml:218
131−msgid "You have now mastered the edge gestures and can start using the phone"
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"
132134msgstr ""
133135
134136#: Components/PageHeader.qml:298
@@ -149,23 +151,23 @@ msgid_plural "%1 reviews"
149151msgstr[0] ""
150152msgstr[1] ""
151153
152−#: Dash/Apps/AppPreview.qml:175
154+#: Dash/Apps/AppPreview.qml:178
153155msgid "Rate this"
154156msgstr ""
155157
156−#: Dash/Apps/AppReviews.qml:72
158+#: Dash/Apps/AppReviews.qml:74
157159msgid "Add a review"
158160msgstr ""
159161
160−#: Dash/Apps/AppReviews.qml:84
162+#: Dash/Apps/AppReviews.qml:86
161163msgid "Review"
162164msgstr ""
163165
164−#: Dash/Apps/AppReviews.qml:118
166+#: Dash/Apps/AppReviews.qml:121
165167msgid "Send"
166168msgstr ""
167169
168−#: Dash/Apps/AppReviews.qml:136
170+#: Dash/Apps/AppReviews.qml:139
169171msgid "Comments:"
170172msgstr ""
171173
@@ -209,7 +211,7 @@ msgstr "Obsada:"
209211msgid "Author:"
210212msgstr "Autor:"
211213
212−#: Greeter/Lockscreen.qml:134
214+#: Greeter/Lockscreen.qml:142
213215msgid "Emergency Call"
214216msgstr ""
215217
@@ -246,11 +248,15 @@ msgstr "Rozpoznanie..."
246248msgid "Search"
247249msgstr "Szukaj"
248250
249−#: plugins/Unity/scope.cpp:317
251+#: plugins/Unity/scope.cpp:336
250252msgid "Sorry, there is nothing that matches your search."
251253msgstr "Nie znaleziono pasujących wyników."
252254
253−#: Shell.qml:429
255+#: plugins/Unity/showallfilteroption.cpp:41
256+msgid "All"
257+msgstr ""
258+
259+#: Shell.qml:453
254260#, qt-format
255261msgid "Please enter %1"
256262msgstr "Wprowadź %1"
po/pt_BR.po+79−71
@@ -7,127 +7,131 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
11−"PO-Revision-Date: 2013-06-27 07:39+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11+"PO-Revision-Date: 2013-10-01 13:05+0000\n"
12+"Last-Translator: Rafael Neri <Unknown>\n"
1313"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
23−msgstr ""
23+msgstr "Telefone"
2424
2525#: Applications/applications.js:29
2626msgid "Camera"
27−msgstr ""
27+msgstr "Câmera"
2828
2929#: Applications/applications.js:35
3030msgid "Gallery"
31−msgstr ""
31+msgstr "Galeria"
3232
3333#: Applications/applications.js:40
3434msgid "Facebook"
35−msgstr ""
35+msgstr "Facebook"
3636
3737#: Applications/applications.js:46
3838msgid "Browser"
39−msgstr ""
39+msgstr "Navegador"
4040
4141#: Applications/applications.js:51
4242msgid "Twitter"
43−msgstr ""
43+msgstr "Twitter"
4444
4545#: Applications/applications.js:57
4646msgid "GMail"
47−msgstr ""
47+msgstr "GMail"
4848
4949#: Applications/applications.js:62
5050msgid "Weather"
51−msgstr ""
51+msgstr "Clima"
5252
5353#: Applications/applications.js:68
5454msgid "Notepad"
55−msgstr ""
55+msgstr "Bloco de notas"
5656
5757#: Applications/applications.js:74
5858msgid "Calendar"
59−msgstr ""
59+msgstr "Calendário"
6060
6161#: Applications/applications.js:80
6262msgid "Media Player"
63−msgstr ""
63+msgstr "Media Player"
6464
6565#: Applications/applications.js:86
6666msgid "Evernote"
67−msgstr ""
67+msgstr "Evernote"
6868
6969#: Applications/applications.js:91
7070msgid "Map"
71−msgstr ""
71+msgstr "Mapa"
7272
7373#: Applications/applications.js:96
7474msgid "Pinterest"
75−msgstr ""
75+msgstr "Pinterest"
7676
7777#: Applications/applications.js:101
7878msgid "SoundCloud"
79−msgstr ""
79+msgstr "SoundCloud"
8080
8181#: Applications/applications.js:106
8282msgid "Wikipedia"
83−msgstr ""
83+msgstr "Wikipédia"
8484
8585#: Applications/applications.js:111
8686msgid "YouTube"
87−msgstr ""
87+msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
91−msgstr ""
91+msgstr "Pular introdução"
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
95−msgstr ""
95+msgstr "Borda direita"
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
99−msgstr ""
99+msgstr "Tente deslizar da borda direita para desbloquear o telefone"
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103−msgstr ""
103+msgstr "Borda superior"
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107−msgstr ""
107+msgstr "Tente deslizar da borda superior para acessar os indicadores"
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111−msgstr ""
111+msgstr "Fechar"
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115−msgstr ""
115+msgstr "Deslize novamente para cima para fechar a tela de configurações"
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119−msgstr ""
119+msgstr "Borda esquerda"
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124+"Deslize da esquerda para revelar o lançador para acesso rápido aos "
125+"aplicativos"
124126
125−#: Components/EdgeDemo.qml:217
127+#: Components/EdgeDemo.qml:226
126128msgid "Well done"
127−msgstr ""
129+msgstr "Bem feito"
128130
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131135msgstr ""
132136
133137#: Components/PageHeader.qml:298
@@ -138,51 +142,51 @@ msgstr "Pesquisas recentes"
138142#: Dash/Apps/AppInfo.qml:73
139143#, qt-format
140144msgid "(%1)"
141−msgstr ""
145+msgstr "(%1)"
142146
143147#. TRANSLATORS: Number of persons who wrote reviews for this app
144148#: Dash/Apps/AppInfo.qml:85
145149#, qt-format
146150msgid "%1 review"
147151msgid_plural "%1 reviews"
148−msgstr[0] ""
149−msgstr[1] ""
152+msgstr[0] "%1 análise"
153+msgstr[1] "%1 análises"
150154
151−#: Dash/Apps/AppPreview.qml:175
155+#: Dash/Apps/AppPreview.qml:178
152156msgid "Rate this"
153−msgstr ""
157+msgstr "Avaliar isto"
154158
155−#: Dash/Apps/AppReviews.qml:72
159+#: Dash/Apps/AppReviews.qml:74
156160msgid "Add a review"
157−msgstr ""
161+msgstr "Adicionar uma análise"
158162
159−#: Dash/Apps/AppReviews.qml:84
163+#: Dash/Apps/AppReviews.qml:86
160164msgid "Review"
161−msgstr ""
165+msgstr "Revisão"
162166
163−#: Dash/Apps/AppReviews.qml:118
167+#: Dash/Apps/AppReviews.qml:121
164168msgid "Send"
165−msgstr ""
169+msgstr "Enviar"
166170
167−#: Dash/Apps/AppReviews.qml:136
171+#: Dash/Apps/AppReviews.qml:139
168172msgid "Comments:"
169−msgstr ""
173+msgstr "Comentários:"
170174
171175#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
172176msgid "Featured"
173−msgstr ""
177+msgstr "Em destaque"
174178
175179#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
176180msgid "Recent"
177−msgstr ""
181+msgstr "Recente"
178182
179183#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
180184msgid "New Releases"
181−msgstr ""
185+msgstr "Lançamentos"
182186
183187#: Dash/DashMusic.qml:30
184188msgid "Top Charting"
185−msgstr ""
189+msgstr "Top gráficos"
186190
187191#: Dash/DashMusic.qml:91
188192msgid "Music"
@@ -190,7 +194,7 @@ msgstr "Músicas"
190194
191195#: Dash/DashVideos.qml:31
192196msgid "Popular Online"
193−msgstr ""
197+msgstr "Popular Online"
194198
195199#: Dash/DashVideos.qml:146
196200msgid "Videos"
@@ -198,28 +202,28 @@ msgstr "Vídeos"
198202
199203#: Dash/Video/VideoPreview.qml:130
200204msgid "Directed by:"
201−msgstr ""
205+msgstr "Realizado por:"
202206
203207#: Dash/Video/VideoPreview.qml:153
204208msgid "Starring:"
205−msgstr ""
209+msgstr "Estrelando:"
206210
207211#: Dash/Video/VideoPreview.qml:176
208212msgid "Author:"
209−msgstr ""
213+msgstr "Autor:"
210214
211−#: Greeter/Lockscreen.qml:134
215+#: Greeter/Lockscreen.qml:142
212216msgid "Emergency Call"
213−msgstr ""
217+msgstr "Chamada de emergência"
214218
215219#: Greeter/PassphraseLockscreen.qml:59
216220#, qt-format
217221msgid "Hello %1"
218−msgstr ""
222+msgstr "Olá %1"
219223
220224#: Greeter/PassphraseLockscreen.qml:59
221225msgid "Hello"
222−msgstr ""
226+msgstr "Olá"
223227
224228#: Hud/HudParametrizedActionsPage.qml:132
225229msgid "Confirm"
@@ -245,11 +249,15 @@ msgstr "Falando..."
245249msgid "Search"
246250msgstr "Pesquisar"
247251
248−#: plugins/Unity/scope.cpp:317
252+#: plugins/Unity/scope.cpp:336
249253msgid "Sorry, there is nothing that matches your search."
250254msgstr "Desculpe, não há nada que corresponda à sua pesquisa."
251255
252−#: Shell.qml:429
256+#: plugins/Unity/showallfilteroption.cpp:41
257+msgid "All"
258+msgstr ""
259+
260+#: Shell.qml:453
253261#, qt-format
254262msgid "Please enter %1"
255−msgstr ""
263+msgstr "Por favor, digite %1"
po/ro.po+29−23
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
1111"PO-Revision-Date: 2013-06-27 07:53+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Romanian <ro@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 "
1818"== 0) && (n != 0))) ? 2: 1));\n"
19−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
20−"X-Generator: Launchpad (build 16750)\n"
19+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
20+"X-Generator: Launchpad (build 16774)\n"
2121
2222#: Applications/applications.js:23
2323msgid "Phone"
@@ -87,48 +87,50 @@ msgstr ""
8787msgid "YouTube"
8888msgstr ""
8989
90−#: Components/EdgeDemoOverlay.qml:145
90+#: Components/EdgeDemoOverlay.qml:150
9191msgid "Skip intro"
9292msgstr ""
9393
94−#: Components/EdgeDemo.qml:98
94+#: Components/EdgeDemo.qml:112
9595msgid "Right edge"
9696msgstr ""
9797
98−#: Components/EdgeDemo.qml:99
98+#: Components/EdgeDemo.qml:113
9999msgid "Try swiping from the right edge to unlock the phone"
100100msgstr ""
101101
102−#: Components/EdgeDemo.qml:135
102+#: Components/EdgeDemo.qml:144
103103msgid "Top edge"
104104msgstr ""
105105
106−#: Components/EdgeDemo.qml:136
106+#: Components/EdgeDemo.qml:145
107107msgid "Try swiping from the top edge to access the indicators"
108108msgstr ""
109109
110−#: Components/EdgeDemo.qml:161
110+#: Components/EdgeDemo.qml:170
111111msgid "Close"
112112msgstr ""
113113
114−#: Components/EdgeDemo.qml:162
114+#: Components/EdgeDemo.qml:171
115115msgid "Swipe up again to close the settings screen"
116116msgstr ""
117117
118−#: Components/EdgeDemo.qml:189
118+#: Components/EdgeDemo.qml:198
119119msgid "Left edge"
120120msgstr ""
121121
122−#: Components/EdgeDemo.qml:190
122+#: Components/EdgeDemo.qml:199
123123msgid "Swipe from the left to reveal the launcher for quick access to apps"
124124msgstr ""
125125
126−#: Components/EdgeDemo.qml:217
126+#: Components/EdgeDemo.qml:226
127127msgid "Well done"
128128msgstr ""
129129
130−#: Components/EdgeDemo.qml:218
131−msgid "You have now mastered the edge gestures and can start using the phone"
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"
132134msgstr ""
133135
134136#: Components/PageHeader.qml:298
@@ -149,23 +151,23 @@ msgid_plural "%1 reviews"
149151msgstr[0] ""
150152msgstr[1] ""
151153
152−#: Dash/Apps/AppPreview.qml:175
154+#: Dash/Apps/AppPreview.qml:178
153155msgid "Rate this"
154156msgstr ""
155157
156−#: Dash/Apps/AppReviews.qml:72
158+#: Dash/Apps/AppReviews.qml:74
157159msgid "Add a review"
158160msgstr ""
159161
160−#: Dash/Apps/AppReviews.qml:84
162+#: Dash/Apps/AppReviews.qml:86
161163msgid "Review"
162164msgstr ""
163165
164−#: Dash/Apps/AppReviews.qml:118
166+#: Dash/Apps/AppReviews.qml:121
165167msgid "Send"
166168msgstr ""
167169
168−#: Dash/Apps/AppReviews.qml:136
170+#: Dash/Apps/AppReviews.qml:139
169171msgid "Comments:"
170172msgstr ""
171173
@@ -209,7 +211,7 @@ msgstr ""
209211msgid "Author:"
210212msgstr ""
211213
212−#: Greeter/Lockscreen.qml:134
214+#: Greeter/Lockscreen.qml:142
213215msgid "Emergency Call"
214216msgstr ""
215217
@@ -246,12 +248,16 @@ msgstr "Vorbire..."
246248msgid "Search"
247249msgstr "Căutare"
248250
249−#: plugins/Unity/scope.cpp:317
251+#: plugins/Unity/scope.cpp:336
250252msgid "Sorry, there is nothing that matches your search."
251253msgstr ""
252254"Ne pare rău, nu este nimic care se potrivește căutării dumneavoastră."
253255
254−#: Shell.qml:429
256+#: plugins/Unity/showallfilteroption.cpp:41
257+msgid "All"
258+msgstr ""
259+
260+#: Shell.qml:453
255261#, qt-format
256262msgid "Please enter %1"
257263msgstr ""
po/ru.po+59−49
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
11−"PO-Revision-Date: 2013-06-28 06:40+0000\n"
12−"Last-Translator: Eugene Marshal <Unknown>\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11+"PO-Revision-Date: 2013-10-01 05:55+0000\n"
12+"Last-Translator: Zonov Roman <Unknown>\n"
1313"Language-Team: Russian <ru@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
20−"X-Generator: Launchpad (build 16750)\n"
19+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
20+"X-Generator: Launchpad (build 16774)\n"
2121
2222#: Applications/applications.js:23
2323msgid "Phone"
@@ -69,7 +69,7 @@ msgstr "Evernote"
6969
7070#: Applications/applications.js:91
7171msgid "Map"
72−msgstr "Карта"
72+msgstr "Карты"
7373
7474#: Applications/applications.js:96
7575msgid "Pinterest"
@@ -87,48 +87,55 @@ msgstr "Википедия"
8787msgid "YouTube"
8888msgstr "YouTube"
8989
90−#: Components/EdgeDemoOverlay.qml:145
90+#: Components/EdgeDemoOverlay.qml:150
9191msgid "Skip intro"
92−msgstr ""
92+msgstr "Пропустить обучение"
9393
94−#: Components/EdgeDemo.qml:98
94+#: Components/EdgeDemo.qml:112
9595msgid "Right edge"
96−msgstr ""
96+msgstr "Правый край"
9797
98−#: Components/EdgeDemo.qml:99
98+#: Components/EdgeDemo.qml:113
9999msgid "Try swiping from the right edge to unlock the phone"
100100msgstr ""
101+"Попробуйте переместить палец от правого края к левому для разблокировки "
102+"устройства"
101103
102−#: Components/EdgeDemo.qml:135
104+#: Components/EdgeDemo.qml:144
103105msgid "Top edge"
104−msgstr ""
106+msgstr "Верхний край"
105107
106−#: Components/EdgeDemo.qml:136
108+#: Components/EdgeDemo.qml:145
107109msgid "Try swiping from the top edge to access the indicators"
108110msgstr ""
111+"Попробуйте переместить палец от верхнего края вниз для доступа к индикаторам"
109112
110−#: Components/EdgeDemo.qml:161
113+#: Components/EdgeDemo.qml:170
111114msgid "Close"
112−msgstr ""
115+msgstr "Закрыть"
113116
114−#: Components/EdgeDemo.qml:162
117+#: Components/EdgeDemo.qml:171
115118msgid "Swipe up again to close the settings screen"
116−msgstr ""
119+msgstr "Снова переместите палец вверх для закрытия экрана настроек"
117120
118−#: Components/EdgeDemo.qml:189
121+#: Components/EdgeDemo.qml:198
119122msgid "Left edge"
120−msgstr ""
123+msgstr "Левый край"
121124
122−#: Components/EdgeDemo.qml:190
125+#: Components/EdgeDemo.qml:199
123126msgid "Swipe from the left to reveal the launcher for quick access to apps"
124127msgstr ""
128+"Переместите палец от левого края вправо для открытия лаунчера для быстрого "
129+"доступа к приложениям"
125130
126−#: Components/EdgeDemo.qml:217
131+#: Components/EdgeDemo.qml:226
127132msgid "Well done"
128−msgstr ""
133+msgstr "Великолепно"
129134
130−#: Components/EdgeDemo.qml:218
131−msgid "You have now mastered the edge gestures and can start using the phone"
135+#: Components/EdgeDemo.qml:227
136+msgid ""
137+"You have now mastered the edge gestures and can start using the "
138+"phone<br><br>Tap anywhere to start"
132139msgstr ""
133140
134141#: Components/PageHeader.qml:298
@@ -139,39 +146,38 @@ msgstr "Последние поисковые запросы"
139146#: Dash/Apps/AppInfo.qml:73
140147#, qt-format
141148msgid "(%1)"
142−msgstr ""
149+msgstr "(%1)"
143150
144151#. TRANSLATORS: Number of persons who wrote reviews for this app
145152#: Dash/Apps/AppInfo.qml:85
146153#, qt-format
147154msgid "%1 review"
148155msgid_plural "%1 reviews"
149−msgstr[0] ""
150−msgstr[1] ""
156+msgstr[0] "%1 отзыв"
151157
152−#: Dash/Apps/AppPreview.qml:175
158+#: Dash/Apps/AppPreview.qml:178
153159msgid "Rate this"
154−msgstr ""
160+msgstr "Оцените это"
155161
156−#: Dash/Apps/AppReviews.qml:72
162+#: Dash/Apps/AppReviews.qml:74
157163msgid "Add a review"
158−msgstr ""
164+msgstr "Добавьте отзыв"
159165
160−#: Dash/Apps/AppReviews.qml:84
166+#: Dash/Apps/AppReviews.qml:86
161167msgid "Review"
162−msgstr ""
168+msgstr "Отзыв"
163169
164−#: Dash/Apps/AppReviews.qml:118
170+#: Dash/Apps/AppReviews.qml:121
165171msgid "Send"
166−msgstr ""
172+msgstr "Отправить"
167173
168−#: Dash/Apps/AppReviews.qml:136
174+#: Dash/Apps/AppReviews.qml:139
169175msgid "Comments:"
170−msgstr ""
176+msgstr "Комментарии:"
171177
172178#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
173179msgid "Featured"
174−msgstr ""
180+msgstr "Рекомендованное"
175181
176182#: Dash/DashMusic.qml:28 Dash/DashVideos.qml:29
177183msgid "Recent"
@@ -183,7 +189,7 @@ msgstr "Новые релизы"
183189
184190#: Dash/DashMusic.qml:30
185191msgid "Top Charting"
186−msgstr ""
192+msgstr "Наиболее популярное"
187193
188194#: Dash/DashMusic.qml:91
189195msgid "Music"
@@ -191,7 +197,7 @@ msgstr "Музыка"
191197
192198#: Dash/DashVideos.qml:31
193199msgid "Popular Online"
194−msgstr ""
200+msgstr "Популярное в Интернете"
195201
196202#: Dash/DashVideos.qml:146
197203msgid "Videos"
@@ -203,28 +209,28 @@ msgstr "Режиссёр"
203209
204210#: Dash/Video/VideoPreview.qml:153
205211msgid "Starring:"
206−msgstr "В главных ролях"
212+msgstr "В главных ролях:"
207213
208214#: Dash/Video/VideoPreview.qml:176
209215msgid "Author:"
210216msgstr "Автор:"
211217
212−#: Greeter/Lockscreen.qml:134
218+#: Greeter/Lockscreen.qml:142
213219msgid "Emergency Call"
214−msgstr ""
220+msgstr "Экстренный вызов"
215221
216222#: Greeter/PassphraseLockscreen.qml:59
217223#, qt-format
218224msgid "Hello %1"
219−msgstr ""
225+msgstr "Привет, %1"
220226
221227#: Greeter/PassphraseLockscreen.qml:59
222228msgid "Hello"
223−msgstr ""
229+msgstr "Привет"
224230
225231#: Hud/HudParametrizedActionsPage.qml:132
226232msgid "Confirm"
227−msgstr "Подвердить"
233+msgstr "Подтвердить"
228234
229235#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
230236msgid "Type or say a command"
@@ -246,11 +252,15 @@ msgstr "Говорите..."
246252msgid "Search"
247253msgstr "Поиск"
248254
249−#: plugins/Unity/scope.cpp:317
255+#: plugins/Unity/scope.cpp:336
250256msgid "Sorry, there is nothing that matches your search."
251257msgstr "Извините, поиск не дал результатов."
252258
253−#: Shell.qml:429
259+#: plugins/Unity/showallfilteroption.cpp:41
260+msgid "All"
261+msgstr ""
262+
263+#: Shell.qml:453
254264#, qt-format
255265msgid "Please enter %1"
256266msgstr "Пожалуйста, введите %1"
po/si.po+29−23
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
1111"PO-Revision-Date: 2013-06-26 22:36+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Sinhalese <si@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
9191msgstr ""
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
9595msgstr ""
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr ""
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103103msgstr ""
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr ""
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111111msgstr ""
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115115msgstr ""
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119119msgstr ""
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127127msgstr ""
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148150msgstr[0] ""
149151msgstr[1] ""
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153155msgstr ""
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157159msgstr ""
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161163msgstr ""
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165167msgstr ""
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169171msgstr ""
170172
@@ -208,7 +210,7 @@ msgstr ""
208210msgid "Author:"
209211msgstr ""
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213215msgstr ""
214216
@@ -245,11 +247,15 @@ msgstr ""
245247msgid "Search"
246248msgstr ""
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr ""
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255261msgstr ""
po/sl.po+60−48
@@ -7,8 +7,8 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
11−"PO-Revision-Date: 2013-07-02 12:59+0000\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11+"PO-Revision-Date: 2013-10-02 10:55+0000\n"
1212"Last-Translator: Damir Jerovšek <Unknown>\n"
1313"Language-Team: Slovenian <sl@li.org>\n"
1414"MIME-Version: 1.0\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || "
1818"n%100==4 ? 3 : 0);\n"
19−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
20−"X-Generator: Launchpad (build 16750)\n"
19+"X-Launchpad-Export-Date: 2013-10-03 06:08+0000\n"
20+"X-Generator: Launchpad (build 16791)\n"
2121
2222#: Applications/applications.js:23
2323msgid "Phone"
@@ -25,7 +25,7 @@ msgstr "Telefon"
2525
2626#: Applications/applications.js:29
2727msgid "Camera"
28−msgstr ""
28+msgstr "Fotoaparat"
2929
3030#: Applications/applications.js:35
3131msgid "Gallery"
@@ -87,49 +87,55 @@ msgstr "Wikipedija"
8787msgid "YouTube"
8888msgstr "YouTube"
8989
90−#: Components/EdgeDemoOverlay.qml:145
90+#: Components/EdgeDemoOverlay.qml:150
9191msgid "Skip intro"
92−msgstr ""
92+msgstr "Preskoči uvod"
9393
94−#: Components/EdgeDemo.qml:98
94+#: Components/EdgeDemo.qml:112
9595msgid "Right edge"
96−msgstr ""
96+msgstr "Desni rob"
9797
98−#: Components/EdgeDemo.qml:99
98+#: Components/EdgeDemo.qml:113
9999msgid "Try swiping from the right edge to unlock the phone"
100−msgstr ""
100+msgstr "Poskusite povleči od desnega roba za odklep telefona"
101101
102−#: Components/EdgeDemo.qml:135
102+#: Components/EdgeDemo.qml:144
103103msgid "Top edge"
104−msgstr ""
104+msgstr "Zgornji rob"
105105
106−#: Components/EdgeDemo.qml:136
106+#: Components/EdgeDemo.qml:145
107107msgid "Try swiping from the top edge to access the indicators"
108−msgstr ""
108+msgstr "Poskusite povleči od zgornjega roba za dostop do kazalnikov"
109109
110−#: Components/EdgeDemo.qml:161
110+#: Components/EdgeDemo.qml:170
111111msgid "Close"
112−msgstr ""
112+msgstr "Zapri"
113113
114−#: Components/EdgeDemo.qml:162
114+#: Components/EdgeDemo.qml:171
115115msgid "Swipe up again to close the settings screen"
116−msgstr ""
116+msgstr "Povlecite ponovno navzgor za zaprtje zaslona z nastavitvami"
117117
118−#: Components/EdgeDemo.qml:189
118+#: Components/EdgeDemo.qml:198
119119msgid "Left edge"
120−msgstr ""
120+msgstr "Levi rob"
121121
122−#: Components/EdgeDemo.qml:190
122+#: Components/EdgeDemo.qml:199
123123msgid "Swipe from the left to reveal the launcher for quick access to apps"
124124msgstr ""
125+"Poskusite povleči od leve za razkritje zaganjalnika za hiter dostop do "
126+"programov"
125127
126−#: Components/EdgeDemo.qml:217
128+#: Components/EdgeDemo.qml:226
127129msgid "Well done"
128−msgstr ""
130+msgstr "Odlično"
129131
130−#: Components/EdgeDemo.qml:218
131−msgid "You have now mastered the edge gestures and can start using the phone"
132+#: Components/EdgeDemo.qml:227
133+msgid ""
134+"You have now mastered the edge gestures and can start using the "
135+"phone<br><br>Tap anywhere to start"
132136msgstr ""
137+"Sedaj ste osvojili poteze robov ter lahko začnete uporabljati "
138+"telefon<br><br>Tapnite kjerkoli na začetek"
133139
134140#: Components/PageHeader.qml:298
135141msgid "Recent searches"
@@ -139,35 +145,37 @@ msgstr "Nedavna iskanja"
139145#: Dash/Apps/AppInfo.qml:73
140146#, qt-format
141147msgid "(%1)"
142−msgstr ""
148+msgstr "(%1)"
143149
144150#. TRANSLATORS: Number of persons who wrote reviews for this app
145151#: Dash/Apps/AppInfo.qml:85
146152#, qt-format
147153msgid "%1 review"
148154msgid_plural "%1 reviews"
149−msgstr[0] ""
150−msgstr[1] ""
155+msgstr[0] "%1 ocen"
156+msgstr[1] "%1 ocena"
157+msgstr[2] "%1 oceni"
158+msgstr[3] "%1 ocene"
151159
152−#: Dash/Apps/AppPreview.qml:175
160+#: Dash/Apps/AppPreview.qml:178
153161msgid "Rate this"
154−msgstr ""
162+msgstr "Ocenite"
155163
156−#: Dash/Apps/AppReviews.qml:72
164+#: Dash/Apps/AppReviews.qml:74
157165msgid "Add a review"
158−msgstr ""
166+msgstr "Dodaj oceno"
159167
160−#: Dash/Apps/AppReviews.qml:84
168+#: Dash/Apps/AppReviews.qml:86
161169msgid "Review"
162−msgstr ""
170+msgstr "Ocena"
163171
164−#: Dash/Apps/AppReviews.qml:118
172+#: Dash/Apps/AppReviews.qml:121
165173msgid "Send"
166−msgstr ""
174+msgstr "Pošlji"
167175
168−#: Dash/Apps/AppReviews.qml:136
176+#: Dash/Apps/AppReviews.qml:139
169177msgid "Comments:"
170−msgstr ""
178+msgstr "Opombe:"
171179
172180#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
173181msgid "Featured"
@@ -199,19 +207,19 @@ msgstr "Videi"
199207
200208#: Dash/Video/VideoPreview.qml:130
201209msgid "Directed by:"
202−msgstr ""
210+msgstr "Režija:"
203211
204212#: Dash/Video/VideoPreview.qml:153
205213msgid "Starring:"
206−msgstr ""
214+msgstr "Igrajo:"
207215
208216#: Dash/Video/VideoPreview.qml:176
209217msgid "Author:"
210−msgstr ""
218+msgstr "Avtor:"
211219
212−#: Greeter/Lockscreen.qml:134
220+#: Greeter/Lockscreen.qml:142
213221msgid "Emergency Call"
214−msgstr ""
222+msgstr "Klic v sili"
215223
216224#: Greeter/PassphraseLockscreen.qml:59
217225#, qt-format
@@ -220,7 +228,7 @@ msgstr "Pozdravljeni, %1"
220228
221229#: Greeter/PassphraseLockscreen.qml:59
222230msgid "Hello"
223−msgstr ""
231+msgstr "Pozdravljeni"
224232
225233#: Hud/HudParametrizedActionsPage.qml:132
226234msgid "Confirm"
@@ -246,11 +254,15 @@ msgstr "Govorjenje ..."
246254msgid "Search"
247255msgstr "Iskanje"
248256
249−#: plugins/Unity/scope.cpp:317
257+#: plugins/Unity/scope.cpp:336
250258msgid "Sorry, there is nothing that matches your search."
251259msgstr "Nič se ne ujema z vašim iskalnim nizom."
252260
253−#: Shell.qml:429
261+#: plugins/Unity/showallfilteroption.cpp:41
262+msgid "All"
263+msgstr "Vse"
264+
265+#: Shell.qml:453
254266#, qt-format
255267msgid "Please enter %1"
256−msgstr ""
268+msgstr "Vnesite %1"
po/sr.po+29−23
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
1111"PO-Revision-Date: 2013-06-27 09:19+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Serbian <sr@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
20−"X-Generator: Launchpad (build 16750)\n"
19+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
20+"X-Generator: Launchpad (build 16774)\n"
2121
2222#: Applications/applications.js:23
2323msgid "Phone"
@@ -87,48 +87,50 @@ msgstr ""
8787msgid "YouTube"
8888msgstr ""
8989
90−#: Components/EdgeDemoOverlay.qml:145
90+#: Components/EdgeDemoOverlay.qml:150
9191msgid "Skip intro"
9292msgstr ""
9393
94−#: Components/EdgeDemo.qml:98
94+#: Components/EdgeDemo.qml:112
9595msgid "Right edge"
9696msgstr ""
9797
98−#: Components/EdgeDemo.qml:99
98+#: Components/EdgeDemo.qml:113
9999msgid "Try swiping from the right edge to unlock the phone"
100100msgstr ""
101101
102−#: Components/EdgeDemo.qml:135
102+#: Components/EdgeDemo.qml:144
103103msgid "Top edge"
104104msgstr ""
105105
106−#: Components/EdgeDemo.qml:136
106+#: Components/EdgeDemo.qml:145
107107msgid "Try swiping from the top edge to access the indicators"
108108msgstr ""
109109
110−#: Components/EdgeDemo.qml:161
110+#: Components/EdgeDemo.qml:170
111111msgid "Close"
112112msgstr ""
113113
114−#: Components/EdgeDemo.qml:162
114+#: Components/EdgeDemo.qml:171
115115msgid "Swipe up again to close the settings screen"
116116msgstr ""
117117
118−#: Components/EdgeDemo.qml:189
118+#: Components/EdgeDemo.qml:198
119119msgid "Left edge"
120120msgstr ""
121121
122−#: Components/EdgeDemo.qml:190
122+#: Components/EdgeDemo.qml:199
123123msgid "Swipe from the left to reveal the launcher for quick access to apps"
124124msgstr ""
125125
126−#: Components/EdgeDemo.qml:217
126+#: Components/EdgeDemo.qml:226
127127msgid "Well done"
128128msgstr ""
129129
130−#: Components/EdgeDemo.qml:218
131−msgid "You have now mastered the edge gestures and can start using the phone"
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"
132134msgstr ""
133135
134136#: Components/PageHeader.qml:298
@@ -149,23 +151,23 @@ msgid_plural "%1 reviews"
149151msgstr[0] ""
150152msgstr[1] ""
151153
152−#: Dash/Apps/AppPreview.qml:175
154+#: Dash/Apps/AppPreview.qml:178
153155msgid "Rate this"
154156msgstr ""
155157
156−#: Dash/Apps/AppReviews.qml:72
158+#: Dash/Apps/AppReviews.qml:74
157159msgid "Add a review"
158160msgstr ""
159161
160−#: Dash/Apps/AppReviews.qml:84
162+#: Dash/Apps/AppReviews.qml:86
161163msgid "Review"
162164msgstr ""
163165
164−#: Dash/Apps/AppReviews.qml:118
166+#: Dash/Apps/AppReviews.qml:121
165167msgid "Send"
166168msgstr ""
167169
168−#: Dash/Apps/AppReviews.qml:136
170+#: Dash/Apps/AppReviews.qml:139
169171msgid "Comments:"
170172msgstr ""
171173
@@ -209,7 +211,7 @@ msgstr ""
209211msgid "Author:"
210212msgstr ""
211213
212−#: Greeter/Lockscreen.qml:134
214+#: Greeter/Lockscreen.qml:142
213215msgid "Emergency Call"
214216msgstr ""
215217
@@ -246,11 +248,15 @@ msgstr "Говор..."
246248msgid "Search"
247249msgstr "Претрага"
248250
249−#: plugins/Unity/scope.cpp:317
251+#: plugins/Unity/scope.cpp:336
250252msgid "Sorry, there is nothing that matches your search."
251253msgstr "Нажалост, претрага није наишла на икакво подударање."
252254
253−#: Shell.qml:429
255+#: plugins/Unity/showallfilteroption.cpp:41
256+msgid "All"
257+msgstr ""
258+
259+#: Shell.qml:453
254260#, qt-format
255261msgid "Please enter %1"
256262msgstr ""
po/sv.po+29−23
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
1111"PO-Revision-Date: 2013-06-26 22:36+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Swedish <sv@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
9191msgstr ""
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
9595msgstr ""
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr ""
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103103msgstr ""
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr ""
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111111msgstr ""
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115115msgstr ""
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119119msgstr ""
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127127msgstr ""
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148150msgstr[0] ""
149151msgstr[1] ""
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153155msgstr ""
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157159msgstr ""
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161163msgstr ""
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165167msgstr ""
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169171msgstr ""
170172
@@ -208,7 +210,7 @@ msgstr ""
208210msgid "Author:"
209211msgstr ""
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213215msgstr ""
214216
@@ -245,11 +247,15 @@ msgstr ""
245247msgid "Search"
246248msgstr ""
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr ""
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255261msgstr ""
po/te.po+29−23
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
1111"PO-Revision-Date: 2013-06-27 09:57+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Telugu <te@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
9191msgstr ""
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
9595msgstr ""
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr ""
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103103msgstr ""
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr ""
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111111msgstr ""
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115115msgstr ""
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119119msgstr ""
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127127msgstr ""
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148150msgstr[0] ""
149151msgstr[1] ""
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153155msgstr ""
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157159msgstr ""
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161163msgstr ""
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165167msgstr ""
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169171msgstr ""
170172
@@ -208,7 +210,7 @@ msgstr ""
208210msgid "Author:"
209211msgstr ""
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213215msgstr ""
214216
@@ -245,11 +247,15 @@ msgstr ""
245247msgid "Search"
246248msgstr ""
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr ""
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255261msgstr ""
po/tr.po+58−51
@@ -7,16 +7,16 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
11−"PO-Revision-Date: 2013-06-27 10:08+0000\n"
12−"Last-Translator: Adar Cem EREN <adarcemeren34@gmail.com>\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11+"PO-Revision-Date: 2013-10-01 13:21+0000\n"
12+"Last-Translator: Volkan Gezer <Unknown>\n"
1313"Language-Team: Turkish <tr@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -64,7 +64,7 @@ msgstr "Ortam Oynatıcı"
6464
6565#: Applications/applications.js:86
6666msgid "Evernote"
67−msgstr ""
67+msgstr "Evernote"
6868
6969#: Applications/applications.js:91
7070msgid "Map"
@@ -72,11 +72,11 @@ msgstr "Harita"
7272
7373#: Applications/applications.js:96
7474msgid "Pinterest"
75−msgstr ""
75+msgstr "Pinterest"
7676
7777#: Applications/applications.js:101
7878msgid "SoundCloud"
79−msgstr ""
79+msgstr "SoundCloud"
8080
8181#: Applications/applications.js:106
8282msgid "Wikipedia"
@@ -86,48 +86,51 @@ msgstr "Vikipedi"
8686msgid "YouTube"
8787msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
91−msgstr ""
91+msgstr "İntro'yu geç"
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
95−msgstr ""
95+msgstr "Sağ kenar"
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "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"
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103−msgstr ""
103+msgstr "Üst kenar"
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "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"
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111−msgstr ""
111+msgstr "Kapat"
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115−msgstr ""
115+msgstr "Ayarlar ekranını kapatmak için tekrar yukarı kaydırın"
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119−msgstr ""
119+msgstr "Sol kenar"
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124+"Uygulamalara hızlı erişim çalıştırıcısını açmak için sol kenarı sürükleyin"
124125
125−#: Components/EdgeDemo.qml:217
126+#: Components/EdgeDemo.qml:226
126127msgid "Well done"
127−msgstr ""
128+msgstr "Tebrikler"
128129
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131134msgstr ""
132135
133136#: Components/PageHeader.qml:298
@@ -138,35 +141,35 @@ msgstr "Son Arananlar"
138141#: Dash/Apps/AppInfo.qml:73
139142#, qt-format
140143msgid "(%1)"
141−msgstr ""
144+msgstr "(%1)"
142145
143146#. TRANSLATORS: Number of persons who wrote reviews for this app
144147#: Dash/Apps/AppInfo.qml:85
145148#, qt-format
146149msgid "%1 review"
147150msgid_plural "%1 reviews"
148−msgstr[0] ""
149−msgstr[1] ""
151+msgstr[0] "%1 inceleme"
152+msgstr[1] "%1 inceleme"
150153
151−#: Dash/Apps/AppPreview.qml:175
154+#: Dash/Apps/AppPreview.qml:178
152155msgid "Rate this"
153−msgstr ""
156+msgstr "Oyla"
154157
155−#: Dash/Apps/AppReviews.qml:72
158+#: Dash/Apps/AppReviews.qml:74
156159msgid "Add a review"
157−msgstr ""
160+msgstr "Bir inceleme ekle"
158161
159−#: Dash/Apps/AppReviews.qml:84
162+#: Dash/Apps/AppReviews.qml:86
160163msgid "Review"
161−msgstr ""
164+msgstr "İnceleme"
162165
163−#: Dash/Apps/AppReviews.qml:118
166+#: Dash/Apps/AppReviews.qml:121
164167msgid "Send"
165−msgstr ""
168+msgstr "Gönder"
166169
167−#: Dash/Apps/AppReviews.qml:136
170+#: Dash/Apps/AppReviews.qml:139
168171msgid "Comments:"
169−msgstr ""
172+msgstr "Yorumlar:"
170173
171174#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
172175msgid "Featured"
@@ -178,11 +181,11 @@ msgstr "En Son"
178181
179182#: Dash/DashMusic.qml:29 Dash/DashVideos.qml:30
180183msgid "New Releases"
181−msgstr ""
184+msgstr "Yeni Sürümler"
182185
183186#: Dash/DashMusic.qml:30
184187msgid "Top Charting"
185−msgstr ""
188+msgstr "En Çok Beğenilenler"
186189
187190#: Dash/DashMusic.qml:91
188191msgid "Music"
@@ -202,20 +205,20 @@ msgstr "Yönetmen"
202205
203206#: Dash/Video/VideoPreview.qml:153
204207msgid "Starring:"
205−msgstr ""
208+msgstr "Başroller:"
206209
207210#: Dash/Video/VideoPreview.qml:176
208211msgid "Author:"
209212msgstr "Yazar:"
210213
211−#: Greeter/Lockscreen.qml:134
214+#: Greeter/Lockscreen.qml:142
212215msgid "Emergency Call"
213−msgstr ""
216+msgstr "Acil Arama"
214217
215218#: Greeter/PassphraseLockscreen.qml:59
216219#, qt-format
217220msgid "Hello %1"
218−msgstr ""
221+msgstr "Merhaba %1"
219222
220223#: Greeter/PassphraseLockscreen.qml:59
221224msgid "Hello"
@@ -245,11 +248,15 @@ msgstr "Konuşuyor..."
245248msgid "Search"
246249msgstr "Ara"
247250
248−#: plugins/Unity/scope.cpp:317
251+#: plugins/Unity/scope.cpp:336
249252msgid "Sorry, there is nothing that matches your search."
250253msgstr "Üzgünüz, aramanızla eşleşen hiçbir şey yok."
251254
252−#: Shell.qml:429
255+#: plugins/Unity/showallfilteroption.cpp:41
256+msgid "All"
257+msgstr ""
258+
259+#: Shell.qml:453
253260#, qt-format
254261msgid "Please enter %1"
255−msgstr ""
262+msgstr "Lütfen %1 girin"
po/ug.po+29−23
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
1111"PO-Revision-Date: 2013-06-27 11:02+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Uyghur <ug@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,48 +86,50 @@ msgstr "ۋىكىپېدىيە"
8686msgid "YouTube"
8787msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
9191msgstr ""
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
9595msgstr ""
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr ""
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103103msgstr ""
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr ""
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111111msgstr ""
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115115msgstr ""
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119119msgstr ""
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127127msgstr ""
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148150msgstr[0] ""
149151msgstr[1] ""
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153155msgstr ""
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157159msgstr ""
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161163msgstr ""
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165167msgstr ""
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169171msgstr ""
170172
@@ -208,7 +210,7 @@ msgstr ""
208210msgid "Author:"
209211msgstr "ئاپتور:"
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213215msgstr ""
214216
@@ -245,11 +247,15 @@ msgstr "سۆزلەۋاتىسىز…"
245247msgid "Search"
246248msgstr "ئىزدە"
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr "كەچۈرۈڭ، ئىزدىگىنىڭىزگە ماس نەتىجە تېپىلمىدى."
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255261msgstr ""
po/uk.po+52−42
@@ -7,17 +7,17 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
11−"PO-Revision-Date: 2013-07-21 05:47+0000\n"
12−"Last-Translator: Ярослав Смук <Smuk.Slavko@yandex.ua>\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
11+"PO-Revision-Date: 2013-09-28 07:54+0000\n"
12+"Last-Translator: Yuri Chornoivan <yurchor@gmail.com>\n"
1313"Language-Team: Ukrainian <uk@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
20−"X-Generator: Launchpad (build 16750)\n"
19+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
20+"X-Generator: Launchpad (build 16774)\n"
2121
2222#: Applications/applications.js:23
2323msgid "Phone"
@@ -87,48 +87,53 @@ msgstr "Вікіпедія"
8787msgid "YouTube"
8888msgstr "YouTube"
8989
90−#: Components/EdgeDemoOverlay.qml:145
90+#: Components/EdgeDemoOverlay.qml:150
9191msgid "Skip intro"
92−msgstr ""
92+msgstr "Пропустити вступ"
9393
94−#: Components/EdgeDemo.qml:98
94+#: Components/EdgeDemo.qml:112
9595msgid "Right edge"
96−msgstr ""
96+msgstr "Правий край"
9797
98−#: Components/EdgeDemo.qml:99
98+#: Components/EdgeDemo.qml:113
9999msgid "Try swiping from the right edge to unlock the phone"
100−msgstr ""
100+msgstr "Спробуйте провести пальцем від правою краю, щоб розблокувати телефон"
101101
102−#: Components/EdgeDemo.qml:135
102+#: Components/EdgeDemo.qml:144
103103msgid "Top edge"
104−msgstr ""
104+msgstr "Верхній край"
105105
106−#: Components/EdgeDemo.qml:136
106+#: Components/EdgeDemo.qml:145
107107msgid "Try swiping from the top edge to access the indicators"
108108msgstr ""
109+"Спробуйте провести пальцем від верхнього краю, щоб розблокувати телефон"
109110
110−#: Components/EdgeDemo.qml:161
111+#: Components/EdgeDemo.qml:170
111112msgid "Close"
112−msgstr ""
113+msgstr "Закрити"
113114
114−#: Components/EdgeDemo.qml:162
115+#: Components/EdgeDemo.qml:171
115116msgid "Swipe up again to close the settings screen"
116−msgstr ""
117+msgstr "Проведіть пальцем ще раз, щоб закрити вікно параметрів"
117118
118−#: Components/EdgeDemo.qml:189
119+#: Components/EdgeDemo.qml:198
119120msgid "Left edge"
120−msgstr ""
121+msgstr "Лівий край"
121122
122−#: Components/EdgeDemo.qml:190
123+#: Components/EdgeDemo.qml:199
123124msgid "Swipe from the left to reveal the launcher for quick access to apps"
124125msgstr ""
126+"Проведіть пальцем від лівого краю, щоб відкрити панель запуску для "
127+"пришвидшення доступу до програм"
125128
126−#: Components/EdgeDemo.qml:217
129+#: Components/EdgeDemo.qml:226
127130msgid "Well done"
128−msgstr ""
131+msgstr "Добре"
129132
130−#: Components/EdgeDemo.qml:218
131−msgid "You have now mastered the edge gestures and can start using the phone"
133+#: Components/EdgeDemo.qml:227
134+msgid ""
135+"You have now mastered the edge gestures and can start using the "
136+"phone<br><br>Tap anywhere to start"
132137msgstr ""
133138
134139#: Components/PageHeader.qml:298
@@ -139,35 +144,36 @@ msgstr "Нещодавні пошуки"
139144#: Dash/Apps/AppInfo.qml:73
140145#, qt-format
141146msgid "(%1)"
142−msgstr ""
147+msgstr "(%1)"
143148
144149#. TRANSLATORS: Number of persons who wrote reviews for this app
145150#: Dash/Apps/AppInfo.qml:85
146151#, qt-format
147152msgid "%1 review"
148153msgid_plural "%1 reviews"
149−msgstr[0] ""
150−msgstr[1] ""
154+msgstr[0] "%1 рецензія"
155+msgstr[1] "%1 рецензії"
156+msgstr[2] "%1 рецензій"
151157
152−#: Dash/Apps/AppPreview.qml:175
158+#: Dash/Apps/AppPreview.qml:178
153159msgid "Rate this"
154−msgstr ""
160+msgstr "Оцінити"
155161
156−#: Dash/Apps/AppReviews.qml:72
162+#: Dash/Apps/AppReviews.qml:74
157163msgid "Add a review"
158−msgstr ""
164+msgstr "Додати рецензію"
159165
160−#: Dash/Apps/AppReviews.qml:84
166+#: Dash/Apps/AppReviews.qml:86
161167msgid "Review"
162−msgstr ""
168+msgstr "Рецензія"
163169
164−#: Dash/Apps/AppReviews.qml:118
170+#: Dash/Apps/AppReviews.qml:121
165171msgid "Send"
166−msgstr ""
172+msgstr "Надіслати"
167173
168−#: Dash/Apps/AppReviews.qml:136
174+#: Dash/Apps/AppReviews.qml:139
169175msgid "Comments:"
170−msgstr ""
176+msgstr "Коментарі:"
171177
172178#: Dash/DashMusic.qml:27 Dash/DashVideos.qml:28
173179msgid "Featured"
@@ -209,9 +215,9 @@ msgstr "Актори:"
209215msgid "Author:"
210216msgstr "Автор:"
211217
212−#: Greeter/Lockscreen.qml:134
218+#: Greeter/Lockscreen.qml:142
213219msgid "Emergency Call"
214−msgstr ""
220+msgstr "Терміновий виклик"
215221
216222#: Greeter/PassphraseLockscreen.qml:59
217223#, qt-format
@@ -246,11 +252,15 @@ msgstr "Мовлення…"
246252msgid "Search"
247253msgstr "Пошук"
248254
249−#: plugins/Unity/scope.cpp:317
255+#: plugins/Unity/scope.cpp:336
250256msgid "Sorry, there is nothing that matches your search."
251257msgstr "Вибачте, для вказаних вами ключових слів нічого не знайдено."
252258
253−#: Shell.qml:429
259+#: plugins/Unity/showallfilteroption.cpp:41
260+msgid "All"
261+msgstr ""
262+
263+#: Shell.qml:453
254264#, qt-format
255265msgid "Please enter %1"
256266msgstr "Будь ласка, введіть %1"
po/unity8.pot+27−21
@@ -8,7 +8,7 @@ msgid ""
88msgstr ""
99"Project-Id-Version: unity8\n"
1010"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"
1212"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1313"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1414"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -86,48 +86,50 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
9191msgstr ""
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
9595msgstr ""
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr ""
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103103msgstr ""
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr ""
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111111msgstr ""
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115115msgstr ""
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119119msgstr ""
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127127msgstr ""
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148150msgstr[0] ""
149151msgstr[1] ""
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153155msgstr ""
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157159msgstr ""
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161163msgstr ""
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165167msgstr ""
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169171msgstr ""
170172
@@ -208,7 +210,7 @@ msgstr ""
208210msgid "Author:"
209211msgstr ""
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213215msgstr ""
214216
@@ -245,11 +247,15 @@ msgstr ""
245247msgid "Search"
246248msgstr ""
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr ""
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255261msgstr ""
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 ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"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"
1111"PO-Revision-Date: 2013-06-27 10:33+0000\n"
1212"Last-Translator: Anthony Wong <anthony.wong@canonical.com>\n"
1313"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,48 +86,50 @@ msgstr "维基百科"
8686msgid "YouTube"
8787msgstr "YouTube"
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
9191msgstr ""
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
9595msgstr ""
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr ""
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103103msgstr ""
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr ""
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111111msgstr ""
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115115msgstr ""
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119119msgstr ""
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127127msgstr ""
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148150msgstr[0] ""
149151msgstr[1] ""
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153155msgstr ""
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157159msgstr ""
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161163msgstr ""
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165167msgstr ""
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169171msgstr ""
170172
@@ -208,7 +210,7 @@ msgstr "主演:"
208210msgid "Author:"
209211msgstr "作者:"
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213215msgstr ""
214216
@@ -245,11 +247,15 @@ msgstr "讲话中..."
245247msgid "Search"
246248msgstr "搜索"
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr "对不起,没有找到您想要的结果。"
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255261msgstr ""
po/zh_TW.po+29−23
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-08-27 13:36-0400\n"
10+"POT-Creation-Date: 2013-10-01 09:43+0200\n"
1111"PO-Revision-Date: 2013-06-27 10:24+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-08-30 05:37+0000\n"
19−"X-Generator: Launchpad (build 16750)\n"
18+"X-Launchpad-Export-Date: 2013-10-02 06:03+0000\n"
19+"X-Generator: Launchpad (build 16774)\n"
2020
2121#: Applications/applications.js:23
2222msgid "Phone"
@@ -86,48 +86,50 @@ msgstr ""
8686msgid "YouTube"
8787msgstr ""
8888
89−#: Components/EdgeDemoOverlay.qml:145
89+#: Components/EdgeDemoOverlay.qml:150
9090msgid "Skip intro"
9191msgstr ""
9292
93−#: Components/EdgeDemo.qml:98
93+#: Components/EdgeDemo.qml:112
9494msgid "Right edge"
9595msgstr ""
9696
97−#: Components/EdgeDemo.qml:99
97+#: Components/EdgeDemo.qml:113
9898msgid "Try swiping from the right edge to unlock the phone"
9999msgstr ""
100100
101−#: Components/EdgeDemo.qml:135
101+#: Components/EdgeDemo.qml:144
102102msgid "Top edge"
103103msgstr ""
104104
105−#: Components/EdgeDemo.qml:136
105+#: Components/EdgeDemo.qml:145
106106msgid "Try swiping from the top edge to access the indicators"
107107msgstr ""
108108
109−#: Components/EdgeDemo.qml:161
109+#: Components/EdgeDemo.qml:170
110110msgid "Close"
111111msgstr ""
112112
113−#: Components/EdgeDemo.qml:162
113+#: Components/EdgeDemo.qml:171
114114msgid "Swipe up again to close the settings screen"
115115msgstr ""
116116
117−#: Components/EdgeDemo.qml:189
117+#: Components/EdgeDemo.qml:198
118118msgid "Left edge"
119119msgstr ""
120120
121−#: Components/EdgeDemo.qml:190
121+#: Components/EdgeDemo.qml:199
122122msgid "Swipe from the left to reveal the launcher for quick access to apps"
123123msgstr ""
124124
125−#: Components/EdgeDemo.qml:217
125+#: Components/EdgeDemo.qml:226
126126msgid "Well done"
127127msgstr ""
128128
129−#: Components/EdgeDemo.qml:218
130−msgid "You have now mastered the edge gestures and can start using the phone"
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"
131133msgstr ""
132134
133135#: Components/PageHeader.qml:298
@@ -148,23 +150,23 @@ msgid_plural "%1 reviews"
148150msgstr[0] ""
149151msgstr[1] ""
150152
151−#: Dash/Apps/AppPreview.qml:175
153+#: Dash/Apps/AppPreview.qml:178
152154msgid "Rate this"
153155msgstr ""
154156
155−#: Dash/Apps/AppReviews.qml:72
157+#: Dash/Apps/AppReviews.qml:74
156158msgid "Add a review"
157159msgstr ""
158160
159−#: Dash/Apps/AppReviews.qml:84
161+#: Dash/Apps/AppReviews.qml:86
160162msgid "Review"
161163msgstr ""
162164
163−#: Dash/Apps/AppReviews.qml:118
165+#: Dash/Apps/AppReviews.qml:121
164166msgid "Send"
165167msgstr ""
166168
167−#: Dash/Apps/AppReviews.qml:136
169+#: Dash/Apps/AppReviews.qml:139
168170msgid "Comments:"
169171msgstr ""
170172
@@ -208,7 +210,7 @@ msgstr ""
208210msgid "Author:"
209211msgstr ""
210212
211−#: Greeter/Lockscreen.qml:134
213+#: Greeter/Lockscreen.qml:142
212214msgid "Emergency Call"
213215msgstr ""
214216
@@ -245,11 +247,15 @@ msgstr "說話中..."
245247msgid "Search"
246248msgstr "搜尋"
247249
248−#: plugins/Unity/scope.cpp:317
250+#: plugins/Unity/scope.cpp:336
249251msgid "Sorry, there is nothing that matches your search."
250252msgstr "很抱歉,找不到符合您想搜尋的結果。"
251253
252−#: Shell.qml:429
254+#: plugins/Unity/showallfilteroption.cpp:41
255+msgid "All"
256+msgstr ""
257+
258+#: Shell.qml:453
253259#, qt-format
254260msgid "Please enter %1"
255261msgstr ""
run_on_device+1−1
@@ -52,7 +52,7 @@ adb_root() {
5252install_ssh_key() {
5353 ssh-keygen -R $TARGET_IP
5454 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
5656 adb shell chown $USER_ID:$USER_ID $HOME_DIR/.ssh
5757 adb shell chown $USER_ID:$USER_ID $HOME_DIR/.ssh/authorized_keys
5858 adb shell chmod 700 $HOME_DIR/.ssh
src/Panel/Indicators/CMakeLists.txt−1
@@ -1,2 +1 @@
11add_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 @@
1919
2020"""unity shell autopilot tests and emulators - sub level package."""
2121
22+from time import sleep
2223from functools import wraps
2324import logging
2425
@@ -36,3 +37,26 @@ def with_lightdm_mock(mock_type):
3637 return fn(*args, **kwargs)
3738 return wrapper
3839 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 @@
1818#
1919
2020from unity8.shell.emulators import UnityEmulatorBase
21−
21+from time import sleep
2222
2323class Dash(UnityEmulatorBase):
2424
2525 """An emulator that understands the Dash."""
2626
2727 def get_home_applications_grid(self):
28− return self.get_scope('home').select_single(
29− "GenericFilterGrid",
30− objectName="applications.scope"
31− )
28+ for i in range(1,10):
29+ get_grid = self.get_scope('home').select_single(
30+ "GenericFilterGrid",
31+ objectName="applications.scope"
32+ )
33+ if get_grid != None:
34+ break
35+ sleep(1)
36+ return get_grid
3237
3338 def get_application_icon(self, text):
3439 """Returns a 'Tile' icon that has the text 'text' from the application
@@ -40,7 +45,11 @@ class Dash(UnityEmulatorBase):
4045
4146 """
4247 app_grid = self.get_home_applications_grid()
43− resp_grid = app_grid.select_single('ResponsiveGridView')
48+ for i in range(1,10):
49+ resp_grid = app_grid.select_single('ResponsiveGridView')
50+ if resp_grid != None:
51+ break
52+ sleep(1)
4453 return resp_grid.select_single('Tile', text=text)
4554
4655 def get_scope(self, scope_name='home'):
tests/autopilot/unity8/shell/emulators/hud.py+8−9
@@ -21,36 +21,35 @@ from collections import namedtuple
2121
2222from unity8 import get_grid_size
2323from unity8.shell.emulators import UnityEmulatorBase
24+from unity8.shell import DragMixin
2425from autopilot.input import Touch
2526
26−
2727SwipeCoords = namedtuple('SwipeCoords', 'start_x end_x start_y end_y')
2828
29−
30−class Hud(UnityEmulatorBase):
29+class Hud(UnityEmulatorBase, DragMixin):
3130
3231 """An emulator that understands the Hud."""
3332
3433 def show(self):
3534 """Swipes open the Hud."""
36− touch = Touch.create()
35+ self.touch = Touch.create()
3736
3837 window = self.get_root_instance().select_single('QQuickView')
3938 hud_show_button = window.select_single("HudButton")
4039
4140 swipe_coords = self.get_button_swipe_coords(window, hud_show_button)
4241
43− touch.press(swipe_coords.start_x, swipe_coords.start_y)
44− touch._finger_move(swipe_coords.end_x, swipe_coords.end_y)
42+ self.touch.press(swipe_coords.start_x, swipe_coords.start_y)
43+ self._drag(swipe_coords.start_x, swipe_coords.start_y, swipe_coords.start_x, swipe_coords.end_y)
4544 try:
4645 hud_show_button.opacity.wait_for(1.0)
47− touch.release()
46+ self.touch.release()
4847 self.shown.wait_for(True)
4948 except AssertionError:
5049 raise
5150 finally:
52− if touch._touch_finger is not None:
53− touch.release()
51+ if self.touch._touch_finger is not None:
52+ self.touch.release()
5453
5554 def dismiss(self):
5655 """Closes the open Hud."""
tests/autopilot/unity8/shell/emulators/main_window.py+3
@@ -58,6 +58,9 @@ class MainWindow(object):
5858 def get_hud_show_button(self):
5959 return self.app.select_single("HudButton")
6060
61+ def get_hud_edge_drag_area(self):
62+ return self.app.select_single(objectName="hudDragArea")
63+
6164 def get_dash(self):
6265 return self.app.select_single(Dash)
6366
tests/autopilot/unity8/shell/tests/__init__.py+19−8
@@ -86,6 +86,7 @@ class UnityTestCase(AutopilotTestCase):
8686
8787 self._proxy = None
8888 self._lightdm_mock_type = None
89+ self._qml_mock_enabled = True
8990 self.touch = Touch.create()
9091 self._setup_display_details()
9192
@@ -102,9 +103,8 @@ class UnityTestCase(AutopilotTestCase):
102103 width = getattr(self, 'app_width', 0)
103104 height = getattr(self, 'app_height', 0)
104105 scale_divisor = 1
105− if width == 0 and width == 0:
106− self.unity_geometry_args = ['-fullscreen']
107− else:
106+ self.unity_geometry_args = []
107+ if width > 0 and height > 0:
108108 if self._geo_larger_than_display(width, height):
109109 scale_divisor = self._get_scaled_down_geo(width, height)
110110 width = width / scale_divisor
@@ -160,7 +160,9 @@ class UnityTestCase(AutopilotTestCase):
160160
161161 if self._lightdm_mock_type is None:
162162 self.patch_lightdm_mock()
163− self._setup_extra_mock_environment_patch()
163+
164+ if self._qml_mock_enabled:
165+ self._setup_extra_mock_environment_patch()
164166
165167 app_proxy = self.launch_test_application(
166168 binary_path,
@@ -181,10 +183,14 @@ class UnityTestCase(AutopilotTestCase):
181183 def patch_lightdm_mock(self, mock_type='single'):
182184 self._lightdm_mock_type = mock_type
183185 logger.info("Setting up LightDM mock type '%s'", mock_type)
184− new_ld_library_path = "%s:%s" % (
186+ new_ld_library_path = [
185187 get_default_extra_mock_libraries(),
186188 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)
188194 logger.info("New library path: %s", new_ld_library_path)
189195
190196 self.patch_environment('LD_LIBRARY_PATH', new_ld_library_path)
@@ -203,8 +209,13 @@ class UnityTestCase(AutopilotTestCase):
203209 return lightdm_mock_path
204210
205211 def _setup_extra_mock_environment_patch(self):
206− mocks_library_path = get_mocks_library_path()
207− self.patch_environment('QML2_IMPORT_PATH', 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)
218+ self.patch_environment('QML2_IMPORT_PATH', qml_import_path)
208219
209220 def _set_proxy(self, proxy):
210221 """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 @@
1919
2020from __future__ import absolute_import
2121
22−from unity8.shell import with_lightdm_mock
22+from unity8.shell import with_lightdm_mock, DragMixin
2323from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
2424
2525from testtools.matchers import Equals
2626from autopilot.matchers import Eventually
2727
28−
29−class TestHud(UnityTestCase):
28+class TestHud(UnityTestCase, DragMixin):
3029
3130 """Tests the Shell HUD."""
3231
3332 scenarios = _get_device_emulation_scenarios()
3433
3534 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.
3736 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.
3939
4040 """
4141 self.launch_unity()
4242 self.main_window.get_greeter().swipe()
4343 window = self.main_window.get_qml_view()
4444 hud_show_button = self.main_window.get_hud_show_button()
45+ edge_drag_area = self.main_window.get_hud_edge_drag_area()
4546 hud = self.main_window.get_hud()
4647
4748 self._launch_test_app_from_app_screen()
@@ -50,16 +51,33 @@ class TestHud(UnityTestCase):
5051 window,
5152 hud_show_button
5253 )
54+ initialBottomMargin = int(hud_show_button.bottomMargin)
55+
5356 self.touch.press(swipe_coords.start_x, swipe_coords.start_y)
5457 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)
5662 self.assertThat(hud_show_button.opacity, Eventually(Equals(1.0)))
63+ self.assertThat(hud_show_button.bottomMargin, Eventually(Equals(0.0)))
5764 self.touch.release();
65+ self.assertThat(hud.shown, Equals(False))
5866 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))
5975 self.assertThat(hud.shown, Equals(False))
76+ self.assertThat(hud_show_button.opacity, Eventually(Equals(0.0)))
6077
6178 def test_show_hud_appears(self):
6279 """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.
6381
6482 """
6583 self.launch_unity()
@@ -74,14 +92,28 @@ class TestHud(UnityTestCase):
7492 window,
7593 hud_show_button
7694 )
95+
7796 self.touch.press(swipe_coords.start_x, swipe_coords.start_y)
7897 self.addCleanup(self._maybe_release_finger)
79− self.touch._finger_move(swipe_coords.end_x, swipe_coords.end_y)
80−
98+ self._drag(swipe_coords.start_x, swipe_coords.start_y, swipe_coords.start_x, swipe_coords.end_y)
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)
81106 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))
82111 self.assertThat(hud_show_button.opacity, Eventually(Equals(1.0)))
83112 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)
84115 self.assertThat(hud.shown, Eventually(Equals(True)))
116+ self.assertThat(hud_show_button.opacity, Eventually(Equals(0.0)))
85117
86118 def test_hide_hud_click(self):
87119 """Tapping the close button of the Hud must dismiss it."""
@@ -90,6 +122,7 @@ class TestHud(UnityTestCase):
90122 hud = self.main_window.get_hud()
91123
92124 self._launch_test_app_from_app_screen()
125+
93126 hud.show()
94127
95128 x, y = hud.get_close_button_coords()
@@ -103,10 +136,11 @@ class TestHud(UnityTestCase):
103136 """
104137 self.launch_unity()
105138 self.main_window.get_greeter().swipe()
106− hud = self.main_window.get_hud()
107139 window = self.main_window.get_qml_view()
140+ hud = self.main_window.get_hud()
108141
109142 self._launch_test_app_from_app_screen()
143+
110144 hud.show()
111145
112146 start_x, start_y = hud.get_close_button_coords()
tests/mocks/AccountsService/AccountsService.cpp+16−4
@@ -20,11 +20,12 @@
2020
2121AccountsService::AccountsService(QObject* parent)
2222 : QObject(parent),
23− m_backgroundFile(TOP_SRCDIR "/graphics/phone_background.jpg")
23+ m_backgroundFile(TOP_SRCDIR "/graphics/phone_background.jpg"),
24+ m_statsWelcomeScreen(true)
2425{
2526}
2627
27−QString AccountsService::getUser()
28+QString AccountsService::user() const
2829{
2930 return "testuser";
3031}
@@ -34,7 +35,7 @@ void AccountsService::setUser(const QString &user)
3435 Q_UNUSED(user)
3536}
3637
37−bool AccountsService::getDemoEdges()
38+bool AccountsService::demoEdges() const
3839{
3940 return false;
4041}
@@ -44,7 +45,7 @@ void AccountsService::setDemoEdges(bool demoEdges)
4445 Q_UNUSED(demoEdges)
4546}
4647
47−QString AccountsService::getBackgroundFile()
48+QString AccountsService::backgroundFile() const
4849{
4950 return m_backgroundFile;
5051}
@@ -54,3 +55,14 @@ void AccountsService::setBackgroundFile(const QString &backgroundFile)
5455 m_backgroundFile = backgroundFile;
5556 backgroundFileChanged();
5657}
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
2828{
2929 Q_OBJECT
3030 Q_PROPERTY (QString user
31− READ getUser
31+ READ user
3232 WRITE setUser
3333 NOTIFY userChanged)
3434 Q_PROPERTY (bool demoEdges
35− READ getDemoEdges
35+ READ demoEdges
3636 WRITE setDemoEdges
3737 NOTIFY demoEdgesChanged)
3838 Q_PROPERTY (QString backgroundFile
39− READ getBackgroundFile
39+ READ backgroundFile
4040 WRITE setBackgroundFile // only available in mock
4141 NOTIFY backgroundFileChanged)
42+ Q_PROPERTY (bool statsWelcomeScreen
43+ READ statsWelcomeScreen
44+ WRITE setStatsWelcomeScreen // only available in mock
45+ NOTIFY statsWelcomeScreenChanged)
4246
4347public:
4448 explicit AccountsService(QObject *parent = 0);
4549
46− QString getUser();
50+ QString user() const;
4751 void setUser(const QString &user);
48− bool getDemoEdges();
52+ bool demoEdges() const;
4953 void setDemoEdges(bool demoEdges);
50− QString getBackgroundFile();
54+ QString backgroundFile() const;
5155 void setBackgroundFile(const QString &backgroundFile);
56+ bool statsWelcomeScreen() const;
57+ void setStatsWelcomeScreen(bool statsWelcomeScreen);
5258
5359Q_SIGNALS:
5460 void userChanged();
5561 void demoEdgesChanged();
5662 void backgroundFileChanged();
63+ void statsWelcomeScreenChanged();
5764
5865private:
5966 QString m_backgroundFile;
67+ bool m_statsWelcomeScreen;
6068};
6169
6270#endif
plugins/Unity/Indicators/Network/plugin.cpp → tests/mocks/QMenuModel/UnityMenuModel.qmlrenamed+9−14
@@ -1,5 +1,8 @@
11/*
2− * Copyright (C) 2012 Canonical, Ltd.
2+ * Copyright (C) 2013 Canonical, Ltd.
3+ *
4+ * Authors:
5+ * Mirco Müller <mirco.mueller@canonical.com>
36 *
47 * This program is free software; you can redistribute it and/or modify
58 * it under the terms of the GNU General Public License as published by
@@ -12,20 +15,12 @@
1215 *
1316 * You should have received a copy of the GNU General Public License
1417 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Author: Nick Dedekind <nick.dedekind@canonical.com>
1718 */
1819
19−// Qt
20−#include <QtQml/qqml.h>
21−
22−// self
23−#include "plugin.h"
24−
25−// local
26−#include "networkagent.h"
20+import QtQuick 2.0
2721
28−void IndicatorsNetworkPlugin::registerTypes(const char *uri)
29−{
30− qmlRegisterType<NetworkAgent>(uri, 0, 1, "NetworkAgent");
22+QtObject {
23+ property variant busName
24+ property variant actions
25+ property variant menuObjectPath
3126}
tests/mocks/QMenuModel/qmldir+1
@@ -1,2 +1,3 @@
11module QMenuModel
22QDBusActionGroup 0.1 QDBusActionGroup.qml
3+UnityMenuModel 0.1 UnityMenuModel.qml
tests/mocks/Ubuntu/DownloadDaemonListener/MockDownloadTracker.cpp+5
@@ -63,5 +63,10 @@ void MockDownloadTracker::startService()
6363 if(!m_service.isEmpty() && !m_dbusPath.isEmpty()) {
6464 m_active = true;
6565 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+ }
6671 }
6772}
tests/mocks/Unity/Indicators/IndicatorsModel.qml+5−15
@@ -28,45 +28,35 @@ ListModel {
2828 // which throws off the filter for non-visible indicators.
2929 Component.onCompleted: {
3030 append({ "identifier": "indicator-fake1",
31− "priority": 0,
32− "title": "Menu1",
33− "description": "",
31+ "position": 0,
3432 "widgetSource": "qrc:/tests/indciators/qml/fake_menu_widget1.qml",
3533 "pageSource": "qrc:/tests/indciators/qml/fake_menu_page1.qml",
3634 "indicatorProperties": ""
3735 });
3836
3937 append({ "identifier": "indicator-fake2",
40− "priority": 1,
41− "title": "Menu2",
42− "description": "",
38+ "position": 1,
4339 "widgetSource": "qrc:/tests/indciators/qml/fake_menu_widget2.qml",
4440 "pageSource": "qrc:/tests/indciators/qml/fake_menu_page2.qml",
4541 "indicatorProperties": ""
4642 });
4743
4844 append({ "identifier": "indicator-fake3",
49− "priority": 2,
50− "title": "Menu3",
51− "description": "",
45+ "position": 2,
5246 "widgetSource": "qrc:/tests/indciators/qml/fake_menu_widget3.qml",
5347 "pageSource": "qrc:/tests/indciators/qml/fake_menu_page3.qml",
5448 "indicatorProperties": ""
5549 });
5650
5751 append({ "identifier": "indicator-fake4",
58− "priority": 3,
59− "title": "Menu4",
60− "description": "",
52+ "position": 3,
6153 "widgetSource": "qrc:/tests/indciators/qml/fake_menu_widget4.qml",
6254 "pageSource": "qrc:/tests/indciators/qml/fake_menu_page4.qml",
6355 "indicatorProperties": ""
6456 });
6557
6658 append({ "identifier": "indicator-fake5",
67− "priority": 4,
68− "title": "Menu5",
69− "description": "",
59+ "position": 4,
7060 "widgetSource": "qrc:/tests/indciators/qml/fake_menu_widget5.qml",
7161 "pageSource": "qrc:/tests/indciators/qml/fake_menu_page5.qml",
7262 "indicatorProperties": ""
tests/mocks/Unity/fake_applications_scope.cpp+7
@@ -64,5 +64,12 @@ DeeModel* ApplicationsScope::createCategoriesModel()
6464 "grid",
6565 hints);
6666
67+ dee_model_append(category_model,
68+ "outdated",
69+ "Outdaded",
70+ "gtk-apply",
71+ "grid",
72+ hints);
73+
6774 return category_model;
6875}
tests/mocks/Unity/fake_categories.cpp+6
@@ -42,6 +42,7 @@ Categories::Categories(QObject* parent)
4242 m_roles[Categories::RoleIcon] = "icon";
4343 m_roles[Categories::RoleRenderer] = "renderer";
4444 m_roles[Categories::RoleContentType] = "contentType";
45+ m_roles[Categories::RoleRendererHint] = "rendererHint";
4546 m_roles[Categories::RoleHints] = "hints";
4647 m_roles[Categories::RoleResults] = "results";
4748 m_roles[Categories::RoleCount] = "count";
@@ -229,6 +230,11 @@ Categories::data(const QModelIndex& index, int role) const
229230 auto hints = DeeListModel::data(index, CategoryColumn::HINTS).toHash();
230231 return hints.contains("content-type") ? hints["content-type"] : QVariant(QString("default"));
231232 }
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+ }
232238 case RoleHints:
233239 return DeeListModel::data(index, CategoryColumn::HINTS);
234240 case RoleResults:
tests/mocks/Unity/fake_categories.h+1
@@ -39,6 +39,7 @@ public:
3939 RoleIcon,
4040 RoleRenderer,
4141 RoleContentType,
42+ RoleRendererHint,
4243 RoleHints,
4344 RoleResults,
4445 RoleCount
tests/mocks/Unity/fake_preview.cpp+2−5
@@ -56,11 +56,8 @@ QString Preview::image() const
5656 return "";
5757}
5858
59−QString Preview::imageSourceUri() const
60−{
61− return "";
62−}
63−
6459void Preview::execute(const QString& actionId, const QHash<QString, QVariant>& hints)
6560{
61+ Q_UNUSED(actionId);
62+ Q_UNUSED(hints);
6663}
tests/mocks/Unity/fake_preview.h−2
@@ -36,7 +36,6 @@ class Q_DECL_EXPORT Preview : public QObject
3636 Q_PROPERTY(QVariant infoHints READ infoHints NOTIFY previewChanged)
3737 Q_PROPERTY(QVariantMap infoMap READ infoHintsHash NOTIFY previewChanged)
3838 Q_PROPERTY(QString image READ image NOTIFY previewChanged)
39− Q_PROPERTY(QString imageSourceUri READ imageSourceUri NOTIFY previewChanged)
4039
4140public:
4241 explicit Preview(QObject *parent = 0);
@@ -49,7 +48,6 @@ public:
4948 QVariant infoHints();
5049 QVariantMap infoHintsHash() const;
5150 QString image() const;
52− QString imageSourceUri() const;
5351
5452 Q_INVOKABLE void execute(const QString& actionId, const QHash<QString, QVariant>& hints);
5553
tests/mocks/Unity/fake_scope.cpp+13
@@ -30,6 +30,7 @@ static DeeModel* create_results_model(unsigned category_count, unsigned result_c
3030Scope::Scope(QObject* parent)
3131 : QObject(parent)
3232 , m_visible(false)
33+ , m_searching(false)
3334 , m_categories(new Categories(this))
3435 , m_results(new DeeListModel(this))
3536{
@@ -44,6 +45,7 @@ Scope::Scope(QString const& id, QString const& name, bool visible, QObject* pare
4445 , m_id(id)
4546 , m_name(name)
4647 , m_visible(visible)
48+ , m_searching(false)
4749 , m_categories(new Categories(this))
4850 , m_results(new DeeListModel(this))
4951{
@@ -85,6 +87,10 @@ bool Scope::connected() const {
8587 return true;
8688}
8789
90+bool Scope::searchInProgress() const {
91+ return m_searching;
92+}
93+
8894Categories* Scope::categories() const {
8995 return m_categories;
9096}
@@ -122,6 +128,13 @@ void Scope::setFormFactor(const QString &str) {
122128 }
123129}
124130
131+void Scope::setSearchInProgress(const bool inProg) {
132+ if (inProg != m_searching) {
133+ m_searching = inProg;
134+ Q_EMIT searchInProgressChanged();
135+ }
136+}
137+
125138void Scope::setNoResultsHint(const QString& str) {
126139 if (str != m_noResultsHint) {
127140 m_noResultsHint = str;
tests/mocks/Unity/fake_scope.h+7−1
@@ -37,6 +37,7 @@ class Scope : public QObject
3737 Q_PROPERTY(bool connected READ connected NOTIFY connectedChanged)
3838 Q_PROPERTY(Categories* categories READ categories NOTIFY categoriesChanged)
3939
40+ Q_PROPERTY(bool searchInProgress READ searchInProgress WRITE setSearchInProgress NOTIFY searchInProgressChanged)
4041 Q_PROPERTY(QString searchQuery READ searchQuery WRITE setSearchQuery NOTIFY searchQueryChanged)
4142 Q_PROPERTY(QString noResultsHint READ noResultsHint WRITE setNoResultsHint NOTIFY noResultsHintChanged)
4243 Q_PROPERTY(QString formFactor READ formFactor WRITE setFormFactor NOTIFY formFactorChanged)
@@ -54,6 +55,7 @@ public:
5455 bool visible() const;
5556 QString shortcut() const;
5657 bool connected() const;
58+ bool searchInProgress() const;
5759 Categories* categories() const;
5860 QString searchQuery() const;
5961 QString noResultsHint() const;
@@ -64,6 +66,7 @@ public:
6466 void setSearchQuery(const QString& search_query);
6567 void setNoResultsHint(const QString& hint);
6668 void setFormFactor(const QString& form_factor);
69+ void setSearchInProgress(const bool inProg);
6770
6871 Q_INVOKABLE void activate(const QVariant &uri, const QVariant &icon_hint, const QVariant &category,
6972 const QVariant &result_type, const QVariant &mimetype, const QVariant &title,
@@ -78,11 +81,11 @@ Q_SIGNALS:
7881 void iconHintChanged(const QString&);
7982 void descriptionChanged(const QString&);
8083 void searchHintChanged(const QString&);
84+ void searchInProgressChanged();
8185 void visibleChanged(bool);
8286 void shortcutChanged(const QString&);
8387 void connectedChanged(bool);
8488 void categoriesChanged();
85− void searchFinished(const QString&);
8689 void searchQueryChanged();
8790 void noResultsHintChanged();
8891 void formFactorChanged();
@@ -90,6 +93,8 @@ Q_SIGNALS:
9093 // signals triggered by activate(..) or preview(..) requests.
9194 void previewReady(Preview *preview);
9295 void activateApplication(const QString &desktop);
96+ void showDash();
97+ void hideDash();
9398
9499protected:
95100
@@ -101,6 +106,7 @@ protected:
101106 QString m_noResultsHint;
102107 QString m_formFactor;
103108 bool m_visible;
109+ bool m_searching;
104110
105111 Categories* m_categories;
106112 DeeListModel* m_results;
tests/mocks/libusermetrics/UserMetrics.cpp+6−2
@@ -228,7 +228,7 @@ UserMetricsPrivate::~UserMetricsPrivate()
228228
229229void UserMetricsPrivate::setUsername(const QString &username)
230230{
231− if (m_username == username) {
231+ if (m_username == username && m_newData) {
232232 return;
233233 }
234234
@@ -407,7 +407,11 @@ UserMetrics::~UserMetrics()
407407
408408QString UserMetrics::label() const
409409{
410− return d_ptr->m_label;
410+ if (d_ptr->m_label.isEmpty()) {
411+ return "No data";
412+ } else {
413+ return d_ptr->m_label;
414+ }
411415}
412416
413417QString UserMetrics::username() const
tests/plugins/AccountsService/client.cpp+2−2
@@ -50,9 +50,9 @@ private Q_SLOTS:
5050 AccountsService session;
5151 session.setUser("testuser");
5252 session.setDemoEdges(true);
53− QCOMPARE(session.getDemoEdges(), true);
53+ QCOMPARE(session.demoEdges(), true);
5454 session.setDemoEdges(false);
55− QCOMPARE(session.getDemoEdges(), false);
55+ QCOMPARE(session.demoEdges(), false);
5656 }
5757};
5858
tests/plugins/ListViewWithPageHeader/CMakeLists.txt+6
@@ -32,5 +32,11 @@ qt5_use_modules(listviewwithpageheadertestsectionExec Test Core Qml)
3232target_link_libraries(listviewwithpageheadertestsectionExec ${Qt5Gui_LIBRARIES} ${Qt5Quick_LIBRARIES})
3333add_custom_target(testlistviewwithpageheadersection ${CMAKE_CURRENT_BINARY_DIR}/listviewwithpageheadertestsectionExec -o ${CMAKE_BINARY_DIR}/testlistviewwithpageheadersection.xml,xunitxml -o -,txt)
3434
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+
3540add_dependencies(qmluitests testlistviewwithpageheader)
3641add_dependencies(qmluitests testlistviewwithpageheadersection)
42+add_dependencies(qmluitests testlistviewwithpageheadersectionexternalmodel)
tests/plugins/ListViewWithPageHeader/listviewwithpageheadertest.cpp+169
@@ -1655,6 +1655,175 @@ private Q_SLOTS:
16551655 QCOMPARE(spy.count(), 0);
16561656 }
16571657
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+
16581827private:
16591828 QQuickView *view;
16601829 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:
6565 void testDataAndOrder()
6666 {
6767 // 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−
7868 IndicatorsModel model;
79− model.setIndicatorData(map);
8069 model.load();
8170
8271 // should be in order:
8372 // fake3, fake4, fake1, fake2
8473
8574 QCOMPARE(model.data(0, IndicatorsModelRole::Identifier).toString(), QString("indicator-fake3"));
86− QCOMPARE(model.data(0, IndicatorsModelRole::Title).toString(), QString("fake3"));
8775 QCOMPARE(model.data(0, IndicatorsModelRole::Position).toInt(), 3);
8876 QCOMPARE(model.data(0, IndicatorsModelRole::IndicatorProperties).toMap()["busName"].toString(), QString("com.canonical.indicator.fake3"));
8977
9078 QCOMPARE(model.data(1, IndicatorsModelRole::Identifier).toString(), QString("indicator-fake4"));
91− QCOMPARE(model.data(1, IndicatorsModelRole::Title).toString(), QString("fake4"));
9279 QCOMPARE(model.data(1, IndicatorsModelRole::Position).toInt(), 2);
9380 QCOMPARE(model.data(1, IndicatorsModelRole::IndicatorProperties).toMap()["busName"].toString(), QString("com.canonical.indicator.fake4"));
9481
9582 QCOMPARE(model.data(2, IndicatorsModelRole::Identifier).toString(), QString("indicator-fake1"));
96− QCOMPARE(model.data(2, IndicatorsModelRole::Title).toString(), QString("fake1"));
9783 QCOMPARE(model.data(2, IndicatorsModelRole::Position).toInt(), 1);
9884 QCOMPARE(model.data(2, IndicatorsModelRole::IndicatorProperties).toMap()["busName"].toString(), QString("com.canonical.indicator.fake1"));
9985
10086 QCOMPARE(model.data(3, IndicatorsModelRole::Identifier).toString(), QString("indicator-fake2"));
101− QCOMPARE(model.data(3, IndicatorsModelRole::Title).toString(), QString("fake2"));
10287 QCOMPARE(model.data(3, IndicatorsModelRole::Position).toInt(), 0);
10388 QCOMPARE(model.data(3, IndicatorsModelRole::IndicatorProperties).toMap()["busName"].toString(), QString("com.canonical.indicator.fake2"));
10489 }
tests/plugins/Unity/Launcher/launcherbackendtest.cpp+3−3
@@ -37,7 +37,7 @@ private Q_SLOTS:
3737
3838 void testFileNames()
3939 {
40− LauncherBackend backend(false);
40+ LauncherBackend backend;
4141
4242 backend.setStoredApplications(QStringList() << "rel-icon" << "abs-icon" << "invalid");
4343 QCOMPARE(backend.storedApplications(), QStringList() << "rel-icon" << "abs-icon");
@@ -45,7 +45,7 @@ private Q_SLOTS:
4545
4646 void testPinning()
4747 {
48− LauncherBackend backend(false);
48+ LauncherBackend backend;
4949
5050 backend.setStoredApplications(QStringList() << "rel-icon" << "abs-icon");
5151 QCOMPARE(backend.isPinned("rel-icon"), false);
@@ -82,7 +82,7 @@ private Q_SLOTS:
8282 QFETCH(QString, appId);
8383 QFETCH(QString, expectedIcon);
8484
85− LauncherBackend backend(false);
85+ LauncherBackend backend;
8686 backend.setStoredApplications(QStringList() << appId);
8787
8888 QCOMPARE(backend.icon(appId), expectedIcon);
tests/plugins/Unity/Launcher/launchermodeltest.cpp+61−2
@@ -62,7 +62,14 @@ public:
6262 return QString();
6363 }
6464 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+ }
6673 unity::shell::application::ApplicationInfoInterface *startApplication(const QString &, const QStringList &) { return nullptr; }
6774 bool stopApplication(const QString &) { return false; }
6875 bool focusApplication(const QString &appId) {
@@ -151,9 +158,54 @@ private Q_SLOTS:
151158 QCOMPARE(launcherModel->get(1)->pinned(), false);
152159 }
153160
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+
154171 void testRemove() {
172+ QFETCH(bool, pinned);
173+ QFETCH(bool, running);
174+
175+ // In the beginning we always have two items
155176 QCOMPARE(launcherModel->rowCount(QModelIndex()), 2);
156− launcherModel->requestRemove(launcherModel->get(0)->appId());
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
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
157209 QCOMPARE(launcherModel->rowCount(QModelIndex()), 1);
158210 }
159211
@@ -181,6 +233,13 @@ private Q_SLOTS:
181233
182234 // quicklist needs to transform to remove item. trigger it and check it item goes away
183235 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
184243 QCOMPARE(launcherModel->rowCount(QModelIndex()), 1);
185244 }
186245
tests/plugins/Unity/previewbindingstest.cpp+27
@@ -19,6 +19,7 @@
1919
2020#include <UnityCore/Preview.h>
2121#include <UnityCore/GLibWrapper.h>
22+#include <UnityCore/Variant.h>
2223#include <unity-protocol.h>
2324
2425#include "genericpreview.h"
@@ -48,7 +49,23 @@ void PreviewBindingsTest::testGenericPreview()
4849 UNITY_PROTOCOL_LAYOUT_HINT_LEFT);
4950 unity::glib::Object<GObject> genPrv(rawPreview);
5051
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+
5166 auto corePrv = unity::dash::Preview::PreviewForProtocolObject(genPrv);
67+ corePrv->preview_result = localResult;
68+
5269 auto prv = Preview::newFromUnityPreview(corePrv);
5370
5471 QCOMPARE(prv != nullptr, true);
@@ -64,6 +81,16 @@ void PreviewBindingsTest::testGenericPreview()
6481 QCOMPARE(act->displayName(), QString("Action1"));
6582 QCOMPARE(act->iconHint(), QString("/foo.png"));
6683
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+
6794 g_object_unref(icon);
6895 g_object_unref(iconFile);
6996}
tests/plugins/Unity/resultstest.cpp+13−8
@@ -65,25 +65,30 @@ void ResultsTest::testAllColumns()
6565
6666void ResultsTest::testIconColumn_data()
6767{
68+ QTest::addColumn<QString>("uri");
6869 QTest::addColumn<QString>("giconString");
6970 QTest::addColumn<QString>("result");
7071
71− QTest::newRow("absolute path") << "/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";
73− QTest::newRow("http uri") << "http://images.ubuntu.com/example.jpg" << "http://images.ubuntu.com/example.jpg";
74− QTest::newRow("themed icon") << "accessories-other" << "image://theme/accessories-other";
75− QTest::newRow("fileicon") << ". 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";
77− QTest::newRow("annotatedicon") << ". UnityProtocolAnnotatedIcon %7B'base-icon':%20%3C'.%20GThemedIcon%20accessories-other%20accessories%20generic'%3E%7D" << "image://theme/accessories-other,accessories,generic";
72+ QTest::newRow("unspecified") << "test:uri" << "" << "";
73+ QTest::newRow("absolute path") << "test:uri" << "/usr/share/icons/example.png" << "/usr/share/icons/example.png";
74+ QTest::newRow("file uri") << "test:uri" << "file:///usr/share/icons/example.png" << "file:///usr/share/icons/example.png";
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";
77+ QTest::newRow("themed icon") << "test:uri" << "accessories-other" << "image://theme/accessories-other";
78+ QTest::newRow("fileicon") << "test:uri" << ". GFileIcon http://example.org/resource.gif" << "http://example.org/resource.gif";
79+ QTest::newRow("themedicon") << "test:uri" << ". GThemedIcon accessories-other accessories generic" << "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";
7882}
7983
8084void ResultsTest::testIconColumn()
8185{
86+ QFETCH(QString, uri);
8287 QFETCH(QString, giconString);
8388 QFETCH(QString, result);
8489 auto deeModel = createBackendModel();
8590 dee_model_append (deeModel,
86− "test:uri",
91+ uri.toLocal8Bit().constData(),
8792 giconString.toLocal8Bit().constData(),
8893 0,
8994 0,
tests/qmltests/CMakeLists.txt+2−2
@@ -13,7 +13,6 @@ set(qmltest_DEFAULT_NO_ADD_TEST FALSE)
1313set(qmltest_DEFAULT_PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=minimal")
1414add_qml_test(Components AnimationControllerWithSignals)
1515add_qml_test(Components Carousel)
16−add_qml_test(Components CrossFadeImage)
1716add_qml_test(Components MathLocal)
1817add_qml_test(Components OpenEffect)
1918add_qml_test(Components RatingStars)
@@ -32,6 +31,7 @@ add_manual_qml_test(Components DragHandle IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugi
3231add_qml_test(Components DraggingArea)
3332add_qml_test(Components EdgeDemoOverlay)
3433add_qml_test(Components FilterGrid IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/plugins)
34+add_qml_test(Components LazyImage)
3535add_qml_test(Components ResponsiveFlowView)
3636add_qml_test(Components ResponsiveGridView)
3737add_qml_test(Components Revealer)
@@ -63,7 +63,7 @@ add_qml_test(Greeter Infographics IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qml
6363add_qml_test(Hud Hud)
6464add_qml_test(Hud Result)
6565add_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)
6767add_qml_test(Panel IndicatorRow)
6868add_qml_test(Panel Indicators IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
6969add_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
1919import ".."
2020import "../../../Components"
2121import Ubuntu.Components 0.1
22+import Unity 0.1
2223import Unity.Test 0.1 as UT
2324
2425Item {
2526 width: units.gu(110)
2627 height: units.gu(30)
2728
29+ Scope {
30+ id: scopeMock
31+ }
32+
2833 UT.UnityTestCase {
2934 name: "PageHeaderTest"
3035 when: windowShown
@@ -132,6 +137,27 @@ Item {
132137 compare(pageHeader.searchHistory.count, 3)
133138 compare(pageHeader.searchHistory.get(0).query, "humppa4")
134139 }
140+
141+ function test_search_indicator() {
142+ var searchIndicator = findChild(pageHeader, "searchIndicator")
143+ var primaryImage = findChild(pageHeader, "primaryImage")
144+
145+ pageHeader.triggerSearch()
146+
147+ scopeMock.searchInProgress = false
148+ compare(searchIndicator.running, false, "Search indicator is running.")
149+ tryCompare(primaryImage, "visible", true)
150+
151+ scopeMock.searchInProgress = true
152+ compare(searchIndicator.running, true, "Search indicator isn't running.")
153+ tryCompare(primaryImage, "visible", false)
154+
155+ pageHeader.resetSearch()
156+ }
157+
158+ function cleanup() {
159+ scopeMock.searchInProgress = false
160+ }
135161 }
136162
137163 Column {
@@ -145,6 +171,8 @@ Item {
145171 right: parent.right
146172 }
147173
174+ scope: scopeMock
175+
148176 searchEntryEnabled: true
149177 text: "%^$%^%^&%^&%^$%GHR%"
150178 }
tests/qmltests/Components/tst_Showable.qml+27
@@ -155,5 +155,32 @@ Item {
155155 show1.created = true;
156156 compare(show1.shown, true, "Showable should automatically show when created changes to true if attempted to show before.");
157157 }
158+
159+ // Test that showNow immediately shows showable
160+ function test_showNow() {
161+ init_test();
162+
163+ show1.opacity = 0.2;
164+
165+ show1.showNow();
166+ compare(show1.shown, true, "Showable should be shown after showNow");
167+ compare(show1.showAnimation.running, false, "Showable should be done running after showNow");
168+ compare(show1.opacity, 1.0, "Showable should be at end of animation after showNow");
169+ }
170+
171+ // Test the lazy showNow mechanism while waiting for the created flag.
172+ function test_showNow_when_not_created() {
173+ init_test();
174+
175+ show1.opacity = 0.2;
176+ show1.created = false;
177+
178+ show1.showNow();
179+ compare(show1.shown, false, "Showable should not showNow when created == false");
180+ show1.created = true;
181+ compare(show1.shown, true, "Showable should automatically show when created changes to true if attempted to showNow before.");
182+ compare(show1.showAnimation.running, false, "Showable should be done running after delayed showNow");
183+ compare(show1.opacity, 1.0, "Showable should be at end of animation after delayed showNow");
184+ }
158185 }
159186}
tests/qmltests/Dash/Apps/tst_AppPreview.qml+75−2
@@ -25,6 +25,9 @@ Item {
2525 width: units.gu(60)
2626 height: units.gu(80)
2727
28+ // Fake shell
29+ QtObject { id: shell; property int height: appPreview.height }
30+
2831 property var calls: []
2932
3033 SignalSpy {
@@ -45,6 +48,8 @@ Item {
4548 ["Unity User", 10, "10/02/2013", root.commentary],
4649 ]
4750 }
51+ QtObject { id: showProgress; property bool value: true }
52+ QtObject { id: progressSource; property string value: "service" }
4853
4954 QtObject {
5055 id: data
@@ -66,8 +71,30 @@ Item {
6671 ]
6772 }
6873
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+
6996 function fake_call(id, data){
70− root.calls[root.calls.length] = id;
97+ root.calls[root.calls.length] = [id, data];
7198 }
7299
73100 // The component under test
@@ -89,6 +116,10 @@ Item {
89116 reviewField.focus = false;
90117 reviewField.text = "";
91118 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;
92123 }
93124
94125 function test_actions() {
@@ -102,7 +133,7 @@ Item {
102133
103134 var actions = data.actions;
104135 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.");
106137 }
107138 }
108139
@@ -124,6 +155,7 @@ Item {
124155
125156 function test_review_focus() {
126157 var appReviews = findChild(appPreview, "appReviews");
158+ appReviews.visible = true;
127159 var sendButton = findChild(appReviews, "sendButton");
128160 var reviewField = findChild(appReviews, "reviewField");
129161
@@ -162,5 +194,46 @@ Item {
162194 verify(buttons.visible == true);
163195 }
164196
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+
165238 }
166239}
tests/qmltests/Dash/tst_DashContent.qml+1−1
@@ -106,7 +106,7 @@ Item {
106106 contentEndReachedSpy.clear()
107107 clear_scope_status();
108108
109− // clear, wait for dahs to empty and load scopes.
109+ // clear, wait for dash to empty and load scopes.
110110 var dashContentList = findChild(dashContent, "dashContentList");
111111 verify(dashContentList != undefined)
112112 scopesModel.clear();
tests/qmltests/Dash/tst_GenericScopeView.qml+17
@@ -44,10 +44,27 @@ Item {
4444
4545 function test_isCurrent() {
4646 var pageHeader = findChild(genericScopeView, "pageHeader");
47+ var previewLoader = findChild(genericScopeView, "previewLoader");
4748 genericScopeView.isCurrent = true
4849 pageHeader.searchQuery = "test"
50+ previewLoader.open = true
4951 genericScopeView.isCurrent = false
5052 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);
5168 }
5269 }
5370 }
tests/qmltests/Greeter/tst_Infographics.qml+4−4
@@ -64,15 +64,15 @@ Item {
6464
6565 function test_set_username_data() {
6666 return [
67− { username: "has-password" },
68− { username: "no-password" },
69− { username: "empty-name" }
67+ { username: "has-password", label: "<b>19</b> minutes talk time" },
68+ { username: "two-factor", label: "No data" },
69+ { username: "", label: "No data" },
7070 ]
7171 }
7272
7373 function test_set_username(data) {
7474 infographicModel.username = data.username
75− tryCompare(label, "text", "<b>19</b> minutes talk time")
75+ tryCompare(label, "text", data.label)
7676 }
7777 }
7878
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.