on xenial help sign in
merged with trunk
commit969e21156e1fb6f6ca2ed003c489b13ae76a560d authorNick Dedekind <nicholas.dedekind@gmail.com> dateTue 10 Dec 2013, 14:22 (13 years ago) parentff095ab98a3fda
350 files changed+8261−13341
Applications/Application.qml−54 Applications/applications.js−115 Bottombar/Bottombar.qml+4−4 CMakeLists.txt+10−2 Components/Carousel.qml+31−15 Components/DragHandle.qml+22−24 Components/DraggingArea.qml+1−2 Components/EdgeDemo.qml+1 Components/EdgeDemoOverlay.qml+2 Components/EdgeDragArea.qml+12−4 Components/FilterGrid.qml+5−1 Components/LazyImage.qml+2−2 Components/Math.js−26 Components/PageHeader.qml+29−6 Components/PinPadButton.qml+40−13 Components/ResponsiveGridView.qml+10 Components/Revealer.qml+1−2 Components/Stage.qml+8−7 Components/Tile.qml+9 Components/Time.js−49 Components/UbuntuShapeForItem.qml+1 Dash/Apps/AppInfo.qml−89 Dash/Apps/AppPreview.qml+9 Dash/Apps/ApplicationsFilterGrid.qml−55 Dash/Apps/DashPluginFilterGrid.qml+2−4 Dash/Apps/FrequentlyUsedAppsModel.qml+16−16 Dash/Apps/RunningApplicationTile.qml−2 Dash/Apps/RunningApplicationsGrid.qml+17 Dash/Dash.qml+3 Dash/DashApps.qml+3−1 Dash/DashBar.qml+2−2 Dash/DashCarousel.qml+47 Dash/DashContent.qml+12−5 Dash/DashFilterGrid.qml+64 Dash/DashPreview.qml+10−3 tests/mocks/QMenuModel/UnityMenuModel.qml → Dash/DashPreviewPlaceholder.qml+6−7 Dash/DashRenderer.qml+65 Dash/Generic/GenericCarousel.qml+3−7 Dash/Generic/GenericFilterGrid.qml+13−21 Dash/Generic/GenericFilterGridPotrait.qml+1−3 Dash/Generic/GenericPreview.qml+4−1 Dash/Generic/WeatherFilterGrid.qml+2−4 Dash/GenericScopeView.qml+302−69 Dash/Music/AlbumTile.qml−116 Dash/Music/MusicCarousel.qml+2−2 Dash/Music/MusicFilterGrid.qml+7−15 Dash/Music/MusicPreview.qml+203 Dash/Music/graphics/music_progress_bg.png Dash/PreviewDelegateMapper.qml+1 Dash/ScopeView.qml−65 Dash/SearchableResultModel.qml+4 Dash/Video/VideosCarousel.qml → Dash/Video/VideoCarousel.qml+2−2 Dash/Video/VideoFilterGrid.qml+8−15 Dash/Video/VideoInfo.qml−84 Dash/graphics/phone/screenshots/angrybirds@12.png Dash/graphics/tooltip_arrow@27.png Greeter/Greeter.qml+5−8 Greeter/GreeterContent.qml+23−20 Greeter/Lockscreen.qml+14−22 Greeter/LoginList.qml+11 Greeter/PassphraseLockscreen.qml+1 Greeter/PinLockscreen.qml+35−4 Hud/SliderLabel.qml+4−2 Launcher/Launcher.qml+2−2 Launcher/LauncherDelegate.qml+1 Launcher/LauncherPanel.qml+88−47 Notifications/Notification.qml+5−8 Notifications/NotificationMenuItemFactory.qml+20−6 plugins/Unity/ratingoptionsmodel.cpp → Notifications/ShapedIcon.qml+20−13 Panel/Indicators.qml+37−10 Panel/Indicators/DefaultIndicatorWidget.qml+32−10 Panel/Indicators/client/IndicatorsTree.qml+2−3 Shell.qml+35−12 build+1 cmake/modules/Plugins.cmake+3−3 cmake/modules/autopilot.cmake+1−1 data/unity8-setcap.conf−32 data/unity8.conf+21 debian/changelog+395−2 debian/control+6−7 debian/unity8-fake-env.install+1 debian/unity8.install−2 debian/unity8.maintscript+1 graphics/applicationIcons/angrybirds@18.png graphics/applicationIcons/media-player@18.png graphics/applicationIcons/music@18.png graphics/applicationIcons/ski_safari@18.png graphics/applicationIcons/skype@18.png main.cpp+14−8 paths.h.in+4−2 plugins/AccountsService/plugin.cpp+1−1 plugins/HudClient/hudclient.cpp+1−16 plugins/LightDM/CMakeLists.txt+2−1 plugins/LightDM/DBusGreeterList.cpp+77 plugins/LightDM/DBusGreeterList.h+61 plugins/LightDM/Greeter.cpp+1 plugins/LightDM/Greeter.h+6−1 plugins/LightDM/plugin.cpp+14−2 plugins/ListViewWithPageHeader/listviewwithpageheader.cpp+32−6 plugins/ListViewWithPageHeader/listviewwithpageheader.h+5 plugins/SessionBroadcast/plugin.cpp+1−1 plugins/Ubuntu/Gestures/AxisVelocityCalculator.cpp+9−18 plugins/Ubuntu/Gestures/AxisVelocityCalculator.h+9−16 plugins/Ubuntu/Gestures/CMakeLists.txt+2 plugins/Ubuntu/Gestures/DirectionalDragArea.cpp+307−71 plugins/Ubuntu/Gestures/DirectionalDragArea.h+50−13 plugins/Ubuntu/Gestures/PressedOutsideNotifier.cpp+119 plugins/Ubuntu/Gestures/PressedOutsideNotifier.h+62 plugins/Ubuntu/Gestures/TimeSource.cpp+49 plugins/Ubuntu/Gestures/TimeSource.h+54 plugins/Ubuntu/Gestures/plugin.cpp+2 plugins/Unity/CMakeLists.txt−69 plugins/Unity/Indicators/indicator.cpp+8−16 plugins/Unity/Indicators/indicator.h+1−1 plugins/Unity/Indicators/indicatorsmanager.cpp+3−1 plugins/Unity/Indicators/qml/IndicatorBase.qml+3−4 plugins/Unity/Indicators/qml/IndicatorPage.qml+27−6 plugins/Unity/Indicators/qml/IndicatorWidget.qml+1−1 plugins/Unity/Indicators/qml/SliderMenuItem.qml+3−2 plugins/Unity/Indicators/unitymenumodelstack.cpp+98−7 plugins/Unity/Indicators/unitymenumodelstack.h+10−2 plugins/Unity/Launcher/backend/launcherbackend.cpp+6−6 plugins/Unity/Launcher/launcheritem.cpp+4−2 plugins/Unity/abstractfilteroption.h−58 plugins/Unity/applicationpreview.cpp−100 plugins/Unity/applicationpreview.h−66 plugins/Unity/categories.cpp−299 plugins/Unity/categories.h−95 plugins/Unity/checkoptionfilter.cpp−65 plugins/Unity/checkoptionfilter.h−57 plugins/Unity/filter.cpp−129 plugins/Unity/filter.h−75 plugins/Unity/filteroption.cpp−91 plugins/Unity/filteroption.h−61 plugins/Unity/filters.cpp−165 plugins/Unity/filters.h−77 plugins/Unity/genericoptionsmodel.cpp−187 plugins/Unity/genericoptionsmodel.h−79 plugins/Unity/moviepreview.cpp−67 plugins/Unity/moviepreview.h−60 plugins/Unity/multirangefilter.cpp−65 plugins/Unity/multirangefilter.h−60 plugins/Unity/musicpreview.cpp−54 plugins/Unity/musicpreview.h−62 plugins/Unity/plugin.cpp−74 plugins/Unity/preview.cpp−199 plugins/Unity/preview.h−89 plugins/Unity/previewaction.cpp−75 plugins/Unity/previewaction.h−71 plugins/Unity/previewinfohint.cpp−67 plugins/Unity/previewinfohint.h−58 plugins/Unity/qmldir−3 plugins/Unity/radiooptionfilter.cpp−61 plugins/Unity/radiooptionfilter.h−59 plugins/Unity/ratingfilteroption.cpp−62 plugins/Unity/ratingfilteroption.h−53 plugins/Unity/ratingsfilter.cpp−73 plugins/Unity/ratingsfilter.h−66 plugins/Unity/result.cpp−82 plugins/Unity/result.h−69 plugins/Unity/scope.cpp−404 plugins/Unity/scope.h−153 plugins/Unity/scopes.cpp−176 plugins/Unity/scopes.h−94 plugins/Unity/showallfilteroption.cpp−60 plugins/Unity/showallfilteroption.h−51 plugins/Unity/signalslist.cpp−39 plugins/Unity/signalslist.h−38 plugins/Unity/socialpreview.cpp−87 plugins/Unity/socialpreview.h−63 plugins/Unity/socialpreviewcomment.cpp−63 plugins/Unity/socialpreviewcomment.h−57 plugins/Unity/unityoptionsmodel.cpp−68 plugins/Unity/unityoptionsmodel.h−50 plugins/Unity/variantutils.cpp−51 plugins/Unity/variantutils.h−33 plugins/Utils/CMakeLists.txt+1−2 plugins/Utils/albumartprovider.cpp+10−7 plugins/Utils/applicationpaths.h−38 plugins/Unity/bottombarvisibilitycommunicatorshell.cpp → plugins/Utils/bottombarvisibilitycommunicatorshell.cpp plugins/Unity/bottombarvisibilitycommunicatorshell.h → plugins/Utils/bottombarvisibilitycommunicatorshell.h plugins/Utils/plugin.cpp+11−9 plugins/Utils/ubuntuwindow.cpp−36 plugins/Utils/ubuntuwindow.h−42 po/ar.po+50−126 po/ast.po+24−110 po/az.po+23−94 po/bg.po+23−100 po/ca.po+23−109 po/cs.po+24−104 po/de.po+33−115 po/el.po+23−94 po/en_AU.po+23−109 po/en_GB.po+23−109 po/eo.po+22−87 po/es.po+25−111 po/fa.po+158 po/fi.po+25−111 po/fo.po+23−94 po/fr.po+22−93 po/gd.po+23−109 po/gl.po+25−108 po/he.po+27−111 po/hr.po+23−94 po/hu.po+23−94 po/hy.po+23−94 po/id.po+22−87 po/is.po+23−109 po/it.po+24−110 po/ja.po+22−87 po/km.po+25−111 po/kn.po+23−94 po/ko.po+22−90 po/ky.po+23−94 po/lo.po+23−94 po/lv.po+23−94 po/ml.po+162 po/my.po+23−103 po/nb.po+23−94 po/nl.po+23−94 po/pl.po+24−89 po/pt_BR.po+23−109 po/ro.po+22−94 po/ru.po+23−109 po/shn.po+22−87 po/si.po+22−87 po/sl.po+25−111 po/sr.po+23−94 po/sv.po+22−87 po/ta.po+164 po/te.po+22−90 po/tr.po+23−109 po/ug.po+24−104 po/uk.po+28−112 po/unity8.pot+20−85 po/xh.po+22−87 po/zh_CN.po+23−109 po/zh_TW.po+23−94 run+6−3 run_on_device+25−6 tests/autopilot/unity8/__init__.py+46−1 tests/autopilot/unity8/process_helpers.py+143 tests/autopilot/unity8/shell/emulators/create_interactive_notification.py tests/autopilot/unity8/shell/emulators/dash.py+7−17 tests/autopilot/unity8/shell/emulators/hud.py+12−4 tests/autopilot/unity8/shell/emulators/main_window.py+7−7 tests/autopilot/unity8/shell/tests/__init__.py+62−36 tests/autopilot/unity8/shell/tests/test_greeter.py+38 tests/autopilot/unity8/shell/tests/test_hud.py+11−10 tests/autopilot/unity8/shell/tests/test_notifications.py+76−73 tests/autopilot/unity8/shell/tests/test_upstart.py+99 tests/mocks/AccountsService/CMakeLists.txt+2−2 tests/mocks/AccountsService/plugin.cpp+1−1 tests/mocks/CMakeLists.txt+6 tests/mocks/LightDM/CMakeLists.txt+4−3 tests/mocks/LightDM/full/CMakeLists.txt+1−1 tests/mocks/LightDM/single-passphrase/CMakeLists.txt+1−1 tests/mocks/LightDM/single-pin/CMakeLists.txt+1−1 tests/mocks/LightDM/single/CMakeLists.txt+1−1 tests/mocks/Powerd/CMakeLists.txt+2−2 tests/mocks/QMenuModel/CMakeLists.txt+23 plugins/Unity/genericpreview.cpp → tests/mocks/QMenuModel/UnityMenuAction.qml+11−12 Launcher/QuicklistForegroundStyle.qml → tests/mocks/QMenuModel/actionstateparser.cpp+3−7 tests/plugins/Unity/resultstest.h → tests/mocks/QMenuModel/actionstateparser.h+11−13 tests/mocks/QMenuModel/plugin.cpp+30 plugins/Unity/ratingoptionsmodel.h → tests/mocks/QMenuModel/plugin.h+11−10 tests/mocks/QMenuModel/qmldir+3−1 tests/mocks/QMenuModel/unitymenumodel.cpp+239 tests/mocks/QMenuModel/unitymenumodel.h+96 tests/mocks/QtMultimedia/CMakeLists.txt+19 tests/mocks/QtMultimedia/audio.cpp+107 tests/mocks/QtMultimedia/audio.h+78 tests/plugins/Unity/signalslisttest.h → tests/mocks/QtMultimedia/plugin.cpp+10−12 plugins/Unity/plugin.h → tests/mocks/QtMultimedia/plugin.h+5−6 tests/mocks/QtMultimedia/qmldir+2 tests/mocks/Ubuntu/DownloadDaemonListener/CMakeLists.txt+1−1 tests/mocks/Unity/Application/CMakeLists.txt+2−2 tests/mocks/Unity/CMakeLists.txt+2−3 tests/mocks/Unity/Indicators/IndicatorBase.qml+37 tests/mocks/Unity/Indicators/IndicatorWidget.qml+28 tests/mocks/Unity/Indicators/RootActionState.qml+17−9 tests/mocks/Unity/Indicators/qmldir+2 plugins/Unity/categoryresults.cpp → tests/mocks/Unity/categoryresults.cpp plugins/Unity/categoryresults.h → tests/mocks/Unity/categoryresults.h tests/mocks/Unity/fake_preview.cpp+9−1 tests/mocks/Unity/fake_preview.h+2 tests/mocks/Unity/fake_scope.cpp+22−18 tests/mocks/Unity/fake_scope.h+7−2 tests/mocks/Unity/fake_unity_plugin.cpp+3 plugins/Unity/iconutils.cpp → tests/mocks/Unity/iconutils.cpp+10−10 plugins/Unity/iconutils.h → tests/mocks/Unity/iconutils.h tests/mocks/data/applications/camera-app.desktop tests/mocks/libusermetrics/CMakeLists.txt+1−1 tests/plugins/CMakeLists.txt+1 tests/plugins/LightDM/CMakeLists.txt+24 tests/plugins/LightDM/dbus.cpp+166 plugins/Unity/abstractfilteroption.cpp → tests/plugins/LightDM/greeter.qml+5−8 tests/plugins/ListViewWithPageHeader/CMakeLists.txt+7 tests/plugins/ListViewWithPageHeader/listviewwithpageheadertest.cpp+42 tests/plugins/ListViewWithPageHeader/listviewwithpageheadertestsection.cpp+81−1 tests/plugins/ListViewWithPageHeader/tst_listviewwithpageheaderqml.qml+138 tests/plugins/Ubuntu/Gestures/CMakeLists.txt+21−18 tests/plugins/Ubuntu/Gestures/DownwardsLauncher.qml+2−10 tests/plugins/Ubuntu/Gestures/GestureTest.cpp+54 plugins/Unity/genericpreview.h → tests/plugins/Ubuntu/Gestures/GestureTest.h+19−19 tests/plugins/Ubuntu/Gestures/LeftwardsLauncher.qml+5−13 tests/plugins/Ubuntu/Gestures/RightwardsLauncher.qml+3−10 tests/plugins/Ubuntu/Gestures/UpwardsLauncher.qml+5−13 tests/plugins/Ubuntu/Gestures/tst_AxisVelocityCalculator.cpp+3−3 tests/plugins/Ubuntu/Gestures/tst_DirectionalDragArea.cpp+326−168 tests/plugins/Ubuntu/Gestures/edgeDragExample.qml → tests/plugins/Ubuntu/Gestures/tst_DirectionalDragArea.qml+9−3 tests/plugins/Ubuntu/Gestures/tst_PressedOutsideNotifier.cpp+150 tests/plugins/Ubuntu/Gestures/tst_PressedOutsideNotifier.qml+62 tests/plugins/Unity/CMakeLists.txt−51 tests/plugins/Unity/Indicators/CMakeLists.txt+35−26 tests/plugins/Unity/Indicators/indicatorsmanagertest.cpp+1−3 tests/plugins/Unity/Indicators/unitymenumodelstacktest.cpp+206 tests/plugins/Unity/filtersbindingstest.cpp−515 tests/plugins/Unity/filtersbindingstest.h−47 tests/plugins/Unity/previewbindingstest.cpp−194 tests/plugins/Unity/previewbindingstest.h−35 tests/plugins/Unity/resultstest.cpp−196 tests/plugins/Unity/signalslisttest.cpp−57 tests/qmltests/CMakeLists.txt+9−6 tests/qmltests/Components/tst_DragHandle.cpp+4−5 tests/qmltests/Components/tst_EdgeDemoOverlay.qml+2−2 tests/qmltests/Components/tst_MathLocal.qml−91 tests/qmltests/Components/tst_PageHeader.qml+44−3 tests/qmltests/Components/tst_TimeLocal.qml−117 tests/qmltests/Dash/Apps/tst_AppPreview.qml+3−2 tests/qmltests/Dash/Apps/tst_RunningApplicationsGrid.qml+21 tests/qmltests/Dash/Movie/tst_MoviePreview.qml+1 tests/qmltests/Dash/Music/tst_MusicPreview.qml+174 tests/qmltests/Dash/qml/FakeScopeView.qml+3−68 tests/qmltests/Dash/tst_Dash.qml+7−1 tests/qmltests/Dash/tst_DashContent.qml+64−3 tests/qmltests/Dash/tst_FilterGrids.qml+1−2 tests/qmltests/Dash/tst_GenericPreview.qml+1 tests/qmltests/Dash/tst_GenericScopeView.qml+220−10 tests/qmltests/Dash/tst_ScopeView.qml−52 tests/qmltests/Greeter/tst_Clock.qml+16 tests/qmltests/Greeter/tst_Lockscreen.qml+81−15 tests/qmltests/Greeter/tst_Phone.qml+23−10 tests/qmltests/Greeter/tst_Tablet.qml+11 tests/qmltests/Launcher/tst_Launcher.qml+47−11 tests/qmltests/Notifications/tst_Notifications.qml+56 tests/qmltests/Panel/Indicators/tst_DefaultIndicatorWidget.qml+97 tests/qmltests/Panel/tst_Panel.qml+13−5 tests/qmltests/tst_Shell.qml+88−22 tests/utils/modules/Unity/Test/UnityTestCase.qml+36
Applications/Application.qmldeleted−54
@@ -1,54 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import "applications.js" as ApplicationsModel
19−import Unity.Application 0.1
20−
21−/* This class is temporary. It is meant to be API compatible with qthybris' Application
22− class.
23− This class can be removed as soon as qthybris' Application is instantiable from QML
24− and its 'desktopFile' property becomes writable.
25− This also requires qthybris to be easily compilable on the desktop.
26−*/
27−QtObject {
28− id: application
29−
30− property string desktopFile
31− property string name
32− property string comment
33− property string icon
34− property string exec
35− property string stage
36− property bool fullscreen
37−
38− onDesktopFileChanged: {
39− var applicationData = ApplicationsModel.__availableApplications[desktopFile];
40− if (applicationData) {
41− application.name = applicationData.name;
42− application.icon = applicationData.icon;
43− application.exec = applicationData.exec;
44− application.stage = applicationData.stage ? applicationData.stage : ApplicationInfo.MainStage;
45− application.fullscreen = applicationData.fullscreen ? applicationData.fullscreen : false;
46− } else {
47− application.name = "";
48− application.icon = "";
49− application.exec = "";
50− application.stage = "";
51− application.fullscreen = false;
52− }
53− }
54−}
Applications/applications.jsdeleted−115
@@ -1,115 +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−// mimic qtubuntu's Application.Stage enum
18−var MainStage = 0;
19−var SideStage = 1;
20−
21−var __availableApplications = {
22− '/usr/share/applications/phone-app.desktop': {
23− 'name': i18n.tr("Phone"),
24− 'icon': 'phone-app',
25− 'exec': '/usr/bin/phone-app',
26− 'stage': SideStage
27− },
28− '/usr/share/applications/camera-app.desktop': {
29− 'name': i18n.tr("Camera"),
30− 'icon': 'camera',
31− 'fullscreen': true,
32− 'exec': '/usr/bin/camera-app --fullscreen'
33− },
34− '/usr/share/applications/gallery-app.desktop': {
35− 'name': i18n.tr("Gallery"),
36− 'icon': 'gallery',
37− 'exec': '/usr/bin/gallery-app'
38− },
39− '/usr/share/applications/facebook-webapp.desktop': {
40− 'name': i18n.tr("Facebook"),
41− 'icon': 'facebook',
42− 'exec': '/usr/bin/webbrowser-app --chromeless http://m.facebook.com',
43− 'stage': SideStage
44− },
45− '/usr/share/applications/webbrowser-app.desktop': {
46− 'name': i18n.tr("Browser"),
47− 'icon': 'browser',
48− 'exec': '/usr/bin/webbrowser-app'
49− },
50− '/usr/share/applications/twitter-webapp.desktop': {
51− 'name': i18n.tr("Twitter"),
52− 'icon': 'twitter',
53− 'exec': '/usr/bin/webbrowser-app --chromeless http://www.twitter.com',
54− 'stage': SideStage
55− },
56− '/usr/share/applications/gmail-webapp.desktop': {
57− 'name': i18n.tr("GMail"),
58− 'icon': 'gmail',
59− 'exec': '/usr/bin/webbrowser-app --chromeless http://m.gmail.com'
60− },
61− '/usr/share/applications/ubuntu-weather-app.desktop': {
62− 'name': i18n.tr("Weather"),
63− 'icon': 'weather',
64− 'exec': '/usr/bin/qmlscene /usr/share/ubuntu-weather-app/ubuntu-weather-app.qml',
65− 'stage': SideStage
66− },
67− '/usr/share/applications/notes-app.desktop': {
68− 'name': i18n.tr("Notepad"),
69− 'icon': 'notepad',
70− 'exec': '/usr/bin/qmlscene /usr/share/notes-app/NotesApp.qml',
71− 'stage': SideStage
72− },
73− '/usr/share/applications/calendar-app.desktop': {
74− 'name': i18n.tr("Calendar"),
75− 'icon': 'calendar',
76− 'exec': '/usr/bin/qmlscene /usr/share/calendar-app/calendar.qml',
77− 'stage': SideStage
78− },
79− '/usr/share/applications/mediaplayer-app.desktop': {
80− 'name': i18n.tr("Media Player"),
81− 'icon': 'mediaplayer-app',
82− 'fullscreen': true,
83− 'exec': '/usr/bin/mediaplayer-app'
84− },
85− '/usr/share/applications/evernote.desktop': {
86− 'name': i18n.tr("Evernote"),
87− 'icon': 'evernote',
88− 'exec': ''
89− },
90− '/usr/share/applications/map.desktop': {
91− 'name': i18n.tr("Map"),
92− 'icon': 'map',
93− 'exec': ''
94− },
95− '/usr/share/applications/pinterest.desktop': {
96− 'name': i18n.tr("Pinterest"),
97− 'icon': 'pinterest',
98− 'exec': ''
99− },
100− '/usr/share/applications/soundcloud.desktop': {
101− 'name': i18n.tr("SoundCloud"),
102− 'icon': 'soundcloud',
103− 'exec': ''
104− },
105− '/usr/share/applications/wikipedia.desktop': {
106− 'name': i18n.tr("Wikipedia"),
107− 'icon': 'wikipedia',
108− 'exec': ''
109− },
110− '/usr/share/applications/youtube.desktop': {
111− 'name': i18n.tr("YouTube"),
112− 'icon': 'youtube',
113− 'exec': ''
114− },
115−}
Bottombar/Bottombar.qml+4−4
@@ -16,10 +16,10 @@
1616
1717import QtQuick 2.0
1818import "../Components"
19−import "../Components/Math.js" as MathLocal
20−import Unity 0.1
19+import Utils 0.1
2120import Unity.Application 0.1
2221import Ubuntu.Gestures 0.1
22+import Ubuntu.Components 0.1
2323
2424Item {
2525 id: bottombar
@@ -82,7 +82,7 @@ Item {
8282
8383 readonly property bool centeredHud: parent.width < units.gu(68) // Nexus 7 has 67 gu width
8484
85− x: centeredHud ? parent.width / 2 - width / 2 : MathLocal.clamp(dragArea.touchStartX - (width / 2), 0, bottombar.width - width)
85+ x: centeredHud ? parent.width / 2 - width / 2 : MathUtils.clamp(dragArea.touchStartX - (width / 2), 0, bottombar.width - width)
8686 y: bottombar.height - bottomEdgeButtonCenterDistance - (height / 2) - bottomMargin
8787 z: 1
8888 visible: opacity != 0
@@ -136,7 +136,7 @@ Item {
136136 readonly property real distanceFromThreshold: (-distance) - distanceThreshold // distance is negative
137137 readonly property real revealDistance: units.gu(2)
138138 readonly property real commitDistance: units.gu(6)
139− readonly property real commitProgress: MathLocal.clamp(distanceFromThreshold / commitDistance, 0, 1)
139+ readonly property real commitProgress: MathUtils.clamp(distanceFromThreshold / commitDistance, 0, 1)
140140
141141 onStatusChanged: {
142142 if (status === DirectionalDragArea.WaitingForTouch) {
CMakeLists.txt+10−2
@@ -58,7 +58,16 @@ find_package(Qt5DBus)
5858include(GNUInstallDirs)
5959
6060set(SHELL_APP_DIR ${CMAKE_INSTALL_DATADIR}/unity8)
61−set(SHELL_PRIVATE_LIBDIR ${CMAKE_INSTALL_LIBDIR}/unity8)
61+
62+execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=plugindir_suffix unity-shell-api OUTPUT_VARIABLE SHELL_INSTALL_QML OUTPUT_STRIP_TRAILING_WHITESPACE)
63+if(SHELL_INSTALL_QML STREQUAL "")
64+ message(FATAL_ERROR "Could not determine plugin installation dir.")
65+endif()
66+
67+execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=plugindir unity-shell-api OUTPUT_VARIABLE SHELL_PLUGINDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
68+if(SHELL_PLUGINDIR STREQUAL "")
69+ message(FATAL_ERROR "Could not determine plugin import dir.")
70+endif()
6271
6372configure_file(paths.h.in ${CMAKE_CURRENT_BINARY_DIR}/paths.h @ONLY)
6473
@@ -142,7 +151,6 @@ add_subdirectory(src)
142151
143152# install subdirectories
144153set(QML_DIRS
145− Applications
146154 Bottombar
147155 Components
148156 Dash
Components/Carousel.qml+31−15
@@ -45,20 +45,25 @@ Item {
4545 property int drawBuffer: width / pathItemCount // an "ok" value - but values used from the listView cause loops
4646 /// The selected item can be shown in a different size controlled by selectedItemScaleFactor
4747 property real selectedItemScaleFactor: 1.1
48+ /// The index of the item that should be highlighted
49+ property alias highlightIndex: listView.highlightIndex
50+ /// exposes the delegate of the currentItem
51+ readonly property alias currentItem: listView.currentItem
52+ /// exposes the distance to the next row (only one row in carousel, so it's the topMargins)
53+ readonly property alias verticalSpacing: listView.verticalMargin
4854
4955 /// Emitted when the user clicked on an item
5056 /// @param index is the index of the clicked item
51− /// @param delegateItem is the clicked component/delegate itself
5257 /// @param itemY is y of the clicked delegate
53− signal clicked(int index, var delegateItem, real itemY)
58+ signal clicked(int index, real itemY)
5459
5560 /// Emitted when the user pressed and held on an item
5661 /// @param index is the index of the held item
57− /// @param delegateItem is the held component/delegate itself
5862 /// @param itemY is y of the held delegate
59− signal pressAndHold(int index, var delegateItem, real itemY)
63+ signal pressAndHold(int index, real itemY)
6064
6165 implicitHeight: listView.tileHeight * selectedItemScaleFactor
66+ opacity: listView.highlightIndex === -1 ? 1 : 0.6
6267
6368 /* Basic idea behind the carousel effect is to move the items of the delegates (compacting /stuffing them).
6469 One drawback is, that more delegates have to be drawn than usually. As some items are moved from the
@@ -71,8 +76,9 @@ Item {
7176 ListView {
7277 id: listView
7378
79+ property int highlightIndex: -1
7480 property real minimumTileWidth: 0
75− property real newContentX: -1
81+ property real newContentX: disabledNewContentX
7682 property real pathItemCount: referenceWidth / referenceTileWidth
7783 property real tileAspectRatio: 1
7884
@@ -100,6 +106,7 @@ Item {
100106 readonly property real kMiddleIndex: (realWidth / 2) / tileWidth - 0.5
101107 readonly property real kXBeginningEnd: 1 / tileWidth + kMiddleIndex / gapToMiddlePhase
102108 readonly property real maximumItemTranslation: (listView.tileWidth * 3) / listView.scaleFactor
109+ readonly property real disabledNewContentX: -carousel.drawBuffer - 1
103110 readonly property real realContentWidth: contentWidth - 2 * carousel.drawBuffer
104111 readonly property real realContentX: contentX + carousel.drawBuffer
105112 readonly property real realPathItemCount: Math.min(realWidth / tileWidth, pathItemCount)
@@ -135,13 +142,14 @@ Item {
135142 height: listView.tileHeight
136143 }
137144
138− boundsBehavior: Flickable.StopAtBounds
145+ boundsBehavior: Flickable.DragOverBounds
139146 cacheBuffer: carousel.cacheBuffer
140147 flickDeceleration: Math.max(1500 * Math.pow(realWidth / referenceWidth, 1.5), 1500) // 1500 is platform default
141148 maximumFlickVelocity: Math.max(2500 * Math.pow(realWidth / referenceWidth, 1.5), 2500) // 2500 is platform default
142149 orientation: ListView.Horizontal
143150
144151 function itemClicked(index, delegateItem) {
152+ listView.currentIndex = index
145153 var x = CarouselJS.getXFromContinuousIndex(index,
146154 realWidth,
147155 realContentWidth,
@@ -150,11 +158,11 @@ Item {
150158 gapToEndPhase,
151159 carousel.drawBuffer)
152160
153− if (Math.abs(x - contentX) < 1) {
161+ if (Math.abs(x - contentX) < 1 && delegateItem !== undefined) {
154162 /* We're clicking the selected item and
155163 we're in the neighbourhood of radius 1 pixel from it.
156164 Let's emit the clicked signal. */
157− carousel.clicked(index, delegateItem, delegateItem.y)
165+ carousel.clicked(index, delegateItem.y)
158166 return
159167 }
160168
@@ -174,11 +182,11 @@ Item {
174182 gapToEndPhase,
175183 carousel.drawBuffer);
176184
177− if (Math.abs(x - contentX) < 1) {
185+ if (Math.abs(x - contentX) < 1 && delegateItem !== undefined) {
178186 /* We're pressAndHold the selected item and
179187 we're in the neighbourhood of radius 1 pixel from it.
180188 Let's emit the pressAndHold signal. */
181− carousel.pressAndHold(index, delegateItem, delegateItem.y);
189+ carousel.pressAndHold(index, delegateItem.y);
182190 return;
183191 }
184192
@@ -189,10 +197,16 @@ Item {
189197 newContentXAnimation.start();
190198 }
191199
200+ onHighlightIndexChanged: {
201+ if (highlightIndex != -1) {
202+ itemClicked(highlightIndex)
203+ }
204+ }
205+
192206 onMovementStarted: {
193207 stepAnimation.stop()
194208 newContentXAnimation.stop()
195− newContentX = -1
209+ newContentX = disabledNewContentX
196210 }
197211 onMovementEnded: {
198212 if (realContentX > 0 && realContentX < realContentWidth - realWidth)
@@ -228,7 +242,7 @@ Item {
228242 easing.type: Easing.InOutQuad
229243 }
230244 ScriptAction {
231− script: listView.newContentX = -1
245+ script: listView.newContentX = listView.disabledNewContentX
232246 }
233247 }
234248
@@ -253,7 +267,7 @@ Item {
253267 readonly property bool explicitScale: (!listView.moving ||
254268 listView.realContentX <= 0 ||
255269 listView.realContentX >= listView.realContentWidth - listView.realWidth) &&
256− listView.newContentX < 0 &&
270+ listView.newContentX === listView.disabledNewContentX &&
257271 index === listView.selectedIndex
258272 readonly property real cachedTiles: listView.realPathItemCount + carousel.drawBuffer / listView.tileWidth
259273 readonly property real distance: listView.continuousIndex - index
@@ -272,6 +286,9 @@ Item {
272286 itemTranslationScale,
273287 listView.maximumItemTranslation)
274288
289+ readonly property real xTransform: listView.viewTranslation + translationX * listView.scaleFactor
290+ readonly property real center: x - listView.contentX + xTransform - drawBuffer + (width/2)
291+
275292 width: listView.tileWidth
276293 height: listView.tileHeight
277294 scale: itemScale * explicitScaleFactor
@@ -279,7 +296,7 @@ Item {
279296 z: cachedTiles - Math.abs(index - listView.selectedIndex)
280297
281298 transform: Translate {
282− x: listView.viewTranslation + translationX * listView.scaleFactor
299+ x: xTransform
283300 }
284301
285302 Behavior on explicitScaleFactor {
@@ -316,7 +333,6 @@ Item {
316333 onPressAndHold: {
317334 listView.itemPressAndHold(index, item)
318335 }
319−
320336 }
321337 }
322338 }
Components/DragHandle.qml+22−24
@@ -17,7 +17,6 @@
1717import QtQuick 2.0
1818import Ubuntu.Components 0.1
1919import Ubuntu.Gestures 0.1
20−import "Math.js" as MathLocal
2120
2221/*
2322 Put a DragHandle inside a Showable to enable the user to drag it from that handle.
@@ -48,9 +47,12 @@ EdgeDragArea {
4847 id: dragArea
4948 objectName: "dragHandle"
5049
51− // Disable gesture detection by default when hinting is used.
52− // It doesn't make sense to have both.
53− distanceThreshold: hintDisplacement > 0 ? 0 : units.gu(1.5)
50+ // Disable most of the gesture recognition parameters by default when hinting is used as
51+ // it conflicts with the hinting idea.
52+ // The only part we keep in this situation is that it must be a single-finger gesture.
53+ distanceThreshold: hintDisplacement > 0 ? 0 : defaultDistanceThreshold
54+ maxSilenceTime: hintDisplacement > 0 ? 60*60*1000 : defaultMaxSilenceTime
55+ maxDeviation: hintDisplacement > 0 ? 999999 : defaultMaxDeviation
5456
5557 property bool stretch: false
5658
@@ -113,8 +115,8 @@ EdgeDragArea {
113115 }
114116 }
115117
116− function limitMovement(step) {
117− var targetValue = MathLocal.clamp(dragParent[targetProp] + step, minValue, maxValue);
118+ function limitMovement(inputStep) {
119+ var targetValue = MathUtils.clamp(dragParent[targetProp] + inputStep, minValue, maxValue);
118120 var step = targetValue - dragParent[targetProp];
119121
120122 if (hintDisplacement == 0) {
@@ -181,29 +183,25 @@ EdgeDragArea {
181183 }
182184 }
183185
184− onDraggingChanged: {
185− if (dragging) {
186− if (hintDisplacement > 0) {
187− hintingAnimation.targetValue = d.startValue;
188− hintingAnimation.start();
189− }
190− } else {
191− hintingAnimation.stop();
192− }
193− }
194−
195186 onStatusChanged: {
196187 if (status === DirectionalDragArea.WaitingForTouch) {
188+ hintingAnimation.stop();
197189 if (d.previousStatus === DirectionalDragArea.Recognized) {
198190 d.onFinishedRecognizedGesture();
191+ } else /* d.previousStatus === DirectionalDragArea.Undecided */ {
192+ // Gesture was rejected.
193+ d.rollbackDrag();
194+ }
195+ } else /* Undecided || Recognized */ {
196+ if (d.previousStatus === DirectionalDragArea.WaitingForTouch ||
197+ d.previousStatus === undefined) {
198+ dragEvaluator.reset();
199+ d.startValue = parent[d.targetProp];
200+ }
201+ if (hintDisplacement > 0) {
202+ hintingAnimation.targetValue = d.startValue;
203+ hintingAnimation.start();
199204 }
200− d.startValue = parent[d.targetProp];
201− }
202−
203− if (d.previousStatus === DirectionalDragArea.WaitingForTouch ||
204− d.previousStatus === undefined) {
205− dragEvaluator.reset();
206− d.startValue = parent[d.targetProp];
207205 }
208206
209207 d.previousStatus = status;
Components/DraggingArea.qml+1−2
@@ -16,7 +16,6 @@
1616
1717import QtQuick 2.0
1818import Ubuntu.Components 0.1
19−import "Math.js" as MathLocal
2019
2120MouseArea {
2221 id: draggingArea
@@ -26,7 +25,7 @@ MouseArea {
2625 property real dragVelocity: 0
2726 property real dragValue: (orientation == Qt.Vertical ? (mouseY - __pressedPosition.y)
2827 : (mouseX - __pressedPosition.x))
29− property real lateralPosition: orientation == Qt.Horizontal ? MathLocal.clamp(mouseY, 0, height) : MathLocal.clamp(mouseX, 0, width)
28+ property real lateralPosition: orientation == Qt.Horizontal ? MathUtils.clamp(mouseY, 0, height) : MathUtils.clamp(mouseX, 0, width)
3029 property point __pressedPosition: Qt.point(0, 0)
3130 property var __dragEvents: []
3231 property bool clickValidated: true
Components/EdgeDemo.qml+1
@@ -31,6 +31,7 @@ Item {
3131 property bool dashEnabled: true
3232 property bool panelEnabled: true
3333 property bool panelContentEnabled: true
34+ property bool running: !launcherEnabled || !dashEnabled || !panelEnabled || !panelContentEnabled
3435
3536 property bool paused: false
3637
Components/EdgeDemoOverlay.qml+2
@@ -105,6 +105,8 @@ Showable {
105105 visible: overlay.active
106106
107107 MouseArea {
108+ objectName: "backgroundShadeMouseArea"
109+
108110 anchors.fill: parent
109111 enabled: overlay.edge == "none" && overlay.opacity == 1.0
110112 onClicked: overlay.doSkip()
Components/EdgeDragArea.qml+12−4
@@ -29,8 +29,16 @@ DirectionalDragArea {
2929 //
3030 // The idea here is that it's better having lax rules than false negatives.
3131 // False negatives are very frustrating to the user.
32− maxDeviation: units.gu(3)
33− wideningAngle: 50
34− distanceThreshold: units.gu(1.5)
35− minSpeed: units.gu(0) // some people were getting false negatives with it enabled.
32+ maxDeviation: defaultMaxDeviation
33+ wideningAngle: defaultWideningAngle
34+ distanceThreshold: defaultDistanceThreshold
35+ minSpeed: defaultMinSpeed
36+ maxSilenceTime: defaultMaxSilenceTime
37+
38+ readonly property real defaultMaxDeviation: units.gu(3)
39+ readonly property real defaultWideningAngle: 50
40+ readonly property real defaultDistanceThreshold: units.gu(1.5)
41+ // some people were getting false negatives with it enabled.
42+ readonly property real defaultMinSpeed: units.gu(0)
43+ readonly property int defaultMaxSilenceTime: 200
3644}
Components/FilterGrid.qml+5−1
@@ -41,11 +41,12 @@ Item {
4141
4242 /* Maximum number of rows to be show when filter=true. */
4343 property int collapsedRowCount: 2
44+ property int uncollapsedRowCount: Math.ceil(model.count / columns)
4445 readonly property int collapsedHeight: {
4546 return iconTileGrid.contentHeightForRows(Math.min(collapsedRowCount, Math.ceil(model.count / columns)))
4647 }
4748 readonly property int uncollapsedHeight: {
48− return iconTileGrid.contentHeightForRows(Math.ceil(model.count / columns))
49+ return iconTileGrid.contentHeightForRows(uncollapsedRowCount)
4950 }
5051
5152 property alias minimumHorizontalSpacing: iconTileGrid.minimumHorizontalSpacing
@@ -54,6 +55,7 @@ Item {
5455 property alias delegateWidth: iconTileGrid.delegateWidth
5556 property alias delegateHeight: iconTileGrid.delegateHeight
5657 property alias verticalSpacing: iconTileGrid.verticalSpacing
58+ readonly property alias margins: iconTileGrid.margins
5759 property alias delegate: iconTileGrid.delegate
5860 property alias cellWidth: iconTileGrid.cellWidth
5961 property alias cellHeight: iconTileGrid.cellHeight
@@ -62,6 +64,8 @@ Item {
6264 readonly property alias flicking: iconTileGrid.flicking
6365 readonly property alias moving: iconTileGrid.moving
6466 readonly property alias pressDelay: iconTileGrid.pressDelay
67+ property alias highlightIndex: iconTileGrid.highlightIndex
68+ readonly property alias currentItem: iconTileGrid.currentItem
6569
6670 height: !filterAnimation.running ? childrenRect.height : height
6771 clip: filterAnimation.running
Components/LazyImage.qml+2−2
@@ -100,10 +100,10 @@ Item {
100100 verticalAlignment: Image.AlignVCenter
101101 sourceSize.width: root.scaleTo == "width" ? root.width
102102 : root.scaleTo == "fit" && root.width < root.height ? root.width
103− : undefined
103+ : 0
104104 sourceSize.height: root.scaleTo == "height" ? root.height
105105 : root.scale == "fit" && root.height < root.width ? root.height
106− : undefined
106+ : 0
107107 }
108108 }
109109
Components/Math.jsdeleted−26
@@ -1,26 +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−.pragma library
18−
19−function clamp(value, min, max) {
20− if (min <= max) {
21− return Math.max(min, Math.min(max, value))
22− } else {
23− // swap min/max if min > max
24− return clamp(value, max, min)
25− }
26−}
Components/PageHeader.qml+29−6
@@ -30,7 +30,7 @@ Item {
3030
3131 property bool searchEntryEnabled: false
3232 property alias searchQuery: searchField.text
33− property ListModel searchHistory: SearchHistoryModel {}
33+ property ListModel searchHistory
3434 property Scope scope
3535
3636 height: units.gu(8.5)
@@ -44,7 +44,11 @@ Item {
4444 if (!searchHistory) return;
4545
4646 searchHistory.addQuery(searchField.text);
47+ unfocus();
4748 searchField.text = "";
49+ }
50+
51+ function unfocus() {
4852 searchField.focus = false;
4953 }
5054
@@ -108,6 +112,8 @@ Item {
108112 objectName: "searchContainer"
109113
110114 visible: searchEntryEnabled
115+ property bool popoverShouldOpen: false
116+ property bool popoverShouldClose: false
111117
112118 property bool narrowMode: parent.width < label.contentWidth + units.gu(50)
113119
@@ -123,6 +129,16 @@ Item {
123129 else if (active && !narrowMode) "active"
124130 else if (!active && !narrowMode) "inactive"
125131
132+ onStateChanged: {
133+ if (state == "active" || state == "narrowActive") {
134+ popoverShouldOpen = true;
135+ popoverShouldClose = false;
136+ } else {
137+ popoverShouldOpen = false;
138+ popoverShouldClose = true;
139+ }
140+ }
141+
126142 function openPopover() {
127143 if (searchHistory.count > 0) {
128144 searchContainer.popover = PopupUtils.open(popoverComponent, searchField,
@@ -133,10 +149,17 @@ Item {
133149 }
134150 )
135151 }
152+ popoverShouldOpen = false;
153+ popoverShouldClose = false;
136154 }
137155
138156 function closePopover() {
139− if (searchContainer.popover) PopupUtils.close(searchContainer.popover)
157+ if (searchContainer.popover) {
158+ PopupUtils.close(searchContainer.popover);
159+ searchContainer.popover = null;
160+ }
161+ popoverShouldOpen = false;
162+ popoverShouldClose = false;
140163 }
141164
142165 onActiveFocusChanged: if (!activeFocus) { searchHistory.addQuery(searchField.text) }
@@ -279,12 +302,12 @@ Item {
279302 PropertyAction { target: primaryImage; property: "source" }
280303 AnchorAnimation { targets: [searchContainer, textContainer]; duration: 200; easing.type: Easing.InOutQuad }
281304 }
282− ScriptAction { script: searchContainer.openPopover() }
305+ ScriptAction { script: if (searchContainer.popoverShouldOpen) { searchContainer.openPopover(); } }
283306 }
284307 },
285308 Transition {
286309 to: "inactive"
287− ScriptAction { script: searchContainer.closePopover() }
310+ ScriptAction { script: if (searchContainer.popoverShouldClose) { searchContainer.closePopover(); } }
288311 NumberAnimation { targets: [searchContainer, searchField] ; property: "width"; duration: 200; easing.type: Easing.InOutQuad }
289312 AnchorAnimation { targets: [searchContainer, textContainer]; duration: 200; easing.type: Easing.InOutQuad }
290313 },
@@ -295,12 +318,12 @@ Item {
295318 NumberAnimation { targets: [searchContainer, searchField] ; property: "width"; duration: 200; easing.type: Easing.OutQuad }
296319 AnchorAnimation { targets: [searchContainer, textContainer]; duration: 200; easing.type: Easing.InOutQuad }
297320 }
298− ScriptAction { script: searchContainer.openPopover() }
321+ ScriptAction { script: if (searchContainer.popoverShouldOpen) { searchContainer.openPopover(); } }
299322 }
300323 },
301324 Transition {
302325 to: "narrowInactive"
303− ScriptAction { script: searchContainer.closePopover() }
326+ ScriptAction { script: if (searchContainer.popoverShouldClose) { searchContainer.closePopover(); } }
304327 NumberAnimation { targets: [searchContainer, searchField] ; property: "width"; duration: 200; easing.type: Easing.OutQuad }
305328 AnchorAnimation { targets: [searchContainer, textContainer]; duration: 200; easing.type: Easing.InOutQuad }
306329 }
Components/PinPadButton.qml+40−13
@@ -21,24 +21,51 @@ Item {
2121 id: root
2222
2323 property alias text: label.text
24− property alias iconName: icon.name
24+ property alias subText: subTextLabel.text
25+ property string iconName
2526
2627 signal clicked()
2728
28− Label {
29− id: label
29+ Column {
3030 anchors.centerIn: parent
31− color: "#f3f3e7"
32− fontSize: "large"
33− font.weight: Font.DemiBold
34− }
31+ width: parent.width
32+ height: childrenRect.height
3533
36− Icon {
37− id: icon
38− height: units.gu(3)
39− width: height
40− anchors.centerIn: parent
41− color: "#f3f3e7"
34+ Item {
35+ anchors {
36+ left: parent.left
37+ right: parent.right
38+ }
39+ height: label.visible || icon.visible ? Math.max(label.height, icon.height) : 0
40+
41+ Label {
42+ id: label
43+ anchors.centerIn: parent
44+ width: parent.width
45+ horizontalAlignment: Text.AlignHCenter
46+ color: "#f3f3e7"
47+ fontSize: "large"
48+ font.weight: Font.DemiBold
49+ visible: text.length > 0
50+ }
51+
52+ Icon {
53+ id: icon
54+ height: units.gu(3)
55+ width: height
56+ anchors.centerIn: parent
57+ name: root.iconName
58+ color: "#f3f3e7"
59+ visible: name.length > 0
60+ }
61+ }
62+ Label {
63+ id: subTextLabel
64+ fontSize: "small"
65+ color: "grey"
66+ anchors.horizontalCenter: parent.horizontalCenter
67+ visible: text.length > 0
68+ }
4269 }
4370
4471 MouseArea {
Components/ResponsiveGridView.qml+10
@@ -26,6 +26,7 @@ Item {
2626 property int maximumNumberOfColumns: 6
2727 readonly property int columns: gridView.columns
2828 property alias verticalSpacing: gridView.verticalSpacing
29+ readonly property alias margins: gridView.margin
2930 property int delegateWidth
3031 property int delegateHeight
3132 property alias model: gridView.model
@@ -41,6 +42,8 @@ Item {
4142 readonly property alias pressDelay: gridView.pressDelay
4243 property alias delegateCreationBegin: gridView.delegateCreationBegin
4344 property alias delegateCreationEnd: gridView.delegateCreationEnd
45+ property alias highlightIndex: gridView.highlightIndex
46+ readonly property alias currentItem: gridView.currentItem
4447
4548 function contentHeightForRows(rows) {
4649 return rows * cellHeight + verticalSpacing
@@ -77,8 +80,15 @@ Item {
7780 property real horizontalSpacing: spacingForColumns(columns)
7881 property real verticalSpacing: horizontalSpacing
7982 property int margin: allocatableHorizontalSpace - columns * horizontalSpacing
83+ property int highlightIndex: -1
8084
8185 cellWidth: delegateWidth + horizontalSpacing
8286 cellHeight: delegateHeight + verticalSpacing
87+
88+ onHighlightIndexChanged: {
89+ if (highlightIndex != -1) {
90+ currentIndex = highlightIndex
91+ }
92+ }
8393 }
8494}
Components/Revealer.qml+1−2
@@ -16,7 +16,6 @@
1616
1717import QtQuick 2.0
1818import Ubuntu.Components 0.1
19−import "Math.js" as MathLocal
2019
2120Item {
2221 id: revealer
@@ -95,7 +94,7 @@ Item {
9594 onClosedValueChanged: if (!__opened && !dragging) target[boundProperty] = closedValue
9695
9796 function __computeValue(dragPosition) {
98− return MathLocal.clamp(dragToValue(dragPosition), __hintValue, openedValue)
97+ return MathUtils.clamp(dragToValue(dragPosition), __hintValue, openedValue)
9998 }
10099
101100 function __open() {
Components/Stage.qml+8−7
@@ -482,19 +482,20 @@ Showable {
482482 switchToApplicationAnimationController.progress += 0.4 * delta
483483 }
484484
485− property bool gotRejected: false
485+ property int lastStatus: -1
486486
487487 onStatusChanged: {
488488 if (status == DirectionalDragArea.Undecided) {
489− gotRejected = false
490489 onUndecided();
491− } else if (status == DirectionalDragArea.Rejected) {
492− switchToApplicationAnimationController.completeToBeginningWithSignal();
493− gotRejected = true;
494490 } else if (status == DirectionalDragArea.WaitingForTouch) {
495− if (!gotRejected)
496− onGestureEnded()
491+ if (lastStatus == DirectionalDragArea.Undecided) {
492+ // got rejected
493+ switchToApplicationAnimationController.completeToBeginningWithSignal();
494+ } else {
495+ onGestureEnded();
496+ }
497497 }
498+ lastStatus = status;
498499 }
499500
500501 function onUndecided() {
Components/Tile.qml+9
@@ -26,5 +26,14 @@ AbstractButton {
2626 property int imageHeight
2727 property int maximumLineCount: 1
2828
29+ readonly property int center: (index % GridView.view.columns * width) + (width / 2)
30+
31+ opacity: GridView.view.highlightIndex === -1 ? 1 :
32+ GridView.view.highlightIndex === index ? 0.6 : 0.2
33+
34+ Behavior on opacity {
35+ UbuntuNumberAnimation {}
36+ }
37+
2938 style: TileStyle {}
3039}
Components/Time.jsdeleted−49
@@ -1,49 +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−.pragma library
18−
19−var factors = {
20− "second": [ 1000, "a second ago", "in a second", "%1 seconds ago", "in %1 seconds" ],
21− "minute": [ 60, "a minute ago", "in a minute", "%1 minutes ago", "in %1 minutes" ],
22− "hour": [ 60, "an hour ago", "in an hour", "%1 hours ago", "in %1 hours" ],
23− "day": [ 24, "yesterday", "tomorrow", "%1 days ago", "in %1 days" ],
24− "week": [ 7, "a week ago", "in a week", "about %1 weeks ago", "in about %1 weeks" ],
25− "month": [ 4.35, "a month ago", "in a month", "%1 months ago", "in %1 months" ], // == 365.25 days / 12 months / 7 days
26− "year": [ 12, "a year ago", "in a year", "%1 years ago", "in %1 years" ]
27−}
28−
29−function readableFromNow(date, now) {
30− var then = new Date(date);
31− if (isNaN(then)) return "";
32− if (now === undefined) {
33− now = new Date();
34− } else if (isNaN(now)) throw "now is NaN";
35− var diff = Math.abs(now - then);
36− if (diff < 1000) return "just now";
37−
38− var future = now < then;
39− var humanDiff;
40− for (var k in factors) {
41− diff /= factors[k][0];
42− if (Math.floor(diff) == 1) {
43− humanDiff = factors[k][future ? 2 : 1];
44− } else if (Math.floor(diff) > 1) {
45− humanDiff = factors[k][future ? 4 : 3].arg(Math.round(diff));
46− } else break;
47− }
48− return humanDiff;
49−}
Components/UbuntuShapeForItem.qml+1
@@ -31,6 +31,7 @@ Item {
3131
3232 ShaderEffectSource {
3333 id: source
34+ anchors.centerIn: parent // Placed under shape, so it's hidden
3435 width: 1
3536 height: 1
3637 hideSource: true
Dash/Apps/AppInfo.qmldeleted−89
@@ -1,89 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import Ubuntu.Components 0.1
19−import "../../Components"
20−
21−Row {
22− id: root
23− property alias icon: image.source
24− property alias appName: appNameLabel.text
25− property alias rating: ratingStars.rating
26− property int rated: 0
27− property int reviews: 0
28−
29− spacing: units.gu(2)
30−
31− UbuntuShape {
32− id: imageShape
33− width: units.gu(6)
34− height: units.gu(6)
35− image: Image {
36− id: image
37− sourceSize { width: imageShape.width; height: imageShape.height }
38− asynchronous: true
39− fillMode: Image.PreserveAspectFit
40− }
41− }
42−
43− Column {
44− spacing: units.gu(1)
45−
46− Label {
47− id: appNameLabel
48− fontSize: "large"
49− color: "white"
50− style: Text.Raised
51− styleColor: "black"
52− opacity: .9
53− }
54−
55− Row {
56− visible: root.rating >= 0
57− spacing: units.gu(1)
58−
59− RatingStars {
60− id: ratingStars
61− maximumRating: 10
62− }
63−
64− Label {
65− id: ratedLabel
66− objectName: "ratedLabel"
67− fontSize: "medium"
68− color: "white"
69− style: Text.Raised
70− styleColor: "black"
71− opacity: .6
72− //TRANSLATORS: Number of persons who rated this app
73− text: i18n.tr("(%1)").arg(root.rated)
74− }
75−
76− Label {
77− id: reviewsLabel
78− objectName: "reviewsLabel"
79− fontSize: "medium"
80− color: "white"
81− style: Text.Raised
82− styleColor: "black"
83− opacity: .6
84− //TRANSLATORS: Number of persons who wrote reviews for this app
85− text: i18n.tr("%1 review", "%1 reviews", root.reviews).arg(root.reviews)
86− }
87− }
88− }
89−}
Dash/Apps/AppPreview.qml+9
@@ -44,6 +44,15 @@ GenericPreview {
4444 model: previewData.infoMap["more-screenshots"] != null ? previewData.infoMap["more-screenshots"].value : [previewData.image]
4545 cacheBuffer: width * 3
4646
47+ // FIXME: Because of ListViews inside ListViews inside Flickables inside ListViews (and some more)
48+ // we finally reached the point where this ListView doesn't correctly get swipe input any more but
49+ // instead the parent ListView is the one that is swiped. This MouseArea sort of creates a blocking
50+ // layer to make sure this ListView can be swiped, regardless of what's behind it.
51+ MouseArea {
52+ anchors.fill: parent
53+ enabled: parent.contentWidth > parent.width
54+ }
55+
4756 LazyImage {
4857 objectName: "placeholderScreenshot"
4958 anchors {
Dash/Apps/ApplicationsFilterGrid.qmldeleted−55
@@ -1,55 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import "../../Components"
19−import "../../Applications"
20−
21−FilterGrid {
22− id: filterGrid
23−
24− filter: false
25− minimumHorizontalSpacing: units.gu(0.5)
26− maximumNumberOfColumns: 6
27− delegateWidth: units.gu(11)
28− delegateHeight: units.gu(9.5)
29− verticalSpacing: units.gu(2)
30−
31− signal clicked(int index, variant data)
32−
33− delegate: Tile {
34− objectName: "delegate" + index
35− Application {
36− id: application
37− desktopFile: model.dndUri ? stripProtocol(model.dndUri) : model.desktopFile // FIXME: this is temporary
38−
39− function stripProtocol(uri) {
40− var chunks = uri.split('file://')
41− return chunks[chunks.length-1]
42− }
43− }
44−
45− property string icon: model.icon ? model.icon : "../../graphics/applicationIcons/" + application.icon + ".png" // FIXME: this is temporary
46−
47− width: filterGrid.cellWidth
48− height: filterGrid.cellHeight
49− text: model.title ? model.title : application.name // FIXME: this is temporary
50− imageWidth: units.gu(8)
51− imageHeight: units.gu(7.5)
52− source: icon
53− onClicked: filterGrid.clicked(index, application.desktopFile);
54− }
55−}
Dash/Apps/DashPluginFilterGrid.qml+2−4
@@ -37,13 +37,11 @@ GenericFilterGrid {
3737 }
3838
3939 onClicked: {
40− var data = { model: model }
41− filtergrid.clicked(index, data, tile.y)
40+ filtergrid.clicked(index, tile.y)
4241 }
4342
4443 onPressAndHold: {
45− var data = { model: model }
46− filtergrid.pressAndHold(index, data, tile.y)
44+ filtergrid.pressAndHold(index, tile.y)
4745 }
4846 }
4947}
Dash/Apps/FrequentlyUsedAppsModel.qml+16−16
@@ -18,54 +18,54 @@ import QtQuick 2.0
1818
1919ListModel {
2020 ListElement {
21− uri: "application:///usr/share/applications/dialer-app.desktop"
21+ uri: "application://dialer-app.desktop"
2222 icon: "../../graphics/applicationIcons/phone-app.png"
2323 category: 0
2424 mimetype: "application/x-desktop"
2525 title: "Dialer"
2626 comment: ""
2727 dndUri: "file:///usr/share/applications/dialer-app.desktop"
28− metadata: ""
28+ metadata: "subscope:applications.scope/applications-non-click.scope"
2929 }
3030 ListElement {
31− uri: "application:///usr/share/applications/messaging-app.desktop"
31+ uri: "application://messaging-app.desktop"
3232 icon: "../../graphics/applicationIcons/messages-app.png"
3333 category: 0
3434 mimetype: "application/x-desktop"
3535 title: "Messaging"
3636 comment: ""
3737 dndUri: "file:///usr/share/applications/messaging-app.desktop"
38− metadata: ""
38+ metadata: "subscope:applications.scope/applications-non-click.scope"
3939 }
4040 ListElement {
41− uri: "application:///usr/share/applications/address-book-app.desktop"
41+ uri: "application://address-book-app.desktop"
4242 icon: "../../graphics/applicationIcons/contacts-app.png"
4343 category: 0
4444 mimetype: "application/x-desktop"
4545 title: "Contacts"
4646 comment: ""
4747 dndUri: "file:///usr/share/applications/address-book-app.desktop"
48− metadata: ""
48+ metadata: "subscope:applications.scope/applications-non-click.scope"
4949 }
5050 ListElement {
51− uri: "application:///usr/share/applications/camera-app.desktop"
51+ uri: "application://camera-app.desktop"
5252 icon: "../../graphics/applicationIcons/camera.png"
5353 category: 0
5454 mimetype: "application/x-desktop"
5555 title: "Camera"
5656 comment: ""
5757 dndUri: "file:///usr/share/applications/camera-app.desktop"
58− metadata: ""
58+ metadata: "subscope:applications.scope/applications-non-click.scope"
5959 }
6060 ListElement {
61− uri: "application:///usr/share/applications/gallery-app.desktop"
61+ uri: "application://gallery-app.desktop"
6262 icon: "../../graphics/applicationIcons/gallery.png"
6363 category: 0
6464 mimetype: "application/x-desktop"
6565 title: "Gallery"
6666 comment: ""
6767 dndUri: "file:///usr/share/applications/gallery.desktop"
68− metadata: ""
68+ metadata: "subscope:applications.scope/applications-non-click.scope"
6969 }
7070 ListElement {
7171 uri: "appid://com.ubuntu.developer.webapps.webapp-facebook/webapp-facebook/current-user-version"
@@ -75,17 +75,17 @@ ListModel {
7575 title: "Facebook"
7676 comment: ""
7777 dndUri: "appid://com.ubuntu.developer.webapps.webapp-facebook/webapp-facebook/current-user-version"
78− metadata: ""
78+ metadata: "subscope:applications.scope/applications-click.scope?app_id=com.ubuntu.developer.webapps.webapp-facebook"
7979 }
8080 ListElement {
81− uri: "application:///usr/share/applications/webbrowser-app.desktop"
81+ uri: "application://webbrowser-app.desktop"
8282 icon: "../../graphics/applicationIcons/browser.png"
8383 category: 0
8484 mimetype: "application/x-desktop"
8585 title: "Browser"
8686 comment: ""
8787 dndUri: "file:///usr/share/applications/webbrowser-app.desktop"
88− metadata: ""
88+ metadata: "subscope:applications.scope/applications-non-click.scope"
8989 }
9090 ListElement {
9191 uri: "appid://com.ubuntu.developer.webapps.webapp-gmail/webapp-gmail/current-user-version"
@@ -95,16 +95,16 @@ ListModel {
9595 title: "GMail"
9696 comment: ""
9797 dndUri: "appid://com.ubuntu.developer.webapps.webapp-gmail/webapp-gmail/current-user-version"
98− metadata: ""
98+ metadata: "subscope:applications.scope/applications-click.scope?app_id=com.ubuntu.developer.webapps.webapp-gmail"
9999 }
100100 ListElement {
101− uri: "application:///usr/share/applications/ubuntu-system-settings.desktop"
101+ uri: "application://ubuntu-system-settings.desktop"
102102 icon: "../../graphics/applicationIcons/system-settings.png"
103103 category: 0
104104 mimetype: "application/x-desktop"
105105 title: "System Settings"
106106 comment: ""
107107 dndUri: "file:///usr/share/applications/ubuntu-system-settings.desktop"
108− metadata: ""
108+ metadata: "subscope:applications.scope/applications-non-click.scope"
109109 }
110110}
Dash/Apps/RunningApplicationTile.qml−2
@@ -105,8 +105,6 @@ AbstractButton {
105105 baseline: parent.bottom
106106 left: parent.left
107107 right: parent.right
108− leftMargin: units.gu(1)
109− rightMargin: units.gu(1)
110108 }
111109 text: (application) ? application.name : ""
112110
Dash/Apps/RunningApplicationsGrid.qml+17
@@ -17,6 +17,8 @@
1717import QtQuick 2.0
1818import "../../Components"
1919
20+import Ubuntu.Gestures 0.1
21+
2022ResponsiveFlowView {
2123 id: root
2224 clip: true
@@ -100,4 +102,19 @@ ResponsiveFlowView {
100102 move: Transition {
101103 NumberAnimation { properties: "x,y"; duration: 400; easing.type: Easing.OutCubic }
102104 }
105+
106+ MouseArea {
107+ anchors.fill: parent
108+ z: -1 // behind all RunningApplicationTiles
109+ enabled: root.terminationModeEnabled
110+ onPressed: { root.terminationModeEnabled = false; }
111+ }
112+
113+ PressedOutsideNotifier {
114+ anchors.fill: parent
115+ enabled: root.terminationModeEnabled
116+ onPressedOutside: {
117+ root.terminationModeEnabled = false;
118+ }
119+ }
103120}
Dash/Dash.qml+3
@@ -26,6 +26,8 @@ Showable {
2626
2727 visible: shown
2828
29+ property ListModel searchHistory: SearchHistoryModel {}
30+
2931 property alias contentProgress: dashContent.contentProgress
3032 property string showScopeOnLoaded: "home.scope"
3133 property real contentScale: 1.0
@@ -63,6 +65,7 @@ Showable {
6365 anchors.fill: parent
6466 model: filteredScopes
6567 scopes: scopes
68+ searchHistory: dash.searchHistory
6669 onMovementStarted: dashbar.startNavigation()
6770 onMovementEnded: dashbar.stopNavigation()
6871 onContentFlickStarted: dashbar.finishNavigation()
Dash/DashApps.qml+3−1
@@ -19,7 +19,6 @@ import Ubuntu.Components 0.1
1919import Utils 0.1
2020import "../Components"
2121import "../Components/ListItems"
22−import "../Applications"
2322import "Apps"
2423
2524GenericScopeView {
@@ -30,6 +29,9 @@ GenericScopeView {
3029 property var mainStageApplicationsModel: shell.applicationManager.mainStageApplications
3130 property var sideStageApplicationModel: shell.applicationManager.sideStageApplications
3231
32+ //FIXME an alias to itself shouldn't be required. More than likely a Qt bug. Try removing with newer Qt.
33+ property alias searchHistory: scopeView.searchHistory
34+
3335 ListModel {
3436 id: dummyVisibilityModifier
3537
Dash/DashBar.qml+2−2
@@ -35,7 +35,7 @@ Item {
3535
3636 function startNavigation() {
3737 timeout.stop()
38− panel.opened = true
38+ panel.open()
3939 }
4040
4141 function stopNavigation() {
@@ -43,7 +43,7 @@ Item {
4343 }
4444
4545 function finishNavigation() {
46− panel.opened = false
46+ panel.close()
4747 }
4848
4949 Timer {
Dash/DashCarousel.qmlnew file+47
@@ -0,0 +1,47 @@
1+/*
2+ * Copyright (C) 2013 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+import Ubuntu.Components 0.1
19+import "../Components"
20+
21+DashRenderer {
22+ id: dashCarousel
23+
24+ property alias cacheBuffer: carousel.cacheBuffer
25+ property alias itemComponent: carousel.itemComponent
26+ property alias minimumTileWidth: carousel.minimumTileWidth
27+ property alias selectedItemScaleFactor: carousel.selectedItemScaleFactor
28+ property alias tileAspectRatio: carousel.tileAspectRatio
29+
30+ currentItem: carousel.currentItem
31+ height: carousel.implicitHeight + units.gu(6)
32+ verticalSpacing: units.gu(3)
33+
34+ Carousel {
35+ id: carousel
36+ anchors.fill: parent
37+ tileAspectRatio: 198 / 288
38+ minimumTileWidth: units.gu(13)
39+ selectedItemScaleFactor: 1.14
40+ cacheBuffer: 1404 // 18px * 13gu * 6
41+ model: dashCarousel.model
42+ highlightIndex: dashCarousel.highlightIndex
43+
44+ onClicked: dashCarousel.clicked(index, itemY)
45+ onPressAndHold: dashCarousel.pressAndHold(index, itemY)
46+ }
47+}
Dash/DashContent.qml+12−5
@@ -27,6 +27,7 @@ Item {
2727 property alias currentIndex: dashContentList.currentIndex
2828
2929 property ScopeDelegateMapper scopeMapper : ScopeDelegateMapper {}
30+ property ListModel searchHistory
3031
3132 signal movementStarted()
3233 signal movementEnded()
@@ -104,8 +105,14 @@ Item {
104105
105106 // If the number of items is less than the current index, then need to reset to another item.
106107 onCountChanged: {
107− if (currentIndex >= count)
108− dashContent.setCurrentScopeAtIndex(count-1, true, true)
108+ if (count > 0) {
109+ if (currentIndex >= count) {
110+ dashContent.setCurrentScopeAtIndex(count-1, true, true)
111+ } else if (currentIndex < 0) {
112+ // setting currentIndex directly, cause we don't want to loose set_current_index
113+ dashContent.currentIndex = 0
114+ }
115+ }
109116 }
110117
111118 delegate:
@@ -116,8 +123,8 @@ Item {
116123 source: scopeMapper.map(scope.id)
117124 objectName: scope.id + " loader"
118125
119− readonly property bool previewShown: item.previewShown
120− readonly property bool moving: item.moving
126+ readonly property bool previewShown: item ? item.previewShown : false
127+ readonly property bool moving: item ? item.moving : false
121128
122129 // these are needed for autopilot tests
123130 readonly property string scopeId: scope.id
@@ -127,7 +134,7 @@ Item {
127134 onLoaded: {
128135 item.scope = Qt.binding(function() { return scope })
129136 item.isCurrent = Qt.binding(function() { return visible && ListView.isCurrentItem })
130− item.searchHistory = Qt.binding(function() { return shell.searchHistory })
137+ item.searchHistory = Qt.binding(function() { return dashContent.searchHistory })
131138 dashContentList.movementStarted.connect(item.movementStarted)
132139 dashContent.positionedAtBeginning.connect(item.positionedAtBeginning)
133140 dashContent.scopeLoaded(item.scope.id)
Dash/DashFilterGrid.qmlnew file+64
@@ -0,0 +1,64 @@
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 "../Components"
19+import ".."
20+
21+DashRenderer {
22+ id: dashFilterGrid
23+
24+ property alias cellWidth: filterGrid.cellWidth
25+ property alias cellHeight: filterGrid.cellHeight
26+ property alias delegate: filterGrid.delegate
27+ property alias delegateWidth: filterGrid.delegateWidth
28+ property alias delegateHeight: filterGrid.delegateHeight
29+ property alias maximumNumberOfColumns: filterGrid.maximumNumberOfColumns
30+ property alias minimumHorizontalSpacing: filterGrid.minimumHorizontalSpacing
31+
32+ collapsedHeight: filterGrid.collapsedHeight
33+ collapsedRowCount: filterGrid.collapsedRowCount
34+ columns: filterGrid.columns
35+ rows: filter ? filterGrid.collapsedRowCount : filterGrid.uncollapsedRowCount
36+ currentItem: filterGrid.currentItem
37+ expandable: filterGrid.expandable
38+ delegateCreationBegin: filterGrid.delegateCreationBegin
39+ delegateCreationEnd: filterGrid.delegateCreationEnd
40+ height: filterGrid.height
41+ margins: filterGrid.margins
42+ uncollapsedHeight: filterGrid.uncollapsedHeight
43+ verticalSpacing: filterGrid.verticalSpacing
44+
45+ function startFilterAnimation(filter) {
46+ filterGrid.startFilterAnimation(filter)
47+ }
48+
49+ FilterGrid {
50+ id: filterGrid
51+ width: dashFilterGrid.width
52+ minimumHorizontalSpacing: units.gu(0.5)
53+ delegateWidth: units.gu(11)
54+ delegateHeight: units.gu(9.5)
55+ verticalSpacing: units.gu(2)
56+ model: dashFilterGrid.model
57+ filter: dashFilterGrid.filter
58+ highlightIndex: dashFilterGrid.highlightIndex
59+
60+ onFilterChanged: {
61+ dashFilterGrid.filter = filter
62+ }
63+ }
64+}
Dash/DashPreview.qml+10−3
@@ -17,13 +17,15 @@
1717import QtQuick 2.0
1818import Ubuntu.Components 0.1
1919
20−Rectangle {
20+Item {
2121 id: root
2222
2323 property int keyboardSize: Qt.inputMethod.visible ? Qt.inputMethod.keyboardRectangle.height : 0
2424 property var previewData
25+ property alias showProcessingAction: waitingForActionMouseArea.enabled
2526
2627 property real previewWidthRatio: 0.5
28+ property bool isCurrent: false
2729
2830 property Component previewImages
2931 property Component header
@@ -35,7 +37,6 @@ Rectangle {
3537 readonly property int columnWidth: narrowMode ? contentRow.width : (contentRow.width / 3) - contentRow.spacing
3638 readonly property int contentSpacing: units.gu(3)
3739
38− color: Qt.rgba(0, 0, 0, .3)
3940 clip: true
4041
4142 function ensureVisible(item) {
@@ -60,7 +61,6 @@ Rectangle {
6061 anchors.fill: parent
6162 }
6263
63−
6464 Row {
6565 id: contentRow
6666 anchors {
@@ -196,4 +196,11 @@ Rectangle {
196196 }
197197 sourceComponent: root.header
198198 }
199+
200+ MouseArea {
201+ id: waitingForActionMouseArea
202+ objectName: "waitingForActionMouseArea"
203+ anchors.fill: parent
204+ enabled: false
205+ }
199206}
tests/mocks/QMenuModel/UnityMenuModel.qml → Dash/DashPreviewPlaceholder.qmlrenamed+6−7
@@ -1,9 +1,6 @@
11/*
22 * Copyright (C) 2013 Canonical, Ltd.
33 *
4− * Authors:
5− * Mirco Müller <mirco.mueller@canonical.com>
6− *
74 * This program is free software; you can redistribute it and/or modify
85 * it under the terms of the GNU General Public License as published by
96 * the Free Software Foundation; version 3.
@@ -18,9 +15,11 @@
1815 */
1916
2017import QtQuick 2.0
18+import Ubuntu.Components 0.1
2119
22−QtObject {
23− property variant busName
24− property variant actions
25− property variant menuObjectPath
20+DashPreview {
21+ ActivityIndicator {
22+ anchors.centerIn: parent
23+ running: true
24+ }
2625}
Dash/DashRenderer.qmlnew file+65
@@ -0,0 +1,65 @@
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+ // Can the item be expanded?
21+ property bool expandable: false
22+
23+ // In case it can be expanded, should we filter it
24+ property bool filter: true
25+
26+ property int collapsedRowCount: 1
27+
28+ property int collapsedHeight: height
29+
30+ property int columns: 1
31+
32+ property int rows: 1
33+
34+ // Index of the highlighted item
35+ property int highlightIndex: -1
36+
37+ property int margins: 0
38+
39+ property int uncollapsedHeight: height
40+
41+ property real delegateCreationBegin
42+
43+ property real delegateCreationEnd
44+
45+ property real verticalSpacing: 0
46+
47+ // The current item of the renderer
48+ property var currentItem
49+
50+ // The model to renderer
51+ property var model
52+
53+ /// Emitted when the user clicked on an item
54+ /// @param index is the index of the clicked item
55+ /// @param itemY is y of the clicked delegate
56+ signal clicked(int index, real itemY)
57+
58+ /// Emitted when the user pressed and held on an item
59+ /// @param index is the index of the held item
60+ /// @param itemY is y of the held delegate
61+ signal pressAndHold(int index, real itemY)
62+
63+ function startFilterAnimation(filter) {
64+ }
65+}
Dash/Generic/GenericCarousel.qml+3−7
@@ -17,22 +17,18 @@
1717import QtQuick 2.0
1818import Ubuntu.Components 0.1
1919import "../../Components"
20+import ".."
2021
21−Carousel {
22+DashCarousel {
2223 id: genericCarousel
23−
24− tileAspectRatio: 198 / 288
25− minimumTileWidth: units.gu(13)
2624 itemComponent: carouselDelegateGeneric
27− selectedItemScaleFactor: 1.14
28− cacheBuffer: 1404 // 18px * 13gu * 6
29− height: implicitHeight + units.gu(6)
3025
3126 Component {
3227 id: carouselDelegateGeneric
3328
3429 BaseCarouselDelegate {
3530 id: item
31+ objectName: "carouselDelegate"
3632
3733 UbuntuShape {
3834 anchors.fill: parent
Dash/Generic/GenericFilterGrid.qml+13−21
@@ -15,40 +15,32 @@
1515 */
1616
1717import QtQuick 2.0
18+import Ubuntu.Components 0.1
1819import "../../Components"
20+import ".."
1921
20−FilterGrid {
21− id: filtergrid
22+DashFilterGrid {
23+ id: genericFilterGrid
24+
25+ property int iconWidth: units.gu(8)
26+ property int iconHeight: units.gu(7.5)
2227
2328 minimumHorizontalSpacing: units.gu(0.5)
2429 delegateWidth: units.gu(11)
2530 delegateHeight: units.gu(9.5)
2631 verticalSpacing: units.gu(2)
2732
28− property int iconWidth: units.gu(8)
29− property int iconHeight: units.gu(7.5)
30−
31− signal clicked(int index, var delegateItem, real itemY)
32− signal pressAndHold(int index, var delegateItem, real itemY)
33−
3433 delegate: Tile {
3534 id: tile
3635 objectName: "delegate" + index
37− width: filtergrid.cellWidth
38− height: filtergrid.cellHeight
36+ width: genericFilterGrid.cellWidth
37+ height: genericFilterGrid.cellHeight
3938 text: model.title
40− imageWidth: filtergrid.iconWidth
41− imageHeight: filtergrid.iconHeight
39+ imageWidth: genericFilterGrid.iconWidth
40+ imageHeight: genericFilterGrid.iconHeight
4241 source: model.icon
4342
44− onClicked: {
45− var data = { model: model }
46− filtergrid.clicked(index, data, tile.y)
47− }
48−
49− onPressAndHold: {
50− var data = { model: model }
51− filtergrid.pressAndHold(index, data, tile.y)
52− }
43+ onClicked: genericFilterGrid.clicked(index, tile.y)
44+ onPressAndHold: genericFilterGrid.pressAndHold(index, tile.y)
5345 }
5446}
Dash/Generic/GenericFilterGridPotrait.qml+1−3
@@ -15,16 +15,14 @@
1515 */
1616
1717import QtQuick 2.0
18+import Ubuntu.Components 0.1
1819import "../../Components"
1920
2021GenericFilterGrid {
21− id: filtergrid
22−
2322 minimumHorizontalSpacing: units.gu(0.5)
2423 delegateWidth: units.gu(11)
2524 delegateHeight: units.gu(18)
2625 verticalSpacing: units.gu(2)
27−
2826 iconWidth: (width / columns) * 0.8
2927 iconHeight: iconWidth * 16 / 11
3028}
Dash/Generic/GenericPreview.qml+4−1
@@ -71,7 +71,10 @@ DashPreview {
7171 text: modelData.displayName
7272 iconSource: modelData.iconHint
7373 iconPosition: "right"
74− onClicked: previewData.execute(modelData.id, { })
74+ onClicked: {
75+ previewData.execute(modelData.id, { })
76+ genericPreview.showProcessingAction = true;
77+ }
7578 }
7679 }
7780 }
Dash/Generic/WeatherFilterGrid.qml+2−4
@@ -37,13 +37,11 @@ GenericFilterGrid {
3737 style: FlatTileStyle {}
3838
3939 onClicked: {
40− var data = { model: model }
41− filtergrid.clicked(index, data, tile.y)
40+ filtergrid.clicked(index, tile.y)
4241 }
4342
4443 onPressAndHold: {
45− var data = { model: model }
46− filtergrid.pressAndHold(index, data, tile.y)
44+ filtergrid.pressAndHold(index, tile.y)
4745 }
4846 }
4947}
Dash/GenericScopeView.qml+302−69
@@ -16,19 +16,64 @@
1616
1717import QtQuick 2.0
1818import Ubuntu.Components 0.1
19+import Utils 0.1
20+import Unity 0.1
1921import "../Components"
2022import "../Components/ListItems" as ListItems
2123
22−ScopeView {
24+FocusScope {
2325 id: scopeView
24− readonly property alias previewShown: previewLoader.onScreen
26+
27+ property Scope scope
28+ property SortFilterProxyModel categories: categoryFilter
29+ property bool isCurrent
30+ property ListModel searchHistory
31+ property alias moving: categoryView.moving
32+
33+ signal endReached
34+ signal movementStarted
35+ signal positionedAtBeginning
36+
37+ readonly property alias previewShown: previewListView.onScreen
2538 property bool enableHeightBehaviorOnNextCreation: false
2639
27− moving: categoryView.moving
40+ // FIXME delay the search so that daemons have time to settle, note that
41+ // removing this will break ScopeView::test_changeScope
42+ onScopeChanged: {
43+ if (scope) {
44+ timer.restart();
45+ scope.activateApplication.connect(activateApp);
46+ }
47+ }
48+
49+ function activateApp(appId) {
50+ shell.activateApplication(appId);
51+ }
52+
53+ Binding {
54+ target: scope
55+ property: "isActive"
56+ value: isCurrent
57+ }
58+
59+ Timer {
60+ id: timer
61+ interval: 2000
62+ onTriggered: scope.searchQuery = ""
63+ }
64+
65+ SortFilterProxyModel {
66+ id: categoryFilter
67+ model: scope ? scope.categories : null
68+ dynamicSortFilter: true
69+ filterRole: Categories.RoleCount
70+ filterRegExp: /^0$/
71+ invertMatch: true
72+ }
2873
2974 onIsCurrentChanged: {
3075 pageHeader.resetSearch();
31− previewLoader.open = false;
76+ previewListView.open = false;
3277 }
3378
3479 onMovementStarted: categoryView.showHeader()
@@ -57,8 +102,8 @@ ScopeView {
57102
58103 Connections {
59104 target: scopeView.scope
60− onShowDash: previewLoader.open = false;
61− onHideDash: previewLoader.open = false;
105+ onShowDash: previewListView.open = false;
106+ onHideDash: previewListView.open = false;
62107 }
63108
64109 ScopeListView {
@@ -66,15 +111,22 @@ ScopeView {
66111 objectName: "categoryListView"
67112 anchors.fill: parent
68113 model: scopeView.categories
69− forceNoClip: previewLoader.onScreen
114+ forceNoClip: previewListView.onScreen
70115
71116 onAtYEndChanged: if (atYEnd) endReached()
72117 onMovingChanged: if (moving && atYEnd) endReached()
73118
74119 property string expandedCategoryId: ""
120+ signal correctExpandedCategory();
121+
122+ Behavior on contentY {
123+ enabled: previewListView.open
124+ UbuntuNumberAnimation {}
125+ }
75126
76127 delegate: ListItems.Base {
77128 id: baseItem
129+ objectName: "dashCategory" + category
78130 highlightWhenPressed: false
79131
80132 readonly property bool expandable: rendererLoader.item ? rendererLoader.item.expandable : false
@@ -89,7 +141,7 @@ ScopeView {
89141 right: parent.right
90142 }
91143
92− source: getRenderer(model.renderer, model.contentType, model.rendererHint)
144+ source: getRenderer(model.renderer, model.contentType, model.rendererHint, results)
93145
94146 onLoaded: {
95147 if (item.enableHeightBehavior !== undefined && item.enableHeightBehaviorOnNextCreation !== undefined) {
@@ -123,33 +175,50 @@ ScopeView {
123175 Connections {
124176 target: rendererLoader.item
125177 onClicked: {
126− effect.positionPx = mapToItem(categoryView, 0, itemY).y
127− scopeView.scope.activate(delegateItem.model.uri,
128− delegateItem.model.icon,
129− delegateItem.model.category,
130− 0,
131− delegateItem.model.mimetype,
132− delegateItem.model.title,
133− delegateItem.model.comment,
134− delegateItem.model.dndUri,
135− delegateItem.model.metadata)
178+ // Prepare the preview in case activate() triggers a preview only
179+ effect.positionPx = Math.max(mapToItem(categoryView, 0, itemY).y, pageHeader.height + categoryView.stickyHeaderHeight);
180+ previewListView.categoryId = categoryId
181+ previewListView.categoryDelegate = rendererLoader.item
182+ previewListView.model = target.model;
183+ previewListView.init = true;
184+ previewListView.currentIndex = index;
185+
186+ var item = target.model.get(index);
187+
188+ if ((scopeView.scope.id == "applications.scope" && categoryId == "installed")
189+ || (scopeView.scope.id == "home.scope" && categoryId == "applications.scope")) {
190+ scopeView.scope.activate(item.uri, item.icon, item.category, 0, item.mimetype, item.title,
191+ item.comment, item.dndUri, item.metadata)
192+ } else {
193+ previewListView.open = true
194+
195+ scopeView.scope.preview(item.uri, item.icon, item.category, 0, item.mimetype, item.title,
196+ item.comment, item.dndUri, item.metadata)
197+ }
136198 }
137199 onPressAndHold: {
138− effect.positionPx = mapToItem(categoryView, 0, itemY).y
139− scopeView.scope.preview( delegateItem.model.uri,
140− delegateItem.model.icon,
141− delegateItem.model.category,
142− 0,
143− delegateItem.model.mimetype,
144− delegateItem.model.title,
145− delegateItem.model.comment,
146− delegateItem.model.dndUri,
147− delegateItem.model.metadata)
200+ effect.positionPx = Math.max(mapToItem(categoryView, 0, itemY).y, pageHeader.height + categoryView.stickyHeaderHeight);
201+ previewListView.categoryId = categoryId
202+ previewListView.categoryDelegate = rendererLoader.item
203+ previewListView.model = target.model;
204+ previewListView.init = true;
205+ previewListView.currentIndex = index;
206+ previewListView.open = true
207+
208+ var item = target.model.get(index)
209+ scopeView.scope.preview(item.uri, item.icon, item.category, 0, item.mimetype, item.title,
210+ item.comment, item.dndUri, item.metadata)
148211 }
149212 }
150213 Connections {
151214 target: categoryView
152215 onExpandedCategoryIdChanged: {
216+ collapseAllButExpandedCategory();
217+ }
218+ onCorrectExpandedCategory: {
219+ collapseAllButExpandedCategory();
220+ }
221+ function collapseAllButExpandedCategory() {
153222 var item = rendererLoader.item;
154223 if (item.expandable) {
155224 var shouldFilter = categoryId != categoryView.expandedCategoryId;
@@ -157,13 +226,15 @@ ScopeView {
157226 // If the filter animation will be seen start it, otherwise, just flip the switch
158227 var shrinkingVisible = shouldFilter && y + item.collapsedHeight < categoryView.height;
159228 var growingVisible = !shouldFilter && y + height < categoryView.height;
160− if (shrinkingVisible || growingVisible) {
161− item.startFilterAnimation(shouldFilter)
162− } else {
163− item.filter = shouldFilter;
164− }
165− if (!shouldFilter) {
166− categoryView.maximizeVisibleArea(index, item.uncollapsedHeight);
229+ if (!previewListView.open || !shouldFilter) {
230+ if (shrinkingVisible || growingVisible) {
231+ item.startFilterAnimation(shouldFilter)
232+ } else {
233+ item.filter = shouldFilter;
234+ }
235+ if (!shouldFilter && !previewListView.open) {
236+ categoryView.maximizeVisibleArea(index, item.uncollapsedHeight);
237+ }
167238 }
168239 }
169240 }
@@ -201,6 +272,7 @@ ScopeView {
201272
202273 sectionProperty: "name"
203274 sectionDelegate: ListItems.Header {
275+ objectName: "dashSectionHeader" + delegate.category
204276 property var delegate: categoryView.item(delegateIndex)
205277 width: categoryView.width
206278 text: section
@@ -223,6 +295,7 @@ ScopeView {
223295 text: scopeView.scope.name
224296 searchEntryEnabled: true
225297 scope: scopeView.scope
298+ searchHistory: scopeView.searchHistory
226299 }
227300 }
228301
@@ -232,31 +305,37 @@ ScopeView {
232305 }
233306 }
234307
235− function getRenderer(rendererId, contentType, rendererHint) {
308+ function getRenderer(rendererId, contentType, rendererHint, results) {
236309 if (rendererId == "default") {
237310 rendererId = getDefaultRendererId(contentType);
238311 }
312+ if (rendererId == "carousel") {
313+ // Selectively disable carousel, 6 is fixed for now, should change on the form factor
314+ if (results.count <= 6)
315+ rendererId = "grid"
316+ }
239317 switch (rendererId) {
318+ case "carousel": {
319+ switch (contentType) {
320+ case "music": return "Music/MusicCarousel.qml";
321+ case "video": return "Video/VideoCarousel.qml";
322+ default: return "Generic/GenericCarousel.qml";
323+ }
324+ }
240325 case "grid": {
241326 switch (contentType) {
242− case "video": return "Video/VideoFilterGrid.qml";
243− case "music": return "Music/MusicFilterGrid.qml";
244327 case "apps": {
245328 if (rendererHint == "toggled")
246329 return "Apps/DashPluginFilterGrid.qml";
247330 else
248331 return "Generic/GenericFilterGrid.qml";
249332 }
333+ case "music": return "Music/MusicFilterGrid.qml";
334+ case "video": return "Video/VideoFilterGrid.qml";
250335 case "weather": return "Generic/WeatherFilterGrid.qml";
251336 default: return "Generic/GenericFilterGrid.qml";
252337 }
253338 }
254− case "carousel": {
255− switch (contentType) {
256− case "music": return "Music/MusicCarousel.qml";
257− default: return "Generic/GenericCarousel.qml";
258− }
259− }
260339 case "special": {
261340 switch (contentType) {
262341 case "apps": return "Apps/RunningApplicationsGrid.qml";
@@ -269,6 +348,7 @@ ScopeView {
269348
270349 OpenEffect {
271350 id: effect
351+ objectName: "openEffect"
272352 anchors {
273353 fill: parent
274354 bottomMargin: -bottomOverflow
@@ -281,29 +361,44 @@ ScopeView {
281361 topOpacity: (1 - gap * 1.2)
282362 bottomGapPx: positionPx + gap * (targetBottomGapPx - positionPx)
283363 bottomOverflow: units.gu(20)
284− bottomOpacity: 1 - (gap * 0.8)
364+ live: !expansionAnimation.running
285365
286366 property int targetBottomGapPx: height - units.gu(8) - bottomOverflow
287− property real gap: previewLoader.open ? 1.0 : 0.0
367+ property real gap: previewListView.open ? 1.0 : 0.0
288368
289369 Behavior on gap {
290370 NumberAnimation {
371+ id: expansionAnimation
291372 duration: 200
292373 easing.type: Easing.InOutQuad
293374 onRunningChanged: {
294− if (!previewLoader.open && !running) {
295− previewLoader.onScreen = false
375+ if (!previewListView.open && !running) {
376+ previewListView.onScreen = false
296377 }
297378 }
298379 }
299380 }
381+ Behavior on positionPx {
382+ enabled: previewListView.open
383+ UbuntuNumberAnimation {}
384+ }
300385 }
301386
302387 Connections {
303388 target: scopeView.scope
304389 onPreviewReady: {
305− previewLoader.previewData = preview
306− previewLoader.open = true
390+ if (previewListView.init) {
391+ // Preview was triggered because of a click on the item. Need to expand now.
392+ if (!previewListView.open) {
393+ previewListView.open = true
394+ }
395+
396+ var index = previewListView.currentIndex
397+ previewListView.currentIndex = -1
398+ previewListView.currentIndex = index
399+ previewListView.init = false
400+ }
401+ previewListView.currentItem.previewData = preview
307402 }
308403 }
309404
@@ -311,18 +406,9 @@ ScopeView {
311406 id: previewDelegateMapper
312407 }
313408
314− Connections {
315− ignoreUnknownSignals: true
316− target: previewLoader.valid ? previewLoader.item : null
317− onClose: {
318− previewLoader.open = false
319− }
320− }
321−
322− Loader {
323− objectName: "previewLoader"
324− id: previewLoader
325− property var previewData
409+ ListView {
410+ id: previewListView
411+ objectName: "previewListView"
326412 height: effect.bottomGapPx - effect.topGapPx
327413 anchors {
328414 top: parent.top
@@ -330,32 +416,179 @@ ScopeView {
330416 left: parent.left
331417 right: parent.right
332418 }
333− source: onScreen ? previewDelegateMapper.map(previewLoader.previewData.rendererName) : ""
419+ orientation: ListView.Horizontal
420+ highlightRangeMode: ListView.StrictlyEnforceRange
421+ snapMode: ListView.SnapOneItem
422+ boundsBehavior: Flickable.DragAndOvershootBounds
423+ highlightMoveDuration: 250
424+ flickDeceleration: units.gu(625)
425+ maximumFlickVelocity: width * 5
426+ cacheBuffer: 0
427+
428+ // To be set before opening the preview
429+ property string categoryId: ""
430+ property var categoryDelegate
431+
432+ // because the ListView is built asynchronous, setting the
433+ // currentIndex directly won't work. We need to refresh it
434+ // when the first preview is ready to be displayed.
435+ property bool init: true
436+
437+ onCurrentIndexChanged: {
438+ var row = Math.floor(currentIndex / categoryDelegate.columns);
439+ if (categoryDelegate.collapsedRowCount <= row) {
440+ categoryView.expandedCategoryId = categoryId
441+ }
442+
443+ if (open) {
444+ categoryDelegate.highlightIndex = currentIndex
445+ }
446+
447+ if (!init && model !== undefined) {
448+ var item = model.get(currentIndex)
449+ scopeView.scope.preview(item.uri, item.icon, item.category, 0, item.mimetype, item.title, item.comment, item.dndUri, item.metadata)
450+ }
451+
452+ // Adjust contentY in case we need to change to it to show the next row
453+ if (categoryDelegate.rows > 1) {
454+ var itemY = categoryView.contentItem.mapFromItem(categoryDelegate.currentItem).y;
455+
456+ // Find new contentY and effect.postionPx
457+ var newContentY = itemY - effect.positionPx - categoryDelegate.verticalSpacing;
458+
459+ // Make sure the item is not covered by a header. Move the effect split down if necessary
460+ var headerHeight = pageHeader.height + categoryView.stickyHeaderHeight;
461+ var effectAdjust = Math.max(effect.positionPx, headerHeight);
462+
463+ // Make sure we don't overscroll the listview. If yes, adjust effect position
464+ if (newContentY < 0) {
465+ effectAdjust += newContentY;
466+ newContentY = 0;
467+ }
468+ if (newContentY > Math.max(0, categoryView.contentHeight - categoryView.height)) {
469+ effectAdjust += -(categoryView.contentHeight - categoryView.height) + newContentY
470+ newContentY = categoryView.contentHeight - categoryView.height;
471+ }
472+
473+ effect.positionPx = effectAdjust;
474+ categoryView.contentY = newContentY;
475+ }
476+ }
334477
335478 property bool open: false
336479 property bool onScreen: false
337− property bool valid: item !== null
338480
339481 onOpenChanged: {
340482 if (open) {
341− onScreen = true
483+ onScreen = true;
484+ categoryDelegate.highlightIndex = currentIndex;
485+ pageHeader.unfocus();
486+ } else {
487+ // Cancel any pending preview requests or actions
488+ if (previewListView.currentItem.previewData !== undefined) {
489+ previewListView.currentItem.previewData.cancelAction();
490+ }
491+ scopeView.scope.cancelActivation();
492+ model = undefined;
493+ categoryView.correctExpandedCategory();
494+ categoryDelegate.highlightIndex = -1;
342495 }
343496 }
344497
345− onLoaded: {
346− item.previewData = Qt.binding(function() { return previewLoader.previewData })
498+ Rectangle {
499+ anchors.fill: parent
500+ color: Qt.rgba(0, 0, 0, .3)
501+ z: -1
347502 }
503+
504+ delegate: Loader {
505+ id: previewLoader
506+ objectName: "previewLoader" + index
507+ height: previewListView.height
508+ width: previewListView.width
509+ asynchronous: true
510+ source: previewListView.onScreen ?
511+ (previewData !== undefined ? previewDelegateMapper.map(previewData.rendererName) : "DashPreviewPlaceholder.qml") : ""
512+
513+ onPreviewDataChanged: {
514+ if (previewData !== undefined && source.toString().indexOf("DashPreviewPlaceholder.qml") != -1) {
515+ previewLoader.opacity = 0;
516+ }
517+ }
518+
519+ onSourceChanged: {
520+ if (previewData !== undefined) {
521+ fadeIn.start()
522+ }
523+ }
524+
525+ PropertyAnimation {
526+ id: fadeIn
527+ target: previewLoader
528+ property: "opacity"
529+ from: 0.0
530+ to: 1.0
531+ duration: UbuntuAnimation.BriskDuration
532+ }
533+
534+ property var previewData
535+ property bool valid: item !== null
536+
537+ onLoaded: {
538+ if (previewListView.onScreen && previewData !== undefined) {
539+ item.previewData = Qt.binding(function() { return previewData })
540+ item.isCurrent = Qt.binding(function() { return ListView.isCurrentItem })
541+ }
542+ }
543+
544+ Connections {
545+ ignoreUnknownSignals: true
546+ target: item
547+ onClose: {
548+ previewListView.open = false
549+ }
550+ }
551+
552+ function closePreviewSpinner() {
553+ if (item) {
554+ item.showProcessingAction = false;
555+ }
556+ }
557+ }
558+ }
559+
560+ Image {
561+ objectName: "pointerArrow"
562+ anchors {
563+ top: previewListView.bottom
564+ left: parent.left
565+ leftMargin: previewListView.categoryDelegate !== undefined && previewListView.categoryDelegate.currentItem ?
566+ previewListView.categoryDelegate.currentItem.center + (-width + margins) / 2 : 0
567+
568+ Behavior on leftMargin {
569+ SmoothedAnimation {
570+ duration: UbuntuAnimation.FastDuration
571+ }
572+ }
573+ }
574+ height: units.gu(1)
575+ width: units.gu(2)
576+ property int margins: previewListView.categoryDelegate ? previewListView.categoryDelegate.margins : 0
577+ opacity: previewListView.open ? .5 : 0
578+
579+ source: "graphics/tooltip_arrow.png"
348580 }
349581
350582 // TODO: Move as InverseMouseArea to DashPreview
351583 MouseArea {
352− enabled: previewLoader.onScreen
584+ objectName: "closePreviewMouseArea"
585+ enabled: previewListView.onScreen
353586 anchors {
354587 fill: parent
355588 topMargin: effect.bottomGapPx
356589 }
357590 onClicked: {
358− previewLoader.open = false;
591+ previewListView.open = false;
359592 }
360593 }
361594}
Dash/Music/AlbumTile.qmldeleted−116
@@ -1,116 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import Ubuntu.Components 0.1
19−
20−AbstractButton {
21− id: root
22− property url source
23− property alias album: albumLabel.text
24− property alias artist: artistLabel.text
25− property alias iconWidth: icon.width
26− property alias iconHeight: icon.height
27−
28− UbuntuShape {
29− id: icon
30− anchors {
31− top: parent.top
32− horizontalCenter: parent.horizontalCenter
33− }
34− radius: "medium"
35− image: Image {
36− source: root.source
37− sourceSize { width: icon.width; height: icon.height }
38− asynchronous: true
39− cache: false
40− }
41− }
42−
43− UbuntuShape {
44− id: borderPressed
45−
46− anchors.fill: icon
47− radius: "medium"
48− borderSource: "radius_pressed.sci"
49− opacity: root.pressed ? 1.0 : 0.0
50− Behavior on opacity { NumberAnimation { duration: 200; easing.type: Easing.OutQuint } }
51− }
52−
53− Item {
54− id: artistContainer
55− anchors {
56− left: parent.left
57− right: parent.right
58− top: icon.bottom
59− }
60− height: units.gu(2)
61−
62− Label {
63− id: artistLabel
64− anchors {
65− baseline: parent.bottom
66− left: parent.left
67− right: parent.right
68− leftMargin: units.gu(1)
69− rightMargin: units.gu(1)
70− }
71−
72− color: Theme.palette.selected.backgroundText
73− opacity: 0.9
74− style: Text.Raised
75− styleColor: "black"
76− fontSize: "small"
77− elide: Text.ElideMiddle
78− horizontalAlignment: Text.AlignHCenter
79− }
80− }
81−
82− Item {
83− anchors {
84− left: parent.left
85− right: parent.right
86− top: artistContainer.bottom
87− }
88− height: units.gu(1.5)
89−
90− Label {
91− id: albumLabel
92− anchors {
93− baseline: parent.bottom
94− left: parent.left
95− right: parent.right
96− leftMargin: units.gu(1)
97− rightMargin: units.gu(1)
98− }
99−
100− color: Theme.palette.selected.backgroundText
101− opacity: 0.9
102− style: Text.Raised
103− styleColor: "black"
104− fontSize: "small"
105− font.weight: Font.Light
106− elide: Text.ElideMiddle
107− horizontalAlignment: Text.AlignHCenter
108− }
109− }
110−
111− GridView.onRemove: SequentialAnimation {
112− PropertyAction { target: root; property: "GridView.delayRemove"; value: true }
113− NumberAnimation { target: root; property: "opacity"; from: 1; to: 0; duration: 200; easing.type: Easing.InOutQuad }
114− PropertyAction { target: root; property: "GridView.delayRemove"; value: false }
115− }
116−}
Dash/Music/MusicCarousel.qml+2−2
@@ -16,15 +16,15 @@
1616
1717import QtQuick 2.0
1818import "../../Components"
19+import ".."
1920
20−Carousel {
21+DashCarousel {
2122 id: musicCarousel
2223 tileAspectRatio: 1
2324 minimumTileWidth: units.gu(13)
2425 itemComponent: carouselDelegateMusic
2526 selectedItemScaleFactor: 1.2
2627 cacheBuffer: 1404 // 18px * 13gu * 6
27− height: implicitHeight + units.gu(6)
2828
2929 Component {
3030 id: carouselDelegateMusic
Dash/Music/MusicFilterGrid.qml+7−15
@@ -19,22 +19,21 @@ import "../../Components"
1919import "../Generic"
2020
2121GenericFilterGrid {
22− id: filtergrid
22+ id: musicFilterGrid
2323
2424 delegateWidth: units.gu(11)
2525 delegateHeight: units.gu(16)
26−
2726 iconWidth: units.gu(11)
2827 iconHeight: units.gu(11)
2928
3029 delegate: Tile {
3130 id: tile
3231 objectName: "delegate" + index
33− width: filtergrid.cellWidth
34− height: filtergrid.cellHeight
32+ width: musicFilterGrid.cellWidth
33+ height: musicFilterGrid.cellHeight
3534 text: model.comment
36− imageWidth: filtergrid.iconWidth
37− imageHeight: filtergrid.iconHeight
35+ imageWidth: musicFilterGrid.iconWidth
36+ imageHeight: musicFilterGrid.iconHeight
3837 source: model.icon
3938 maximumLineCount: 2
4039 horizontalAlignment: Text.AlignLeft
@@ -43,14 +42,7 @@ GenericFilterGrid {
4342 artist: model.title
4443 }
4544
46− onClicked: {
47− var data = { model: model }
48− filtergrid.clicked(index, data, tile.y)
49− }
50−
51− onPressAndHold: {
52− var data = { model: model }
53− filtergrid.pressAndHold(index, data, tile.y)
54− }
45+ onClicked: musicFilterGrid.clicked(index, tile.y)
46+ onPressAndHold: musicFilterGrid.pressAndHold(index, tile.y)
5547 }
5648}
Dash/Music/MusicPreview.qmlnew file+203
@@ -0,0 +1,203 @@
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 QtMultimedia 5.0
19+import Ubuntu.Components 0.1
20+import Ubuntu.Components.ListItems 0.1
21+import ".."
22+import "../Generic"
23+import "../../Components"
24+import "../Previews"
25+
26+GenericPreview {
27+ id: root
28+
29+ previewImages: previewImageComponent
30+ header: headerComponent
31+ description: descriptionComponent
32+
33+ Component {
34+ id: previewImageComponent
35+ LazyImage {
36+ height: units.gu(22)
37+ scaleTo: "height"
38+ source: previewData ? previewData.image : ""
39+ initialHeight: height
40+ initialWidth: height
41+ }
42+ }
43+
44+ Component {
45+ id: headerComponent
46+ Header {
47+ title: previewData.title
48+ subtitle: previewData.subtitle
49+ }
50+ }
51+
52+ Component {
53+ id: descriptionComponent
54+
55+ Item {
56+ height: childrenRect.height
57+ Audio {
58+ id: audioPlayer
59+ objectName: "audioPlayer"
60+ property real progress: audioPlayer.position / audioPlayer.duration
61+
62+ property Item playingItem
63+
64+ Component.onDestruction: {
65+ audioPlayer.stop();
66+ }
67+
68+ onErrorStringChanged: console.warn("Audio player error:", errorString)
69+
70+ }
71+
72+ Connections {
73+ target: root
74+ onIsCurrentChanged: {
75+ if (!root.isCurrent) {
76+ audioPlayer.stop();
77+ }
78+ }
79+ }
80+
81+ Column {
82+ anchors { left: parent.left; right: parent.right }
83+ visible: trackRepeater.count > 0
84+
85+ ThinDivider {
86+ objectName: "topDivider"
87+ anchors { left: parent.left; right: parent.right }
88+ }
89+
90+ Repeater {
91+ id: trackRepeater
92+ objectName: "trackRepeater"
93+
94+ model: previewData.tracks
95+
96+ delegate: Item {
97+ id: trackItem
98+ objectName: "trackItem" + index
99+ anchors { left: parent.left; right: parent.right }
100+ height: units.gu(5)
101+ property bool isPlayingItem: audioPlayer.playingItem == trackItem
102+
103+ function play() {
104+ audioPlayer.stop();
105+ // Make sure we change the source, even if two items point to the same uri location
106+ audioPlayer.source = "";
107+ audioPlayer.source = model.uri;
108+ audioPlayer.playingItem = trackItem;
109+ audioPlayer.play();
110+ }
111+
112+ Row {
113+ id: trackRow
114+ width: parent.width
115+ spacing: units.gu(1)
116+ property int column1Width: units.gu(3)
117+ property int column2Width: width - (2 * spacing) - column1Width - column3Width
118+ property int column3Width: units.gu(4)
119+ anchors.verticalCenter: parent.verticalCenter
120+
121+ Button {
122+ objectName: "playButton"
123+ width: trackRow.column1Width
124+ height: width
125+ iconSource: audioPlayer.playbackState == Audio.PlayingState && trackItem.isPlayingItem ? "image://theme/media-playback-pause" : "image://theme/media-playback-start"
126+
127+ // Can't be "transparent" or "#00xxxxxx" as the button optimizes away the surrounding shape
128+ // FIXME when this is resolved: https://bugs.launchpad.net/ubuntu-ui-toolkit/+bug/1251685
129+ color: "#01000000"
130+
131+ onClicked: {
132+ if (trackItem.isPlayingItem) {
133+ if (audioPlayer.playbackState == Audio.PlayingState) {
134+ audioPlayer.pause();
135+ } else if (audioPlayer.playbackState == Audio.PausedState){
136+ audioPlayer.play();
137+ }
138+ } else {
139+ trackItem.play();
140+ }
141+ }
142+ }
143+
144+ Label {
145+ objectName: "trackTitleLabel"
146+ fontSize: "small"
147+ opacity: 0.9
148+ color: "white"
149+ horizontalAlignment: Text.AlignLeft
150+ anchors.verticalCenter: parent.verticalCenter
151+ width: parent.column2Width
152+ text: title
153+ style: Text.Raised
154+ styleColor: "black"
155+ elide: Text.ElideRight
156+
157+ UbuntuShape {
158+ id: progressBarFill
159+ objectName: "progressBarFill"
160+ color: UbuntuColors.orange
161+ anchors.left: progressBarImage.left
162+ anchors.right: progressBarImage.right
163+ anchors.verticalCenter: progressBarImage.verticalCenter
164+ height: units.dp(2)
165+ anchors.margins: units.dp(2)
166+ anchors.rightMargin: maxWidth - (maxWidth * audioPlayer.progress) + units.dp(2)
167+ visible: progressBarImage.visible
168+ property int maxWidth: progressBarImage.width - units.dp(4)
169+ }
170+
171+ Image {
172+ id: progressBarImage
173+ anchors { left: parent.left; top: parent.bottom; right: parent.right }
174+ height: units.dp(6)
175+ visible: audioPlayer.playbackState != Audio.StoppedState && trackItem.isPlayingItem && model.length.length > 0
176+ source: "graphics/music_progress_bg.png"
177+ }
178+ }
179+
180+ Label {
181+ id: valueLabel
182+ objectName: "timeLabel"
183+ fontSize: "small"
184+ opacity: 0.9
185+ color: "white"
186+ anchors.verticalCenter: parent.verticalCenter
187+ horizontalAlignment: Text.AlignRight
188+ width: parent.column3Width
189+ text: length
190+ style: Text.Raised
191+ styleColor: "black"
192+ }
193+ }
194+
195+ ThinDivider {
196+ anchors { left: parent.left; bottom: parent.bottom; right: parent.right }
197+ }
198+ }
199+ }
200+ }
201+ }
202+ }
203+}
Dash/Music/graphics/music_progress_bg.pngnew file

Binary file not shown.

Dash/PreviewDelegateMapper.qml+1
@@ -23,6 +23,7 @@ QtObject {
2323 property var previewDelegateMapping: {"preview-generic": genericPreview,
2424 "preview-application": appPreview,
2525 "preview-movie": "Movie/MoviePreview.qml",
26+ "preview-music": "Music/MusicPreview.qml",
2627 }
2728 }
2829
Dash/ScopeView.qmldeleted−65
@@ -1,65 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import Utils 0.1
19−import Unity 0.1
20−
21−FocusScope {
22− property Scope scope
23− property SortFilterProxyModel categories: categoryFilter
24− property bool isCurrent
25− property ListModel searchHistory
26− property bool moving: false
27−
28− signal endReached
29− signal movementStarted
30− signal positionedAtBeginning
31−
32− // FIXME delay the search so that daemons have time to settle, note that
33− // removing this will break ScopeView::test_changeScope
34− onScopeChanged: {
35− if (scope) {
36− timer.restart();
37− scope.activateApplication.connect(activateApp);
38− }
39− }
40−
41− function activateApp(desktopFilePath) {
42− shell.activateApplication(desktopFilePath);
43− }
44−
45− Binding {
46− target: scope
47− property: "isActive"
48− value: isCurrent
49− }
50−
51− Timer {
52− id: timer
53− interval: 2000
54− onTriggered: scope.searchQuery = ""
55− }
56−
57− SortFilterProxyModel {
58− id: categoryFilter
59− model: scope ? scope.categories : null
60− dynamicSortFilter: true
61− filterRole: Categories.RoleCount
62− filterRegExp: /^0$/
63− invertMatch: true
64− }
65−}
Dash/SearchableResultModel.qml+4
@@ -25,6 +25,10 @@ SortFilterProxyModel {
2525
2626 filterRole: CategoryResults.RoleTitle
2727
28+ function get(index) {
29+ return model.get(mapToSource(index))
30+ }
31+
2832 onSearchQueryChanged: {
2933 if (searchQuery.length == 0) {
3034 filterRegExp = RegExp("");
Dash/Video/VideosCarousel.qml → Dash/Video/VideoCarousel.qmlrenamed+2−2
@@ -16,15 +16,15 @@
1616
1717import QtQuick 2.0
1818import "../../Components"
19+import ".."
1920
20−Carousel {
21+DashCarousel {
2122 id: videosCarousel
2223 tileAspectRatio: 198 / 288
2324 minimumTileWidth: units.gu(13)
2425 itemComponent: carouselDelegateVideo
2526 selectedItemScaleFactor: 1.14
2627 cacheBuffer: 1404 // 18px * 13gu * 6
27− height: implicitHeight + units.gu(6)
2828
2929 Component {
3030 id: carouselDelegateVideo
Dash/Video/VideoFilterGrid.qml+8−15
@@ -15,40 +15,33 @@
1515 */
1616
1717import QtQuick 2.0
18+import Ubuntu.Components 0.1
1819import "../../Components"
1920import "../Generic"
2021
2122GenericFilterGrid {
22− id: filtergrid
23+ id: videoFilterGrid
2324
2425 delegateWidth: units.gu(11)
2526 delegateHeight: units.gu(15)
26−
2727 iconWidth: units.gu(11)
2828 iconHeight: units.gu(11)
2929
3030 delegate: Tile {
3131 id: tile
3232 objectName: "delegate" + index
33− width: filtergrid.cellWidth
34− height: filtergrid.cellHeight
33+ width: videoFilterGrid.cellWidth
34+ height: videoFilterGrid.cellHeight
3535 text: model.title
36− imageWidth: filtergrid.iconWidth
37− imageHeight: filtergrid.iconHeight
36+ imageWidth: videoFilterGrid.iconWidth
37+ imageHeight: videoFilterGrid.iconHeight
3838 source: model.icon
3939 maximumLineCount: 2
4040 horizontalAlignment: Text.AlignLeft
4141
4242 style: VideoTileStyle {}
4343
44− onClicked: {
45− var data = { model: model }
46− filtergrid.clicked(index, data, tile.y)
47− }
48−
49− onPressAndHold: {
50− var data = { model: model }
51− filtergrid.pressAndHold(index, data, tile.y)
52− }
44+ onClicked: videoFilterGrid.clicked(index, tile.y)
45+ onPressAndHold: videoFilterGrid.pressAndHold(index, tile.y)
5346 }
5447}
Dash/Video/VideoInfo.qmldeleted−84
@@ -1,84 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import QtQuick.XmlListModel 2.0
19−
20−Item {
21− id: info
22− property string source
23−
24− property bool ready: nfo.status == XmlListModel.Ready || nfoTV.status == XmlListModel.Ready
25− property bool isMovie: true
26− property variant video: null
27− property variant tvShow: null
28−
29− function getActors() {
30− var c = []
31− if (video.actor1) c.push(video.actor1)
32− if (video.actor2) c.push(video.actor2)
33− if (video.actor3) c.push(video.actor3)
34− return c
35− }
36−
37− onSourceChanged: isMovie = true
38−
39− XmlListModel {
40− id: nfo
41− source: info.source
42− query: (isMovie) ? "/movie" : "/episodedetails"
43−
44− XmlRole { name: "title"; query: "title/string()" }
45− XmlRole { name: "year"; query: "year/number()" }
46− XmlRole { name: "runtime"; query: "runtime/number()" }
47− XmlRole { name: "rating"; query: "rating/number()" }
48− XmlRole { name: "plot"; query: "plot/string()" }
49− XmlRole { name: "director"; query: "director[1]/string()" }
50− XmlRole { name: "actor1"; query: "actor[1]/name/string()" }
51− XmlRole { name: "actor2"; query: "actor[2]/name/string()" }
52− XmlRole { name: "actor3"; query: "actor[3]/name/string()" }
53− XmlRole { name: "author"; query: "author[1]/string()" }
54− XmlRole { name: "season"; query: "season/number()" }
55− XmlRole { name: "episode"; query: "episode/number()" }
56−
57− XmlRole { name: "rentPrice"; query: "rent_price/string()" }
58− XmlRole { name: "buyPrice"; query: "buy_price/string()" }
59− XmlRole { name: "expires"; query: "expires/string()" }
60−
61− onStatusChanged: if (status == XmlListModel.Ready) {
62− if (count > 0) info.video = nfo.get(0)
63− else info.isMovie = false
64− } else if (status == XmlListModel.Error) info.isMovie = false
65− }
66−
67− XmlListModel {
68− id: nfoTV
69− source: (nfo.isMovie) ? "" : info.source.substring(0, info.source.lastIndexOf("/") + 1) + "tvshow.nfo"
70− query: "/tvshow"
71−
72− XmlRole { name: "title"; query: "title/string()" }
73−
74− onStatusChanged: if (status == XmlListModel.Ready) {
75− if (count > 0) info.tvShow = nfoTV.get(0)
76− } else if (status == XmlListModel.Error) {
77− // Search for tvshow.nfo in the directory above this one to cater
78− // for directory layout Show/Season
79− var path = info.source.split("/")
80− path.splice(-2, 2, "tvshow.nfo")
81− source = path.join("/")
82− }
83− }
84−}
Dash/graphics/phone/screenshots/angrybirds@12.pngdeleted

Binary file not shown.

Dash/graphics/tooltip_arrow@27.pngnew file

Binary file not shown.

Greeter/Greeter.qml+5−8
@@ -19,7 +19,6 @@ import Ubuntu.Components 0.1
1919import Ubuntu.Gestures 0.1
2020import LightDM 0.1 as LightDM
2121import "../Components"
22−import "../Components/Math.js" as MathLocal
2322
2423Showable {
2524 id: greeter
@@ -29,7 +28,7 @@ Showable {
2928 property url defaultBackground
3029
3130 // 1 when fully shown and 0 when fully hidden
32− property real showProgress: MathLocal.clamp((width + x) / width, 0, 1)
31+ property real showProgress: MathUtils.clamp((width + x) / width, 0, 1)
3332
3433 showAnimation: StandardAnimation { property: "x"; to: 0 }
3534 hideAnimation: StandardAnimation { property: "x"; to: -width }
@@ -52,7 +51,7 @@ Showable {
5251 signal unlocked(int uid)
5352
5453 onRightTeaserPressedChanged: {
55− if (rightTeaserPressed && !locked) {
54+ if (rightTeaserPressed && (!locked || narrowMode) && x == 0) {
5655 teasingTimer.start();
5756 }
5857 }
@@ -64,6 +63,7 @@ Showable {
6463 property var model: LightDM.Users
6564 property int currentIndex: 0
6665 property var infographicModel: LightDM.Infographic
66+ readonly property int backgroundTopMargin: -greeter.y
6767
6868 source: required ? "GreeterContent.qml" : ""
6969
@@ -89,7 +89,7 @@ Showable {
8989 when: teasingTimer.running
9090 PropertyChanges {
9191 target: greeter
92− x: -units.gu(2)
92+ x: -dragHandle.hintDisplacement
9393 }
9494 }
9595 ]
@@ -113,10 +113,7 @@ Showable {
113113 anchors.bottom: parent.bottom
114114 anchors.right: parent.right
115115
116− // no need for requiring a directional drag since we are covering the screen
117− // anyway (i.e., no change user could be trying to interact with some other
118− // UI element)
119− distanceThreshold: 0
116+ hintDisplacement: units.gu(2)
120117
121118 enabled: greeter.narrowMode || !greeter.locked
122119
Greeter/GreeterContent.qml+23−20
@@ -24,7 +24,7 @@ MouseArea {
2424 id: root
2525 anchors.fill: parent
2626
27− property bool ready: wallpaper.source == "" || wallpaper.status == Image.Ready || wallpaper.status == Image.Error
27+ property bool ready: background.source == "" || background.status == Image.Ready || background.status == Image.Error
2828 property bool leftTeaserPressed: teasingMouseArea.pressed &&
2929 teasingMouseArea.mouseX < teasingMouseArea.width / 2
3030 property bool rightTeaserPressed: teasingMouseArea.pressed &&
@@ -34,33 +34,36 @@ MouseArea {
3434 signal unlocked(int uid)
3535
3636 Rectangle {
37− // In case wallpaper fails to load
38− id: wallpaperBackup
37+ // In case background fails to load
38+ id: backgroundBackup
3939 anchors.fill: parent
4040 color: "black"
4141 }
4242
4343 property url backgroundValue: AccountsService.backgroundFile != undefined && AccountsService.backgroundFile.length > 0 ? AccountsService.backgroundFile : greeter.defaultBackground
44− onBackgroundValueChanged: wallpaper.source = backgroundValue
44+ onBackgroundValueChanged: background.source = backgroundValue
4545
4646 CrossFadeImage {
47− id: wallpaper
48− objectName: "wallpaper"
49− anchors.fill: parent
47+ id: background
48+ objectName: "greeterBackground"
49+ anchors {
50+ fill: parent
51+ topMargin: backgroundTopMargin
52+ }
5053 fillMode: Image.PreserveAspectCrop
5154 }
5255
5356 // See Shell.qml's backgroundSettings treatment for why we need a separate
5457 // Image, but it boils down to avoiding binding loop detection.
5558 Image {
56− source: wallpaper.source
59+ source: background.source
5760 height: 0
5861 width: 0
5962 sourceSize.height: 0
6063 sourceSize.width: 0
6164 onStatusChanged: {
6265 if (status == Image.Error && source != greeter.defaultBackground) {
63− wallpaper.source = greeter.defaultBackground
66+ background.source = greeter.defaultBackground
6467 }
6568 }
6669 }
@@ -71,17 +74,6 @@ MouseArea {
7174 opacity: 0.4
7275 }
7376
74− Clock {
75− id: clock
76− visible: narrowMode
77−
78− anchors {
79− top: parent.top
80− topMargin: units.gu(2)
81− horizontalCenter: parent.horizontalCenter
82− }
83− }
84−
8577 MouseArea {
8678 id: teasingMouseArea
8779 anchors.fill: parent
@@ -160,4 +152,15 @@ MouseArea {
160152 right: root.right
161153 }
162154 }
155+
156+ Clock {
157+ id: clock
158+ visible: narrowMode
159+
160+ anchors {
161+ top: parent.top
162+ topMargin: units.gu(2)
163+ horizontalCenter: parent.horizontalCenter
164+ }
165+ }
163166}
Greeter/Lockscreen.qml+14−22
@@ -17,7 +17,6 @@
1717import QtQuick 2.0
1818import Ubuntu.Components 0.1
1919import "../Components"
20−import LightDM 0.1 as LightDM
2120
2221Showable {
2322 id: root
@@ -37,7 +36,7 @@ Showable {
3736
3837 property url background: ""
3938
40− signal unlocked()
39+ signal entered(string passphrase)
4140 signal cancel()
4241 signal emergencyCall()
4342
@@ -53,16 +52,24 @@ Showable {
5352 pinPadLoader.resetting = false;
5453 }
5554
55+ function clear(showAnimation) {
56+ pinPadLoader.item.clear(showAnimation);
57+ }
58+
5659 Rectangle {
57− // In case wallpaper fails to load or is undefined
58− id: wallpaperBackup
60+ // In case background fails to load or is undefined
61+ id: backgroundBackup
5962 anchors.fill: parent
6063 color: "black"
6164 }
6265
6366 Image {
64− id: wallpaper
65− anchors.fill: parent
67+ id: backgroundImage
68+ objectName: "lockscreenBackground"
69+ anchors {
70+ fill: parent
71+ topMargin: backgroundTopMargin
72+ }
6673 source: root.required ? root.background : ""
6774 fillMode: Image.PreserveAspectCrop
6875 }
@@ -88,7 +95,7 @@ Showable {
8895 target: pinPadLoader.item
8996
9097 onEntered: {
91− LightDM.Greeter.respond(passphrase);
98+ root.entered(passphrase);
9299 }
93100
94101 onCancel: {
@@ -146,19 +153,4 @@ Showable {
146153 anchors.horizontalCenter: parent.horizontalCenter
147154 }
148155 }
149−
150− Connections {
151− target: LightDM.Greeter
152−
153− onAuthenticationComplete: {
154− if (LightDM.Greeter.promptless) {
155− return;
156− }
157− if (LightDM.Greeter.authenticated) {
158− root.unlocked();
159− } else {
160− pinPadLoader.item.clear(true);
161− }
162− }
163− }
164156}
Greeter/LoginList.qml+11
@@ -289,5 +289,16 @@ Item {
289289 }
290290 passwordInput.text = "";
291291 }
292+
293+ onRequestAuthenticationUser: {
294+ // Find index for requested user, if it exists
295+ for (var i = 0; i < userList.model.count; i++) {
296+ if (user == userList.model.data(i, LightDM.UserRoles.NameRole)) {
297+ moveTimer.start();
298+ userList.currentIndex = i;
299+ return;
300+ }
301+ }
302+ }
292303 }
293304}
Greeter/PassphraseLockscreen.qml+1
@@ -82,6 +82,7 @@ Item {
8282
8383 WrongPasswordAnimation {
8484 id: wrongPasswordAnimation
85+ objectName: "wrongPasswordAnimation"
8586 target: pinentryField
8687 }
8788}
Greeter/PinLockscreen.qml+35−4
@@ -27,7 +27,7 @@ Column {
2727 property alias placeholderText: pinentryField.placeholderText
2828 property int padWidth: units.gu(34)
2929 property int padHeight: units.gu(28)
30− property int pinLength: 4
30+ property int pinLength: -1
3131
3232 signal entered(string passphrase)
3333 signal cancel()
@@ -65,6 +65,9 @@ Column {
6565 Label {
6666 id: pinentryFieldLabel
6767 anchors.centerIn: parent
68+ width: parent.width - (backspaceIcon.width + backspaceIcon.anchors.rightMargin) * 2
69+ elide: Text.ElideMiddle
70+ horizontalAlignment: Text.AlignHCenter
6871 font.pixelSize: units.dp(44)
6972 color: "#f3f3e7"
7073 opacity: 0.6
@@ -76,6 +79,26 @@ Column {
7679 text: parent.placeholderText
7780 visible: pinentryFieldLabel.text.length == 0
7881 }
82+
83+ Icon {
84+ id: backspaceIcon
85+ objectName: "backspaceIcon"
86+ anchors {
87+ top: parent.top
88+ topMargin: units.gu(1)
89+ right: parent.right
90+ rightMargin: units.gu(2)
91+ bottom: parent.bottom
92+ bottomMargin: units.gu(1)
93+ }
94+ visible: root.pinLength == -1
95+ width: height
96+ name: "erase"
97+ MouseArea {
98+ anchors.fill: parent
99+ onClicked: pinentryField.text = pinentryField.text.substring(0, pinentryField.text.length-1);
100+ }
101+ }
79102 }
80103
81104 UbuntuShape {
@@ -154,7 +177,7 @@ Column {
154177 objectName: "pinPadButtonBack"
155178 width: root.padWidth / 3
156179 height: root.padHeight / 4
157− iconName: "back"
180+ subText: "CANCEL"
158181 onClicked: root.cancel();
159182 }
160183
@@ -171,8 +194,15 @@ Column {
171194 objectName: "pinPadButtonErase"
172195 width: root.padWidth / 3
173196 height: root.padHeight / 4
174− iconName: "erase"
175− onClicked: pinentryField.text = pinentryField.text.substring(0, pinentryField.text.length-1)
197+ iconName: root.pinLength == -1 ? "" : "erase"
198+ subText: root.pinLength == -1 ? "DONE" : ""
199+ onClicked: {
200+ if (root.pinLength !== -1) {
201+ pinentryField.text = pinentryField.text.substring(0, pinentryField.text.length-1);
202+ } else {
203+ root.entered(pinentryField.text);
204+ }
205+ }
176206 enabled: entryEnabled
177207 }
178208 }
@@ -180,6 +210,7 @@ Column {
180210
181211 WrongPasswordAnimation {
182212 id: wrongPasswordAnimation
213+ objectName: "wrongPasswordAnimation"
183214 target: pinentryField
184215 }
185216}
Hud/SliderLabel.qml+4−2
@@ -36,10 +36,12 @@ Item {
3636 label.text = sliderData["label"]
3737 slider.minimumValue = sliderData["min"]
3838 slider.maximumValue = sliderData["max"]
39− slider.live = sliderData["live"]
39+ if("live" in sliderData)
40+ slider.live = sliderData["live"]
4041 // SDK Slider does not support step yet
4142// slider.step = sliderData["step"]
42− slider.value = sliderData["value"]
43+ if("value" in sliderData)
44+ slider.value = sliderData["value"]
4345 action = sliderData["action"]
4446 }
4547
Launcher/Launcher.qml+2−2
@@ -28,8 +28,8 @@ Item {
2828
2929 property int panelWidth: units.gu(8)
3030 property int dragAreaWidth: units.gu(1)
31− property int minimizeDistance: panelWidth * 2.5
32− property real progress: dragArea.dragging && dragArea.touchX > panelWidth ?
31+ property int minimizeDistance: units.gu(26)
32+ property real progress: dragArea.dragging && dragArea.touchX > panelWidth ?
3333 (width * (dragArea.touchX-panelWidth) / (width - panelWidth)) : 0
3434
3535 readonly property bool shown: panel.x > -panel.width
Launcher/LauncherDelegate.qml+1
@@ -57,6 +57,7 @@ Item {
5757 anchors.fill: parent
5858 anchors.margins: units.gu(1)
5959 radius: "medium"
60+ borderSource: "none"
6061
6162 image: Image {
6263 id: iconImage
Launcher/LauncherPanel.qml+88−47
@@ -21,6 +21,7 @@ import Unity 0.1
2121import Unity.Launcher 0.1
2222import Ubuntu.Components.Popups 0.1
2323import "../Components/ListItems"
24+import "../Components/"
2425
2526Item {
2627 id: root
@@ -31,7 +32,7 @@ Item {
3132 property bool inverted: true
3233 property bool dragging: false
3334 property bool moving: launcherListView.moving || launcherListView.flicking
34− property bool preventHiding: moving || dndArea.draggedIndex >= 0 || dndArea.quickListPopover !== null || dndArea.pressed
35+ property bool preventHiding: moving || dndArea.draggedIndex >= 0 || quickList.state === "open" || dndArea.pressed
3536 property int highlightIndex: -1
3637
3738 signal applicationSelected(string appId)
@@ -278,7 +279,6 @@ Item {
278279 property bool postDragging: false
279280 property int startX
280281 property int startY
281− property var quickListPopover: null
282282
283283 onPressed: {
284284 selectedItem = launcherListView.itemAt(mouseX, mouseY + launcherListView.realContentY)
@@ -357,18 +357,17 @@ Item {
357357 draggedIndex = Math.floor((mouseY + launcherListView.realContentY) / launcherListView.realItemHeight);
358358
359359 // Opening QuickList
360− var quickListModel = launcherListView.model.get(draggedIndex).quickList
361− var quickListAppId = launcherListView.model.get(draggedIndex).appId
362−
363− quickListPopover = PopupUtils.open(popoverComponent, selectedItem,
364− {model: quickListModel, appId: quickListAppId})
360+ quickList.item = selectedItem;
361+ quickList.model = launcherListView.model.get(draggedIndex).quickList;
362+ quickList.appId = launcherListView.model.get(draggedIndex).appId;
363+ quickList.state = "open";
365364
366365 launcherListView.interactive = false
367366
368367 var yOffset = draggedIndex > 0 ? (mouseY + launcherListView.realContentY) % (draggedIndex * launcherListView.realItemHeight) : mouseY + launcherListView.realContentY
369368
370369 fakeDragItem.iconName = launcherListView.model.get(draggedIndex).icon
371− fakeDragItem.x = 0
370+ fakeDragItem.x = units.gu(0.5)
372371 fakeDragItem.y = mouseY - yOffset + launcherListView.anchors.topMargin + launcherListView.topMargin
373372 fakeDragItem.angle = selectedItem.angle * (root.inverted ? -1 : 1)
374373 fakeDragItem.offset = selectedItem.offset * (root.inverted ? -1 : 1)
@@ -387,7 +386,7 @@ Item {
387386 var distance = Math.max(Math.abs(mouseX - startX), Math.abs(mouseY - startY))
388387 if (!preDragging && distance > units.gu(1.5)) {
389388 preDragging = true;
390− PopupUtils.close(quickListPopover)
389+ quickList.state = "";
391390 }
392391 if (distance > launcherListView.itemHeight) {
393392 selectedItem.dragging = true
@@ -482,53 +481,95 @@ Item {
482481 }
483482 }
484483
485− Component {
486− id: popoverComponent
484+ UbuntuShapeForItem {
485+ id: quickListShape
486+ objectName: "quickListShape"
487+ anchors.fill: quickList
488+ opacity: quickList.state === "open" ? 0.8 : 0
489+ visible: opacity > 0
490+ rotation: root.rotation
491+
492+ Behavior on opacity {
493+ UbuntuNumberAnimation {}
494+ }
495+
496+ image: quickList
497+
498+ Image {
499+ anchors {
500+ right: parent.left
501+ rightMargin: -units.dp(4)
502+ verticalCenter: parent.verticalCenter
503+ verticalCenterOffset: -quickList.offset
504+ }
505+ height: units.gu(1)
506+ width: units.gu(2)
507+ source: "graphics/quicklist_tooltip.png"
508+ rotation: 90
509+ }
510+
511+ InverseMouseArea {
512+ anchors.fill: parent
513+ enabled: quickList.state == "open"
514+ onClicked: {
515+ quickList.state = ""
516+ }
517+ }
518+
519+ }
520+
521+ Rectangle {
522+ id: quickList
523+ objectName: "quickList"
524+ color: "#221e1c"
525+ width: units.gu(30)
526+ height: quickListColumn.height
527+ anchors {
528+ left: root.inverted ? undefined : parent.right
529+ right: root.inverted ? parent.left : undefined
530+ margins: units.gu(1)
487531
488− Popover {
489− id: popover
490− property var model
491− property string appId
492− contentWidth: quickListColumn.width
493− foregroundStyle: QuicklistForegroundStyle {}
532+ }
533+ y: itemCenter - (height / 2) + offset
534+ rotation: root.rotation
494535
495− // FIXME: There's a bug in the Popover positioning that it covers the item in case it is rotated.
496− // https://bugs.launchpad.net/ubuntu-ui-toolkit/+bug/1204470
497− // For now, let's move the Popover around with callerMargin.
498− // Remove popupMargin once the bug is fixed.
499− property int popupMargin: root.inverted ? launcherListView.itemHeight : 0;
536+ property var model
537+ property string appId
538+ property var item
500539
501− callerMargin: units.gu(1) + popupMargin
540+ // internal
541+ property int itemCenter: item ? root.mapFromItem(quickList.item).y + (item.height / 2) : units.gu(1)
542+ property int offset: itemCenter + (height/2) + units.gu(1) > parent.height ? -itemCenter - (height/2) - units.gu(1) + parent.height :
543+ itemCenter - (height/2) < units.gu(1) ? (height/2) - itemCenter + units.gu(1) : 0
502544
503− Column {
504− id: quickListColumn
505− width: units.gu(30)
506− height: childrenRect.height
545+ Column {
546+ id: quickListColumn
547+ width: parent.width
548+ height: childrenRect.height
507549
508− Repeater {
509− id: popoverRepeater
510− model: popover.model
550+ Repeater {
551+ id: popoverRepeater
552+ model: quickList.model
511553
512− ListItems.Standard {
513− objectName: "quickListEntry" + index
514− text: (model.clickable ? "" : "<b>") + model.label + (model.clickable ? "" : "</b>")
515− highlightWhenPressed: model.clickable
554+ ListItems.Standard {
555+ objectName: "quickListEntry" + index
556+ text: (model.clickable ? "" : "<b>") + model.label + (model.clickable ? "" : "</b>")
557+ highlightWhenPressed: model.clickable
516558
517− // FIXME: This is a workaround for the theme not being context sensitive. I.e. the
518− // ListItems don't know that they are sitting in a themed Popover where the color
519− // needs to be inverted.
520− __foregroundColor: Theme.palette.selected.backgroundText
559+ // FIXME: This is a workaround for the theme not being context sensitive. I.e. the
560+ // ListItems don't know that they are sitting in a themed Popover where the color
561+ // needs to be inverted.
562+ __foregroundColor: Theme.palette.selected.backgroundText
521563
522− onClicked: {
523− if (!model.clickable) {
524− return;
525− }
526− PopupUtils.close(popover);
527− // Unsetting model to prevent showing changing entries during fading out
528− // that may happen because of triggering an action.
529− LauncherModel.quickListActionInvoked(appId, index);
530− popoverRepeater.model = undefined;
564+ onClicked: {
565+ if (!model.clickable) {
566+ return;
531567 }
568+ quickList.state = "";
569+ // Unsetting model to prevent showing changing entries during fading out
570+ // that may happen because of triggering an action.
571+ LauncherModel.quickListActionInvoked(quickList.appId, index);
572+ quickList.model = undefined;
532573 }
533574 }
534575 }
Notifications/Notification.qml+5−8
@@ -23,7 +23,7 @@ import Utils 0.1
2323UbuntuShape {
2424 id: notification
2525
26− property alias iconSource: avatarIcon.source
26+ property alias iconSource: icon.fileSource
2727 property alias secondaryIconSource: secondaryIcon.source
2828 property alias summary: summaryLabel.text
2929 property alias body: bodyLabel.text
@@ -34,12 +34,13 @@ UbuntuShape {
3434 property var notification
3535
3636 objectName: "background"
37− implicitHeight: contentColumn.height + contentColumn.spacing * 2
37+ implicitHeight: type != Notification.PlaceHolder ? contentColumn.height + contentColumn.spacing * 2 : 0
3838 color: Qt.rgba(0.132, 0.117, 0.109, 0.97)
3939 opacity: 0
4040 radius: "medium"
4141
4242 clip: true
43+ visible: type != Notification.PlaceHolder
4344
4445 UnityMenuModelPaths {
4546 id: paths
@@ -101,18 +102,14 @@ UbuntuShape {
101102 right: parent.right
102103 }
103104
104− UbuntuShape {
105+ ShapedIcon {
105106 id: icon
106107
107108 objectName: "icon"
108109 width: units.gu(6)
109110 height: units.gu(6)
111+ shaped: notification.hints["x-canonical-non-shaped-icon"] == "true" ? false : true
110112 visible: iconSource !== undefined && iconSource != ""
111− image: Image {
112− id: avatarIcon
113−
114− fillMode: Image.PreserveAspectCrop
115− }
116113 }
117114
118115 Image {
Notifications/NotificationMenuItemFactory.qml+20−6
@@ -54,7 +54,8 @@ Loader {
5454
5555 Component.onCompleted: {
5656 menuModel.loadExtendedAttributes(menuIndex, {"x-echo-mode-password": "bool"});
57− textfield.echoMode = menuData.ext.xEchoModePassword ? TextInput.Password : TextInput.Normal
57+ checkBox.checked = menuData.ext.xEchoModePassword ? false : true
58+ checkBoxRow.visible = menuData.ext.xEchoModePassword
5859 }
5960
6061 Label {
@@ -65,11 +66,29 @@ Loader {
6566 id: textfield
6667
6768 anchors.left: parent.left; anchors.right: parent.right
69+ echoMode: checkBox.checked ? TextInput.Normal : TextInput.Password
6870 height: units.gu(5)
6971 onTextChanged: {
7072 menuModel.changeState(menuIndex, text);
7173 }
7274 }
75+
76+ Row {
77+ id: checkBoxRow
78+
79+ spacing: units.gu(.5)
80+
81+ CheckBox {
82+ id: checkBox
83+
84+ checked: false
85+ }
86+
87+ Label {
88+ anchors.verticalCenter: checkBox.verticalCenter
89+ text: i18n.tr("Show password")
90+ }
91+ }
7392 }
7493 }
7594
@@ -78,11 +97,6 @@ Loader {
7897 PinLockscreen {
7998 anchors.left: parent.left; anchors.right: parent.right
8099
81− Component.onCompleted: {
82− menuModel.loadExtendedAttributes(menuIndex, {'x-canonical-pin-length': 'int'});
83− pinLength = menuData.ext.xCanonicalPinLength;
84− }
85−
86100 onEntered: {
87101 menuModel.changeState(menuIndex, passphrase);
88102 entryEnabled = false;
plugins/Unity/ratingoptionsmodel.cpp → Notifications/ShapedIcon.qmlrenamed+20−13
@@ -1,9 +1,6 @@
11/*
22 * Copyright (C) 2013 Canonical, Ltd.
33 *
4− * Authors:
5− * Pawel Stolowski <pawel.stolowski@canonical.com>
6− *
74 * This program is free software; you can redistribute it and/or modify
85 * it under the terms of the GNU General Public License as published by
96 * the Free Software Foundation; version 3.
@@ -17,17 +14,27 @@
1714 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1815 */
1916
20−// self
21−#include "ratingoptionsmodel.h"
17+import QtQuick 2.0
18+import Ubuntu.Components 0.1
19+
20+Item {
21+ property string fileSource
22+ property bool shaped
23+
24+ UbuntuShape {
25+ objectName: "shapedIcon"
26+ anchors.fill: parent
27+ visible: shaped
28+ image: realImage
29+ }
2230
23−// local
24−#include "ratingfilteroption.h"
31+ Image {
32+ id: realImage
2533
26−RatingOptionsModel::RatingOptionsModel(bool showAllOption, QObject *parent) :
27− GenericOptionsModel(showAllOption, parent)
28−{
29− for (int i=1; i<=5; i++) {
30− auto opt = new RatingFilterOption(QString::number(i), i*0.2f, this);
31− addOption(opt);
34+ objectName: "nonShapedIcon"
35+ anchors.fill: parent
36+ visible: !shaped
37+ source: fileSource
38+ fillMode: Image.PreserveAspectCrop
3239 }
3340}
Panel/Indicators.qml+37−10
@@ -21,7 +21,6 @@ import Unity.Indicators 0.1 as Indicators
2121
2222import "../Components"
2323import "../Components/ListItems"
24−import "../Components/Math.js" as MathLocal
2524
2625Showable {
2726 id: indicators
@@ -38,6 +37,7 @@ Showable {
3837 property bool partiallyOpened: height > panelHeight && !fullyOpened
3938 property real visualBottom: Math.max(y+height, y+indicatorRow.y+indicatorRow.height)
4039 property bool contentEnabled: true
40+ property bool initalizeItem: true
4141 readonly property alias content: menuContent
4242
4343 // TODO: Perhaps we need a animation standard for showing/hiding? Each showable seems to
@@ -64,14 +64,13 @@ Showable {
6464 }
6565
6666 height: panelHeight
67+ onHeightChanged: updateRevealProgressState(indicators.height - panelHeight, true)
6768
68− onHeightChanged: {
69− // need to use handle.get_height(). As the handle height depends on indicators.height changes (but this is called first!)
70− var revealProgress = indicators.height - panelHeight
69+ function updateRevealProgressState(revealProgress, enableRelease) {
7170 if (!showAnimation.running && !hideAnimation.running) {
72− if (revealProgress == 0) {
71+ if (revealProgress === 0) {
7372 indicators.state = "initial";
74− } else if (revealProgress <= hintValue) {
73+ } else if (revealProgress > 0 && revealProgress <= hintValue) {
7574 indicators.state = "hint";
7675 } else if (revealProgress > hintValue && revealProgress < lockThreshold) {
7776 indicators.state = "reveal";
@@ -80,7 +79,7 @@ Showable {
8079 }
8180 }
8281
83− if (revealProgress == 0) {
82+ if (enableRelease && revealProgress === 0) {
8483 menuContent.releaseContent();
8584 }
8685 }
@@ -100,14 +99,14 @@ Showable {
10099 Otherwise it contains the bar's location as a fraction of the distance between hintValue (is 0) and lockThreshold (is 1).
101100 */
102101 var verticalProgress =
103− MathLocal.clamp((indicators.height - handle.height - hintValue) /
102+ MathUtils.clamp((indicators.height - handle.height - hintValue) /
104103 (lockThreshold - hintValue), 0, 1);
105104
106105 /*
107106 Vertical velocity check. Don't change the indicator if we're moving too quickly.
108107 */
109108 var verticalSpeed = Math.abs(yVelocityCalculator.calculate());
110− if (verticalSpeed >= 0.05 && indicatorRow.currentItem!=null) {
109+ if (verticalSpeed >= 0.05 && !initalizeItem) {
111110 return;
112111 }
113112
@@ -147,6 +146,7 @@ Showable {
147146 } else if (!currentItem) {
148147 indicatorRow.setDefaultItem();
149148 }
149+ initalizeItem = indicatorRow.currentItem == null;
150150 }
151151
152152 // eater
@@ -282,6 +282,33 @@ Showable {
282282 enableIndexChangeSignal = oldActive;
283283 }
284284 }
285+
286+ EdgeDragArea {
287+ id: rowDragArea
288+ anchors.fill: indicatorRow
289+ direction: Direction.Downwards
290+ maxSilenceTime: 2000
291+ distanceThreshold: 0
292+
293+ enabled: fullyOpened
294+ onDraggingChanged: {
295+ if (dragging) {
296+ initalizeItem = true;
297+ updateRevealProgressState(Math.max(touchSceneY - panelHeight, hintValue), false);
298+ indicators.calculateCurrentItem(touchX, false);
299+ } else {
300+ indicators.state = "commit";
301+ }
302+ }
303+
304+ onTouchXChanged: {
305+ indicators.calculateCurrentItem(touchX, true);
306+ }
307+ onTouchSceneYChanged: {
308+ updateRevealProgressState(Math.max(touchSceneY - panelHeight, hintValue), false);
309+ yVelocityCalculator.trackedPosition = touchSceneY;
310+ }
311+ }
285312 }
286313
287314 Connections {
@@ -298,7 +325,7 @@ Showable {
298325 onRunningChanged: {
299326 if (hideAnimation.running) {
300327 indicators.state = "initial";
301− indicatorRow.currentItem = null;
328+ initalizeItem = true;
302329 }
303330 }
304331 }
Panel/Indicators/DefaultIndicatorWidget.qml+32−10
@@ -24,7 +24,7 @@ import Unity.Indicators 0.1 as Indicators
2424Indicators.IndicatorWidget {
2525 id: indicatorWidget
2626
27− width: itemRow.width + units.gu(0.5)
27+ width: itemRow.width
2828
2929 property alias leftLabel: itemLeftLabel.text
3030 property alias rightLabel: itemRightLabel.text
@@ -32,16 +32,17 @@ Indicators.IndicatorWidget {
3232
3333 Row {
3434 id: itemRow
35+ width: childrenRect.width
3536 objectName: "itemRow"
3637 anchors {
3738 top: parent.top
3839 bottom: parent.bottom
3940 horizontalCenter: parent.horizontalCenter
4041 }
41− spacing: units.gu(0.5)
4242
4343 Label {
4444 id: itemLeftLabel
45+ width: guRoundUp(implicitWidth)
4546 objectName: "leftLabel"
4647 color: Theme.palette.selected.backgroundText
4748 opacity: 0.8
@@ -57,25 +58,35 @@ Indicators.IndicatorWidget {
5758 top: parent.top
5859 bottom: parent.bottom
5960 }
60− spacing: units.gu(0.5)
6161
6262 Repeater {
6363 model: indicatorWidget.icons
6464
65− Image {
66− id: itemImage
67− objectName: "itemImage"
68− visible: source != ""
69− source: modelData
65+ Item {
66+ width: guRoundUp(itemImage.width)
7067 height: indicatorWidget.iconSize
71− width: indicatorWidget.iconSize
72− anchors.verticalCenter: parent.verticalCenter
68+
69+ Image {
70+ id: itemImage
71+ objectName: "itemImage"
72+ visible: source != ""
73+ source: modelData
74+ height: parent.height
75+ anchors.horizontalCenter: parent.horizontalCenter
76+ fillMode: Image.PreserveAspectFit
77+
78+ sourceSize {
79+ width: indicatorWidget.iconSize
80+ height: indicatorWidget.iconSize
81+ }
82+ }
7383 }
7484 }
7585 }
7686
7787 Label {
7888 id: itemRightLabel
89+ width: guRoundUp(implicitWidth)
7990 objectName: "rightLabel"
8091 color: Theme.palette.selected.backgroundText
8192 opacity: 0.8
@@ -86,6 +97,17 @@ Indicators.IndicatorWidget {
8697 }
8798 }
8899
100+ // TODO: Use toolkit function https://bugs.launchpad.net/ubuntu-ui-toolkit/+bug/1242575
101+ function guRoundUp(width) {
102+ if (width == 0) {
103+ return 0;
104+ }
105+ var gu1 = units.gu(1.0);
106+ var mod = (width % gu1);
107+
108+ return mod == 0 ? width : width + (gu1 - mod);
109+ }
110+
89111 onRootActionStateChanged: {
90112 if (rootActionState == undefined) {
91113 leftLabel = "";
Panel/Indicators/client/IndicatorsTree.qml+2−3
@@ -29,10 +29,9 @@ Page {
2929
3030 property string busName: unityModel.busName
3131 property string actionsObjectPath
32− property var menuObjectPaths: undefined
33− readonly property string device: "phone"
32+ property string menuObjectPath
3433
35− property string deviceMenuObjectPath: menuObjectPaths.hasOwnProperty(device) ? menuObjectPaths[device] : ""
34+ property string deviceMenuObjectPath: menuObjectPath
3635
3736 function start() {
3837 }
Shell.qml+35−12
@@ -30,7 +30,6 @@ import "Launcher"
3030import "Panel"
3131import "Hud"
3232import "Components"
33−import "Components/Math.js" as MathLocal
3433import "Bottombar"
3534import "SideStage"
3635import "Notifications"
@@ -62,8 +61,6 @@ FocusScope {
6261 }
6362 }
6463
65− property ListModel searchHistory: SearchHistoryModel {}
66−
6764 property var applicationManager: ApplicationManagerWrapper {}
6865
6966 Binding {
@@ -99,21 +96,21 @@ FocusScope {
9996 }
10097 }
10198
102− function activateApplication(desktopFile, argument) {
99+ function activateApplication(appId, argument) {
103100 if (applicationManager) {
104101 // For newly started applications, as it takes them time to draw their first frame
105102 // we add a delay before we hide the animation screenshots to compensate.
106− var addDelay = !applicationManager.getApplicationFromDesktopFile(desktopFile);
103+ var addDelay = !applicationManager.getApplicationFromDesktopFile(appId);
107104
108105 var application;
109− application = applicationManager.activateApplication(desktopFile, argument);
106+ application = applicationManager.activateApplication(appId, argument);
110107 if (application == null) {
111108 return;
112109 }
113110 if (application.stage == ApplicationInfo.MainStage || !sideStage.enabled) {
114− mainStage.activateApplication(desktopFile, addDelay);
111+ mainStage.activateApplication(appId, addDelay);
115112 } else {
116− sideStage.activateApplication(desktopFile, addDelay);
113+ sideStage.activateApplication(appId, addDelay);
117114 }
118115 stages.show();
119116 }
@@ -237,7 +234,7 @@ FocusScope {
237234 Behavior on x {SmoothedAnimation{velocity: 600}}
238235
239236 property real showProgress:
240− MathLocal.clamp(1 - (x + stages.x) / shell.width, 0, 1)
237+ MathUtils.clamp(1 - (x + stages.x) / shell.width, 0, 1)
241238
242239 Showable {
243240 id: stages
@@ -402,6 +399,10 @@ FocusScope {
402399
403400 Lockscreen {
404401 id: lockscreen
402+ objectName: "lockscreen"
403+
404+ readonly property int backgroundTopMargin: -panel.panelHeight
405+
405406 hides: [launcher, panel.indicators, hud]
406407 shown: false
407408 enabled: true
@@ -413,7 +414,7 @@ FocusScope {
413414 height: parent.height - panel.panelHeight
414415 background: shell.background
415416
416− onUnlocked: lockscreen.hide()
417+ onEntered: LightDM.Greeter.respond(passphrase);
417418 onCancel: greeter.show()
418419
419420 Component.onCompleted: {
@@ -439,6 +440,17 @@ FocusScope {
439440 lockscreen.show();
440441 }
441442 }
443+
444+ onAuthenticationComplete: {
445+ if (LightDM.Greeter.promptless) {
446+ return;
447+ }
448+ if (LightDM.Greeter.authenticated) {
449+ lockscreen.hide();
450+ } else {
451+ lockscreen.clear(true);
452+ }
453+ }
442454 }
443455
444456 Greeter {
@@ -647,20 +659,31 @@ FocusScope {
647659 Launcher {
648660 id: launcher
649661
662+ readonly property bool dashSwipe: progress > 0
663+
650664 anchors.top: parent.top
651665 anchors.bottom: parent.bottom
652666 width: parent.width
653667 dragAreaWidth: shell.edgeSize
654668 available: (!greeter.shown || greeter.narrowMode) && edgeDemo.launcherEnabled
655− onDashItemSelected: showHome()
669+
670+ onDashItemSelected: {
671+ if (edgeDemo.running)
672+ return;
673+
674+ showHome()
675+ }
656676 onDash: {
657677 if (stages.shown) {
658− dash.setCurrentScope("applications.scope", true /* animate */, true /* reset */)
659678 stages.hide();
660679 launcher.hide();
661680 }
662681 }
682+ onDashSwipeChanged: if (dashSwipe && stages.shown) dash.setCurrentScope("applications.scope", false, true)
663683 onLauncherApplicationSelected:{
684+ if (edgeDemo.running)
685+ return;
686+
664687 greeter.hide()
665688 shell.activateApplication(appId)
666689 }
build+1
@@ -50,6 +50,7 @@ install_dependencies() {
5050 ubuntu-mobile-icons \
5151 unity-scope-home \
5252 unity-lens-applications \
53+ unity-plugin-scopes \
5354 || exit 5
5455}
5556
cmake/modules/Plugins.cmake+3−3
@@ -28,7 +28,7 @@ macro(export_qmlfiles PLUGIN PLUGIN_SUBPATH)
2828
2929 # install the qmlfiles file.
3030 install(FILES ${QMLFILES}
31− DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/${PLUGIN_SUBPATH}
31+ DESTINATION ${SHELL_INSTALL_QML}/${PLUGIN_SUBPATH}
3232 )
3333endmacro(export_qmlfiles)
3434
@@ -56,12 +56,12 @@ macro(export_qmlplugin PLUGIN VERSION PLUGIN_SUBPATH)
5656
5757 # install the qmltypes file.
5858 install(FILES ${CMAKE_BINARY_DIR}/plugins/${PLUGIN_SUBPATH}/plugin.qmltypes
59− DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/${PLUGIN_SUBPATH}
59+ DESTINATION ${SHELL_INSTALL_QML}/${PLUGIN_SUBPATH}
6060 )
6161 endif()
6262
6363 # install the additional targets
6464 install(TARGETS ${qmlplugin_TARGETS}
65− DESTINATION ${SHELL_PRIVATE_LIBDIR}/qml/${PLUGIN_SUBPATH}
65+ DESTINATION ${SHELL_INSTALL_QML}/${PLUGIN_SUBPATH}
6666 )
6767endmacro(export_qmlplugin)
cmake/modules/autopilot.cmake+1−1
@@ -2,7 +2,7 @@ add_custom_target(autopilot)
22
33function(declare_autopilot_test TEST_NAME TEST_SUITE WORKING_DIR)
44 add_custom_target(autopilot-${TEST_NAME}
5− COMMAND LANG=C UBUNTU_ICON_THEME=ubuntu-mobile QML2_IMPORT_PATH=${SHELL_PRIVATE_LIBDIR}/qml/mocks autopilot run ${TEST_SUITE}
5+ COMMAND LANG=C UBUNTU_ICON_THEME=ubuntu-mobile QML2_IMPORT_PATH=${SHELL_INSTALL_QML}/mocks autopilot run ${TEST_SUITE}
66 WORKING_DIRECTORY ${WORKING_DIR}
77 DEPENDS install
88 )
data/unity8-setcap.confdeleted−32
@@ -1,32 +0,0 @@
1−# unity8-setcap - ugly hacks to arrange for /usr/bin/unity8 to have CAP_SYS_RESOURCE
2−
3−# XXX replace me with some root-helper to gain CAP_SYS_RESOURCE XXX
4−
5−author "Loïc Minier <loic.minier@ubuntu.com>"
6−description "Ugly hacks to arrange for /usr/bin/unity8 to have CAP_SYS_RESOURCE"
7−
8−# start when first boot-hooks event is emitted and before lightdm (lightdm
9−# starts ubuntu-touch-session which starts unity8); note that /run is
10−# guaranteeds to be be there because lightdm starts on filesystem
11−start on boot-hooks and starting lightdm
12−
13−# NOT a task as otherwise this would block restarting lightdm
14−
15−env RUNDIR=/run/unity8-setcap
16−
17−# work needs to be done in pre-start as this really is a job with nothing to
18−# start
19−pre-start script
20− if [ ! -e "$RUNDIR" ]; then
21− mkdir "$RUNDIR"
22− # /run is noexec, hence mounting another tmpfs exec
23− # NB: unity8 is 35K; 512K should be enough for everyone
24− mount -o rw,nosuid,nodev,exec,relatime,mode=755,size=512k -t tmpfs tmpfs "$RUNDIR"
25− cp -a /usr/bin/unity8 "$RUNDIR"
26− setcap CAP_SYS_RESOURCE=+ep "$RUNDIR/unity8"
27− # bind-mount this back as unity8 checks dirname(argv[0]'s) == /usr to
28− # decide whether it's installed or not
29− mount --bind "$RUNDIR/unity8" /usr/bin/unity8
30− fi
31−end script
32−
data/unity8.conf+21
@@ -5,5 +5,26 @@ start on ((xsession SESSION=ubuntu-touch) or (xsession SESSION=ubuntu-touch-surf
55stop on desktop-end
66
77respawn
8+expect stop
9+
10+pre-start script
11+ if [ -n "$MIR_SOCKET" ]; then
12+ if [ -z "$UNITY_MIR_SOCKET" ]; then
13+ # Save original value of MIR_SOCKET in case we are restarted,
14+ # as we modify the variable for future jobs, including ourself.
15+ UNITY_MIR_SOCKET=$MIR_SOCKET
16+ initctl set-env --global UNITY_MIR_SOCKET=$UNITY_MIR_SOCKET
17+ fi
18+
19+ # Point unity8 at unity-system-compositor
20+ MIR_SERVER_FILE=$XDG_RUNTIME_DIR/mir_socket
21+ initctl set-env MIR_SERVER_FILE=$MIR_SERVER_FILE
22+ initctl set-env MIR_SERVER_HOST_SOCKET=$UNITY_MIR_SOCKET
23+
24+ # Point all future jobs in this session to our Mir socket instead of
25+ # unity-system-compositor's socket.
26+ initctl set-env --global MIR_SOCKET=$MIR_SERVER_FILE
27+ fi
28+end script
829
930exec ${BINARY:-unity8} $ARGS
debian/changelog+395−2
@@ -1,8 +1,401 @@
1−unity8 (7.83) UNRELEASED; urgency=low
1+unity8 (7.84+14.04.20131206.1-0ubuntu1) trusty; urgency=low
22
3+ [ Michal Hruby ]
4+ * Ensure DashContent's ListView's currentItem is set if the model is
5+ not empty.
6+
7+ [ Michał Sawicz ]
8+ * Don't generate build-deps .deb twice and allow overriding
9+ QML2_IMPORT_PATH in ./run.
10+
11+ [ Albert Astals ]
12+ * Remove unused Applications/ folder .
13+ * Implement an 'interface' for Dash Renderers.
14+ * Use deelistmodel's conversion method Instead of a copy of the code .
15+ * Remove icons we don't use .
16+ * Do not start apps or go to dash on demo If you are pulling the
17+ launcher out while in demo mode it doesn't make sense to let you
18+ start applications. Besides it locks you out because it starts the
19+ app and the demo is still not finished so you can't really use any
20+ of the edges to escape Bug #1233696. (LP: #1233696)
21+ * Add a test for the carousel showing the preview when being clicked .
22+ * Fix collapsing of categories not working and the
23+ expansion/collapsing animation +test.
24+
25+ [ Timo Jyrinki ]
26+ * Depend on either Qt 5.2 or libqt5v8-5-private-dev.
27+ * qtdeclarative5-private-dev 5.0.2-6ubuntu5 now depends directly on Qt
28+ V8 private headers. The remaining "qtdeclarative5-private-dev"
29+ dependency is enough now both when compiling against 5.0.2 or 5.2.
30+
31+ [ Pete Woods ]
32+ * Handle optional parameterized action properties. (LP: #1256258)
33+
34+ [ Andrea Cimitan ]
35+ * Implement an 'interface' for Dash Renderers.
36+
37+ [ Michael Zanetti ]
38+ * Added music preview.
39+ * rename some parameters from desktopFile to appId as scopes are now
40+ changed to give us the appId.
41+ * unhardcode launcher's search paths for .desktop files.
42+ * Enable teasing of the phone greeter even though we have a
43+ lockscreen.
44+ * check if variant is valid to avoid asserting in debug mode when the
45+ connection to AccountsService doesn't work for some reason .
46+
47+ [ Michael Terry ]
48+ * Add the DBus greeter API from the desktop greeter into the unity8
49+ greeter.
50+
51+ [ Daniel d'Andrada ]
52+ * Dash: disable close mode when you click outside app thumbnails To
53+ leave the termination mode you can now just mouse/touch press
54+ anywhere outside the running applications' thumbnails The other way,
55+ which still works, is long-pressing a thumbnail once more. (LP:
56+ #1193414)
57+
58+ [ Ubuntu daily release ]
59+ * Automatic snapshot from revision 579
60+
61+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Fri, 06 Dec 2013 13:15:57 +0000
62+
63+unity8 (7.84+14.04.20131128.2-0ubuntu1) trusty; urgency=low
64+
65+ [ Michal Hruby ]
66+ * Depend on the separate scopes plugin
67+ * Move the BottomBar* DBus communicator to the Utils plugin.
68+
69+ [ Michał Sawicz ]
70+ * Wait for DashHome to be available in tst_Shell. (LP: #1254898)
71+ * Use plugindir from unity-shell-api.pc.
72+ * Expect stop in upstart job and raise in case of surfaceflinger. (LP:
73+ #1239876)
74+
75+ [ Albert Astals ]
76+ * Fix time test in Qt 5.2 Make factors an array instead of a
77+ object/dict Objects/dicts are unordered by definition, it happened
78+ that Qt 5.0 gave them in the orrder we wanted, but with Qt 5.2 is
79+ failing, and we don't even need the "key", so array works as well
80+ :).
81+ * Test that the dash hswipe is disabled while the inner stuff is
82+ moving .
83+ * Skip restMaximizeVisibleAreaMoveUpAndShowHeader, it's causing too
84+ many failed runs And we are confident it's failing because of the
85+ suboptimal scenegraph run in 5.0.x.
86+ * Make Dash::test_show_scope_on_load more robust If we are testing
87+ showScopeOnLoaded make sure we force a scope reload after we set it,
88+ otherwise it may just happen that the scope has already been loaded
89+ and the expectaction that we'll change the list to it is just wrong.
90+ * Dash renderer signals: No need to pass the model up and down Whoever
91+ is listening to the signal has access to the item that emits the
92+ signal and has the model right there accessible if needs it.
93+ * LVWPH: Fix header going bad when setContentHeight ends up moving the
94+ viewport How to reproduce the bug easily without the patch: * In the
95+ Dash Home, search for london * Scroll to the bottom * Start moving
96+ to the apps scope very slowly * At around 3/4 of the move you'll see
97+ the header in the home scope went to a bad position * Go back to the
98+ Dash Home. (LP: #1237942, #1246351)
99+ * Remove unused AppInfo and VideoInfo files .
100+ * Kill unused ApplicationsFilterGrid.qml .
101+ * Unify ScopeView and GenericScopeView .
102+ * Fix header getting lost as per bug 1245824. (LP: #1245824)
103+ * Remove unused Time.js and its test .
104+ * Do not include the QtQml megaheader Include only qqml.h which is
105+ what we need in these files.
106+ * Don't do stuff if our parent context is gone We'll be gone soon too
107+ (and crash probably) so don't do anything. This looks a bit like a
108+ workaround, wait for 5.2 better painting/dispatching loop to see if
109+ this is not needed anymore, we find a better way to do it, or we
110+ decide this is fine.
111+
112+ [ Lars Uebernickel ]
113+ * Allow setting different indicator positions for different profiles.
114+
115+ [ Mirco Müller ]
116+ * Added checkbox for toggling between echo-modes of password-
117+ entryfields in ext. snap-decisions.
118+ * Fixes bug #1200569. (LP: #1200569)
119+
120+ [ Andrea Cimitan ]
121+ * Switch to application scope when a dash swipe is taking place and an
122+ app is on foreground. (LP: #1231996)
123+ * Shifts wallpaper rendering for greeter lockscreen to be inline with
124+ shell. (LP: #1231731)
125+ * Dinamically load the Carousel/Filtergrid with more than 6 items.
126+ (LP: #1226288, #1234105)
127+ * Removes Math.js and its usage. Use SDK ones.
128+
129+ [ Gerry Boland ]
130+ * DragHandle: javascript argument name clashes with local variable.
131+ Yes it works, but is a little unsafe.
132+
133+ [ Nick Dedekind ]
134+ * Added UnityMenuModel submenu row removal awareness in
135+ UnityMenuModelStack.
136+ * Round indicator widget icon/label width up to closest gu for
137+ alignment. (LP: #1236267)
138+ * Indicator re-select by dragging from top when fully opened. (LP:
139+ #1213164)
140+ * Fixed a race condition causing search history popup to show up when
141+ it shouldn't. (LP: #1249369)
142+
143+ [ Christopher Lee ]
144+ * Unity8 tests now make use of the helper functions (added in the pre-
145+ req branch) so that the helper functions are tested as part of daily
146+ business.
147+
148+ [ Daniel d'Andrada ]
149+ * Improve DirectionalDragArea Removed Rejected status, simplifying
150+ state machine. Added compositionTime property. Multi-finger
151+ scenarios are better handled now. Refactored TimeSource in
152+ Ubuntu.Gestures plugin. Added an easy way to debug
153+ DirectionalDragArea by having switchable debug prints. Updated tests
154+ to also simulate the passage of time. Use touch point scene
155+ coordinates for gesture recognition so that moving the.
156+ DirectionalDragArea (as in a hinting DragHandle) won't affect it.
157+ (LP: #1228336)
158+ * Add right-edge drag hinting to Greeter To match with the existing
159+ teasing animation when you tap on the right half of the Greeter.
160+ Also has the side benefit of making the code look a bit nicer.
161+ * Refactor Ubuntu.Gesture tests to share common logic Take the common
162+ part out of tst_DirectionalDragArea and put it into a separate base
163+ class, GestureTest, so that it can be shared with other, future,
164+ tests. In CMakeLists.txt, create a macro out of DirectionalDragArea
165+ build script to be used by future tests with similar requirements
166+ and structure. Also add the "m_" prefix to member variables.
167+ * Remove dead code from Utils plugin They are not being used anywhere.
168+
169+ [ Michael Terry ]
170+ * Make EdgeDemoOverlay test more reliable by testing for what we
171+ really care about, not an indirect indicator of it. (LP: #1248232)
172+ * Explicitly set MIR_SOCKET for other upstart jobs, rather than
173+ relying on the default socket, since that won't work once we move to
174+ a nested Mir.
175+
176+ [ Michael Zanetti ]
177+ * don't add margins to RunningApplicationTile's label. (LP: #1245482)
178+ * allow SIM PIN entry to have a variable pin length (by adding a done-
179+ button). (LP: #1240561)
180+ * fix launcher wording for pinning actions. (LP: #1240891)
181+ * fix preview background positioning don't explicitly take originY
182+ into account as it's already in there implicitly. make sure we don't
183+ split the openeffect in a place where it can be covered by the
184+ header.
185+ * fix album artwork containing / in the name. (LP: #1237829)
186+ * small launcher tweaks fix fakeDragItem's initial position to match
187+ with real item. remove UbuntuShape's border glow. .
188+ * drop all references to LighDM from the Lockscreen This should make
189+ it generic enough to allow reusing it for SIM PIN entry .
190+
191+ [ Omer Akram ]
192+ * make the non working code in the screen unlocker helper work.
193+
194+ [ Nicolas d'Offay ]
195+ * Pushed up the z order of the clock in GreeterContent. (LP: #1233146)
196+ * Search history is now persistent across all scopes and remains in
197+ QML. (LP: #1226221)
198+
199+ [ Ubuntu daily release ]
200+ * Automatic snapshot from revision 556
201+
202+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Thu, 28 Nov 2013 18:09:17 +0000
203+
204+unity8 (7.83+14.04.20131106-0ubuntu1) trusty; urgency=low
205+
206+ [ Andrea Cimitan ]
207+ * Place ShaderEffectSource of UbuntuShapeForItem under the Shape Item.
208+ (LP: #1239317)
209+
210+ [ Omer Akram ]
211+ * test: make sure the search indicator hides when an app has focus.
212+
213+ [ Nick Dedekind ]
214+ * Fixed indicator slider menu item alignment to label field and icon.
215+ (LP: #1240756)
216+
217+ [ chris.gagnon ]
218+ * Update to autopilot 1.4.
219+
220+ [ Ubuntu daily release ]
221+ * Automatic snapshot from revision 500
222+
223+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Wed, 06 Nov 2013 03:37:02 +0000
224+
225+unity8 (7.83+14.04.20131105.1-0ubuntu1) trusty; urgency=low
226+
227+ [ Michał Sawicz ]
228+ * Implement switching between previews by swiping. (LP: #1220651,
229+ #1088572)
230+
231+ [ Nick Dedekind ]
232+ * Faster loading of indicator menus. (LP: #1226650)
233+
234+ [ Albert Astals ]
235+ * Make sure we have ssh started when we need it .
236+ * Fix a few warnings in DashContent.qml on shutdown
237+ Dash/DashContent.qml:119: TypeError: Cannot read property
238+ 'previewShown' of null Dash/DashContent.qml:120: TypeError: Cannot
239+ read property 'moving' of null .
240+ * Don't use deprecated Panel methods.
241+
242+ [ Christopher Lee ]
243+ * Adds an easy to consume function that attempts to unlock the unity
244+ greeter. (LP: #1240261)
245+
246+ [ Lars Uebernickel ]
247+ * Indicators: add TimeFormatter and use it in the messaging menu This
248+ component can be used to turn a timestamp and a format string into a
249+ string with the corresponding time and format. The string will
250+ change whenever the timezone changes. (LP: #1236413)
251+
252+ [ Andrea Cimitan ]
253+ * Allow drag over bounds, but not overshoot. (LP: #1204300)
254+ * Threshold to activate the left edge swipe to reveal dash is now 26
255+ GU. (LP: #1236286)
256+
257+ [ Michael Zanetti ]
258+ * replace the launcher quicklist's Popover with an own quicklist
259+ implementation The Popover probably won't ever support what the
260+ launcher needs.
261+ * Implement switching between previews by swiping. (LP: #1220651,
262+ #1088572)
263+ * don't trigger the greeter teasing during a movement of the greeter.
264+
265+ [ Ubuntu daily release ]
266+ * Automatic snapshot from revision 495
267+
268+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Tue, 05 Nov 2013 12:22:04 +0000
269+
270+unity8 (7.83+14.04.20131031-0ubuntu1) trusty; urgency=low
271+
272+ [ Michał Sawicz ]
273+ * Use setenv as early as possible to avoid setenv and getenv clashing
274+ in multi-threaded situations. (LP: #1240866)
275+
276+ [ Ubuntu daily release ]
277+ * Automatic snapshot from revision 482
278+
279+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Thu, 31 Oct 2013 20:10:56 +0000
280+
281+unity8 (7.83+14.04.20131028.1-0ubuntu1) trusty; urgency=low
282+
283+ * New rebuild forced
284+ * Automatic snapshot from revision 480
285+
286+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Mon, 28 Oct 2013 22:42:07 +0000
287+
288+unity8 (7.83+14.04.20131028-0ubuntu1) trusty; urgency=low
289+
290+ [ Andrea Cimitan ]
291+ * Fix 1195349 by counting drawbuffer on the newContentX logic of the
292+ carousel When we changed carousel from repeater to listview, we
293+ added drawbuffer. this breaks the logic of newContentX, which was
294+ considered disabled and set to -1. The correct disabled value now
295+ has to take into account the drawbuffer. (LP: #1195349)
296+
297+ [ Christopher Lee ]
298+ * Checks both then env and upstart env for the currently set
299+ XDG_DATA_DIRS so they can be set correctly for the test.
300+
301+ [ Ubuntu daily release ]
302+ * Automatic snapshot from revision 479
303+
304+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Mon, 28 Oct 2013 03:08:59 +0000
305+
306+unity8 (7.83+13.10.20131016.2-0ubuntu1) saucy; urgency=low
307+
308+ [ Loïc Minier ]
309+ * Merge ~lool/unity8/drop-setcap-conf. Drop unity8-setcap.conf as this
310+ breaks desktop installs (no boot-hook event is emitted, boot
311+ stalls); add maintscript snippet to rm_conffile on upgrades; this
312+ boot-hook is now shipped under a different name in lxc-android-
313+ config.
314+
315+ [ Michał Sawicz ]
316+ * Ship a camera-app.desktop file and use a custom XDG_DATA_DIRS for
317+ testing.
318+
319+ [ Ubuntu daily release ]
320+ * Automatic snapshot from revision 472
321+
322+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Wed, 16 Oct 2013 23:15:48 +0000
323+
324+unity8 (7.83+13.10.20131016.1-0ubuntu1) saucy; urgency=low
325+
326+ [ Diego Sarmentero ]
327+ * Disable Preview interaction until the scope responds.
328+
329+ [ Albert Astals ]
330+ * Hide placeholder notification.
331+
332+ [ Ubuntu daily release ]
333+ * Automatic snapshot from revision 469
334+
335+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Wed, 16 Oct 2013 17:29:36 +0000
336+
337+unity8 (7.83+13.10.20131016-0ubuntu1) saucy; urgency=low
338+
339+ [ Loïc Minier ]
340+ * Add upstart job to copy unity8 to a new tmpfs, setcap it, and bind-
341+ mount it back; this is an ugly hack to set CAP_SYS_RESOURCE until we
342+ have a root-helper for it.
343+
344+ [ Michal Hruby ]
345+ * Enable definition of scope back references in overridden results.
346+
347+ [ Ubuntu daily release ]
348+ * Automatic snapshot from revision 466
349+
350+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Wed, 16 Oct 2013 11:29:52 +0000
351+
352+unity8 (7.83+13.10.20131015.4-0ubuntu1) saucy; urgency=low
353+
354+ [ Michał Sawicz ]
3355 * Replace ubuntu-touch-session's unity8.conf upstart job.
356+ * Revert r440 that made the dash collapse animation worse, rather than
357+ better.
358+
359+ [ om26er@ubuntu.com ]
360+ * close the app only when the close button is tapped, not the entire
361+ thumbnail
362+
363+ [ Nick Dedekind ]
364+ * Added missing Unity.Indicator mock objects causing qmltests to fail.
365+ Approved by: Michał Sawicz.
366+
367+ [ Christopher Lee ]
368+ * Launch unity8 for autopilot with upstart, and bring unity8 session
369+ over from session-manager-touch.
370+
371+ [ Pawel Stolowski ]
372+ * Temporarily disable category_order changed signal handling.
373+
374+ [ Daniel d'Andrada ]
375+ * OSKController area shouldn't cover the indicators' bar Since ubuntu-
376+ keyboard surface area doesn't cover the indicators' bar,
377+ OSKController should follow suit. Otherwise the OSKContoller's
378+ internal InputFilterArea (and others) wouldn't perfectly overlap the
379+ graphical keyboard rendered by ubuntu-keyboard (i.e. the opaque part
380+ of ubuntu-keyboard's surface).
381+
382+ [ Michael Zanetti ]
383+ * Initialize initialHeight/Width to height/width depending on scaleTo
384+ add checks for initialWidth/Height in the tests change sizes in
385+ tests to something else than the default for initialWidth/Height in
386+ order to catch failures there more easily
387+
388+ [ Omer Akram ]
389+ * Only show search indicator while the Dash is focued.
390+ * Add 2dp left margin for music and video tiles' title.
391+
392+ [ Nicolas d'Offay ]
393+ * Changed Infographics to use Ubuntu font.
394+
395+ [ Ubuntu daily release ]
396+ * Automatic snapshot from revision 463
4397
5− -- Michał Sawicz <michal.sawicz@canonical.com> Tue, 15 Oct 2013 01:12:45 +0200
398+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Tue, 15 Oct 2013 11:05:04 +0000
6399
7400unity8 (7.82+13.10.20131011.2-0ubuntu1) saucy; urgency=low
8401
debian/control+6−7
@@ -16,11 +16,7 @@ Build-Depends: cmake,
1616 libnih-dev,
1717 libpulse-dev,
1818 libqmenumodel-dev (>= 0.2.7),
19− libqt5v8-5-private-dev,
20− libsigc++-2.0-dev,
21− libunity-api-dev (>= 7.80.3),
22− libunity-core-6.0-dev (>= 7.1.1),
23− libunity-dev (>= 7.0.12),
19+ libunity-api-dev (>= 7.80.4),
2420 libunity-mir-dev,
2521 libunity-scopes-json-def-phone,
2622 libupstart-dev,
@@ -37,6 +33,7 @@ Build-Depends: cmake,
3733 qtbase5-private-dev,
3834 qtdeclarative5-dev,
3935 qtdeclarative5-dev-tools,
36+ qtdeclarative5-qtmultimedia-plugin,
4037 qtdeclarative5-private-dev,
4138 qtdeclarative5-qtquick2-plugin,
4239 qtdeclarative5-test-plugin,
@@ -66,7 +63,7 @@ Package: unity8
6663Architecture: any
6764Provides: indicator-renderer,
6865Depends: gsettings-desktop-schemas,
69− libunity-mir1,
66+ libunity-mir1 (>= 0.2),
7067 qmenumodel-qml (>= 0.2.7),
7168 qtdeclarative5-dee-plugin,
7269 qtdeclarative5-gsettings1.0,
@@ -78,6 +75,8 @@ Depends: gsettings-desktop-schemas,
7875 unity8-fake-env | qtubuntu-shell,
7976 unity8-private (= ${binary:Version}),
8077 unity8-private | unity-launcher-impl,
78+ unity-plugin-scopes | unity-scopes-impl,
79+ unity-scopes-impl-0,
8180# for setcap:
8281 libcap2-bin,
8382 ${misc:Depends},
@@ -91,7 +90,7 @@ Description: Unity 8 shell
9190Package: unity8-autopilot
9291Architecture: all
9392Depends: gir1.2-glib-2.0,
94− libautopilot-qt,
93+ libautopilot-qt (>= 1.4),
9594 libqt5test5,
9695 libqt5widgets5,
9796 python-evdev,
debian/unity8-fake-env.install+1
@@ -1 +1,2 @@
11usr/lib/*/unity8/qml/mocks
2+usr/share/unity8/mocks
debian/unity8.install−2
@@ -1,7 +1,6 @@
11usr/bin/unity8
22usr/share/applications/unity8.desktop
33usr/share/locale
4−usr/share/unity8/Applications
54usr/share/unity8/Bottombar
65usr/share/unity8/Components
76usr/share/unity8/Dash
@@ -14,4 +13,3 @@ usr/share/unity8/Shell.qml
1413usr/share/unity8/SideStage
1514usr/share/unity8/graphics
1615data/unity8.conf usr/share/upstart/sessions/
17−data/unity8-setcap.conf etc/init/boot-hooks/
debian/unity8.maintscriptnew file+1
@@ -0,0 +1 @@
1+rm_conffile /etc/init/boot-hooks/unity8-setcap.conf
graphics/applicationIcons/angrybirds@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/media-player@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/music@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/ski_safari@18.pngdeleted

Binary file not shown.

graphics/applicationIcons/skype@18.pngdeleted

Binary file not shown.

main.cpp+14−8
@@ -28,6 +28,7 @@
2828#include <QDebug>
2929#include <libintl.h>
3030#include <dlfcn.h>
31+#include <csignal>
3132
3233// local
3334#include "paths.h"
@@ -78,14 +79,6 @@ void resolveIconTheme() {
7879
7980int startShell(int argc, const char** argv, void* server)
8081{
81− /* Workaround Qt platform integration plugin not advertising itself
82− as having the following capabilities:
83− - QPlatformIntegration::ThreadedOpenGL
84− - QPlatformIntegration::BufferQueueingOpenGL
85− */
86− setenv("QML_FORCE_THREADED_RENDERER", "1", 1);
87− setenv("QML_FIXED_ANIMATION_STEP", "1", 1);
88−
8982 const bool isUbuntuMirServer = qgetenv("QT_QPA_PLATFORM") == "ubuntumirserver";
9083
9184 QGuiApplication::setApplicationName("Unity 8");
@@ -186,6 +179,14 @@ int startShell(int argc, const char** argv, void* server)
186179
187180int main(int argc, const char *argv[])
188181{
182+ /* Workaround Qt platform integration plugin not advertising itself
183+ as having the following capabilities:
184+ - QPlatformIntegration::ThreadedOpenGL
185+ - QPlatformIntegration::BufferQueueingOpenGL
186+ */
187+ setenv("QML_FORCE_THREADED_RENDERER", "1", 1);
188+ setenv("QML_FIXED_ANIMATION_STEP", "1", 1);
189+
189190 // For ubuntumirserver/ubuntumirclient
190191 if (qgetenv("QT_QPA_PLATFORM").startsWith("ubuntumir")) {
191192 setenv("QT_QPA_PLATFORM", "ubuntumirserver", 1);
@@ -218,6 +219,11 @@ int main(int argc, const char *argv[])
218219
219220 return runWithClient(mirServer, startShell);
220221 } else {
222+ if (qgetenv("UPSTART_JOB") == "unity8") {
223+ // Emit SIGSTOP as expected by upstart, under Mir it's unity-mir that will raise it.
224+ // see http://upstart.ubuntu.com/cookbook/#expect-stop
225+ raise(SIGSTOP);
226+ }
221227 return startShell(argc, argv, nullptr);
222228 }
223229}
paths.h.in+4−2
@@ -58,9 +58,11 @@ inline QStringList overrideImportPaths() {
5858inline QStringList fallbackImportPaths() {
5959 QStringList paths;
6060 if (isRunningInstalled()) {
61− paths << QString("@CMAKE_INSTALL_PREFIX@/@SHELL_PRIVATE_LIBDIR@/qml");
62− paths << QString("@CMAKE_INSTALL_PREFIX@/@SHELL_PRIVATE_LIBDIR@/qml/mocks");
61+ paths << QString("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@");
62+ paths << QString("@SHELL_PLUGINDIR@");
63+ paths << QString("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/mocks");
6364 } else {
65+ paths << QString("@SHELL_PLUGINDIR@");
6466 paths << QString("@CMAKE_BINARY_DIR@/tests/mocks");
6567 }
6668 return paths;
plugins/AccountsService/plugin.cpp+1−1
@@ -20,7 +20,7 @@
2020#include "AccountsService.h"
2121
2222#include <QDBusMetaType>
23−#include <QtQml>
23+#include <QtQml/qqml.h>
2424
2525static QObject *service_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
2626{
plugins/HudClient/hudclient.cpp+1−16
@@ -243,28 +243,13 @@ void HudClient::modelReady(bool needDisconnect)
243243 }
244244}
245245
246−static QVariant QVariantFromGVariant(GVariant *value)
247−{
248− // Only handle the cases we care for now
249− switch (g_variant_classify(value)) {
250− case G_VARIANT_CLASS_BOOLEAN:
251− return QVariant((bool) g_variant_get_boolean(value));
252− case G_VARIANT_CLASS_DOUBLE:
253− return QVariant(g_variant_get_double(value));
254− case G_VARIANT_CLASS_STRING:
255− return QVariant(QString::fromUtf8(g_variant_get_string(value, NULL)));
256− default:
257− return QVariant();
258− }
259−}
260−
261246static void addAttribute(QVariantMap &properties, GMenuModel *menuModel, int item, const char *attribute) {
262247 GVariant *v = g_menu_model_get_item_attribute_value(menuModel, item, attribute, NULL);
263248
264249 if (v == NULL)
265250 return;
266251
267− properties.insert(attribute, QVariantFromGVariant(v));
252+ properties.insert(attribute, DeeListModel::VariantForData(v));
268253 g_variant_unref(v);
269254}
270255
plugins/LightDM/CMakeLists.txt+2−1
@@ -17,6 +17,7 @@ include_directories(
1717
1818set(QMLPLUGIN_SRC
1919 ../Utils/qsortfilterproxymodelqml.cpp # FIXME evaluate a more generic approach for using other plugins
20+ DBusGreeterList.cpp
2021 Greeter.cpp
2122 plugin.cpp
2223 UsersModel.cpp
@@ -33,7 +34,7 @@ target_link_libraries(LightDM-qml
3334 ${LIBUSERMETRICSOUTPUT_LDFLAGS}
3435 )
3536
36−qt5_use_modules(LightDM-qml Gui Qml)
37+qt5_use_modules(LightDM-qml DBus Gui Qml)
3738
3839# export the qmldir qmltypes and plugin files
3940export_qmlfiles(LightDM LightDM)
plugins/LightDM/DBusGreeterList.cppnew file+77
@@ -0,0 +1,77 @@
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 "DBusGreeterList.h"
18+#include "Greeter.h"
19+
20+#include <QDBusMessage>
21+#include <QStringList>
22+
23+DBusGreeterList::DBusGreeterList(Greeter *greeter, const QDBusConnection &connection, const QString &path)
24+ : QObject(greeter),
25+ m_greeter(greeter),
26+ m_connection(connection),
27+ m_path(path)
28+{
29+ connect(m_greeter, SIGNAL(authenticationUserChanged(const QString &)), this, SLOT(authenticationUserChangedHandler(const QString &)));
30+ connect(m_greeter, SIGNAL(promptlessChanged()), this, SLOT(promptlessChangedHandler()));
31+}
32+
33+QString DBusGreeterList::GetActiveEntry() const
34+{
35+ return m_greeter->authenticationUser();
36+}
37+
38+void DBusGreeterList::SetActiveEntry(const QString &entry)
39+{
40+ Q_EMIT m_greeter->requestAuthenticationUser(entry);
41+}
42+
43+bool DBusGreeterList::entryIsLocked() const
44+{
45+ return !m_greeter->promptless();
46+}
47+
48+void DBusGreeterList::authenticationUserChangedHandler(const QString &user)
49+{
50+ notifyPropertyChanged("ActiveEntry", user);
51+ Q_EMIT EntrySelected(user);
52+}
53+
54+void DBusGreeterList::promptlessChangedHandler()
55+{
56+ notifyPropertyChanged("EntryIsLocked", entryIsLocked());
57+ Q_EMIT entryIsLockedChanged();
58+}
59+
60+// Manually emit a PropertiesChanged signal over DBus, because QtDBus
61+// doesn't do it for us on Q_PROPERTIES, oddly enough.
62+void DBusGreeterList::notifyPropertyChanged(const QString& propertyName, const QVariant &value)
63+{
64+ QDBusMessage message;
65+ QVariantMap changedProps;
66+
67+ changedProps.insert(propertyName, value);
68+
69+ message = QDBusMessage::createSignal(m_path,
70+ "org.freedesktop.DBus.Properties",
71+ "PropertiesChanged");
72+ message << "com.canonical.UnityGreeter.List";
73+ message << changedProps;
74+ message << QStringList();
75+
76+ m_connection.send(message);
77+}
plugins/LightDM/DBusGreeterList.hnew file+61
@@ -0,0 +1,61 @@
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+#ifndef UNITY_DBUSGREETERLIST_H
18+#define UNITY_DBUSGREETERLIST_H
19+
20+#include <QDBusConnection>
21+#include <QObject>
22+
23+class Greeter;
24+class QDBusInterface;
25+
26+/** This is an internal class used to talk with the indicators.
27+ */
28+
29+class DBusGreeterList : public QObject
30+{
31+ Q_OBJECT
32+ Q_CLASSINFO("D-Bus Interface", "com.canonical.UnityGreeter.List")
33+
34+ Q_PROPERTY(QString ActiveEntry READ GetActiveEntry WRITE SetActiveEntry NOTIFY EntrySelected) // since 14.04
35+ Q_PROPERTY(bool EntryIsLocked READ entryIsLocked NOTIFY entryIsLockedChanged) // since 14.04
36+
37+public:
38+ explicit DBusGreeterList(Greeter *greeter, const QDBusConnection &connection, const QString &path);
39+
40+ Q_SCRIPTABLE void SetActiveEntry(const QString &entry); // since 13.04
41+ Q_SCRIPTABLE QString GetActiveEntry() const; // since 13.10
42+
43+ bool entryIsLocked() const;
44+
45+Q_SIGNALS:
46+ Q_SCRIPTABLE void EntrySelected(const QString &entry); // since 13.10
47+
48+ void entryIsLockedChanged();
49+
50+private Q_SLOTS:
51+ void authenticationUserChangedHandler(const QString &user);
52+ void promptlessChangedHandler();
53+ void notifyPropertyChanged(const QString &propertyName, const QVariant &value);
54+
55+private:
56+ Greeter *m_greeter;
57+ QDBusConnection m_connection;
58+ QString m_path;
59+};
60+
61+#endif
plugins/LightDM/Greeter.cpp+1
@@ -88,6 +88,7 @@ void Greeter::authenticate(const QString &username)
8888 }
8989
9090 d->m_greeter->authenticate(username);
91+ Q_EMIT authenticationUserChanged(username);
9192}
9293
9394void Greeter::respond(const QString &response)
plugins/LightDM/Greeter.h+6−1
@@ -35,7 +35,7 @@ class Greeter : public QObject
3535 Q_OBJECT
3636
3737 Q_PROPERTY(bool authenticated READ isAuthenticated)
38− Q_PROPERTY(QString authenticationUser READ authenticationUser)
38+ Q_PROPERTY(QString authenticationUser READ authenticationUser NOTIFY authenticationUserChanged)
3939 Q_PROPERTY(bool promptless READ promptless NOTIFY promptlessChanged)
4040
4141public:
@@ -54,8 +54,13 @@ Q_SIGNALS:
5454 void showMessage(const QString &text, bool isError);
5555 void showPrompt(const QString &text, bool isSecret);
5656 void authenticationComplete();
57+ void authenticationUserChanged(const QString &user);
5758 void promptlessChanged();
5859
60+ // This signal is emitted by external agents like indicators, and the UI
61+ // should switch to this user if possible.
62+ void requestAuthenticationUser(const QString &user);
63+
5964private:
6065 GreeterPrivate * const d_ptr;
6166
plugins/LightDM/plugin.cpp+14−2
@@ -18,20 +18,32 @@
1818 */
1919
2020#include "plugin.h"
21+#include "DBusGreeterList.h"
2122#include "Greeter.h"
2223#include "UsersModel.h"
2324#include <libusermetricsoutput/ColorTheme.h>
2425#include <libusermetricsoutput/UserMetrics.h>
2526#include <QLightDM/UsersModel>
2627
27−#include <QtCore/QAbstractItemModel>
28+#include <QAbstractItemModel>
29+#include <QDBusConnection>
2830#include <QtQml/qqml.h>
2931
32+static const char* GREETER_LIST_DBUS_PATH = "/list";
33+static const char* GREETER_DBUS_SERVICE = "com.canonical.UnityGreeter";
34+
3035static QObject *greeter_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
3136{
3237 Q_UNUSED(engine)
3338 Q_UNUSED(scriptEngine)
34− return new Greeter();
39+
40+ Greeter *greeter = new Greeter();
41+ QDBusConnection connection = QDBusConnection::sessionBus();
42+ DBusGreeterList *list = new DBusGreeterList(greeter, connection, GREETER_LIST_DBUS_PATH);
43+ connection.registerObject(GREETER_LIST_DBUS_PATH, list, QDBusConnection::ExportScriptableContents);
44+ connection.registerService(GREETER_DBUS_SERVICE);
45+
46+ return greeter;
3547}
3648
3749static QObject *users_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
plugins/ListViewWithPageHeader/listviewwithpageheader.cpp+32−6
@@ -155,6 +155,7 @@ ListViewWithPageHeader::ListViewWithPageHeader()
155155 , m_topSectionItem(nullptr)
156156 , m_forceNoClip(false)
157157 , m_inLayout(false)
158+ , m_inContentHeightKeepHeaderShown(false)
158159{
159160 m_clipItem = new QQuickItem(contentItem());
160161// m_clipItem = new QQuickRectangle(contentItem());
@@ -286,10 +287,12 @@ void ListViewWithPageHeader::setSectionDelegate(QQmlComponent *delegate)
286287 m_topSectionItem = getSectionItem(QString());
287288 m_topSectionItem->setZ(3);
288289 QQuickItemPrivate::get(m_topSectionItem)->setCulled(true);
290+ connect(m_topSectionItem, SIGNAL(heightChanged()), SIGNAL(stickyHeaderHeightChanged()));
289291
290292 // TODO create sections for existing items
291293
292294 Q_EMIT sectionDelegateChanged();
295+ Q_EMIT stickyHeaderHeightChanged();
293296 }
294297}
295298
@@ -325,6 +328,11 @@ void ListViewWithPageHeader::setForceNoClip(bool noClip)
325328 }
326329}
327330
331+int ListViewWithPageHeader::stickyHeaderHeight() const
332+{
333+ return m_topSectionItem ? m_topSectionItem->height() : 0;
334+}
335+
328336void ListViewWithPageHeader::positionAtBeginning()
329337{
330338 if (m_delegateModel->count() <= 0)
@@ -471,12 +479,18 @@ void ListViewWithPageHeader::componentComplete()
471479
472480void ListViewWithPageHeader::viewportMoved(Qt::Orientations orient)
473481{
482+ // Check we are not being taken down and don't paint anything
483+ // TODO Check if we still need this in 5.2
484+ // For reproduction just inifnite loop testDash or testDashContent
485+ if (!QQmlEngine::contextForObject(this)->parentContext())
486+ return;
487+
474488 QQuickFlickable::viewportMoved(orient);
475489// qDebug() << "ListViewWithPageHeader::viewportMoved" << contentY();
476490 qreal diff = m_previousContentY - contentY();
477491 const bool showHeaderAnimationRunning = m_contentYAnimation->isRunning() && contentYAnimationType == ContentYAnimationShowHeader;
478492 if (m_headerItem) {
479− auto oldHeaderItemShownHeight = m_headerItemShownHeight;
493+ const auto oldHeaderItemShownHeight = m_headerItemShownHeight;
480494 if (contentY() < -m_minYExtent) {
481495 // Stick the header item to the top when dragging down
482496 m_headerItem->setY(contentY());
@@ -491,10 +505,10 @@ void ListViewWithPageHeader::viewportMoved(Qt::Orientations orient)
491505 const bool notShownByItsOwn = contentY() + diff >= m_headerItem->y() + m_headerItem->height();
492506 const bool maximizeVisibleAreaRunning = m_contentYAnimation->isRunning() && contentYAnimationType == ContentYAnimationMaximizeVisibleArea;
493507
494− if (!scrolledUp && contentY() == -m_minYExtent) {
508+ if (!scrolledUp && (contentY() == -m_minYExtent || (m_headerItemShownHeight == 0 && m_previousContentY == m_headerItem->y()))) {
495509 m_headerItemShownHeight = 0;
496− m_headerItem->setY(contentY());
497− } else if ((scrolledUp && notRebounding && notShownByItsOwn && !maximizeVisibleAreaRunning) || (m_headerItemShownHeight > 0)) {
510+ m_headerItem->setY(-m_minYExtent);
511+ } else if ((scrolledUp && notRebounding && notShownByItsOwn && !maximizeVisibleAreaRunning) || (m_headerItemShownHeight > 0) || m_inContentHeightKeepHeaderShown) {
498512 if (maximizeVisibleAreaRunning && diff > 0) // If we are maximizing and the header was shown, make sure we hide it
499513 m_headerItemShownHeight -= diff;
500514 else
@@ -847,6 +861,11 @@ void ListViewWithPageHeader::itemCreated(int modelIndex, QObject *object)
847861 }
848862#endif
849863// qDebug() << "ListViewWithPageHeader::itemCreated" << modelIndex << item;
864+ // Check we are not being taken down and don't paint anything
865+ // TODO Check if we still need this in 5.2
866+ // For reproduction just inifnite loop testDash or testDashContent
867+ if (!QQmlEngine::contextForObject(this)->parentContext())
868+ return;
850869
851870 item->setParentItem(m_clipItem);
852871 QQmlContext *context = QQmlEngine::contextForObject(item)->parentContext();
@@ -980,7 +999,6 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
980999 if (growUp) {
9811000 ListItem *firstItem = m_visibleItems.first();
9821001 firstItem->setY(firstItem->y() - item->height());
983− adjustMinYExtent();
9841002 }
9851003 // Adding an item may break a "same section" chain, so check
9861004 // if we need adding a new section item
@@ -991,7 +1009,6 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
9911009 if (growUp && nextItem->m_sectionItem) {
9921010 ListItem *firstItem = m_visibleItems.first();
9931011 firstItem->setY(firstItem->y() - nextItem->m_sectionItem->height());
994− adjustMinYExtent();
9951012 }
9961013 }
9971014 }
@@ -1000,6 +1017,7 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
10001017 ListItem *firstItem = m_visibleItems.first();
10011018 firstItem->setY(oldFirstValidIndexPos);
10021019 }
1020+ adjustMinYExtent();
10031021 } else if (insert.index <= m_firstVisibleIndex) {
10041022 m_firstVisibleIndex += insert.count;
10051023 }
@@ -1228,6 +1246,12 @@ void ListViewWithPageHeader::layout()
12281246
12291247void ListViewWithPageHeader::updatePolish()
12301248{
1249+ // Check we are not being taken down and don't paint anything
1250+ // TODO Check if we still need this in 5.2
1251+ // For reproduction just inifnite loop testDash or testDashContent
1252+ if (!QQmlEngine::contextForObject(this)->parentContext())
1253+ return;
1254+
12311255 Q_FOREACH(ListItem *item, m_itemsToRelease)
12321256 reallyReleaseItem(item);
12331257 m_itemsToRelease.clear();
@@ -1267,7 +1291,9 @@ void ListViewWithPageHeader::updatePolish()
12671291
12681292 m_contentHeightDirty = false;
12691293 adjustMinYExtent();
1294+ m_inContentHeightKeepHeaderShown = m_headerItem && m_headerItem->y() == contentY();
12701295 setContentHeight(contentHeight);
1296+ m_inContentHeightKeepHeaderShown = false;
12711297 }
12721298}
12731299
plugins/ListViewWithPageHeader/listviewwithpageheader.h+5
@@ -60,6 +60,7 @@ class ListViewWithPageHeader : public QQuickFlickable, public QQuickItemChangeLi
6060 Q_PROPERTY(QQmlComponent *sectionDelegate READ sectionDelegate WRITE setSectionDelegate NOTIFY sectionDelegateChanged)
6161 Q_PROPERTY(QString sectionProperty READ sectionProperty WRITE setSectionProperty NOTIFY sectionPropertyChanged)
6262 Q_PROPERTY(bool forceNoClip READ forceNoClip WRITE setForceNoClip NOTIFY forceNoClipChanged)
63+ Q_PROPERTY(int stickyHeaderHeight READ stickyHeaderHeight NOTIFY stickyHeaderHeightChanged)
6364
6465 friend class ListViewWithPageHeaderTest;
6566 friend class ListViewWithPageHeaderTestSection;
@@ -87,6 +88,8 @@ public:
8788 bool forceNoClip() const;
8889 void setForceNoClip(bool noClip);
8990
91+ int stickyHeaderHeight() const;
92+
9093 Q_INVOKABLE void positionAtBeginning();
9194 Q_INVOKABLE void showHeader();
9295 Q_INVOKABLE QQuickItem *item(int modelIndex) const;
@@ -104,6 +107,7 @@ Q_SIGNALS:
104107 void sectionDelegateChanged();
105108 void sectionPropertyChanged();
106109 void forceNoClipChanged();
110+ void stickyHeaderHeightChanged();
107111
108112protected:
109113 void componentComplete();
@@ -202,6 +206,7 @@ private:
202206
203207 bool m_forceNoClip;
204208 bool m_inLayout;
209+ bool m_inContentHeightKeepHeaderShown;
205210
206211 // Qt 5.0 doesn't like releasing the items just after itemCreated
207212 // so we delay the releasing until the next updatePolish
plugins/SessionBroadcast/plugin.cpp+1−1
@@ -19,7 +19,7 @@
1919#include "plugin.h"
2020#include "SessionBroadcast.h"
2121
22−#include <QtQml>
22+#include <QtQml/qqml.h>
2323
2424static QObject *broadcast_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
2525{
plugins/Ubuntu/Gestures/AxisVelocityCalculator.cpp+9−18
@@ -21,25 +21,19 @@
2121#include "AxisVelocityCalculator.h"
2222#include <QtCore/QElapsedTimer>
2323
24−class RealTimeSource : public UbuntuGestures::TimeSource {
25−public:
26− RealTimeSource()
27− : UbuntuGestures::TimeSource() {
28− m_timer.start();
29− }
30− virtual qint64 msecsSinceReference() {
31− return m_timer.elapsed();
32− }
33−private:
34− QElapsedTimer m_timer;
35−};
24+using namespace UbuntuGestures;
3625
3726AxisVelocityCalculator::AxisVelocityCalculator(QObject *parent)
27+ : AxisVelocityCalculator(SharedTimeSource(new RealTimeSource), parent)
28+{
29+}
30+
31+AxisVelocityCalculator::AxisVelocityCalculator(const SharedTimeSource &timeSource,
32+ QObject *parent)
3833 : QObject(parent)
39− , m_timeSource(new RealTimeSource)
34+ , m_timeSource(timeSource)
4035 , m_trackedPosition(0.0)
4136{
42− m_timeSource->setParent(this);
4337 reset();
4438}
4539
@@ -142,11 +136,8 @@ int AxisVelocityCalculator::numSamples() const
142136 }
143137}
144138
145−void AxisVelocityCalculator::setTimeSource(UbuntuGestures::TimeSource *timeSource)
139+void AxisVelocityCalculator::setTimeSource(const SharedTimeSource &timeSource)
146140{
147− if (m_timeSource && m_timeSource->parent() == this)
148− delete m_timeSource;
149−
150141 m_timeSource = timeSource;
151142
152143 if (numSamples() > 0) {
plugins/Ubuntu/Gestures/AxisVelocityCalculator.h+9−16
@@ -24,19 +24,7 @@
2424#include "UbuntuGesturesGlobal.h"
2525#include <stdint.h>
2626#include <QtCore/QObject>
27−
28−namespace UbuntuGestures {
29−/*
30− Interface for a time source.
31− */
32−class UBUNTUGESTURES_EXPORT TimeSource : public QObject {
33− Q_OBJECT
34−public:
35− virtual ~TimeSource() {}
36− /* Returns the current time in milliseconds since some reference time in the past. */
37− virtual qint64 msecsSinceReference() = 0;
38−};
39−}
27+#include "TimeSource.h"
4028
4129/*
4230 Estimates the current velocity of a finger based on recent movement along an axis
@@ -73,10 +61,15 @@ class UBUNTUGESTURES_EXPORT AxisVelocityCalculator : public QObject
7361public:
7462
7563 /*
76− Regular constructor
64+ Regular, simple, constructor
7765 */
7866 AxisVelocityCalculator(QObject *parent = 0);
7967
68+ /*
69+ Constructor that takes a TimeSource
70+ */
71+ AxisVelocityCalculator(const UbuntuGestures::SharedTimeSource &timeSource, QObject *parent = 0);
72+
8073 virtual ~AxisVelocityCalculator();
8174
8275 qreal trackedPosition() const;
@@ -97,7 +90,7 @@ public:
9790 /*
9891 Replaces the TimeSource with the given one. Useful for testing purposes.
9992 */
100− void setTimeSource(UbuntuGestures::TimeSource *timeSource);
93+ void setTimeSource(const UbuntuGestures::SharedTimeSource &timeSource);
10194
10295 /*
10396 The minimum amount of samples needed for a velocity calculation.
@@ -145,7 +138,7 @@ private:
145138 int m_samplesRead; /* index of the oldest sample available. -1 if buffer is empty */
146139 int m_samplesWrite; /* index where the next sample will be written */
147140
148− UbuntuGestures::TimeSource *m_timeSource;
141+ UbuntuGestures::SharedTimeSource m_timeSource;
149142
150143 qreal m_trackedPosition;
151144};
plugins/Ubuntu/Gestures/CMakeLists.txt+2
@@ -6,6 +6,8 @@ set(UbuntuGestureQml_SOURCES
66 AxisVelocityCalculator.cpp
77 Direction.cpp
88 DirectionalDragArea.cpp
9+ PressedOutsideNotifier.cpp
10+ TimeSource.cpp
911)
1012
1113add_definitions(-DUBUNTUGESTURES_LIBRARY)
plugins/Ubuntu/Gestures/DirectionalDragArea.cpp+307−71
@@ -18,6 +18,75 @@
1818
1919#include <QtCore/qmath.h>
2020#include <QtCore/QTimer>
21+#include <QDebug>
22+
23+using namespace UbuntuGestures;
24+
25+#define DIRECTIONALDRAGAREA_DEBUG 0
26+
27+#if DIRECTIONALDRAGAREA_DEBUG
28+#define DDA_DEBUG(msg) qDebug("[DDA] " msg)
29+namespace {
30+QString touchPointStateToString(Qt::TouchPointState state) {
31+ switch (state) {
32+ case Qt::TouchPointPressed:
33+ return QString("pressed");
34+ case Qt::TouchPointMoved:
35+ return QString("moved");
36+ case Qt::TouchPointStationary:
37+ return QString("stationary");
38+ default: // Qt::TouchPointReleased:
39+ return QString("released");
40+ }
41+}
42+QString touchEventToString(QTouchEvent *ev)
43+{
44+ QString message;
45+
46+ switch (ev->type()) {
47+ case QEvent::TouchBegin:
48+ message.append("TouchBegin ");
49+ break;
50+ case QEvent::TouchUpdate:
51+ message.append("TouchUpdate ");
52+ break;
53+ case QEvent::TouchEnd:
54+ message.append("TouchEnd ");
55+ break;
56+ default: //QEvent::TouchCancel
57+ message.append("TouchCancel ");
58+ }
59+
60+ for (int i=0; i < ev->touchPoints().size(); ++i) {
61+
62+ const QTouchEvent::TouchPoint& touchPoint = ev->touchPoints().at(i);
63+ message.append(
64+ QString("(id:%1, state:%2, scenePos:(%3,%4)) ")
65+ .arg(touchPoint.id())
66+ .arg(touchPointStateToString(touchPoint.state()))
67+ .arg(touchPoint.scenePos().x())
68+ .arg(touchPoint.scenePos().y())
69+ );
70+ }
71+
72+ return message;
73+}
74+
75+const char *statusToString(DirectionalDragArea::Status status)
76+{
77+ if (status == DirectionalDragArea::WaitingForTouch) {
78+ return "WaitingForTouch";
79+ } else if (status == DirectionalDragArea::Undecided) {
80+ return "Undecided";
81+ } else {
82+ return "Recognized";
83+ }
84+}
85+
86+} // namespace {
87+#else // DIRECTIONALDRAGAREA_DEBUG
88+#define DDA_DEBUG(msg) do{}while(0)
89+#endif // DIRECTIONALDRAGAREA_DEBUG
2190
2291// Essentially a QTimer wrapper
2392class RecognitionTimer : public UbuntuGestures::AbstractTimer
@@ -48,9 +117,12 @@ DirectionalDragArea::DirectionalDragArea(QQuickItem *parent)
48117 , m_minSpeed(0)
49118 , m_maxSilenceTime(200)
50119 , m_silenceTime(0)
120+ , m_compositionTime(60)
51121 , m_numSamplesOnLastSpeedCheck(0)
52122 , m_recognitionTimer(0)
53123 , m_velocityCalculator(0)
124+ , m_timeSource(new RealTimeSource)
125+ , m_activeTouches(m_timeSource)
54126{
55127 setRecognitionTimer(new RecognitionTimer(this));
56128 m_recognitionTimer->setInterval(60);
@@ -73,8 +145,8 @@ void DirectionalDragArea::setDirection(Direction::Type direction)
73145
74146void DirectionalDragArea::setMaxDeviation(qreal value)
75147{
76− if (m_dampedPos.maxDelta() != value) {
77− m_dampedPos.setMaxDelta(value);
148+ if (m_dampedScenePos.maxDelta() != value) {
149+ m_dampedScenePos.setMaxDelta(value);
78150 Q_EMIT maxDeviationChanged(value);
79151 }
80152}
@@ -118,6 +190,14 @@ void DirectionalDragArea::setMaxSilenceTime(int value)
118190 }
119191}
120192
193+void DirectionalDragArea::setCompositionTime(int value)
194+{
195+ if (m_compositionTime != value) {
196+ m_compositionTime = value;
197+ Q_EMIT compositionTimeChanged(value);
198+ }
199+}
200+
121201void DirectionalDragArea::setRecognitionTimer(UbuntuGestures::AbstractTimer *timer)
122202{
123203 int interval = 0;
@@ -141,9 +221,11 @@ void DirectionalDragArea::setRecognitionTimer(UbuntuGestures::AbstractTimer *tim
141221 }
142222}
143223
144−void DirectionalDragArea::setTimeSource(UbuntuGestures::TimeSource *timeSource)
224+void DirectionalDragArea::setTimeSource(const SharedTimeSource &timeSource)
145225{
226+ m_timeSource = timeSource;
146227 m_velocityCalculator->setTimeSource(timeSource);
228+ m_activeTouches.m_timeSource = timeSource;
147229}
148230
149231qreal DirectionalDragArea::distance() const
@@ -186,6 +268,12 @@ qreal DirectionalDragArea::touchSceneY() const
186268
187269void DirectionalDragArea::touchEvent(QTouchEvent *event)
188270{
271+ #if DIRECTIONALDRAGAREA_DEBUG
272+ // TODO Consider using qCDebug() when available (Qt 5.2)
273+ qDebug() << "[DDA]" << m_timeSource->msecsSinceReference()
274+ << qPrintable(touchEventToString(event));
275+ #endif
276+
189277 if (!isEnabled() || !isVisible()) {
190278 QQuickItem::touchEvent(event);
191279 return;
@@ -198,76 +286,124 @@ void DirectionalDragArea::touchEvent(QTouchEvent *event)
198286 case Undecided:
199287 touchEvent_undecided(event);
200288 break;
201− case Recognized:
289+ default: // Recognized:
202290 touchEvent_recognized(event);
203291 break;
204− default: // Rejected
205− touchEvent_rejected(event);
206− break;
207292 }
293+
294+ m_activeTouches.update(event);
208295}
209296
210297void DirectionalDragArea::touchEvent_absent(QTouchEvent *event)
211298{
212− if ((event->touchPointStates() && (Qt::TouchPointPressed || Qt::TouchPointMoved))
213− && event->touchPoints().count() == 1) {
214− const QTouchEvent::TouchPoint &touchPoint = event->touchPoints()[0];
215− m_startPos = touchPoint.pos();
216− m_startScenePos = touchPoint.scenePos();
217− m_touchId = touchPoint.id();
218− m_dampedPos.reset(m_startPos);
219− updateVelocityCalculator(m_startPos);
220− m_velocityCalculator->reset();
221− m_numSamplesOnLastSpeedCheck = 0;
222− m_silenceTime = 0;
223− setPreviousPos(m_startPos);
224− setPreviousScenePos(m_startScenePos);
299+ if (!event->touchPointStates().testFlag(Qt::TouchPointPressed)) {
300+ // Nothing to see here. No touch starting in this event.
301+ return;
302+ }
225303
226− if (m_distanceThreshold > 0)
227− setStatus(Undecided);
228− else
229− setStatus(Recognized);
304+ if (isWithinTouchCompositionWindow()) {
305+ // too close to the last touch start. So we consider them as starting roughly at the same time.
306+ // Can't be a single-touch gesture.
307+ #if DIRECTIONALDRAGAREA_DEBUG
308+ qDebug("[DDA] A new touch point came in but we're still within time composition window. Ignoring it.");
309+ #endif
310+ return;
230311 }
312+
313+ const QList<QTouchEvent::TouchPoint> &touchPoints = event->touchPoints();
314+
315+ const QTouchEvent::TouchPoint *newTouchPoint = nullptr;
316+ for (int i = 0; i < touchPoints.count(); ++i) {
317+ const QTouchEvent::TouchPoint &touchPoint = touchPoints.at(i);
318+ if (touchPoint.state() == Qt::TouchPointPressed) {
319+ if (newTouchPoint) {
320+ // more than one touch starting in this QTouchEvent. Can't be a single-touch gesture
321+ return;
322+ } else {
323+ // that's our candidate
324+ m_touchId = touchPoint.id();
325+ newTouchPoint = &touchPoint;
326+ }
327+ }
328+ }
329+
330+ Q_ASSERT(newTouchPoint);
331+
332+ // If we have made this far, we are good to go to the next status.
333+
334+ m_startPos = newTouchPoint->pos();
335+ m_startScenePos = newTouchPoint->scenePos();
336+ m_touchId = newTouchPoint->id();
337+ m_dampedScenePos.reset(m_startScenePos);
338+ updateVelocityCalculator(m_startScenePos);
339+ m_velocityCalculator->reset();
340+ m_numSamplesOnLastSpeedCheck = 0;
341+ m_silenceTime = 0;
342+ setPreviousPos(m_startPos);
343+ setPreviousScenePos(m_startScenePos);
344+
345+ setStatus(Undecided);
231346}
232347
233348void DirectionalDragArea::touchEvent_undecided(QTouchEvent *event)
234349{
235350 const QTouchEvent::TouchPoint *touchPoint = fetchTargetTouchPoint(event);
236− const QPointF &touchPos = touchPoint->pos();
351+
352+ if (!touchPoint) {
353+ qCritical() << "DirectionalDragArea[status=Undecided]: touch " << m_touchId
354+ << "missing from QTouchEvent without first reaching state Qt::TouchPointReleased. "
355+ "Considering it as released.";
356+ setStatus(WaitingForTouch);
357+ return;
358+ }
359+
360+ const QPointF &touchScenePos = touchPoint->scenePos();
237361
238362 if (touchPoint->state() == Qt::TouchPointReleased) {
239363 // touch has ended before recognition concluded
364+ DDA_DEBUG("Touch has ended before recognition concluded");
240365 setStatus(WaitingForTouch);
241366 return;
242367 }
243368
244− if (event->touchPointStates().testFlag(Qt::TouchPointPressed)
245− || event->touchPoints().count() > 1) {
369+ if (event->touchPointStates().testFlag(Qt::TouchPointPressed) && isWithinTouchCompositionWindow()) {
246370 // multi-finger drags are not accepted
247− setStatus(Rejected);
371+ DDA_DEBUG("Multi-finger drags are not accepted");
372+ setStatus(WaitingForTouch);
248373 return;
249374 }
250375
251− m_previousDampedPos.setX(m_dampedPos.x());
252− m_previousDampedPos.setY(m_dampedPos.y());
253− m_dampedPos.update(touchPos);
254− updateVelocityCalculator(touchPos);
376+ m_previousDampedScenePos.setX(m_dampedScenePos.x());
377+ m_previousDampedScenePos.setY(m_dampedScenePos.y());
378+ m_dampedScenePos.update(touchScenePos);
379+ updateVelocityCalculator(touchScenePos);
255380
256381 if (!pointInsideAllowedArea()) {
257− setStatus(Rejected);
382+ DDA_DEBUG("Rejecting gesture because touch point is outside allowed area.");
383+ setStatus(WaitingForTouch);
258384 return;
259385 }
260386
261387 if (!movingInRightDirection()) {
262− setStatus(Rejected);
388+ DDA_DEBUG("Rejecting gesture becauuse touch point is moving in the wrong direction.");
389+ setStatus(WaitingForTouch);
263390 return;
264391 }
265392
266− setPreviousPos(touchPos);
267− setPreviousScenePos(touchPoint->scenePos());
393+ setPreviousPos(touchPoint->pos());
394+ setPreviousScenePos(touchScenePos);
268395
269− if (movedFarEnough(touchPos)) {
396+ if (isWithinTouchCompositionWindow()) {
397+ // There's still time for some new touch to appear and ruin our party as it would be combined
398+ // with our m_touchId one and therefore deny the possibility of a single-finger gesture.
399+ DDA_DEBUG("Sill within composition window. Let's wait more.");
400+ return;
401+ }
402+
403+ if (movedFarEnough(touchScenePos)) {
270404 setStatus(Recognized);
405+ } else {
406+ DDA_DEBUG("Didn't move far enough yet. Let's wait more.");
271407 }
272408}
273409
@@ -275,20 +411,18 @@ void DirectionalDragArea::touchEvent_recognized(QTouchEvent *event)
275411{
276412 const QTouchEvent::TouchPoint *touchPoint = fetchTargetTouchPoint(event);
277413
278− setPreviousPos(touchPoint->pos());
279− setPreviousScenePos(touchPoint->scenePos());
280−
281− if (touchPoint->state() == Qt::TouchPointReleased) {
414+ if (!touchPoint) {
415+ qCritical() << "DirectionalDragArea[status=Recognized]: touch " << m_touchId
416+ << "missing from QTouchEvent without first reaching state Qt::TouchPointReleased. "
417+ "Considering it as released.";
282418 setStatus(WaitingForTouch);
283− }
284−}
285−
286−void DirectionalDragArea::touchEvent_rejected(QTouchEvent *event)
287−{
288− const QTouchEvent::TouchPoint *touchPoint = fetchTargetTouchPoint(event);
419+ } else {
420+ setPreviousPos(touchPoint->pos());
421+ setPreviousScenePos(touchPoint->scenePos());
289422
290− if (!touchPoint || touchPoint->state() == Qt::TouchPointReleased) {
291− setStatus(WaitingForTouch);
423+ if (touchPoint->state() == Qt::TouchPointReleased) {
424+ setStatus(WaitingForTouch);
425+ }
292426 }
293427}
294428
@@ -307,8 +441,8 @@ const QTouchEvent::TouchPoint *DirectionalDragArea::fetchTargetTouchPoint(QTouch
307441
308442bool DirectionalDragArea::pointInsideAllowedArea() const
309443{
310− qreal dX = m_dampedPos.x() - m_startPos.x();
311− qreal dY = m_dampedPos.y() - m_startPos.y();
444+ qreal dX = m_dampedScenePos.x() - m_startScenePos.x();
445+ qreal dY = m_dampedScenePos.y() - m_startScenePos.y();
312446
313447 switch (m_direction) {
314448 case Direction::Upwards:
@@ -326,22 +460,26 @@ bool DirectionalDragArea::movingInRightDirection() const
326460{
327461 switch (m_direction) {
328462 case Direction::Upwards:
329− return m_dampedPos.y() <= m_previousDampedPos.y();
463+ return m_dampedScenePos.y() <= m_previousDampedScenePos.y();
330464 case Direction::Downwards:
331− return m_dampedPos.y() >= m_previousDampedPos.y();
465+ return m_dampedScenePos.y() >= m_previousDampedScenePos.y();
332466 case Direction::Leftwards:
333− return m_dampedPos.x() <= m_previousDampedPos.x();
467+ return m_dampedScenePos.x() <= m_previousDampedScenePos.x();
334468 default: // Direction::Rightwards:
335− return m_dampedPos.x() >= m_previousDampedPos.x();
469+ return m_dampedScenePos.x() >= m_previousDampedScenePos.x();
336470 }
337471}
338472
339473bool DirectionalDragArea::movedFarEnough(const QPointF &point) const
340474{
341− if (Direction::isHorizontal(m_direction))
342− return qFabs(point.x() - m_startPos.x()) > m_distanceThreshold;
343− else
344− return qFabs(point.y() - m_startPos.y()) > m_distanceThreshold;
475+ if (m_distanceThreshold > 0) {
476+ if (Direction::isHorizontal(m_direction))
477+ return qFabs(point.x() - m_startScenePos.x()) > m_distanceThreshold;
478+ else
479+ return qFabs(point.y() - m_startScenePos.y()) > m_distanceThreshold;
480+ } else {
481+ return true;
482+ }
345483}
346484
347485void DirectionalDragArea::checkSpeed()
@@ -351,7 +489,8 @@ void DirectionalDragArea::checkSpeed()
351489 qreal minSpeedMsecs = m_minSpeed / 1000.0;
352490
353491 if (speed < minSpeedMsecs) {
354− setStatus(Rejected);
492+ DDA_DEBUG("Rejecting gesture because it's below minimum speed.");
493+ setStatus(WaitingForTouch);
355494 }
356495 }
357496
@@ -359,7 +498,8 @@ void DirectionalDragArea::checkSpeed()
359498 m_silenceTime += m_recognitionTimer->interval();
360499
361500 if (m_silenceTime > m_maxSilenceTime) {
362− setStatus(Rejected);
501+ DDA_DEBUG("Rejecting gesture because it's silence time has been exceeded.");
502+ setStatus(WaitingForTouch);
363503 }
364504 } else {
365505 m_silenceTime = 0;
@@ -381,11 +521,13 @@ void DirectionalDragArea::setStatus(DirectionalDragArea::Status newStatus)
381521 m_status = newStatus;
382522 Q_EMIT statusChanged(m_status);
383523
524+ #if DIRECTIONALDRAGAREA_DEBUG
525+ qDebug() << "[DDA]" << statusToString(oldStatus) << "->" << statusToString(newStatus);
526+ #endif
527+
384528 switch (newStatus) {
385529 case WaitingForTouch:
386− if (oldStatus != DirectionalDragArea::Rejected) {
387− Q_EMIT draggingChanged(false);
388− }
530+ Q_EMIT draggingChanged(false);
389531 break;
390532 case Undecided:
391533 m_recognitionTimer->start();
@@ -395,9 +537,6 @@ void DirectionalDragArea::setStatus(DirectionalDragArea::Status newStatus)
395537 if (oldStatus == WaitingForTouch)
396538 Q_EMIT draggingChanged(true);
397539 break;
398− case Rejected:
399− Q_EMIT draggingChanged(false);
400− break;
401540 default:
402541 // no-op
403542 break;
@@ -406,8 +545,6 @@ void DirectionalDragArea::setStatus(DirectionalDragArea::Status newStatus)
406545
407546void DirectionalDragArea::setPreviousPos(const QPointF &point)
408547{
409− Q_ASSERT(m_status != Rejected);
410−
411548 bool xChanged = m_previousPos.x() != point.x();
412549 bool yChanged = m_previousPos.y() != point.y();
413550
@@ -428,8 +565,6 @@ void DirectionalDragArea::setPreviousPos(const QPointF &point)
428565
429566void DirectionalDragArea::setPreviousScenePos(const QPointF &point)
430567{
431− Q_ASSERT(m_status != Rejected);
432−
433568 bool xChanged = m_previousScenePos.x() != point.x();
434569 bool yChanged = m_previousScenePos.y() != point.y();
435570
@@ -457,5 +592,106 @@ void DirectionalDragArea::updateVelocityCalculator(const QPointF &point)
457592 }
458593}
459594
595+bool DirectionalDragArea::isWithinTouchCompositionWindow()
596+{
597+ return !m_activeTouches.isEmpty() &&
598+ m_timeSource->msecsSinceReference() <=
599+ m_activeTouches.mostRecentStartTime() + (qint64)compositionTime();
600+}
601+
602+//************************** ActiveTouchesInfo **************************
603+
604+DirectionalDragArea::ActiveTouchesInfo::ActiveTouchesInfo(const SharedTimeSource &timeSource)
605+ : m_timeSource(timeSource), m_lastUsedIndex(-1)
606+{
607+ // Estimate of the maximum number of active touches we might reach.
608+ // Not a problem if it ends up being an underestimate as this is just
609+ // an optimization.
610+ m_vector.resize(3);
611+}
612+
613+void DirectionalDragArea::ActiveTouchesInfo::update(QTouchEvent *event)
614+{
615+ if (!(event->touchPointStates() & (Qt::TouchPointPressed | Qt::TouchPointReleased))) {
616+ // nothing to update
617+ return;
618+ }
619+
620+ const QList<QTouchEvent::TouchPoint> &touchPoints = event->touchPoints();
621+ for (int i = 0; i < touchPoints.count(); ++i) {
622+ const QTouchEvent::TouchPoint &touchPoint = touchPoints.at(i);
623+ if (touchPoint.state() == Qt::TouchPointPressed) {
624+ addTouchPoint(touchPoint);
625+ } else if (touchPoint.state() == Qt::TouchPointReleased) {
626+ removeTouchPoint(touchPoint);
627+ }
628+ }
629+}
630+
631+void DirectionalDragArea::ActiveTouchesInfo::addTouchPoint(const QTouchEvent::TouchPoint &touchPoint)
632+{
633+ ActiveTouchInfo &activeTouchInfo = getEmptySlot();
634+ activeTouchInfo.id = touchPoint.id();
635+ activeTouchInfo.startTime = m_timeSource->msecsSinceReference();
636+}
637+
638+void DirectionalDragArea::ActiveTouchesInfo::removeTouchPoint(const QTouchEvent::TouchPoint &touchPoint)
639+{
640+ for (int i = 0; i <= m_lastUsedIndex; ++i) {
641+ if (touchPoint.id() == m_vector.at(i).id) {
642+ freeSlot(i);
643+ return;
644+ }
645+ }
646+ Q_ASSERT(false); // shouldn't reach this point
647+}
648+
649+DirectionalDragArea::ActiveTouchInfo &DirectionalDragArea::ActiveTouchesInfo::getEmptySlot()
650+{
651+ Q_ASSERT(m_lastUsedIndex < m_vector.size());
652+
653+ // Look for an in-between vacancy first
654+ for (int i = 0; i < m_lastUsedIndex; ++i) {
655+ ActiveTouchInfo &activeTouchInfo = m_vector[i];
656+ if (!activeTouchInfo.isValid()) {
657+ return activeTouchInfo;
658+ }
659+ }
660+
661+ ++m_lastUsedIndex;
662+ if (m_lastUsedIndex >= m_vector.size()) {
663+ m_vector.resize(m_lastUsedIndex + 1);
664+ }
665+
666+ return m_vector[m_lastUsedIndex];
667+}
668+
669+void DirectionalDragArea::ActiveTouchesInfo::freeSlot(int index)
670+{
671+ m_vector[index].reset();
672+ if (index == m_lastUsedIndex) {
673+ do {
674+ --m_lastUsedIndex;
675+ } while (m_lastUsedIndex >= 0 && !m_vector.at(m_lastUsedIndex).isValid());
676+ }
677+}
678+
679+qint64 DirectionalDragArea::ActiveTouchesInfo::mostRecentStartTime()
680+{
681+ Q_ASSERT(m_lastUsedIndex >= 0);
682+
683+ qint64 highestStartTime = m_vector.at(0).startTime;
684+ int i = 1;
685+ do {
686+ const ActiveTouchInfo &activeTouchInfo = m_vector.at(i);
687+ if (activeTouchInfo.isValid() && activeTouchInfo.startTime > highestStartTime) {
688+ highestStartTime = activeTouchInfo.startTime;
689+ }
690+ ++i;
691+ } while (i < m_lastUsedIndex);
692+
693+ return highestStartTime;
694+}
695+
460696// Because we are defining a new QObject-based class (RecognitionTimer) here.
461697#include "DirectionalDragArea.moc"
plugins/Ubuntu/Gestures/DirectionalDragArea.h+50−13
@@ -117,9 +117,17 @@ class UBUNTUGESTURES_EXPORT DirectionalDragArea : public QQuickItem {
117117 Q_PROPERTY(int maxSilenceTime READ maxSilenceTime
118118 WRITE setMaxSilenceTime
119119 NOTIFY maxSilenceTimeChanged)
120+
120121 //
121122 /////
122123
124+ // Maximum time (in milliseconds) after the start of a given touch point where
125+ // subsequent touch starts are grouped with the first one into an N-touches gesture
126+ // (e.g. a two-fingers tap or drag).
127+ Q_PROPERTY(int compositionTime READ compositionTime
128+ WRITE setCompositionTime
129+ NOTIFY compositionTimeChanged)
130+
123131 Q_ENUMS(Direction)
124132 Q_ENUMS(Status)
125133public:
@@ -130,26 +138,23 @@ public:
130138
131139 // Describes the state of the directional drag gesture.
132140 enum Status {
133− // There's no touch point over this area.
141+ // Waiting for a new touch point to land on this area. No gesture is being processed
142+ // or tracked.
134143 WaitingForTouch,
135144
136145 // A touch point has landed on this area but it's not know yet whether it is
137146 // performing a drag in the correct direction.
147+ // If it's decided that the touch point is not performing a directional drag gesture,
148+ // it will be rejected/ignored and status will return to WaitingForTouch.
138149 Undecided, //Recognizing,
139150
140151 // There's a touch point in this area and it performed a drag in the correct
141152 // direction.
142153 //
143− // Once recognized, the gesture state will move back to Absent only once
154+ // Once recognized, the gesture state will move back to WaitingForTouch only once
144155 // that touch point ends. The gesture will remain in the Recognized state even if
145156 // the touch point starts moving in other directions or halts.
146157 Recognized,
147−
148− // A gesture was performed but it wasn't a single-touch drag in the correct
149− // direction.
150− // It will remain in this state until there are no more touch points over this
151− // area, at which point it will move to Absent state.
152− Rejected
153158 };
154159 Status status() const { return m_status; }
155160
@@ -164,7 +169,7 @@ public:
164169
165170 bool dragging() const { return (m_status == Undecided) || (m_status == Recognized); }
166171
167− qreal maxDeviation() const { return m_dampedPos.maxDelta(); }
172+ qreal maxDeviation() const { return m_dampedScenePos.maxDelta(); }
168173 void setMaxDeviation(qreal value);
169174
170175 qreal wideningAngle() const;
@@ -179,13 +184,16 @@ public:
179184 int maxSilenceTime() const { return m_maxSilenceTime; }
180185 void setMaxSilenceTime(int value);
181186
187+ int compositionTime() const { return m_compositionTime; }
188+ void setCompositionTime(int value);
189+
182190 // Replaces the existing Timer with the given one.
183191 //
184192 // Useful for providing a fake timer when testing.
185193 void setRecognitionTimer(UbuntuGestures::AbstractTimer *timer);
186194
187195 // Useful for testing, where a fake time source can be supplied
188− void setTimeSource(UbuntuGestures::TimeSource *timeSource);
196+ void setTimeSource(const UbuntuGestures::SharedTimeSource &timeSource);
189197
190198Q_SIGNALS:
191199 void directionChanged(Direction::Type direction);
@@ -198,6 +206,7 @@ Q_SIGNALS:
198206 void distanceThresholdChanged(qreal value);
199207 void minSpeedChanged(qreal value);
200208 void maxSilenceTimeChanged(int value);
209+ void compositionTimeChanged(int value);
201210 void touchXChanged(qreal value);
202211 void touchYChanged(qreal value);
203212 void touchSceneXChanged(qreal value);
@@ -213,7 +222,6 @@ private:
213222 void touchEvent_absent(QTouchEvent *event);
214223 void touchEvent_undecided(QTouchEvent *event);
215224 void touchEvent_recognized(QTouchEvent *event);
216− void touchEvent_rejected(QTouchEvent *event);
217225 bool pointInsideAllowedArea() const;
218226 bool movingInRightDirection() const;
219227 bool movedFarEnough(const QPointF &point) const;
@@ -222,6 +230,7 @@ private:
222230 void setPreviousPos(const QPointF &point);
223231 void setPreviousScenePos(const QPointF &point);
224232 void updateVelocityCalculator(const QPointF &point);
233+ bool isWithinTouchCompositionWindow();
225234
226235 Status m_status;
227236
@@ -233,8 +242,8 @@ private:
233242
234243 // A movement damper is used in some of the gesture recognition calculations
235244 // to get rid of noise or small oscillations in the touch position.
236− DampedPointF m_dampedPos;
237− QPointF m_previousDampedPos;
245+ DampedPointF m_dampedScenePos;
246+ QPointF m_previousDampedScenePos;
238247
239248 Direction::Type m_direction;
240249 qreal m_wideningAngle; // in degrees
@@ -243,9 +252,37 @@ private:
243252 qreal m_minSpeed;
244253 int m_maxSilenceTime; // in milliseconds
245254 int m_silenceTime; // in milliseconds
255+ int m_compositionTime; // in milliseconds
246256 int m_numSamplesOnLastSpeedCheck;
247257 UbuntuGestures::AbstractTimer *m_recognitionTimer;
248258 AxisVelocityCalculator *m_velocityCalculator;
259+
260+ UbuntuGestures::SharedTimeSource m_timeSource;
261+
262+ // Information about an active touch point
263+ struct ActiveTouchInfo {
264+ ActiveTouchInfo() : id(-1), startTime(-1) {}
265+ bool isValid() const { return id != -1; }
266+ void reset() { id = -1; }
267+ int id;
268+ qint64 startTime;
269+ };
270+ class ActiveTouchesInfo {
271+ public:
272+ ActiveTouchesInfo(const UbuntuGestures::SharedTimeSource &timeSource);
273+ void update(QTouchEvent *event);
274+ ActiveTouchInfo &touchInfo(int id);
275+ qint64 mostRecentStartTime();
276+ UbuntuGestures::SharedTimeSource m_timeSource;
277+ bool isEmpty() const { return m_lastUsedIndex == -1; }
278+ private:
279+ void addTouchPoint(const QTouchEvent::TouchPoint &touchPoint);
280+ ActiveTouchInfo &getEmptySlot();
281+ void freeSlot(int index);
282+ void removeTouchPoint(const QTouchEvent::TouchPoint &touchPoint);
283+ QVector<struct ActiveTouchInfo> m_vector;
284+ int m_lastUsedIndex;
285+ } m_activeTouches;
249286};
250287
251288#endif // DIRECTIONAL_DRAG_AREA_H
plugins/Ubuntu/Gestures/PressedOutsideNotifier.cppnew file+119
@@ -0,0 +1,119 @@
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 "PressedOutsideNotifier.h"
18+
19+#include <QMouseEvent>
20+
21+PressedOutsideNotifier::PressedOutsideNotifier(QQuickItem *parent)
22+ : QQuickItem(parent)
23+{
24+ connect(this, &QQuickItem::enabledChanged,
25+ this, &PressedOutsideNotifier::setupOrTearDownEventFiltering);
26+
27+ m_signalEmissionTimer.setSingleShot(true);
28+ m_signalEmissionTimer.setInterval(0); // times out on the next iteration of the event loop
29+ connect(&m_signalEmissionTimer, &QTimer::timeout,
30+ this, &PressedOutsideNotifier::pressedOutside);
31+}
32+
33+bool PressedOutsideNotifier::eventFilter(QObject *watched, QEvent *event)
34+{
35+ Q_UNUSED(watched);
36+ Q_ASSERT(watched == m_filteredWindow);
37+
38+ // We are already going to emit pressedOutside() anyway, thus no need
39+ // for new checks.
40+ // This case takes place when a QTouchEvent comes in and isn't handled by any item,
41+ // causing QQuickWindow to synthesize a QMouseEvent out of it, which would
42+ // be filtered by us as well and count as a second press, which is wrong.
43+ if (m_signalEmissionTimer.isActive()) {
44+ return false;
45+ }
46+
47+ switch (event->type()) {
48+ case QEvent::MouseButtonPress: {
49+ QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
50+ QPointF p = mapFromScene(mouseEvent->windowPos());
51+ if (!contains(p)) {
52+ m_signalEmissionTimer.start();
53+ }
54+ break;
55+ }
56+ case QEvent::TouchBegin:
57+ processFilteredTouchBegin(static_cast<QTouchEvent*>(event));
58+ default:
59+ break;
60+ }
61+
62+ // let the event be handled further
63+ return false;
64+}
65+
66+void PressedOutsideNotifier::itemChange(ItemChange change, const ItemChangeData &value)
67+{
68+ if (change == QQuickItem::ItemSceneChange) {
69+ setupOrTearDownEventFiltering();
70+ }
71+
72+ QQuickItem::itemChange(change, value);
73+}
74+
75+void PressedOutsideNotifier::setupOrTearDownEventFiltering()
76+{
77+ if (isEnabled() && window()) {
78+ setupEventFiltering();
79+ } else if (m_filteredWindow) {
80+ tearDownEventFiltering();
81+ }
82+}
83+
84+void PressedOutsideNotifier::setupEventFiltering()
85+{
86+ QQuickWindow *currentWindow = window();
87+ Q_ASSERT(currentWindow != nullptr);
88+
89+ if (currentWindow == m_filteredWindow)
90+ return;
91+
92+ if (m_filteredWindow) {
93+ m_filteredWindow->removeEventFilter(this);
94+ }
95+
96+ currentWindow->installEventFilter(this);
97+ m_filteredWindow = currentWindow;
98+}
99+
100+void PressedOutsideNotifier::tearDownEventFiltering()
101+{
102+ m_filteredWindow->removeEventFilter(this);
103+ m_filteredWindow.clear();
104+}
105+
106+void PressedOutsideNotifier::processFilteredTouchBegin(QTouchEvent *event)
107+{
108+ const QList<QTouchEvent::TouchPoint> &touchPoints = event->touchPoints();
109+ for (int i = 0; i < touchPoints.count(); ++i) {
110+ const QTouchEvent::TouchPoint &touchPoint = touchPoints.at(i);
111+ if (touchPoint.state() == Qt::TouchPointPressed) {
112+ QPointF p = mapFromScene(touchPoint.pos());
113+ if (!contains(p)) {
114+ m_signalEmissionTimer.start();
115+ return;
116+ }
117+ }
118+ }
119+}
plugins/Ubuntu/Gestures/PressedOutsideNotifier.hnew file+62
@@ -0,0 +1,62 @@
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+#ifndef PRESSED_OUTSIDE_NOTIFIER_H
18+#define PRESSED_OUTSIDE_NOTIFIER_H
19+
20+#include <QQuickItem>
21+
22+#include <QQuickWindow>
23+#include <QPointer>
24+#include <QTimer>
25+
26+#include "UbuntuGesturesGlobal.h"
27+
28+/*
29+ Notifies when a point, mouse or touch, is pressed outside its area.
30+
31+ Only enable it while needed.
32+ */
33+class UBUNTUGESTURES_EXPORT PressedOutsideNotifier : public QQuickItem {
34+ Q_OBJECT
35+
36+public:
37+ PressedOutsideNotifier(QQuickItem * parent = nullptr);
38+
39+ // From QObject
40+ bool eventFilter(QObject *watched, QEvent *event) override;
41+
42+Q_SIGNALS:
43+ void pressedOutside();
44+
45+protected:
46+ void itemChange(ItemChange change, const ItemChangeData &value) override;
47+
48+private Q_SLOTS:
49+ void setupOrTearDownEventFiltering();
50+
51+private:
52+ void setupEventFiltering();
53+ void tearDownEventFiltering();
54+ void processFilteredTouchBegin(QTouchEvent *event);
55+
56+ QPointer<QQuickWindow> m_filteredWindow;
57+
58+ // Emits pressedOutside() signal on timeout
59+ QTimer m_signalEmissionTimer;
60+};
61+
62+#endif // PRESSED_OUTSIDE_NOTIFIER_H
plugins/Ubuntu/Gestures/TimeSource.cppnew file+49
@@ -0,0 +1,49 @@
1+/*
2+ * Copyright (C) 2013 - Canonical Ltd.
3+ *
4+ * This program is free software: you can redistribute it and/or modify it
5+ * under the terms of the GNU Lesser General Public License, as
6+ * published by the Free Software Foundation; either version 2.1 or 3.0
7+ * of the License.
8+ *
9+ * This program is distributed in the hope that it will be useful, but
10+ * WITHOUT ANY WARRANTY; without even the implied warranties of
11+ * MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
12+ * PURPOSE. See the applicable version of the GNU Lesser General Public
13+ * License for more details.
14+ *
15+ * You should have received a copy of both the GNU Lesser General Public
16+ * License along with this program. If not, see <http://www.gnu.org/licenses/>
17+ *
18+ * Authored by: Daniel d'Andrada <daniel.dandrada@canonical.com>
19+ */
20+
21+#include "TimeSource.h"
22+
23+#include <QElapsedTimer>
24+
25+namespace UbuntuGestures {
26+class RealTimeSourcePrivate {
27+public:
28+ QElapsedTimer timer;
29+};
30+}
31+
32+using namespace UbuntuGestures;
33+
34+RealTimeSource::RealTimeSource()
35+ : UbuntuGestures::TimeSource()
36+ , d(new RealTimeSourcePrivate)
37+{
38+ d->timer.start();
39+}
40+
41+RealTimeSource::~RealTimeSource()
42+{
43+ delete d;
44+}
45+
46+qint64 RealTimeSource::msecsSinceReference()
47+{
48+ return d->timer.elapsed();
49+}
plugins/Ubuntu/Gestures/TimeSource.hnew file+54
@@ -0,0 +1,54 @@
1+/*
2+ * Copyright (C) 2013 - Canonical Ltd.
3+ *
4+ * This program is free software: you can redistribute it and/or modify it
5+ * under the terms of the GNU Lesser General Public License, as
6+ * published by the Free Software Foundation; either version 2.1 or 3.0
7+ * of the License.
8+ *
9+ * This program is distributed in the hope that it will be useful, but
10+ * WITHOUT ANY WARRANTY; without even the implied warranties of
11+ * MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
12+ * PURPOSE. See the applicable version of the GNU Lesser General Public
13+ * License for more details.
14+ *
15+ * You should have received a copy of both the GNU Lesser General Public
16+ * License along with this program. If not, see <http://www.gnu.org/licenses/>
17+ *
18+ * Authored by: Daniel d'Andrada <daniel.dandrada@canonical.com>
19+ */
20+
21+#ifndef UBUNTUGESTURES_TIMESOURCE_H
22+#define UBUNTUGESTURES_TIMESOURCE_H
23+
24+#include "UbuntuGesturesGlobal.h"
25+#include <QSharedPointer>
26+
27+namespace UbuntuGestures {
28+/*
29+ Interface for a time source.
30+ */
31+class UBUNTUGESTURES_EXPORT TimeSource {
32+public:
33+ virtual ~TimeSource() {}
34+ /* Returns the current time in milliseconds since some reference time in the past. */
35+ virtual qint64 msecsSinceReference() = 0;
36+};
37+typedef QSharedPointer<TimeSource> SharedTimeSource;
38+
39+/*
40+ Implementation of a time source
41+ */
42+class RealTimeSourcePrivate;
43+class RealTimeSource : public TimeSource {
44+public:
45+ RealTimeSource();
46+ virtual ~RealTimeSource();
47+ qint64 msecsSinceReference() override;
48+private:
49+ RealTimeSourcePrivate *d;
50+};
51+
52+} // namespace UbuntuGestures
53+
54+#endif // UBUNTUGESTURES_TIMESOURCE_H
plugins/Ubuntu/Gestures/plugin.cpp+2
@@ -18,6 +18,7 @@
1818#include "AxisVelocityCalculator.h"
1919#include "Direction.h"
2020#include "DirectionalDragArea.h"
21+#include "PressedOutsideNotifier.h"
2122
2223#include <qqml.h>
2324
@@ -32,4 +33,5 @@ void UbuntuGestureQmlPlugin::registerTypes(const char *uri)
3233 qmlRegisterSingletonType<Direction>(uri, 0, 1, "Direction", directionSingleton);
3334 qmlRegisterType<DirectionalDragArea>(uri, 0, 1, "DirectionalDragArea");
3435 qmlRegisterType<AxisVelocityCalculator>(uri, 0, 1, "AxisVelocityCalculator");
36+ qmlRegisterType<PressedOutsideNotifier>(uri, 0, 1, "PressedOutsideNotifier");
3537}
plugins/Unity/CMakeLists.txt−69
@@ -1,71 +1,2 @@
1−# export_qmlplugin macro
2−include(Plugins)
3−
41add_subdirectory(Indicators)
5−
6−# Dependencies
7−include(FindPkgConfig)
8−pkg_check_modules(QTDEE REQUIRED libdee-qt5>=3.2)
9−pkg_check_modules(UNITYCORE REQUIRED unity-core-6.0>=7.1.1)
10−
11−include_directories(
12− ${CMAKE_CURRENT_SOURCE_DIR}
13− ${CMAKE_CURRENT_BINARY_DIR}
14− ${QTDEE_INCLUDE_DIRS}
15− ${UNITYCORE_INCLUDE_DIRS}
16− ${Qt5DBus_INCLUDE_DIRS}
17−)
18−
19−set(QMLPLUGIN_SRC
20− abstractfilteroption.cpp
21− scope.cpp
22− scopes.cpp
23− categories.cpp
24− checkoptionfilter.cpp
25− filter.cpp
26− filteroption.cpp
27− filters.cpp
28− genericoptionsmodel.cpp
29− ratingoptionsmodel.cpp
30− unityoptionsmodel.cpp
31− categoryresults.cpp
32− plugin.cpp
33− multirangefilter.cpp
34− radiooptionfilter.cpp
35− ratingsfilter.cpp
36− ratingfilteroption.cpp
37− bottombarvisibilitycommunicatorshell.cpp
38− applicationpreview.cpp
39− genericpreview.cpp
40− moviepreview.cpp
41− musicpreview.cpp
42− preview.cpp
43− previewaction.cpp
44− previewinfohint.cpp
45− result.cpp
46− showallfilteroption.cpp
47− signalslist.cpp
48− socialpreview.cpp
49− socialpreviewcomment.cpp
50− iconutils.cpp
51− variantutils.cpp
52−)
53−
54−add_library(Unity-qml MODULE
55− ${QMLPLUGIN_SRC}
56− )
57−
58−target_link_libraries(Unity-qml
59− ${QTDEE_LDFLAGS}
60− ${UNITYCORE_LDFLAGS}
61− ${Qt5DBus_LIBRARIES}
62− ${Qt5Gui_LIBRARIES}
63− )
64−
65−qt5_use_modules(Unity-qml Qml)
66−
67−# export the qmldir qmltypes and plugin files
68−export_qmlfiles(Unity Unity)
69−export_qmlplugin(Unity 0.1 Unity TARGETS Unity-qml)
70−
712add_subdirectory(Launcher)
plugins/Unity/Indicators/indicator.cpp+8−16
@@ -31,32 +31,24 @@ Indicator::~Indicator()
3131{
3232}
3333
34−void Indicator::init(const QString& busName, const QSettings& settings)
34+void Indicator::init(const QString &profile, const QString& busName, const QSettings& settings)
3535{
3636 setId(settings.value("Indicator Service/Name").toString());
37− setPosition(settings.value("Indicator Service/Position", QVariant::fromValue(0)).toInt());
3837
39− QString actionObjectPath = settings.value("Indicator Service/ObjectPath").toString();
40−
41− QVariantMap mapMenuObjectPaths;
42− Q_FOREACH(const QString& childGroup, settings.childGroups())
43− {
44− if (childGroup == "Indicator Service")
45− continue;
38+ QVariant pos = settings.value(profile + "/Position");
39+ if (!pos.isValid())
40+ pos = settings.value("Indicator Service/Position", QVariant::fromValue(0));
41+ setPosition(pos.toInt());
4642
47− QString menuPath = childGroup+"/ObjectPath";
48− if (settings.contains(menuPath))
49− {
50− mapMenuObjectPaths[childGroup] = settings.value(menuPath).toString();
51− }
52− }
43+ QString actionObjectPath = settings.value("Indicator Service/ObjectPath").toString();
44+ QString menuObjectPath = settings.value(profile + "/ObjectPath").toString();
5345
5446 QVariantMap properties;
5547 properties.clear();
5648 properties.insert("busType", 1);
5749 properties.insert("busName", busName);
5850 properties.insert("actionsObjectPath", actionObjectPath);
59− properties.insert("menuObjectPaths", mapMenuObjectPaths);
51+ properties.insert("menuObjectPath", menuObjectPath);
6052 setIndicatorProperties(properties);
6153}
6254
plugins/Unity/Indicators/indicator.h+1−1
@@ -35,7 +35,7 @@ public:
3535 Indicator(QObject *parent = 0);
3636 virtual ~Indicator();
3737
38− void init(const QString& busName, const QSettings& settings);
38+ void init(const QString &profile, const QString& busName, const QSettings& settings);
3939
4040 QString identifier() const;
4141 int position() const;
plugins/Unity/Indicators/indicatorsmanager.cpp+3−1
@@ -26,6 +26,8 @@
2626
2727#include "paths.h"
2828
29+const QString profile = "phone";
30+
2931
3032class IndicatorsManager::IndicatorData
3133{
@@ -298,7 +300,7 @@ Indicator::Ptr IndicatorsManager::indicator(const QString& indicator_name)
298300 Indicator::Ptr new_indicator(new Indicator(this));
299301 data->m_indicator = new_indicator;
300302 QSettings settings(data->m_fileInfo.absoluteFilePath(), QSettings::IniFormat, this);
301− new_indicator->init(data->m_fileInfo.fileName(), settings);
303+ new_indicator->init(profile, data->m_fileInfo.fileName(), settings);
302304 return new_indicator;
303305}
304306
plugins/Unity/Indicators/qml/IndicatorBase.qml+3−4
@@ -24,16 +24,15 @@ import Unity.Indicators 0.1 as Indicators
2424Item {
2525 id: indicatorItem
2626
27− enabled: menuObjectPaths.hasOwnProperty(device)
27+ enabled: menuObjectPath != ""
2828
2929 //const
3030 property string busName
3131 property string actionsObjectPath
32− property var menuObjectPaths: undefined
33− readonly property string device: "phone"
32+ property string menuObjectPath
3433 property string rootMenuType: "com.canonical.indicator.root"
3534
36− property string deviceMenuObjectPath: menuObjectPaths.hasOwnProperty(device) ? menuObjectPaths[device] : ""
35+ property string deviceMenuObjectPath: menuObjectPath
3736
3837 property alias menuModel: cachedModel.model
3938
plugins/Unity/Indicators/qml/IndicatorPage.qml+27−6
@@ -34,11 +34,36 @@ IndicatorBase {
3434 Indicators.UnityMenuModelStack {
3535 id: menuStack
3636 head: contentActive ? main.menuModel : null
37+
38+ property var rootMenu: null
39+
40+ onTailChanged: {
41+ if (!tail) {
42+ rootMenu = null;
43+ } else if (rootMenu != tail) {
44+ if (tail.get(0, "type") === rootMenuType) {
45+ rootMenu = menuStack.tail.submenu(0);
46+ push(rootMenu, 0);
47+ } else {
48+ rootMenu = null;
49+ }
50+ }
51+ }
52+ }
53+
54+ Connections {
55+ target: menuStack.tail
56+ onRowsInserted: {
57+ if (menuStack.rootMenu !== menuStack.tail && menuStack.tail.get(0, "type") === rootMenuType) {
58+ menuStack.rootMenu = menuStack.tail.submenu(0);
59+ menuStack.push(menuStack.rootMenu, 0);
60+ }
61+ }
3762 }
3863
3964 ListView {
4065 id: mainMenu
41− model: menuStack.tail ? menuStack.tail : null
66+ model: menuStack.rootMenu
4267
4368 anchors {
4469 fill: parent
@@ -102,7 +127,7 @@ IndicatorBase {
102127
103128 Loader {
104129 id: loader
105− asynchronous: true
130+ asynchronous: false
106131
107132 property int modelIndex: index
108133
@@ -114,10 +139,6 @@ IndicatorBase {
114139 sourceComponent: factory.load(model)
115140
116141 onLoaded: {
117− if (model.type === rootMenuType) {
118− menuStack.push(mainMenu.model.submenu(index));
119− }
120−
121142 if (item.hasOwnProperty("menuSelected")) {
122143 item.menuSelected = Qt.binding(function() { return mainMenu.selectedIndex == index; });
123144 item.selectMenu.connect(function() { mainMenu.selectedIndex = index; });
plugins/Unity/Indicators/qml/IndicatorWidget.qml+1−1
@@ -24,5 +24,5 @@ IndicatorBase {
2424 id: indicatorWidget
2525
2626 enabled: false
27− property int iconSize: height - units.gu(0.5)
27+ property int iconSize: height
2828}
plugins/Unity/Indicators/qml/SliderMenuItem.qml+3−2
@@ -51,12 +51,12 @@ FramedMenuItem {
5151
5252 control: Item {
5353 id: row
54− width: sliderMenu.text ? units.gu(20) : menuItem.width - (2 * menuItem.__contentsMargins)
54+ width: menuItem.text ? units.gu(20) : menuItem.width - (2 * menuItem.__contentsMargins)
5555 height: slider.height
5656
5757 Image {
5858 id: leftImage
59− visible: source != ""
59+ visible: status === Image.Ready
6060 anchors.left: row.left
6161 anchors.verticalCenter: row.verticalCenter
6262 height: units.gu(4)
@@ -96,6 +96,7 @@ FramedMenuItem {
9696
9797 Image {
9898 id: rightImage
99+ visible: status === Image.Ready
99100 anchors.right: row.right
100101 anchors.verticalCenter: row.verticalCenter
101102 height: units.gu(4)
plugins/Unity/Indicators/unitymenumodelstack.cpp+98−7
@@ -19,6 +19,64 @@
1919
2020#include "unitymenumodelstack.h"
2121
22+#include <QDebug>
23+#include <unitymenumodel.h>
24+
25+class UnityMenuModelEntry : public QObject {
26+ Q_OBJECT
27+public:
28+ UnityMenuModelEntry(UnityMenuModel* model, UnityMenuModel* parentModel, int index)
29+ : m_model(model),
30+ m_parentModel(parentModel),
31+ m_index(index)
32+ {
33+ if (m_parentModel) {
34+ QObject::connect(m_parentModel, SIGNAL(rowsInserted(QModelIndex, int, int)), this, SLOT(onRowsInserted(QModelIndex, int, int)));
35+ QObject::connect(m_parentModel, SIGNAL(rowsRemoved(QModelIndex, int, int)), this, SLOT(onRowsRemoved(QModelIndex, int, int)));
36+ QObject::connect(m_parentModel, SIGNAL(modelReset()), this, SLOT(onModelReset()));
37+ }
38+ }
39+
40+ UnityMenuModel* model() const { return m_model; }
41+
42+private Q_SLOTS:
43+ void onRowsInserted(const QModelIndex&, int start, int end)
44+ {
45+ int delta = end-start + 1;
46+ if (start <= m_index) {
47+ m_index += delta;
48+ }
49+ }
50+
51+ void onRowsRemoved(const QModelIndex&, int start, int end)
52+ {
53+ int delta = end-start + 1;
54+ if (start <= m_index) {
55+ if (start + delta > m_index) {
56+ // in the range removed
57+ Q_EMIT remove();
58+ disconnect(m_parentModel, 0, this, 0);
59+ } else {
60+ m_index -= delta;
61+ }
62+ }
63+ }
64+
65+ void onModelReset()
66+ {
67+ Q_EMIT remove();
68+ disconnect(m_parentModel, 0, this, 0);
69+ }
70+
71+Q_SIGNALS:
72+ void remove();
73+
74+private:
75+ UnityMenuModel* m_model;
76+ UnityMenuModel* m_parentModel;
77+ int m_index;
78+};
79+
2280UnityMenuModelStack::UnityMenuModelStack(QObject* parent)
2381 : QObject(parent)
2482{
@@ -26,31 +84,44 @@ UnityMenuModelStack::UnityMenuModelStack(QObject* parent)
2684
2785UnityMenuModelStack::~UnityMenuModelStack()
2886{
87+ qDeleteAll(m_menuModels);
88+ m_menuModels.clear();
2989}
3090
3191UnityMenuModel* UnityMenuModelStack::head() const
3292{
33− return !m_menuModels.isEmpty() ? m_menuModels.first() : NULL;
93+ return !m_menuModels.isEmpty() ? m_menuModels.first()->model() : NULL;
3494}
3595
3696void UnityMenuModelStack::setHead(UnityMenuModel* model)
3797{
3898 if (head() != model) {
99+ qDeleteAll(m_menuModels);
39100 m_menuModels.clear();
40− push(model);
101+
102+ push(model, 0);
41103 Q_EMIT headChanged(model);
42104 }
43105}
44106
45107UnityMenuModel* UnityMenuModelStack::tail() const
46108{
47− return !m_menuModels.isEmpty() ? m_menuModels.last() : NULL;
109+ return !m_menuModels.isEmpty() ? m_menuModels.last()->model() : NULL;
110+}
111+
112+int UnityMenuModelStack::count() const
113+{
114+ return m_menuModels.count();
48115}
49116
50−void UnityMenuModelStack::push(UnityMenuModel* model)
117+void UnityMenuModelStack::push(UnityMenuModel* model, int index)
51118{
52− m_menuModels << model;
119+ UnityMenuModelEntry* entry = new UnityMenuModelEntry(model, tail(), index);
120+ QObject::connect(entry, SIGNAL(remove()), SLOT(onRemove()));
121+
122+ m_menuModels << entry;
53123 Q_EMIT tailChanged(model);
124+ Q_EMIT countChanged(m_menuModels.count());
54125}
55126
56127UnityMenuModel* UnityMenuModelStack::pop()
@@ -58,12 +129,32 @@ UnityMenuModel* UnityMenuModelStack::pop()
58129 if (m_menuModels.isEmpty()) {
59130 return NULL;
60131 }
61− UnityMenuModel* model = m_menuModels.takeLast();
132+ UnityMenuModelEntry* entry = m_menuModels.takeLast();
133+ UnityMenuModel* model = entry->model();
134+ entry->deleteLater();
62135
63136 Q_EMIT tailChanged(tail());
64137 if (m_menuModels.isEmpty()) {
65138 Q_EMIT headChanged(NULL);
66139 }
140+ Q_EMIT countChanged(m_menuModels.count());
67141
68142 return model;
69−}
143+}
144+
145+void UnityMenuModelStack::onRemove()
146+{
147+ UnityMenuModelEntry* removed = qobject_cast<UnityMenuModelEntry*>(sender());
148+ if (!m_menuModels.contains(removed))
149+ return;
150+
151+ for (int i = m_menuModels.count() -1; i >= 0; i--) {
152+ UnityMenuModelEntry* entry = m_menuModels[i];
153+ pop();
154+ if (entry == removed) {
155+ break;
156+ }
157+ }
158+}
159+
160+#include "unitymenumodelstack.moc"
plugins/Unity/Indicators/unitymenumodelstack.h+10−2
@@ -25,6 +25,7 @@
2525#include <QObject>
2626#include <QList>
2727
28+class UnityMenuModelEntry;
2829class UnityMenuModel;
2930
3031// A LIFO queue for storing the current submenu of a UnityMenuModel.
@@ -37,6 +38,7 @@ class UNITYINDICATORS_EXPORT UnityMenuModelStack : public QObject
3738 Q_OBJECT
3839 Q_PROPERTY(UnityMenuModel* head READ head WRITE setHead NOTIFY headChanged)
3940 Q_PROPERTY(UnityMenuModel* tail READ tail NOTIFY tailChanged)
41+ Q_PROPERTY(int count READ count NOTIFY countChanged)
4042public:
4143 UnityMenuModelStack(QObject*parent=NULL);
4244 ~UnityMenuModelStack();
@@ -46,15 +48,21 @@ public:
4648
4749 UnityMenuModel* tail() const;
4850
49− Q_INVOKABLE void push(UnityMenuModel* model);
51+ int count() const;
52+
53+ Q_INVOKABLE void push(UnityMenuModel* model, int menuIndex);
5054 Q_INVOKABLE UnityMenuModel* pop();
5155
5256Q_SIGNALS:
5357 void headChanged(UnityMenuModel* head);
5458 void tailChanged(UnityMenuModel* tail);
59+ void countChanged(int count);
60+
61+private Q_SLOTS:
62+ void onRemove();
5563
5664private:
57− QList<UnityMenuModel*> m_menuModels;
65+ QList<UnityMenuModelEntry*> m_menuModels;
5866};
5967
6068#endif // UNITYMENUMODELSTACK_H
plugins/Unity/Launcher/backend/launcherbackend.cpp+6−6
@@ -26,6 +26,7 @@
2626#include <QFileInfo>
2727#include <QGSettings>
2828#include <QDebug>
29+#include <QStandardPaths>
2930
3031class LauncherBackendItem
3132{
@@ -182,8 +183,10 @@ void LauncherBackend::syncFromAccounts()
182183
183184 if (m_accounts && !m_user.isEmpty()) {
184185 QVariant variant = m_accounts->getUserProperty(m_user, "com.canonical.unity.AccountsService", "launcher-items");
185− apps = qdbus_cast<QList<QVariantMap>>(variant.value<QDBusArgument>());
186− defaults = isDefaultsItem(apps);
186+ if (variant.isValid() && variant.canConvert<QDBusArgument>()) {
187+ apps = qdbus_cast<QList<QVariantMap>>(variant.value<QDBusArgument>());
188+ defaults = isDefaultsItem(apps);
189+ }
187190 }
188191
189192 if (m_accounts && defaults) { // Checking accounts as it'll be null when !useStorage
@@ -232,10 +235,7 @@ QString LauncherBackend::findDesktopFile(const QString &appId) const
232235 int dashPos = -1;
233236 QString helper = appId;
234237
235− QStringList searchDirs;
236− searchDirs << QDir::homePath() + "/.local/share/applications";
237− searchDirs << "/usr/share/applications";
238−
238+ QStringList searchDirs = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation);
239239#ifdef LAUNCHER_TESTING
240240 searchDirs << "";
241241#endif
plugins/Unity/Launcher/launcheritem.cpp+4−2
@@ -20,6 +20,8 @@
2020#include "launcheritem.h"
2121#include "quicklistmodel.h"
2222
23+#include <libintl.h>
24+
2325LauncherItem::LauncherItem(const QString &appId, const QString &name, const QString &icon, QObject *parent) :
2426 LauncherItemInterface(parent),
2527 m_appId(appId),
@@ -38,7 +40,7 @@ LauncherItem::LauncherItem(const QString &appId, const QString &name, const QStr
3840 m_quickList->appendAction(nameAction);
3941 QuickListEntry pinningAction;
4042 pinningAction.setActionId("pin_item");
41− pinningAction.setText("Pin to Launcher");
43+ pinningAction.setText(gettext("Lock to Launcher"));
4244 m_quickList->appendAction(pinningAction);
4345}
4446
@@ -68,7 +70,7 @@ void LauncherItem::setPinned(bool pinned)
6870 m_pinned = pinned;
6971 QuickListEntry entry;
7072 entry.setActionId("pin_item");
71− entry.setText(pinned ? "Remove from Launcher": "Pin to Launcher");
73+ entry.setText(pinned ? gettext("Unlock from Launcher") : gettext("Lock to Launcher"));
7274 m_quickList->updateAction(entry);
7375 Q_EMIT pinnedChanged(pinned);
7476 }
plugins/Unity/abstractfilteroption.hdeleted−58
@@ -1,58 +0,0 @@
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 ABSTRACTFILTEROPTION_H
21−#define ABSTRACTFILTEROPTION_H
22−
23−// Qt
24−#include <QObject>
25−#include <QMetaType>
26−
27−class Q_DECL_EXPORT AbstractFilterOption : public QObject
28−{
29− Q_OBJECT
30−
31− Q_PROPERTY(QString id READ id NOTIFY idChanged)
32− Q_PROPERTY(QString name READ name NOTIFY nameChanged)
33− Q_PROPERTY(QString iconHint READ iconHint NOTIFY iconHintChanged)
34− Q_PROPERTY(bool active READ active WRITE setActive NOTIFY activeChanged)
35−
36−public:
37− /* getters */
38− virtual QString id() const = 0;
39− virtual QString name() const = 0;
40− virtual QString iconHint() const = 0;
41− virtual bool active() const = 0;
42−
43− /* setters */
44− virtual void setActive(bool active) = 0;
45−
46−protected:
47− AbstractFilterOption(QObject *parent);
48−
49−Q_SIGNALS:
50− void idChanged(const QString &);
51− void nameChanged(const QString &);
52− void iconHintChanged(const QString &);
53− void activeChanged(bool);
54−};
55−
56−Q_DECLARE_METATYPE(AbstractFilterOption*)
57−
58−#endif // ABSTRACTFILTEROPTION_H
plugins/Unity/applicationpreview.cppdeleted−100
@@ -1,100 +0,0 @@
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−// local
21−#include "applicationpreview.h"
22−#include "iconutils.h"
23−
24−#include <QDebug>
25−
26−ApplicationPreview::ApplicationPreview(QObject *parent):
27− Preview(parent),
28− m_unityAppPreview(nullptr)
29−{
30−}
31−
32−QString ApplicationPreview::lastUpdate() const
33−{
34− if (m_unityAppPreview) {
35− return QString::fromStdString(m_unityAppPreview->last_update());
36− } else {
37− qWarning() << "Preview not set";
38− }
39− return QString();
40−}
41−
42−QString ApplicationPreview::copyright() const
43−{
44− if (m_unityAppPreview) {
45− return QString::fromStdString(m_unityAppPreview->copyright());
46− } else {
47− qWarning() << "Preview not set";
48− }
49− return QString();
50−}
51−
52−QString ApplicationPreview::license() const
53−{
54− if (m_unityAppPreview) {
55− return QString::fromStdString(m_unityAppPreview->license());
56− } else {
57− qWarning() << "Preview not set";
58− }
59− return QString();
60−}
61−
62−QString ApplicationPreview::appIcon() const
63−{
64− if (m_unityAppPreview) {
65− auto giconString = g_icon_to_string(m_unityAppPreview->app_icon());
66− QString result(gIconToDeclarativeImageProviderString(QString::fromUtf8(giconString)));
67− g_free(giconString);
68− return result;
69− } else {
70− qWarning() << "Preview not set";
71− }
72− return QString();
73−}
74−
75−float ApplicationPreview::rating() const
76−{
77− if (m_unityAppPreview) {
78− return m_unityAppPreview->rating();
79− } else {
80− qWarning() << "Preview not set";
81− }
82− return 0.0f;
83−}
84−
85−unsigned int ApplicationPreview::numRatings() const
86−{
87− if (m_unityAppPreview) {
88− return m_unityAppPreview->num_ratings();
89− } else {
90− qWarning() << "Preview not set";
91− }
92− return 0;
93−}
94−
95−void ApplicationPreview::setUnityPreview(unity::dash::Preview::Ptr unityPreview)
96−{
97− m_unityAppPreview = std::dynamic_pointer_cast<unity::dash::ApplicationPreview>(unityPreview);
98−
99− Q_EMIT previewChanged();
100−}
plugins/Unity/applicationpreview.hdeleted−66
@@ -1,66 +0,0 @@
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 APPLICATIONPREVIEW_H
21−#define APPLICATIONPREVIEW_H
22−
23−// local
24−#include "preview.h"
25−
26−// Qt
27−#include <QObject>
28−#include <QMetaType>
29−
30−// libunity-core
31−#include <UnityCore/ApplicationPreview.h>
32−
33−class Q_DECL_EXPORT ApplicationPreview: public Preview
34−{
35− Q_OBJECT
36−
37− Q_PROPERTY(QString lastUpdate READ lastUpdate NOTIFY previewChanged)
38− Q_PROPERTY(QString copyright READ copyright NOTIFY previewChanged)
39− Q_PROPERTY(QString license READ license NOTIFY previewChanged)
40− Q_PROPERTY(QString appIcon READ appIcon NOTIFY previewChanged)
41− Q_PROPERTY(float rating READ rating NOTIFY previewChanged)
42− Q_PROPERTY(unsigned int numRatings READ numRatings NOTIFY previewChanged)
43−
44−public:
45− explicit ApplicationPreview(QObject *parent = 0);
46−
47− QString lastUpdate() const;
48− QString copyright() const;
49− QString license() const;
50− QString appIcon() const;
51− float rating() const;
52− unsigned int numRatings() const;
53−
54−Q_SIGNALS:
55− void previewChanged();
56−
57−protected:
58− void setUnityPreview(unity::dash::Preview::Ptr unityPreview) override;
59−
60−private:
61− unity::dash::ApplicationPreview::Ptr m_unityAppPreview;
62−};
63−
64−Q_DECLARE_METATYPE(ApplicationPreview *)
65−
66−#endif
plugins/Unity/categories.cppdeleted−299
@@ -1,299 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Michał Sawicz <michal.sawicz@canonical.com>
6− * Michal Hruby <michal.hruby@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−// self
22−#include "categories.h"
23−#include "categoryresults.h"
24−#include <QDebug>
25−
26−// TODO: use something from libunity once it's public
27−enum CategoryColumn {
28− ID,
29− DISPLAY_NAME,
30− ICON_HINT,
31− RENDERER_NAME,
32− HINTS
33−};
34−
35−Categories::Categories(QObject* parent)
36− : DeeListModel(parent)
37−{
38− m_roles[Categories::RoleCategoryId] = "categoryId";
39− m_roles[Categories::RoleName] = "name";
40− m_roles[Categories::RoleIcon] = "icon";
41− m_roles[Categories::RoleRenderer] = "renderer";
42− m_roles[Categories::RoleContentType] = "contentType";
43− m_roles[Categories::RoleRendererHint] = "rendererHint";
44− m_roles[Categories::RoleProgressSource] = "progressSource";
45− m_roles[Categories::RoleHints] = "hints";
46− m_roles[Categories::RoleResults] = "results";
47− m_roles[Categories::RoleCount] = "count";
48−
49− // TODO This should not be needed but accumulatting the count changes
50− // makes the visualization more stable and also makes crashes on fast
51− // change of the search term harder to reproduce
52− m_timer.setSingleShot(true);
53− m_timer.setInterval(50);
54− connect(&m_timer, &QTimer::timeout, this, &Categories::onEmitCountChanged);
55−}
56−
57−DeeListModel*
58−Categories::getResults(int index) const
59−{
60− if (!m_results.contains(index)) {
61− CategoryResults* results = new CategoryResults(const_cast<Categories*>(this));
62− results->setCategoryIndex(index);
63− connect(results, &DeeListModel::countChanged, this, &Categories::onCountChanged);
64−
65− unsigned categoryIndex = static_cast<unsigned>(index);
66− auto unity_results = m_unityScope->GetResultsForCategory(categoryIndex);
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− }
78−
79− m_results.insert(index, results);
80− }
81−
82− return m_results[index];
83−}
84−
85−void Categories::onCategoriesModelChanged(unity::glib::Object<DeeModel> model)
86−{
87− m_updatedCategories.clear();
88− // FIXME: this might destroy the renderer view and re-create it, optimize?
89− Q_FOREACH(DeeListModel* model, m_results) {
90− delete model;
91− }
92− m_results.clear();
93− m_categoryOrder.clear();
94−
95− setModel(model);
96−}
97−
98−void Categories::onCategoryOrderChanged(const std::vector<unsigned int>& cat_order)
99−{
100− for (unsigned int pos = 0; pos<cat_order.size(); pos++)
101− {
102− unsigned int cat = cat_order[pos];
103− const int old_pos = m_categoryOrder.indexOf(cat);
104−
105− if (old_pos < 0) {
106− qWarning() << "No such category index:" << cat;
107− continue;
108− }
109−
110− if (static_cast<int>(pos) != old_pos) {
111− int target_pos = pos;
112− if (target_pos > old_pos)
113− target_pos++;
114− const bool status = beginMoveRows(QModelIndex(), old_pos, old_pos, QModelIndex(), target_pos);
115− if (status)
116− m_categoryOrder.move(old_pos, pos);
117− else
118− qWarning() << "beginMoveRows failed:" << old_pos << target_pos;
119− endMoveRows();
120− }
121− }
122−}
123−
124−void
125−Categories::setUnityScope(const unity::dash::Scope::Ptr& scope)
126−{
127− m_unityScope = scope;
128−
129− // no need to call this, we'll get notified
130− //setModel(m_unityScope->categories()->model());
131−
132− m_signals.disconnectAll();
133− m_signals << m_unityScope->categories()->model.changed.connect(sigc::mem_fun(this, &Categories::onCategoriesModelChanged));
134−
135− // FIXME: Don't handle category order changes for now as it causes UI issues (https://bugs.launchpad.net/unity8/+bug/1239584).
136− //m_signals << m_unityScope->category_order.changed.connect(sigc::mem_fun(this, &Categories::onCategoryOrderChanged));
137−}
138−
139−void
140−Categories::onCountChanged()
141−{
142− CategoryResults* results = qobject_cast<CategoryResults*>(sender());
143− if (results) {
144− if (!m_updatedCategories.contains(results->categoryIndex())) {
145− m_updatedCategories << results->categoryIndex();
146− }
147− m_timer.start();
148− }
149−}
150−
151−void Categories::onRowCountChanged()
152−{
153− QAbstractItemModel* model = qobject_cast<QAbstractItemModel*>(sender());
154− // find the corresponding category index
155− for (auto iter = m_overriddenCategories.begin(); iter != m_overriddenCategories.end(); ++iter) {
156− if (iter.value() == model) {
157− for (int i = 0; i < rowCount(); i++) {
158− auto id = data(index(i), RoleCategoryId).toString();
159− if (id != iter.key()) continue;
160− QVector<int> roles;
161− roles.append(RoleCount);
162− QModelIndex changedIndex = index(i);
163− Q_EMIT dataChanged(changedIndex, changedIndex, roles);
164− break;
165− }
166− }
167− }
168−}
169−
170−void
171−Categories::onEmitCountChanged()
172−{
173− QVector<int> roles;
174− roles.append(Categories::RoleCount);
175− Q_FOREACH(int categoryIndex, m_updatedCategories) {
176− if (!m_results.contains(categoryIndex)) continue;
177− const int realIndex = m_categoryOrder.indexOf(categoryIndex);
178− const QModelIndex changedIndex = index(realIndex);
179− Q_EMIT dataChanged(changedIndex, changedIndex, roles);
180− }
181− m_updatedCategories.clear();
182−}
183−
184−QHash<int, QByteArray>
185−Categories::roleNames() const
186−{
187− return m_roles;
188−}
189−
190−void Categories::onOverrideModelDestroyed()
191−{
192− QObject* model = sender();
193− auto iter = m_overriddenCategories.begin();
194− while (iter != m_overriddenCategories.end()) {
195− if (iter.value() == model) {
196− iter = m_overriddenCategories.erase(iter);
197− continue;
198− }
199− ++iter;
200− }
201−}
202−
203−void Categories::overrideResults(const QString& categoryId, QAbstractItemModel* model)
204−{
205− m_overriddenCategories[categoryId] = model;
206− // watch the model
207− connect(model, &QObject::destroyed, this, &Categories::onOverrideModelDestroyed);
208− connect(model, &QAbstractItemModel::rowsInserted, this, &Categories::onRowCountChanged);
209− connect(model, &QAbstractItemModel::rowsRemoved, this, &Categories::onRowCountChanged);
210− connect(model, &QAbstractItemModel::modelReset, this, &Categories::onRowCountChanged);
211−
212− // emit the dataChanged signal if the category is already in the model
213− for (int i = 0; i < rowCount(); i++) {
214− auto id = data(index(i), RoleCategoryId).toString();
215− if (id != categoryId) continue;
216− QVector<int> roles;
217− roles.append(RoleCount);
218− roles.append(RoleResults);
219− QModelIndex changedIndex = index(i);
220− Q_EMIT dataChanged(changedIndex, changedIndex, roles);
221− break;
222− }
223−}
224−
225−QVariant
226−Categories::data(const QModelIndex& index, int role) const
227−{
228− if (!index.isValid()) {
229− return QVariant();
230− }
231−
232− if (m_categoryOrder.size() != rowCount())
233− {
234− // populate category order vector with 0..n
235− m_categoryOrder.clear();
236− const unsigned int lim = rowCount();
237− for (unsigned int i = 0; i<lim; i++) {
238− m_categoryOrder.append(i);
239− }
240− }
241−
242− int realRow = index.row();
243− if (index.row() < m_categoryOrder.size()) {
244− realRow = m_categoryOrder[index.row()];
245− } else {
246− qWarning() << "Invalid index" << index.row();
247− return QVariant();
248− }
249−
250− const QModelIndex realIndex = createIndex(realRow, index.column());
251−
252− switch (role) {
253− case RoleCategoryId:
254− return DeeListModel::data(realIndex, CategoryColumn::ID);
255− case RoleName:
256− return DeeListModel::data(realIndex, CategoryColumn::DISPLAY_NAME);
257− case RoleIcon:
258− return DeeListModel::data(realIndex, CategoryColumn::ICON_HINT);
259− case RoleRenderer:
260− return DeeListModel::data(realIndex, CategoryColumn::RENDERER_NAME);
261− case RoleContentType:
262− {
263− auto hints = DeeListModel::data(realIndex, CategoryColumn::HINTS).toHash();
264− return hints.contains("content-type") ? hints["content-type"] : QVariant(QString("default"));
265− }
266− case RoleRendererHint:
267− {
268− auto hints = DeeListModel::data(realIndex, CategoryColumn::HINTS).toHash();
269− return hints.contains("renderer-hint") ? hints["renderer-hint"] : QVariant(QString());
270− }
271− case RoleProgressSource:
272− {
273− auto hints = DeeListModel::data(realIndex, CategoryColumn::HINTS).toHash();
274− return hints.contains("progress-source") ? hints["progress-source"] : QVariant();
275− }
276− case RoleHints:
277− return DeeListModel::data(realIndex, CategoryColumn::HINTS);
278− case RoleResults:
279− if (m_overriddenCategories.size() > 0)
280− {
281− auto id = DeeListModel::data(realIndex, CategoryColumn::ID).toString();
282− if (m_overriddenCategories.find(id) != m_overriddenCategories.end())
283− return QVariant::fromValue(m_overriddenCategories[id]);
284− }
285− return QVariant::fromValue(getResults(realRow));
286− case RoleCount:
287− if (m_overriddenCategories.size() > 0)
288− {
289− auto id = DeeListModel::data(realIndex, CategoryColumn::ID).toString();
290− if (m_overriddenCategories.find(id) != m_overriddenCategories.end())
291− {
292− return QVariant::fromValue(m_overriddenCategories[id]->rowCount());
293− }
294− }
295− return QVariant::fromValue(getResults(realRow)->rowCount());
296− default:
297− return QVariant();
298− }
299−}
plugins/Unity/categories.hdeleted−95
@@ -1,95 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Michał Sawicz <michal.sawicz@canonical.com>
6− * Michal Hruby <michal.hruby@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−
22−#ifndef CATEGORIES_H
23−#define CATEGORIES_H
24−
25−// unity-core
26−#include <UnityCore/Scope.h>
27−
28−// dee-qt
29−#include "deelistmodel.h"
30−
31−#include <QPointer>
32−#include <QSet>
33−#include <QTimer>
34−
35−// local
36−#include "signalslist.h"
37−
38−class Categories : public DeeListModel
39−{
40− Q_OBJECT
41−
42− Q_ENUMS(Roles)
43−
44−public:
45− explicit Categories(QObject* parent = 0);
46−
47− enum Roles {
48− RoleCategoryId,
49− RoleName,
50− RoleIcon,
51− RoleRenderer,
52− RoleContentType,
53− RoleRendererHint,
54− RoleProgressSource,
55− RoleHints,
56− RoleResults,
57− RoleCount
58− };
59−
60− Q_INVOKABLE void overrideResults(const QString& categoryId, QAbstractItemModel* model);
61−
62− QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
63−
64− QHash<int, QByteArray> roleNames() const;
65−
66− /* setters */
67− void setUnityScope(const unity::dash::Scope::Ptr& scope);
68−
69−private Q_SLOTS:
70− void onCountChanged();
71− void onRowCountChanged();
72− void onEmitCountChanged();
73− void onOverrideModelDestroyed();
74−
75−private:
76− void onCategoriesModelChanged(unity::glib::Object<DeeModel> model);
77− void onCategoryOrderChanged(const std::vector<unsigned int>& cat_order);
78−
79− DeeListModel* getResults(int index) const;
80−
81− unity::dash::Scope::Ptr m_unityScope;
82− QTimer m_timer;
83− QSet<int> m_updatedCategories;
84− QHash<int, QByteArray> m_roles;
85− QMap<QString, QAbstractItemModel*> m_overriddenCategories;
86− mutable QMap<int, DeeListModel*> m_results;
87− SignalsList m_signals;
88−
89− /* Category order array contains indices of actual categories in the underlying DeeListModel.
90− It's used internally to reflect category order reported by scope.
91− */
92− mutable QList<unsigned int> m_categoryOrder;
93−};
94−
95−#endif // CATEGORIES_H
plugins/Unity/checkoptionfilter.cppdeleted−65
@@ -1,65 +0,0 @@
1−/*
2− * Copyright (C) 2011 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@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−// Self
21−#include "checkoptionfilter.h"
22−
23−// local
24−#include "unityoptionsmodel.h"
25−
26−CheckOptionFilter::CheckOptionFilter(QObject *parent) :
27− Filter(parent),
28− m_unityCheckOptionFilter(nullptr),
29− m_options(nullptr)
30−{
31−}
32−
33−GenericOptionsModel* CheckOptionFilter::options() const
34−{
35− return m_options;
36−}
37−
38−void CheckOptionFilter::setUnityFilter(unity::dash::Filter::Ptr filter)
39−{
40− Filter::setUnityFilter(filter);
41− m_unityCheckOptionFilter = std::dynamic_pointer_cast<unity::dash::CheckOptionFilter>(m_unityFilter);
42− onOptionsChanged(m_unityCheckOptionFilter->options);
43−}
44−
45−void CheckOptionFilter::onOptionsChanged(unity::dash::CheckOptionFilter::CheckOptions options)
46−{
47− if (m_options != nullptr) {
48− m_signals.disconnectAll();
49− delete m_options;
50− m_options = nullptr;
51− }
52−
53− m_options = new UnityOptionsModel(this, options,
54− m_unityCheckOptionFilter->option_added,
55− m_unityCheckOptionFilter->option_removed,
56− m_unityCheckOptionFilter->show_all_button);
57−
58− connect(m_options, SIGNAL(activeChanged(AbstractFilterOption *)), m_options, SLOT(ensureTheOnlyActive(AbstractFilterOption *)));
59− connect(m_options, SIGNAL(showAllActivated()), this, SLOT(clear()));
60−
61− /* Property change signals */
62− m_signals << m_unityCheckOptionFilter->options.changed.connect(sigc::mem_fun(this, &CheckOptionFilter::onOptionsChanged));
63−
64− Q_EMIT optionsChanged();
65−}
plugins/Unity/checkoptionfilter.hdeleted−57
@@ -1,57 +0,0 @@
1−/*
2− * Copyright (C) 2011 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@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 CHECKOPTIONFILTER_H
21−#define CHECKOPTIONFILTER_H
22−
23−// Qt
24−#include <QObject>
25−#include <QMetaType>
26−
27−// libunity-core
28−#include <UnityCore/CheckOptionFilter.h>
29−
30−// Local
31−#include "filter.h"
32−#include "signalslist.h"
33−
34−class Q_DECL_EXPORT CheckOptionFilter : public Filter
35−{
36− Q_OBJECT
37−
38−public:
39− explicit CheckOptionFilter(QObject *parent = nullptr);
40−
41− /* getters */
42− GenericOptionsModel* options() const override;
43−
44−protected:
45− void setUnityFilter(unity::dash::Filter::Ptr filter) override;
46−
47−private:
48− void onOptionsChanged(unity::dash::CheckOptionFilter::CheckOptions filter);
49−
50− unity::dash::CheckOptionFilter::Ptr m_unityCheckOptionFilter;
51− SignalsList m_signals;
52− GenericOptionsModel* m_options;
53−};
54−
55−Q_DECLARE_METATYPE(CheckOptionFilter*)
56−
57−#endif // CHECKOPTIONFILTER_H
plugins/Unity/filter.cppdeleted−129
@@ -1,129 +0,0 @@
1−/*
2− * Copyright (C) 2011, 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− * Pawel Stolowski <pawel.stolowski@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−// Self
22−#include "filter.h"
23−
24−// local
25−#include "ratingsfilter.h"
26−#include "radiooptionfilter.h"
27−#include "checkoptionfilter.h"
28−#include "multirangefilter.h"
29−
30−// libunity-core
31−#include <UnityCore/Filter.h>
32−#include <UnityCore/RatingsFilter.h>
33−#include <UnityCore/RadioOptionFilter.h>
34−#include <UnityCore/CheckOptionFilter.h>
35−#include <UnityCore/MultiRangeFilter.h>
36−
37−// Qt
38−#include <QDebug>
39−
40−Filter::Filter(QObject *parent) :
41− QObject(parent)
42−{
43−}
44−
45−QString Filter::id() const
46−{
47− if (!m_unityFilter)
48− return QString::Null();
49− return QString::fromStdString(m_unityFilter->id());
50−}
51−
52−QString Filter::name() const
53−{
54− if (!m_unityFilter)
55− return QString::Null();
56− return QString::fromStdString(m_unityFilter->name());
57−}
58−
59−QString Filter::iconHint() const
60−{
61− if (!m_unityFilter)
62− return QString::Null();
63− return QString::fromStdString(m_unityFilter->icon_hint());
64−}
65−
66−QString Filter::rendererName() const
67−{
68− if (!m_unityFilter)
69− return QString::Null();
70− return QString::fromStdString(m_unityFilter->renderer_name());
71−}
72−
73−bool Filter::visible() const
74−{
75− if (!m_unityFilter)
76− return false;
77− return m_unityFilter->visible();
78−}
79−
80−bool Filter::collapsed() const
81−{
82− if (!m_unityFilter)
83− return false;
84− return m_unityFilter->collapsed();
85−}
86−
87−bool Filter::filtering() const
88−{
89− if (!m_unityFilter)
90− return false;
91− return m_unityFilter->filtering();
92−}
93−
94−void Filter::clear()
95−{
96− if (m_unityFilter)
97− m_unityFilter->Clear();
98−}
99−
100−void Filter::setUnityFilter(unity::dash::Filter::Ptr unityFilter)
101−{
102− m_unityFilter = unityFilter;
103−}
104−
105−Filter* Filter::newFromUnityFilter(unity::dash::Filter::Ptr unityFilter)
106−{
107− Filter* filter;
108−
109− if (typeid(*unityFilter) == typeid(unity::dash::RatingsFilter)) {
110− filter = new RatingsFilter;
111− } else if (typeid(*unityFilter) == typeid(unity::dash::CheckOptionFilter)) {
112− filter = new CheckOptionFilter;
113− } else if (typeid(*unityFilter) == typeid(unity::dash::RadioOptionFilter)) {
114− filter = new RadioOptionFilter;
115− } else if (typeid(*unityFilter) == typeid(unity::dash::MultiRangeFilter)) {
116− filter = new MultiRangeFilter;
117− } else {
118− qWarning() << "Filter of unknown type: " << typeid(*unityFilter).name();
119− return nullptr;
120− }
121−
122− filter->setUnityFilter(unityFilter);
123− return filter;
124−}
125−
126−bool Filter::hasUnityFilter(unity::dash::Filter::Ptr unityFilter) const
127−{
128− return m_unityFilter == unityFilter;
129−}
plugins/Unity/filter.hdeleted−75
@@ -1,75 +0,0 @@
1−/*
2− * Copyright (C) 2011, 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− * Pawel Stolowski <pawel.stolowski@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−#ifndef FILTER_H
22−#define FILTER_H
23−
24−// Qt
25−#include <QObject>
26−#include <QMetaType>
27−
28−// libunity-core
29−#include <UnityCore/Filter.h>
30−
31−class GenericOptionsModel;
32−
33−class Q_DECL_EXPORT Filter : public QObject
34−{
35− Q_OBJECT
36−
37− Q_PROPERTY(QString id READ id CONSTANT)
38− Q_PROPERTY(QString name READ name CONSTANT)
39− Q_PROPERTY(QString iconHint READ iconHint CONSTANT)
40− Q_PROPERTY(QString rendererName READ rendererName CONSTANT)
41− Q_PROPERTY(bool visible READ visible CONSTANT)
42− Q_PROPERTY(bool collapsed READ collapsed CONSTANT)
43− Q_PROPERTY(bool filtering READ filtering CONSTANT)
44− Q_PROPERTY(GenericOptionsModel* options READ options NOTIFY optionsChanged)
45−
46−public:
47− explicit Filter(QObject *parent = nullptr);
48−
49− /* getters */
50− QString id() const;
51− QString name() const;
52− QString iconHint() const;
53− QString rendererName() const;
54− bool visible() const;
55− bool collapsed() const;
56− bool filtering() const;
57− virtual GenericOptionsModel* options() const = 0;
58−
59− static Filter* newFromUnityFilter(unity::dash::Filter::Ptr unityFilter);
60− bool hasUnityFilter(unity::dash::Filter::Ptr unityFilter) const;
61−
62−public Q_SLOTS:
63− void clear();
64−
65−Q_SIGNALS:
66− void optionsChanged();
67−
68−protected:
69− unity::dash::Filter::Ptr m_unityFilter;
70− virtual void setUnityFilter(unity::dash::Filter::Ptr unityFilter);
71−};
72−
73−Q_DECLARE_METATYPE(Filter*)
74−
75−#endif // FILTER_H
plugins/Unity/filteroption.cppdeleted−91
@@ -1,91 +0,0 @@
1−/*
2− * Copyright (C) 2011, 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− * Pawel Stolowski <pawel.stolowski@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−// Self
22−#include "filteroption.h"
23−
24−// libunity-core
25−#include <UnityCore/Filter.h>
26−
27−FilterOption::FilterOption(unity::dash::FilterOption::Ptr unityFilterOption, QObject *parent) :
28− AbstractFilterOption(parent), m_unityFilterOption(nullptr)
29−{
30− setUnityFilterOption(unityFilterOption);
31−}
32−
33−QString FilterOption::id() const
34−{
35− return QString::fromStdString(m_unityFilterOption->id());
36−}
37−
38−QString FilterOption::name() const
39−{
40− return QString::fromStdString(m_unityFilterOption->name());
41−}
42−
43−QString FilterOption::iconHint() const
44−{
45− return QString::fromStdString(m_unityFilterOption->icon_hint());
46−}
47−
48−bool FilterOption::active() const
49−{
50− return m_unityFilterOption->active();
51−}
52−
53−void FilterOption::setActive(bool active)
54−{
55− m_unityFilterOption->active = active;
56−}
57−
58−void FilterOption::setUnityFilterOption(unity::dash::FilterOption::Ptr unityFilterOption)
59−{
60− if (m_unityFilterOption != nullptr) {
61− m_signals.disconnectAll();
62− }
63−
64− m_unityFilterOption = unityFilterOption;
65−
66− /* Property change signals */
67− m_signals << m_unityFilterOption->id.changed.connect(sigc::mem_fun(this, &FilterOption::onIdChanged))
68− << m_unityFilterOption->name.changed.connect(sigc::mem_fun(this, &FilterOption::onNameChanged))
69− << m_unityFilterOption->icon_hint.changed.connect(sigc::mem_fun(this, &FilterOption::onIconHintChanged))
70− << m_unityFilterOption->active.changed.connect(sigc::mem_fun(this, &FilterOption::onActiveChanged));
71−}
72−
73−void FilterOption::onIdChanged(const std::string &id)
74−{
75− Q_EMIT idChanged(QString::fromStdString(id));
76−}
77−
78−void FilterOption::onNameChanged(const std::string &name)
79−{
80− Q_EMIT nameChanged(QString::fromStdString(name));
81−}
82−
83−void FilterOption::onIconHintChanged(const std::string &iconHint)
84−{
85− Q_EMIT iconHintChanged(QString::fromStdString(iconHint));
86−}
87−
88−void FilterOption::onActiveChanged(bool active)
89−{
90− Q_EMIT activeChanged(active);
91−}
plugins/Unity/filteroption.hdeleted−61
@@ -1,61 +0,0 @@
1−/*
2− * Copyright (C) 2011, 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− * Pawel Stolowski <pawel.stolowski@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−#ifndef FILTEROPTION_H
22−#define FILTEROPTION_H
23−
24−// Local
25−#include "abstractfilteroption.h"
26−#include "signalslist.h"
27−
28−// libunity-core
29−#include <UnityCore/Filter.h>
30−
31−class Q_DECL_EXPORT FilterOption : public AbstractFilterOption
32−{
33− Q_OBJECT
34−
35−public:
36− explicit FilterOption(unity::dash::FilterOption::Ptr unityFilterOption, QObject *parent = nullptr);
37−
38− /* getters */
39− QString id() const override;
40− QString name() const override;
41− QString iconHint() const override;
42− bool active() const override;
43−
44− /* setters */
45− void setActive(bool active) override;
46−
47−private:
48− void onIdChanged(const std::string &id);
49− void onNameChanged(const std::string &name);
50− void onIconHintChanged(const std::string &iconHint);
51− void onActiveChanged(bool active);
52−
53− void setUnityFilterOption(unity::dash::FilterOption::Ptr unityFilterOption);
54− SignalsList m_signals;
55−
56− unity::dash::FilterOption::Ptr m_unityFilterOption;
57−};
58−
59−Q_DECLARE_METATYPE(FilterOption*)
60−
61−#endif // FILTEROPTION_H
plugins/Unity/filters.cppdeleted−165
@@ -1,165 +0,0 @@
1−/*
2− * Copyright (C) 2011, 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− * Pawel Stolowski <pawel.stolowski@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−// Self
22−#include "filters.h"
23−
24−// Local
25−#include "filter.h"
26−#include "genericoptionsmodel.h"
27−
28−// Qt
29−#include <QDebug>
30−
31−Filters::Filters(unity::dash::Filters::Ptr unityFilters, QObject *parent) :
32− QAbstractListModel(parent), m_unityFilters(unityFilters)
33−{
34− for (unsigned int i=0; i<m_unityFilters->count(); i++) {
35− unity::dash::Filter::Ptr unityFilter = m_unityFilters->FilterAtIndex(i);
36− addFilter(unityFilter, i);
37− }
38− m_unityFilters->filter_added.connect(sigc::mem_fun(this, &Filters::onFilterAdded));
39− m_unityFilters->filter_changed.connect(sigc::mem_fun(this, &Filters::onFilterChanged));
40− m_unityFilters->filter_removed.connect(sigc::mem_fun(this, &Filters::onFilterRemoved));
41−}
42−
43−Filters::~Filters()
44−{
45− while (!m_filters.isEmpty()) {
46− delete m_filters.takeFirst();
47− }
48−}
49−
50−int Filters::rowCount(const QModelIndex& parent) const
51−{
52− Q_UNUSED(parent)
53−
54− return m_unityFilters->count();
55−}
56−
57−QVariant Filters::data(const QModelIndex& index, int role) const
58−{
59− if (!index.isValid()) {
60− return QVariant();
61− }
62−
63− Filter* filter = m_filters.at(index.row());
64− switch (role)
65− {
66− case Filters::RoleId:
67− return filter->id();
68− case Filters::RoleName:
69− case Qt::DisplayRole:
70− return filter->name();
71− case Filters::RoleIconHint:
72− return filter->iconHint();
73− case Filters::RoleRendererName:
74− return filter->rendererName();
75− case Filters::RoleVisible:
76− return filter->visible();
77− case Filters::RoleCollapsed:
78− return filter->collapsed();
79− case Filters::RoleFiltering:
80− return filter->filtering();
81− case Filters::RoleOptions:
82− return QVariant::fromValue(filter->options());
83− default:
84− break;
85− }
86− return QVariant();
87−}
88−
89−QHash<int, QByteArray> Filters::roleNames() const
90−{
91− QHash<int, QByteArray> roles;
92− roles[Filters::RoleId] = "id";
93− roles[Filters::RoleName] = "name";
94− roles[Filters::RoleIconHint] = "iconHint";
95− roles[Filters::RoleRendererName] = "rendererName";
96− roles[Filters::RoleVisible] = "visible";
97− roles[Filters::RoleCollapsed] = "collapsed";
98− roles[Filters::RoleFiltering] = "filtering";
99− roles[Filters::RoleOptions] = "options";
100− return roles;
101−}
102−
103−Filter* Filters::getFilter(const QString& id) const
104−{
105− Q_FOREACH (Filter* filter, m_filters) {
106− if (filter->id() == id) {
107− return filter;
108− }
109− }
110− return nullptr;
111−}
112−
113−void Filters::onFilterAdded(unity::dash::Filter::Ptr unityFilter)
114−{
115− if (unityFilter == nullptr) {
116− return;
117− }
118−
119− int index = m_filters.count();
120− addFilter(unityFilter, index);
121−}
122−
123−void Filters::onFilterChanged(unity::dash::Filter::Ptr unityFilter)
124−{
125− if (unityFilter == nullptr) {
126− return;
127− }
128−
129− QModelIndex filterIndex = index(indexForFilter(unityFilter));
130− Q_EMIT dataChanged(filterIndex, filterIndex);
131−}
132−
133−void Filters::onFilterRemoved(unity::dash::Filter::Ptr unityFilter)
134−{
135− removeFilter(indexForFilter(unityFilter));
136−}
137−
138−void Filters::addFilter(unity::dash::Filter::Ptr unityFilter, int index)
139−{
140− beginInsertRows(QModelIndex(), index, index);
141− Filter* filter = Filter::newFromUnityFilter(unityFilter);
142− if (filter != nullptr) {
143− m_filters.insert(index, filter);
144− }
145− endInsertRows();
146−}
147−
148−void Filters::removeFilter(int index)
149−{
150− beginRemoveRows(QModelIndex(), index, index);
151− Filter* filter = m_filters.takeAt(index);
152− delete filter;
153− endRemoveRows();
154−}
155−
156−int Filters::indexForFilter(unity::dash::Filter::Ptr unityFilter)
157−{
158− for (int index=0; index<m_filters.count(); index++) {
159− if (m_filters[index]->hasUnityFilter(unityFilter)) {
160− return index;
161− }
162− }
163− qWarning() << "Filter" << QString::fromStdString(unityFilter->name()) << "not found in local cache.";
164− return -1;
165−}
plugins/Unity/filters.hdeleted−77
@@ -1,77 +0,0 @@
1−/*
2− * Copyright (C) 2011, 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− * Pawel Stolowski <pawel.stolowski@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−#ifndef FILTERS_H
22−#define FILTERS_H
23−
24−// Qt
25−#include <QAbstractListModel>
26−#include <QList>
27−
28−// libunity-core
29−#include <UnityCore/Filters.h>
30−#include <UnityCore/Filter.h>
31−
32−class Filter;
33−
34−class Filters : public QAbstractListModel
35−{
36− Q_OBJECT
37−
38− Q_ENUMS(Roles)
39−
40−public:
41− explicit Filters(unity::dash::Filters::Ptr unityFilters, QObject *parent = nullptr);
42− ~Filters();
43−
44− enum Roles {
45− RoleId = Qt::UserRole,
46− RoleName,
47− RoleIconHint,
48− RoleRendererName,
49− RoleVisible,
50− RoleCollapsed,
51− RoleFiltering,
52− RoleOptions
53− };
54−
55− QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
56− int rowCount(const QModelIndex& parent = QModelIndex()) const override;
57− QHash<int, QByteArray> roleNames() const override;
58−
59− Filter* getFilter(const QString& id) const;
60−
61−private:
62− void onFilterAdded(unity::dash::Filter::Ptr unityFilter);
63− void onFilterChanged(unity::dash::Filter::Ptr unityFilter);
64− void onFilterRemoved(unity::dash::Filter::Ptr unityFilter);
65−
66− void addFilter(unity::dash::Filter::Ptr unityFilter, int index);
67− void removeFilter(int index);
68−
69− int indexForFilter(unity::dash::Filter::Ptr unityFilter);
70−
71− unity::dash::Filters::Ptr m_unityFilters;
72− QList<Filter*> m_filters;
73−};
74−
75−Q_DECLARE_METATYPE(Filters*)
76−
77−#endif // FILTERS_H
plugins/Unity/genericoptionsmodel.cppdeleted−187
@@ -1,187 +0,0 @@
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−// self
21−#include "genericoptionsmodel.h"
22−
23−// local
24−#include "abstractfilteroption.h"
25−#include "showallfilteroption.h"
26−
27−GenericOptionsModel::GenericOptionsModel(bool showAllOption, QObject *parent)
28− : QAbstractListModel(parent)
29−{
30− if (showAllOption)
31− {
32− auto showAll = new ShowAllFilterOption(this);
33− connect(showAll, SIGNAL(activeChanged(bool)), this, SLOT(onOptionChanged()));
34− connect(showAll, SIGNAL(activeChanged(bool)), this, SLOT(onShowAllClicked(bool)));
35− addOption(showAll);
36− }
37−}
38−
39−GenericOptionsModel::~GenericOptionsModel()
40−{
41− Q_FOREACH(auto opt, m_options)
42− {
43− opt->deleteLater();
44− }
45−}
46−
47−QHash<int, QByteArray> GenericOptionsModel::roleNames() const
48−{
49− QHash<int, QByteArray> roles;
50− roles[GenericOptionsModel::RoleId] = "id";
51− roles[GenericOptionsModel::RoleName] = "name";
52− roles[GenericOptionsModel::RoleIconHint] = "iconHint";
53− roles[GenericOptionsModel::RoleActive] = "active";
54− return roles;
55−}
56−
57−QVariant GenericOptionsModel::data(const QModelIndex& index, int role) const
58−{
59− if (!index.isValid()) {
60− return QVariant();
61− }
62−
63− auto filterOption = m_options[index.row()];
64− switch (role)
65− {
66− case GenericOptionsModel::RoleId:
67− return filterOption->id();
68− case GenericOptionsModel::RoleName:
69− case Qt::DisplayRole:
70− return filterOption->name();
71− case GenericOptionsModel::RoleIconHint:
72− return filterOption->iconHint();
73− case GenericOptionsModel::RoleActive:
74− return filterOption->active();
75− default:
76− break;
77− }
78−
79− return QVariant();
80−}
81−
82−int GenericOptionsModel::rowCount(const QModelIndex& /* parent */) const
83−{
84− return m_options.size();
85−}
86−
87−void GenericOptionsModel::setActive(int idx, bool value)
88−{
89− if (idx >= 0 && idx < m_options.size())
90− {
91− m_options[idx]->setActive(value);
92− }
93−}
94−
95−void GenericOptionsModel::setActive(const QString &id, bool value)
96−{
97− Q_FOREACH(auto opt, m_options) {
98− if (opt->id() == id) {
99− opt->setActive(value);
100− break;
101− }
102− }
103−}
104−
105−AbstractFilterOption* GenericOptionsModel::getRawOption(QVector<AbstractFilterOption *>::size_type idx) const
106−{
107− if (idx < m_options.size())
108− {
109− return m_options[idx];
110− }
111− return nullptr;
112−}
113−
114−void GenericOptionsModel::ensureTheOnlyActive(AbstractFilterOption *activeOption)
115−{
116− if (activeOption->active()) {
117− // disable all other options
118− Q_FOREACH(auto opt, m_options) {
119− if (opt != activeOption && opt->active()) {
120− opt->setActive(false);
121− }
122− }
123− }
124−}
125−
126−void GenericOptionsModel::addOption(AbstractFilterOption *option, int index)
127−{
128− if (index >= 0)
129− m_options.insert(index, option);
130− else
131− m_options.append(option);
132−
133− connect(option, SIGNAL(idChanged(const QString &)), this, SLOT(onOptionChanged()));
134− connect(option, SIGNAL(nameChanged(const QString &)), this, SLOT(onOptionChanged()));
135− connect(option, SIGNAL(iconHintChanged(const QString &)), this, SLOT(onOptionChanged()));
136− connect(option, SIGNAL(activeChanged(bool)), this, SLOT(onOptionChanged()));
137− connect(option, SIGNAL(activeChanged(bool)), this, SLOT(onActiveChanged()));
138−}
139−
140−void GenericOptionsModel::removeOption(int index)
141−{
142− m_options[index]->deleteLater();
143− m_options.remove(index);
144−}
145−
146−int GenericOptionsModel::indexOf(const QString &option_id)
147−{
148− int row = 0;
149− Q_FOREACH(auto opt, m_options)
150− {
151− if (opt->id() == option_id)
152− {
153− return row;
154− }
155− ++row;
156− }
157− return -1;
158−}
159−
160−void GenericOptionsModel::onOptionChanged()
161−{
162− AbstractFilterOption *option = dynamic_cast<AbstractFilterOption*>(QObject::sender());
163− if (option)
164− {
165− int idx = indexOf(option->id());
166− if (idx >= 0)
167− {
168− QModelIndex optionIndex = index(idx);
169− Q_EMIT dataChanged(optionIndex, optionIndex);
170− }
171− }
172−}
173−
174−void GenericOptionsModel::onActiveChanged()
175−{
176− AbstractFilterOption *option = dynamic_cast<AbstractFilterOption*>(QObject::sender());
177− if (option)
178− {
179− Q_EMIT activeChanged(option);
180− }
181−}
182−
183−void GenericOptionsModel::onShowAllClicked(bool active)
184−{
185− if (active)
186− Q_EMIT showAllActivated();
187−}
plugins/Unity/genericoptionsmodel.hdeleted−79
@@ -1,79 +0,0 @@
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 GENERICOPTIONSMODEL_H
21−#define GENERICOPTIONSMODEL_H
22−
23−// Qt
24−#include <QObject>
25−#include <QAbstractListModel>
26−#include <QHash>
27−#include <QVector>
28−
29−class AbstractFilterOption;
30−
31−class Q_DECL_EXPORT GenericOptionsModel : public QAbstractListModel
32−{
33− Q_OBJECT
34−
35− Q_ENUMS(Roles)
36−
37−public:
38− GenericOptionsModel(bool showAllOption = false, QObject *parent = nullptr);
39− ~GenericOptionsModel();
40−
41− enum Roles {
42− RoleId = Qt::UserRole,
43− RoleName,
44− RoleIconHint,
45− RoleActive
46− };
47−
48− QHash<int, QByteArray> roleNames() const override;
49− QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
50− int rowCount(const QModelIndex& parent = QModelIndex()) const override;
51−
52− Q_INVOKABLE void setActive(int idx, bool value);
53− Q_INVOKABLE void setActive(const QString &id, bool value);
54−
55− AbstractFilterOption* getRawOption(QVector<AbstractFilterOption *>::size_type idx) const;
56−
57−public Q_SLOTS:
58− virtual void ensureTheOnlyActive(AbstractFilterOption *activeOption);
59−
60−Q_SIGNALS:
61− void activeChanged(AbstractFilterOption *option);
62− void showAllActivated();
63−
64−protected Q_SLOTS:
65− void onOptionChanged();
66− void onActiveChanged();
67− void onShowAllClicked(bool active);
68−
69−protected:
70− void addOption(AbstractFilterOption *option, int index = -1);
71− void removeOption(int index);
72− int indexOf(const QString &option_id);
73−
74− QVector<AbstractFilterOption *> m_options;
75−};
76−
77−Q_DECLARE_METATYPE(GenericOptionsModel*)
78−
79−#endif // GENERICOPTIONSMODEL_H
plugins/Unity/moviepreview.cppdeleted−67
@@ -1,67 +0,0 @@
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−// local
21−#include "moviepreview.h"
22−
23−// Qt
24−#include <QDebug>
25−
26−MoviePreview::MoviePreview(QObject *parent):
27− Preview(parent),
28− m_unityMoviePreview(nullptr)
29−{
30−}
31−
32−QString MoviePreview::year() const
33−{
34− if (m_unityMoviePreview) {
35− return QString::fromStdString(m_unityMoviePreview->year());
36− } else {
37− qWarning() << "Preview not set";
38− }
39− return QString();
40−}
41−
42−float MoviePreview::rating() const
43−{
44− if (m_unityMoviePreview) {
45− return m_unityMoviePreview->rating();
46− } else {
47− qWarning() << "Preview not set";
48− }
49− return 0.0f;
50−}
51−
52−unsigned int MoviePreview::numRatings() const
53−{
54− if (m_unityMoviePreview) {
55− return m_unityMoviePreview->num_ratings();
56− } else {
57− qWarning() << "Preview not set";
58− }
59− return 0;
60−}
61−
62−void MoviePreview::setUnityPreview(unity::dash::Preview::Ptr unityPreview)
63−{
64− m_unityMoviePreview = std::dynamic_pointer_cast<unity::dash::MoviePreview>(unityPreview);
65−
66− Q_EMIT previewChanged();
67−}
plugins/Unity/moviepreview.hdeleted−60
@@ -1,60 +0,0 @@
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 MOVIEPREVIEW_H
21−#define MOVIEPREVIEW_H
22−
23−// local
24−#include "preview.h"
25−
26−// Qt
27−#include <QObject>
28−#include <QMetaType>
29−
30−// libunity-core
31−#include <UnityCore/MoviePreview.h>
32−
33−class Q_DECL_EXPORT MoviePreview: public Preview
34−{
35− Q_OBJECT
36−
37− Q_PROPERTY(QString year READ year NOTIFY previewChanged)
38− Q_PROPERTY(float rating READ rating NOTIFY previewChanged)
39− Q_PROPERTY(unsigned int numRatings READ numRatings NOTIFY previewChanged)
40−
41−public:
42− explicit MoviePreview(QObject *parent = 0);
43−
44− QString year() const;
45− float rating() const;
46− unsigned int numRatings() const;
47−
48−Q_SIGNALS:
49− void previewChanged();
50−
51−protected:
52− void setUnityPreview(unity::dash::Preview::Ptr unityPreview) override;
53−
54−private:
55− unity::dash::MoviePreview::Ptr m_unityMoviePreview;
56−};
57−
58−Q_DECLARE_METATYPE(MoviePreview *)
59−
60−#endif
plugins/Unity/multirangefilter.cppdeleted−65
@@ -1,65 +0,0 @@
1−/*
2− * Copyright (C) 2011, 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− * Pawel Stolowski <pawel.stolowski@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−// Self
22−#include "multirangefilter.h"
23−
24−// local
25−#include "unityoptionsmodel.h"
26−
27−MultiRangeFilter::MultiRangeFilter(QObject *parent) :
28− Filter(parent), m_unityMultiRangeFilter(nullptr), m_options(nullptr)
29−{
30−}
31−
32−GenericOptionsModel* MultiRangeFilter::options() const
33−{
34− return m_options;
35−}
36−
37−void MultiRangeFilter::setUnityFilter(unity::dash::Filter::Ptr filter)
38−{
39− Filter::setUnityFilter(filter);
40− m_unityMultiRangeFilter = std::dynamic_pointer_cast<unity::dash::MultiRangeFilter>(m_unityFilter);
41−
42− onOptionsChanged(m_unityMultiRangeFilter->options);
43−}
44−
45−void MultiRangeFilter::onOptionsChanged(unity::dash::MultiRangeFilter::Options options)
46−{
47− if (m_options != nullptr) {
48− m_signals.disconnectAll();
49− delete m_options;
50− m_options = nullptr;
51− }
52−
53− m_options = new UnityOptionsModel(this, options,
54− m_unityMultiRangeFilter->option_added,
55− m_unityMultiRangeFilter->option_removed,
56− m_unityMultiRangeFilter->show_all_button);
57−
58− connect(m_options, SIGNAL(activeChanged(AbstractFilterOption *)), m_options, SLOT(ensureTheOnlyActive(AbstractFilterOption *)));
59− connect(m_options, SIGNAL(showAllActivated()), this, SLOT(clear()));
60−
61− /* Property change signals */
62− m_signals << m_unityMultiRangeFilter->options.changed.connect(sigc::mem_fun(this, &MultiRangeFilter::onOptionsChanged));
63−
64− Q_EMIT optionsChanged();
65−}
plugins/Unity/multirangefilter.hdeleted−60
@@ -1,60 +0,0 @@
1−/*
2− * Copyright (C) 2011, 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− * Pawel Stolowski <pawel.stolowski@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−#ifndef MULTIRANGEFILTER_H
22−#define MULTIRANGEFILTER_H
23−
24−// Qt
25−#include <QObject>
26−#include <QMetaType>
27−
28−// libunity-core
29−#include <UnityCore/MultiRangeFilter.h>
30−
31−// Local
32−#include "filter.h"
33−#include "signalslist.h"
34−
35−class GenericOptionsModel;
36−
37−class Q_DECL_EXPORT MultiRangeFilter : public Filter
38−{
39− Q_OBJECT
40−
41−public:
42− explicit MultiRangeFilter(QObject *parent = nullptr);
43−
44− /* getters */
45− GenericOptionsModel* options() const override;
46−
47−protected:
48− void setUnityFilter(unity::dash::Filter::Ptr filter) override;
49−
50−private:
51− unity::dash::MultiRangeFilter::Ptr m_unityMultiRangeFilter;
52− SignalsList m_signals;
53− GenericOptionsModel* m_options;
54−
55− void onOptionsChanged(unity::dash::MultiRangeFilter::Options);
56−};
57−
58−Q_DECLARE_METATYPE(MultiRangeFilter*)
59−
60−#endif // MULTIRANGEFILTER_H
plugins/Unity/musicpreview.cppdeleted−54
@@ -1,54 +0,0 @@
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 "musicpreview.h"
21−#include <QDebug>
22−
23−// dee-qt
24−#include "deelistmodel.h"
25−
26−MusicPreview::MusicPreview(QObject *parent):
27− Preview(parent),
28− m_unityMusicPreview(nullptr)
29−{
30− m_tracks = new DeeListModel(this);
31−}
32−
33−void MusicPreview::setUnityPreview(unity::dash::Preview::Ptr unityPreview)
34−{
35− m_unityMusicPreview = std::dynamic_pointer_cast<unity::dash::MusicPreview>(unityPreview);
36− m_tracks->setModel(m_unityMusicPreview->GetTracksModel()->model());
37− m_unityMusicPreview->GetTracksModel()->model.changed.connect(sigc::mem_fun(this, &MusicPreview::onTracksModelChanged));
38−
39− Q_EMIT previewChanged();
40− Q_EMIT tracksChanged();
41−}
42−
43−DeeListModel* MusicPreview::tracks() const
44−{
45− if (m_unityMusicPreview == nullptr) {
46− qWarning() << "Preview not set";
47− }
48− return m_tracks;
49−}
50−
51−void MusicPreview::onTracksModelChanged(unity::glib::Object<DeeModel> /* model */)
52−{
53− m_tracks->setModel(m_unityMusicPreview->GetTracksModel()->model());
54−}
plugins/Unity/musicpreview.hdeleted−62
@@ -1,62 +0,0 @@
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 MUSICPREVIEW_H
21−#define MUSICPREVIEW_H
22−
23−// local
24−#include "preview.h"
25−
26−// Qt
27−#include <QObject>
28−#include <QMetaType>
29−
30−// libunity-core
31−#include <UnityCore/MusicPreview.h>
32−
33−class DeeListModel;
34−
35−class Q_DECL_EXPORT MusicPreview: public Preview
36−{
37− Q_OBJECT
38−
39− Q_PROPERTY(DeeListModel* tracks READ tracks NOTIFY tracksChanged)
40−
41−public:
42− explicit MusicPreview(QObject *parent = 0);
43−
44− DeeListModel* tracks() const;
45−
46−Q_SIGNALS:
47− void tracksChanged();
48−
49−protected:
50− void setUnityPreview(unity::dash::Preview::Ptr unityPreview) override;
51−
52−private Q_SLOTS:
53− void onTracksModelChanged(unity::glib::Object<DeeModel> model);
54−
55−private:
56− unity::dash::MusicPreview::Ptr m_unityMusicPreview;
57− DeeListModel *m_tracks;
58−};
59−
60−Q_DECLARE_METATYPE(MusicPreview *)
61−
62−#endif
plugins/Unity/plugin.cppdeleted−74
@@ -1,74 +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: Michał Sawicz <michal.sawicz@canonical.com>
17− */
18−
19−// Qt
20−#include <QDBusConnection>
21−#include <QQmlContext>
22−#include <qqml.h>
23−
24−// self
25−#include "plugin.h"
26−
27−// local
28−#include "preview.h"
29−#include "previewaction.h"
30−#include "previewinfohint.h"
31−#include "socialpreviewcomment.h"
32−#include "scope.h"
33−#include "scopes.h"
34−#include "categories.h"
35−#include "categoryresults.h"
36−#include "bottombarvisibilitycommunicatorshell.h"
37−#include "genericoptionsmodel.h"
38−#include "result.h"
39−
40−// libqtdee
41−#include "deelistmodel.h"
42−
43−static const char* BOTTOM_BAR_VISIBILITY_COMMUNICATOR_DBUS_PATH = "/BottomBarVisibilityCommunicator";
44−static const char* DBUS_SERVICE = "com.canonical.Shell.BottomBarVisibilityCommunicator";
45−
46−void UnityPlugin::registerTypes(const char *uri)
47−{
48− Q_ASSERT(uri == QLatin1String("Unity"));
49− qmlRegisterUncreatableType<Preview>(uri, 0, 1, "Preview", "Can't create Preview object in QML.");
50− qmlRegisterUncreatableType<PreviewAction>(uri, 0, 1, "PreviewAction", "Can't create PreviewAction object in QML.");
51− qmlRegisterUncreatableType<PreviewInfoHint>(uri, 0, 1, "PreviewInfoHint", "Can't create PreviewInfoHint object in QML.");
52− qmlRegisterUncreatableType<SocialPreviewComment>(uri, 0, 1, "SocialPreviewComment", "Can't create SocialPreviewComment object in QML.");
53− qmlRegisterUncreatableType<GenericOptionsModel>(uri, 0, 1, "GenericOptionsModel", "Can't create options model in QML.");
54− qmlRegisterUncreatableType<Result>(uri, 0, 1, "Result", "Can't create result object in QML.");
55− qmlRegisterType<Scope>(uri, 0, 1, "Scope");
56− qmlRegisterType<Scopes>(uri, 0, 1, "Scopes");
57− qmlRegisterType<Categories>(uri, 0, 1, "Categories");
58− qmlRegisterUncreatableType<CategoryResults>(uri, 0, 1, "CategoryResults", "Can't create new Category Results in QML. Get them from Categories instance.");
59− qmlRegisterType<DeeListModel>(uri, 0, 1, "DeeListModel");
60− qmlRegisterUncreatableType<BottomBarVisibilityCommunicatorShell>(uri, 0, 1, "BottomBarVisibilityCommunicatorShell", "Can't create BottomBarVisibilityCommunicatorShell");
61−}
62−
63−void UnityPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
64−{
65− QQmlExtensionPlugin::initializeEngine(engine, uri);
66−#ifndef GLIB_VERSION_2_36
67− g_type_init();
68−#endif
69−
70− QDBusConnection::sessionBus().registerService(DBUS_SERVICE);
71− BottomBarVisibilityCommunicatorShell *bottomBarVisibilityCommunicator = &BottomBarVisibilityCommunicatorShell::instance();
72− QDBusConnection::sessionBus().registerObject(BOTTOM_BAR_VISIBILITY_COMMUNICATOR_DBUS_PATH, bottomBarVisibilityCommunicator, QDBusConnection::ExportAllContents);
73− engine->rootContext()->setContextProperty("bottomBarVisibilityCommunicatorShell", bottomBarVisibilityCommunicator);
74−}
plugins/Unity/preview.cppdeleted−199
@@ -1,199 +0,0 @@
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−// local
21−#include "preview.h"
22−#include "previewaction.h"
23−#include "previewinfohint.h"
24−#include "genericpreview.h"
25−#include "applicationpreview.h"
26−#include "moviepreview.h"
27−#include "musicpreview.h"
28−#include "socialpreview.h"
29−#include "iconutils.h"
30−#include "variantutils.h"
31−
32−// Qt
33−#include <QDebug>
34−#include <QtAlgorithms>
35−
36−#include <UnityCore/GenericPreview.h>
37−#include <UnityCore/ApplicationPreview.h>
38−#include <UnityCore/MoviePreview.h>
39−#include <UnityCore/MusicPreview.h>
40−#include <UnityCore/SocialPreview.h>
41−
42−#include <UnityCore/GLibWrapper.h>
43−
44−Preview::Preview(QObject *parent):
45− QObject(parent),
46− m_unityPreview(nullptr),
47− m_result(new Result(this))
48−{
49−}
50−
51−QString Preview::rendererName() const
52−{
53− if (m_unityPreview) {
54− return QString::fromStdString(m_unityPreview->renderer_name());
55− } else {
56− qWarning() << "Preview not set";
57− }
58− return QString();
59−}
60−
61−QString Preview::title() const
62−{
63− if (m_unityPreview) {
64− return QString::fromStdString(m_unityPreview->title());
65− } else {
66− qWarning() << "Preview not set";
67− }
68− return QString();
69−}
70−
71−QString Preview::subtitle () const
72−{
73− if (m_unityPreview) {
74− return QString::fromStdString(m_unityPreview->subtitle());
75− } else {
76− qWarning() << "Preview not set";
77− }
78− return QString();
79−}
80−
81−QString Preview::description() const
82−{
83− if (m_unityPreview) {
84− return QString::fromStdString(m_unityPreview->description());
85− } else {
86− qWarning() << "Preview not set";
87− }
88− return QString();
89−}
90−
91−QVariant Preview::actions()
92−{
93− return QVariant::fromValue(m_actions);
94−}
95−
96−QVariant Preview::infoHints()
97−{
98− return QVariant::fromValue(m_infoHints);
99−}
100−
101−QVariantMap Preview::infoHintsHash() const
102−{
103− return m_infoHintsHash;
104−}
105−
106−QString Preview::image() const
107−{
108− if (m_unityPreview) {
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, m_result->mimeType(), m_result->metadata().toHash()));
117− if (!thumbnailUri.isNull()) return thumbnailUri;
118− }
119− } else {
120− qWarning() << "Preview not set";
121− }
122− return QString::null;
123−}
124−
125−QVariant Preview::result() const
126−{
127− return QVariant::fromValue(m_result);
128−}
129−
130−Preview* Preview::newFromUnityPreview(unity::dash::Preview::Ptr unityPreview)
131−{
132− Preview* preview = nullptr;
133−
134− if (dynamic_cast<unity::dash::GenericPreview *>(unityPreview.get()) != nullptr) {
135− preview = new GenericPreview();
136− } else if (dynamic_cast<unity::dash::MusicPreview *>(unityPreview.get()) != nullptr) {
137− preview = new MusicPreview();
138− } else if (dynamic_cast<unity::dash::MoviePreview *>(unityPreview.get()) != nullptr) {
139− preview = new MoviePreview();
140− } else if (dynamic_cast<unity::dash::ApplicationPreview *>(unityPreview.get()) != nullptr) {
141− preview = new ApplicationPreview();
142− } else if (dynamic_cast<unity::dash::SocialPreview *>(unityPreview.get()) != nullptr) {
143− preview = new SocialPreview();
144− } else {
145− qWarning() << "Unknown preview type: " << typeid(*unityPreview).name();
146− preview = new GenericPreview();
147− }
148−
149− preview->setUnityPreviewBase(unityPreview);
150− preview->setUnityPreview(unityPreview);
151−
152− return preview;
153−}
154−
155−void Preview::setUnityPreviewBase(unity::dash::Preview::Ptr unityPreview)
156−{
157− m_unityPreview = unityPreview;
158− m_result->setPreview(unityPreview);
159−
160− qDeleteAll(m_infoHints);
161− m_infoHints.clear();
162− m_infoHintsHash.clear();
163− qDeleteAll(m_actions);
164− m_actions.clear();
165−
166− for (auto unityInfoHint: m_unityPreview->GetInfoHints()) {
167− auto hint = new PreviewInfoHint(this);
168− hint->setUnityInfoHint(unityInfoHint);
169− m_infoHints.append(hint);
170− m_infoHintsHash[hint->id()] = QVariant::fromValue(hint);
171− }
172−
173− for (auto unityAction: m_unityPreview->GetActions()) {
174− auto action = new PreviewAction(this);
175− action->setUnityAction(unityAction);
176− m_actions.append(action);
177− }
178−}
179−
180−void Preview::setUnityPreview(unity::dash::Preview::Ptr /* unityPreview */)
181−{
182− // default implementation does nothing
183−}
184−
185−void Preview::execute(const QString& actionId, const QHash<QString, QVariant>& hints)
186−{
187− if (m_unityPreview) {
188− auto unityHints = convertToHintsMap(hints);
189− m_actionCancellable.Renew();
190− m_unityPreview->PerformAction(actionId.toStdString(), unityHints, nullptr, m_actionCancellable);
191− } else {
192− qWarning() << "Preview not set";
193− }
194−}
195−
196−void Preview::cancelAction()
197−{
198− m_actionCancellable.Cancel();
199−}
plugins/Unity/preview.hdeleted−89
@@ -1,89 +0,0 @@
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 PREVIEW_H
21−#define PREVIEW_H
22−
23−// Qt
24−#include <QObject>
25−#include <QString>
26−#include <QMetaType>
27−#include <QList>
28−#include <QVariantMap>
29−
30−// libunity-core
31−#include <UnityCore/Preview.h>
32−
33−// local
34−#include "result.h"
35−#include "previewaction.h"
36−#include <UnityCore/GLibWrapper.h>
37−
38−class Q_DECL_EXPORT Preview : public QObject
39−{
40− Q_OBJECT
41−
42− Q_PROPERTY(QString rendererName READ rendererName NOTIFY previewChanged)
43− Q_PROPERTY(QString title READ title NOTIFY previewChanged)
44− Q_PROPERTY(QString subtitle READ subtitle NOTIFY previewChanged)
45− Q_PROPERTY(QString description READ description NOTIFY previewChanged)
46− Q_PROPERTY(QVariant actions READ actions NOTIFY previewChanged)
47− Q_PROPERTY(QVariant infoHints READ infoHints NOTIFY previewChanged)
48− Q_PROPERTY(QVariantMap infoMap READ infoHintsHash NOTIFY previewChanged)
49− Q_PROPERTY(QString image READ image NOTIFY previewChanged)
50− Q_PROPERTY(QVariant result READ result NOTIFY previewChanged)
51−
52−public:
53− explicit Preview(QObject *parent = 0);
54− static Preview* newFromUnityPreview(unity::dash::Preview::Ptr unityPreview);
55−
56− QString rendererName() const;
57− QString title() const;
58− QString subtitle() const;
59− QString description() const;
60− QVariant actions();
61− QVariant infoHints();
62− QVariantMap infoHintsHash() const;
63− QString image() const;
64− QVariant result() const;
65−
66− Q_INVOKABLE void execute(const QString& actionId, const QHash<QString, QVariant>& hints);
67− Q_INVOKABLE void cancelAction();
68−
69−Q_SIGNALS:
70− void previewChanged();
71−
72−protected:
73− virtual void setUnityPreview(unity::dash::Preview::Ptr unityPreview);
74−
75− unity::dash::Preview::Ptr m_unityPreview;
76− Result* m_result;
77−
78−private:
79− void setUnityPreviewBase(unity::dash::Preview::Ptr unityPreview);
80−
81− QList<QObject *> m_actions;
82− QList<QObject *> m_infoHints;
83− QVariantMap m_infoHintsHash;
84− unity::glib::Cancellable m_actionCancellable;
85−};
86−
87−Q_DECLARE_METATYPE(Preview *)
88−
89−#endif
plugins/Unity/previewaction.cppdeleted−75
@@ -1,75 +0,0 @@
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 "previewaction.h"
21−
22−PreviewAction::PreviewAction(QObject *parent)
23− : QObject(parent),
24− m_unityAction(nullptr)
25−{
26−}
27−
28−void PreviewAction::setUnityAction(unity::dash::Preview::ActionPtr unityAction)
29−{
30− m_unityAction = unityAction;
31−
32− Q_EMIT previewActionChanged();
33−}
34−
35−QString PreviewAction::id() const
36−{
37− if (m_unityAction)
38− return QString::fromStdString(m_unityAction->id);
39− return QString();
40−}
41−
42−QString PreviewAction::displayName() const
43−{
44− if (m_unityAction)
45− return QString::fromStdString(m_unityAction->display_name);
46− return QString();
47−}
48−
49−QString PreviewAction::iconHint() const
50−{
51− if (m_unityAction)
52− return QString::fromStdString(m_unityAction->icon_hint);
53− return QString();
54−}
55−
56−QString PreviewAction::extraText() const
57−{
58− if (m_unityAction)
59− return QString::fromStdString(m_unityAction->extra_text);
60− return QString();
61−}
62−
63−QString PreviewAction::activationUri() const
64−{
65− if (m_unityAction)
66− return QString::fromStdString(m_unityAction->activation_uri);
67− return QString();
68−}
69−
70−LayoutHint PreviewAction::layoutHint() const
71−{
72− if (m_unityAction)
73− return static_cast<LayoutHint>(m_unityAction->layout_hint);
74− return LayoutHint::None;
75−}
plugins/Unity/previewaction.hdeleted−71
@@ -1,71 +0,0 @@
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 PREVIEWACTION_H
21−#define PREVIEWACTION_H
22−
23−// Qt
24−#include <QObject>
25−#include <QList>
26−
27−// libuinity-core
28−#include <UnityCore/Preview.h>
29−
30−enum LayoutHint // keep in sync with unty::dash::LayoutHint
31−{
32− None,
33− Left,
34− Right,
35− Top,
36− Bottom
37−};
38−
39−class Q_DECL_EXPORT PreviewAction : public QObject
40−{
41− Q_OBJECT
42−
43− Q_PROPERTY(QString id READ id NOTIFY previewActionChanged)
44− Q_PROPERTY(QString displayName READ displayName NOTIFY previewActionChanged)
45− Q_PROPERTY(QString iconHint READ iconHint NOTIFY previewActionChanged)
46− Q_PROPERTY(QString extraText READ extraText NOTIFY previewActionChanged)
47− Q_PROPERTY(QString activationUri READ activationUri NOTIFY previewActionChanged)
48− Q_PROPERTY(LayoutHint layoutHint READ layoutHint NOTIFY previewActionChanged)
49−
50−public:
51− explicit PreviewAction(QObject *parent = 0);
52− void setUnityAction(unity::dash::Preview::ActionPtr unityAction);
53−
54− QString id() const;
55− QString displayName() const;
56− QString iconHint() const;
57− QString extraText() const;
58− QString activationUri() const;
59− LayoutHint layoutHint() const;
60−
61−Q_SIGNALS:
62− void previewActionChanged();
63−
64−private:
65− unity::dash::Preview::ActionPtr m_unityAction;
66−};
67−
68−Q_DECLARE_METATYPE(PreviewAction *)
69−Q_DECLARE_METATYPE(LayoutHint)
70−
71−#endif
plugins/Unity/previewinfohint.cppdeleted−67
@@ -1,67 +0,0 @@
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 <deelistmodel.h>
21−// local
22−#include "previewinfohint.h"
23−
24−PreviewInfoHint::PreviewInfoHint(QObject *parent):
25− QObject(parent),
26− m_unityInfoHint(nullptr)
27−{
28−}
29−
30−void PreviewInfoHint::setUnityInfoHint(unity::dash::Preview::InfoHintPtr unityInfoHint)
31−{
32− m_unityInfoHint = unityInfoHint;
33−
34− Q_EMIT previewInfoHintChanged();
35−}
36−
37−QString PreviewInfoHint::id() const
38−{
39− if (m_unityInfoHint) {
40− return QString::fromStdString(m_unityInfoHint->id);
41− }
42− return QString();
43−}
44−
45−QString PreviewInfoHint::displayName() const
46−{
47− if (m_unityInfoHint) {
48− return QString::fromStdString(m_unityInfoHint->display_name);
49− }
50− return QString();
51−}
52−
53−QString PreviewInfoHint::iconHint() const
54−{
55− if (m_unityInfoHint) {
56− return QString::fromStdString(m_unityInfoHint->icon_hint);
57− }
58− return QString();
59−}
60−
61−QVariant PreviewInfoHint::value() const
62−{
63− if (m_unityInfoHint) {
64− return DeeListModel::VariantForData(m_unityInfoHint->value);
65− }
66− return QVariant();
67−}
plugins/Unity/previewinfohint.hdeleted−58
@@ -1,58 +0,0 @@
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 PREVIEWINFOHINT_H
21−#define PREVIEWINFOHINT_H
22−
23−// Qt
24−#include <QObject>
25−#include <QString>
26−#include <QVariant>
27−
28−// libunity-core
29−#include <UnityCore/Preview.h>
30−
31−class PreviewInfoHint : public QObject
32−{
33− Q_OBJECT
34−
35− Q_PROPERTY(QString id READ id NOTIFY previewInfoHintChanged)
36− Q_PROPERTY(QString displayName READ displayName NOTIFY previewInfoHintChanged)
37− Q_PROPERTY(QString iconHint READ iconHint NOTIFY previewInfoHintChanged)
38− Q_PROPERTY(QVariant value READ value NOTIFY previewInfoHintChanged)
39−
40−public:
41− explicit PreviewInfoHint(QObject *parent = 0);
42− void setUnityInfoHint(unity::dash::Preview::InfoHintPtr unityInfoHint);
43−
44− QString id() const;
45− QString displayName() const;
46− QString iconHint() const;
47− QVariant value() const;
48−
49−Q_SIGNALS:
50− void previewInfoHintChanged();
51−
52−private:
53− unity::dash::Preview::InfoHintPtr m_unityInfoHint;
54−};
55−
56−Q_DECLARE_METATYPE(PreviewInfoHint *)
57−
58−#endif
plugins/Unity/qmldirdeleted−3
@@ -1,3 +0,0 @@
1−module Unity
2−plugin Unity-qml
3−typeinfo plugin.qmltypes
plugins/Unity/radiooptionfilter.cppdeleted−61
@@ -1,61 +0,0 @@
1−/*
2− * Copyright (C) 2011, 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− * Pawel Stolowski <pawel.stolowski@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−// Self
22−#include "radiooptionfilter.h"
23−
24−// local
25−#include "unityoptionsmodel.h"
26−
27−RadioOptionFilter::RadioOptionFilter(QObject *parent) :
28− Filter(parent), m_unityRadioOptionFilter(nullptr), m_options(nullptr)
29−{
30−}
31−
32−GenericOptionsModel* RadioOptionFilter::options() const
33−{
34− return m_options;
35−}
36−
37−void RadioOptionFilter::setUnityFilter(unity::dash::Filter::Ptr filter)
38−{
39− Filter::setUnityFilter(filter);
40− m_unityRadioOptionFilter = std::dynamic_pointer_cast<unity::dash::RadioOptionFilter>(m_unityFilter);
41−
42− onOptionsChanged(m_unityRadioOptionFilter->options);
43−}
44−
45−void RadioOptionFilter::onOptionsChanged(unity::dash::RadioOptionFilter::RadioOptions)
46−{
47− if (m_options != nullptr) {
48− m_signals.disconnectAll();
49− delete m_options;
50− m_options = nullptr;
51− }
52− m_options = new UnityOptionsModel(this, m_unityRadioOptionFilter->options,
53− m_unityRadioOptionFilter->option_added,
54− m_unityRadioOptionFilter->option_removed,
55− m_unityRadioOptionFilter->show_all_button);
56− connect(m_options, SIGNAL(showAllActivated()), this, SLOT(clear()));
57−
58− m_signals << m_unityRadioOptionFilter->options.changed.connect(sigc::mem_fun(this, &RadioOptionFilter::onOptionsChanged));
59−
60− Q_EMIT optionsChanged();
61−}
plugins/Unity/radiooptionfilter.hdeleted−59
@@ -1,59 +0,0 @@
1−/*
2− * Copyright (C) 2011, 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− * Pawel Stolowski <pawel.stolowski@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−#ifndef RADIOOPTIONFILTER_H
22−#define RADIOOPTIONFILTER_H
23−
24−// Qt
25−#include <QObject>
26−#include <QMetaType>
27−
28−// libunity-core
29−#include <UnityCore/RadioOptionFilter.h>
30−
31−// Local
32−#include "filter.h"
33−#include "filteroption.h"
34−#include "signalslist.h"
35−
36−class Q_DECL_EXPORT RadioOptionFilter : public Filter
37−{
38− Q_OBJECT
39−
40−public:
41− explicit RadioOptionFilter(QObject *parent = nullptr);
42−
43− /* getters */
44− GenericOptionsModel* options() const override;
45−
46−protected:
47− void setUnityFilter(unity::dash::Filter::Ptr filter) override;
48−
49−private:
50− unity::dash::RadioOptionFilter::Ptr m_unityRadioOptionFilter;
51− GenericOptionsModel* m_options;
52− SignalsList m_signals;
53−
54− void onOptionsChanged(unity::dash::RadioOptionFilter::RadioOptions);
55−};
56−
57−Q_DECLARE_METATYPE(RadioOptionFilter*)
58−
59−#endif // RADIOOPTIONFILTER_H
plugins/Unity/ratingfilteroption.cppdeleted−62
@@ -1,62 +0,0 @@
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−// self
21−#include "ratingfilteroption.h"
22−
23−RatingFilterOption::RatingFilterOption(const QString &id, float value, QObject *parent) :
24− AbstractFilterOption(parent),
25− m_active(false),
26− m_id(id),
27− m_value(value)
28−{
29−}
30−
31−QString RatingFilterOption::id() const
32−{
33− return m_id;
34−}
35−
36−QString RatingFilterOption::name() const
37−{
38− return QString::Null();
39−}
40−
41−QString RatingFilterOption::iconHint() const
42−{
43− return QString::Null();
44−}
45−
46−float RatingFilterOption::value() const
47−{
48− return m_value;
49−}
50−
51−bool RatingFilterOption::active() const
52−{
53− return m_active;
54−}
55−
56−void RatingFilterOption::setActive(bool active)
57−{
58− if (active != m_active) {
59− m_active = active;
60− Q_EMIT activeChanged(m_active);
61− }
62−}
plugins/Unity/ratingfilteroption.hdeleted−53
@@ -1,53 +0,0 @@
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 RATINGFILTEROPTION_H
21−#define RATINGFILTEROPTION_H
22−
23−// local
24−#include "abstractfilteroption.h"
25−
26−class Q_DECL_EXPORT RatingFilterOption : public AbstractFilterOption
27−{
28− Q_OBJECT
29−
30− Q_PROPERTY(float value READ value CONSTANT)
31−
32−public:
33− explicit RatingFilterOption(const QString &id, float ratingValue, QObject *parent = nullptr);
34−
35− /* getters */
36− QString id() const override;
37− QString name() const override;
38− QString iconHint() const override;
39− bool active() const override;
40− float value() const;
41−
42− /* setters */
43− void setActive(bool active) override;
44−
45−private:
46− bool m_active;
47− QString m_id;
48− float m_value;
49−};
50−
51−Q_DECLARE_METATYPE(RatingFilterOption*)
52−
53−#endif // RATINGFILTEROPTION_H
plugins/Unity/ratingsfilter.cppdeleted−73
@@ -1,73 +0,0 @@
1−/*
2− * Copyright (C) 2011, 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− * Pawel Stolowski <pawel.stolowski@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−// Self
22−#include "ratingsfilter.h"
23−
24−// local
25−#include "ratingfilteroption.h"
26−#include "ratingoptionsmodel.h"
27−
28−RatingsFilter::RatingsFilter(QObject *parent) :
29− Filter(parent),
30− m_unityRatingsFilter(nullptr),
31− m_options(nullptr)
32−{
33−}
34−
35−GenericOptionsModel* RatingsFilter::options() const
36−{
37− return m_options;
38−}
39−
40−float RatingsFilter::rating() const
41−{
42− if (m_unityRatingsFilter)
43− {
44− return m_unityRatingsFilter->rating;
45− }
46− return 0.0f;
47−}
48−
49−void RatingsFilter::setUnityFilter(unity::dash::Filter::Ptr filter)
50−{
51− Filter::setUnityFilter(filter);
52− m_unityRatingsFilter = std::dynamic_pointer_cast<unity::dash::RatingsFilter>(m_unityFilter);
53−
54− delete m_options;
55−
56− m_options = new RatingOptionsModel(m_unityRatingsFilter->show_all_button, this);
57− connect(m_options, SIGNAL(activeChanged(AbstractFilterOption *)), m_options, SLOT(ensureTheOnlyActive(AbstractFilterOption *)));
58− connect(m_options, SIGNAL(activeChanged(AbstractFilterOption *)), this, SLOT(onActiveChanged(AbstractFilterOption *)));
59− connect(m_options, SIGNAL(showAllActivated()), this, SLOT(clear()));
60−
61− Q_EMIT optionsChanged();
62−}
63−
64−void RatingsFilter::onActiveChanged(AbstractFilterOption *option)
65−{
66− RatingFilterOption *ratingOption = dynamic_cast<RatingFilterOption*>(option);
67− if (ratingOption != nullptr)
68− {
69− const float val = ratingOption->active() ? ratingOption->value() : 0.0f;
70− m_unityRatingsFilter->rating = val;
71− Q_EMIT ratingChanged(val);
72− }
73−}
plugins/Unity/ratingsfilter.hdeleted−66
@@ -1,66 +0,0 @@
1−/*
2− * Copyright (C) 2011, 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− * Pawel Stolowski <pawel.stolowski@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−#ifndef RATINGSFILTER_H
22−#define RATINGSFILTER_H
23−
24−// Qt
25−#include <QObject>
26−#include <QMetaType>
27−
28−// libunity-core
29−#include <UnityCore/RatingsFilter.h>
30−
31−// Local
32−#include "filter.h"
33−
34−class GenericOptionsModel;
35−class AbstractFilterOption;
36−
37−class Q_DECL_EXPORT RatingsFilter : public Filter
38−{
39− Q_OBJECT
40−
41− Q_PROPERTY(float rating READ rating NOTIFY ratingChanged)
42−
43−public:
44− explicit RatingsFilter(QObject *parent = nullptr);
45−
46− /* getters */
47− GenericOptionsModel* options() const override;
48− float rating() const;
49−
50−Q_SIGNALS:
51− void ratingChanged(float);
52−
53−protected:
54− void setUnityFilter(unity::dash::Filter::Ptr filter) override;
55−
56−protected Q_SLOTS:
57− void onActiveChanged(AbstractFilterOption *option);
58−
59−private:
60− unity::dash::RatingsFilter::Ptr m_unityRatingsFilter;
61− GenericOptionsModel *m_options;
62−};
63−
64−Q_DECLARE_METATYPE(RatingsFilter*)
65−
66−#endif // RATINGSFILTER_H
plugins/Unity/result.cppdeleted−82
@@ -1,82 +0,0 @@
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.hdeleted−69
@@ -1,69 +0,0 @@
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.cppdeleted−404
@@ -1,404 +0,0 @@
1−/*
2− * Copyright (C) 2011 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@canonical.com>
6− * Michal Hruby <michal.hruby@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−// Self
22−#include "scope.h"
23−
24−// local
25−#include "categories.h"
26−#include "preview.h"
27−#include "variantutils.h"
28−
29−// Qt
30−#include <QUrl>
31−#include <QDebug>
32−#include <QtGui/QDesktopServices>
33−#include <QQmlEngine>
34−
35−#include <UnityCore/Variant.h>
36−#include <UnityCore/GLibWrapper.h>
37−
38−#include <libintl.h>
39−#include <glib.h>
40−
41−Scope::Scope(QObject *parent) : QObject(parent)
42− , m_formFactor("phone")
43− , m_isActive(false)
44− , m_searchInProgress(false)
45−{
46− m_categories.reset(new Categories(this));
47−
48− connect(this, &Scope::isActiveChanged, this, &Scope::scopeIsActiveChanged);
49−}
50−
51−QString Scope::id() const
52−{
53− return QString::fromStdString(m_unityScope->id());
54−}
55−
56−QString Scope::name() const
57−{
58− return QString::fromStdString(m_unityScope->name());
59−}
60−
61−QString Scope::iconHint() const
62−{
63− return QString::fromStdString(m_unityScope->icon_hint());
64−}
65−
66−QString Scope::description() const
67−{
68− return QString::fromStdString(m_unityScope->description());
69−}
70−
71−QString Scope::searchHint() const
72−{
73− return QString::fromStdString(m_unityScope->search_hint());
74−}
75−
76−bool Scope::searchInProgress() const
77−{
78− return m_searchInProgress;
79−}
80−
81−bool Scope::visible() const
82−{
83− return m_unityScope->visible();
84−}
85−
86−QString Scope::shortcut() const
87−{
88− return QString::fromStdString(m_unityScope->shortcut());
89−}
90−
91−bool Scope::connected() const
92−{
93− return m_unityScope->connected();
94−}
95−
96−Categories* Scope::categories() const
97−{
98− return m_categories.get();
99−}
100−
101−QString Scope::searchQuery() const
102−{
103− return m_searchQuery;
104−}
105−
106−QString Scope::noResultsHint() const
107−{
108− return m_noResultsHint;
109−}
110−
111−QString Scope::formFactor() const
112−{
113− return m_formFactor;
114−}
115−
116−bool Scope::isActive() const
117−{
118− return m_isActive;
119−}
120−
121−Filters* Scope::filters() const
122−{
123− return m_filters.get();
124−}
125−
126−void Scope::setSearchQuery(const QString& search_query)
127−{
128− /* Checking for m_searchQuery.isNull() which returns true only when the string
129− has never been set is necessary because when search_query is the empty
130− string ("") and m_searchQuery is the null string,
131− search_query != m_searchQuery is still true.
132− */
133− using namespace std::placeholders;
134−
135− if (m_searchQuery.isNull() || search_query != m_searchQuery) {
136− m_searchQuery = search_query;
137− m_cancellable.Renew();
138− m_unityScope->Search(search_query.toStdString(), std::bind(&Scope::onSearchFinished, this, _1, _2, _3), m_cancellable);
139− Q_EMIT searchQueryChanged();
140− if (!m_searchInProgress) {
141− m_searchInProgress = true;
142− Q_EMIT searchInProgressChanged();
143− }
144− }
145−}
146−
147−void Scope::setNoResultsHint(const QString& hint) {
148− if (hint != m_noResultsHint) {
149− m_noResultsHint = hint;
150− Q_EMIT noResultsHintChanged();
151− }
152−}
153−
154−void Scope::setFormFactor(const QString& form_factor) {
155− if (form_factor != m_formFactor) {
156− m_formFactor = form_factor;
157− if (m_unityScope) {
158− m_unityScope->form_factor = m_formFactor.toStdString();
159− synchronizeStates(); // will trigger a re-search
160− }
161− Q_EMIT formFactorChanged();
162− }
163−}
164−
165−void Scope::setActive(const bool active) {
166− if (active != m_isActive) {
167− m_isActive = active;
168− Q_EMIT isActiveChanged(m_isActive);
169− }
170−}
171−
172−unity::dash::LocalResult Scope::createLocalResult(const QVariant &uri, const QVariant &icon_hint,
173− const QVariant &category, const QVariant &result_type,
174− const QVariant &mimetype, const QVariant &title,
175− const QVariant &comment, const QVariant &dnd_uri,
176− const QVariant &metadata)
177−{
178− unity::dash::LocalResult res;
179− res.uri = uri.toString().toStdString();
180− res.icon_hint = icon_hint.toString().toStdString();
181− res.category_index = category.toUInt();
182− res.result_type = result_type.toUInt();
183− res.mimetype = mimetype.toString().toStdString();
184− res.name = title.toString().toStdString();
185− res.comment = comment.toString().toStdString();
186− res.dnd_uri = dnd_uri.toString().toStdString();
187− res.hints = convertToHintsMap(metadata);
188−
189− return res;
190−}
191−
192−// FIXME: Change to use row index.
193−void Scope::activate(const QVariant &uri, const QVariant &icon_hint, const QVariant &category,
194− const QVariant &result_type, const QVariant &mimetype, const QVariant &title,
195− const QVariant &comment, const QVariant &dnd_uri, const QVariant &metadata)
196−{
197− auto res = createLocalResult(uri, icon_hint, category, result_type, mimetype, title, comment, dnd_uri, metadata);
198− m_unityScope->Activate(res);
199−}
200−
201−// FIXME: Change to use row index.
202−void Scope::preview(const QVariant &uri, const QVariant &icon_hint, const QVariant &category,
203− const QVariant &result_type, const QVariant &mimetype, const QVariant &title,
204− const QVariant &comment, const QVariant &dnd_uri, const QVariant &metadata)
205−{
206− auto res = createLocalResult(uri, icon_hint, category, result_type, mimetype, title, comment, dnd_uri, metadata);
207− m_previewCancellable.Renew();
208−
209− // canned queries don't have previews, must be activated
210− if (uri.toString().startsWith("x-unity-no-preview-scopes-query://")) {
211− m_unityScope->Activate(res);
212− } else {
213− m_unityScope->Preview(res, nullptr, m_previewCancellable);
214− }
215−}
216−
217−void Scope::cancelActivation()
218−{
219− m_previewCancellable.Cancel();
220−}
221−
222−void Scope::onActivated(unity::dash::LocalResult const& result, unity::dash::ScopeHandledType type, unity::glib::HintsMap const& hints)
223−{
224− // note: we will not get called on SHOW_PREVIEW, instead UnityCore will signal preview_ready.
225− switch (type)
226− {
227− case unity::dash::NOT_HANDLED:
228− fallbackActivate(QString::fromStdString(result.uri));
229− break;
230− case unity::dash::SHOW_DASH:
231− Q_EMIT showDash();
232− break;
233− case unity::dash::HIDE_DASH:
234− Q_EMIT hideDash();
235− break;
236− case unity::dash::GOTO_DASH_URI:
237− if (hints.find("goto-uri") != hints.end()) {
238− Q_EMIT gotoUri(QString::fromStdString(g_variant_get_string(hints.at("goto-uri"), nullptr)));
239− } else {
240− qWarning() << "Missing goto-uri hint for GOTO_DASH_URI activation reply";
241− }
242− break;
243− case unity::dash::PERFORM_SEARCH:
244− if (hints.find("query") != hints.end()) {
245− // note: this will emit searchQueryChanged, and shell will call setSearchQuery back with a new query,
246− // but it will get ignored.
247− setSearchQuery(QString::fromStdString(g_variant_get_string(hints.at("query"), nullptr)));
248− }
249− break;
250− default:
251− qWarning() << "Unhandled activation response:" << type;
252− }
253−}
254−
255−void Scope::onPreviewReady(unity::dash::LocalResult const& /* result */, unity::dash::Preview::Ptr const& preview)
256−{
257− auto prv = Preview::newFromUnityPreview(preview);
258− // is this the best solution? QML may need to keep more than one preview instance around, so we can't own it.
259− // passing it by value is not possible.
260− QQmlEngine::setObjectOwnership(prv, QQmlEngine::JavaScriptOwnership);
261− Q_EMIT previewReady(prv);
262−}
263−
264−void Scope::fallbackActivate(const QString& uri)
265−{
266− /* Tries various methods to trigger a sensible action for the given 'uri'.
267− If it has no understanding of the given scheme it falls back on asking
268− Qt to open the uri.
269− */
270− QUrl url(uri);
271− if (url.scheme() == "file") {
272− /* Override the files place's default URI handler: we want the file
273− manager to handle opening folders, not the dash.
274−
275− Ref: https://bugs.launchpad.net/upicek/+bug/689667
276− */
277− QDesktopServices::openUrl(url);
278− return;
279− }
280− if (url.scheme() == "application") {
281− // get the full path to the desktop file
282− QString path(url.path().isEmpty() ? url.authority() : url.path());
283− if (path.startsWith("/")) {
284− Q_EMIT activateApplication(path);
285− } else {
286− // TODO: use the new desktop file finder/parser when it's ready
287− gchar* full_path = nullptr;
288− GKeyFile* key_file = g_key_file_new();
289− QString apps_path = "applications/" + path;
290− if (g_key_file_load_from_data_dirs(key_file, apps_path.toLocal8Bit().constData(), &full_path,
291− G_KEY_FILE_NONE, nullptr)) {
292− path = full_path;
293− Q_EMIT activateApplication(path);
294− } else {
295− qWarning() << "Unable to activate " << path;
296− }
297− g_key_file_free(key_file);
298− g_free(full_path);
299− }
300− return;
301− }
302−
303− qDebug() << "Trying to open" << uri;
304−
305− /* Try our luck */
306− QDesktopServices::openUrl(uri); //url?
307−}
308−
309−void Scope::setUnityScope(const unity::dash::Scope::Ptr& scope)
310−{
311− m_unityScope = scope;
312−
313− m_categories->setUnityScope(m_unityScope);
314− m_filters.reset(new Filters(m_unityScope->filters, this));
315−
316− m_unityScope->form_factor = m_formFactor.toStdString();
317− /* Property change signals */
318− m_unityScope->id.changed.connect(sigc::mem_fun(this, &Scope::idChanged));
319− m_unityScope->name.changed.connect(sigc::mem_fun(this, &Scope::nameChanged));
320− m_unityScope->icon_hint.changed.connect(sigc::mem_fun(this, &Scope::iconHintChanged));
321− m_unityScope->description.changed.connect(sigc::mem_fun(this, &Scope::descriptionChanged));
322− m_unityScope->search_hint.changed.connect(sigc::mem_fun(this, &Scope::searchHintChanged));
323− m_unityScope->visible.changed.connect(sigc::mem_fun(this, &Scope::visibleChanged));
324− m_unityScope->shortcut.changed.connect(sigc::mem_fun(this, &Scope::shortcutChanged));
325− m_unityScope->connected.changed.connect(sigc::mem_fun(this, &Scope::connectedChanged));
326− m_unityScope->results_dirty.changed.connect(sigc::mem_fun(this, &Scope::resultsDirtyToggled));
327−
328− /* FIXME: signal should be forwarded instead of calling the handler directly */
329− m_unityScope->activated.connect(sigc::mem_fun(this, &Scope::onActivated));
330−
331− m_unityScope->preview_ready.connect(sigc::mem_fun(this, &Scope::onPreviewReady));
332−
333− /* Synchronize local states with m_unityScope right now and whenever
334− m_unityScope becomes connected */
335− /* FIXME: should emit change notification signals for all properties */
336− connect(this, SIGNAL(connectedChanged(bool)), SLOT(synchronizeStates()));
337− synchronizeStates();
338−}
339−
340−unity::dash::Scope::Ptr Scope::unityScope() const
341−{
342− return m_unityScope;
343−}
344−
345−void Scope::synchronizeStates()
346−{
347− using namespace std::placeholders;
348−
349− if (connected()) {
350− /* Forward local states to m_unityScope */
351− if (!m_searchQuery.isNull()) {
352− m_cancellable.Renew();
353− m_unityScope->Search(m_searchQuery.toStdString(), std::bind(&Scope::onSearchFinished, this, _1, _2, _3), m_cancellable);
354− if (!m_searchInProgress) {
355− m_searchInProgress = true;
356− Q_EMIT searchInProgressChanged();
357− }
358− }
359− }
360−}
361−
362−void Scope::scopeIsActiveChanged()
363−{
364− if (!isActive() || !m_unityScope || !m_unityScope->results_dirty()) return;
365−
366− // force new search
367− synchronizeStates();
368−}
369−
370−void Scope::resultsDirtyToggled(bool results_dirty)
371−{
372− if (!results_dirty || !isActive()) return;
373−
374− // force new search
375− synchronizeStates();
376−}
377−
378−void Scope::onSearchFinished(std::string const& /* query */, unity::glib::HintsMap const& hints, unity::glib::Error const& err)
379−{
380− QString hint;
381−
382− GError* error = const_cast<unity::glib::Error&>(err);
383−
384− if (!err || !g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
385− if (m_searchInProgress) {
386− m_searchInProgress = false;
387− Q_EMIT searchInProgressChanged();
388− }
389− } else {
390− // no need to check the results hint, we're still searching
391− return;
392− }
393−
394− if (!m_unityScope->results()->count()) {
395− unity::glib::HintsMap::const_iterator it = hints.find("no-results-hint");
396− if (it != hints.end()) {
397− hint = QString::fromStdString(it->second.GetString());
398− } else {
399− hint = QString::fromUtf8(dgettext("unity", "Sorry, there is nothing that matches your search."));
400− }
401− }
402−
403− setNoResultsHint(hint);
404−}
plugins/Unity/scope.hdeleted−153
@@ -1,153 +0,0 @@
1−/*
2− * Copyright (C) 2011 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@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 SCOPE_H
21−#define SCOPE_H
22−
23−// Qt
24−#include <QObject>
25−#include <QString>
26−#include <QMetaType>
27−
28−// libunity-core
29−#include <UnityCore/Scope.h>
30−#include <UnityCore/Results.h>
31−#include <UnityCore/GLibWrapper.h>
32−
33−#include "categories.h"
34−#include "filters.h"
35−
36−class Preview;
37−
38−class Scope : public QObject
39−{
40− Q_OBJECT
41−
42− Q_PROPERTY(QString id READ id NOTIFY idChanged)
43− Q_PROPERTY(QString name READ name NOTIFY nameChanged)
44− Q_PROPERTY(QString iconHint READ iconHint NOTIFY iconHintChanged)
45− Q_PROPERTY(QString description READ description NOTIFY descriptionChanged)
46− Q_PROPERTY(QString searchHint READ searchHint NOTIFY searchHintChanged)
47− Q_PROPERTY(bool searchInProgress READ searchInProgress NOTIFY searchInProgressChanged)
48− Q_PROPERTY(bool visible READ visible NOTIFY visibleChanged)
49− Q_PROPERTY(QString shortcut READ shortcut NOTIFY shortcutChanged)
50− Q_PROPERTY(bool connected READ connected NOTIFY connectedChanged)
51− Q_PROPERTY(Categories* categories READ categories NOTIFY categoriesChanged)
52− Q_PROPERTY(Filters* filters READ filters NOTIFY filtersChanged)
53−
54− Q_PROPERTY(QString searchQuery READ searchQuery WRITE setSearchQuery NOTIFY searchQueryChanged)
55− Q_PROPERTY(QString noResultsHint READ noResultsHint WRITE setNoResultsHint NOTIFY noResultsHintChanged)
56− Q_PROPERTY(QString formFactor READ formFactor WRITE setFormFactor NOTIFY formFactorChanged)
57− Q_PROPERTY(bool isActive READ isActive WRITE setActive NOTIFY isActiveChanged)
58−
59−public:
60− explicit Scope(QObject *parent = 0);
61−
62− /* getters */
63− QString id() const;
64− QString name() const;
65− QString iconHint() const;
66− QString description() const;
67− QString searchHint() const;
68− bool visible() const;
69− QString shortcut() const;
70− bool connected() const;
71− bool searchInProgress() const;
72− Categories* categories() const;
73− Filters* filters() const;
74− QString searchQuery() const;
75− QString noResultsHint() const;
76− QString formFactor() const;
77− bool isActive() const;
78−
79− /* setters */
80− void setSearchQuery(const QString& search_query);
81− void setNoResultsHint(const QString& hint);
82− void setFormFactor(const QString& form_factor);
83− void setActive(const bool);
84−
85− Q_INVOKABLE void activate(const QVariant &uri, const QVariant &icon_hint, const QVariant &category,
86− const QVariant &result_type, const QVariant &mimetype, const QVariant &title,
87− const QVariant &comment, const QVariant &dnd_uri, const QVariant &metadata);
88− Q_INVOKABLE void preview(const QVariant &uri, const QVariant &icon_hint, const QVariant &category,
89− const QVariant &result_type, const QVariant &mimetype, const QVariant &title,
90− const QVariant &comment, const QVariant &dnd_uri, const QVariant &metadata);
91− Q_INVOKABLE void cancelActivation();
92−
93− void setUnityScope(const unity::dash::Scope::Ptr& scope);
94− unity::dash::Scope::Ptr unityScope() const;
95−
96−Q_SIGNALS:
97− void idChanged(const std::string&);
98− void dbusNameChanged(const std::string&);
99− void dbusPathChanged(const std::string&);
100− void nameChanged(const std::string&);
101− void iconHintChanged(const std::string&);
102− void descriptionChanged(const std::string&);
103− void searchHintChanged(const std::string&);
104− void searchInProgressChanged();
105− void visibleChanged(bool);
106− void shortcutChanged(const std::string&);
107− void connectedChanged(bool);
108− void categoriesChanged();
109− void searchQueryChanged();
110− void noResultsHintChanged();
111− void formFactorChanged();
112− void isActiveChanged(bool);
113− void filtersChanged();
114−
115− // signals triggered by activate(..) or preview(..) requests.
116− void previewReady(Preview *preview);
117− void showDash();
118− void hideDash();
119− void gotoUri(const QString &uri);
120−
121− void activateApplication(const QString &desktop);
122−
123−private Q_SLOTS:
124− void synchronizeStates();
125− void scopeIsActiveChanged();
126− void onSearchFinished(std::string const &, unity::glib::HintsMap const &, unity::glib::Error const&);
127−
128−private:
129− unity::dash::LocalResult createLocalResult(const QVariant &uri, const QVariant &icon_hint,
130− const QVariant &category, const QVariant &result_type,
131− const QVariant &mimetype, const QVariant &title,
132− const QVariant &comment, const QVariant &dnd_uri,
133− const QVariant &metadata);
134− void onActivated(unity::dash::LocalResult const& result, unity::dash::ScopeHandledType type, unity::glib::HintsMap const& hints);
135− void onPreviewReady(unity::dash::LocalResult const& result, unity::dash::Preview::Ptr const& preview);
136− void fallbackActivate(const QString& uri);
137− void resultsDirtyToggled(bool);
138−
139− unity::dash::Scope::Ptr m_unityScope;
140− std::unique_ptr<Categories> m_categories;
141− std::unique_ptr<Filters> m_filters;
142− QString m_searchQuery;
143− QString m_noResultsHint;
144− QString m_formFactor;
145− bool m_isActive;
146− bool m_searchInProgress;
147− unity::glib::Cancellable m_cancellable;
148− unity::glib::Cancellable m_previewCancellable;
149−};
150−
151−Q_DECLARE_METATYPE(Scope*)
152−
153−#endif // SCOPE_H
plugins/Unity/scopes.cppdeleted−176
@@ -1,176 +0,0 @@
1−/*
2− * Copyright (C) 2011 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@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−// Self
21−#include "scopes.h"
22−
23−// Local
24−#include "scope.h"
25−
26−// Qt
27−#include <QDebug>
28−#include <QtCore/QStringList>
29−#include <QtGui/QKeySequence>
30−
31−Scopes::Scopes(QObject *parent)
32− : QAbstractListModel(parent)
33− , m_unityScopes(std::make_shared<unity::dash::GSettingsScopes>())
34− , m_loaded(false)
35−{
36− m_roles[Scopes::RoleScope] = "scope";
37− m_roles[Scopes::RoleId] = "id";
38− m_roles[Scopes::RoleVisible] = "visible";
39−
40− m_unityScopes->scope_added.connect(sigc::mem_fun(this, &Scopes::onScopeAdded));
41− m_unityScopes->scope_removed.connect(sigc::mem_fun(this, &Scopes::onScopeRemoved));
42− m_unityScopes->scopes_reordered.connect(sigc::mem_fun(this, &Scopes::onScopesReordered));
43− m_unityScopes->LoadScopes();
44−}
45−
46−QHash<int, QByteArray> Scopes::roleNames() const
47−{
48− return m_roles;
49−}
50−
51−int Scopes::rowCount(const QModelIndex& parent) const
52−{
53− Q_UNUSED(parent)
54−
55− return m_scopes.count();
56−}
57−
58−QVariant Scopes::data(const QModelIndex& index, int role) const
59−{
60− Q_UNUSED(role)
61−
62− if (!index.isValid()) {
63− return QVariant();
64− }
65−
66− Scope* scope = m_scopes.at(index.row());
67−
68− if (role == Scopes::RoleScope) {
69− return QVariant::fromValue(scope);
70− } else if (role == Scopes::RoleId) {
71− return QVariant::fromValue(scope->id());
72− } else if (role == Scopes::RoleVisible) {
73− return QVariant::fromValue(scope->visible());
74− } else {
75− return QVariant();
76− }
77−}
78−
79−QVariant Scopes::get(int row) const
80−{
81− return data(QAbstractListModel::index(row), 0);
82−}
83−
84−QVariant Scopes::get(const QString& scope_id) const
85−{
86− Q_FOREACH(Scope* scope, m_scopes) {
87− if (scope->id() == scope_id) {
88− return QVariant::fromValue(scope);
89− }
90− }
91−
92− return QVariant();
93−}
94−
95−bool Scopes::loaded() const
96−{
97− return m_loaded;
98−}
99−
100−void Scopes::onScopeAdded(const unity::dash::Scope::Ptr& scope, int /*position*/)
101−{
102− int index = m_scopes.count();
103− beginInsertRows(QModelIndex(), index, index);
104− addUnityScope(scope);
105− endInsertRows();
106−
107− // FIXME: do only once after all loaded?
108− m_loaded = true;
109− Q_EMIT loadedChanged(m_loaded);
110−}
111−
112−void Scopes::onScopesLoaded()
113−{
114−}
115−
116−void Scopes::onScopeRemoved(const unity::dash::Scope::Ptr& scope)
117−{
118− auto id = QString::fromStdString(scope->id);
119− auto index = findScopeById(id);
120− if (index >= 0) {
121− beginRemoveRows(QModelIndex(), index, index);
122− removeUnityScope(index);
123− endRemoveRows();
124−
125− Q_EMIT scopeRemoved(id, index);
126− }
127−}
128−
129−void Scopes::onScopesReordered(const unity::dash::Scopes::ScopeList& scopes)
130−{
131− // FIXME Should use beginMoveRows()/endMoveRows() to not recreate the UI for every scope.
132− beginResetModel();
133−
134− // remove existing scopes
135− for (auto i=m_scopes.count()-1; i>=0; i--) {
136− removeUnityScope(i);
137− }
138−
139− // re-create scopes
140− for (uint i=0; i<scopes.size(); i++) {
141− addUnityScope(scopes[i]);
142− }
143− endResetModel();
144−}
145−
146−void Scopes::onScopePropertyChanged()
147−{
148− QModelIndex scopeIndex = index(m_scopes.indexOf(qobject_cast<Scope*>(sender())));
149− Q_EMIT dataChanged(scopeIndex, scopeIndex);
150−}
151−
152−void Scopes::addUnityScope(const unity::dash::Scope::Ptr& unity_scope)
153−{
154− Scope* scope = new Scope(this);
155− scope->setUnityScope(unity_scope);
156− /* DOCME */
157− QObject::connect(scope, SIGNAL(visibleChanged(bool)), this, SLOT(onScopePropertyChanged()));
158− m_scopes.append(scope);
159−}
160−
161−void Scopes::removeUnityScope(int index)
162−{
163− Scope* scope = m_scopes.takeAt(index);
164−
165− delete scope;
166−}
167−
168−int Scopes::findScopeById(const QString& scope_id)
169−{
170− for (int i=0; i<m_scopes.count(); i++) {
171− if (m_scopes[i]->id() == scope_id) {
172− return i;
173− }
174− }
175− return -1;
176−}
plugins/Unity/scopes.hdeleted−94
@@ -1,94 +0,0 @@
1−/*
2− * Copyright (C) 2011 Canonical, Ltd.
3− *
4− * Authors:
5− * Florian Boucault <florian.boucault@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 SCOPES_H
21−#define SCOPES_H
22−
23−// Qt
24−#include <QAbstractListModel>
25−#include <QList>
26−
27−// libunity-core
28−#include <UnityCore/Scope.h>
29−#include <UnityCore/GSettingsScopes.h>
30−
31−namespace unity
32−{
33−namespace dash
34−{
35−class Scopes;
36−}
37−}
38−
39−class Hotkey;
40−class Scope;
41−
42−class Scopes : public QAbstractListModel
43−{
44− Q_OBJECT
45−
46− Q_ENUMS(Roles)
47−
48− Q_PROPERTY(bool loaded READ loaded NOTIFY loadedChanged)
49−
50−public:
51− explicit Scopes(QObject *parent = 0);
52− ~Scopes() = default;
53−
54− enum Roles {
55− RoleScope,
56− RoleId,
57− RoleVisible
58− };
59−
60− QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
61− Q_INVOKABLE int rowCount(const QModelIndex& parent = QModelIndex()) const;
62−
63− Q_INVOKABLE QVariant get(int row) const;
64− Q_INVOKABLE QVariant get(const QString& scope_id) const;
65−
66− QHash<int, QByteArray> roleNames() const;
67−
68− bool loaded() const;
69−
70−Q_SIGNALS:
71− void activateScopeRequested(const QString& scope_id);
72− void loadedChanged(bool loaded);
73− void scopeRemoved(const QString& scope_id, int index);
74−
75−private Q_SLOTS:
76− void onScopesLoaded();
77− void onScopeAdded(const unity::dash::Scope::Ptr& scope, int position);
78− void onScopeRemoved(const unity::dash::Scope::Ptr& scope);
79− void onScopesReordered(const unity::dash::Scopes::ScopeList& scopes);
80− void onScopePropertyChanged();
81−
82−private:
83− unity::dash::GSettingsScopesReader::Ptr m_scopesReader;
84− unity::dash::Scopes::Ptr m_unityScopes;
85− QList<Scope*> m_scopes;
86− QHash<int, QByteArray> m_roles;
87− bool m_loaded;
88−
89− void addUnityScope(const unity::dash::Scope::Ptr& unity_scope);
90− void removeUnityScope(int index);
91− int findScopeById(const QString& scope_id);
92−};
93−
94−#endif // SCOPES_H
plugins/Unity/showallfilteroption.cppdeleted−60
@@ -1,60 +0,0 @@
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−// self
21−#include "showallfilteroption.h"
22−
23−#include <libintl.h>
24−
25−unsigned int ShowAllFilterOption::m_showAllCount = 0;
26−
27−ShowAllFilterOption::ShowAllFilterOption(QObject *parent) :
28− AbstractFilterOption(parent),
29− m_active(false)
30−{
31− m_id = QString("show_all::%1").arg(m_showAllCount++);
32−}
33−
34−QString ShowAllFilterOption::id() const
35−{
36− return m_id;
37−}
38−
39−QString ShowAllFilterOption::name() const
40−{
41− return QString::fromUtf8(dgettext("unity", "All"));
42−}
43−
44−QString ShowAllFilterOption::iconHint() const
45−{
46− return QString::Null();
47−}
48−
49−bool ShowAllFilterOption::active() const
50−{
51− return m_active;
52−}
53−
54−void ShowAllFilterOption::setActive(bool active)
55−{
56− if (active != m_active) {
57− m_active = active;
58− Q_EMIT activeChanged(m_active);
59− }
60−}
plugins/Unity/showallfilteroption.hdeleted−51
@@ -1,51 +0,0 @@
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 SHOWALLFILTEROPTION_H
21−#define SHOWALLFILTEROPTION_H
22−
23−// local
24−#include "abstractfilteroption.h"
25−
26−class Q_DECL_EXPORT ShowAllFilterOption : public AbstractFilterOption
27−{
28− Q_OBJECT
29−
30−public:
31− explicit ShowAllFilterOption(QObject *parent = nullptr);
32−
33− /* getters */
34− QString id() const override;
35− QString name() const override;
36− QString iconHint() const override;
37− bool active() const override;
38−
39− /* setters */
40− void setActive(bool active) override;
41−
42−private:
43− bool m_active;
44− QString m_id;
45−
46− static unsigned int m_showAllCount;
47−};
48−
49−Q_DECLARE_METATYPE(ShowAllFilterOption*)
50−
51−#endif // SHOWALLFILTEROPTION_H
plugins/Unity/signalslist.cppdeleted−39
@@ -1,39 +0,0 @@
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 "signalslist.h"
21−
22−void SignalsList::append(const sigc::connection &c)
23−{
24− m_signals.append(c);
25−}
26−
27−void SignalsList::disconnectAll()
28−{
29− Q_FOREACH(auto sig, m_signals) {
30− sig.disconnect();
31− }
32− m_signals.clear();
33−}
34−
35−SignalsList& SignalsList::operator<<(const sigc::connection &c)
36−{
37− append(c);
38− return *this;
39−}
plugins/Unity/signalslist.hdeleted−38
@@ -1,38 +0,0 @@
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 SIGNALSLIST_H
21−#define SIGNALSLIST_H
22−
23−#include <QList>
24−#include <sigc++/sigc++.h>
25−
26−class Q_DECL_EXPORT SignalsList
27−{
28−public:
29− void append(const sigc::connection &c);
30− void disconnectAll();
31−
32− SignalsList& operator<<(const sigc::connection &c);
33−
34−private:
35− QList<sigc::connection> m_signals;
36−};
37−
38−#endif // SIGNALSLIST_H
plugins/Unity/socialpreview.cppdeleted−87
@@ -1,87 +0,0 @@
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 "socialpreview.h"
21−#include "socialpreviewcomment.h"
22−#include "iconutils.h"
23−
24−#include <QDebug>
25−
26−SocialPreview::SocialPreview(QObject *parent):
27− Preview(parent),
28− m_unitySocialPreview(nullptr)
29−{
30−}
31−
32−QString SocialPreview::sender() const
33−{
34− if (m_unitySocialPreview) {
35− return QString::fromStdString(m_unitySocialPreview->sender());
36− } else {
37− qWarning() << "Preview not set";
38− }
39− return QString();
40−}
41−
42−QString SocialPreview::content() const
43−{
44− if (m_unitySocialPreview) {
45− return QString::fromStdString(m_unitySocialPreview->content());
46− } else {
47− qWarning() << "Preview not set";
48− }
49− return QString();
50−}
51−
52−QString SocialPreview::avatar() const
53−{
54− if (m_unitySocialPreview) {
55− auto giconString = g_icon_to_string(m_unitySocialPreview->avatar());
56− QString result(gIconToDeclarativeImageProviderString(QString::fromUtf8(giconString)));
57− g_free(giconString);
58− return result;
59− } else {
60− qWarning() << "Preview not set";
61− }
62− return QString();
63−}
64−
65−QVariant SocialPreview::comments()
66−{
67− return QVariant::fromValue(m_comments);
68−}
69−
70−void SocialPreview::setUnityPreview(unity::dash::Preview::Ptr unityPreview)
71−{
72− m_unitySocialPreview = std::dynamic_pointer_cast<unity::dash::SocialPreview>(unityPreview);
73− qDeleteAll(m_comments);
74− m_comments.clear();
75−
76− if (m_unitySocialPreview) {
77− for (auto unityComment: m_unitySocialPreview->GetComments()) {
78− auto comment = new SocialPreviewComment(this);
79− comment->setUnityComment(unityComment);
80− m_comments.append(comment);
81−
82− Q_EMIT previewChanged();
83− }
84− } else {
85− qWarning() << "Incorrect preview type";
86− }
87−}
plugins/Unity/socialpreview.hdeleted−63
@@ -1,63 +0,0 @@
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 SOCIALPREVIEW_H
21−#define SOCIALPREVIEW_H
22−
23−// local
24−#include "preview.h"
25−
26−// Qt
27−#include <QObject>
28−#include <QList>
29−#include <QMetaType>
30−
31−// libunity-core
32−#include <UnityCore/SocialPreview.h>
33−
34−class Q_DECL_EXPORT SocialPreview: public Preview
35−{
36− Q_OBJECT
37−
38− Q_PROPERTY(QString sender READ sender NOTIFY previewChanged)
39− Q_PROPERTY(QString content READ content NOTIFY previewChanged)
40− Q_PROPERTY(QString avatar READ avatar NOTIFY previewChanged)
41−
42−public:
43− explicit SocialPreview(QObject *parent = 0);
44−
45− QString sender() const;
46− QString content() const;
47− QString avatar() const;
48− QVariant comments();
49−
50−Q_SIGNALS:
51− void previewChanged();
52−
53−protected:
54− void setUnityPreview(unity::dash::Preview::Ptr unityPreview) override;
55−
56−private:
57− unity::dash::SocialPreview::Ptr m_unitySocialPreview;
58− QList<QObject *> m_comments;
59−};
60−
61−Q_DECLARE_METATYPE(SocialPreview *)
62−
63−#endif
plugins/Unity/socialpreviewcomment.cppdeleted−63
@@ -1,63 +0,0 @@
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−// local
21−#include "socialpreviewcomment.h"
22−
23−SocialPreviewComment::SocialPreviewComment(QObject *parent) :
24− QObject(parent)
25−{
26−}
27−
28−void SocialPreviewComment::setUnityComment(unity::dash::SocialPreview::CommentPtr unityComment)
29−{
30− m_unityComment = unityComment;
31−}
32−
33−QString SocialPreviewComment::id() const
34−{
35− if (m_unityComment) {
36− return QString::fromStdString(m_unityComment->id);
37− }
38− return QString();
39−}
40−
41−QString SocialPreviewComment::displayName() const
42−{
43− if (m_unityComment) {
44− return QString::fromStdString(m_unityComment->display_name);
45− }
46− return QString();
47−}
48−
49−QString SocialPreviewComment::content() const
50−{
51− if (m_unityComment) {
52− return QString::fromStdString(m_unityComment->content);
53− }
54− return QString();
55−}
56−
57−QString SocialPreviewComment::time() const
58−{
59− if (m_unityComment) {
60− return QString::fromStdString(m_unityComment->time);
61− }
62− return QString();
63−}
plugins/Unity/socialpreviewcomment.hdeleted−57
@@ -1,57 +0,0 @@
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 SOCIALPREVIEWCOMMENT_H
21−#define SOCIALPREVIEWCOMMENT_H
22−
23−// Qt
24−#include <QObject>
25−#include <QMetaType>
26−
27−// libunity-core
28−#include <UnityCore/SocialPreview.h>
29−
30−class Q_DECL_EXPORT SocialPreviewComment : public QObject
31−{
32− Q_OBJECT
33−
34− Q_PROPERTY(QString id READ id NOTIFY socialPreviewCommentChanged)
35− Q_PROPERTY(QString displayName READ displayName NOTIFY socialPreviewCommentChanged)
36− Q_PROPERTY(QString content READ content NOTIFY socialPreviewCommentChanged)
37− Q_PROPERTY(QString time READ time NOTIFY socialPreviewCommentChanged)
38−
39−public:
40− explicit SocialPreviewComment(QObject *parent = 0);
41− void setUnityComment(unity::dash::SocialPreview::CommentPtr unityComment);
42−
43− QString id() const;
44− QString displayName() const;
45− QString content() const;
46− QString time() const;
47−
48−Q_SIGNALS:
49− void socialPreviewCommentChanged();
50−
51−private:
52− unity::dash::SocialPreview::CommentPtr m_unityComment;
53−};
54−
55−Q_DECLARE_METATYPE(SocialPreviewComment *)
56−
57−#endif
plugins/Unity/unityoptionsmodel.cppdeleted−68
@@ -1,68 +0,0 @@
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−// self
21−#include "unityoptionsmodel.h"
22−
23−// local
24−#include "filteroption.h"
25−
26−UnityOptionsModel::UnityOptionsModel(QObject *parent,
27− const std::vector<unity::dash::FilterOption::Ptr> options,
28− sigc::signal<void, unity::dash::FilterOption::Ptr> optionAdded,
29− sigc::signal<void, unity::dash::FilterOption::Ptr> optionRemoved,
30− bool showAllOption) :
31− GenericOptionsModel(showAllOption, parent)
32−{
33− setOptions(options, optionAdded, optionRemoved);
34−}
35−
36−void UnityOptionsModel::setOptions(const std::vector<unity::dash::FilterOption::Ptr> options,
37− sigc::signal<void, unity::dash::FilterOption::Ptr> optionAdded,
38− sigc::signal<void, unity::dash::FilterOption::Ptr> optionRemoved)
39−{
40− for (unsigned int i=0; i<options.size(); i++)
41− {
42− addOption(new FilterOption(options[i], this));
43− }
44− optionAdded.connect(sigc::mem_fun(this, &UnityOptionsModel::onOptionAdded));
45− optionRemoved.connect(sigc::mem_fun(this, &UnityOptionsModel::onOptionRemoved));
46−}
47−
48−void UnityOptionsModel::onOptionAdded(unity::dash::FilterOption::Ptr option)
49−{
50− int index = m_options.count();
51− if (index >= 0)
52− {
53− beginInsertRows(QModelIndex(), index, index);
54− addOption(new FilterOption(option, this));
55− endInsertRows();
56− }
57−}
58−
59−void UnityOptionsModel::onOptionRemoved(unity::dash::FilterOption::Ptr option)
60−{
61− auto index = indexOf(QString::fromStdString(option->id));
62− if (index >= 0)
63− {
64− beginRemoveRows(QModelIndex(), index, index);
65− removeOption(index);
66− endRemoveRows();
67− }
68−}
plugins/Unity/unityoptionsmodel.hdeleted−50
@@ -1,50 +0,0 @@
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 UNITYOPTIONSMODEL_H
21−#define UNITYOPTIONSMODEL_H
22−
23−#include "genericoptionsmodel.h"
24−
25−// libunity-core
26−#include <UnityCore/Filter.h>
27−
28−#include <sigc++/signal.h>
29−
30−class UnityOptionsModel : public GenericOptionsModel
31−{
32− Q_OBJECT
33−
34−public:
35− UnityOptionsModel(QObject *parent,
36− const std::vector<unity::dash::FilterOption::Ptr> options,
37− sigc::signal<void, unity::dash::FilterOption::Ptr> optionAdded,
38− sigc::signal<void, unity::dash::FilterOption::Ptr> optionRemoved,
39− bool showAllOption);
40−
41−private:
42− void setOptions(const std::vector<unity::dash::FilterOption::Ptr> options,
43− sigc::signal<void, unity::dash::FilterOption::Ptr> optionAdded,
44− sigc::signal<void, unity::dash::FilterOption::Ptr> optionRemoved);
45−
46− void onOptionAdded(unity::dash::FilterOption::Ptr option);
47− void onOptionRemoved(unity::dash::FilterOption::Ptr option);
48−};
49−
50−#endif // UNITYOPTIONSMODEL_H
plugins/Unity/variantutils.cppdeleted−51
@@ -1,51 +0,0 @@
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 <deelistmodel.h>
21−#include "variantutils.h"
22−
23−unity::glib::HintsMap convertToHintsMap(const QHash<QString, QVariant> &val)
24−{
25− unity::glib::HintsMap hintsMap;
26− QHash<QString, QVariant>::const_iterator it = val.constBegin();
27− while (it != val.constEnd()) {
28− hintsMap[it.key().toStdString()] = DeeListModel::DataFromVariant(it.value());
29− ++it;
30− }
31− return hintsMap;
32−}
33−
34−unity::glib::HintsMap convertToHintsMap(const QVariant &var)
35−{
36− if (var.type() == QVariant::Hash) {
37− unity::glib::HintsMap hintsMap;
38− const auto hash = var.toHash();
39− return convertToHintsMap(hash);
40− }
41− return unity::glib::HintsMap();
42−}
43−
44−QVariantHash convertToQVariantHash(const unity::glib::HintsMap& var)
45−{
46− QVariantHash hash;
47− for (auto hint: var) {
48− hash.insert(QString::fromStdString(hint.first), DeeListModel::VariantForData(hint.second));
49− }
50− return hash;
51−}
plugins/Unity/variantutils.hdeleted−33
@@ -1,33 +0,0 @@
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 VARIANTUTILS_H
21−#define VARIANTUTILS_H
22−
23−#include <glib.h>
24−#include <QVariant>
25−
26−// libunity-core
27−#include <UnityCore/Variant.h>
28−
29−unity::glib::HintsMap convertToHintsMap(const QHash<QString, QVariant> &val);
30−unity::glib::HintsMap convertToHintsMap(const QVariant &var);
31−QVariantHash convertToQVariantHash(const unity::glib::HintsMap& var);
32−
33−#endif
plugins/Utils/CMakeLists.txt+1−2
@@ -12,12 +12,11 @@ include_directories(
1212
1313set(QMLPLUGIN_SRC
1414 albumartprovider.cpp
15− applicationpaths.h
15+ bottombarvisibilitycommunicatorshell.cpp
1616 mediaartcache.cpp
1717 qlimitproxymodelqml.cpp
1818 qsortfilterproxymodelqml.cpp
1919 timeformatter.cpp
20− ubuntuwindow.cpp
2120 unitymenumodelpaths.cpp
2221 plugin.cpp
2322 )
plugins/Utils/albumartprovider.cpp+10−7
@@ -32,6 +32,7 @@
3232#include <QByteArray>
3333#include <QImage>
3434#include <QUrl>
35+#include <QUrlQuery>
3536
3637using namespace std;
3738
@@ -65,6 +66,9 @@ AlbumArtProvider::~AlbumArtProvider()
6566std::string AlbumArtProvider::get_lastfm_url(const albuminfo &ai) {
6667 QString artist = QString::fromStdString(ai.artist);
6768 QString album = QString::fromStdString(ai.album);
69+ // audioscrobbler wants it without any / (as it would break the URL)
70+ artist.remove('/');
71+ album.remove('/');
6872
6973 /// @todo: this is the old API which will probably get axed at some point in the future
7074 /// The new 2.0 API requires an API key, but supports JSON output, etc, so switching
@@ -200,21 +204,20 @@ std::string AlbumArtProvider::get_image(const std::string &artist, const std::st
200204QImage AlbumArtProvider::requestImage(const QString &id, QSize *realSize, const QSize &requestedSize) {
201205 Q_UNUSED(requestedSize)
202206
203− const QStringList parts = id.split("/");
204− if (parts.size() != 2) {
207+ QUrlQuery query(id);
208+ if (!query.hasQueryItem(QStringLiteral("artist")) || !query.hasQueryItem(QStringLiteral("album"))) {
205209 qWarning() << "Invalid albumart uri:" << id;
206210 return QImage(QString::fromStdString(DEFAULT_ALBUM_ART));
207211 }
208− const std::string artist = QUrl::fromPercentEncoding(parts[0].toUtf8()).toStdString();
209− const std::string album = QUrl::fromPercentEncoding(parts[1].toUtf8()).toStdString();
212+ const QString artist = query.queryItemValue(QStringLiteral("artist"), QUrl::FullyEncoded);
213+ const QString album = query.queryItemValue(QStringLiteral("album"), QUrl::FullyEncoded);
210214
211215 std::string tgt_path;
212216 try {
213− tgt_path = get_image(artist, album);
217+ tgt_path = get_image(artist.toStdString(), album.toStdString());
214218 if(!tgt_path.empty()) {
215− QString tgt(tgt_path.c_str());
216219 QImage image;
217− image.load(tgt);
220+ image.load(QString::fromStdString(tgt_path));
218221 // FIXME: Rescale to requested size preserving aspect.
219222 *realSize = image.size();
220223 return image;
plugins/Utils/applicationpaths.hdeleted−38
@@ -1,38 +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− * Authored by: Nick Dedekind <nick.dedekind@canonical.com>
17− */
18−
19−
20−#ifndef APPLICATION_PATHS_H
21−#define APPLICATION_PATHS_H
22−
23−#include <QObject>
24−#include "paths.h"
25−
26−class ApplicationPaths : public QObject
27−{
28− Q_OBJECT
29−public:
30− Q_INVOKABLE bool isRunningInstalled() const { return ::isRunningInstalled(); }
31− Q_INVOKABLE QString shellAppDirectory() const { return ::shellAppDirectory(); }
32− Q_INVOKABLE QStringList overrideImportPaths() const { return ::overrideImportPaths(); }
33− Q_INVOKABLE QStringList fallbackImportPaths() const { return ::fallbackImportPaths(); }
34− Q_INVOKABLE QStringList shellDataDirs() const { return ::shellDataDirs(); }
35− Q_INVOKABLE QString sourceDirectory() const { return ::sourceDirectory(); }
36−};
37−
38−#endif // APPLICATION_PATHS_H
plugins/Unity/bottombarvisibilitycommunicatorshell.cpp → plugins/Utils/bottombarvisibilitycommunicatorshell.cpprenamed

The content is the same.

plugins/Unity/bottombarvisibilitycommunicatorshell.h → plugins/Utils/bottombarvisibilitycommunicatorshell.hrenamed

The content is the same.

plugins/Utils/plugin.cpp+11−9
@@ -18,6 +18,8 @@
1818
1919// Qt
2020#include <QtQml/qqml.h>
21+#include <QDBusConnection>
22+#include <QQmlContext>
2123#include <QtQuick/QQuickWindow>
2224#include <QDebug>
2325// self
@@ -25,18 +27,14 @@
2527
2628// local
2729#include "albumartprovider.h"
28−#include "applicationpaths.h"
30+#include "bottombarvisibilitycommunicatorshell.h"
2931#include "qlimitproxymodelqml.h"
3032#include "qsortfilterproxymodelqml.h"
3133#include "timeformatter.h"
32−#include "ubuntuwindow.h"
3334#include "unitymenumodelpaths.h"
3435
35−static QObject* applicationsPathsSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) {
36− Q_UNUSED(engine);
37− Q_UNUSED(scriptEngine);
38− return new ApplicationPaths;
39−}
36+static const char* BOTTOM_BAR_VISIBILITY_COMMUNICATOR_DBUS_PATH = "/BottomBarVisibilityCommunicator";
37+static const char* DBUS_SERVICE = "com.canonical.Shell.BottomBarVisibilityCommunicator";
4038
4139void UtilsPlugin::registerTypes(const char *uri)
4240{
@@ -45,10 +43,9 @@ void UtilsPlugin::registerTypes(const char *uri)
4543 qmlRegisterType<QLimitProxyModelQML>(uri, 0, 1, "LimitProxyModel");
4644 qmlRegisterType<QSortFilterProxyModelQML>(uri, 0, 1, "SortFilterProxyModel");
4745 qmlRegisterType<UnityMenuModelPaths>(uri, 0, 1, "UnityMenuModelPaths");
48− qmlRegisterExtendedType<QQuickWindow, UbuntuWindow>(uri, 0, 1, "Window");
49− qmlRegisterSingletonType<ApplicationPaths>(uri, 0, 1, "ApplicationPaths", applicationsPathsSingleton);
5046 qmlRegisterType<TimeFormatter>(uri, 0, 1, "TimeFormatter");
5147 qmlRegisterType<GDateTimeFormatter>(uri, 0, 1, "GDateTimeFormatter");
48+ qmlRegisterUncreatableType<BottomBarVisibilityCommunicatorShell>(uri, 0, 1, "BottomBarVisibilityCommunicatorShell", "Can't create BottomBarVisibilityCommunicatorShell");
5249}
5350
5451void UtilsPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
@@ -67,4 +64,9 @@ void UtilsPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
6764 {
6865 qWarning() << "Failed to register image provider for albumart (unknown error)";
6966 }
67+
68+ QDBusConnection::sessionBus().registerService(DBUS_SERVICE);
69+ BottomBarVisibilityCommunicatorShell *bottomBarVisibilityCommunicator = &BottomBarVisibilityCommunicatorShell::instance();
70+ QDBusConnection::sessionBus().registerObject(BOTTOM_BAR_VISIBILITY_COMMUNICATOR_DBUS_PATH, bottomBarVisibilityCommunicator, QDBusConnection::ExportAllContents);
71+ engine->rootContext()->setContextProperty("bottomBarVisibilityCommunicatorShell", bottomBarVisibilityCommunicator);
7072}
plugins/Utils/ubuntuwindow.cppdeleted−36
@@ -1,36 +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−
17−#include "ubuntuwindow.h"
18−#include <QDebug>
19−
20−
21−UbuntuWindow::UbuntuWindow(QObject *parent)
22− : QObject(parent),
23− m_window(static_cast<QQuickWindow*>(parent))
24−{
25−}
26−
27−int UbuntuWindow::ubuntuSurfaceRole() const
28−{
29− return m_window->property("UbuntuSurfaceRole").toInt();
30−}
31−
32−void UbuntuWindow::setUbuntuSurfaceRole(int ubuntuSurfaceRole)
33−{
34− qDebug() << "setUbuntuSurfaceRole" << ubuntuSurfaceRole;
35− m_window->setProperty("UbuntuSurfaceRole", ubuntuSurfaceRole);
36−}
plugins/Utils/ubuntuwindow.hdeleted−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−
17−#ifndef UBUNTUWINDOW_H
18−#define UBUNTUWINDOW_H
19−
20−#include <QtCore/QObject>
21−#include <QtQuick/QQuickWindow>
22−
23−class UbuntuWindow : public QObject
24−{
25− Q_OBJECT
26−
27− Q_PROPERTY(int ubuntuSurfaceRole READ ubuntuSurfaceRole WRITE setUbuntuSurfaceRole NOTIFY ubuntuSurfaceRoleChanged)
28−
29−public:
30− explicit UbuntuWindow(QObject *parent = 0);
31−
32− int ubuntuSurfaceRole() const;
33− void setUbuntuSurfaceRole(int ubuntuSurfaceRole);
34−
35−Q_SIGNALS:
36− void ubuntuSurfaceRoleChanged(int);
37−
38−private:
39− QQuickWindow* m_window;
40−};
41−
42−#endif // UBUNTUWINDOW_H
po/ar.po+50−126
@@ -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-10-11 12:12+0200\n"
11−"PO-Revision-Date: 2013-06-26 23:26+0000\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2013-12-05 06:55+0000\n"
1212"Last-Translator: Ibrahim Saed <ibraheem5000@gmail.com>\n"
1313"Language-Team: Arabic <ar@li.org>\n"
1414"MIME-Version: 1.0\n"
@@ -16,166 +16,103 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= "
1818"3 && n % 100 <= 10 ? 3 : n % 100 >= 11 && n % 100 <= 99 ? 4 : 5;\n"
19−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
20−"X-Generator: Launchpad (build 16799)\n"
19+"X-Launchpad-Export-Date: 2013-12-06 06:30+0000\n"
20+"X-Generator: Launchpad (build 16863)\n"
2121
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr "الهاتف"
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr "الكاميرا"
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr "المعرض"
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr "فيسبوك"
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr "المتصفح"
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr "تويتر"
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr "جي ميل"
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr "الطقس"
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr "المذكرة"
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr "التقويم"
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr "مشغّل الوسائط"
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr ""
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr "الخريطة"
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr ""
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr ""
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr "ويكيبيديا"
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr "يوتيوب"
89−
90−#: Components/EdgeDemoOverlay.qml:149
22+#: Components/EdgeDemoOverlay.qml:151
9123msgid "Skip intro"
92−msgstr ""
24+msgstr "تخطي المقدمة"
9325
9426#: Components/EdgeDemo.qml:112
9527msgid "Right edge"
96−msgstr ""
28+msgstr "الحافة اليمنى"
9729
9830#: Components/EdgeDemo.qml:113
9931msgid "Try swiping from the right edge to unlock the phone"
100−msgstr ""
32+msgstr "اسحب اصبعك من الحافة اليمنى لفتح قفل الهاتف"
10133
10234#: Components/EdgeDemo.qml:144
10335msgid "Top edge"
104−msgstr ""
36+msgstr "الحافة العلوية"
10537
10638#: Components/EdgeDemo.qml:145
10739msgid "Try swiping from the top edge to access the indicators"
108−msgstr ""
40+msgstr "اسحب اصبعك من الحافة العلوية للوصول إلى المؤشرات"
10941
11042#: Components/EdgeDemo.qml:170
11143msgid "Close"
112−msgstr ""
44+msgstr "أغلق"
11345
11446#: Components/EdgeDemo.qml:171
11547msgid "Swipe up again to close the settings screen"
116−msgstr ""
48+msgstr "اسحب اصعبك لأعلى مرة أخرى لغلق شاشة الإعدادات"
11749
11850#: Components/EdgeDemo.qml:198
11951msgid "Left edge"
120−msgstr ""
52+msgstr "الحافة اليسرى"
12153
12254#: Components/EdgeDemo.qml:199
12355msgid "Swipe from the left to reveal the launcher for quick access to apps"
12456msgstr ""
57+"اسحب أصبعك من الحافة اليسرى لإظهار شريط يونتي للوصول السريع للتطبيقات"
12558
12659#: Components/EdgeDemo.qml:226
12760msgid "Well done"
128−msgstr ""
61+msgstr "أحسنت!"
12962
13063#: Components/EdgeDemo.qml:227
13164msgid ""
13265"You have now mastered the edge gestures and can start using the "
13366"phone<br><br>Tap anywhere to start"
13467msgstr ""
68+"لقد أتقنت الآن إيماءات الحواف ويمكنك البدء باستخدام الهاتف<br><br>انقر في أي "
69+"مكان للبدء"
13570
136−#: Components/PageHeader.qml:341
71+#: Components/PageHeader.qml:364
13772msgid "Recent searches"
13873msgstr "عمليات البحث الأخيرة"
13974
140−#. TRANSLATORS: Number of persons who rated this app
75+#: Dash/Apps/AppPreview.qml:135
76+msgid "Rate this"
77+msgstr "قيّم ذلك"
78+
14179#. TRANSLATORS: Number of persons who rated this app/video/whatever
142−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
80+#: Dash/Previews/Header.qml:93
14381#, qt-format
14482msgid "(%1)"
145−msgstr ""
83+msgstr "(%1)"
14684
147−#. TRANSLATORS: Number of persons who wrote reviews for this app
14885#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
149−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
86+#: Dash/Previews/Header.qml:105
15087#, qt-format
15188msgid "%1 review"
15289msgid_plural "%1 reviews"
153−msgstr[0] ""
154−msgstr[1] ""
155−
156−#: Dash/Apps/AppPreview.qml:126
157−msgid "Rate this"
158−msgstr ""
90+msgstr[0] "لا تعليقات (%1)"
91+msgstr[1] "تعليق واحد (%1)"
92+msgstr[2] "تعليقان (%1)"
93+msgstr[3] "%1 تعليقات"
94+msgstr[4] "%1 تعليقا"
95+msgstr[5] "%1 تعليق"
15996
16097#: Dash/Previews/Reviews.qml:74
16198msgid "Add a review"
162−msgstr ""
99+msgstr "أضف تعليق"
163100
164101#: Dash/Previews/Reviews.qml:86
165102msgid "Review"
166−msgstr ""
103+msgstr "التعليق"
167104
168105#: Dash/Previews/Reviews.qml:121
169106msgid "Send"
170−msgstr ""
107+msgstr "أرسل"
171108
172109#: Dash/Previews/Reviews.qml:139
173110msgid "Comments:"
174−msgstr ""
111+msgstr "التعليقات:"
175112
176−#: Greeter/Lockscreen.qml:142
113+#: Greeter/Lockscreen.qml:149
177114msgid "Emergency Call"
178−msgstr ""
115+msgstr "مكالمة طوارئ"
179116
180117#: Greeter/PassphraseLockscreen.qml:59
181118#, qt-format
@@ -206,37 +143,24 @@ msgstr "تكلم الآن..."
206143msgid "Speaking..."
207144msgstr "تتكلم الآن..."
208145
146+#: Notifications/NotificationMenuItemFactory.qml:89
147+msgid "Show password"
148+msgstr "عرض كلمة السر"
149+
209150#: Panel/SearchIndicator.qml:27
210151msgid "Search"
211152msgstr "ابحث"
212153
213−#: plugins/Unity/scope.cpp:398
214−msgid "Sorry, there is nothing that matches your search."
215−msgstr "عذراً، لا يوجد ما يطابق بحثك."
154+#: plugins/Unity/Launcher/launcheritem.cpp:43
155+#: plugins/Unity/Launcher/launcheritem.cpp:73
156+msgid "Lock to Launcher"
157+msgstr "ثبّت في الشريط"
216158
217−#: plugins/Unity/showallfilteroption.cpp:41
218−msgid "All"
219−msgstr ""
159+#: plugins/Unity/Launcher/launcheritem.cpp:73
160+msgid "Unlock from Launcher"
161+msgstr "فُك التثبيت من الشريط"
220162
221−#: Shell.qml:438
163+#: Shell.qml:439
222164#, qt-format
223165msgid "Please enter %1"
224−msgstr ""
225−
226−#~ msgid "Featured"
227−#~ msgstr "المميز"
228−
229−#~ msgid "Recent"
230−#~ msgstr "الحديث"
231−
232−#~ msgid "New Releases"
233−#~ msgstr "الإصدارات الجديدة"
234−
235−#~ msgid "Music"
236−#~ msgstr "موسيقى"
237−
238−#~ msgid "Popular Online"
239−#~ msgstr "الشائع على الإنترنت"
240−
241−#~ msgid "Videos"
242−#~ msgstr "فيديوهات"
166+msgstr "من فضلك أدخِل %1"
po/ast.po+24−110
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-03 14:02+0000\n"
1212"Last-Translator: ivarela <ivarela@ubuntu.com>\n"
1313"Language-Team: Asturian <ast@li.org>\n"
@@ -15,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
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:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr "Omitir la intro"
9224
@@ -136,30 +68,28 @@ msgstr ""
13668"Agora domines los xestos de berbesos y pues usar el teléfonu<br><br>Toca la "
13769"pantalla pa entamar"
13870
139−#: Components/PageHeader.qml:341
71+#: Components/PageHeader.qml:364
14072msgid "Recent searches"
14173msgstr "Busques recientes"
14274
143−#. TRANSLATORS: Number of persons who rated this app
75+#: Dash/Apps/AppPreview.qml:135
76+msgid "Rate this"
77+msgstr "Valorar esto"
78+
14479#. TRANSLATORS: Number of persons who rated this app/video/whatever
145−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
80+#: Dash/Previews/Header.qml:93
14681#, qt-format
14782msgid "(%1)"
14883msgstr "(%1)"
14984
150−#. TRANSLATORS: Number of persons who wrote reviews for this app
15185#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
152−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
86+#: Dash/Previews/Header.qml:105
15387#, qt-format
15488msgid "%1 review"
15589msgid_plural "%1 reviews"
15690msgstr[0] "%1 reseña"
15791msgstr[1] "%1 reseñes"
15892
159−#: Dash/Apps/AppPreview.qml:126
160−msgid "Rate this"
161−msgstr "Valorar esto"
162−
16393#: Dash/Previews/Reviews.qml:74
16494msgid "Add a review"
16595msgstr "Amestar una reseña"
@@ -176,7 +106,7 @@ msgstr "Unviar"
176106msgid "Comments:"
177107msgstr "Comentarios:"
178108
179−#: Greeter/Lockscreen.qml:142
109+#: Greeter/Lockscreen.qml:149
180110msgid "Emergency Call"
181111msgstr "Llamada d'emerxencia"
182112
@@ -209,40 +139,24 @@ msgstr "Fala agora…"
209139msgid "Speaking..."
210140msgstr "Falando…"
211141
142+#: Notifications/NotificationMenuItemFactory.qml:89
143+msgid "Show password"
144+msgstr ""
145+
212146#: Panel/SearchIndicator.qml:27
213147msgid "Search"
214148msgstr "Guetar"
215149
216−#: plugins/Unity/scope.cpp:398
217−msgid "Sorry, there is nothing that matches your search."
218−msgstr "Sentímoslo, nun hai res que concase cola gueta"
150+#: plugins/Unity/Launcher/launcheritem.cpp:43
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Lock to Launcher"
153+msgstr ""
219154
220−#: plugins/Unity/showallfilteroption.cpp:41
221−msgid "All"
222−msgstr "Too"
155+#: plugins/Unity/Launcher/launcheritem.cpp:73
156+msgid "Unlock from Launcher"
157+msgstr ""
223158
224−#: Shell.qml:438
159+#: Shell.qml:439
225160#, qt-format
226161msgid "Please enter %1"
227162msgstr "Introduz %1"
228−
229−#~ msgid "New Releases"
230−#~ msgstr "Llanzamientos nuevos"
231−
232−#~ msgid "Featured"
233−#~ msgstr "Destacaos"
234−
235−#~ msgid "Top Charting"
236−#~ msgstr "Meyor posicionaes"
237−
238−#~ msgid "Recent"
239−#~ msgstr "Recientes"
240−
241−#~ msgid "Videos"
242−#~ msgstr "Vídeos"
243−
244−#~ msgid "Music"
245−#~ msgstr "Música"
246−
247−#~ msgid "Popular Online"
248−#~ msgstr "Populares en llinia"
po/az.po+23−94
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr ""
9224
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:341
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "Son axtarışlar"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:142
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -205,25 +135,24 @@ msgstr "Söyləyin..."
205135msgid "Speaking..."
206136msgstr "Söylənilir..."
207137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208142#: Panel/SearchIndicator.qml:27
209143msgid "Search"
210144msgstr "Axtar"
211145
212−#: plugins/Unity/scope.cpp:398
213−msgid "Sorry, there is nothing that matches your search."
214−msgstr "Bağışlayın, amma axtarışınıza heç bir nəticə uyğun gəlmir."
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
149+msgstr ""
215150
216−#: plugins/Unity/showallfilteroption.cpp:41
217−msgid "All"
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
218153msgstr ""
219154
220−#: Shell.qml:438
155+#: Shell.qml:439
221156#, qt-format
222157msgid "Please enter %1"
223158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "Musiqi"
227−
228−#~ msgid "Videos"
229−#~ msgstr "Videolar"
po/bg.po+23−100
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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,78 +16,10 @@ msgstr ""
1616"Content-Type: text/plain; charset=UTF-8\n"
1717"Content-Transfer-Encoding: 8bit\n"
1818"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
20−"X-Generator: Launchpad (build 16799)\n"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20+"X-Generator: Launchpad (build 16856)\n"
2121
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr "Телефон"
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr "Камера"
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr "Колекция"
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr "Фейсбук"
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr "Браузър"
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr "Туитър"
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr "Е-поща от Гугъл"
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr "Метеоусловия"
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr "Бележник"
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr "Календар"
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr "Мултимедиен плеър"
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr ""
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr "Карта"
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr ""
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr ""
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr "Уикипедия"
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr "YouTube"
89−
90−#: Components/EdgeDemoOverlay.qml:149
22+#: Components/EdgeDemoOverlay.qml:151
9123msgid "Skip intro"
9224msgstr ""
9325
@@ -133,30 +65,28 @@ msgid ""
13365"phone<br><br>Tap anywhere to start"
13466msgstr ""
13567
136−#: Components/PageHeader.qml:341
68+#: Components/PageHeader.qml:364
13769msgid "Recent searches"
13870msgstr "Скорошни търсения"
13971
140−#. TRANSLATORS: Number of persons who rated this app
72+#: Dash/Apps/AppPreview.qml:135
73+msgid "Rate this"
74+msgstr ""
75+
14176#. TRANSLATORS: Number of persons who rated this app/video/whatever
142−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
77+#: Dash/Previews/Header.qml:93
14378#, qt-format
14479msgid "(%1)"
14580msgstr ""
14681
147−#. TRANSLATORS: Number of persons who wrote reviews for this app
14882#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
149−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
83+#: Dash/Previews/Header.qml:105
15084#, qt-format
15185msgid "%1 review"
15286msgid_plural "%1 reviews"
15387msgstr[0] ""
15488msgstr[1] ""
15589
156−#: Dash/Apps/AppPreview.qml:126
157−msgid "Rate this"
158−msgstr ""
159−
16090#: Dash/Previews/Reviews.qml:74
16191msgid "Add a review"
16292msgstr ""
@@ -173,7 +103,7 @@ msgstr ""
173103msgid "Comments:"
174104msgstr ""
175105
176−#: Greeter/Lockscreen.qml:142
106+#: Greeter/Lockscreen.qml:149
177107msgid "Emergency Call"
178108msgstr ""
179109
@@ -206,31 +136,24 @@ msgstr ""
206136msgid "Speaking..."
207137msgstr ""
208138
139+#: Notifications/NotificationMenuItemFactory.qml:89
140+msgid "Show password"
141+msgstr ""
142+
209143#: Panel/SearchIndicator.qml:27
210144msgid "Search"
211145msgstr "Търсене"
212146
213−#: plugins/Unity/scope.cpp:398
214−msgid "Sorry, there is nothing that matches your search."
215−msgstr "Съжаляваме, няма нищо, което да отговаря на вашето търсене."
147+#: plugins/Unity/Launcher/launcheritem.cpp:43
148+#: plugins/Unity/Launcher/launcheritem.cpp:73
149+msgid "Lock to Launcher"
150+msgstr ""
216151
217−#: plugins/Unity/showallfilteroption.cpp:41
218−msgid "All"
152+#: plugins/Unity/Launcher/launcheritem.cpp:73
153+msgid "Unlock from Launcher"
219154msgstr ""
220155
221−#: Shell.qml:438
156+#: Shell.qml:439
222157#, qt-format
223158msgid "Please enter %1"
224159msgstr ""
225−
226−#~ msgid "Featured"
227−#~ msgstr "Най-отличени"
228−
229−#~ msgid "Recent"
230−#~ msgstr "Най-нови"
231−
232−#~ msgid "Music"
233−#~ msgstr "Музика"
234−
235−#~ msgid "Videos"
236−#~ msgstr "Видеоклипове"
po/ca.po+23−109
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-09-28 07:38+0000\n"
1212"Last-Translator: David Planella <david.planella@ubuntu.com>\n"
1313"Language-Team: Catalan <ca@li.org>\n"
@@ -15,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Telèfon"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Càmera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galeria"
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 "El temps"
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 "Calendari"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Reproductor multimèdia"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Mapa"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Viquipèdia"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr "Omet la introducció"
9224
@@ -138,30 +70,28 @@ msgid ""
13870"phone<br><br>Tap anywhere to start"
13971msgstr ""
14072
141−#: Components/PageHeader.qml:341
73+#: Components/PageHeader.qml:364
14274msgid "Recent searches"
14375msgstr "Cerques recents"
14476
145−#. TRANSLATORS: Number of persons who rated this app
77+#: Dash/Apps/AppPreview.qml:135
78+msgid "Rate this"
79+msgstr ""
80+
14681#. TRANSLATORS: Number of persons who rated this app/video/whatever
147−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
82+#: Dash/Previews/Header.qml:93
14883#, qt-format
14984msgid "(%1)"
15085msgstr "(%1)"
15186
152−#. TRANSLATORS: Number of persons who wrote reviews for this app
15387#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
154−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
88+#: Dash/Previews/Header.qml:105
15589#, qt-format
15690msgid "%1 review"
15791msgid_plural "%1 reviews"
15892msgstr[0] "%1 ressenya"
15993msgstr[1] "%1 ressenyes"
16094
161−#: Dash/Apps/AppPreview.qml:126
162−msgid "Rate this"
163−msgstr ""
164−
16595#: Dash/Previews/Reviews.qml:74
16696msgid "Add a review"
16797msgstr "Afegiu una ressenya"
@@ -178,7 +108,7 @@ msgstr "Envia"
178108msgid "Comments:"
179109msgstr "Comentaris:"
180110
181−#: Greeter/Lockscreen.qml:142
111+#: Greeter/Lockscreen.qml:149
182112msgid "Emergency Call"
183113msgstr "Trucada d'emergència"
184114
@@ -211,40 +141,24 @@ msgstr "Parleu..."
211141msgid "Speaking..."
212142msgstr "S'està parlant..."
213143
144+#: Notifications/NotificationMenuItemFactory.qml:89
145+msgid "Show password"
146+msgstr ""
147+
214148#: Panel/SearchIndicator.qml:27
215149msgid "Search"
216150msgstr "Cerca"
217151
218−#: plugins/Unity/scope.cpp:398
219−msgid "Sorry, there is nothing that matches your search."
220−msgstr "No hi ha res que coincideixi amb la cerca"
152+#: plugins/Unity/Launcher/launcheritem.cpp:43
153+#: plugins/Unity/Launcher/launcheritem.cpp:73
154+msgid "Lock to Launcher"
155+msgstr ""
221156
222−#: plugins/Unity/showallfilteroption.cpp:41
223−msgid "All"
157+#: plugins/Unity/Launcher/launcheritem.cpp:73
158+msgid "Unlock from Launcher"
224159msgstr ""
225160
226−#: Shell.qml:438
161+#: Shell.qml:439
227162#, qt-format
228163msgid "Please enter %1"
229164msgstr "Introduïu %1"
230−
231−#~ msgid "Music"
232−#~ msgstr "Música"
233−
234−#~ msgid "Videos"
235−#~ msgstr "Vídeos"
236−
237−#~ msgid "Recent"
238−#~ msgstr "Recents"
239−
240−#~ msgid "Featured"
241−#~ msgstr "Destacats"
242−
243−#~ msgid "New Releases"
244−#~ msgstr "Novetats"
245−
246−#~ msgid "Top Charting"
247−#~ msgstr "El millor de les llistes"
248−
249−#~ msgid "Popular Online"
250−#~ msgstr "Popular a la xarxa"
po/cs.po+24−104
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-08 08:09+0000\n"
1212"Last-Translator: Tadeáš Pařík <tadeas.parik@gmail.com>\n"
1313"Language-Team: Czech <cs@li.org>\n"
@@ -15,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Telefon"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Fotoaparát"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galerie"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Prohlížeč"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "Počasí"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Poznámkový blok"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Kalendář"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Přehrávač multimédií"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Mapa"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "Hudební Cloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Wikipedie"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr "Přeskočit intro"
9224
@@ -132,20 +64,22 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:341
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "Poslední vyhledávání"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr "Ohodnoťte to"
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr "(%1)"
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
@@ -153,10 +87,6 @@ msgstr[0] "%1 recenze"
15387msgstr[1] "%1 recenze"
15488msgstr[2] "%1 recenzí"
15589
156−#: Dash/Apps/AppPreview.qml:126
157−msgid "Rate this"
158−msgstr "Ohodnoťte to"
159−
16090#: Dash/Previews/Reviews.qml:74
16191msgid "Add a review"
16292msgstr "Přidat recenzi"
@@ -173,7 +103,7 @@ msgstr "Odeslat"
173103msgid "Comments:"
174104msgstr "Komentáře:"
175105
176−#: Greeter/Lockscreen.qml:142
106+#: Greeter/Lockscreen.qml:149
177107msgid "Emergency Call"
178108msgstr "Tísňové volání"
179109
@@ -206,34 +136,24 @@ msgstr "Mluvte..."
206136msgid "Speaking..."
207137msgstr "Mluvte..."
208138
139+#: Notifications/NotificationMenuItemFactory.qml:89
140+msgid "Show password"
141+msgstr ""
142+
209143#: Panel/SearchIndicator.qml:27
210144msgid "Search"
211145msgstr "Hledat"
212146
213−#: plugins/Unity/scope.cpp:398
214−msgid "Sorry, there is nothing that matches your search."
215−msgstr "Je nám líto, ale nic neodpovídá zadání"
147+#: plugins/Unity/Launcher/launcheritem.cpp:43
148+#: plugins/Unity/Launcher/launcheritem.cpp:73
149+msgid "Lock to Launcher"
150+msgstr ""
216151
217−#: plugins/Unity/showallfilteroption.cpp:41
218−msgid "All"
219−msgstr "Vše"
152+#: plugins/Unity/Launcher/launcheritem.cpp:73
153+msgid "Unlock from Launcher"
154+msgstr ""
220155
221−#: Shell.qml:438
156+#: Shell.qml:439
222157#, qt-format
223158msgid "Please enter %1"
224159msgstr "Zadejte prosím %1"
225−
226−#~ msgid "Featured"
227−#~ msgstr "Oblíbené"
228−
229−#~ msgid "Recent"
230−#~ msgstr "Nedávné"
231−
232−#~ msgid "Videos"
233−#~ msgstr "Videa"
234−
235−#~ msgid "Music"
236−#~ msgstr "Hudba"
237−
238−#~ msgid "Popular Online"
239−#~ msgstr "Oblíbené on-line"
po/de.po+33−115
@@ -7,86 +7,18 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11−"PO-Revision-Date: 2013-10-06 10:57+0000\n"
12−"Last-Translator: SaGrLand <sg@samuel-greef.de>\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2013-10-18 12:26+0000\n"
12+"Last-Translator: Phillip Sz <Unknown>\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-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Telefon"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Kamera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galerie"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Browser"
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 "Wetter"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Notizen"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Kalender"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Medienwiedergabe"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Karte"
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:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr "Überspringe Einführung"
9224
@@ -96,7 +28,7 @@ msgstr "Rechter Rand"
9628
9729#: Components/EdgeDemo.qml:113
9830msgid "Try swiping from the right edge to unlock the phone"
99−msgstr ""
31+msgstr "Vom rechten Rand her wischen, um das Gerät zu entsperren"
10032
10133#: Components/EdgeDemo.qml:144
10234msgid "Top edge"
@@ -104,7 +36,7 @@ msgstr "Oberer Rand"
10436
10537#: Components/EdgeDemo.qml:145
10638msgid "Try swiping from the top edge to access the indicators"
107−msgstr ""
39+msgstr "Vom oberen Rand her wischen, um die Statusmeldungen anzuzeigen"
10840
10941#: Components/EdgeDemo.qml:170
11042msgid "Close"
@@ -112,7 +44,7 @@ msgstr "Schließen"
11244
11345#: Components/EdgeDemo.qml:171
11446msgid "Swipe up again to close the settings screen"
115−msgstr ""
47+msgstr "Nochmals nach oben wischen, um das Einstellungsmenü zu schließen"
11648
11749#: Components/EdgeDemo.qml:198
11850msgid "Left edge"
@@ -121,6 +53,8 @@ msgstr "Linker Rand"
12153#: Components/EdgeDemo.qml:199
12254msgid "Swipe from the left to reveal the launcher for quick access to apps"
12355msgstr ""
56+"Von links wischen, um die Seitenleiste für den Anwendungs-Schnellzugriff "
57+"aufzurufen"
12458
12559#: Components/EdgeDemo.qml:226
12660msgid "Well done"
@@ -131,31 +65,31 @@ msgid ""
13165"You have now mastered the edge gestures and can start using the "
13266"phone<br><br>Tap anywhere to start"
13367msgstr ""
68+"Sie haben nun die Einführung abgeschlossen und können Ihr Gerät nun "
69+"verwenden<br><br>Antippen um zu starten"
13470
135−#: Components/PageHeader.qml:341
71+#: Components/PageHeader.qml:364
13672msgid "Recent searches"
13773msgstr "Letzte Suchbegriffe"
13874
139−#. TRANSLATORS: Number of persons who rated this app
75+#: Dash/Apps/AppPreview.qml:135
76+msgid "Rate this"
77+msgstr "Bewerten"
78+
14079#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
80+#: Dash/Previews/Header.qml:93
14281#, qt-format
14382msgid "(%1)"
14483msgstr "(%1)"
14584
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14785#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
86+#: Dash/Previews/Header.qml:105
14987#, qt-format
15088msgid "%1 review"
15189msgid_plural "%1 reviews"
15290msgstr[0] "%1 Bewertung"
15391msgstr[1] "%1 Bewertungen"
15492
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr "Bewerten"
158−
15993#: Dash/Previews/Reviews.qml:74
16094msgid "Add a review"
16195msgstr "Bewertung hinzufügen"
@@ -172,7 +106,7 @@ msgstr "Senden"
172106msgid "Comments:"
173107msgstr "Kommentare:"
174108
175−#: Greeter/Lockscreen.qml:142
109+#: Greeter/Lockscreen.qml:149
176110msgid "Emergency Call"
177111msgstr "Notruf"
178112
@@ -205,40 +139,24 @@ msgstr "Sprechen Sie jetzt …"
205139msgid "Speaking..."
206140msgstr "Sie sprechen …"
207141
142+#: Notifications/NotificationMenuItemFactory.qml:89
143+msgid "Show password"
144+msgstr ""
145+
208146#: Panel/SearchIndicator.qml:27
209147msgid "Search"
210148msgstr "Suchen"
211149
212−#: plugins/Unity/scope.cpp:398
213−msgid "Sorry, there is nothing that matches your search."
214−msgstr "Entschuldigung, es wurden keine Treffer erzielt."
150+#: plugins/Unity/Launcher/launcheritem.cpp:43
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Lock to Launcher"
153+msgstr ""
215154
216−#: plugins/Unity/showallfilteroption.cpp:41
217−msgid "All"
218−msgstr "Alle"
155+#: plugins/Unity/Launcher/launcheritem.cpp:73
156+msgid "Unlock from Launcher"
157+msgstr ""
219158
220−#: Shell.qml:438
159+#: Shell.qml:439
221160#, qt-format
222161msgid "Please enter %1"
223162msgstr "Bitte geben Sie %1 ein"
224−
225−#~ msgid "Featured"
226−#~ msgstr "Empfehlungen"
227−
228−#~ msgid "Recent"
229−#~ msgstr "Zuletzt verwendet"
230−
231−#~ msgid "New Releases"
232−#~ msgstr "Neue Veröffentlichungen"
233−
234−#~ msgid "Top Charting"
235−#~ msgstr "Top Tabellenplatz"
236−
237−#~ msgid "Music"
238−#~ msgstr "Musik"
239−
240−#~ msgid "Popular Online"
241−#~ msgstr "Online Beliebt"
242−
243−#~ msgid "Videos"
244−#~ msgstr "Videos"
po/el.po+23−94
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr ""
9224
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:341
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "Πρόσφατες αναζητήσεις"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:142
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -205,25 +135,24 @@ msgstr "Μιλήστε τώρα..."
205135msgid "Speaking..."
206136msgstr "Ομιλία..."
207137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208142#: Panel/SearchIndicator.qml:27
209143msgid "Search"
210144msgstr "Αναζήτηση"
211145
212−#: plugins/Unity/scope.cpp:398
213−msgid "Sorry, there is nothing that matches your search."
214−msgstr "Λυπούμαστε, δεν υπάρχει τίποτα που να ταιριάζει στην αναζήτησή σας."
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
149+msgstr ""
215150
216−#: plugins/Unity/showallfilteroption.cpp:41
217−msgid "All"
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
218153msgstr ""
219154
220−#: Shell.qml:438
155+#: Shell.qml:439
221156#, qt-format
222157msgid "Please enter %1"
223158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "Μουσική"
227−
228−#~ msgid "Videos"
229−#~ msgstr "Βίντεο"
po/en_AU.po+23−109
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-09-28 07:46+0000\n"
1212"Last-Translator: Jared Norris <jarednorris@ubuntu.com>\n"
1313"Language-Team: English (Australia) <en_AU@li.org>\n"
@@ -15,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Phone"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Camera"
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 "Browser"
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 "Weather"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Notepad"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Calendar"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Media Player"
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:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr "Skip intro"
9224
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:341
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "Recent searches"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr "Rate this"
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr "(%1)"
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] "%1 review"
15387msgstr[1] "%1 reviews"
15488
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr "Rate this"
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr "Add a review"
@@ -172,7 +102,7 @@ msgstr "Send"
172102msgid "Comments:"
173103msgstr "Comments:"
174104
175−#: Greeter/Lockscreen.qml:142
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr "Emergency Call"
178108
@@ -205,40 +135,24 @@ msgstr "Speak Now..."
205135msgid "Speaking..."
206136msgstr "Speaking..."
207137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208142#: Panel/SearchIndicator.qml:27
209143msgid "Search"
210144msgstr "Search"
211145
212−#: plugins/Unity/scope.cpp:398
213−msgid "Sorry, there is nothing that matches your search."
214−msgstr "Sorry, there is nothing that matches your search."
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
149+msgstr ""
215150
216−#: plugins/Unity/showallfilteroption.cpp:41
217−msgid "All"
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
218153msgstr ""
219154
220−#: Shell.qml:438
155+#: Shell.qml:439
221156#, qt-format
222157msgid "Please enter %1"
223158msgstr "Please enter %1"
224−
225−#~ msgid "Featured"
226−#~ msgstr "Featured"
227−
228−#~ msgid "Recent"
229−#~ msgstr "Recent"
230−
231−#~ msgid "New Releases"
232−#~ msgstr "New Releases"
233−
234−#~ msgid "Top Charting"
235−#~ msgstr "Top Charting"
236−
237−#~ msgid "Music"
238−#~ msgstr "Music"
239−
240−#~ msgid "Popular Online"
241−#~ msgstr "Popular Online"
242−
243−#~ msgid "Videos"
244−#~ msgstr "Videos"
po/en_GB.po+23−109
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Phone"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Camera"
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 "Browser"
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 "Weather"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Notepad"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Calendar"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Media Player"
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:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr ""
9224
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:341
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "Recent searches"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:142
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -205,40 +135,24 @@ msgstr "Speak Now..."
205135msgid "Speaking..."
206136msgstr "Speaking..."
207137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208142#: Panel/SearchIndicator.qml:27
209143msgid "Search"
210144msgstr "Search"
211145
212−#: plugins/Unity/scope.cpp:398
213−msgid "Sorry, there is nothing that matches your search."
214−msgstr "Sorry, there is nothing that matches your search."
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
149+msgstr ""
215150
216−#: plugins/Unity/showallfilteroption.cpp:41
217−msgid "All"
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
218153msgstr ""
219154
220−#: Shell.qml:438
155+#: Shell.qml:439
221156#, qt-format
222157msgid "Please enter %1"
223158msgstr "Please enter %1"
224−
225−#~ msgid "Featured"
226−#~ msgstr "Featured"
227−
228−#~ msgid "Recent"
229−#~ msgstr "Recent"
230−
231−#~ msgid "New Releases"
232−#~ msgstr "New Releases"
233−
234−#~ msgid "Top Charting"
235−#~ msgstr "Top Charting"
236−
237−#~ msgid "Music"
238−#~ msgstr "Music"
239−
240−#~ msgid "Popular Online"
241−#~ msgstr "Popular Online"
242−
243−#~ msgid "Videos"
244−#~ msgstr "Videos"
po/eo.po+22−87
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr ""
9224
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:341
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr ""
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:142
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -205,19 +135,24 @@ msgstr ""
205135msgid "Speaking..."
206136msgstr ""
207137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208142#: Panel/SearchIndicator.qml:27
209143msgid "Search"
210144msgstr ""
211145
212−#: plugins/Unity/scope.cpp:398
213−msgid "Sorry, there is nothing that matches your search."
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
214149msgstr ""
215150
216−#: plugins/Unity/showallfilteroption.cpp:41
217−msgid "All"
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
218153msgstr ""
219154
220−#: Shell.qml:438
155+#: Shell.qml:439
221156#, qt-format
222157msgid "Please enter %1"
223158msgstr ""
po/es.po+25−111
@@ -7,86 +7,18 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11−"PO-Revision-Date: 2013-10-02 04:59+0000\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2013-11-20 08:46+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-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Teléfono"
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 "Meteorología"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Bloc de notas"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Calendario"
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 "Mapa"
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:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr "Omitir la introducción"
9224
@@ -136,30 +68,28 @@ msgstr ""
13668"Ahora domina los gestos de bordes y puede usar el teléfono<br><br>Toque la "
13769"pantalla para comenzar"
13870
139−#: Components/PageHeader.qml:341
71+#: Components/PageHeader.qml:364
14072msgid "Recent searches"
14173msgstr "Búsquedas recientes"
14274
143−#. TRANSLATORS: Number of persons who rated this app
75+#: Dash/Apps/AppPreview.qml:135
76+msgid "Rate this"
77+msgstr "Valorar esto"
78+
14479#. TRANSLATORS: Number of persons who rated this app/video/whatever
145−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
80+#: Dash/Previews/Header.qml:93
14681#, qt-format
14782msgid "(%1)"
14883msgstr "(%1)"
14984
150−#. TRANSLATORS: Number of persons who wrote reviews for this app
15185#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
152−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
86+#: Dash/Previews/Header.qml:105
15387#, qt-format
15488msgid "%1 review"
15589msgid_plural "%1 reviews"
15690msgstr[0] "%1 reseña"
15791msgstr[1] "%1 reseñas"
15892
159−#: Dash/Apps/AppPreview.qml:126
160−msgid "Rate this"
161−msgstr "Valorar esto"
162−
16393#: Dash/Previews/Reviews.qml:74
16494msgid "Add a review"
16595msgstr "Añadir una reseña"
@@ -176,7 +106,7 @@ msgstr "Enviar"
176106msgid "Comments:"
177107msgstr "Comentarios:"
178108
179−#: Greeter/Lockscreen.qml:142
109+#: Greeter/Lockscreen.qml:149
180110msgid "Emergency Call"
181111msgstr "Llamada de emergencia"
182112
@@ -209,40 +139,24 @@ msgstr "Hable ahora…"
209139msgid "Speaking..."
210140msgstr "Hablando…"
211141
142+#: Notifications/NotificationMenuItemFactory.qml:89
143+msgid "Show password"
144+msgstr "Mostrar contraseña"
145+
212146#: Panel/SearchIndicator.qml:27
213147msgid "Search"
214148msgstr "Buscar"
215149
216−#: plugins/Unity/scope.cpp:398
217−msgid "Sorry, there is nothing that matches your search."
218−msgstr "No hay nada que coincida con su búsqueda."
150+#: plugins/Unity/Launcher/launcheritem.cpp:43
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Lock to Launcher"
153+msgstr "Mantener en el lanzador"
219154
220−#: plugins/Unity/showallfilteroption.cpp:41
221−msgid "All"
222−msgstr "Todo"
155+#: plugins/Unity/Launcher/launcheritem.cpp:73
156+msgid "Unlock from Launcher"
157+msgstr "No mantener en el lanzador"
223158
224−#: Shell.qml:438
159+#: Shell.qml:439
225160#, qt-format
226161msgid "Please enter %1"
227162msgstr "Introduzca %1"
228−
229−#~ msgid "Featured"
230−#~ msgstr "Destacados"
231−
232−#~ msgid "Recent"
233−#~ msgstr "Recientes"
234−
235−#~ msgid "New Releases"
236−#~ msgstr "Lanzamientos nuevos"
237−
238−#~ msgid "Top Charting"
239−#~ msgstr "Mejor posicionadas"
240−
241−#~ msgid "Music"
242−#~ msgstr "Música"
243−
244−#~ msgid "Popular Online"
245−#~ msgstr "Populares en línea"
246−
247−#~ msgid "Videos"
248−#~ msgstr "Vídeos"
po/fa.ponew file+158
@@ -0,0 +1,158 @@
1+# Persian 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-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2013-10-31 19:02+0000\n"
12+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13+"Language-Team: Persian <fa@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-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
20+
21+#: Components/EdgeDemoOverlay.qml:151
22+msgid "Skip intro"
23+msgstr ""
24+
25+#: Components/EdgeDemo.qml:112
26+msgid "Right edge"
27+msgstr ""
28+
29+#: Components/EdgeDemo.qml:113
30+msgid "Try swiping from the right edge to unlock the phone"
31+msgstr ""
32+
33+#: Components/EdgeDemo.qml:144
34+msgid "Top edge"
35+msgstr ""
36+
37+#: Components/EdgeDemo.qml:145
38+msgid "Try swiping from the top edge to access the indicators"
39+msgstr ""
40+
41+#: Components/EdgeDemo.qml:170
42+msgid "Close"
43+msgstr ""
44+
45+#: Components/EdgeDemo.qml:171
46+msgid "Swipe up again to close the settings screen"
47+msgstr ""
48+
49+#: Components/EdgeDemo.qml:198
50+msgid "Left edge"
51+msgstr ""
52+
53+#: Components/EdgeDemo.qml:199
54+msgid "Swipe from the left to reveal the launcher for quick access to apps"
55+msgstr ""
56+
57+#: Components/EdgeDemo.qml:226
58+msgid "Well done"
59+msgstr ""
60+
61+#: Components/EdgeDemo.qml:227
62+msgid ""
63+"You have now mastered the edge gestures and can start using the "
64+"phone<br><br>Tap anywhere to start"
65+msgstr ""
66+
67+#: Components/PageHeader.qml:364
68+msgid "Recent searches"
69+msgstr ""
70+
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
75+#. TRANSLATORS: Number of persons who rated this app/video/whatever
76+#: Dash/Previews/Header.qml:93
77+#, qt-format
78+msgid "(%1)"
79+msgstr ""
80+
81+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
82+#: Dash/Previews/Header.qml:105
83+#, qt-format
84+msgid "%1 review"
85+msgid_plural "%1 reviews"
86+msgstr[0] ""
87+msgstr[1] ""
88+
89+#: Dash/Previews/Reviews.qml:74
90+msgid "Add a review"
91+msgstr ""
92+
93+#: Dash/Previews/Reviews.qml:86
94+msgid "Review"
95+msgstr ""
96+
97+#: Dash/Previews/Reviews.qml:121
98+msgid "Send"
99+msgstr ""
100+
101+#: Dash/Previews/Reviews.qml:139
102+msgid "Comments:"
103+msgstr ""
104+
105+#: Greeter/Lockscreen.qml:149
106+msgid "Emergency Call"
107+msgstr ""
108+
109+#: Greeter/PassphraseLockscreen.qml:59
110+#, qt-format
111+msgid "Hello %1"
112+msgstr ""
113+
114+#: Greeter/PassphraseLockscreen.qml:59
115+msgid "Hello"
116+msgstr ""
117+
118+#: Hud/HudParametrizedActionsPage.qml:132
119+msgid "Confirm"
120+msgstr ""
121+
122+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
123+msgid "Type or say a command"
124+msgstr ""
125+
126+#: Hud/Hud.qml:84
127+msgid "Loading. Please Wait..."
128+msgstr ""
129+
130+#: Hud/Hud.qml:89
131+msgid "Speak Now..."
132+msgstr ""
133+
134+#: Hud/Hud.qml:94
135+msgid "Speaking..."
136+msgstr ""
137+
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
142+#: Panel/SearchIndicator.qml:27
143+msgid "Search"
144+msgstr ""
145+
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
149+msgstr ""
150+
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
153+msgstr ""
154+
155+#: Shell.qml:439
156+#, qt-format
157+msgid "Please enter %1"
158+msgstr ""
po/fi.po+25−111
@@ -7,86 +7,18 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11−"PO-Revision-Date: 2013-10-03 09:21+0000\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2013-11-20 08:09+0000\n"
1212"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-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Puhelin"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Kamera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galleria"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Selain"
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 "Sää"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Muistio"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Kalenteri"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Mediasoitin"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Kartta"
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:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr "Ohita esittely"
9224
@@ -134,30 +66,28 @@ msgstr ""
13466"Hallitset nyt reunaeleet, joten voit aloittaa puhelimen "
13567"käytön<br><br>Napauta missä tahansa aloittaaksesi"
13668
137−#: Components/PageHeader.qml:341
69+#: Components/PageHeader.qml:364
13870msgid "Recent searches"
13971msgstr "Viimeisimmät haut"
14072
141−#. TRANSLATORS: Number of persons who rated this app
73+#: Dash/Apps/AppPreview.qml:135
74+msgid "Rate this"
75+msgstr "Arvioi tämä"
76+
14277#. TRANSLATORS: Number of persons who rated this app/video/whatever
143−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
78+#: Dash/Previews/Header.qml:93
14479#, qt-format
14580msgid "(%1)"
14681msgstr "(%1)"
14782
148−#. TRANSLATORS: Number of persons who wrote reviews for this app
14983#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
150−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
84+#: Dash/Previews/Header.qml:105
15185#, qt-format
15286msgid "%1 review"
15387msgid_plural "%1 reviews"
15488msgstr[0] "%1 arvostelu"
15589msgstr[1] "%1 arvostelua"
15690
157−#: Dash/Apps/AppPreview.qml:126
158−msgid "Rate this"
159−msgstr "Arvioi tämä"
160−
16191#: Dash/Previews/Reviews.qml:74
16292msgid "Add a review"
16393msgstr "Lisää arvostelu"
@@ -174,7 +104,7 @@ msgstr "Lähetä"
174104msgid "Comments:"
175105msgstr "Kommentit:"
176106
177−#: Greeter/Lockscreen.qml:142
107+#: Greeter/Lockscreen.qml:149
178108msgid "Emergency Call"
179109msgstr "Hätäpuhelu"
180110
@@ -207,40 +137,24 @@ msgstr "Puhu nyt..."
207137msgid "Speaking..."
208138msgstr "Puhutaan..."
209139
140+#: Notifications/NotificationMenuItemFactory.qml:89
141+msgid "Show password"
142+msgstr "Näytä salasana"
143+
210144#: Panel/SearchIndicator.qml:27
211145msgid "Search"
212146msgstr "Hae"
213147
214−#: plugins/Unity/scope.cpp:398
215−msgid "Sorry, there is nothing that matches your search."
216−msgstr "Hakuun täsmääviä tuloksia ei löydy."
148+#: plugins/Unity/Launcher/launcheritem.cpp:43
149+#: plugins/Unity/Launcher/launcheritem.cpp:73
150+msgid "Lock to Launcher"
151+msgstr "Kiinnitä käynnistimeen"
217152
218−#: plugins/Unity/showallfilteroption.cpp:41
219−msgid "All"
220−msgstr "Kaikki"
153+#: plugins/Unity/Launcher/launcheritem.cpp:73
154+msgid "Unlock from Launcher"
155+msgstr "Poista käynnistimestä"
221156
222−#: Shell.qml:438
157+#: Shell.qml:439
223158#, qt-format
224159msgid "Please enter %1"
225160msgstr "Kirjoita %1"
226−
227−#~ msgid "Featured"
228−#~ msgstr "Suositellut"
229−
230−#~ msgid "Recent"
231−#~ msgstr "Viimeisimmät"
232−
233−#~ msgid "New Releases"
234−#~ msgstr "Uudet julkaisut"
235−
236−#~ msgid "Top Charting"
237−#~ msgstr "Nousukiidossa"
238−
239−#~ msgid "Music"
240−#~ msgstr "Musiikki"
241−
242−#~ msgid "Popular Online"
243−#~ msgstr "Suosittua verkossa"
244−
245−#~ msgid "Videos"
246−#~ msgstr "Videot"
po/fo.po+23−94
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-01 15:13+0000\n"
1212"Last-Translator: Jógvan Olsen <jeggy@jebster.net>\n"
1313"Language-Team: Faroese <fo@li.org>\n"
@@ -15,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Fartelefon"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Myndatól"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Myndasavn"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Kagi"
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ðrið"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Skriviblokkur"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Kalendari"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr ""
9224
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:341
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr ""
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:142
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -205,25 +135,24 @@ msgstr "Snakka nú..."
205135msgid "Speaking..."
206136msgstr "Snakkar..."
207137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208142#: Panel/SearchIndicator.qml:27
209143msgid "Search"
210144msgstr "Leita"
211145
212−#: plugins/Unity/scope.cpp:398
213−msgid "Sorry, there is nothing that matches your search."
214−msgstr "Tíanverri er tað einki sum hóskar til tína leiting."
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
149+msgstr ""
215150
216−#: plugins/Unity/showallfilteroption.cpp:41
217−msgid "All"
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
218153msgstr ""
219154
220−#: Shell.qml:438
155+#: Shell.qml:439
221156#, qt-format
222157msgid "Please enter %1"
223158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "Tónleikur"
227−
228−#~ msgid "Videos"
229−#~ msgstr "Sjónbond"
po/fr.po+22−93
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr ""
9224
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:341
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr ""
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:142
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -205,25 +135,24 @@ msgstr ""
205135msgid "Speaking..."
206136msgstr ""
207137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208142#: Panel/SearchIndicator.qml:27
209143msgid "Search"
210144msgstr ""
211145
212−#: plugins/Unity/scope.cpp:398
213−msgid "Sorry, there is nothing that matches your search."
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
214149msgstr ""
215150
216−#: plugins/Unity/showallfilteroption.cpp:41
217−msgid "All"
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
218153msgstr ""
219154
220−#: Shell.qml:438
155+#: Shell.qml:439
221156#, qt-format
222157msgid "Please enter %1"
223158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "Musique"
227−
228−#~ msgid "Videos"
229−#~ msgstr "Vidéos"
po/gd.po+23−109
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-09-30 10:34+0000\n"
1212"Last-Translator: Akerbeltz <fios@akerbeltz.org>\n"
1313"Language-Team: Gaelic; Scottish <gd@li.org>\n"
@@ -16,78 +16,10 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
1818"(n > 2 && n < 20) ? 2 : 3;\n"
19−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
20−"X-Generator: Launchpad (build 16799)\n"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20+"X-Generator: Launchpad (build 16856)\n"
2121
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:149
22+#: Components/EdgeDemoOverlay.qml:151
9123msgid "Skip intro"
9224msgstr "Gearr leum thairis air an ro-ràdh"
9325
@@ -139,20 +71,22 @@ msgid ""
13971"phone<br><br>Tap anywhere to start"
14072msgstr ""
14173
142−#: Components/PageHeader.qml:341
74+#: Components/PageHeader.qml:364
14375msgid "Recent searches"
14476msgstr "Na lorg thu o chionn goirid"
14577
146−#. TRANSLATORS: Number of persons who rated this app
78+#: Dash/Apps/AppPreview.qml:135
79+msgid "Rate this"
80+msgstr "Rangaich seo"
81+
14782#. TRANSLATORS: Number of persons who rated this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
83+#: Dash/Previews/Header.qml:93
14984#, qt-format
15085msgid "(%1)"
15186msgstr "(%1)"
15287
153−#. TRANSLATORS: Number of persons who wrote reviews for this app
15488#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
155−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
89+#: Dash/Previews/Header.qml:105
15690#, qt-format
15791msgid "%1 review"
15892msgid_plural "%1 reviews"
@@ -161,10 +95,6 @@ msgstr[1] "%1 lèirmheas"
16195msgstr[2] "%1 lèirmheasan"
16296msgstr[3] "%1 lèirmheas"
16397
164−#: Dash/Apps/AppPreview.qml:126
165−msgid "Rate this"
166−msgstr "Rangaich seo"
167−
16898#: Dash/Previews/Reviews.qml:74
16999msgid "Add a review"
170100msgstr "Cuir lèirmheas ris"
@@ -181,7 +111,7 @@ msgstr "Cuir"
181111msgid "Comments:"
182112msgstr "Beachdan"
183113
184−#: Greeter/Lockscreen.qml:142
114+#: Greeter/Lockscreen.qml:149
185115msgid "Emergency Call"
186116msgstr "Gairm èiginn"
187117
@@ -214,40 +144,24 @@ msgstr "Can rud a-nis..."
214144msgid "Speaking..."
215145msgstr "A' bruidhinn..."
216146
147+#: Notifications/NotificationMenuItemFactory.qml:89
148+msgid "Show password"
149+msgstr ""
150+
217151#: Panel/SearchIndicator.qml:27
218152msgid "Search"
219153msgstr "Lorg"
220154
221−#: plugins/Unity/scope.cpp:398
222−msgid "Sorry, there is nothing that matches your search."
223−msgstr "Tha sinn duilich ach chan eil dad a' freagairt ris na lorg thu."
155+#: plugins/Unity/Launcher/launcheritem.cpp:43
156+#: plugins/Unity/Launcher/launcheritem.cpp:73
157+msgid "Lock to Launcher"
158+msgstr ""
224159
225−#: plugins/Unity/showallfilteroption.cpp:41
226−msgid "All"
160+#: plugins/Unity/Launcher/launcheritem.cpp:73
161+msgid "Unlock from Launcher"
227162msgstr ""
228163
229−#: Shell.qml:438
164+#: Shell.qml:439
230165#, qt-format
231166msgid "Please enter %1"
232167msgstr "Cuir a-steach %1"
233−
234−#~ msgid "Top Charting"
235−#~ msgstr "Gràinnean-mullaich nan cairt"
236−
237−#~ msgid "Featured"
238−#~ msgstr "Brosnaichte"
239−
240−#~ msgid "Recent"
241−#~ msgstr "O chionn goirid"
242−
243−#~ msgid "New Releases"
244−#~ msgstr "Air ùr-sgaoileadh"
245−
246−#~ msgid "Videos"
247−#~ msgstr "Videothan"
248−
249−#~ msgid "Music"
250−#~ msgstr "Ceòl"
251−
252−#~ msgid "Popular Online"
253−#~ msgstr "Fèill mhòr air air loidhne"
po/gl.po+25−108
@@ -7,86 +7,18 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11−"PO-Revision-Date: 2013-10-03 18:49+0000\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2013-12-06 17:15+0000\n"
1212"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-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-12-07 06:35+0000\n"
19+"X-Generator: Launchpad (build 16869)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Teléfono"
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 "O tempo"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Bloc de notas"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Calendario"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Reprodutor multimedia"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Mapa"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "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:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr "Saltar introdución"
9224
@@ -134,30 +66,28 @@ msgstr ""
13466"Xa domina os xestos desde os bordos e pode comezar a usar o "
13567"móbil<br><br>Toque en calquera sitio para comezar"
13668
137−#: Components/PageHeader.qml:341
69+#: Components/PageHeader.qml:364
13870msgid "Recent searches"
13971msgstr "Buscas recentes"
14072
141−#. TRANSLATORS: Number of persons who rated this app
73+#: Dash/Apps/AppPreview.qml:135
74+msgid "Rate this"
75+msgstr "Valore isto"
76+
14277#. TRANSLATORS: Number of persons who rated this app/video/whatever
143−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
78+#: Dash/Previews/Header.qml:93
14479#, qt-format
14580msgid "(%1)"
14681msgstr "(%1)"
14782
148−#. TRANSLATORS: Number of persons who wrote reviews for this app
14983#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
150−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
84+#: Dash/Previews/Header.qml:105
15185#, qt-format
15286msgid "%1 review"
15387msgid_plural "%1 reviews"
15488msgstr[0] "%1 opinión"
15589msgstr[1] "%1 opinións"
15690
157−#: Dash/Apps/AppPreview.qml:126
158−msgid "Rate this"
159−msgstr "Valore isto"
160−
16191#: Dash/Previews/Reviews.qml:74
16292msgid "Add a review"
16393msgstr "Engadir unha opinión"
@@ -174,7 +104,7 @@ msgstr "Enviar"
174104msgid "Comments:"
175105msgstr "Comentarios:"
176106
177−#: Greeter/Lockscreen.qml:142
107+#: Greeter/Lockscreen.qml:149
178108msgid "Emergency Call"
179109msgstr "Chamada de emerxencia"
180110
@@ -207,37 +137,24 @@ msgstr "Fale agora…"
207137msgid "Speaking..."
208138msgstr "Falando…"
209139
140+#: Notifications/NotificationMenuItemFactory.qml:89
141+msgid "Show password"
142+msgstr "Mostrar contrasinal"
143+
210144#: Panel/SearchIndicator.qml:27
211145msgid "Search"
212146msgstr "Buscar"
213147
214−#: plugins/Unity/scope.cpp:398
215−msgid "Sorry, there is nothing that matches your search."
216−msgstr "Sentímolo, non hai nada que coincida con esta busca."
148+#: plugins/Unity/Launcher/launcheritem.cpp:43
149+#: plugins/Unity/Launcher/launcheritem.cpp:73
150+msgid "Lock to Launcher"
151+msgstr "Manter no Iniciador"
217152
218−#: plugins/Unity/showallfilteroption.cpp:41
219−msgid "All"
220−msgstr "Todo"
153+#: plugins/Unity/Launcher/launcheritem.cpp:73
154+msgid "Unlock from Launcher"
155+msgstr "Non manter no Iniciador"
221156
222−#: Shell.qml:438
157+#: Shell.qml:439
223158#, qt-format
224159msgid "Please enter %1"
225160msgstr "Introduza %1"
226−
227−#~ msgid "Music"
228−#~ msgstr "Música"
229−
230−#~ msgid "Videos"
231−#~ msgstr "Vídeos"
232−
233−#~ msgid "Featured"
234−#~ msgstr "Destacado"
235−
236−#~ msgid "Recent"
237−#~ msgstr "Recentes"
238−
239−#~ msgid "New Releases"
240−#~ msgstr "Novas versións"
241−
242−#~ msgid "Popular Online"
243−#~ msgstr "Populares en liña"
po/he.po+27−111
@@ -7,86 +7,18 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11−"PO-Revision-Date: 2013-10-01 09:19+0000\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2013-11-20 08:30+0000\n"
1212"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-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "טלפון"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "מצלמה"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "גלריה"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "דפדפן"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "מזג אוויר"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "פנקס רשימות"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "לוח שנה"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "נגן מדיה"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "מפה"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "ויקיפדיה"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr "לדלג על הפתיחה"
9224
@@ -131,31 +63,31 @@ msgid ""
13163"You have now mastered the edge gestures and can start using the "
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
66+"עתה מכשסיימת את ההשתלמות לשימוש במחוות קצה יש לך את הכלים להשתמש "
67+"בטלפון<br><br>ניתן לגעת במקום כלשהו במסך כדי להתחיל"
13468
135−#: Components/PageHeader.qml:341
69+#: Components/PageHeader.qml:364
13670msgid "Recent searches"
13771msgstr "חיפושים אחרונים"
13872
139−#. TRANSLATORS: Number of persons who rated this app
73+#: Dash/Apps/AppPreview.qml:135
74+msgid "Rate this"
75+msgstr "דירוג היישום"
76+
14077#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
78+#: Dash/Previews/Header.qml:93
14279#, qt-format
14380msgid "(%1)"
14481msgstr "(%1)"
14582
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14783#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
84+#: Dash/Previews/Header.qml:105
14985#, qt-format
15086msgid "%1 review"
15187msgid_plural "%1 reviews"
15288msgstr[0] "סקירה %1"
15389msgstr[1] "%1 סקירות"
15490
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr "דירוג היישום"
158−
15991#: Dash/Previews/Reviews.qml:74
16092msgid "Add a review"
16193msgstr "הוספת סקירה"
@@ -172,7 +104,7 @@ msgstr "שליחה"
172104msgid "Comments:"
173105msgstr "הערות:"
174106
175−#: Greeter/Lockscreen.qml:142
107+#: Greeter/Lockscreen.qml:149
176108msgid "Emergency Call"
177109msgstr "שיחת חירום"
178110
@@ -205,40 +137,24 @@ msgstr "יש לדבר כעת..."
205137msgid "Speaking..."
206138msgstr "הדיבור מושמע…"
207139
140+#: Notifications/NotificationMenuItemFactory.qml:89
141+msgid "Show password"
142+msgstr "הצגת הססמה"
143+
208144#: Panel/SearchIndicator.qml:27
209145msgid "Search"
210146msgstr "חיפוש"
211147
212−#: plugins/Unity/scope.cpp:398
213−msgid "Sorry, there is nothing that matches your search."
214−msgstr "שום דבר אינו תואם לחיפוש שלך, עמך הסליחה."
148+#: plugins/Unity/Launcher/launcheritem.cpp:43
149+#: plugins/Unity/Launcher/launcheritem.cpp:73
150+msgid "Lock to Launcher"
151+msgstr "נעילה למשגר"
215152
216−#: plugins/Unity/showallfilteroption.cpp:41
217−msgid "All"
218−msgstr ""
153+#: plugins/Unity/Launcher/launcheritem.cpp:73
154+msgid "Unlock from Launcher"
155+msgstr "הפרדה מהמשגר"
219156
220−#: Shell.qml:438
157+#: Shell.qml:439
221158#, qt-format
222159msgid "Please enter %1"
223160msgstr "נא להזין %1"
224−
225−#~ msgid "Music"
226−#~ msgstr "מוזיקה"
227−
228−#~ msgid "Videos"
229−#~ msgstr "סרטונים"
230−
231−#~ msgid "Top Charting"
232−#~ msgstr "בראש הטבלה"
233−
234−#~ msgid "Featured"
235−#~ msgstr "מומלצים"
236−
237−#~ msgid "Recent"
238−#~ msgstr "אחרונים"
239−
240−#~ msgid "New Releases"
241−#~ msgstr "מהדורות חדשות"
242−
243−#~ msgid "Popular Online"
244−#~ msgstr "פופולריים ברחבי הרשת"
po/hr.po+23−94
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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,78 +16,10 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
20−"X-Generator: Launchpad (build 16799)\n"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20+"X-Generator: Launchpad (build 16856)\n"
2121
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr ""
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr ""
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr ""
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr ""
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr ""
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr ""
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr ""
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr ""
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr ""
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr ""
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr ""
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr ""
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr ""
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr ""
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr ""
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr ""
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr ""
89−
90−#: Components/EdgeDemoOverlay.qml:149
22+#: Components/EdgeDemoOverlay.qml:151
9123msgid "Skip intro"
9224msgstr ""
9325
@@ -133,30 +65,28 @@ msgid ""
13365"phone<br><br>Tap anywhere to start"
13466msgstr ""
13567
136−#: Components/PageHeader.qml:341
68+#: Components/PageHeader.qml:364
13769msgid "Recent searches"
13870msgstr "Nedavne pretrage"
13971
140−#. TRANSLATORS: Number of persons who rated this app
72+#: Dash/Apps/AppPreview.qml:135
73+msgid "Rate this"
74+msgstr ""
75+
14176#. TRANSLATORS: Number of persons who rated this app/video/whatever
142−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
77+#: Dash/Previews/Header.qml:93
14378#, qt-format
14479msgid "(%1)"
14580msgstr ""
14681
147−#. TRANSLATORS: Number of persons who wrote reviews for this app
14882#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
149−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
83+#: Dash/Previews/Header.qml:105
15084#, qt-format
15185msgid "%1 review"
15286msgid_plural "%1 reviews"
15387msgstr[0] ""
15488msgstr[1] ""
15589
156−#: Dash/Apps/AppPreview.qml:126
157−msgid "Rate this"
158−msgstr ""
159−
16090#: Dash/Previews/Reviews.qml:74
16191msgid "Add a review"
16292msgstr ""
@@ -173,7 +103,7 @@ msgstr ""
173103msgid "Comments:"
174104msgstr ""
175105
176−#: Greeter/Lockscreen.qml:142
106+#: Greeter/Lockscreen.qml:149
177107msgid "Emergency Call"
178108msgstr ""
179109
@@ -206,25 +136,24 @@ msgstr "Recite..."
206136msgid "Speaking..."
207137msgstr "Govor..."
208138
139+#: Notifications/NotificationMenuItemFactory.qml:89
140+msgid "Show password"
141+msgstr ""
142+
209143#: Panel/SearchIndicator.qml:27
210144msgid "Search"
211145msgstr "Pretraživanje"
212146
213−#: plugins/Unity/scope.cpp:398
214−msgid "Sorry, there is nothing that matches your search."
215−msgstr "Nažalost, ne postoji ništa što odgovara vašoj pretrazi."
147+#: plugins/Unity/Launcher/launcheritem.cpp:43
148+#: plugins/Unity/Launcher/launcheritem.cpp:73
149+msgid "Lock to Launcher"
150+msgstr ""
216151
217−#: plugins/Unity/showallfilteroption.cpp:41
218−msgid "All"
152+#: plugins/Unity/Launcher/launcheritem.cpp:73
153+msgid "Unlock from Launcher"
219154msgstr ""
220155
221−#: Shell.qml:438
156+#: Shell.qml:439
222157#, qt-format
223158msgid "Please enter %1"
224159msgstr ""
225−
226−#~ msgid "Music"
227−#~ msgstr "Glazba"
228−
229−#~ msgid "Videos"
230−#~ msgstr "Video"
po/hu.po+23−94
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr ""
9224
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:341
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "Legutóbbi keresések"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:142
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -205,25 +135,24 @@ msgstr "Beszéljen most…"
205135msgid "Speaking..."
206136msgstr "Beszéd…"
207137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208142#: Panel/SearchIndicator.qml:27
209143msgid "Search"
210144msgstr "Keresés"
211145
212−#: plugins/Unity/scope.cpp:398
213−msgid "Sorry, there is nothing that matches your search."
214−msgstr "Elnézést, nincs találat a keresésre."
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
149+msgstr ""
215150
216−#: plugins/Unity/showallfilteroption.cpp:41
217−msgid "All"
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
218153msgstr ""
219154
220−#: Shell.qml:438
155+#: Shell.qml:439
221156#, qt-format
222157msgid "Please enter %1"
223158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "Zene"
227−
228−#~ msgid "Videos"
229−#~ msgstr "Videók"
po/hy.po+23−94
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr ""
9224
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:341
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "Վերջին որոնումներ"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:142
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -205,25 +135,24 @@ msgstr "Խոսի՛ր"
205135msgid "Speaking..."
206136msgstr "Խոսում եմ..."
207137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208142#: Panel/SearchIndicator.qml:27
209143msgid "Search"
210144msgstr "Որոնում"
211145
212−#: plugins/Unity/scope.cpp:398
213−msgid "Sorry, there is nothing that matches your search."
214−msgstr "Կներերք, բայց Ձեր հարցումով ոչինչ չկար"
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
149+msgstr ""
215150
216−#: plugins/Unity/showallfilteroption.cpp:41
217−msgid "All"
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
218153msgstr ""
219154
220−#: Shell.qml:438
155+#: Shell.qml:439
221156#, qt-format
222157msgid "Please enter %1"
223158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "Երգեր"
227−
228−#~ msgid "Videos"
229−#~ msgstr "Վիդեոներ"
po/id.po+22−87
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr ""
9224
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:341
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr ""
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:142
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -205,19 +135,24 @@ msgstr ""
205135msgid "Speaking..."
206136msgstr ""
207137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208142#: Panel/SearchIndicator.qml:27
209143msgid "Search"
210144msgstr ""
211145
212−#: plugins/Unity/scope.cpp:398
213−msgid "Sorry, there is nothing that matches your search."
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
214149msgstr ""
215150
216−#: plugins/Unity/showallfilteroption.cpp:41
217−msgid "All"
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
218153msgstr ""
219154
220−#: Shell.qml:438
155+#: Shell.qml:439
221156#, qt-format
222157msgid "Please enter %1"
223158msgstr ""
po/is.po+23−109
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-09-18 16:22+0000\n"
1212"Last-Translator: Andri Thorlacius <Unknown>\n"
1313"Language-Team: Icelandic <is@li.org>\n"
@@ -15,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
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:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr "Hoppa yfir kynningu"
9224
@@ -133,30 +65,28 @@ msgid ""
13365"phone<br><br>Tap anywhere to start"
13466msgstr ""
13567
136−#: Components/PageHeader.qml:341
68+#: Components/PageHeader.qml:364
13769msgid "Recent searches"
13870msgstr "Nýlegar leitir"
13971
140−#. TRANSLATORS: Number of persons who rated this app
72+#: Dash/Apps/AppPreview.qml:135
73+msgid "Rate this"
74+msgstr "Gefa þessu einkunn"
75+
14176#. TRANSLATORS: Number of persons who rated this app/video/whatever
142−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
77+#: Dash/Previews/Header.qml:93
14378#, qt-format
14479msgid "(%1)"
14580msgstr "(%1)"
14681
147−#. TRANSLATORS: Number of persons who wrote reviews for this app
14882#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
149−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
83+#: Dash/Previews/Header.qml:105
15084#, qt-format
15185msgid "%1 review"
15286msgid_plural "%1 reviews"
15387msgstr[0] "%1 ummæli"
15488msgstr[1] "%1 ummæli"
15589
156−#: Dash/Apps/AppPreview.qml:126
157−msgid "Rate this"
158−msgstr "Gefa þessu einkunn"
159−
16090#: Dash/Previews/Reviews.qml:74
16191msgid "Add a review"
16292msgstr "Gefa umsögn"
@@ -173,7 +103,7 @@ msgstr "Senda"
173103msgid "Comments:"
174104msgstr "Athugasemdir:"
175105
176−#: Greeter/Lockscreen.qml:142
106+#: Greeter/Lockscreen.qml:149
177107msgid "Emergency Call"
178108msgstr "Neyðarsímtal"
179109
@@ -206,40 +136,24 @@ msgstr "Talaðu Núna..."
206136msgid "Speaking..."
207137msgstr "Tala..."
208138
139+#: Notifications/NotificationMenuItemFactory.qml:89
140+msgid "Show password"
141+msgstr ""
142+
209143#: Panel/SearchIndicator.qml:27
210144msgid "Search"
211145msgstr "Leita"
212146
213−#: plugins/Unity/scope.cpp:398
214−msgid "Sorry, there is nothing that matches your search."
215−msgstr "Því miður, það var ekkert sem passaði við leitarorðið þitt."
147+#: plugins/Unity/Launcher/launcheritem.cpp:43
148+#: plugins/Unity/Launcher/launcheritem.cpp:73
149+msgid "Lock to Launcher"
150+msgstr ""
216151
217−#: plugins/Unity/showallfilteroption.cpp:41
218−msgid "All"
152+#: plugins/Unity/Launcher/launcheritem.cpp:73
153+msgid "Unlock from Launcher"
219154msgstr ""
220155
221−#: Shell.qml:438
156+#: Shell.qml:439
222157#, qt-format
223158msgid "Please enter %1"
224159msgstr ""
225−
226−#~ msgid "Top Charting"
227−#~ msgstr "Topp Listi"
228−
229−#~ msgid "Featured"
230−#~ msgstr "Efst á baugi"
231−
232−#~ msgid "Recent"
233−#~ msgstr "Nýlegt"
234−
235−#~ msgid "New Releases"
236−#~ msgstr "Nýjar Útgáfur"
237−
238−#~ msgid "Videos"
239−#~ msgstr "Myndbönd"
240−
241−#~ msgid "Music"
242−#~ msgstr "Tónlist"
243−
244−#~ msgid "Popular Online"
245−#~ msgstr "Vinsælt á Netinu"
po/it.po+24−110
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-07 09:34+0000\n"
1212"Last-Translator: Claudio Arseni <claudio.arseni@gmail.com>\n"
1313"Language-Team: Italian <it@li.org>\n"
@@ -15,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Telefono"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Fotocamera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galleria"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Browser"
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 "Meteo"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Blocco note"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Calendario"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Riproduttore multimediale"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Mappa"
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:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr "Salta introduzione"
9224
@@ -139,30 +71,28 @@ msgstr ""
13971"I gesti sui bordi sono stati configurati ed è possibile iniziare a usare il "
14072"telefono<br><br>Toccare in un punto qualunque per iniziare"
14173
142−#: Components/PageHeader.qml:341
74+#: Components/PageHeader.qml:364
14375msgid "Recent searches"
14476msgstr "Ricerche recenti"
14577
146−#. TRANSLATORS: Number of persons who rated this app
78+#: Dash/Apps/AppPreview.qml:135
79+msgid "Rate this"
80+msgstr "Valuta"
81+
14782#. TRANSLATORS: Number of persons who rated this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
83+#: Dash/Previews/Header.qml:93
14984#, qt-format
15085msgid "(%1)"
15186msgstr "(%1)"
15287
153−#. TRANSLATORS: Number of persons who wrote reviews for this app
15488#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
155−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
89+#: Dash/Previews/Header.qml:105
15690#, qt-format
15791msgid "%1 review"
15892msgid_plural "%1 reviews"
15993msgstr[0] "%1 recensione"
16094msgstr[1] "%1 recensioni"
16195
162−#: Dash/Apps/AppPreview.qml:126
163−msgid "Rate this"
164−msgstr "Valuta"
165−
16696#: Dash/Previews/Reviews.qml:74
16797msgid "Add a review"
16898msgstr "Aggiungi una recensione"
@@ -179,7 +109,7 @@ msgstr "Invia"
179109msgid "Comments:"
180110msgstr "Commenti:"
181111
182−#: Greeter/Lockscreen.qml:142
112+#: Greeter/Lockscreen.qml:149
183113msgid "Emergency Call"
184114msgstr "Chiamata di emergenza"
185115
@@ -212,40 +142,24 @@ msgstr "Parla ora..."
212142msgid "Speaking..."
213143msgstr "Sto parlando..."
214144
145+#: Notifications/NotificationMenuItemFactory.qml:89
146+msgid "Show password"
147+msgstr ""
148+
215149#: Panel/SearchIndicator.qml:27
216150msgid "Search"
217151msgstr "Cerca"
218152
219−#: plugins/Unity/scope.cpp:398
220−msgid "Sorry, there is nothing that matches your search."
221−msgstr "Nessun risultato corrispondente alla ricerca."
153+#: plugins/Unity/Launcher/launcheritem.cpp:43
154+#: plugins/Unity/Launcher/launcheritem.cpp:73
155+msgid "Lock to Launcher"
156+msgstr ""
222157
223−#: plugins/Unity/showallfilteroption.cpp:41
224−msgid "All"
225−msgstr "Tutto"
158+#: plugins/Unity/Launcher/launcheritem.cpp:73
159+msgid "Unlock from Launcher"
160+msgstr ""
226161
227−#: Shell.qml:438
162+#: Shell.qml:439
228163#, qt-format
229164msgid "Please enter %1"
230165msgstr "Inserire %1"
231−
232−#~ msgid "Music"
233−#~ msgstr "Musica"
234−
235−#~ msgid "Videos"
236−#~ msgstr "Video"
237−
238−#~ msgid "Recent"
239−#~ msgstr "Recenti"
240−
241−#~ msgid "New Releases"
242−#~ msgstr "Nuovi rilasci"
243−
244−#~ msgid "Featured"
245−#~ msgstr "In evidenza"
246−
247−#~ msgid "Popular Online"
248−#~ msgstr "Popolari online"
249−
250−#~ msgid "Top Charting"
251−#~ msgstr "Più votate"
po/ja.po+22−87
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr ""
9224
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:341
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr ""
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:142
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -205,19 +135,24 @@ msgstr ""
205135msgid "Speaking..."
206136msgstr ""
207137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208142#: Panel/SearchIndicator.qml:27
209143msgid "Search"
210144msgstr ""
211145
212−#: plugins/Unity/scope.cpp:398
213−msgid "Sorry, there is nothing that matches your search."
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
214149msgstr ""
215150
216−#: plugins/Unity/showallfilteroption.cpp:41
217−msgid "All"
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
218153msgstr ""
219154
220−#: Shell.qml:438
155+#: Shell.qml:439
221156#, qt-format
222157msgid "Please enter %1"
223158msgstr ""
po/km.po+25−111
@@ -7,86 +7,18 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
11−"PO-Revision-Date: 2013-10-11 08:49+0000\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2013-11-20 07:34+0000\n"
1212"Last-Translator: Khoem Sokhem <khoemsokhem@khmeros.info>\n"
1313"Language-Team: Khmer <km@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "ទូរស័ព្ទ"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "ម៉ាស៊ីន​ថ​ត"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "វិចិត្រសាល"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "កម្មវិធី​រុករក"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "អាកាសធាតុ"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Notepad"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "ប្រតិទិន"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "កម្មវិធី​ចាក់​មេឌៀ"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "ផែនទី"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "វីគីភីឌៀ"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr "រំលង​ការ​ណែនាំ"
9224
@@ -137,29 +69,27 @@ msgstr ""
13769"និង​អាច​ចាប់ផ្ដើម​ប្រើ​ទូរស័ព្ទ​បាន<br><br>ប៉ះ​កន្លែង​ណា​មួយ​ "
13870"ដើម្បី​ចាប់ផ្ដើម"
13971
140−#: Components/PageHeader.qml:341
72+#: Components/PageHeader.qml:364
14173msgid "Recent searches"
14274msgstr "ការ​ស្វែងរក​ថ្មី"
14375
144−#. TRANSLATORS: Number of persons who rated this app
76+#: Dash/Apps/AppPreview.qml:135
77+msgid "Rate this"
78+msgstr "វាយតម្លៃ​វា"
79+
14580#. TRANSLATORS: Number of persons who rated this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
81+#: Dash/Previews/Header.qml:93
14782#, qt-format
14883msgid "(%1)"
14984msgstr "(%1)"
15085
151−#. TRANSLATORS: Number of persons who wrote reviews for this app
15286#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
153−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
87+#: Dash/Previews/Header.qml:105
15488#, qt-format
15589msgid "%1 review"
15690msgid_plural "%1 reviews"
15791msgstr[0] "ពិនិត្យ​មើល %1"
15892
159−#: Dash/Apps/AppPreview.qml:126
160−msgid "Rate this"
161−msgstr "វាយតម្លៃ​វា"
162−
16393#: Dash/Previews/Reviews.qml:74
16494msgid "Add a review"
16595msgstr "បន្ថែម​ការ​ពិនិត្យ"
@@ -176,7 +106,7 @@ msgstr "ផ្ញើ"
176106msgid "Comments:"
177107msgstr "មតិយោបល់៖"
178108
179−#: Greeter/Lockscreen.qml:142
109+#: Greeter/Lockscreen.qml:149
180110msgid "Emergency Call"
181111msgstr "ការ​ហៅ​ពេល​អាសន្ន"
182112
@@ -209,40 +139,24 @@ msgstr "និយាយ​ឥឡូវ..."
209139msgid "Speaking..."
210140msgstr "កំពុង​និយាយ..."
211141
142+#: Notifications/NotificationMenuItemFactory.qml:89
143+msgid "Show password"
144+msgstr "បង្ហាញ​ពាក្យ​សម្ងាត់"
145+
212146#: Panel/SearchIndicator.qml:27
213147msgid "Search"
214148msgstr "ស្វែង​រក"
215149
216−#: plugins/Unity/scope.cpp:398
217−msgid "Sorry, there is nothing that matches your search."
218−msgstr "សូម​ទោស មិនមាន​ពាក្យ​ដែល​អ្នក​ស្វែងរក​ទេ​។"
150+#: plugins/Unity/Launcher/launcheritem.cpp:43
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Lock to Launcher"
153+msgstr "ចាក់​សោ​​ទៅ​កម្មវិធី​ចាប់ផ្ដើម"
219154
220−#: plugins/Unity/showallfilteroption.cpp:41
221−msgid "All"
222−msgstr "ទាំង​អស់"
155+#: plugins/Unity/Launcher/launcheritem.cpp:73
156+msgid "Unlock from Launcher"
157+msgstr "ដោះសោ​ពី​កម្មវិធី​ចាប់ផ្ដើម"
223158
224−#: Shell.qml:438
159+#: Shell.qml:439
225160#, qt-format
226161msgid "Please enter %1"
227162msgstr "សូម​បញ្ចូល %1"
228−
229−#~ msgid "Popular Online"
230−#~ msgstr "លើ​បណ្ដាញ​ប្រជាប្រិយ"
231−
232−#~ msgid "Music"
233−#~ msgstr "តន្ត្រី"
234−
235−#~ msgid "New Releases"
236−#~ msgstr "ការ​ចេញ​ផ្សាយ​ថ្មី"
237−
238−#~ msgid "Top Charting"
239−#~ msgstr "តារាង​ខាង​លើ"
240−
241−#~ msgid "Featured"
242−#~ msgstr "ដែល​ល្បី"
243−
244−#~ msgid "Recent"
245−#~ msgstr "ថ្មីៗ"
246−
247−#~ msgid "Videos"
248−#~ msgstr "វីដេអូ"
po/kn.po+23−94
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr ""
9224
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:341
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "ಇತ್ತೀಚಿನ ಹುಡುಕಾಟಗಳು"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:142
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -205,25 +135,24 @@ msgstr "ಈಗ ಮಾತನಾಡಿ ..."
205135msgid "Speaking..."
206136msgstr "ಮಾತನಾಡುತಿದ್ದೀರಿ"
207137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208142#: Panel/SearchIndicator.qml:27
209143msgid "Search"
210144msgstr "ಹುಡುಕು"
211145
212−#: plugins/Unity/scope.cpp:398
213−msgid "Sorry, there is nothing that matches your search."
214−msgstr "ಕ್ಷಮಿಸಿ ನಿಮ್ಮ ಶೋಧನೆಗೆ ಸರಿಯಾದ ಹೊಂದಾಣಿಕೆಗಳು ದೊರಕುತ್ತಿಲ್ಲ"
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
149+msgstr ""
215150
216−#: plugins/Unity/showallfilteroption.cpp:41
217−msgid "All"
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
218153msgstr ""
219154
220−#: Shell.qml:438
155+#: Shell.qml:439
221156#, qt-format
222157msgid "Please enter %1"
223158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "ಸಂಗೀತ"
227−
228−#~ msgid "Videos"
229−#~ msgstr "ವೀಡಿಯೋಗಳು"
po/ko.po+22−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-10 07:04+0000\n"
1212"Last-Translator: Kim Boram <boramism@gmail.com>\n"
1313"Language-Team: Korean <ko@li.org>\n"
@@ -15,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "전화"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "카메라"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "갤러리"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "페이스북"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "브라우저"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "트위터"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "지메일"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "날씨"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "메모장"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "달력"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "미디어 재생기"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "에버노트"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "지도"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "핀터레스트"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "사운드클라우드"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "위키백과"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "유튜브"
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr "도입부 건너뛰기"
9224
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:341
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "최근 검색"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:142
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -205,22 +135,24 @@ msgstr ""
205135msgid "Speaking..."
206136msgstr ""
207137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208142#: Panel/SearchIndicator.qml:27
209143msgid "Search"
210144msgstr "검색"
211145
212−#: plugins/Unity/scope.cpp:398
213−msgid "Sorry, there is nothing that matches your search."
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
214149msgstr ""
215150
216−#: plugins/Unity/showallfilteroption.cpp:41
217−msgid "All"
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
218153msgstr ""
219154
220−#: Shell.qml:438
155+#: Shell.qml:439
221156#, qt-format
222157msgid "Please enter %1"
223158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "음악"
po/ky.po+23−94
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr ""
9224
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:341
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "Соңку издөөлөр"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:142
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -205,25 +135,24 @@ msgstr "Азыр сүйлөңүз..."
205135msgid "Speaking..."
206136msgstr "Сүйлөнүүдө..."
207137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208142#: Panel/SearchIndicator.qml:27
209143msgid "Search"
210144msgstr "Издөө"
211145
212−#: plugins/Unity/scope.cpp:398
213−msgid "Sorry, there is nothing that matches your search."
214−msgstr "Тилекке каршы, сиздин издөөңүзгө эч нерсе дал келген жок."
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
149+msgstr ""
215150
216−#: plugins/Unity/showallfilteroption.cpp:41
217−msgid "All"
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
218153msgstr ""
219154
220−#: Shell.qml:438
155+#: Shell.qml:439
221156#, qt-format
222157msgid "Please enter %1"
223158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "Музыка"
227−
228−#~ msgid "Videos"
229−#~ msgstr "Видеолор"
po/lo.po+23−94
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-02 10:00+0000\n"
1212"Last-Translator: Anousak <anousak@gmail.com>\n"
1313"Language-Team: Lao <lo@li.org>\n"
@@ -15,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
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:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr ""
9224
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:341
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr ""
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr "(%1)"
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr "ສົ່ງ"
172102msgid "Comments:"
173103msgstr "ຄໍ່ເຫັນ"
174104
175−#: Greeter/Lockscreen.qml:142
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -205,25 +135,24 @@ msgstr "ເວົ້າໂລດ"
205135msgid "Speaking..."
206136msgstr "ກໍາລັງເວົ້າ"
207137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208142#: Panel/SearchIndicator.qml:27
209143msgid "Search"
210144msgstr "ຊອກຫາ"
211145
212−#: plugins/Unity/scope.cpp:398
213−msgid "Sorry, there is nothing that matches your search."
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
214149msgstr ""
215150
216−#: plugins/Unity/showallfilteroption.cpp:41
217−msgid "All"
218−msgstr "ທັງໝົດ"
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
153+msgstr ""
219154
220−#: Shell.qml:438
155+#: Shell.qml:439
221156#, qt-format
222157msgid "Please enter %1"
223158msgstr "ກະລູນາປ້ອນ %1"
224−
225−#~ msgid "Videos"
226−#~ msgstr "ວິດີໂອ"
227−
228−#~ msgid "Music"
229−#~ msgstr "ດົນຕີ"
po/lv.po+23−94
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-09-28 16:29+0000\n"
1212"Last-Translator: Jānis-Marks Gailis <jeanmarc.gailis@gmail.com>\n"
1313"Language-Team: Latvian <lv@li.org>\n"
@@ -15,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Tālrunis"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Fotokamera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galerija"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Pārlūkprogramma"
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 "Laikapstākļi"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Bloknots"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Kalendārs"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Mēdiju Atskaņotājs"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Karte"
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 "Vikipēdija"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr ""
9224
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:341
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "Nesen veiktās meklēšanas"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:142
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -205,25 +135,24 @@ msgstr "Runajiet Tagad"
205135msgid "Speaking..."
206136msgstr "Runa..."
207137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208142#: Panel/SearchIndicator.qml:27
209143msgid "Search"
210144msgstr "Meklēt"
211145
212−#: plugins/Unity/scope.cpp:398
213−msgid "Sorry, there is nothing that matches your search."
214−msgstr "Diemžēl nekas neatbilst jūsu meklētajam."
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
149+msgstr ""
215150
216−#: plugins/Unity/showallfilteroption.cpp:41
217−msgid "All"
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
218153msgstr ""
219154
220−#: Shell.qml:438
155+#: Shell.qml:439
221156#, qt-format
222157msgid "Please enter %1"
223158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "Mūzika"
227−
228−#~ msgid "Videos"
229−#~ msgstr "Video"
po/ml.ponew file+162
@@ -0,0 +1,162 @@
1+# Malayalam 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-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2013-11-23 11:44+0000\n"
12+"Last-Translator: STyM Alfazz <Unknown>\n"
13+"Language-Team: Malayalam <ml@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-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
20+
21+#: Components/EdgeDemoOverlay.qml:151
22+msgid "Skip intro"
23+msgstr "ആമുഖം ഒഴിവാക്കുക"
24+
25+#: Components/EdgeDemo.qml:112
26+msgid "Right edge"
27+msgstr "വലത് മൂല"
28+
29+#: Components/EdgeDemo.qml:113
30+msgid "Try swiping from the right edge to unlock the phone"
31+msgstr "ഫോണ്‍ അണ്‍ലോക്ക് ചെയ്യാന്‍ വലതു വശത്തുനിന്ന് സ്വൈപ് ചെയ്ത് നോക്കുക"
32+
33+#: Components/EdgeDemo.qml:144
34+msgid "Top edge"
35+msgstr "മുകള്‍ വശം"
36+
37+#: Components/EdgeDemo.qml:145
38+msgid "Try swiping from the top edge to access the indicators"
39+msgstr "സൂചകങ്ങള്‍ ലഭ്യമാക്കാന്‍ മുകള്‍ വശത്തുനിന്നും സ്വൈപ് ചെയ്യുക"
40+
41+#: Components/EdgeDemo.qml:170
42+msgid "Close"
43+msgstr "അടക്കുക"
44+
45+#: Components/EdgeDemo.qml:171
46+msgid "Swipe up again to close the settings screen"
47+msgstr "ക്രമീകരണങ്ങളുടെ സ്ക്രീന്‍ അടക്കാന്‍ മുകളിലേക്ക് സ്വൈപ് ചെയ്യുക"
48+
49+#: Components/EdgeDemo.qml:198
50+msgid "Left edge"
51+msgstr "ഇടത് വശം"
52+
53+#: Components/EdgeDemo.qml:199
54+msgid "Swipe from the left to reveal the launcher for quick access to apps"
55+msgstr ""
56+"പ്രയോഗങ്ങള്‍ പെട്ടെന്ന് ലഭ്യമാക്കുന്ന വിക്ഷേപിക ലഭ്യമാക്കാന്‍ ഇടതു വശത്ത് "
57+"നിന്നും സ്വൈപ് ചെയ്യുക"
58+
59+#: Components/EdgeDemo.qml:226
60+msgid "Well done"
61+msgstr "നന്നായി ചെയ്തിരിക്കുന്നു"
62+
63+#: Components/EdgeDemo.qml:227
64+msgid ""
65+"You have now mastered the edge gestures and can start using the "
66+"phone<br><br>Tap anywhere to start"
67+msgstr ""
68+"നിങ്ങളിപ്പോള്‍ സ്വൈപുകളും മറ്റും പഠിച്ചിരിക്കുന്നു<br><br>തുടങ്ങാന്‍ "
69+"എവിടെയെങ്കിലും ടാപ് ചെയ്യുക"
70+
71+#: Components/PageHeader.qml:364
72+msgid "Recent searches"
73+msgstr "സമീപകാല തിരയലുകള്‍"
74+
75+#: Dash/Apps/AppPreview.qml:135
76+msgid "Rate this"
77+msgstr "ഇത് അവലോകനം ചെയ്യുക"
78+
79+#. TRANSLATORS: Number of persons who rated this app/video/whatever
80+#: Dash/Previews/Header.qml:93
81+#, qt-format
82+msgid "(%1)"
83+msgstr "(%1)"
84+
85+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
86+#: Dash/Previews/Header.qml:105
87+#, qt-format
88+msgid "%1 review"
89+msgid_plural "%1 reviews"
90+msgstr[0] "%1 അവലോകനം"
91+msgstr[1] "%1 അവലോകനങ്ങള്‍"
92+
93+#: Dash/Previews/Reviews.qml:74
94+msgid "Add a review"
95+msgstr "ഒരു അവലോകനം ചേര്‍ക്കുക"
96+
97+#: Dash/Previews/Reviews.qml:86
98+msgid "Review"
99+msgstr "അവലോകനം"
100+
101+#: Dash/Previews/Reviews.qml:121
102+msgid "Send"
103+msgstr "അയയ്‌ക്കുക"
104+
105+#: Dash/Previews/Reviews.qml:139
106+msgid "Comments:"
107+msgstr "അഭിപ്രായങ്ങള്‍:"
108+
109+#: Greeter/Lockscreen.qml:149
110+msgid "Emergency Call"
111+msgstr "അടിയന്തിര വിളി"
112+
113+#: Greeter/PassphraseLockscreen.qml:59
114+#, qt-format
115+msgid "Hello %1"
116+msgstr "ഹലോ %1"
117+
118+#: Greeter/PassphraseLockscreen.qml:59
119+msgid "Hello"
120+msgstr "ഹലോ"
121+
122+#: Hud/HudParametrizedActionsPage.qml:132
123+msgid "Confirm"
124+msgstr "സ്ഥിരീകരിക്കുക"
125+
126+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
127+msgid "Type or say a command"
128+msgstr "ഒരു ആജ്ഞ പറയുകയോ ടൈപ്പുകയോ ചെയ്യുക"
129+
130+#: Hud/Hud.qml:84
131+msgid "Loading. Please Wait..."
132+msgstr "വരുന്നു. ദയവായി കാത്തിരിക്കുക..."
133+
134+#: Hud/Hud.qml:89
135+msgid "Speak Now..."
136+msgstr "ഇപ്പോള്‍ സംസാരിക്കുക..."
137+
138+#: Hud/Hud.qml:94
139+msgid "Speaking..."
140+msgstr "സംസാരിക്കുന്നു..."
141+
142+#: Notifications/NotificationMenuItemFactory.qml:89
143+msgid "Show password"
144+msgstr "രഹസ്യവാക്ക് കാണിക്കുക"
145+
146+#: Panel/SearchIndicator.qml:27
147+msgid "Search"
148+msgstr "തിരയുക"
149+
150+#: plugins/Unity/Launcher/launcheritem.cpp:43
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Lock to Launcher"
153+msgstr "വിക്ഷേപികയില്‍ സ്ഥിരപ്പെടുത്തുക"
154+
155+#: plugins/Unity/Launcher/launcheritem.cpp:73
156+msgid "Unlock from Launcher"
157+msgstr "വിക്ഷേപികാ സ്ഥിരപ്പെടുത്തല്‍ ഒഴിവാക്കുക"
158+
159+#: Shell.qml:439
160+#, qt-format
161+msgid "Please enter %1"
162+msgstr "ദയവായി %1 നല്‍കുക"
po/my.po+23−103
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-09 11:35+0000\n"
1212"Last-Translator: Pyae Sone <Unknown>\n"
1313"Language-Team: Burmese <my@li.org>\n"
@@ -15,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "ဖုန်း"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "ကင်မရာ"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "ဓာတ်ပုံသိမ်းထားသည့်နေရာ"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Browser"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "Twitter"
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 "Notepad"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "ပြက္ခဒိန်"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "မီဒီယာဖွင့်စက်"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "မြေပုံ"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "ဝီကီပီဒီးယား"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr "မိတ်ဆက်ကိုကျော်မည်"
9224
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:341
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "မကြာသေးခင်က ရှာဖွေခြင်း"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr "ဒီဟာကိုအမှတ်ပေးမည်"
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr "(%1)"
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr "ဒီဟာကိုအမှတ်ပေးမည်"
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr "ပို့မည်"
172102msgid "Comments:"
173103msgstr "မှတ်ချက်များ-"
174104
175−#: Greeter/Lockscreen.qml:142
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -205,34 +135,24 @@ msgstr "ယခုပြောပါ"
205135msgid "Speaking..."
206136msgstr "ပြောနေသည်"
207137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208142#: Panel/SearchIndicator.qml:27
209143msgid "Search"
210144msgstr "ရှာဖွေ"
211145
212−#: plugins/Unity/scope.cpp:398
213−msgid "Sorry, there is nothing that matches your search."
214−msgstr "ဆောရီး၊ သင်၏ရှာဖွေမူနှင့်တူညီတာဘာမှမရှိပါ။"
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
149+msgstr ""
215150
216−#: plugins/Unity/showallfilteroption.cpp:41
217−msgid "All"
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
218153msgstr ""
219154
220−#: Shell.qml:438
155+#: Shell.qml:439
221156#, qt-format
222157msgid "Please enter %1"
223158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "တေးဂီတ"
227−
228−#~ msgid "Videos"
229−#~ msgstr "ဗီဒီယိုများ"
230−
231−#~ msgid "New Releases"
232−#~ msgstr "အသစ်ထွက်ရှိသော"
233−
234−#~ msgid "Recent"
235−#~ msgstr "မကြာသေးခင်က"
236−
237−#~ msgid "Popular Online"
238−#~ msgstr "အွန်လိုင်းတွင်ပေါ်ပြူလာဖြစ်သော"
po/nb.po+23−94
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Telefon"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Kamera"
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 "Vær"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Notisblokk"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Kalender"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr ""
9224
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:341
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "Siste søk"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:142
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -205,25 +135,24 @@ msgstr "Snakk nå …"
205135msgid "Speaking..."
206136msgstr "Snakker …"
207137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208142#: Panel/SearchIndicator.qml:27
209143msgid "Search"
210144msgstr "Søk"
211145
212−#: plugins/Unity/scope.cpp:398
213−msgid "Sorry, there is nothing that matches your search."
214−msgstr "Søket ga ingen treff."
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
149+msgstr ""
215150
216−#: plugins/Unity/showallfilteroption.cpp:41
217−msgid "All"
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
218153msgstr ""
219154
220−#: Shell.qml:438
155+#: Shell.qml:439
221156#, qt-format
222157msgid "Please enter %1"
223158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "Musikk"
227−
228−#~ msgid "Videos"
229−#~ msgstr "Videoer"
po/nl.po+23−94
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr ""
9224
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:341
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "Recente zoekopdrachten"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:142
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -205,25 +135,24 @@ msgstr "Nu inspreken…"
205135msgid "Speaking..."
206136msgstr "Inspreken…"
207137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208142#: Panel/SearchIndicator.qml:27
209143msgid "Search"
210144msgstr "Zoeken"
211145
212−#: plugins/Unity/scope.cpp:398
213−msgid "Sorry, there is nothing that matches your search."
214−msgstr "Er is helaas niets dat met uw zoekopdracht overeenkomt."
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
149+msgstr ""
215150
216−#: plugins/Unity/showallfilteroption.cpp:41
217−msgid "All"
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
218153msgstr ""
219154
220−#: Shell.qml:438
155+#: Shell.qml:439
221156#, qt-format
222157msgid "Please enter %1"
223158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "Muziek"
227−
228−#~ msgid "Videos"
229−#~ msgstr "Video's"
po/pl.po+24−89
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-13 13:44+0000\n"
1212"Last-Translator: GTriderXC <gtriderxc@yahoo.com>\n"
1313"Language-Team: Polish <pl@li.org>\n"
@@ -16,78 +16,10 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
1818"|| n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-10-14 05:47+0000\n"
20−"X-Generator: Launchpad (build 16799)\n"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20+"X-Generator: Launchpad (build 16856)\n"
2121
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr "Telefon"
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr "Aparat"
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr "Galeria"
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr "Facebook"
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr "Internet"
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 "Pogoda"
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr "Notatki"
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr "Kalendarz"
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr "Odtwarzacz multimediów"
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 "Wikipedia"
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr "YouTube"
89−
90−#: Components/EdgeDemoOverlay.qml:149
22+#: Components/EdgeDemoOverlay.qml:151
9123msgid "Skip intro"
9224msgstr "Pomiń intro"
9325
@@ -137,20 +69,22 @@ msgstr ""
13769"Polecenia aktywatorów krawędzi ekranu zostały opanowane<br><br>Dotknij "
13870"gdziekolwiek aby kontynuować"
13971
140−#: Components/PageHeader.qml:341
72+#: Components/PageHeader.qml:364
14173msgid "Recent searches"
14274msgstr "Ostatnie wyszukiwania"
14375
144−#. TRANSLATORS: Number of persons who rated this app
76+#: Dash/Apps/AppPreview.qml:135
77+msgid "Rate this"
78+msgstr "Oceń to"
79+
14580#. TRANSLATORS: Number of persons who rated this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
81+#: Dash/Previews/Header.qml:93
14782#, qt-format
14883msgid "(%1)"
14984msgstr "(%1)"
15085
151−#. TRANSLATORS: Number of persons who wrote reviews for this app
15286#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
153−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
87+#: Dash/Previews/Header.qml:105
15488#, qt-format
15589msgid "%1 review"
15690msgid_plural "%1 reviews"
@@ -158,10 +92,6 @@ msgstr[0] "%1 opinia"
15892msgstr[1] "%1 opinie"
15993msgstr[2] "%1 opinii"
16094
161−#: Dash/Apps/AppPreview.qml:126
162−msgid "Rate this"
163−msgstr "Oceń to"
164−
16595#: Dash/Previews/Reviews.qml:74
16696msgid "Add a review"
16797msgstr "Dodaj recenzję"
@@ -178,7 +108,7 @@ msgstr "Wyślij"
178108msgid "Comments:"
179109msgstr "Komentarze:"
180110
181−#: Greeter/Lockscreen.qml:142
111+#: Greeter/Lockscreen.qml:149
182112msgid "Emergency Call"
183113msgstr "Telefon ratunkowy"
184114
@@ -211,19 +141,24 @@ msgstr "Mów teraz..."
211141msgid "Speaking..."
212142msgstr "Rozpoznanie..."
213143
144+#: Notifications/NotificationMenuItemFactory.qml:89
145+msgid "Show password"
146+msgstr ""
147+
214148#: Panel/SearchIndicator.qml:27
215149msgid "Search"
216150msgstr "Szukaj"
217151
218−#: plugins/Unity/scope.cpp:398
219−msgid "Sorry, there is nothing that matches your search."
220−msgstr "Nie znaleziono pasujących wyników."
152+#: plugins/Unity/Launcher/launcheritem.cpp:43
153+#: plugins/Unity/Launcher/launcheritem.cpp:73
154+msgid "Lock to Launcher"
155+msgstr ""
221156
222−#: plugins/Unity/showallfilteroption.cpp:41
223−msgid "All"
224−msgstr "Wszystko"
157+#: plugins/Unity/Launcher/launcheritem.cpp:73
158+msgid "Unlock from Launcher"
159+msgstr ""
225160
226−#: Shell.qml:438
161+#: Shell.qml:439
227162#, qt-format
228163msgid "Please enter %1"
229164msgstr "Wprowadź %1"
po/pt_BR.po+23−109
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-01 13:05+0000\n"
1212"Last-Translator: Rafael Neri <Unknown>\n"
1313"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
@@ -15,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Telefone"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Câmera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galeria"
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 "Clima"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Bloco de notas"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Calendário"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Media Player"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Mapa"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "Wikipédia"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr "Pular introdução"
9224
@@ -134,30 +66,28 @@ msgid ""
13466"phone<br><br>Tap anywhere to start"
13567msgstr ""
13668
137−#: Components/PageHeader.qml:341
69+#: Components/PageHeader.qml:364
13870msgid "Recent searches"
13971msgstr "Pesquisas recentes"
14072
141−#. TRANSLATORS: Number of persons who rated this app
73+#: Dash/Apps/AppPreview.qml:135
74+msgid "Rate this"
75+msgstr "Avaliar isto"
76+
14277#. TRANSLATORS: Number of persons who rated this app/video/whatever
143−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
78+#: Dash/Previews/Header.qml:93
14479#, qt-format
14580msgid "(%1)"
14681msgstr "(%1)"
14782
148−#. TRANSLATORS: Number of persons who wrote reviews for this app
14983#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
150−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
84+#: Dash/Previews/Header.qml:105
15185#, qt-format
15286msgid "%1 review"
15387msgid_plural "%1 reviews"
15488msgstr[0] "%1 análise"
15589msgstr[1] "%1 análises"
15690
157−#: Dash/Apps/AppPreview.qml:126
158−msgid "Rate this"
159−msgstr "Avaliar isto"
160−
16191#: Dash/Previews/Reviews.qml:74
16292msgid "Add a review"
16393msgstr "Adicionar uma análise"
@@ -174,7 +104,7 @@ msgstr "Enviar"
174104msgid "Comments:"
175105msgstr "Comentários:"
176106
177−#: Greeter/Lockscreen.qml:142
107+#: Greeter/Lockscreen.qml:149
178108msgid "Emergency Call"
179109msgstr "Chamada de emergência"
180110
@@ -207,40 +137,24 @@ msgstr "Fale agora..."
207137msgid "Speaking..."
208138msgstr "Falando..."
209139
140+#: Notifications/NotificationMenuItemFactory.qml:89
141+msgid "Show password"
142+msgstr ""
143+
210144#: Panel/SearchIndicator.qml:27
211145msgid "Search"
212146msgstr "Pesquisar"
213147
214−#: plugins/Unity/scope.cpp:398
215−msgid "Sorry, there is nothing that matches your search."
216−msgstr "Desculpe, não há nada que corresponda à sua pesquisa."
148+#: plugins/Unity/Launcher/launcheritem.cpp:43
149+#: plugins/Unity/Launcher/launcheritem.cpp:73
150+msgid "Lock to Launcher"
151+msgstr ""
217152
218−#: plugins/Unity/showallfilteroption.cpp:41
219−msgid "All"
153+#: plugins/Unity/Launcher/launcheritem.cpp:73
154+msgid "Unlock from Launcher"
220155msgstr ""
221156
222−#: Shell.qml:438
157+#: Shell.qml:439
223158#, qt-format
224159msgid "Please enter %1"
225160msgstr "Por favor, digite %1"
226−
227−#~ msgid "Music"
228−#~ msgstr "Músicas"
229−
230−#~ msgid "Videos"
231−#~ msgstr "Vídeos"
232−
233−#~ msgid "New Releases"
234−#~ msgstr "Lançamentos"
235−
236−#~ msgid "Recent"
237−#~ msgstr "Recente"
238−
239−#~ msgid "Featured"
240−#~ msgstr "Em destaque"
241−
242−#~ msgid "Top Charting"
243−#~ msgstr "Top gráficos"
244−
245−#~ msgid "Popular Online"
246−#~ msgstr "Popular Online"
po/ro.po+22−94
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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,78 +16,10 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 "
1818"== 0) && (n != 0))) ? 2: 1));\n"
19−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
20−"X-Generator: Launchpad (build 16799)\n"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20+"X-Generator: Launchpad (build 16856)\n"
2121
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr ""
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr ""
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr ""
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr ""
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr ""
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr ""
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr ""
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr ""
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr ""
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr ""
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr ""
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr ""
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr ""
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr ""
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr ""
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr ""
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr ""
89−
90−#: Components/EdgeDemoOverlay.qml:149
22+#: Components/EdgeDemoOverlay.qml:151
9123msgid "Skip intro"
9224msgstr ""
9325
@@ -133,30 +65,28 @@ msgid ""
13365"phone<br><br>Tap anywhere to start"
13466msgstr ""
13567
136−#: Components/PageHeader.qml:341
68+#: Components/PageHeader.qml:364
13769msgid "Recent searches"
13870msgstr "Căutări recente"
13971
140−#. TRANSLATORS: Number of persons who rated this app
72+#: Dash/Apps/AppPreview.qml:135
73+msgid "Rate this"
74+msgstr ""
75+
14176#. TRANSLATORS: Number of persons who rated this app/video/whatever
142−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
77+#: Dash/Previews/Header.qml:93
14378#, qt-format
14479msgid "(%1)"
14580msgstr ""
14681
147−#. TRANSLATORS: Number of persons who wrote reviews for this app
14882#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
149−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
83+#: Dash/Previews/Header.qml:105
15084#, qt-format
15185msgid "%1 review"
15286msgid_plural "%1 reviews"
15387msgstr[0] ""
15488msgstr[1] ""
15589
156−#: Dash/Apps/AppPreview.qml:126
157−msgid "Rate this"
158−msgstr ""
159−
16090#: Dash/Previews/Reviews.qml:74
16191msgid "Add a review"
16292msgstr ""
@@ -173,7 +103,7 @@ msgstr ""
173103msgid "Comments:"
174104msgstr ""
175105
176−#: Greeter/Lockscreen.qml:142
106+#: Greeter/Lockscreen.qml:149
177107msgid "Emergency Call"
178108msgstr ""
179109
@@ -206,26 +136,24 @@ msgstr "Vorbiți acum..."
206136msgid "Speaking..."
207137msgstr "Vorbire..."
208138
139+#: Notifications/NotificationMenuItemFactory.qml:89
140+msgid "Show password"
141+msgstr ""
142+
209143#: Panel/SearchIndicator.qml:27
210144msgid "Search"
211145msgstr "Căutare"
212146
213−#: plugins/Unity/scope.cpp:398
214−msgid "Sorry, there is nothing that matches your search."
147+#: plugins/Unity/Launcher/launcheritem.cpp:43
148+#: plugins/Unity/Launcher/launcheritem.cpp:73
149+msgid "Lock to Launcher"
215150msgstr ""
216−"Ne pare rău, nu este nimic care se potrivește căutării dumneavoastră."
217151
218−#: plugins/Unity/showallfilteroption.cpp:41
219−msgid "All"
152+#: plugins/Unity/Launcher/launcheritem.cpp:73
153+msgid "Unlock from Launcher"
220154msgstr ""
221155
222−#: Shell.qml:438
156+#: Shell.qml:439
223157#, qt-format
224158msgid "Please enter %1"
225159msgstr ""
226−
227−#~ msgid "Music"
228−#~ msgstr "Muzică"
229−
230−#~ msgid "Videos"
231−#~ msgstr "Video"
po/ru.po+23−109
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-01 05:55+0000\n"
1212"Last-Translator: Zonov Roman <Unknown>\n"
1313"Language-Team: Russian <ru@li.org>\n"
@@ -16,78 +16,10 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
20−"X-Generator: Launchpad (build 16799)\n"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20+"X-Generator: Launchpad (build 16856)\n"
2121
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr "Телефон"
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr "Камера"
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr "Галерея"
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr "Facebook"
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr "Обозреватель"
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 "Погода"
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr "Блокнот"
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr "Календарь"
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr "Медиапроигрыватель"
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr "Evernote"
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr "Карты"
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 "Википедия"
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr "YouTube"
89−
90−#: Components/EdgeDemoOverlay.qml:149
22+#: Components/EdgeDemoOverlay.qml:151
9123msgid "Skip intro"
9224msgstr "Пропустить обучение"
9325
@@ -138,29 +70,27 @@ msgid ""
13870"phone<br><br>Tap anywhere to start"
13971msgstr ""
14072
141−#: Components/PageHeader.qml:341
73+#: Components/PageHeader.qml:364
14274msgid "Recent searches"
14375msgstr "Последние поисковые запросы"
14476
145−#. TRANSLATORS: Number of persons who rated this app
77+#: Dash/Apps/AppPreview.qml:135
78+msgid "Rate this"
79+msgstr "Оцените это"
80+
14681#. TRANSLATORS: Number of persons who rated this app/video/whatever
147−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
82+#: Dash/Previews/Header.qml:93
14883#, qt-format
14984msgid "(%1)"
15085msgstr "(%1)"
15186
152−#. TRANSLATORS: Number of persons who wrote reviews for this app
15387#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
154−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
88+#: Dash/Previews/Header.qml:105
15589#, qt-format
15690msgid "%1 review"
15791msgid_plural "%1 reviews"
15892msgstr[0] "%1 отзыв"
15993
160−#: Dash/Apps/AppPreview.qml:126
161−msgid "Rate this"
162−msgstr "Оцените это"
163−
16494#: Dash/Previews/Reviews.qml:74
16595msgid "Add a review"
16696msgstr "Добавьте отзыв"
@@ -177,7 +107,7 @@ msgstr "Отправить"
177107msgid "Comments:"
178108msgstr "Комментарии:"
179109
180−#: Greeter/Lockscreen.qml:142
110+#: Greeter/Lockscreen.qml:149
181111msgid "Emergency Call"
182112msgstr "Экстренный вызов"
183113
@@ -210,40 +140,24 @@ msgstr "Говорите..."
210140msgid "Speaking..."
211141msgstr "Говорите..."
212142
143+#: Notifications/NotificationMenuItemFactory.qml:89
144+msgid "Show password"
145+msgstr ""
146+
213147#: Panel/SearchIndicator.qml:27
214148msgid "Search"
215149msgstr "Поиск"
216150
217−#: plugins/Unity/scope.cpp:398
218−msgid "Sorry, there is nothing that matches your search."
219−msgstr "Извините, поиск не дал результатов."
151+#: plugins/Unity/Launcher/launcheritem.cpp:43
152+#: plugins/Unity/Launcher/launcheritem.cpp:73
153+msgid "Lock to Launcher"
154+msgstr ""
220155
221−#: plugins/Unity/showallfilteroption.cpp:41
222−msgid "All"
156+#: plugins/Unity/Launcher/launcheritem.cpp:73
157+msgid "Unlock from Launcher"
223158msgstr ""
224159
225−#: Shell.qml:438
160+#: Shell.qml:439
226161#, qt-format
227162msgid "Please enter %1"
228163msgstr "Пожалуйста, введите %1"
229−
230−#~ msgid "New Releases"
231−#~ msgstr "Новые релизы"
232−
233−#~ msgid "Music"
234−#~ msgstr "Музыка"
235−
236−#~ msgid "Videos"
237−#~ msgstr "Видео"
238−
239−#~ msgid "Recent"
240−#~ msgstr "Недавние"
241−
242−#~ msgid "Top Charting"
243−#~ msgstr "Наиболее популярное"
244−
245−#~ msgid "Popular Online"
246−#~ msgstr "Популярное в Интернете"
247−
248−#~ msgid "Featured"
249−#~ msgstr "Рекомендованное"
po/shn.po+22−87
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-07 11:46+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Shan <shn@li.org>\n"
@@ -15,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=(n == 1) ? 0 : 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr ""
9224
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:341
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr ""
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:142
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -205,19 +135,24 @@ msgstr ""
205135msgid "Speaking..."
206136msgstr ""
207137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208142#: Panel/SearchIndicator.qml:27
209143msgid "Search"
210144msgstr ""
211145
212−#: plugins/Unity/scope.cpp:398
213−msgid "Sorry, there is nothing that matches your search."
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
214149msgstr ""
215150
216−#: plugins/Unity/showallfilteroption.cpp:41
217−msgid "All"
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
218153msgstr ""
219154
220−#: Shell.qml:438
155+#: Shell.qml:439
221156#, qt-format
222157msgid "Please enter %1"
223158msgstr ""
po/si.po+22−87
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr ""
9224
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:341
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr ""
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:142
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -205,19 +135,24 @@ msgstr ""
205135msgid "Speaking..."
206136msgstr ""
207137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208142#: Panel/SearchIndicator.qml:27
209143msgid "Search"
210144msgstr ""
211145
212−#: plugins/Unity/scope.cpp:398
213−msgid "Sorry, there is nothing that matches your search."
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
214149msgstr ""
215150
216−#: plugins/Unity/showallfilteroption.cpp:41
217−msgid "All"
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
218153msgstr ""
219154
220−#: Shell.qml:438
155+#: Shell.qml:439
221156#, qt-format
222157msgid "Please enter %1"
223158msgstr ""
po/sl.po+25−111
@@ -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-10-11 12:12+0200\n"
11−"PO-Revision-Date: 2013-10-02 10:55+0000\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2013-11-30 08:20+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,78 +16,10 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || "
1818"n%100==4 ? 3 : 0);\n"
19−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
20−"X-Generator: Launchpad (build 16799)\n"
19+"X-Launchpad-Export-Date: 2013-12-01 05:47+0000\n"
20+"X-Generator: Launchpad (build 16856)\n"
2121
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr "Telefon"
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr "Fotoaparat"
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr "Galerija"
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr "Facebook"
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr "Brskalnik"
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 "Vreme"
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr "Beležnica"
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr "Koledar"
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr "Predvajalnik predstavnosti"
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr "Evernote"
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr "Zemljevid"
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 "Wikipedija"
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr "YouTube"
89−
90−#: Components/EdgeDemoOverlay.qml:149
22+#: Components/EdgeDemoOverlay.qml:151
9123msgid "Skip intro"
9224msgstr "Preskoči uvod"
9325
@@ -137,20 +69,22 @@ msgstr ""
13769"Sedaj ste osvojili poteze robov ter lahko začnete uporabljati "
13870"telefon<br><br>Tapnite kjerkoli na začetek"
13971
140−#: Components/PageHeader.qml:341
72+#: Components/PageHeader.qml:364
14173msgid "Recent searches"
14274msgstr "Nedavna iskanja"
14375
144−#. TRANSLATORS: Number of persons who rated this app
76+#: Dash/Apps/AppPreview.qml:135
77+msgid "Rate this"
78+msgstr "Ocenite"
79+
14580#. TRANSLATORS: Number of persons who rated this app/video/whatever
146−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
81+#: Dash/Previews/Header.qml:93
14782#, qt-format
14883msgid "(%1)"
14984msgstr "(%1)"
15085
151−#. TRANSLATORS: Number of persons who wrote reviews for this app
15286#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
153−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
87+#: Dash/Previews/Header.qml:105
15488#, qt-format
15589msgid "%1 review"
15690msgid_plural "%1 reviews"
@@ -159,10 +93,6 @@ msgstr[1] "%1 ocena"
15993msgstr[2] "%1 oceni"
16094msgstr[3] "%1 ocene"
16195
162−#: Dash/Apps/AppPreview.qml:126
163−msgid "Rate this"
164−msgstr "Ocenite"
165−
16696#: Dash/Previews/Reviews.qml:74
16797msgid "Add a review"
16898msgstr "Dodaj oceno"
@@ -179,7 +109,7 @@ msgstr "Pošlji"
179109msgid "Comments:"
180110msgstr "Opombe:"
181111
182−#: Greeter/Lockscreen.qml:142
112+#: Greeter/Lockscreen.qml:149
183113msgid "Emergency Call"
184114msgstr "Klic v sili"
185115
@@ -212,40 +142,24 @@ msgstr "Govorite zdaj ..."
212142msgid "Speaking..."
213143msgstr "Govorjenje ..."
214144
145+#: Notifications/NotificationMenuItemFactory.qml:89
146+msgid "Show password"
147+msgstr "Pokaži geslo"
148+
215149#: Panel/SearchIndicator.qml:27
216150msgid "Search"
217151msgstr "Iskanje"
218152
219−#: plugins/Unity/scope.cpp:398
220−msgid "Sorry, there is nothing that matches your search."
221−msgstr "Nič se ne ujema z vašim iskalnim nizom."
153+#: plugins/Unity/Launcher/launcheritem.cpp:43
154+#: plugins/Unity/Launcher/launcheritem.cpp:73
155+msgid "Lock to Launcher"
156+msgstr "Zakleni na zaganjalnik"
222157
223−#: plugins/Unity/showallfilteroption.cpp:41
224−msgid "All"
225−msgstr "Vse"
158+#: plugins/Unity/Launcher/launcheritem.cpp:73
159+msgid "Unlock from Launcher"
160+msgstr "Odkleni z zaganjalnika"
226161
227−#: Shell.qml:438
162+#: Shell.qml:439
228163#, qt-format
229164msgid "Please enter %1"
230165msgstr "Vnesite %1"
231−
232−#~ msgid "Music"
233−#~ msgstr "Glasba"
234−
235−#~ msgid "Videos"
236−#~ msgstr "Videi"
237−
238−#~ msgid "New Releases"
239−#~ msgstr "Nove izdaje"
240−
241−#~ msgid "Top Charting"
242−#~ msgstr "Najvišje na lestvici"
243−
244−#~ msgid "Featured"
245−#~ msgstr "Predstavljeno"
246−
247−#~ msgid "Recent"
248−#~ msgstr "Nedavno"
249−
250−#~ msgid "Popular Online"
251−#~ msgstr "Priljubljeno na spletu"
po/sr.po+23−94
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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,78 +16,10 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
20−"X-Generator: Launchpad (build 16799)\n"
19+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
20+"X-Generator: Launchpad (build 16856)\n"
2121
22−#: Applications/applications.js:23
23−msgid "Phone"
24−msgstr ""
25−
26−#: Applications/applications.js:29
27−msgid "Camera"
28−msgstr ""
29−
30−#: Applications/applications.js:35
31−msgid "Gallery"
32−msgstr ""
33−
34−#: Applications/applications.js:40
35−msgid "Facebook"
36−msgstr ""
37−
38−#: Applications/applications.js:46
39−msgid "Browser"
40−msgstr ""
41−
42−#: Applications/applications.js:51
43−msgid "Twitter"
44−msgstr ""
45−
46−#: Applications/applications.js:57
47−msgid "GMail"
48−msgstr ""
49−
50−#: Applications/applications.js:62
51−msgid "Weather"
52−msgstr ""
53−
54−#: Applications/applications.js:68
55−msgid "Notepad"
56−msgstr ""
57−
58−#: Applications/applications.js:74
59−msgid "Calendar"
60−msgstr ""
61−
62−#: Applications/applications.js:80
63−msgid "Media Player"
64−msgstr ""
65−
66−#: Applications/applications.js:86
67−msgid "Evernote"
68−msgstr ""
69−
70−#: Applications/applications.js:91
71−msgid "Map"
72−msgstr ""
73−
74−#: Applications/applications.js:96
75−msgid "Pinterest"
76−msgstr ""
77−
78−#: Applications/applications.js:101
79−msgid "SoundCloud"
80−msgstr ""
81−
82−#: Applications/applications.js:106
83−msgid "Wikipedia"
84−msgstr ""
85−
86−#: Applications/applications.js:111
87−msgid "YouTube"
88−msgstr ""
89−
90−#: Components/EdgeDemoOverlay.qml:149
22+#: Components/EdgeDemoOverlay.qml:151
9123msgid "Skip intro"
9224msgstr ""
9325
@@ -133,30 +65,28 @@ msgid ""
13365"phone<br><br>Tap anywhere to start"
13466msgstr ""
13567
136−#: Components/PageHeader.qml:341
68+#: Components/PageHeader.qml:364
13769msgid "Recent searches"
13870msgstr "Скорашње претраге"
13971
140−#. TRANSLATORS: Number of persons who rated this app
72+#: Dash/Apps/AppPreview.qml:135
73+msgid "Rate this"
74+msgstr ""
75+
14176#. TRANSLATORS: Number of persons who rated this app/video/whatever
142−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
77+#: Dash/Previews/Header.qml:93
14378#, qt-format
14479msgid "(%1)"
14580msgstr ""
14681
147−#. TRANSLATORS: Number of persons who wrote reviews for this app
14882#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
149−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
83+#: Dash/Previews/Header.qml:105
15084#, qt-format
15185msgid "%1 review"
15286msgid_plural "%1 reviews"
15387msgstr[0] ""
15488msgstr[1] ""
15589
156−#: Dash/Apps/AppPreview.qml:126
157−msgid "Rate this"
158−msgstr ""
159−
16090#: Dash/Previews/Reviews.qml:74
16191msgid "Add a review"
16292msgstr ""
@@ -173,7 +103,7 @@ msgstr ""
173103msgid "Comments:"
174104msgstr ""
175105
176−#: Greeter/Lockscreen.qml:142
106+#: Greeter/Lockscreen.qml:149
177107msgid "Emergency Call"
178108msgstr ""
179109
@@ -206,25 +136,24 @@ msgstr "Изговорите сада..."
206136msgid "Speaking..."
207137msgstr "Говор..."
208138
139+#: Notifications/NotificationMenuItemFactory.qml:89
140+msgid "Show password"
141+msgstr ""
142+
209143#: Panel/SearchIndicator.qml:27
210144msgid "Search"
211145msgstr "Претрага"
212146
213−#: plugins/Unity/scope.cpp:398
214−msgid "Sorry, there is nothing that matches your search."
215−msgstr "Нажалост, претрага није наишла на икакво подударање."
147+#: plugins/Unity/Launcher/launcheritem.cpp:43
148+#: plugins/Unity/Launcher/launcheritem.cpp:73
149+msgid "Lock to Launcher"
150+msgstr ""
216151
217−#: plugins/Unity/showallfilteroption.cpp:41
218−msgid "All"
152+#: plugins/Unity/Launcher/launcheritem.cpp:73
153+msgid "Unlock from Launcher"
219154msgstr ""
220155
221−#: Shell.qml:438
156+#: Shell.qml:439
222157#, qt-format
223158msgid "Please enter %1"
224159msgstr ""
225−
226−#~ msgid "Music"
227−#~ msgstr "Музика"
228−
229−#~ msgid "Videos"
230−#~ msgstr "Видео"
po/sv.po+22−87
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr ""
9224
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:341
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr ""
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:142
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -205,19 +135,24 @@ msgstr ""
205135msgid "Speaking..."
206136msgstr ""
207137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208142#: Panel/SearchIndicator.qml:27
209143msgid "Search"
210144msgstr ""
211145
212−#: plugins/Unity/scope.cpp:398
213−msgid "Sorry, there is nothing that matches your search."
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
214149msgstr ""
215150
216−#: plugins/Unity/showallfilteroption.cpp:41
217−msgid "All"
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
218153msgstr ""
219154
220−#: Shell.qml:438
155+#: Shell.qml:439
221156#, qt-format
222157msgid "Please enter %1"
223158msgstr ""
po/ta.ponew file+164
@@ -0,0 +1,164 @@
1+# Tamil 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+# துளசி <Thangamani Arun<thangam.arunx@gmail.com>>, 2013.
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-11-29 09:21+0100\n"
11+"PO-Revision-Date: 2013-10-24 11:36+0000\n"
12+"Last-Translator: Thangamani Arun - தங்கமணி அருண் <thangam.arunx@gmail.com>\n"
13+"Language-Team: Ubuntu Tamil Team/Free Tamil Computing/Thamizha\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-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
20+"Language: ta\n"
21+
22+#: Components/EdgeDemoOverlay.qml:151
23+msgid "Skip intro"
24+msgstr "அறிமுகத்தை தவிர்"
25+
26+#: Components/EdgeDemo.qml:112
27+msgid "Right edge"
28+msgstr "வலது விளிம்பு"
29+
30+#: Components/EdgeDemo.qml:113
31+msgid "Try swiping from the right edge to unlock the phone"
32+msgstr "தொலைபேசியை திறக்க வலது முனையிலிருந்து தேய்த்து முயற்சி செய்"
33+
34+#: Components/EdgeDemo.qml:144
35+msgid "Top edge"
36+msgstr "மேல் விளிம்பு"
37+
38+#: Components/EdgeDemo.qml:145
39+msgid "Try swiping from the top edge to access the indicators"
40+msgstr "காட்டிகளை அனுக மேல் விளிம்பிலிருந்து தேய்த்து முயற்சி செய்"
41+
42+#: Components/EdgeDemo.qml:170
43+msgid "Close"
44+msgstr "மூடு"
45+
46+#: Components/EdgeDemo.qml:171
47+msgid "Swipe up again to close the settings screen"
48+msgstr "அமைவுகளின் திரையை மூட மறுபடியும் மேலே தேய்க்கவும்"
49+
50+#: Components/EdgeDemo.qml:198
51+msgid "Left edge"
52+msgstr "இடது விளிம்பு"
53+
54+#: Components/EdgeDemo.qml:199
55+msgid "Swipe from the left to reveal the launcher for quick access to apps"
56+msgstr ""
57+"பயன்பாடுகளின் விரைவான அணுகலை பெறத்தேவையான தொடக்கியை இடமிருந்து தேய்த்தால் "
58+"வெளிப்படும்"
59+
60+#: Components/EdgeDemo.qml:226
61+msgid "Well done"
62+msgstr "நன்றாக செய்தீர்கள்"
63+
64+#: Components/EdgeDemo.qml:227
65+msgid ""
66+"You have now mastered the edge gestures and can start using the "
67+"phone<br><br>Tap anywhere to start"
68+msgstr ""
69+"நீங்கள் இப்போது விளிம்பு சைகைகளில் கைதேர்ந்தவர் மற்றும் தொலைபேசி "
70+"பயன்படுத்த தொடங்கவும் <br> <br>தட்டுவதன் மூலம் எங்க வேண்டுமானாலும் "
71+"தொடங்கலாம்."
72+
73+#: Components/PageHeader.qml:364
74+msgid "Recent searches"
75+msgstr "கடையாக தேடப்பட்டவைகள்"
76+
77+#: Dash/Apps/AppPreview.qml:135
78+msgid "Rate this"
79+msgstr "இதை மதிப்பிடு"
80+
81+#. TRANSLATORS: Number of persons who rated this app/video/whatever
82+#: Dash/Previews/Header.qml:93
83+#, qt-format
84+msgid "(%1)"
85+msgstr "(%1)"
86+
87+#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
88+#: Dash/Previews/Header.qml:105
89+#, qt-format
90+msgid "%1 review"
91+msgid_plural "%1 reviews"
92+msgstr[0] "%1 பரிசீலனை"
93+msgstr[1] "%1 பரிசீலனைகள்"
94+
95+#: Dash/Previews/Reviews.qml:74
96+msgid "Add a review"
97+msgstr "ஒரு பரிசீலனையை சேர்"
98+
99+#: Dash/Previews/Reviews.qml:86
100+msgid "Review"
101+msgstr "மறுஆய்வு"
102+
103+#: Dash/Previews/Reviews.qml:121
104+msgid "Send"
105+msgstr "அனுப்பு"
106+
107+#: Dash/Previews/Reviews.qml:139
108+msgid "Comments:"
109+msgstr "கருத்துகள்:"
110+
111+#: Greeter/Lockscreen.qml:149
112+msgid "Emergency Call"
113+msgstr "அவசர அழைப்பு"
114+
115+#: Greeter/PassphraseLockscreen.qml:59
116+#, qt-format
117+msgid "Hello %1"
118+msgstr "வணக்கம் %1"
119+
120+#: Greeter/PassphraseLockscreen.qml:59
121+msgid "Hello"
122+msgstr "வணக்கம்"
123+
124+#: Hud/HudParametrizedActionsPage.qml:132
125+msgid "Confirm"
126+msgstr "உறுதிப்படுத்து"
127+
128+#: Hud/Hud.qml:61 Hud/Hud.qml:99 Hud/Hud.qml:372
129+msgid "Type or say a command"
130+msgstr "ஒரு கட்டளையை உச்சரி அல்லது தட்டச்சுசெய்"
131+
132+#: Hud/Hud.qml:84
133+msgid "Loading. Please Wait..."
134+msgstr "ஏற்றுகிறது. தயைசெய்து காத்திருக்கவும்..."
135+
136+#: Hud/Hud.qml:89
137+msgid "Speak Now..."
138+msgstr "இப்பொது பேசு..."
139+
140+#: Hud/Hud.qml:94
141+msgid "Speaking..."
142+msgstr "பேசுகிறது..."
143+
144+#: Notifications/NotificationMenuItemFactory.qml:89
145+msgid "Show password"
146+msgstr ""
147+
148+#: Panel/SearchIndicator.qml:27
149+msgid "Search"
150+msgstr "தெடு"
151+
152+#: plugins/Unity/Launcher/launcheritem.cpp:43
153+#: plugins/Unity/Launcher/launcheritem.cpp:73
154+msgid "Lock to Launcher"
155+msgstr ""
156+
157+#: plugins/Unity/Launcher/launcheritem.cpp:73
158+msgid "Unlock from Launcher"
159+msgstr ""
160+
161+#: Shell.qml:439
162+#, qt-format
163+msgid "Please enter %1"
164+msgstr "தயவுச்செய்து %1 உள்ளிடு"
po/te.po+22−90
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\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,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr ""
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr ""
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr ""
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr ""
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr ""
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr ""
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr ""
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr ""
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr ""
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr ""
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr ""
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr ""
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr ""
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr ""
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr ""
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr ""
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr ""
9224
@@ -132,30 +64,28 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:341
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr ""
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr ""
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] ""
15387msgstr[1] ""
15488
155−#: Dash/Apps/AppPreview.qml:126
156−msgid "Rate this"
157−msgstr ""
158−
15989#: Dash/Previews/Reviews.qml:74
16090msgid "Add a review"
16191msgstr ""
@@ -172,7 +102,7 @@ msgstr ""
172102msgid "Comments:"
173103msgstr ""
174104
175−#: Greeter/Lockscreen.qml:142
105+#: Greeter/Lockscreen.qml:149
176106msgid "Emergency Call"
177107msgstr ""
178108
@@ -205,22 +135,24 @@ msgstr ""
205135msgid "Speaking..."
206136msgstr ""
207137
138+#: Notifications/NotificationMenuItemFactory.qml:89
139+msgid "Show password"
140+msgstr ""
141+
208142#: Panel/SearchIndicator.qml:27
209143msgid "Search"
210144msgstr ""
211145
212−#: plugins/Unity/scope.cpp:398
213−msgid "Sorry, there is nothing that matches your search."
146+#: plugins/Unity/Launcher/launcheritem.cpp:43
147+#: plugins/Unity/Launcher/launcheritem.cpp:73
148+msgid "Lock to Launcher"
214149msgstr ""
215150
216−#: plugins/Unity/showallfilteroption.cpp:41
217−msgid "All"
151+#: plugins/Unity/Launcher/launcheritem.cpp:73
152+msgid "Unlock from Launcher"
218153msgstr ""
219154
220−#: Shell.qml:438
155+#: Shell.qml:439
221156#, qt-format
222157msgid "Please enter %1"
223158msgstr ""
224−
225−#~ msgid "Music"
226−#~ msgstr "సంగీతం"
po/tr.po+23−109
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-01 13:21+0000\n"
1212"Last-Translator: Volkan Gezer <Unknown>\n"
1313"Language-Team: Turkish <tr@li.org>\n"
@@ -15,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "Telefon"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "Kamera"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr "Galeri"
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "Facebook"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "Tarayıcı"
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 "Hava Durumu"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "Not Defteri"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "Takvim"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "Ortam Oynatıcı"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "Harita"
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 "Vikipedi"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr "İntro'yu geç"
9224
@@ -133,30 +65,28 @@ msgid ""
13365"phone<br><br>Tap anywhere to start"
13466msgstr ""
13567
136−#: Components/PageHeader.qml:341
68+#: Components/PageHeader.qml:364
13769msgid "Recent searches"
13870msgstr "Son Arananlar"
13971
140−#. TRANSLATORS: Number of persons who rated this app
72+#: Dash/Apps/AppPreview.qml:135
73+msgid "Rate this"
74+msgstr "Oyla"
75+
14176#. TRANSLATORS: Number of persons who rated this app/video/whatever
142−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
77+#: Dash/Previews/Header.qml:93
14378#, qt-format
14479msgid "(%1)"
14580msgstr "(%1)"
14681
147−#. TRANSLATORS: Number of persons who wrote reviews for this app
14882#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
149−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
83+#: Dash/Previews/Header.qml:105
15084#, qt-format
15185msgid "%1 review"
15286msgid_plural "%1 reviews"
15387msgstr[0] "%1 inceleme"
15488msgstr[1] "%1 inceleme"
15589
156−#: Dash/Apps/AppPreview.qml:126
157−msgid "Rate this"
158−msgstr "Oyla"
159−
16090#: Dash/Previews/Reviews.qml:74
16191msgid "Add a review"
16292msgstr "Bir inceleme ekle"
@@ -173,7 +103,7 @@ msgstr "Gönder"
173103msgid "Comments:"
174104msgstr "Yorumlar:"
175105
176−#: Greeter/Lockscreen.qml:142
106+#: Greeter/Lockscreen.qml:149
177107msgid "Emergency Call"
178108msgstr "Acil Arama"
179109
@@ -206,40 +136,24 @@ msgstr "Şimdi Konuşun..."
206136msgid "Speaking..."
207137msgstr "Konuşuyor..."
208138
139+#: Notifications/NotificationMenuItemFactory.qml:89
140+msgid "Show password"
141+msgstr ""
142+
209143#: Panel/SearchIndicator.qml:27
210144msgid "Search"
211145msgstr "Ara"
212146
213−#: plugins/Unity/scope.cpp:398
214−msgid "Sorry, there is nothing that matches your search."
215−msgstr "Üzgünüz, aramanızla eşleşen hiçbir şey yok."
147+#: plugins/Unity/Launcher/launcheritem.cpp:43
148+#: plugins/Unity/Launcher/launcheritem.cpp:73
149+msgid "Lock to Launcher"
150+msgstr ""
216151
217−#: plugins/Unity/showallfilteroption.cpp:41
218−msgid "All"
152+#: plugins/Unity/Launcher/launcheritem.cpp:73
153+msgid "Unlock from Launcher"
219154msgstr ""
220155
221−#: Shell.qml:438
156+#: Shell.qml:439
222157#, qt-format
223158msgid "Please enter %1"
224159msgstr "Lütfen %1 girin"
225−
226−#~ msgid "Featured"
227−#~ msgstr "Öne Çıkanlar"
228−
229−#~ msgid "Recent"
230−#~ msgstr "En Son"
231−
232−#~ msgid "Music"
233−#~ msgstr "Müzik"
234−
235−#~ msgid "Popular Online"
236−#~ msgstr "Genellikle Çevrimiçi"
237−
238−#~ msgid "Videos"
239−#~ msgstr "Videolar"
240−
241−#~ msgid "Top Charting"
242−#~ msgstr "En Çok Beğenilenler"
243−
244−#~ msgid "New Releases"
245−#~ msgstr "Yeni Sürümler"
po/ug.po+24−104
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2013-10-11 12:12+0200\n"
10+"POT-Creation-Date: 2013-11-29 09:21+0100\n"
1111"PO-Revision-Date: 2013-10-09 22:38+0000\n"
1212"Last-Translator: Gheyret T.Kenji <Unknown>\n"
1313"Language-Team: Uyghur <ug@li.org>\n"
@@ -15,78 +15,10 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2013-10-13 05:43+0000\n"
19−"X-Generator: Launchpad (build 16799)\n"
18+"X-Launchpad-Export-Date: 2013-11-30 05:33+0000\n"
19+"X-Generator: Launchpad (build 16856)\n"
2020
21−#: Applications/applications.js:23
22−msgid "Phone"
23−msgstr "تېلېفون"
24−
25−#: Applications/applications.js:29
26−msgid "Camera"
27−msgstr "كامېرا"
28−
29−#: Applications/applications.js:35
30−msgid "Gallery"
31−msgstr ""
32−
33−#: Applications/applications.js:40
34−msgid "Facebook"
35−msgstr "فېيىسبۇك(Facebook)"
36−
37−#: Applications/applications.js:46
38−msgid "Browser"
39−msgstr "توركۆرگۈ"
40−
41−#: Applications/applications.js:51
42−msgid "Twitter"
43−msgstr "تىۋىتتېر(Twitter)"
44−
45−#: Applications/applications.js:57
46−msgid "GMail"
47−msgstr "GMail"
48−
49−#: Applications/applications.js:62
50−msgid "Weather"
51−msgstr "ھاۋا رايى"
52−
53−#: Applications/applications.js:68
54−msgid "Notepad"
55−msgstr "خاتىرە دەپتەر(Notepad)"
56−
57−#: Applications/applications.js:74
58−msgid "Calendar"
59−msgstr "يىلنامە"
60−
61−#: Applications/applications.js:80
62−msgid "Media Player"
63−msgstr "ۋاسىتە قويغۇ"
64−
65−#: Applications/applications.js:86
66−msgid "Evernote"
67−msgstr "Evernote"
68−
69−#: Applications/applications.js:91
70−msgid "Map"
71−msgstr "خەرىتە"
72−
73−#: Applications/applications.js:96
74−msgid "Pinterest"
75−msgstr "Pinterest"
76−
77−#: Applications/applications.js:101
78−msgid "SoundCloud"
79−msgstr "SoundCloud"
80−
81−#: Applications/applications.js:106
82−msgid "Wikipedia"
83−msgstr "ۋىكىپېدىيە"
84−
85−#: Applications/applications.js:111
86−msgid "YouTube"
87−msgstr "YouTube"
88−
89−#: Components/EdgeDemoOverlay.qml:149
21+#: Components/EdgeDemoOverlay.qml:151
9022msgid "Skip intro"
9123msgstr ""
9224
@@ -132,29 +64,27 @@ msgid ""
13264"phone<br><br>Tap anywhere to start"
13365msgstr ""
13466
135−#: Components/PageHeader.qml:341
67+#: Components/PageHeader.qml:364
13668msgid "Recent searches"
13769msgstr "يېقىنقى ئىزدەشلەر"
13870
139−#. TRANSLATORS: Number of persons who rated this app
71+#: Dash/Apps/AppPreview.qml:135
72+msgid "Rate this"
73+msgstr ""
74+
14075#. TRANSLATORS: Number of persons who rated this app/video/whatever
141−#: Dash/Apps/AppInfo.qml:73 Dash/Previews/Header.qml:93
76+#: Dash/Previews/Header.qml:93
14277#, qt-format
14378msgid "(%1)"
14479msgstr "(%1)"
14580
146−#. TRANSLATORS: Number of persons who wrote reviews for this app
14781#. TRANSLATORS: Number of persons who wrote reviews for this app/video/whatever
148−#: Dash/Apps/AppInfo.qml:85 Dash/Previews/Header.qml:105
82+#: Dash/Previews/Header.qml:105
14983#, qt-format
15084msgid "%1 review"
15185msgid_plural "%1 reviews"
15286msgstr[0] "%1 باھا"
15387
154−#: Dash/Apps/AppPreview.qml:126
155−msgid "Rate this"
156−msgstr ""
157−
15888#: Dash/Previews/Reviews.qml:74
15989msgid "Add a review"
16090msgstr ""
@@ -171,7 +101,7 @@ msgstr "ئەۋەت"
171101msgid "Comments:"
172102msgstr "ئىنكاس:"
173103
174−#: Greeter/Lockscreen.qml:142
104+#: Greeter/Lockscreen.qml:149
175105msgid "Emergency Call"
176106msgstr ""
177107
@@ -204,34 +134,24 @@ msgstr "ئەمدى سۆزلەڭ…"
204134msgid "Speaking..."
205135msgstr "سۆزلەۋاتىسىز…"
206136
137+#: Notifications/NotificationMenuItemFactory.qml:89
138+msgid "Show password"
139+msgstr ""
140+
207141#: Panel/SearchIndicator.qml:27
208142msgid "Search"
209143msgstr "ئىزدە"
210144
211−#: plugins/Unity/scope.cpp:398
212−msgid "Sorry, there is nothing that matches your search."
213−msgstr "كەچۈرۈڭ، ئىزدىگىنىڭىزگە ماس نەتىجە تېپىلمىدى."
145+#: plugins/Unity/Launcher/launcheritem.cpp:43
146+#: plugins/Unity/Launcher/launcheritem.cpp:73
147+msgid "Lock to Launcher"
148+msgstr ""
214149
215−#: plugins/Unity/showallfilteroption.cpp:41
216−msgid "All"
217−msgstr "ھەممىسى"
150+#: plugins/Unity/Launcher/launcheritem.cpp:73
151+msgid "Unlock from Launcher"
152+msgstr ""
218153
219−#: Shell.qml:438
154+#: Shell.qml:439
220155#, qt-format
221156msgid "Please enter %1"
222157msgstr "%1 نى كىرگۈزۈڭ"
223−
224−#~ msgid "Featured"
225−#~ msgstr "داڭلىق"
226−
227−#~ msgid "Recent"
228−#~ msgstr "يېقىنقى"
229−
230−#~ msgid "New Releases"
231−#~ msgstr "يېڭى ئېلان قىلىنغانلىرى"
232−
233−#~ msgid "Music"
234−#~ msgstr "مۇزىكا"
235−
236−#~ msgid "Videos"
237−#~ msgstr "سىنلار"
po/uk.po+28−112

This diff is too big to show here.

po/unity8.pot+20−85

This diff is too big to show here.

po/xh.po+22−87

This diff is too big to show here.

po/zh_CN.po+23−109

This diff is too big to show here.

po/zh_TW.po+23−94

This diff is too big to show here.

run+6−3

This diff is too big to show here.

run_on_device+25−6

This diff is too big to show here.

tests/autopilot/unity8/__init__.py+46−1

This diff is too big to show here.

tests/autopilot/unity8/process_helpers.pynew file+143

This diff is too big to show here.

tests/autopilot/unity8/shell/emulators/create_interactive_notification.pymode 100755 → 100644

Only the mode changed.

tests/autopilot/unity8/shell/emulators/dash.py+7−17

This diff is too big to show here.

tests/autopilot/unity8/shell/emulators/hud.py+12−4

This diff is too big to show here.

tests/autopilot/unity8/shell/emulators/main_window.py+7−7

This diff is too big to show here.

tests/autopilot/unity8/shell/tests/__init__.py+62−36

This diff is too big to show here.

tests/autopilot/unity8/shell/tests/test_greeter.pynew file+38

This diff is too big to show here.

tests/autopilot/unity8/shell/tests/test_hud.py+11−10

This diff is too big to show here.

tests/autopilot/unity8/shell/tests/test_notifications.py+76−73

This diff is too big to show here.

tests/autopilot/unity8/shell/tests/test_upstart.pynew file+99

This diff is too big to show here.

tests/mocks/AccountsService/CMakeLists.txt+2−2

This diff is too big to show here.

tests/mocks/AccountsService/plugin.cpp+1−1

This diff is too big to show here.

tests/mocks/CMakeLists.txt+6

This diff is too big to show here.

tests/mocks/LightDM/CMakeLists.txt+4−3

This diff is too big to show here.

tests/mocks/LightDM/full/CMakeLists.txt+1−1

This diff is too big to show here.

tests/mocks/LightDM/single-passphrase/CMakeLists.txt+1−1

This diff is too big to show here.

tests/mocks/LightDM/single-pin/CMakeLists.txt+1−1

This diff is too big to show here.

tests/mocks/LightDM/single/CMakeLists.txt+1−1

This diff is too big to show here.

tests/mocks/Powerd/CMakeLists.txt+2−2

This diff is too big to show here.

tests/mocks/QMenuModel/CMakeLists.txt+23

This diff is too big to show here.

plugins/Unity/genericpreview.cpp → tests/mocks/QMenuModel/UnityMenuAction.qmlrenamed+11−12

This diff is too big to show here.

Launcher/QuicklistForegroundStyle.qml → tests/mocks/QMenuModel/actionstateparser.cpprenamed+3−7

This diff is too big to show here.

tests/plugins/Unity/resultstest.h → tests/mocks/QMenuModel/actionstateparser.hrenamed+11−13

This diff is too big to show here.

tests/mocks/QMenuModel/plugin.cppnew file+30

This diff is too big to show here.

plugins/Unity/ratingoptionsmodel.h → tests/mocks/QMenuModel/plugin.hrenamed+11−10

This diff is too big to show here.

tests/mocks/QMenuModel/qmldir+3−1

This diff is too big to show here.

tests/mocks/QMenuModel/unitymenumodel.cppnew file+239

This diff is too big to show here.

tests/mocks/QMenuModel/unitymenumodel.hnew file+96

This diff is too big to show here.

tests/mocks/QtMultimedia/CMakeLists.txtnew file+19

This diff is too big to show here.

tests/mocks/QtMultimedia/audio.cppnew file+107

This diff is too big to show here.

tests/mocks/QtMultimedia/audio.hnew file+78

This diff is too big to show here.

tests/plugins/Unity/signalslisttest.h → tests/mocks/QtMultimedia/plugin.cpprenamed+10−12

This diff is too big to show here.

plugins/Unity/plugin.h → tests/mocks/QtMultimedia/plugin.hrenamed+5−6

This diff is too big to show here.

tests/mocks/QtMultimedia/qmldirnew file+2

This diff is too big to show here.

tests/mocks/Ubuntu/DownloadDaemonListener/CMakeLists.txt+1−1

This diff is too big to show here.

tests/mocks/Unity/Application/CMakeLists.txt+2−2

This diff is too big to show here.

tests/mocks/Unity/CMakeLists.txt+2−3

This diff is too big to show here.

tests/mocks/Unity/Indicators/IndicatorBase.qmlnew file+37

This diff is too big to show here.

tests/mocks/Unity/Indicators/IndicatorWidget.qmlnew file+28

This diff is too big to show here.

tests/mocks/Unity/Indicators/RootActionState.qml+17−9

This diff is too big to show here.

tests/mocks/Unity/Indicators/qmldir+2

This diff is too big to show here.

plugins/Unity/categoryresults.cpp → tests/mocks/Unity/categoryresults.cpprenamed

The content is the same.

plugins/Unity/categoryresults.h → tests/mocks/Unity/categoryresults.hrenamed

The content is the same.

tests/mocks/Unity/fake_preview.cpp+9−1

This diff is too big to show here.

tests/mocks/Unity/fake_preview.h+2

This diff is too big to show here.

tests/mocks/Unity/fake_scope.cpp+22−18

This diff is too big to show here.

tests/mocks/Unity/fake_scope.h+7−2

This diff is too big to show here.

tests/mocks/Unity/fake_unity_plugin.cpp+3

This diff is too big to show here.

plugins/Unity/iconutils.cpp → tests/mocks/Unity/iconutils.cpprenamed+10−10

This diff is too big to show here.

plugins/Unity/iconutils.h → tests/mocks/Unity/iconutils.hrenamed

The content is the same.

tests/mocks/data/applications/camera-app.desktopnew file

No changes to the content.

tests/mocks/libusermetrics/CMakeLists.txt+1−1

This diff is too big to show here.

tests/plugins/CMakeLists.txt+1

This diff is too big to show here.

tests/plugins/LightDM/CMakeLists.txtnew file+24

This diff is too big to show here.

tests/plugins/LightDM/dbus.cppnew file+166

This diff is too big to show here.

plugins/Unity/abstractfilteroption.cpp → tests/plugins/LightDM/greeter.qmlrenamed+5−8

This diff is too big to show here.

tests/plugins/ListViewWithPageHeader/CMakeLists.txt+7

This diff is too big to show here.

tests/plugins/ListViewWithPageHeader/listviewwithpageheadertest.cpp+42

This diff is too big to show here.

tests/plugins/ListViewWithPageHeader/listviewwithpageheadertestsection.cpp+81−1

This diff is too big to show here.

tests/plugins/ListViewWithPageHeader/tst_listviewwithpageheaderqml.qmlnew file+138

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/CMakeLists.txt+21−18

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/DownwardsLauncher.qml+2−10

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/GestureTest.cppnew file+54

This diff is too big to show here.

plugins/Unity/genericpreview.h → tests/plugins/Ubuntu/Gestures/GestureTest.hrenamed+19−19

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/LeftwardsLauncher.qml+5−13

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/RightwardsLauncher.qml+3−10

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/UpwardsLauncher.qml+5−13

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_AxisVelocityCalculator.cpp+3−3

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_DirectionalDragArea.cpp+326−168

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/edgeDragExample.qml → tests/plugins/Ubuntu/Gestures/tst_DirectionalDragArea.qmlrenamed+9−3

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_PressedOutsideNotifier.cppnew file+150

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_PressedOutsideNotifier.qmlnew file+62

This diff is too big to show here.

tests/plugins/Unity/CMakeLists.txt−51

This diff is too big to show here.

tests/plugins/Unity/Indicators/CMakeLists.txt+35−26

This diff is too big to show here.

tests/plugins/Unity/Indicators/indicatorsmanagertest.cpp+1−3

This diff is too big to show here.

tests/plugins/Unity/Indicators/unitymenumodelstacktest.cppnew file+206

This diff is too big to show here.

tests/plugins/Unity/filtersbindingstest.cppdeleted−515

This diff is too big to show here.

tests/plugins/Unity/filtersbindingstest.hdeleted−47

This diff is too big to show here.

tests/plugins/Unity/previewbindingstest.cppdeleted−194

This diff is too big to show here.

tests/plugins/Unity/previewbindingstest.hdeleted−35

This diff is too big to show here.

tests/plugins/Unity/resultstest.cppdeleted−196

This diff is too big to show here.

tests/plugins/Unity/signalslisttest.cppdeleted−57

This diff is too big to show here.

tests/qmltests/CMakeLists.txt+9−6

This diff is too big to show here.

tests/qmltests/Components/tst_DragHandle.cpp+4−5

This diff is too big to show here.

tests/qmltests/Components/tst_EdgeDemoOverlay.qml+2−2

This diff is too big to show here.

tests/qmltests/Components/tst_MathLocal.qmldeleted−91

This diff is too big to show here.

tests/qmltests/Components/tst_PageHeader.qml+44−3

This diff is too big to show here.

tests/qmltests/Components/tst_TimeLocal.qmldeleted−117

This diff is too big to show here.

tests/qmltests/Dash/Apps/tst_AppPreview.qml+3−2

This diff is too big to show here.

tests/qmltests/Dash/Apps/tst_RunningApplicationsGrid.qml+21

This diff is too big to show here.

tests/qmltests/Dash/Movie/tst_MoviePreview.qml+1

This diff is too big to show here.

tests/qmltests/Dash/Music/tst_MusicPreview.qmlnew file+174

This diff is too big to show here.

tests/qmltests/Dash/qml/FakeScopeView.qml+3−68

This diff is too big to show here.

tests/qmltests/Dash/tst_Dash.qml+7−1

This diff is too big to show here.

tests/qmltests/Dash/tst_DashContent.qml+64−3

This diff is too big to show here.

tests/qmltests/Dash/tst_FilterGrids.qml+1−2

This diff is too big to show here.

tests/qmltests/Dash/tst_GenericPreview.qml+1

This diff is too big to show here.

tests/qmltests/Dash/tst_GenericScopeView.qml+220−10

This diff is too big to show here.

tests/qmltests/Dash/tst_ScopeView.qmldeleted−52

This diff is too big to show here.

tests/qmltests/Greeter/tst_Clock.qml+16

This diff is too big to show here.

tests/qmltests/Greeter/tst_Lockscreen.qml+81−15

This diff is too big to show here.

tests/qmltests/Greeter/tst_Phone.qml+23−10

This diff is too big to show here.

tests/qmltests/Greeter/tst_Tablet.qml+11

This diff is too big to show here.

tests/qmltests/Launcher/tst_Launcher.qml+47−11

This diff is too big to show here.

tests/qmltests/Notifications/tst_Notifications.qml+56

This diff is too big to show here.

tests/qmltests/Panel/Indicators/tst_DefaultIndicatorWidget.qmlnew file+97

This diff is too big to show here.

tests/qmltests/Panel/tst_Panel.qml+13−5

This diff is too big to show here.

tests/qmltests/tst_Shell.qml+88−22

This diff is too big to show here.

tests/utils/modules/Unity/Test/UnityTestCase.qml+36

This diff is too big to show here.