on xenial help sign in
Merge lp:~unity-team/unity8/side-stage-redesign
commitb60fb6b7235e14ebcc72344da0adc70081384a70 authorMichał Sawicz <michal.sawicz@canonical.com> dateFri 11 Mar 2016, 22:46 (11 years ago) parentbd3a9b0b379bab
419 files changed+13888−5254
CMakeLists.txt+2−1 CODING+2 cmake/modules/QmlTest.cmake+1−1 data/com.canonical.Unity8.gschema.xml+11 data/unity8-dash.conf+1 debian/changelog+161 debian/control+14−12 debian/tests/autopilot.sh+13 debian/tests/control+5 debian/unity8-common.udev+2 debian/unity8-doc.install+1 doc/devices.conf+30 libs/UbuntuGestures/Timer.h+5 libs/UbuntuGestures/TouchRegistry.cpp+15−10 plugins/AccountsService/AccountsService.cpp+207−336 plugins/AccountsService/AccountsService.h+34−23 plugins/AccountsService/AccountsServiceDBusAdaptor.cpp+11−4 plugins/AccountsService/AccountsServiceDBusAdaptor.h+5−6 plugins/Cursor/Cursor.qmltypes+78 plugins/Dash/AudioProgressBar.qml+1 plugins/Dash/CardCreator.js+69−34 plugins/Dash/CardCreatorCache.qml+3−3 plugins/Dash/plugin.cpp+6−6 plugins/GlobalShortcut/GlobalShortcut.qmltypes+31 plugins/GlobalShortcut/globalshortcutregistry.cpp+4−4 plugins/IntegratedLightDM/liblightdm/CMakeLists.txt+16−3 plugins/IntegratedLightDM/liblightdm/UsersModel.cpp+4−18 plugins/IntegratedLightDM/liblightdm/UsersModel.h+1−1 plugins/IntegratedLightDM/liblightdm/UsersModelPrivate.cpp+43−9 plugins/IntegratedLightDM/liblightdm/UsersModelPrivate.h+15−3 plugins/Ubuntu/Gestures/CMakeLists.txt+1 plugins/Ubuntu/Gestures/DirectionalDragArea.cpp+3 plugins/Ubuntu/Gestures/Gestures.qmltypes+86−45 plugins/Ubuntu/Gestures/TouchGestureArea.cpp+875 plugins/Ubuntu/Gestures/TouchGestureArea.h+229 plugins/Ubuntu/Gestures/plugin.cpp+3 plugins/Unity/Indicators/indicatorsmanager.cpp+2−2 plugins/Unity/Indicators/rootstateparser.h+1 plugins/Unity/InputInfo/InputInfo.qmltypes+71 plugins/Unity/Launcher/desktopfilehandler.cpp+2−2 plugins/Unity/Launcher/launcheritem.cpp+1 plugins/Unity/Launcher/launcheritem.h+1−1 plugins/Unity/Launcher/launchermodel.cpp+15−5 plugins/Unity/Launcher/launchermodel.h+1−1 plugins/Unity/Platform/Platform.qmltypes+20 plugins/Utils/CMakeLists.txt+2 plugins/Utils/deviceconfigparser.cpp+150 plugins/Utils/deviceconfigparser.h+62 plugins/Utils/globalfunctions.cpp+56 plugins/Utils/globalfunctions.h+42 plugins/Utils/plugin.cpp+11 plugins/Utils/timezoneFormatter.cpp+10 plugins/Utils/timezoneFormatter.h+1 plugins/Utils/windowstatestorage.cpp+36−4 plugins/Utils/windowstatestorage.h+3 plugins/Wizard/CMakeLists.txt+7−1 plugins/Wizard/LocalePlugin.cpp+291 plugins/Wizard/LocalePlugin.h+58 plugins/Wizard/PageList.cpp+4−4 plugins/Wizard/Status.cpp+143 plugins/Wizard/Status.h+60 plugins/Wizard/System.cpp+5−4 plugins/Wizard/System.h+3−2 plugins/Wizard/plugin.cpp+7−8 plugins/Wizard/plugin.h+1−2 plugins/Wizard/timezonemodel.cpp+239 plugins/Wizard/timezonemodel.h+80 po/aa.po+11−19 po/am.po+20−22 po/ar.po+17−19 po/ast.po+28−28 po/az.po+17−19 po/be.po+17−19 po/bg.po+11−19 po/bn.po+17−19 po/br.po+32−30 po/bs.po+17−19 po/ca.po+17−19 po/ca@valencia.po+17−19 po/ce.po+11−19 po/ckb.po+11−19 po/cs.po+17−19 po/cy.po+17−19 po/da.po+17−19 po/de.po+24−24 po/el.po+17−19 po/en_AU.po+17−19 po/en_GB.po+20−22 po/eo.po+53−28 po/es.po+20−22 po/eu.po+17−19 po/fa.po+17−19 po/fi.po+20−22 po/fo.po+11−19 po/fr.po+22−22 po/ga.po+17−19 po/gd.po+20−21 po/gl.po+17−19 po/gv.po+11−19 po/he.po+17−19 po/hi.po+11−19 po/hr.po+20−22 po/hu.po+21−23 po/hy.po+17−19 po/ia.po+17−19 po/id.po+17−19 po/is.po+17−19 po/it.po+17−19 po/ja.po+17−19 po/km.po+17−19 po/kn.po+11−19 po/ko.po+20−22 po/ku.po+17−19 po/ky.po+11−19 po/lo.po+11−19 po/lt.po+11−19 po/lv.po+17−19 po/ml.po+11−19 po/mr.po+11−19 po/ms.po+17−19 po/my.po+14−19 po/nb.po+22−22 po/ne.po+11−19 po/nl.po+17−19 po/nn.po+11−19 po/oc.po+11−19 po/or.po+11−19 po/pa.po+17−19 po/pl.po+20−22 po/pt.po+28−30 po/pt_BR.po+17−19 po/ro.po+17−19 po/ru.po+17−19 po/shn.po+11−19 po/si.po+11−19 po/sk.po+179−157 po/sl.po+17−19 po/sq.po+17−19 po/sr.po+68−70 po/sv.po+17−19 po/sw.po+17−19 po/ta.po+11−19 po/te.po+11−19 po/th.po+11−19 po/tr.po+17−19 po/ug.po+17−19 po/uk.po+20−22 po/unity8.pot+34−40 po/ur.po+11−19 po/uz.po+11−19 po/vi.po+11−19 po/wo.po+17−19 po/xh.po+11−19 po/zh_CN.po+20−22 po/zh_HK.po+11−19 po/zh_TW.po+22−24 qml/Components/EdgeBarrier.qml+1−1 qml/Components/Header.qml+1 qml/Components/InputMethod.qml+1−9 qml/Components/Lockscreen.qml+80−94 qml/Components/ModeSwitchWarningDialog.qml+1−1 qml/Components/PassphraseLockscreen.qml+5−4 qml/Components/PhysicalKeysMapper.qml+24 qml/Components/PinLockscreen.qml+22−1 qml/Components/ShellDialog.qml+8 qml/Components/Showable.qml+10 qml/Dash/CardCarousel.qml−1 qml/Dash/CardGrid.qml−1 qml/Dash/CardHorizontalList.qml−1 qml/Dash/CardTool.qml+2−26 qml/Dash/CardVerticalJournal.qml−1 qml/Dash/Dash.qml+11−11 qml/Dash/DashPageHeader.qml+4 qml/Dash/GenericScopeView.qml+16−42 qml/Dash/PreviewListView.qml−140 qml/Dash/PreviewView.qml+76 qml/Dash/Previews/Preview.qml−4 qml/Dash/Previews/PreviewAudioPlayback.qml+5−1 qml/Dash/Previews/PreviewExpandable.qml−1 qml/Dash/Previews/PreviewHeader.qml+37−9 qml/Dash/Previews/PreviewOverlay.qml+1−1 qml/Dash/Previews/PreviewPayments.qml+1−3 qml/Dash/Previews/PreviewRatingDisplay.qml−1 qml/Dash/Previews/PreviewRatingEdit.qml−1 qml/Dash/Previews/PreviewSharing.qml+17−7 qml/Dash/Previews/PreviewWidget.qml−3 qml/Dash/Previews/PreviewWidgetFactory.qml−4 qml/Dash/ScopesList.qml+1−1 qml/Dash/ScopesListCategoryItem.qml+8−4 qml/DeviceConfiguration.qml+54−16 qml/DisabledScreenNotice.qml+44−20 qml/Greeter/CoverPage.qml+13−2 qml/Greeter/Infographics.qml+2−1 qml/Greeter/NarrowView.qml+14−1 qml/Launcher/Launcher.qml+144−11 qml/Launcher/LauncherDelegate.qml+55−20 qml/Launcher/LauncherPanel.qml+122−51 qml/Launcher/graphics/launcher-app-focus-ring.svg+12 qml/Notifications/Notification.qml+9−5 qml/OrientedShell.qml+26−1 qml/Panel/Handle.qml+2−2 qml/Panel/IndicatorItem.qml+3−3 qml/Panel/Indicators/MenuItemFactory.qml+3−4 qml/Panel/Indicators/ModemInfoItem.qml−111 qml/Panel/Indicators/RoamingIndication.qml−40 qml/Panel/Indicators/client/IndicatorsClient.qml+1−1 qml/Panel/IndicatorsMenu.qml+3−2 qml/Panel/MenuContent.qml+1−1 qml/Panel/Panel.qml+5−1 qml/ScopeTool.qml−8 qml/Shell.qml+54−9 qml/Stages/AbstractStage.qml+4−2 qml/Stages/ApplicationWindow.qml+3−1 qml/Stages/DesktopSpread.qml+64−17 qml/Stages/DesktopSpreadDelegate.qml+15−1 qml/Stages/DesktopStage.qml+37−37 qml/Stages/PhoneStage.qml+77−3 qml/Stages/SideStage.qml+118 qml/Stages/Splash.qml+4−2 qml/Stages/SpreadDelegate.qml+30−1 qml/Stages/SurfaceContainer.qml+1 qml/Stages/TabletSideStageTouchGesture.qml+154 qml/Stages/TabletStage.qml+469−173 qml/Stages/TransformedTabletSpreadDelegate.qml+84−56 qml/Stages/WindowResizeArea.qml+8−5 qml/Stages/graphics/sidestage_drag.svg+207 qml/Stages/graphics/sidestage_open.svg+181 qml/Wizard/CheckableSetting.qml+10−2 qml/Wizard/Page.qml+260−44 qml/Wizard/Pages.qml+75−31 qml/Wizard/Pages/10-welcome.qml+121−48 qml/Wizard/Pages/20-sim.qml−77 qml/Wizard/Pages/30-passwd-type.qml−140 qml/Wizard/Pages/30-wifi.qml+210 qml/Wizard/Pages/40-location.qml+291 qml/Wizard/Pages/40-wifi.qml−219 qml/Wizard/Pages/50-location.qml−150 qml/Wizard/Pages/50-timezone.qml+275 qml/Wizard/Pages/60-reporting.qml → qml/Wizard/Pages/60-account.qml+30−20 qml/Wizard/Pages/70-passwd-type.qml+166 qml/Wizard/Pages/75-report-check.qml+91 qml/Wizard/Pages/80-finished.qml+94−16 qml/Wizard/Pages/data/Desktop_header_bkg.png qml/Wizard/Pages/data/Desktop_splash_screen_bkg.png qml/Wizard/Pages/data/Phone_header_bkg.png qml/Wizard/Pages/data/Phone_splash_screen_bkg.png qml/Wizard/Pages/data/Tick@30.png qml/Wizard/Pages/data/meet_ubuntu_simcard@30.png qml/Wizard/Pages/data/timezonemap/map.png qml/Wizard/Pages/data/timezonemap/pin.png qml/Wizard/Pages/data/timezonemap/timezone_-1.png qml/Wizard/Pages/data/timezonemap/timezone_-10.png qml/Wizard/Pages/data/timezonemap/timezone_-11.png qml/Wizard/Pages/data/timezonemap/timezone_-2.png qml/Wizard/Pages/data/timezonemap/timezone_-3.5.png qml/Wizard/Pages/data/timezonemap/timezone_-3.png qml/Wizard/Pages/data/timezonemap/timezone_-4.5.png qml/Wizard/Pages/data/timezonemap/timezone_-4.png qml/Wizard/Pages/data/timezonemap/timezone_-5.png qml/Wizard/Pages/data/timezonemap/timezone_-6.png qml/Wizard/Pages/data/timezonemap/timezone_-7.png qml/Wizard/Pages/data/timezonemap/timezone_-8.png qml/Wizard/Pages/data/timezonemap/timezone_-9.5.png qml/Wizard/Pages/data/timezonemap/timezone_-9.png qml/Wizard/Pages/data/timezonemap/timezone_0.png qml/Wizard/Pages/data/timezonemap/timezone_1.png qml/Wizard/Pages/data/timezonemap/timezone_10.5.png qml/Wizard/Pages/data/timezonemap/timezone_10.png qml/Wizard/Pages/data/timezonemap/timezone_11.png qml/Wizard/Pages/data/timezonemap/timezone_12.75.png qml/Wizard/Pages/data/timezonemap/timezone_12.png qml/Wizard/Pages/data/timezonemap/timezone_13.png qml/Wizard/Pages/data/timezonemap/timezone_2.png qml/Wizard/Pages/data/timezonemap/timezone_3.5.png qml/Wizard/Pages/data/timezonemap/timezone_3.png qml/Wizard/Pages/data/timezonemap/timezone_4.5.png qml/Wizard/Pages/data/timezonemap/timezone_4.png qml/Wizard/Pages/data/timezonemap/timezone_5.5.png qml/Wizard/Pages/data/timezonemap/timezone_5.75.png qml/Wizard/Pages/data/timezonemap/timezone_5.png qml/Wizard/Pages/data/timezonemap/timezone_6.5.png qml/Wizard/Pages/data/timezonemap/timezone_6.png qml/Wizard/Pages/data/timezonemap/timezone_7.png qml/Wizard/Pages/data/timezonemap/timezone_8.5.png qml/Wizard/Pages/data/timezonemap/timezone_8.png qml/Wizard/Pages/data/timezonemap/timezone_9.5.png qml/Wizard/Pages/data/timezonemap/timezone_9.png qml/Wizard/Pages/here-terms.qml+72−65 qml/Wizard/Pages/passwd-confirm.qml → qml/Wizard/Pages/passcode-confirm.qml+12−29 qml/Wizard/Pages/passcode-desktop.qml+132 qml/Wizard/Pages/passwd-set.qml → qml/Wizard/Pages/passcode-set.qml+12−28 qml/Wizard/Pages/password-set.qml+149 qml/Wizard/Pages/sim.qml+108 qml/Wizard/PasswordMeter.qml+106 qml/Wizard/StackButton.qml+6−11 qml/Wizard/Wizard.qml−9 qml/Wizard/WizardTextField.qml+25 src/CMakeLists.txt+1−1 src/CachingNetworkManagerFactory.cpp+2−2 src/CachingNetworkManagerFactory.h+3−2 src/Dash/CMakeLists.txt+1−1 src/MouseTouchAdaptor.cpp+53−9 src/MouseTouchAdaptor.h+5−3 tests/autopilot/unity8/dash.py+1−2 tests/autopilot/unity8/shell/tests/test_helpers.py−2 tests/libs/UbuntuGestures/tst_TouchRegistry.cpp+59 tests/mocks/AccountsService/AccountsService.cpp+23−3 tests/mocks/AccountsService/AccountsService.h+12−5 tests/mocks/GSettings.1.0/fake_gsettings.cpp+64 tests/mocks/GSettings.1.0/fake_gsettings.h+18 tests/mocks/IntegratedLightDM/liblightdm/UsersModel.cpp−14 tests/mocks/MeeGo/QOfono/MockOfonoSimManager.qml+1 tests/mocks/Ubuntu/Connectivity/plugin.cpp+1 tests/mocks/Ubuntu/SystemSettings/CMakeLists.txt+2 tests/mocks/Ubuntu/SystemSettings/Diagnostics/CMakeLists.txt+1 tests/mocks/Ubuntu/SystemSettings/Diagnostics/MockDiagnostics.qml+24 tests/mocks/Ubuntu/SystemSettings/Diagnostics/qmldir+2 tests/mocks/Ubuntu/SystemSettings/LanguagePlugin/MockLanguagePlugin.qml+2−2 tests/mocks/Ubuntu/SystemSettings/SecurityPrivacy/MockSecurityPrivacy.cpp+1−1 tests/mocks/Ubuntu/SystemSettings/TimeDate/CMakeLists.txt+1 tests/mocks/Ubuntu/SystemSettings/TimeDate/MockTimeDate.qml+25 tests/mocks/Ubuntu/SystemSettings/TimeDate/qmldir+2 tests/mocks/Unity/Application/ApplicationManager.cpp+10−22 tests/mocks/Unity/Application/ApplicationManager.h−8 tests/mocks/Unity/Application/MirSurface.cpp+6−2 tests/mocks/Unity/Application/MirSurface.h+2−1 tests/mocks/Unity/Application/MirSurfaceItem.cpp+17 tests/mocks/Unity/Application/MirSurfaceItem.h+1 tests/mocks/Unity/Application/SurfaceManager.cpp+8−9 tests/mocks/Unity/Application/SurfaceManager.h+3−3 tests/mocks/Unity/Application/VirtualKeyboard.cpp+3−2 tests/mocks/Unity/Application/VirtualKeyboard.h+1−1 tests/mocks/Unity/Application/plugin.cpp+2−1 tests/mocks/Unity/Application/resources/MirSurfaceItem.qml+59 tests/mocks/Unity/CMakeLists.txt+1−3 tests/mocks/Unity/Launcher/MockLauncherModel.cpp+2 tests/mocks/Unity/Unity.qmltypes+33−50 tests/mocks/Unity/fake_previewstack.cpp−68 tests/mocks/Unity/fake_previewstack.h−52 tests/mocks/Unity/fake_scope.cpp+7−2 tests/mocks/Unity/fake_scope.h+3−2 tests/mocks/Unity/fake_unity_plugin.cpp+1−2 tests/mocks/Utils/CMakeLists.txt+3−1 tests/mocks/Utils/plugin.cpp+14 tests/mocks/Utils/windowstatestorage.cpp+13 tests/mocks/Utils/windowstatestorage.h+4 tests/mocks/Wizard/CMakeLists.txt+6−1 tests/mocks/Wizard/MockSystem.cpp+4−2 tests/mocks/Wizard/MockSystem.h+2−2 tests/mocks/Wizard/mockplugin.cpp+7−8 tests/plugins/AccountsService/CMakeLists.txt+5 tests/plugins/AccountsService/PropertiesServer.cpp+16−4 tests/plugins/AccountsService/PropertiesServer.h+2−1 tests/plugins/AccountsService/UscServer.cpp+28 tests/plugins/AccountsService/UscServer.h+39 tests/plugins/AccountsService/client.cpp+63−9 tests/plugins/AccountsService/interfaces.xml+16 tests/plugins/AccountsService/server.cpp+12 tests/plugins/Dash/cardcreator/1.res+4−6 tests/plugins/Dash/cardcreator/1.res.cardcreator+119 tests/plugins/Dash/cardcreator/10.res+3−5 tests/plugins/Dash/cardcreator/10.res.cardcreator+137 tests/plugins/Dash/cardcreator/11.res+5−7 tests/plugins/Dash/cardcreator/11.res.cardcreator+210 tests/plugins/Dash/cardcreator/2.res+3−5 tests/plugins/Dash/cardcreator/2.res.cardcreator+136 tests/plugins/Dash/cardcreator/3.res+3−5 tests/plugins/Dash/cardcreator/3.res.cardcreator+137 tests/plugins/Dash/cardcreator/4.res+3−5 tests/plugins/Dash/cardcreator/4.res.cardcreator+109 tests/plugins/Dash/cardcreator/5.res+5−7 tests/plugins/Dash/cardcreator/5.res.cardcreator+156 tests/plugins/Dash/cardcreator/6.res+2−4 tests/plugins/Dash/cardcreator/6.res.cardcreator+126 tests/plugins/Dash/cardcreator/7.res+3−5 tests/plugins/Dash/cardcreator/7.res.cardcreator+149 tests/plugins/Dash/cardcreator/8.res+3−5 tests/plugins/Dash/cardcreator/8.res.cardcreator+107 tests/plugins/Dash/cardcreator/9.res+4−5 tests/plugins/Dash/cardcreator/9.res.cardcreator+119 tests/plugins/Dash/cardcreatortest.cpp+32−22 tests/plugins/Dash/cardcreatortest.qml+4−4 tests/plugins/IntegratedLightDM/CMakeLists.txt+25 tests/plugins/IntegratedLightDM/integrated.cpp+91 tests/plugins/Ubuntu/Gestures/CMakeLists.txt+7−1 tests/plugins/Ubuntu/Gestures/GestureTest.cpp+44 tests/plugins/Ubuntu/Gestures/GestureTest.h+13−1 tests/plugins/Ubuntu/Gestures/tst_DirectionalDragArea.cpp−56 tests/plugins/Ubuntu/Gestures/tst_TouchGestureArea.cpp+270 tests/plugins/Ubuntu/Gestures/tst_TouchGestureArea.qml+90 tests/plugins/Unity/Launcher/launchermodeltest.cpp+1 tests/plugins/Utils/CMakeLists.txt+7−1 tests/plugins/Utils/DeviceConfigParserTest.cpp+70 tests/qmltests/CMakeLists.txt+2−1 tests/qmltests/Components/tst_Lockscreen.qml+14−7 tests/qmltests/Dash/Previews/tst_PreviewAudioPlayback.qml+12−3 tests/qmltests/Dash/Previews/tst_PreviewHeader.qml+18−1 tests/qmltests/Dash/Previews/tst_PreviewSharing.qml+17−3 tests/qmltests/Dash/tst_CardTool.qml+4−4 tests/qmltests/Dash/tst_Dash.qml+89 tests/qmltests/Dash/tst_GenericScopeView.qml−28 tests/qmltests/Dash/tst_PreviewListView.qml → tests/qmltests/Dash/tst_PreviewView.qml+23−16 tests/qmltests/Greeter/tst_NarrowView.qml+9 tests/qmltests/Launcher/tst_Launcher.qml+254−18 tests/qmltests/Notifications/tst_OptionToggle.qml+1−1 tests/qmltests/Notifications/tst_VisualSnapDecisionsQueue.qml+1 tests/qmltests/Panel/Indicators/tst_MenuItemFactory.qml+2−4 tests/qmltests/Panel/tst_IndicatorItem.qml+16−14 tests/qmltests/Panel/tst_Panel.qml+2 tests/qmltests/Stages/tst_DesktopStage.qml+2−1 tests/qmltests/Stages/tst_PhoneStage.qml+19−6 tests/qmltests/Stages/tst_SpreadDelegate.qml+7 tests/qmltests/Stages/tst_TabletStage.qml+162−1 tests/qmltests/Wizard/tst_Wizard.qml+171−200 tests/qmltests/tst_DeviceConfiguration.qml+49 tests/qmltests/tst_DisabledScreenNotice.qml+76−2 tests/qmltests/tst_OrientedShell.qml+56−12 tests/qmltests/tst_Shell.qml+241−59 tests/utils/modules/Unity/Test/UnityTestCase.qml+67−11
CMakeLists.txt+2−1
@@ -58,6 +58,7 @@ find_package(Qt5Concurrent 5.4 REQUIRED)
5858find_package(Qt5Sql 5.4 REQUIRED)
5959
6060pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=14)
61+pkg_check_modules(GEONAMES REQUIRED geonames)
6162pkg_check_modules(GIO REQUIRED gio-2.0>=2.32)
6263pkg_check_modules(GLIB REQUIRED glib-2.0>=2.32)
6364pkg_check_modules(QMENUMODEL REQUIRED qmenumodel)
@@ -131,7 +132,7 @@ if(NOT QUIET_LOGGER)
131132 set(STDOUT_LOGGER "-o" "-,txt")
132133endif()
133134
134−execute_process(COMMAND arch OUTPUT_VARIABLE ARCH)
135+execute_process(COMMAND dpkg-architecture -qDEB_HOST_ARCH OUTPUT_VARIABLE ARCH)
135136if (NOT ARCH MATCHES "arm*")
136137 set(ENABLE_TOUCH_EMULATION true)
137138 add_definitions(-DUNITY8_ENABLE_TOUCH_EMULATION)
CODING+2
@@ -54,6 +54,8 @@ $ ./run.sh -p OR -k
5454Notes
5555-----
5656- to navigate, utilize the mouse left button as you would your finger
57+- a three point drag (for side stage operations) can be performed by using
58+ the Shift+Control+Alt (all together) keyboard modifiers while using the mouse.
5759- to get the translations work, currently you have to do make install to
5860 put the *.mo files into correct structure. We'll look for a better solution
5961 later.
cmake/modules/QmlTest.cmake+1−1
@@ -183,7 +183,7 @@ function(add_manual_test COMPONENT_NAME TARGET)
183183 cmake_parse_arguments(QMLTEST "${QMLTEST_OPTIONS}" "${QMLTEST_SINGLE}" "${QMLTEST_MULTI}" ${ARGN})
184184 mangle_arguments()
185185
186− bake_arguments("${QMLTEST_ARG_PREFIX}" args -qmljsdebugger=port:3768)
186+ bake_arguments("${QMLTEST_ARG_PREFIX}" args -qmljsdebugger=port:3768,3800)
187187
188188 set(qmltry_command
189189 $<TARGET_FILE:${TARGET}>
data/com.canonical.Unity8.gschema.xml+11
@@ -27,6 +27,17 @@
2727 <summary>Maximum push needed to overcome edge barrier</summary>
2828 <description>How much you have to push (in grid units) the mouse against an edge barrier when sensibility is 1.</description>
2929 </key>
30+ <key type="b" name="autohide-launcher">
31+ <default>true</default>
32+ <summary>Autohide the launcher</summary>
33+ <description>This will only be applied in windowed mode. In staged mode, the launcher will always hide.</description>
34+ </key>
35+ <key type="u" name="launcher-width">
36+ <default>8</default>
37+ <range min="6" max="12"/>
38+ <summary>Width of the launcher in grid units.</summary>
39+ <description>Changes the width of the launcher in all usage modes.</description>
40+ </key>
3041 </schema>
3142
3243 <schema path="/com/canonical/unity8/greeter/" id="com.canonical.Unity8.Greeter" gettext-domain="unity8">
data/unity8-dash.conf+1
@@ -14,6 +14,7 @@ kill timeout 120
1414oom score 50
1515
1616respawn
17+respawn limit unlimited
1718
1819env APP_ID=unity8-dash
1920
debian/changelog+161
@@ -1,3 +1,164 @@
1+unity8 (8.13+15.04.20150914-0ubuntu1) UNRELEASED; urgency=medium
2+
3+ * bump version to fix OOBE build
4+
5+ -- Lukas Tinkl <ltinkl@canonical.com> Mon, 14 Sep 2015 19:19:23 +0200
6+
7+unity8 (8.11+16.04.20160310.4-0ubuntu1) xenial; urgency=medium
8+
9+ [ Albert Astals Cid ]
10+ * Add context for Re-dock as asked by translators (LP: #1534608)
11+ * Add emblem to the preview header widget (LP: #1424720)
12+ * Add haptics to ScopesListCategoryItem buttons
13+ * Audio Cards: Make some of the image loading async (LP: #1533432)
14+ * Do not create fallback code for the card tool fake card (LP:
15+ #1545865)
16+ * Fix resizing the dash bringing temp scopes size out of sync (LP:
17+ #1543130)
18+ * Minor fixes for unity-scope-tool
19+ * Resolve title alignment on card creator time instead of on runtime
20+ * Use fixedHeaderHeight only in the non cardtool cards
21+ * Use the new undeprecated connectivityqt::Connectivity
22+ * asynchronous is only false on the fake card in cardtool
23+ * clazy fixes
24+
25+ [ Albert Astals Cid, CI Train Bot ]
26+ * click scope: Add the else branch so we reset the card size in all
27+ situations
28+
29+ [ Andrea Cimitan ]
30+ * PreviewSharing widget now accepts both string and array of
31+ widgetData["share-data"]["uri"] (LP: #1549056)
32+ * Update AP tests for new single preview
33+ * Use Text.Wrap for body notification text (LP: #1544909)
34+
35+ [ Andrea Cimitan, Lukáš Tinkl, Michael Zanetti, Nick Dedekind ]
36+ * some fixes for the new palette (LP: #1554616)
37+
38+ [ CI Train Bot ]
39+ * Resync trunk.
40+ * Update translation template
41+
42+ [ CI Train Bot, Daniel d'Andrada ]
43+ * Ensure the QML engine doesn't delete our mock MirSurfaces on its
44+ own.
45+
46+ [ Daniel d'Andrada ]
47+ * tst_Shell: Remove unused qml items
48+
49+ [ Josh Arenson ]
50+ * Allow the shell to blacklist input devices and force the OSK shown.
51+ (LP: #1542224)
52+
53+ [ Lukáš Tinkl ]
54+ * Disallow resizing windows up, past the Panel (LP: #1544766)
55+ * Elide the window title not to let it overflow into the indicators
56+ area (LP: #1535767)
57+ * Enable the PIN lockscreen to be used with a HW keyboard (LP:
58+ #1550359)
59+ * Fix tiny windows when switching stages
60+ * Provide a range of ports to QML JS Debugger
61+ * Watch for launcher item icon changes (LP: #1543290)
62+
63+ [ Michael Terry ]
64+ * Proxy more mouse and touchpad properties to USC (LP: #1540398) (LP:
65+ #1543344, #1540398)
66+ * Refactor the AccountsService plugin and make it slightly faster.
67+ * To let the user log in if a mouse is connected, hide the greeter
68+ cover page on a mouse click (but NOT a touch click). (LP: #1540497)
69+ * Watch AccountsService for changes to the user's real name. This was
70+ preventing us from noticing when the user set their name in the
71+ welcome wizard.
72+
73+ [ Michael Zanetti ]
74+ * Allow alt+tabbing in staged mode too (LP: #1540502)
75+ * Allow invoking the staged mode spreads by mouse right edge pushes
76+ too (LP: #1540392)
77+ * Allow loading the device configuration from an external file
78+ * Implement Launcher's keyboard navigation and updated pip design
79+ * Make launcher scalable, allow it locking (LP: #1511015)
80+ * Properly parent launcher items in all cases (LP: #1495732)
81+ * Read inputMethod surface from the new property int QtMir (LP:
82+ #1545286)
83+ * Some visual updates and rotation lock for the virtual touchpad (LP:
84+ #1549087)
85+ * Visual updates for the windowed spread (LP: #1488148)
86+ * stabilize swipeAwayGreeter()
87+
88+ [ Michał Sawicz ]
89+ * Add udev rules to make sure we have access to uinput
90+ * Make dash respawn indefinitely (LP: #1550056)
91+ * Use dpkg-architecture, not arch, to disable touch emulation
92+
93+ [ Vesa Rautiainen ]
94+ * Fixing the vertical position of desktop spread item icon.
95+
96+ -- Michał Sawicz <michal.sawicz@canonical.com> Thu, 10 Mar 2016 22:44:16 +0000
97+
98+unity8 (8.11+16.04.20160308-0ubuntu1) xenial; urgency=medium
99+
100+ [ Albert Astals Cid ]
101+ * Make these tests pass with the new SDK
102+
103+ [ Andrea Cimitan, Nick Dedekind ]
104+ * replace selected.backgroundText with normal.backgroundText in
105+ Splash, Notifications, Wizard
106+
107+ [ CI Train Bot ]
108+ * Update translation template
109+
110+ [ Michał Sawicz, Nick Dedekind ]
111+ * Fixed colours palette value set. Moved ModemItem to USC.
112+
113+ [ Michał Sawicz, Tim Peeters ]
114+ * Update headers for Dash and Splash to work properly with the new UI
115+ toolkit release.
116+
117+ [ Zoltán Balogh, Zsombor Egri ]
118+ * Use SuruDark theme instead of the deprecated SuruGradient.
119+
120+ -- Zoltan Balogh <zoltan.balogh@canonical.com> Tue, 08 Mar 2016 20:59:34 +0000
121+
122+unity8 (8.11+16.04.20160307-0ubuntu1) xenial; urgency=medium
123+
124+ [ CI Train Bot ]
125+ * Resync trunk.
126+ * Update translation template
127+
128+ [ Rodney Dawes ]
129+ * Re-enable the purchaseCancelled signal.
130+
131+ -- Rodney Dawes <ci-train-bot@canonical.com> Mon, 07 Mar 2016 14:12:08 +0000
132+
133+unity8 (8.11+16.04.20160301-0ubuntu1) xenial; urgency=medium
134+
135+ [ Albert Astals Cid ]
136+ * Hook the new scope.activationInProgress property (LP: #1537132)
137+
138+ [ Andrea Cimitan ]
139+ * Updated the Preview view to use a single PreviewModel instead old
140+ PreviewStack, using a Loader instead ListView (LP: #1541967)
141+
142+ [ CI Train Bot ]
143+ * Resync trunk.
144+ * Update translation template
145+
146+ [ Michał Sawicz ]
147+ * Add autopilot as DEP-8 tests added: debian/tests/autopilot.sh
148+
149+ -- Pawel Stolowski <ci-train-bot@canonical.com> Tue, 01 Mar 2016 10:28:52 +0000
150+
151+unity8 (8.11+16.04.20160216.1-0ubuntu1) xenial; urgency=medium
152+
153+ [ Albert Astals Cid ]
154+ * Make the audio previews create a playlist (LP: #1540477)
155+
156+ [ CI Train Bot ]
157+ * Resync trunk. added: po/aa.po
158+ * Update translation template
159+
160+ -- Pawel Stolowski <ci-train-bot@canonical.com> Tue, 16 Feb 2016 03:24:46 +0000
161+
1162unity8 (8.11+16.04.20160212-0ubuntu1) xenial; urgency=medium
2163
3164 [ Albert Astals Cid ]
debian/control+14−12
@@ -8,13 +8,14 @@ Build-Depends: cmake,
88 doxyqml,
99# To allow cross-compiling to work, we also must append :native
1010# to g++ so we don't try to run armhf g++
11−# on an x86 CPU for eaxmple, when cross-compiling.
11+# on an x86 CPU for example, when cross-compiling.
1212 g++:native,
1313 libandroid-properties-dev,
1414 graphviz,
1515 gsettings-ubuntu-schemas (>= 0.0.2+14.10.20140815),
16− libconnectivity-qt1-dev,
16+ libconnectivity-qt1-dev (>= 0.7.1),
1717 libevdev-dev,
18+ libgeonames-dev (>= 0.2),
1819 libgl1-mesa-dev[!armhf] | libgl-dev[!armhf],
1920 libgl1-mesa-dri,
2021 libgles2-mesa-dev[armhf],
@@ -29,7 +30,7 @@ Build-Depends: cmake,
2930 libqt5xmlpatterns5-dev,
3031 libsystemsettings-dev,
3132 libudev-dev,
32− libunity-api-dev (>= 7.107),
33+ libunity-api-dev (>= 7.108),
3334 libusermetricsoutput1-dev,
3435# Need those X11 libs touch emulation from mouse events in manual QML tests on a X11 desktop
3536 libx11-dev[!armhf],
@@ -54,8 +55,8 @@ Build-Depends: cmake,
5455 qtdeclarative5-private-dev (>= 5.4),
5556 qtdeclarative5-qtmultimedia-plugin (>= 5.4.1-1ubuntu19~overlay2),
5657 qtdeclarative5-ubuntu-content1,
57− qtdeclarative5-ubuntu-settings-components (>= 0.6),
58− qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 1.3.1676) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 1.3.1676),
58+ qtdeclarative5-ubuntu-settings-components (>= 0.7),
59+ qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 1.3.1845) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 1.3.1845),
5960 qtdeclarative5-ubuntu-web-plugin,
6061 ttf-ubuntu-font-family,
6162Standards-Version: 3.9.4
@@ -70,7 +71,7 @@ X-Ubuntu-Use-Langpack: yes
7071Package: indicators-client
7172Architecture: amd64 armhf i386
7273Depends: qmenumodel-qml (>= 0.2.9),
73− qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 1.3.1627) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 1.3.1627),
74+ qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 1.3.1845) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 1.3.1845),
7475 unity8 (= ${binary:Version}),
7576 ${misc:Depends},
7677 ${shlibs:Depends},
@@ -101,8 +102,7 @@ Depends: dmz-cursor-theme,
101102 qml-module-qt-labs-folderlistmodel,
102103 qml-module-qtquick-xmllistmodel,
103104 qml-module-qtsysteminfo,
104− qtdeclarative5-gsettings1.0,
105− qtdeclarative5-qtmir-plugin (>= 0.4.5),
105+ qtdeclarative5-qtmir-plugin (>= 0.4.8),
106106 qtdeclarative5-ubuntu-telephony0.1,
107107 qtdeclarative5-ubuntu-web-plugin,
108108 ubuntu-system-settings,
@@ -126,15 +126,15 @@ Description: Unity 8 shell
126126Package: unity8-common
127127Architecture: all
128128Depends: qml-module-qtquick-layouts,
129− qtdeclarative5-ubuntu-settings-components (>= 0.6),
129+ qtdeclarative5-ubuntu-settings-components (>= 0.7),
130130 qtdeclarative5-ubuntu-thumbnailer0.1 | ubuntu-thumbnailer-impl,
131− qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 1.3.1627) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 1.3.1627),
131+ qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 1.3.1845) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 1.3.1845),
132132 qtdeclarative5-unity-notifications-plugin (>= 0.1.2) | unity-notifications-impl,
133133 ubuntu-thumbnailer-impl-0,
134134 unity-application-impl-14,
135135 unity-notifications-impl-3,
136136 unity-plugin-scopes | unity-scopes-impl,
137− unity-scopes-impl-9,
137+ unity-scopes-impl-10,
138138 unity8-fake-env | unity-application-impl,
139139 ${misc:Depends},
140140Breaks: unity8 (<< 7.86),
@@ -158,7 +158,7 @@ Depends: autopilot-qt5 (>= 1.4),
158158 python3-fixtures,
159159 python3-gi,
160160 qttestability-autopilot (>= 1.4),
161− ubuntu-ui-toolkit-autopilot (>= 1.2.1485+15.04.20150417.1-0ubuntu1),
161+ ubuntu-ui-toolkit-autopilot (>= 1.3.1845),
162162 unity-scope-click,
163163 unity8 (= ${source:Version}),
164164 unity8-fake-env (= ${source:Version}),
@@ -192,6 +192,8 @@ Depends: accountsservice-ubuntu-schemas (>= 0.0.5),
192192 libhardware2,
193193 pay-service,
194194 unity-schemas (>= 7.3.1+14.10.20140915),
195+ qtdeclarative5-gsettings1.0,
196+ qml-module-qtmultimedia,
195197 ${misc:Depends},
196198 ${shlibs:Depends},
197199Provides: unity-launcher-impl,
debian/tests/autopilot.shnew file+13
@@ -0,0 +1,13 @@
1+#!/bin/sh
2+
3+# log all commands and abort on error
4+set -xe
5+
6+if [ ! -f /system/build.prop ]; then
7+ echo "WARNING: Skipping autopilot test, will only run on devices at the moment."
8+ exit 0
9+fi
10+
11+initctl --session stop unity8
12+autopilot3 run --verbose --format xml --output "${ADT_ARTIFACTS}/unity8.xml" unity8
13+initctl --session start unity8
debian/tests/control+5
@@ -3,3 +3,8 @@ Restrictions: allow-stderr
33Depends: @,
44 @builddeps@,
55 xvfb,
6+
7+Tests: autopilot.sh
8+Restrictions: allow-stderr,
9+ isolation-machine,
10+Depends: unity8-autopilot,
debian/unity8-common.udevnew file+2
@@ -0,0 +1,2 @@
1+# Make local foreground session able to inject input
2+KERNEL=="uinput", SUBSYSTEM=="misc", TAG+="uaccess"
debian/unity8-doc.install+1
@@ -1 +1,2 @@
1+doc/devices.conf usr/share/doc/unity8/
12usr/share/doc/unity8/*
doc/devices.confnew file+30
@@ -0,0 +1,30 @@
1+# This file can hold multiple device configs. Devices are separated by sections.
2+#
3+# SupportedOrientations holds a list of all enabled orientations. A standard
4+# phone will usually have Portrait,Landcape,InvertedLandscape in order to
5+# disable upside down usage.
6+#
7+# PrimaryOrientation gives the orientation the device will start up with
8+# when there is no orientations sensor input available (yet) or lock to
9+# when an application specifies to be locked to PrimaryOrientation.
10+#
11+# The other Orientation settings can be used to re-map the orientations.
12+# A device might be used with different orientations than how the screen
13+# is physically mounted on the hardware.
14+#
15+# Category can be phone, tablet, or desktop. This option determines
16+# whether the side stage is shown (tablet) or not (phone). Using
17+# desktop will load the shell in windowed mode. Note that the user
18+# can override/change this by connecting input hardware or change
19+# user settings.
20+#
21+# Any options not listed will default to the values of the example below.
22+
23+[devicename]
24+SupportedOrientations=Portrait,InvertedPortrait,Landscape,InvertedLandscape
25+PrimaryOrientation=PrimaryOrienation
26+PortraitOrientation=Portrait
27+InvertedPortraitOrientation=InvertedPortrait
28+LandscapeOrientation=Landscape
29+InvertedLandscapeOrientation=InvertedLandscape
30+Category=phone
libs/UbuntuGestures/Timer.h+5
@@ -35,6 +35,11 @@ public:
3535 virtual int interval() const = 0;
3636 virtual void setInterval(int msecs) = 0;
3737 virtual void start() { m_isRunning = true; }
38+ virtual void start(int msecs)
39+ {
40+ setInterval(msecs);
41+ start();
42+ }
3843 virtual void stop() { m_isRunning = false; }
3944 bool isRunning() const { return m_isRunning; }
4045 virtual bool isSingleShot() const = 0;
libs/UbuntuGestures/TouchRegistry.cpp+15−10
@@ -359,10 +359,6 @@ void TouchRegistry::removeCandidateOwnerForTouchByIndex(Pool<TouchRegistry::Touc
359359
360360void TouchRegistry::requestTouchOwnership(int id, QQuickItem *candidate)
361361{
362− #if TOUCHREGISTRY_DEBUG
363− UG_DEBUG << "requestTouchOwnership id " << id << "candidate" << candidate;
364− #endif
365−
366362 Pool<TouchInfo>::Iterator touchInfo = findTouchInfo(id);
367363 if (!touchInfo) { qFatal("TouchRegistry: Failed to find TouchInfo"); }
368364
@@ -379,6 +375,9 @@ void TouchRegistry::requestTouchOwnership(int id, QQuickItem *candidate)
379375 break;
380376 }
381377 }
378+ #if TOUCHREGISTRY_DEBUG
379+ UG_DEBUG << "requestTouchOwnership id " << id << "candidate" << candidate << "index: " << candidateIndex;
380+ #endif
382381
383382 // add it as a candidate if not present yet
384383 if (candidateIndex < 0) {
@@ -533,16 +532,22 @@ void TouchRegistry::TouchInfo::notifyCandidatesOfOwnershipResolution()
533532 << " gained) to candidate" << candidates[0].item;
534533 #endif
535534
536− TouchOwnershipEvent gainedOwnershipEvent(id, true /*gained*/);
537− QCoreApplication::sendEvent(candidates[0].item, &gainedOwnershipEvent);
535+ // need to take a copy of the item list in case
536+ // we call back in to remove candidate during the lost ownership event.
537+ QList<QPointer<QQuickItem>> items;
538+ Q_FOREACH(const CandidateInfo& info, candidates) {
539+ items << info.item;
540+ }
538541
542+ TouchOwnershipEvent gainedOwnershipEvent(id, true /*gained*/);
543+ QCoreApplication::sendEvent(items[0], &gainedOwnershipEvent);
539544
540545 TouchOwnershipEvent lostOwnershipEvent(id, false /*gained*/);
541− for (int i = 1; i < candidates.count(); ++i) {
546+ for (int i = 1; i < items.count(); ++i) {
542547 #if TOUCHREGISTRY_DEBUG
543− UG_DEBUG << "sending TouchWonershipEvent(id =" << id << " lost) to candidate"
544− << candidates[i].item;
548+ UG_DEBUG << "sending TouchOwnershipEvent(id =" << id << " lost) to candidate"
549+ << items[i];
545550 #endif
546− QCoreApplication::sendEvent(candidates[i].item, &lostOwnershipEvent);
551+ QCoreApplication::sendEvent(items[i], &lostOwnershipEvent);
547552 }
548553}
plugins/AccountsService/AccountsService.cpp+207−336
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013, 2015 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -12,8 +12,6 @@
1212 *
1313 * You should have received a copy of the GNU General Public License
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Author: Michael Terry <michael.terry@canonical.com>
1715 */
1816
1917#include "AccountsService.h"
@@ -24,17 +22,54 @@
2422#include <QStringList>
2523#include <QDebug>
2624
25+#define IFACE_ACCOUNTS_USER QStringLiteral("org.freedesktop.Accounts.User")
26+#define IFACE_LOCATION_HERE QStringLiteral("com.ubuntu.location.providers.here.AccountsService")
27+#define IFACE_UBUNTU_INPUT QStringLiteral("com.ubuntu.AccountsService.Input")
28+#define IFACE_UBUNTU_SECURITY QStringLiteral("com.ubuntu.AccountsService.SecurityPrivacy")
29+#define IFACE_UBUNTU_SECURITY_OLD QStringLiteral("com.ubuntu.touch.AccountsService.SecurityPrivacy")
30+#define IFACE_UNITY QStringLiteral("com.canonical.unity.AccountsService")
31+#define IFACE_UNITY_PRIVATE QStringLiteral("com.canonical.unity.AccountsService.Private")
32+
33+#define PROP_BACKGROUND_FILE QStringLiteral("BackgroundFile")
34+#define PROP_DEMO_EDGES QStringLiteral("demo-edges")
35+#define PROP_EMAIL QStringLiteral("Email")
36+#define PROP_ENABLE_INDICATORS_WHILE_LOCKED QStringLiteral("EnableIndicatorsWhileLocked")
37+#define PROP_ENABLE_LAUNCHER_WHILE_LOCKED QStringLiteral("EnableLauncherWhileLocked")
38+#define PROP_FAILED_LOGINS QStringLiteral("FailedLogins")
39+#define PROP_LICENSE_ACCEPTED QStringLiteral("LicenseAccepted")
40+#define PROP_LICENSE_BASE_PATH QStringLiteral("LicenseBasePath")
41+#define PROP_MOUSE_CURSOR_SPEED QStringLiteral("MouseCursorSpeed")
42+#define PROP_MOUSE_DOUBLE_CLICK_SPEED QStringLiteral("MouseDoubleClickSpeed")
43+#define PROP_MOUSE_PRIMARY_BUTTON QStringLiteral("MousePrimaryButton")
44+#define PROP_MOUSE_SCROLL_SPEED QStringLiteral("MouseScrollSpeed")
45+#define PROP_PASSWORD_DISPLAY_HINT QStringLiteral("PasswordDisplayHint")
46+#define PROP_REAL_NAME QStringLiteral("RealName")
47+#define PROP_STATS_WELCOME_SCREEN QStringLiteral("StatsWelcomeScreen")
48+#define PROP_TOUCHPAD_CURSOR_SPEED QStringLiteral("TouchpadCursorSpeed")
49+#define PROP_TOUCHPAD_DISABLE_WHILE_TYPING QStringLiteral("TouchpadDisableWhileTyping")
50+#define PROP_TOUCHPAD_DISABLE_WITH_MOUSE QStringLiteral("TouchpadDisableWithMouse")
51+#define PROP_TOUCHPAD_DOUBLE_CLICK_SPEED QStringLiteral("TouchpadDoubleClickSpeed")
52+#define PROP_TOUCHPAD_PRIMARY_BUTTON QStringLiteral("TouchpadPrimaryButton")
53+#define PROP_TOUCHPAD_SCROLL_SPEED QStringLiteral("TouchpadScrollSpeed")
54+#define PROP_TOUCHPAD_TAP_TO_CLICK QStringLiteral("TouchpadTapToClick")
55+#define PROP_TOUCHPAD_TWO_FINGER_SCROLL QStringLiteral("TouchpadTwoFingerScroll")
56+
57+
58+QVariant primaryButtonConverter(const QVariant &value)
59+{
60+ QString stringValue = value.toString();
61+ if (stringValue == "left") {
62+ return QVariant::fromValue(0);
63+ } else if (stringValue == "right") {
64+ return QVariant::fromValue(1); // Mir is less clear on this -- any non-zero value is the same
65+ } else {
66+ return QVariant::fromValue(0); // default to left
67+ }
68+}
69+
2770AccountsService::AccountsService(QObject* parent, const QString &user)
28− : QObject(parent),
29− m_service(new AccountsServiceDBusAdaptor(this)),
30− m_demoEdges(false),
31− m_enableLauncherWhileLocked(false),
32− m_enableIndicatorsWhileLocked(false),
33− m_statsWelcomeScreen(false),
34− m_passwordDisplayHint(Keyboard),
35− m_failedLogins(0),
36− m_hereEnabled(false),
37− m_hereLicensePath() // null means not set yet
71+ : QObject(parent)
72+ , m_service(new AccountsServiceDBusAdaptor(this))
3873{
3974 m_unityInput = new QDBusInterface(QStringLiteral("com.canonical.Unity.Input"),
4075 QStringLiteral("/com/canonical/Unity/Input"),
@@ -44,6 +79,45 @@ AccountsService::AccountsService(QObject* parent, const QString &user)
4479 connect(m_service, &AccountsServiceDBusAdaptor::propertiesChanged, this, &AccountsService::onPropertiesChanged);
4580 connect(m_service, &AccountsServiceDBusAdaptor::maybeChanged, this, &AccountsService::onMaybeChanged);
4681
82+ registerProperty(IFACE_ACCOUNTS_USER, PROP_BACKGROUND_FILE, QStringLiteral("backgroundFileChanged"));
83+ registerProperty(IFACE_ACCOUNTS_USER, PROP_EMAIL, QStringLiteral("emailChanged"));
84+ registerProperty(IFACE_ACCOUNTS_USER, PROP_REAL_NAME, QStringLiteral("realNameChanged"));
85+ registerProperty(IFACE_LOCATION_HERE, PROP_LICENSE_ACCEPTED, QStringLiteral("hereEnabledChanged"));
86+ registerProperty(IFACE_LOCATION_HERE, PROP_LICENSE_BASE_PATH, QStringLiteral("hereLicensePathChanged"));
87+ registerProperty(IFACE_UBUNTU_SECURITY, PROP_ENABLE_LAUNCHER_WHILE_LOCKED, QStringLiteral("enableLauncherWhileLockedChanged"));
88+ registerProperty(IFACE_UBUNTU_SECURITY, PROP_ENABLE_INDICATORS_WHILE_LOCKED, QStringLiteral("enableIndicatorsWhileLockedChanged"));
89+ registerProperty(IFACE_UBUNTU_SECURITY, PROP_PASSWORD_DISPLAY_HINT, QStringLiteral("passwordDisplayHintChanged"));
90+ registerProperty(IFACE_UBUNTU_SECURITY_OLD, PROP_STATS_WELCOME_SCREEN, QStringLiteral("statsWelcomeScreenChanged"));
91+ registerProperty(IFACE_UNITY, PROP_DEMO_EDGES, QStringLiteral("demoEdgesChanged"));
92+ registerProperty(IFACE_UNITY_PRIVATE, PROP_FAILED_LOGINS, QStringLiteral("failedLoginsChanged"));
93+
94+ registerProxy(IFACE_UBUNTU_INPUT, PROP_MOUSE_CURSOR_SPEED,
95+ m_unityInput, QStringLiteral("setMouseCursorSpeed"));
96+ registerProxy(IFACE_UBUNTU_INPUT, PROP_MOUSE_DOUBLE_CLICK_SPEED,
97+ m_unityInput, QStringLiteral("setMouseDoubleClickSpeed"));
98+ registerProxy(IFACE_UBUNTU_INPUT, PROP_MOUSE_PRIMARY_BUTTON,
99+ m_unityInput, QStringLiteral("setMousePrimaryButton"),
100+ primaryButtonConverter);
101+ registerProxy(IFACE_UBUNTU_INPUT, PROP_MOUSE_SCROLL_SPEED,
102+ m_unityInput, QStringLiteral("setMouseScrollSpeed"));
103+ registerProxy(IFACE_UBUNTU_INPUT, PROP_TOUCHPAD_CURSOR_SPEED,
104+ m_unityInput, QStringLiteral("setTouchpadCursorSpeed"));
105+ registerProxy(IFACE_UBUNTU_INPUT, PROP_TOUCHPAD_SCROLL_SPEED,
106+ m_unityInput, QStringLiteral("setTouchpadScrollSpeed"));
107+ registerProxy(IFACE_UBUNTU_INPUT, PROP_TOUCHPAD_DISABLE_WHILE_TYPING,
108+ m_unityInput, QStringLiteral("setTouchpadDisableWhileTyping"));
109+ registerProxy(IFACE_UBUNTU_INPUT, PROP_TOUCHPAD_DISABLE_WITH_MOUSE,
110+ m_unityInput, QStringLiteral("setTouchpadDisableWithMouse"));
111+ registerProxy(IFACE_UBUNTU_INPUT, PROP_TOUCHPAD_DOUBLE_CLICK_SPEED,
112+ m_unityInput, QStringLiteral("setTouchpadDoubleClickSpeed"));
113+ registerProxy(IFACE_UBUNTU_INPUT, PROP_TOUCHPAD_PRIMARY_BUTTON,
114+ m_unityInput, QStringLiteral("setTouchpadPrimaryButton"),
115+ primaryButtonConverter);
116+ registerProxy(IFACE_UBUNTU_INPUT, PROP_TOUCHPAD_TAP_TO_CLICK,
117+ m_unityInput, QStringLiteral("setTouchpadTapToClick"));
118+ registerProxy(IFACE_UBUNTU_INPUT, PROP_TOUCHPAD_TWO_FINGER_SCROLL,
119+ m_unityInput, QStringLiteral("setTouchpadTwoFingerScroll"));
120+
47121 setUser(!user.isEmpty() ? user : QString::fromUtf8(qgetenv("USER")));
48122}
49123
@@ -57,410 +131,222 @@ void AccountsService::setUser(const QString &user)
57131 if (user.isEmpty() || m_user == user)
58132 return;
59133
134+ bool wasEmpty = m_user.isEmpty();
135+
60136 m_user = user;
61137 Q_EMIT userChanged();
62138
63− updateDemoEdges(false);
64− updateEnableLauncherWhileLocked(false);
65− updateEnableIndicatorsWhileLocked(false);
66− updateBackgroundFile(false);
67− updateMouseCursorSpeed();
68− updateTouchpadCursorSpeed();
69− updateStatsWelcomeScreen(false);
70− updatePasswordDisplayHint(false);
71− updateFailedLogins(false);
72− updateHereEnabled(false);
73− updateHereLicensePath(false);
139+ // Do the first update synchronously, as a cheap way to block rendering
140+ // until we have the right values on bootup.
141+ refresh(!wasEmpty);
74142}
75143
76144bool AccountsService::demoEdges() const
77145{
78− return m_demoEdges;
146+ auto value = getProperty(IFACE_UNITY, PROP_DEMO_EDGES);
147+ return value.toBool();
79148}
80149
81150void AccountsService::setDemoEdges(bool demoEdges)
82151{
83− if (m_demoEdges != demoEdges) {
84− m_demoEdges = demoEdges;
85− m_service->setUserPropertyAsync(m_user, QStringLiteral("com.canonical.unity.AccountsService"), QStringLiteral("demo-edges"), demoEdges);
86−
87− Q_EMIT demoEdgesChanged();
88− }
152+ setProperty(IFACE_UNITY, PROP_DEMO_EDGES, demoEdges);
89153}
90154
91155bool AccountsService::enableLauncherWhileLocked() const
92156{
93− return m_enableLauncherWhileLocked;
157+ auto value = getProperty(IFACE_UBUNTU_SECURITY, PROP_ENABLE_LAUNCHER_WHILE_LOCKED);
158+ return value.toBool();
94159}
95160
96161bool AccountsService::enableIndicatorsWhileLocked() const
97162{
98− return m_enableIndicatorsWhileLocked;
163+ auto value = getProperty(IFACE_UBUNTU_SECURITY, PROP_ENABLE_INDICATORS_WHILE_LOCKED);
164+ return value.toBool();
99165}
100166
101167QString AccountsService::backgroundFile() const
102168{
103− return m_backgroundFile;
169+ auto value = getProperty(IFACE_ACCOUNTS_USER, PROP_BACKGROUND_FILE);
170+ return value.toString();
104171}
105172
106173bool AccountsService::statsWelcomeScreen() const
107174{
108− return m_statsWelcomeScreen;
175+ auto value = getProperty(IFACE_UBUNTU_SECURITY_OLD, PROP_STATS_WELCOME_SCREEN);
176+ return value.toBool();
109177}
110178
111179AccountsService::PasswordDisplayHint AccountsService::passwordDisplayHint() const
112180{
113− return m_passwordDisplayHint;
181+ auto value = getProperty(IFACE_UBUNTU_SECURITY, PROP_PASSWORD_DISPLAY_HINT);
182+ return (PasswordDisplayHint)value.toInt();
114183}
115184
116185bool AccountsService::hereEnabled() const
117186{
118− return m_hereEnabled;
187+ auto value = getProperty(IFACE_LOCATION_HERE, PROP_LICENSE_ACCEPTED);
188+ return value.toBool();
119189}
120190
121191void AccountsService::setHereEnabled(bool enabled)
122192{
123− if (m_hereEnabled != enabled) {
124− m_hereEnabled = enabled;
125− m_service->setUserPropertyAsync(m_user, QStringLiteral("com.ubuntu.location.providers.here.AccountsService"), QStringLiteral("LicenseAccepted"), enabled);
126−
127− Q_EMIT hereEnabledChanged();
128− }
193+ setProperty(IFACE_LOCATION_HERE, PROP_LICENSE_ACCEPTED, enabled);
129194}
130195
131196QString AccountsService::hereLicensePath() const
132197{
133− return m_hereLicensePath;
198+ auto value = getProperty(IFACE_LOCATION_HERE, PROP_LICENSE_BASE_PATH);
199+ QString hereLicensePath = value.toString();
200+ if (hereLicensePath.isEmpty() || !QFile::exists(hereLicensePath))
201+ hereLicensePath = QStringLiteral("");
202+ return hereLicensePath;
134203}
135204
136205bool AccountsService::hereLicensePathValid() const
137206{
138− return !m_hereLicensePath.isNull();
207+ auto value = getProperty(IFACE_LOCATION_HERE, PROP_LICENSE_BASE_PATH);
208+ return !value.toString().isNull();
139209}
140210
141−void AccountsService::updateDemoEdges(bool async)
211+QString AccountsService::realName() const
142212{
143− QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
144− QStringLiteral("com.canonical.unity.AccountsService"),
145− QStringLiteral("demo-edges"));
146− QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
147−
148− connect(watcher, &QDBusPendingCallWatcher::finished,
149− this, [this](QDBusPendingCallWatcher* watcher) {
150−
151− QDBusPendingReply<QDBusVariant> reply = *watcher;
152− watcher->deleteLater();
153− if (reply.isError()) {
154− qWarning() << "Failed to get 'demo-edges' property - " << reply.error().message();
155− return;
156− }
157−
158− auto demoEdges = reply.value().variant().toBool();
159− if (m_demoEdges != demoEdges) {
160− m_demoEdges = demoEdges;
161− Q_EMIT demoEdgesChanged();
162− }
163− });
164− if (!async) {
165− watcher->waitForFinished();
166− delete watcher;
167− }
213+ auto value = getProperty(IFACE_ACCOUNTS_USER, PROP_REAL_NAME);
214+ return value.toString();
168215}
169216
170−void AccountsService::updateEnableLauncherWhileLocked(bool async)
217+void AccountsService::setRealName(const QString &realName)
171218{
172− QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
173− QStringLiteral("com.ubuntu.AccountsService.SecurityPrivacy"),
174− QStringLiteral("EnableLauncherWhileLocked"));
175− QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
176−
177− connect(watcher, &QDBusPendingCallWatcher::finished,
178− this, [this](QDBusPendingCallWatcher* watcher) {
179−
180− QDBusPendingReply<QVariant> reply = *watcher;
181− watcher->deleteLater();
182− if (reply.isError()) {
183− qWarning() << "Failed to get 'EnableLauncherWhileLocked' property - " << reply.error().message();
184− return;
185− }
186−
187− const bool enableLauncherWhileLocked = reply.value().toBool();
188− if (m_enableLauncherWhileLocked != enableLauncherWhileLocked) {
189− m_enableLauncherWhileLocked = enableLauncherWhileLocked;
190− Q_EMIT enableLauncherWhileLockedChanged();
191− }
192− });
193− if (!async) {
194− watcher->waitForFinished();
195− delete watcher;
196− }
219+ setProperty(IFACE_ACCOUNTS_USER, PROP_REAL_NAME, realName);
197220}
198221
199−void AccountsService::updateEnableIndicatorsWhileLocked(bool async)
222+QString AccountsService::email() const
200223{
201− QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
202− QStringLiteral("com.ubuntu.AccountsService.SecurityPrivacy"),
203− QStringLiteral("EnableIndicatorsWhileLocked"));
204− QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
205−
206− connect(watcher, &QDBusPendingCallWatcher::finished,
207− this, [this](QDBusPendingCallWatcher* watcher) {
208−
209− QDBusPendingReply<QVariant> reply = *watcher;
210− watcher->deleteLater();
211− if (reply.isError()) {
212− qWarning() << "Failed to get 'EnableIndicatorsWhileLocked' property - " << reply.error().message();
213− return;
214− }
215−
216− const bool enableIndicatorsWhileLocked = reply.value().toBool();
217− if (m_enableIndicatorsWhileLocked != enableIndicatorsWhileLocked) {
218− m_enableIndicatorsWhileLocked = enableIndicatorsWhileLocked;
219− Q_EMIT enableIndicatorsWhileLockedChanged();
220− }
221− });
222− if (!async) {
223− watcher->waitForFinished();
224− delete watcher;
225− }
224+ auto value = getProperty(IFACE_ACCOUNTS_USER, PROP_EMAIL);
225+ return value.toString();
226226}
227227
228−void AccountsService::updateBackgroundFile(bool async)
228+void AccountsService::setEmail(const QString &email)
229229{
230− QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
231− QStringLiteral("org.freedesktop.Accounts.User"),
232− QStringLiteral("BackgroundFile"));
233− QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
234−
235− connect(watcher, &QDBusPendingCallWatcher::finished,
236− this, [this](QDBusPendingCallWatcher* watcher) {
237−
238− QDBusPendingReply<QVariant> reply = *watcher;
239− watcher->deleteLater();
240− if (reply.isError()) {
241− qWarning() << "Failed to get 'BackgroundFile' property - " << reply.error().message();
242− return;
243− }
244−
245− const QString backgroundFile = reply.value().toString();
246− if (m_backgroundFile != backgroundFile) {
247− m_backgroundFile = backgroundFile;
248− Q_EMIT backgroundFileChanged();
249− }
250− });
251− if (!async) {
252− watcher->waitForFinished();
253− delete watcher;
254− }
230+ setProperty(IFACE_ACCOUNTS_USER, PROP_EMAIL, email);
255231}
256232
257−void AccountsService::updateMouseCursorSpeed()
233+uint AccountsService::failedLogins() const
258234{
259− QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
260− QStringLiteral("com.ubuntu.AccountsService.Input"),
261− QStringLiteral("MouseCursorSpeed"));
262− QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
263−
264− connect(watcher, &QDBusPendingCallWatcher::finished,
265− this, [this](QDBusPendingCallWatcher* watcher) {
266−
267− QDBusPendingReply<QVariant> reply = *watcher;
268− watcher->deleteLater();
269− if (reply.isError()) {
270− qWarning() << "Failed to get 'MouseCursorSpeed' property - " << reply.error().message();
271− return;
272− }
273−
274− // Merely proxy this along to USC. We don't care about keeping a copy
275− // or exporting it internally.
276− m_unityInput->asyncCall(QStringLiteral("setMouseCursorSpeed"), reply.value());
277− });
235+ return getProperty(IFACE_UNITY_PRIVATE, PROP_FAILED_LOGINS).toUInt();
278236}
279237
280−void AccountsService::updateTouchpadCursorSpeed()
238+void AccountsService::setFailedLogins(uint failedLogins)
281239{
282− QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
283− QStringLiteral("com.ubuntu.AccountsService.Input"),
284− QStringLiteral("TouchpadCursorSpeed"));
285− QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
286−
287− connect(watcher, &QDBusPendingCallWatcher::finished,
288− this, [this](QDBusPendingCallWatcher* watcher) {
240+ setProperty(IFACE_UNITY_PRIVATE, PROP_FAILED_LOGINS, failedLogins);
241+}
289242
290− QDBusPendingReply<QVariant> reply = *watcher;
291− watcher->deleteLater();
292− if (reply.isError()) {
293− qWarning() << "Failed to get 'TouchpadCursorSpeed' property - " << reply.error().message();
294− return;
295− }
243+// ====================================================
244+// Everything below this line is generic helper methods
245+// ====================================================
296246
297− // Merely proxy this along to USC. We don't care about keeping a copy
298− // or exporting it internally.
299− m_unityInput->asyncCall(QStringLiteral("setTouchpadCursorSpeed"), reply.value());
300− });
247+void AccountsService::emitChangedForProperty(const QString &interface, const QString &property)
248+{
249+ QString signalName = m_properties[interface][property].signal;
250+ QMetaObject::invokeMethod(this, signalName.toUtf8().data());
301251}
302252
303−void AccountsService::updateStatsWelcomeScreen(bool async)
253+QVariant AccountsService::getProperty(const QString &interface, const QString &property) const
304254{
305− QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
306− QStringLiteral("com.ubuntu.touch.AccountsService.SecurityPrivacy"),
307− QStringLiteral("StatsWelcomeScreen"));
308− QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
309−
310− connect(watcher, &QDBusPendingCallWatcher::finished,
311− this, [this](QDBusPendingCallWatcher* watcher) {
312−
313− QDBusPendingReply<QVariant> reply = *watcher;
314− watcher->deleteLater();
315− if (reply.isError()) {
316− qWarning() << "Failed to get 'StatsWelcomeScreen' property - " << reply.error().message();
317− return;
318− }
319−
320− const bool statsWelcomeScreen = reply.value().toBool();
321− if (m_statsWelcomeScreen != statsWelcomeScreen) {
322− m_statsWelcomeScreen = statsWelcomeScreen;
323− Q_EMIT statsWelcomeScreenChanged();
324− }
325− });
326− if (!async) {
327− watcher->waitForFinished();
328− delete watcher;
329− }
255+ return m_properties[interface][property].value;
330256}
331257
332−void AccountsService::updatePasswordDisplayHint(bool async)
258+void AccountsService::setProperty(const QString &interface, const QString &property, const QVariant &value)
333259{
334− QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
335− QStringLiteral("com.ubuntu.AccountsService.SecurityPrivacy"),
336− QStringLiteral("PasswordDisplayHint"));
337− QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
338−
339− connect(watcher, &QDBusPendingCallWatcher::finished,
340− this, [this](QDBusPendingCallWatcher* watcher) {
341−
342− QDBusPendingReply<QVariant> reply = *watcher;
343− watcher->deleteLater();
344− if (reply.isError()) {
345− qWarning() << "Failed to get 'PasswordDisplayHint' property - " << reply.error().message();
346− return;
347− }
348−
349− const PasswordDisplayHint passwordDisplayHint = (PasswordDisplayHint)reply.value().toInt();
350− if (m_passwordDisplayHint != passwordDisplayHint) {
351− m_passwordDisplayHint = passwordDisplayHint;
352− Q_EMIT passwordDisplayHintChanged();
353− }
354− });
355− if (!async) {
356− watcher->waitForFinished();
357− delete watcher;
260+ if (m_properties[interface][property].value != value) {
261+ m_properties[interface][property].value = value;
262+ m_service->setUserPropertyAsync(m_user, interface, property, value);
263+ emitChangedForProperty(interface, property);
358264 }
359265}
360266
361−void AccountsService::updateFailedLogins(bool async)
267+void AccountsService::updateCache(const QString &interface, const QString &property, const QVariant &value)
362268{
363− QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
364− QStringLiteral("com.canonical.unity.AccountsService.Private"),
365− QStringLiteral("FailedLogins"));
366− QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
367−
368− connect(watcher, &QDBusPendingCallWatcher::finished,
369− this, [this](QDBusPendingCallWatcher* watcher) {
370−
371− QDBusPendingReply<QVariant> reply = *watcher;
372− watcher->deleteLater();
373− if (reply.isError()) {
374− qWarning() << "Failed to get 'FailedLogins' property - " << reply.error().message();
375− return;
269+ PropertyInfo &info = m_properties[interface][property];
270+
271+ if (info.proxyInterface) {
272+ QVariant finalValue;
273+ if (info.proxyConverter) {
274+ finalValue = info.proxyConverter(value);
275+ } else {
276+ finalValue = value;
376277 }
278+ info.proxyInterface->asyncCall(info.proxyMethod, finalValue);
279+ return; // don't bother saving a copy
280+ }
377281
378− const uint failedLogins = reply.value().toUInt();
379− if (m_failedLogins != failedLogins) {
380− m_failedLogins = failedLogins;
381− Q_EMIT failedLoginsChanged();
382− }
383− });
384− if (!async) {
385− watcher->waitForFinished();
386− delete watcher;
282+ if (info.value != value) {
283+ info.value = value;
284+ emitChangedForProperty(interface, property);
387285 }
388286}
389287
390−void AccountsService::updateHereEnabled(bool async)
288+void AccountsService::updateProperty(const QString &interface, const QString &property)
391289{
392290 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
393− QStringLiteral("com.ubuntu.location.providers.here.AccountsService"),
394− QStringLiteral("LicenseAccepted"));
291+ interface,
292+ property);
395293 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
396294
397295 connect(watcher, &QDBusPendingCallWatcher::finished,
398− this, [this](QDBusPendingCallWatcher* watcher) {
296+ this, [this, interface, property](QDBusPendingCallWatcher* watcher) {
399297
400298 QDBusPendingReply<QVariant> reply = *watcher;
401299 watcher->deleteLater();
402300 if (reply.isError()) {
403− qWarning() << "Failed to get 'LicenseAccepted' property - " << reply.error().message();
301+ qWarning() << "Failed to get '" << property << "' property:" << reply.error().message();
404302 return;
405303 }
406304
407− const bool hereEnabled = reply.value().toBool();
408− if (m_hereEnabled != hereEnabled) {
409− m_hereEnabled = hereEnabled;
410− Q_EMIT hereEnabledChanged();
411− }
305+ updateCache(interface, property, reply.value());
412306 });
413− if (!async) {
414− watcher->waitForFinished();
415− delete watcher;
416− }
417307}
418308
419−void AccountsService::updateHereLicensePath(bool async)
309+void AccountsService::updateAllProperties(const QString &interface, bool async)
420310{
421− QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
422− QStringLiteral("com.ubuntu.location.providers.here.AccountsService"),
423− QStringLiteral("LicenseBasePath"));
311+ QDBusPendingCall pendingReply = m_service->getAllPropertiesAsync(m_user,
312+ interface);
424313 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
425314
426315 connect(watcher, &QDBusPendingCallWatcher::finished,
427− this, [this](QDBusPendingCallWatcher* watcher) {
316+ this, [this, interface](QDBusPendingCallWatcher* watcher) {
428317
429− QDBusPendingReply<QVariant> reply = *watcher;
318+ QDBusPendingReply< QHash<QString, QVariant> > reply = *watcher;
430319 watcher->deleteLater();
431320 if (reply.isError()) {
432− qWarning() << "Failed to get 'LicenseBasePath' property - " << reply.error().message();
321+ qWarning() << "Failed to get all properties for" << interface << ":" << reply.error().message();
433322 return;
434323 }
435324
436− QString hereLicensePath = reply.value().toString();
437− if (hereLicensePath.isEmpty() || !QFile::exists(hereLicensePath))
438− hereLicensePath = QLatin1String("");
439−
440− if (m_hereLicensePath.isNull() || m_hereLicensePath != hereLicensePath) {
441− m_hereLicensePath = hereLicensePath;
442− Q_EMIT hereLicensePathChanged();
325+ auto valueHash = reply.value();
326+ auto i = valueHash.constBegin();
327+ while (i != valueHash.constEnd()) {
328+ updateCache(interface, i.key(), i.value());
329+ ++i;
443330 }
444331 });
445332 if (!async) {
446333 watcher->waitForFinished();
447− delete watcher;
448334 }
449335}
450336
451−uint AccountsService::failedLogins() const
337+void AccountsService::registerProxy(const QString &interface, const QString &property, QDBusInterface *iface, const QString &method, ProxyConverter converter)
452338{
453− return m_failedLogins;
339+ registerProperty(interface, property, nullptr);
340+
341+ m_properties[interface][property].proxyInterface = iface;
342+ m_properties[interface][property].proxyMethod = method;
343+ m_properties[interface][property].proxyConverter = converter;
454344}
455345
456−void AccountsService::setFailedLogins(uint failedLogins)
346+void AccountsService::registerProperty(const QString &interface, const QString &property, const QString &signal)
457347{
458− if (m_failedLogins != failedLogins) {
459− m_failedLogins = failedLogins;
460− m_service->setUserPropertyAsync(m_user, QStringLiteral("com.canonical.unity.AccountsService.Private"), QStringLiteral("FailedLogins"), failedLogins);
461−
462− Q_EMIT failedLoginsChanged();
463− }
348+ m_properties[interface][property] = PropertyInfo();
349+ m_properties[interface][property].signal = signal;
464350}
465351
466352void AccountsService::onPropertiesChanged(const QString &user, const QString &interface, const QStringList &changed)
@@ -469,42 +355,13 @@ void AccountsService::onPropertiesChanged(const QString &user, const QString &in
469355 return;
470356 }
471357
472− if (interface == QLatin1String("com.canonical.unity.AccountsService")) {
473− if (changed.contains(QStringLiteral("demo-edges"))) {
474− updateDemoEdges();
475− }
476− } else if (interface == QLatin1String("com.canonical.unity.AccountsService.Private")) {
477− if (changed.contains(QStringLiteral("FailedLogins"))) {
478− updateFailedLogins();
479− }
480− } else if (interface == QLatin1String("com.ubuntu.AccountsService.Input")) {
481− if (changed.contains(QStringLiteral("MouseCursorSpeed"))) {
482− updateMouseCursorSpeed();
483− }
484− if (changed.contains(QStringLiteral("TouchpadCursorSpeed"))) {
485− updateTouchpadCursorSpeed();
486− }
487− } else if (interface == QLatin1String("com.ubuntu.touch.AccountsService.SecurityPrivacy")) {
488− if (changed.contains(QStringLiteral("StatsWelcomeScreen"))) {
489− updateStatsWelcomeScreen();
490− }
491− } else if (interface == QLatin1String("com.ubuntu.AccountsService.SecurityPrivacy")) {
492− if (changed.contains(QStringLiteral("PasswordDisplayHint"))) {
493− updatePasswordDisplayHint();
494− }
495− if (changed.contains(QStringLiteral("EnableLauncherWhileLocked"))) {
496− updateEnableLauncherWhileLocked();
497− }
498− if (changed.contains(QStringLiteral("EnableIndicatorsWhileLocked"))) {
499− updateEnableIndicatorsWhileLocked();
500− }
501− } else if (interface == QLatin1String("com.ubuntu.location.providers.here.AccountsService")) {
502− if (changed.contains(QStringLiteral("LicenseAccepted"))) {
503− updateHereEnabled();
504− }
505− if (changed.contains(QStringLiteral("LicenseBasePath"))) {
506− updateHereLicensePath();
358+ auto propHash = m_properties.value(interface);
359+ auto i = propHash.constBegin();
360+ while (i != propHash.constEnd()) {
361+ if (changed.contains(i.key())) {
362+ updateProperty(interface, i.key());
507363 }
364+ ++i;
508365 }
509366}
510367
@@ -514,6 +371,20 @@ void AccountsService::onMaybeChanged(const QString &user)
514371 return;
515372 }
516373
517− // Standard properties might have changed
518− updateBackgroundFile();
374+ // Any of the standard properties might have changed!
375+ auto propHash = m_properties.value(IFACE_ACCOUNTS_USER);
376+ auto i = propHash.constBegin();
377+ while (i != propHash.constEnd()) {
378+ updateProperty(IFACE_ACCOUNTS_USER, i.key());
379+ ++i;
380+ }
381+}
382+
383+void AccountsService::refresh(bool async)
384+{
385+ auto i = m_properties.constBegin();
386+ while (i != m_properties.constEnd()) {
387+ updateAllProperties(i.key(), async);
388+ ++i;
389+ }
519390}
plugins/AccountsService/AccountsService.h+34−23
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013, 2015 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -12,15 +12,15 @@
1212 *
1313 * You should have received a copy of the GNU General Public License
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors: Michael Terry <michael.terry@canonical.com>
1715 */
1816
1917#ifndef UNITY_ACCOUNTSSERVICE_H
2018#define UNITY_ACCOUNTSSERVICE_H
2119
20+#include <QHash>
2221#include <QObject>
2322#include <QString>
23+#include <QVariant>
2424
2525class AccountsServiceDBusAdaptor;
2626class QDBusInterface;
@@ -66,6 +66,8 @@ class AccountsService: public QObject
6666 Q_PROPERTY(bool hereLicensePathValid // qml sees a null string as "", so we use proxy setting for that
6767 READ hereLicensePathValid
6868 NOTIFY hereLicensePathChanged)
69+ Q_PROPERTY(QString realName READ realName WRITE setRealName NOTIFY realNameChanged)
70+ Q_PROPERTY(QString email READ email WRITE setEmail NOTIFY emailChanged)
6971
7072public:
7173 enum PasswordDisplayHint {
@@ -91,6 +93,10 @@ public:
9193 void setHereEnabled(bool enabled);
9294 QString hereLicensePath() const;
9395 bool hereLicensePathValid() const;
96+ QString realName() const;
97+ void setRealName(const QString &realName);
98+ QString email() const;
99+ void setEmail(const QString &email);
94100
95101Q_SIGNALS:
96102 void userChanged();
@@ -103,36 +109,41 @@ Q_SIGNALS:
103109 void failedLoginsChanged();
104110 void hereEnabledChanged();
105111 void hereLicensePathChanged();
112+ void realNameChanged();
113+ void emailChanged();
106114
107115private Q_SLOTS:
108116 void onPropertiesChanged(const QString &user, const QString &interface, const QStringList &changed);
109117 void onMaybeChanged(const QString &user);
110118
111119private:
112− void updateDemoEdges(bool async = true);
113− void updateEnableLauncherWhileLocked(bool async = true);
114− void updateEnableIndicatorsWhileLocked(bool async = true);
115− void updateBackgroundFile(bool async = true);
116− void updateMouseCursorSpeed();
117− void updateTouchpadCursorSpeed();
118− void updateStatsWelcomeScreen(bool async = true);
119− void updatePasswordDisplayHint(bool async = true);
120− void updateFailedLogins(bool async = true);
121− void updateHereEnabled(bool async = true);
122− void updateHereLicensePath(bool async = true);
120+ typedef QVariant (*ProxyConverter)(const QVariant &);
121+
122+ void refresh(bool async);
123+ void registerProperty(const QString &interface, const QString &property, const QString &signal);
124+ void registerProxy(const QString &interface, const QString &property, QDBusInterface *iface, const QString &method, ProxyConverter converter = nullptr);
125+
126+ void updateAllProperties(const QString &interface, bool async);
127+ void updateProperty(const QString &interface, const QString &property);
128+ void updateCache(const QString &interface, const QString &property, const QVariant &value);
123129
130+ void setProperty(const QString &interface, const QString &property, const QVariant &value);
131+ QVariant getProperty(const QString &interface, const QString &property) const;
132+
133+ void emitChangedForProperty(const QString &interface, const QString &property);
134+
135+ struct PropertyInfo {
136+ QVariant value{};
137+ QString signal{};
138+ QDBusInterface *proxyInterface{};
139+ QString proxyMethod{};
140+ ProxyConverter proxyConverter{};
141+ };
142+ typedef QHash< QString, QHash<QString, PropertyInfo> > PropertyHash;
143+ PropertyHash m_properties;
124144 AccountsServiceDBusAdaptor *m_service;
125145 QDBusInterface *m_unityInput;
126146 QString m_user;
127− bool m_demoEdges;
128− bool m_enableLauncherWhileLocked;
129− bool m_enableIndicatorsWhileLocked;
130− QString m_backgroundFile;
131− bool m_statsWelcomeScreen;
132− PasswordDisplayHint m_passwordDisplayHint;
133− uint m_failedLogins;
134− bool m_hereEnabled;
135− QString m_hereLicensePath;
136147};
137148
138149#endif
plugins/AccountsService/AccountsServiceDBusAdaptor.cpp+11−4
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013-2016 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -12,8 +12,6 @@
1212 *
1313 * You should have received a copy of the GNU General Public License
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Author: Michael Terry <michael.terry@canonical.com>
1715 */
1816
1917#include "AccountsServiceDBusAdaptor.h"
@@ -37,6 +35,15 @@ AccountsServiceDBusAdaptor::AccountsServiceDBusAdaptor(QObject* parent)
3735 connection, this);
3836}
3937
38+QDBusPendingReply<QVariantMap> AccountsServiceDBusAdaptor::getAllPropertiesAsync(const QString &user, const QString &interface)
39+{
40+ QDBusInterface *iface = getUserInterface(user);
41+ if (iface != nullptr && iface->isValid()) {
42+ return iface->asyncCall(QStringLiteral("GetAll"), interface);
43+ }
44+ return QDBusPendingReply<QVariantMap>(QDBusMessage::createError(QDBusError::Other, QStringLiteral("Invalid Interface")));
45+}
46+
4047QDBusPendingReply<QVariant> AccountsServiceDBusAdaptor::getUserPropertyAsync(const QString &user, const QString &interface, const QString &property)
4148{
4249 QDBusInterface *iface = getUserInterface(user);
@@ -80,7 +87,7 @@ void AccountsServiceDBusAdaptor::maybeChangedSlot()
8087 m_ignoreNextChanged = false;
8188}
8289
83−QString AccountsServiceDBusAdaptor::getUserForPath(const QString &path)
90+QString AccountsServiceDBusAdaptor::getUserForPath(const QString &path) const
8491{
8592 QMap<QString, QDBusInterface *>::const_iterator i;
8693 for (i = m_users.constBegin(); i != m_users.constEnd(); ++i) {
plugins/AccountsService/AccountsServiceDBusAdaptor.h+5−6
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013-2016 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -12,8 +12,6 @@
1212 *
1313 * You should have received a copy of the GNU General Public License
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors: Michael Terry <michael.terry@canonical.com>
1715 */
1816
1917#ifndef UNITY_ACCOUNTSSERVICEDBUSADAPTOR_H
@@ -35,8 +33,9 @@ public:
3533 explicit AccountsServiceDBusAdaptor(QObject *parent = 0);
3634 ~AccountsServiceDBusAdaptor() = default;
3735
38− Q_INVOKABLE QDBusPendingReply<QVariant> getUserPropertyAsync(const QString &user, const QString &interface, const QString &property);
39− Q_INVOKABLE QDBusPendingCall setUserPropertyAsync(const QString &user, const QString &interface, const QString &property, const QVariant &value);
36+ QDBusPendingReply<QVariantMap> getAllPropertiesAsync(const QString &user, const QString &interface);
37+ QDBusPendingReply<QVariant> getUserPropertyAsync(const QString &user, const QString &interface, const QString &property);
38+ QDBusPendingCall setUserPropertyAsync(const QString &user, const QString &interface, const QString &property, const QVariant &value);
4039
4140Q_SIGNALS:
4241 void propertiesChanged(const QString &user, const QString &interface, const QStringList &changed);
@@ -48,7 +47,7 @@ private Q_SLOTS:
4847
4948private:
5049 QDBusInterface *getUserInterface(const QString &user);
51− QString getUserForPath(const QString &path);
50+ QString getUserForPath(const QString &path) const;
5251
5352 QDBusInterface *m_accountsManager;
5453 QMap<QString, QDBusInterface *> m_users;
plugins/Cursor/Cursor.qmltypesnew file+78
@@ -0,0 +1,78 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable Cursor 1.0 plugins'
8+
9+Module {
10+ Component {
11+ name: "MirMousePointerInterface"
12+ defaultProperty: "data"
13+ prototype: "QQuickItem"
14+ Property { name: "cursorName"; type: "string"; isReadonly: true }
15+ Property { name: "themeName"; type: "string"; isReadonly: true }
16+ Property { name: "hotspotX"; type: "double"; isReadonly: true }
17+ Property { name: "hotspotY"; type: "double"; isReadonly: true }
18+ Signal {
19+ name: "cursorNameChanged"
20+ Parameter { name: "name"; type: "string" }
21+ }
22+ Signal {
23+ name: "themeNameChanged"
24+ Parameter { name: "name"; type: "string" }
25+ }
26+ Signal {
27+ name: "hotspotXChanged"
28+ Parameter { name: "value"; type: "double" }
29+ }
30+ Signal {
31+ name: "hotspotYChanged"
32+ Parameter { name: "value"; type: "double" }
33+ }
34+ Method {
35+ name: "handleMouseEvent"
36+ Parameter { name: "timestamp"; type: "ulong" }
37+ Parameter { name: "movement"; type: "QPointF" }
38+ Parameter { name: "buttons"; type: "Qt::MouseButtons" }
39+ Parameter { name: "modifiers"; type: "Qt::KeyboardModifiers" }
40+ }
41+ Method {
42+ name: "handleWheelEvent"
43+ Parameter { name: "timestamp"; type: "ulong" }
44+ Parameter { name: "angleDelta"; type: "QPoint" }
45+ Parameter { name: "modifiers"; type: "Qt::KeyboardModifiers" }
46+ }
47+ }
48+ Component {
49+ name: "MousePointer"
50+ defaultProperty: "data"
51+ prototype: "MirMousePointerInterface"
52+ exports: ["Cursor/MousePointer 1.0"]
53+ exportMetaObjectRevisions: [0]
54+ Signal {
55+ name: "pushedLeftBoundary"
56+ Parameter { name: "amount"; type: "double" }
57+ Parameter { name: "buttons"; type: "Qt::MouseButtons" }
58+ }
59+ Signal {
60+ name: "pushedRightBoundary"
61+ Parameter { name: "amount"; type: "double" }
62+ Parameter { name: "buttons"; type: "Qt::MouseButtons" }
63+ }
64+ Method {
65+ name: "handleMouseEvent"
66+ Parameter { name: "timestamp"; type: "ulong" }
67+ Parameter { name: "movement"; type: "QPointF" }
68+ Parameter { name: "buttons"; type: "Qt::MouseButtons" }
69+ Parameter { name: "modifiers"; type: "Qt::KeyboardModifiers" }
70+ }
71+ Method {
72+ name: "handleWheelEvent"
73+ Parameter { name: "timestamp"; type: "ulong" }
74+ Parameter { name: "angleDelta"; type: "QPoint" }
75+ Parameter { name: "modifiers"; type: "Qt::KeyboardModifiers" }
76+ }
77+ }
78+}
plugins/Dash/AudioProgressBar.qml+1
@@ -31,6 +31,7 @@ Item {
3131 anchors { left: parent.left; right: parent.right }
3232 height: units.dp(6)
3333 source: "graphics/music_progress_bg.png"
34+ asynchronous: true
3435 sourceSize.width: width
3536 sourceSize.height: height
3637 }
plugins/Dash/CardCreator.js+69−34
@@ -18,12 +18,13 @@
1818
1919// %1 is the template["card-background"]["elements"][0]
2020// %2 is the template["card-background"]["elements"][1]
21−// %3 is the template["card-background"] string
21+// %3 is whether the loader should be asynchronous or not
22+// %4 is the template["card-background"] string
2223var kBackgroundLoaderCode = 'Loader {\n\
2324 id: backgroundLoader; \n\
2425 objectName: "backgroundLoader"; \n\
2526 anchors.fill: parent; \n\
26− asynchronous: root.asynchronous; \n\
27+ asynchronous: %3; \n\
2728 visible: status == Loader.Ready; \n\
2829 sourceComponent: UbuntuShape { \n\
2930 objectName: "background"; \n\
@@ -46,7 +47,7 @@ var kBackgroundLoaderCode = 'Loader {\n\
4647 objectName: "backgroundImage"; \n\
4748 source: { \n\
4849 if (cardData && typeof cardData["background"] === "string") return cardData["background"]; \n\
49− else return %3; \n\
50+ else return %4; \n\
5051 } \n\
5152 } \n\
5253 function getColor(index) { \n\
@@ -63,8 +64,9 @@ var kBackgroundLoaderCode = 'Loader {\n\
6364// %3 is used as image height
6465// %4 is used for artShapeSource.hideSource and inner Loader visible
6566// %5 is used as aspect ratio fallback
66−// %6 is injected as code to artImage
67−// %7 is used as image fallback
67+// %6 is whether the loader should be asynchronous or not
68+// %7 is injected as code to artImage
69+// %8 is used as image fallback
6870var kArtShapeHolderCode = 'Item { \n\
6971 id: artShapeHolder; \n\
7072 height: root.fixedArtShapeSize.height > 0 ? root.fixedArtShapeSize.height : artShapeLoader.height; \n\
@@ -73,9 +75,9 @@ var kArtShapeHolderCode = 'Item { \n\
7375 Loader { \n\
7476 id: artShapeLoader; \n\
7577 objectName: "artShapeLoader"; \n\
76− readonly property string cardArt: cardData && cardData["art"] || %7; \n\
78+ readonly property string cardArt: cardData && cardData["art"] || %8; \n\
7779 active: cardArt != ""; \n\
78− asynchronous: root.asynchronous; \n\
80+ asynchronous: %6; \n\
7981 visible: status == Loader.Ready; \n\
8082 sourceComponent: Item { \n\
8183 id: artShape; \n\
@@ -132,10 +134,10 @@ var kArtShapeHolderCode = 'Item { \n\
132134 id: artImage; \n\
133135 objectName: "artImage"; \n\
134136 source: artShapeLoader.cardArt; \n\
135− asynchronous: root.asynchronous; \n\
137+ asynchronous: %6; \n\
136138 width: %2; \n\
137139 height: %3; \n\
138− %6 \n\
140+ %7 \n\
139141 } \n\
140142 } \n\
141143 } \n\
@@ -144,6 +146,7 @@ var kArtShapeHolderCode = 'Item { \n\
144146// %1 is anchors.fill
145147// %2 is width
146148// %3 is height
149+// %4 is whether the icon should be asynchronous or not
147150var kAudioButtonCode = 'AbstractButton { \n\
148151 id: audioButton; \n\
149152 anchors.fill: %1; \n\
@@ -169,6 +172,7 @@ var kAudioButtonCode = 'AbstractButton { \n\
169172 opacity: 0.9; \n\
170173 name: DashAudioPlayer.playing && AudioUrlComparer.compare(parent.source, DashAudioPlayer.currentSource) ? "media-playback-pause" : "media-playback-start"; \n\
171174 color: "white"; \n\
175+ asynchronous: %4; \n\
172176 } \n\
173177 onClicked: { \n\
174178 if (AudioUrlComparer.compare(source, DashAudioPlayer.currentSource)) { \n\
@@ -187,12 +191,14 @@ var kAudioButtonCode = 'AbstractButton { \n\
187191 } \n\
188192 }';
189193
194+// %1 is whether the loader should be asynchronous or not
195+// %2 is the header height code
190196var kOverlayLoaderCode = 'Loader { \n\
191197 id: overlayLoader; \n\
192− readonly property real overlayHeight: (fixedHeaderHeight > 0 ? fixedHeaderHeight : headerHeight) + units.gu(2); \n\
198+ readonly property real overlayHeight: %2 + units.gu(2); \n\
193199 anchors.fill: artShapeHolder; \n\
194200 active: artShapeLoader.active && artShapeLoader.item && artShapeLoader.item.image.status === Image.Ready || false; \n\
195− asynchronous: root.asynchronous; \n\
201+ asynchronous: %1; \n\
196202 visible: showHeader && status == Loader.Ready; \n\
197203 sourceComponent: UbuntuShapeOverlay { \n\
198204 id: overlay; \n\
@@ -211,17 +217,19 @@ function kHeaderRowCodeGenerator() {
211217 objectName: "outerRow"; \n\
212218 property real margins: units.gu(1); \n\
213219 spacing: margins; \n\
214− height: root.fixedHeaderHeight != -1 ? root.fixedHeaderHeight : implicitHeight; \n\
220+ %2\
215221 anchors { %1 } \n\
216222 anchors.right: parent.right; \n\
217223 anchors.margins: margins; \n\
218224 anchors.rightMargin: 0; \n\
219225 data: [ \n\
220− %2 \n\
226+ %3 \n\
221227 ] \n\
222228 }\n';
223229 var args = Array.prototype.slice.call(arguments);
224− var code = kHeaderRowCodeTemplate.arg(args.shift()).arg(args.join(',\n'));
230+ var isCardTool = args.shift();
231+ var heightCode = isCardTool ? "" : "height: root.fixedHeaderHeight; \n";
232+ var code = kHeaderRowCodeTemplate.arg(args.shift()).arg(heightCode).arg(args.join(',\n'));
225233 return code;
226234}
227235
@@ -242,10 +250,11 @@ function kHeaderContainerCodeGenerator() {
242250}
243251
244252// %1 is used as anchors of mascotShapeLoader
253+// %2 is whether the loader should be asynchronous or not
245254var kMascotShapeLoaderCode = 'Loader { \n\
246255 id: mascotShapeLoader; \n\
247256 objectName: "mascotShapeLoader"; \n\
248− asynchronous: root.asynchronous; \n\
257+ asynchronous: %2; \n\
249258 active: mascotImage.status === Image.Ready; \n\
250259 visible: showHeader && active && status == Loader.Ready; \n\
251260 width: units.gu(6); \n\
@@ -275,6 +284,7 @@ var kMascotImageCode = 'CroppedImageMinimumSourceSize { \n\
275284// %2 is used as color of titleLabel
276285// %3 is used as extra condition for visible of titleLabel
277286// %4 is used as title width
287+// %5 is used as horizontal alignment
278288var kTitleLabelCode = 'Label { \n\
279289 id: titleLabel; \n\
280290 objectName: "titleLabel"; \n\
@@ -289,7 +299,7 @@ var kTitleLabelCode = 'Label { \n\
289299 width: %4; \n\
290300 text: root.title; \n\
291301 font.weight: cardData && cardData["subtitle"] ? Font.DemiBold : Font.Normal; \n\
292− horizontalAlignment: root.titleAlignment; \n\
302+ horizontalAlignment: %5; \n\
293303 }\n';
294304
295305// %1 is used as extra anchors of emblemIcon
@@ -398,7 +408,7 @@ function sanitizeColor(colorString) {
398408 return colorString;
399409}
400410
401−function cardString(template, components) {
411+function cardString(template, components, isCardTool) {
402412 var code;
403413
404414 var templateInteractive = (template == null ? true : (template["non-interactive"] !== undefined ? !template["non-interactive"] : true)) ? "true" : "false";
@@ -410,16 +420,16 @@ function cardString(template, components) {
410420 property string backgroundShapeStyle: "inset"; \n\
411421 property real fontScale: 1.0; \n\
412422 property var scopeStyle: null; \n\
413− property int titleAlignment: Text.AlignLeft; \n\
414− property int fixedHeaderHeight: -1; \n\
423+ %2\
415424 property size fixedArtShapeSize: Qt.size(-1, -1); \n\
416425 readonly property string title: cardData && cardData["title"] || ""; \n\
417− property bool asynchronous: true; \n\
418426 property bool showHeader: true; \n\
419427 implicitWidth: childrenRect.width; \n\
420428 enabled: %1; \n\
421429 \n'.arg(templateInteractive);
422430
431+ code = code.arg(isCardTool ? "" : "property int fixedHeaderHeight: -1; \n");
432+
423433 var hasArt = components["art"] && components["art"]["field"] || false;
424434 var hasSummary = components["summary"] || false;
425435 var isConciergeMode = components["art"] && components["art"]["conciergeMode"] || false;
@@ -435,6 +445,7 @@ function cardString(template, components) {
435445 var hasHeaderRow = hasMascot && hasTitle;
436446 var hasAttributes = hasTitle && components["attributes"] && components["attributes"]["field"] || false;
437447 var isAudio = template["quick-preview-type"] === "audio";
448+ var asynchronous = isCardTool ? "false" : "true";
438449
439450 if (isAudio) {
440451 // For now we only support audio cards with [optional] art, title, subtitle
@@ -468,7 +479,7 @@ function cardString(template, components) {
468479 backgroundElements1 = '"%1"'.arg(element1);
469480 }
470481 }
471− code += kBackgroundLoaderCode.arg(backgroundElements0).arg(backgroundElements1).arg(templateCardBackground);
482+ code += kBackgroundLoaderCode.arg(backgroundElements0).arg(backgroundElements1).arg(asynchronous).arg(templateCardBackground);
472483 }
473484
474485 if (hasArt) {
@@ -497,23 +508,31 @@ function cardString(template, components) {
497508 if (isNaN(aspectRatio)) {
498509 aspectRatio = 1;
499510 }
500− var fallback = components["art"] && components["art"]["fallback"] || "";
511+ var fallback = !isCardTool && components["art"] && components["art"]["fallback"] || "";
501512 fallback = encodeURI(fallback);
502513 var fallbackStatusCode = "";
503514 var fallbackURICode = '""';
504515 if (fallback !== "") {
505516 // fallbackStatusCode has %6 in it because we want to substitute it for fallbackURICode
506− // which in kArtShapeHolderCode is %7
507− fallbackStatusCode += 'onStatusChanged: if (status === Image.Error) source = %7;';
517+ // which in kArtShapeHolderCode is %8
518+ fallbackStatusCode += 'onStatusChanged: if (status === Image.Error) source = %8;';
508519 fallbackURICode = 'decodeURI("%1")'.arg(fallback);
509520 }
510− code += kArtShapeHolderCode.arg(artAnchors).arg(widthCode).arg(heightCode).arg(isConciergeMode ? "false" : "true").arg(aspectRatio).arg(fallbackStatusCode).arg(fallbackURICode);
521+ code += kArtShapeHolderCode.arg(artAnchors)
522+ .arg(widthCode)
523+ .arg(heightCode)
524+ .arg(isConciergeMode ? "false" : "true")
525+ .arg(aspectRatio)
526+ .arg(asynchronous)
527+ .arg(fallbackStatusCode)
528+ .arg(fallbackURICode);
511529 } else {
512530 code += 'readonly property size artShapeSize: Qt.size(-1, -1);\n'
513531 }
514532
515533 if (headerAsOverlay) {
516− code += kOverlayLoaderCode;
534+ var headerHeightCode = isCardTool ? "headerHeight" : "root.fixedHeaderHeight";
535+ code += kOverlayLoaderCode.arg(asynchronous).arg(headerHeightCode);
517536 }
518537
519538 var headerVerticalAnchors;
@@ -595,11 +614,11 @@ function cardString(template, components) {
595614 }
596615
597616 if (useMascotShape) {
598− mascotShapeCode = kMascotShapeLoaderCode.arg(mascotAnchors);
617+ mascotShapeCode = kMascotShapeLoaderCode.arg(mascotAnchors).arg(asynchronous);
599618 }
600619
601620 var mascotImageVisible = useMascotShape ? 'false' : 'showHeader';
602− var fallback = components["mascot"] && components["mascot"]["fallback"] || "";
621+ var fallback = !isCardTool && components["mascot"] && components["mascot"]["fallback"] || "";
603622 fallback = encodeURI(fallback);
604623 var fallbackStatusCode = "";
605624 var fallbackURICode = '""';
@@ -715,9 +734,24 @@ function cardString(template, components) {
715734 }
716735 }
717736
737+ var titleAlignment = "Text.AlignHCenter";
738+ if (template["card-layout"] === "horizontal"
739+ || typeof components["title"] !== "object"
740+ || components["title"]["align"] === "left") titleAlignment = "Text.AlignLeft";
741+ var keys = ["mascot", "emblem", "subtitle", "attributes", "summary"];
742+ for (var key in keys) {
743+ key = keys[key];
744+ try {
745+ if (typeof components[key] === "string"
746+ || typeof components[key]["field"] === "string") titleAlignment = "Text.AlignLeft";
747+ } catch (e) {
748+ continue;
749+ }
750+ }
751+
718752 // code for different elements
719753 var titleLabelVisibleExtra = (headerAsOverlay ? '&& overlayLoader.active': '');
720− var titleCode = kTitleLabelCode.arg(titleAnchors).arg(titleColor).arg(titleLabelVisibleExtra).arg(titleWidth);
754+ var titleCode = kTitleLabelCode.arg(titleAnchors).arg(titleColor).arg(titleLabelVisibleExtra).arg(titleWidth).arg(titleAlignment);
721755 var subtitleCode;
722756 var attributesCode;
723757
@@ -759,7 +793,7 @@ function cardString(template, components) {
759793 if (mascotShapeCode != '') {
760794 rowCode.unshift(mascotShapeCode);
761795 }
762− code += kHeaderRowCodeGenerator(headerVerticalAnchors + headerLeftAnchor, rowCode)
796+ code += kHeaderRowCodeGenerator(isCardTool, headerVerticalAnchors + headerLeftAnchor, rowCode)
763797 } else {
764798 code += mascotShapeCode + mascotCode + titleSubtitleCode;
765799 }
@@ -783,9 +817,10 @@ function cardString(template, components) {
783817 } else {
784818 audioButtonAnchorsFill = 'undefined';
785819 audioButtonWidth = 'height';
786− audioButtonHeight = '(root.fixedHeaderHeight > 0 ? root.fixedHeaderHeight : headerHeight) + 2 * units.gu(1)';
820+ audioButtonHeight = isCardTool ? 'headerHeight + 2 * units.gu(1)'
821+ : 'root.fixedHeaderHeight + 2 * units.gu(1)';
787822 }
788− code += kAudioButtonCode.arg(audioButtonAnchorsFill).arg(audioButtonWidth).arg(audioButtonHeight);
823+ code += kAudioButtonCode.arg(audioButtonAnchorsFill).arg(audioButtonWidth).arg(audioButtonHeight).arg(asynchronous);
789824 }
790825
791826 if (hasSummary) {
@@ -854,13 +889,13 @@ function cardString(template, components) {
854889 return code;
855890}
856891
857−function createCardComponent(parent, template, components, identifier) {
892+function createCardComponent(parent, template, components, isCardTool, identifier) {
858893 var imports = 'import QtQuick 2.4; \n\
859894 import Ubuntu.Components 1.3; \n\
860895 import Ubuntu.Settings.Components 0.1; \n\
861896 import Dash 0.1;\n\
862897 import Utils 0.1;\n';
863− var card = cardString(template, components);
898+ var card = cardString(template, components, isCardTool);
864899 var code = imports + 'Component {\n' + card + '}\n';
865900
866901 try {
plugins/Dash/CardCreatorCache.qml+3−3
@@ -23,16 +23,16 @@ QtObject {
2323
2424 property var cache: new Object();
2525
26− function getCardComponent(template, components) {
26+ function getCardComponent(template, components, isCardTool) {
2727 if (template === undefined || components === undefined)
2828 return undefined;
2929
3030 var tString = JSON.stringify(template);
3131 var cString = JSON.stringify(components);
32− var allString = tString + cString;
32+ var allString = tString + cString + isCardTool;
3333 var component = cache[allString];
3434 if (component === undefined) {
35− component = CardCreator.createCardComponent(root, template, components, allString);
35+ component = CardCreator.createCardComponent(root, template, components, isCardTool, allString);
3636 cache[allString] = component;
3737 }
3838 return component;
plugins/Dash/plugin.cpp+6−6
@@ -28,12 +28,12 @@
2828static QUrl oauthCleanedUrl(QUrl u)
2929{
3030 QUrlQuery q(u);
31− q.removeQueryItem("oauth_nonce");
32− q.removeQueryItem("oauth_timestamp");
33− q.removeQueryItem("oauth_consumer_key");
34− q.removeQueryItem("oauth_signature_method");
35− q.removeQueryItem("oauth_version");
36− q.removeQueryItem("oauth_signature");
31+ q.removeQueryItem(QStringLiteral("oauth_nonce"));
32+ q.removeQueryItem(QStringLiteral("oauth_timestamp"));
33+ q.removeQueryItem(QStringLiteral("oauth_consumer_key"));
34+ q.removeQueryItem(QStringLiteral("oauth_signature_method"));
35+ q.removeQueryItem(QStringLiteral("oauth_version"));
36+ q.removeQueryItem(QStringLiteral("oauth_signature"));
3737 u.setQuery(q);
3838 return u;
3939}
plugins/GlobalShortcut/GlobalShortcut.qmltypesnew file+31
@@ -0,0 +1,31 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable GlobalShortcut 1.0 plugins'
8+
9+Module {
10+ Component {
11+ name: "GlobalShortcut"
12+ defaultProperty: "data"
13+ prototype: "QQuickItem"
14+ exports: ["GlobalShortcut/GlobalShortcut 1.0"]
15+ exportMetaObjectRevisions: [0]
16+ Property { name: "shortcut"; type: "QVariant" }
17+ Property { name: "active"; type: "bool" }
18+ Signal {
19+ name: "shortcutChanged"
20+ Parameter { name: "shortcut"; type: "QVariant" }
21+ }
22+ Signal {
23+ name: "triggered"
24+ Parameter { name: "shortcut"; type: "string" }
25+ }
26+ Signal {
27+ name: "activeChanged"
28+ Parameter { name: "active"; type: "bool" }
29+ }
30+ }
31+}
plugins/GlobalShortcut/globalshortcutregistry.cpp+4−4
@@ -35,13 +35,13 @@ GlobalShortcutList GlobalShortcutRegistry::shortcuts() const
3535
3636bool GlobalShortcutRegistry::hasShortcut(const QVariant &seq) const
3737{
38− return m_shortcuts.keys().contains(seq);
38+ return m_shortcuts.contains(seq);
3939}
4040
4141void GlobalShortcutRegistry::addShortcut(const QVariant &seq, GlobalShortcut *sc)
4242{
4343 if (sc) {
44− if (!m_shortcuts.keys().contains(seq)) { // create a new entry
44+ if (!m_shortcuts.contains(seq)) { // create a new entry
4545 m_shortcuts.insert(seq, {sc});
4646 } else { // append to an existing one
4747 auto shortcuts = m_shortcuts[seq];
@@ -75,8 +75,8 @@ bool GlobalShortcutRegistry::eventFilter(QObject *obj, QEvent *event)
7575
7676 if (event->type() == QEvent::KeyPress) {
7777 QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
78− QKeySequence seq = QKeySequence(keyEvent->key() + keyEvent->modifiers());
79− if (m_shortcuts.keys().contains(seq)) {
78+ int seq = keyEvent->key() + keyEvent->modifiers();
79+ if (m_shortcuts.contains(seq)) {
8080 const auto shortcuts = m_shortcuts.value(seq);
8181 Q_FOREACH(const auto &shortcut, shortcuts) {
8282 if (shortcut) {
plugins/IntegratedLightDM/liblightdm/CMakeLists.txt+16−3
@@ -5,13 +5,16 @@ set(LibLightDM_SOURCES
55 UsersModel.cpp
66 GreeterPrivate.cpp
77 UsersModelPrivate.cpp
8+ ${CMAKE_SOURCE_DIR}/plugins/AccountsService/AccountsServiceDBusAdaptor.cpp
89 ${CMAKE_SOURCE_DIR}/plugins/Utils/qvariantlistmodel.cpp
910 )
1011
1112add_library(integratedLightDM STATIC ${LibLightDM_SOURCES})
13+add_library(integratedLightDMSession STATIC ${LibLightDM_SOURCES})
1214add_library(MockLightDM-demo-shared SHARED ${LibLightDM_SOURCES})
1315
1416include_directories(
17+ ${CMAKE_SOURCE_DIR}/plugins/AccountsService
1518 ${CMAKE_CURRENT_BINARY_DIR}
1619 ${GLIB_INCLUDE_DIRS}
1720 ${LIBUSERMETRICSOUTPUT_INCLUDE_DIRS}
@@ -22,17 +25,27 @@ target_link_libraries(integratedLightDM
2225 ${LIBUSERMETRICSOUTPUT_LDFLAGS}
2326 -lpam
2427)
28+target_link_libraries(integratedLightDMSession
29+ ${GLIB_LIBRARIES}
30+ ${LIBUSERMETRICSOUTPUT_LDFLAGS}
31+ -lpam
32+)
2533target_link_libraries(MockLightDM-demo-shared
2634 ${GLIB_LIBRARIES}
2735 ${LIBUSERMETRICSOUTPUT_LDFLAGS}
2836 -lpam
2937)
3038
31−qt5_use_modules(integratedLightDM Concurrent Gui)
32−qt5_use_modules(MockLightDM-demo-shared Concurrent Gui)
39+qt5_use_modules(integratedLightDM Concurrent DBus Gui)
40+qt5_use_modules(integratedLightDMSession Concurrent DBus Gui)
41+qt5_use_modules(MockLightDM-demo-shared Concurrent DBus Gui)
3342
34−set_target_properties(integratedLightDM PROPERTIES COMPILE_FLAGS -fPIC)
43+set_target_properties(integratedLightDM PROPERTIES
44+ COMPILE_FLAGS "-DSM_BUSNAME=systemBus -fPIC")
45+set_target_properties(integratedLightDMSession PROPERTIES
46+ COMPILE_FLAGS "-DSM_BUSNAME=sessionBus -fPIC")
3547set_target_properties(MockLightDM-demo-shared PROPERTIES
48+ COMPILE_FLAGS "-DSM_BUSNAME=systemBus"
3649 OUTPUT_NAME lightdm-qt5-2)
3750
3851install(TARGETS MockLightDM-demo-shared
plugins/IntegratedLightDM/liblightdm/UsersModel.cpp+4−18
@@ -54,24 +54,10 @@ UsersModel::UsersModel(QObject *parent) :
5454 roles[ImagePathRole] = "imagePath";
5555 setRoleNames(roles);
5656
57− // Now modify our mock user backgrounds
58− QDir bgdir = QDir(QStringLiteral("/usr/share/demo-assets/shell/backgrounds/"));
59− QStringList backgrounds = bgdir.entryList(QDir::Files | QDir::NoDotAndDotDot);
60−
61− for (int i = 0, j = 0; i < d->entries.size(); i++) {
62− Entry &entry = d->entries[i];
63− if (entry.background.isNull() && !backgrounds.isEmpty()) {
64− entry.background = bgdir.filePath(backgrounds[j++]);
65− if (j >= backgrounds.length()) {
66− j = 0;
67− }
68− }
69− }
70−}
71−
72−UsersModel::~UsersModel()
73−{
74− delete d_ptr;
57+ connect(d_ptr, &UsersModelPrivate::dataChanged, this, [this](int i) {
58+ QModelIndex index = createIndex(i, 0);
59+ Q_EMIT dataChanged(index, index);
60+ });
7561}
7662
7763int UsersModel::rowCount(const QModelIndex &parent) const
plugins/IntegratedLightDM/liblightdm/UsersModel.h+1−1
@@ -41,7 +41,7 @@ class Q_DECL_EXPORT UsersModel : public QAbstractListModel
4141
4242public:
4343 explicit UsersModel(QObject *parent = 0);
44− virtual ~UsersModel();
44+ virtual ~UsersModel() = default;
4545
4646 enum UserModelRoles {NameRole = Qt::UserRole,
4747 RealNameRole,
plugins/IntegratedLightDM/liblightdm/UsersModelPrivate.cpp+43−9
@@ -18,7 +18,11 @@
1818
1919#include "UsersModelPrivate.h"
2020
21+#include "AccountsServiceDBusAdaptor.h"
22+#include "UsersModel.h"
23+
2124#include <glib.h>
25+#include <QDebug>
2226#include <QDir>
2327#include <QSettings>
2428#include <QStringList>
@@ -27,7 +31,9 @@ namespace QLightDM
2731{
2832
2933UsersModelPrivate::UsersModelPrivate(UsersModel* parent)
30− : q_ptr(parent)
34+ : QObject(parent),
35+ q_ptr(parent),
36+ m_service(new AccountsServiceDBusAdaptor(this))
3137{
3238 QFileInfo demoFile(QDir::homePath() + "/.unity8-greeter-demo");
3339 QString currentUser = g_get_user_name();
@@ -43,15 +49,43 @@ UsersModelPrivate::UsersModelPrivate(UsersModel* parent)
4349 entries.append({user, name, 0, 0, false, false, 0, 0});
4450 }
4551 } else {
46− // If we were using the actual liblightdm, we could just ask it
47− // for the user's real name. But we aren't. We *should* ask
48− // AccountsService for the real name, like liblightdm does internally,
49− // but this is close enough since AS and passwd are always in sync.
50− QString realName = QString::fromUtf8(g_get_real_name()); // gets name from passwd entry
51− if (realName == QStringLiteral("Unknown")) { // glib doesn't translate this string
52− realName.clear();
52+ entries.append({currentUser, 0, 0, 0, false, false, 0, 0});
53+
54+ connect(m_service, &AccountsServiceDBusAdaptor::maybeChanged,
55+ this, [this](const QString &user) {
56+ if (user == entries[0].username) {
57+ updateName(true);
58+ }
59+ });
60+ updateName(false);
61+ }
62+}
63+
64+void UsersModelPrivate::updateName(bool async)
65+{
66+ auto pendingReply = m_service->getUserPropertyAsync(entries[0].username,
67+ QStringLiteral("org.freedesktop.Accounts.User"),
68+ QStringLiteral("RealName"));
69+ auto *watcher = new QDBusPendingCallWatcher(pendingReply, this);
70+
71+ connect(watcher, &QDBusPendingCallWatcher::finished,
72+ this, [this](QDBusPendingCallWatcher* watcher) {
73+
74+ QDBusPendingReply<QVariant> reply = *watcher;
75+ watcher->deleteLater();
76+ if (reply.isError()) {
77+ qWarning() << "Failed to get 'RealName' property - " << reply.error().message();
78+ return;
79+ }
80+
81+ const QString realName = reply.value().toString();
82+ if (entries[0].real_name != realName) {
83+ entries[0].real_name = realName;
84+ Q_EMIT dataChanged(0);
5385 }
54− entries.append({currentUser, realName, 0, 0, false, false, 0, 0});
86+ });
87+ if (!async) {
88+ watcher->waitForFinished();
5589 }
5690}
5791
plugins/IntegratedLightDM/liblightdm/UsersModelPrivate.h+15−3
@@ -19,8 +19,11 @@
1919#ifndef UNITY_MOCK_USERSMODEL_PRIVATE_H
2020#define UNITY_MOCK_USERSMODEL_PRIVATE_H
2121
22−#include <QtCore/QList>
23−#include <QtCore/QString>
22+#include <QList>
23+#include <QObject>
24+#include <QString>
25+
26+class AccountsServiceDBusAdaptor;
2427
2528namespace QLightDM
2629{
@@ -39,19 +42,28 @@ public:
3942 QString infographic;
4043};
4144
42−class UsersModelPrivate
45+class UsersModelPrivate : public QObject
4346{
47+ Q_OBJECT
48+
4449public:
4550 explicit UsersModelPrivate(UsersModel *parent = 0);
4651 virtual ~UsersModelPrivate() = default;
4752
4853 QList<Entry> entries;
4954
55+Q_SIGNALS:
56+ void dataChanged(int);
57+
5058protected:
5159 UsersModel * const q_ptr;
5260
5361private:
5462 Q_DECLARE_PUBLIC(UsersModel)
63+
64+ void updateName(bool async);
65+
66+ AccountsServiceDBusAdaptor *m_service;
5567};
5668
5769}
plugins/Ubuntu/Gestures/CMakeLists.txt+1
@@ -11,6 +11,7 @@ set(UbuntuGesturesQml_SOURCES
1111 PressedOutsideNotifier.cpp
1212 TouchDispatcher.cpp
1313 TouchGate.cpp
14+ TouchGestureArea.cpp
1415)
1516
1617add_definitions(-DUBUNTUGESTURESQML_LIBRARY)
plugins/Ubuntu/Gestures/DirectionalDragArea.cpp+3
@@ -606,6 +606,9 @@ void DirectionalDragAreaPrivate::setStatus(Status newStatus)
606606 Q_EMIT q->pressedChanged(true);
607607 break;
608608 case Recognized:
609+ if (oldStatus == WaitingForTouch) { // for immediate recognition
610+ Q_EMIT q->pressedChanged(true);
611+ }
609612 Q_EMIT q->draggingChanged(true);
610613 break;
611614 default:
plugins/Ubuntu/Gestures/Gestures.qmltypes+86−45
@@ -34,7 +34,8 @@ Module {
3434 "Leftwards": 1,
3535 "Downwards": 2,
3636 "Upwards": 3,
37− "Horizontal": 4
37+ "Horizontal": 4,
38+ "Vertical": 5
3839 }
3940 }
4041 Method {
@@ -59,14 +60,6 @@ Module {
5960 prototype: "QQuickItem"
6061 exports: ["Ubuntu.Gestures/DirectionalDragArea 0.1"]
6162 exportMetaObjectRevisions: [0]
62− Enum {
63− name: "Status"
64− values: {
65− "WaitingForTouch": 0,
66− "Undecided": 1,
67− "Recognized": 2
68− }
69− }
7063 Property { name: "direction"; type: "Direction::Type" }
7164 Property { name: "distance"; type: "double"; isReadonly: true }
7265 Property { name: "sceneDistance"; type: "double"; isReadonly: true }
@@ -74,24 +67,19 @@ Module {
7467 Property { name: "touchY"; type: "double"; isReadonly: true }
7568 Property { name: "touchSceneX"; type: "double"; isReadonly: true }
7669 Property { name: "touchSceneY"; type: "double"; isReadonly: true }
77− Property { name: "status"; type: "Status"; isReadonly: true }
7870 Property { name: "dragging"; type: "bool"; isReadonly: true }
79− Property { name: "maxDeviation"; type: "double" }
80− Property { name: "wideningAngle"; type: "double" }
81− Property { name: "distanceThreshold"; type: "double" }
82− Property { name: "minSpeed"; type: "double" }
83− Property { name: "maxSilenceTime"; type: "int" }
84− Property { name: "compositionTime"; type: "int" }
71+ Property { name: "pressed"; type: "bool"; isReadonly: true }
72+ Property { name: "immediateRecognition"; type: "bool" }
8573 Signal {
8674 name: "directionChanged"
8775 Parameter { name: "direction"; type: "Direction::Type" }
8876 }
8977 Signal {
90− name: "statusChanged"
91− Parameter { name: "value"; type: "Status" }
78+ name: "draggingChanged"
79+ Parameter { name: "value"; type: "bool" }
9280 }
9381 Signal {
94− name: "draggingChanged"
82+ name: "pressedChanged"
9583 Parameter { name: "value"; type: "bool" }
9684 }
9785 Signal {
@@ -102,30 +90,6 @@ Module {
10290 name: "sceneDistanceChanged"
10391 Parameter { name: "value"; type: "double" }
10492 }
105− Signal {
106− name: "maxDeviationChanged"
107− Parameter { name: "value"; type: "double" }
108− }
109− Signal {
110− name: "wideningAngleChanged"
111− Parameter { name: "value"; type: "double" }
112− }
113− Signal {
114− name: "distanceThresholdChanged"
115− Parameter { name: "value"; type: "double" }
116− }
117− Signal {
118− name: "minSpeedChanged"
119− Parameter { name: "value"; type: "double" }
120− }
121− Signal {
122− name: "maxSilenceTimeChanged"
123− Parameter { name: "value"; type: "int" }
124− }
125− Signal {
126− name: "compositionTimeChanged"
127− Parameter { name: "value"; type: "int" }
128− }
12993 Signal {
13094 name: "touchXChanged"
13195 Parameter { name: "value"; type: "double" }
@@ -142,7 +106,35 @@ Module {
142106 name: "touchSceneYChanged"
143107 Parameter { name: "value"; type: "double" }
144108 }
145− Signal { name: "tapped" }
109+ Signal {
110+ name: "immediateRecognitionChanged"
111+ Parameter { name: "value"; type: "bool" }
112+ }
113+ Method { name: "removeTimeConstraints" }
114+ }
115+ Component {
116+ name: "FloatingFlickable"
117+ defaultProperty: "data"
118+ prototype: "QQuickItem"
119+ exports: ["Ubuntu.Gestures/FloatingFlickable 0.1"]
120+ exportMetaObjectRevisions: [0]
121+ Property { name: "contentWidth"; type: "double" }
122+ Property { name: "contentHeight"; type: "double" }
123+ Property { name: "contentX"; type: "double" }
124+ Property { name: "contentY"; type: "double" }
125+ Property { name: "direction"; type: "Direction::Type" }
126+ }
127+ Component {
128+ name: "GestureTouchPoint"
129+ prototype: "QObject"
130+ exports: ["Ubuntu.Gestures/GestureTouchPoint 0.1"]
131+ isCreatable: false
132+ exportMetaObjectRevisions: [0]
133+ Property { name: "pointId"; type: "int"; isReadonly: true }
134+ Property { name: "pressed"; type: "bool"; isReadonly: true }
135+ Property { name: "x"; type: "double"; isReadonly: true }
136+ Property { name: "y"; type: "double"; isReadonly: true }
137+ Property { name: "dragging"; type: "bool"; isReadonly: true }
146138 }
147139 Component {
148140 name: "PressedOutsideNotifier"
@@ -163,6 +155,55 @@ Module {
163155 name: "targetItemChanged"
164156 Parameter { name: "item"; type: "QQuickItem"; isPointer: true }
165157 }
166− Signal { name: "pressed" }
158+ }
159+ Component {
160+ name: "TouchGestureArea"
161+ defaultProperty: "data"
162+ prototype: "QQuickItem"
163+ exports: ["Ubuntu.Gestures/TouchGestureArea 0.1"]
164+ exportMetaObjectRevisions: [0]
165+ Enum {
166+ name: "Status"
167+ values: {
168+ "WaitingForTouch": 0,
169+ "Undecided": 1,
170+ "Recognized": 2,
171+ "Rejected": 3
172+ }
173+ }
174+ Property { name: "touchPoints"; type: "GestureTouchPoint"; isList: true; isReadonly: true }
175+ Property { name: "dragging"; type: "bool"; isReadonly: true }
176+ Property { name: "minimumTouchPoints"; type: "int" }
177+ Property { name: "maximumTouchPoints"; type: "int" }
178+ Signal {
179+ name: "statusChanged"
180+ Parameter { name: "status"; type: "Status" }
181+ }
182+ Signal { name: "touchPointsUpdated" }
183+ Signal {
184+ name: "draggingChanged"
185+ Parameter { name: "dragging"; type: "bool" }
186+ }
187+ Signal {
188+ name: "minimumTouchPointsChanged"
189+ Parameter { name: "value"; type: "bool" }
190+ }
191+ Signal {
192+ name: "maximumTouchPointsChanged"
193+ Parameter { name: "value"; type: "bool" }
194+ }
195+ Signal {
196+ name: "pressed"
197+ Parameter { name: "points"; type: "QList<QObject*>" }
198+ }
199+ Signal {
200+ name: "released"
201+ Parameter { name: "points"; type: "QList<QObject*>" }
202+ }
203+ Signal {
204+ name: "updated"
205+ Parameter { name: "points"; type: "QList<QObject*>" }
206+ }
207+ Signal { name: "clicked" }
167208 }
168209}
plugins/Ubuntu/Gestures/TouchGestureArea.cppnew file+875
@@ -0,0 +1,875 @@
1+/*
2+ * Copyright (C) 2016 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 "TouchGestureArea.h"
18+
19+// local
20+#include "TouchOwnershipEvent.h"
21+#include "TouchRegistry.h"
22+#include "UnownedTouchEvent.h"
23+
24+#include <QGuiApplication>
25+#include <QStyleHints>
26+#include <private/qquickwindow_p.h>
27+
28+#define TOUCHGESTUREAREA_DEBUG 0
29+
30+// TODO - understand more about why we lose touch event releases.
31+// Workaround for now is to monitor all the touch points from first touch till
32+// all have been released; no matter if we've rejected the gesture.
33+
34+namespace {
35+
36+struct InternalStatus {
37+ enum Status {
38+ WaitingForTouch,
39+ WaitingForMoreTouches,
40+ WaitingForOwnership, //Recognizing,
41+ Recognized,
42+ WaitingForRejection,
43+ Rejected
44+ };
45+};
46+
47+TouchGestureArea::Status internalStatusToGestureStatus(int internalStatus) {
48+ switch (internalStatus) {
49+ case InternalStatus::WaitingForTouch: return TouchGestureArea::WaitingForTouch;
50+ case InternalStatus::WaitingForMoreTouches: return TouchGestureArea::Undecided;
51+ case InternalStatus::WaitingForOwnership: return TouchGestureArea::Undecided;
52+ case InternalStatus::Recognized: return TouchGestureArea::Recognized;
53+ case InternalStatus::WaitingForRejection: return TouchGestureArea::Recognized;
54+ case InternalStatus::Rejected: return TouchGestureArea::Rejected;
55+ }
56+ return TouchGestureArea::WaitingForTouch;
57+}
58+
59+}
60+
61+#if TOUCHGESTUREAREA_DEBUG
62+#define tgaDebug(params) qDebug().nospace() << "[TGA(" << qPrintable(objectName()) << ")] " << params
63+#include "DebugHelpers.h"
64+
65+namespace {
66+
67+const char *statusToString(int status)
68+{
69+ if (status == InternalStatus::WaitingForTouch) {
70+ return "WaitingForTouch";
71+ } else if (status == InternalStatus::WaitingForMoreTouches) {
72+ return "WaitingForMoreTouches";
73+ } else if (status == InternalStatus::WaitingForOwnership) {
74+ return "WaitingForOwnership";
75+ } else if (status == InternalStatus::Rejected) {
76+ return "Rejected";
77+ } else if (status == InternalStatus::WaitingForRejection) {
78+ return "WaitingForRejection";
79+ } else {
80+ return "Recognized";
81+ }
82+ return "Unknown";
83+}
84+
85+QString touchState(Qt::TouchPointState state) {
86+ switch (state) {
87+ case Qt::TouchPointPressed: return "pressed";
88+ case Qt::TouchPointMoved: return "moved";
89+ case Qt::TouchPointStationary: return "stationary";
90+ case Qt::TouchPointReleased: return "released";
91+ break;
92+ }
93+ return "unknown";
94+}
95+
96+QString touchesString(const QList<QObject*> touches) {
97+ QString str;
98+ Q_FOREACH(QObject* object, touches) {
99+ GestureTouchPoint* touchPoint = qobject_cast<GestureTouchPoint*>(object);
100+ if (touchPoint) {
101+ str += QStringLiteral("[%1 @ (%2, %3)], ").arg(touchPoint->id())
102+ .arg(touchPoint->x())
103+ .arg(touchPoint->y());
104+ }
105+ }
106+ return str;
107+}
108+
109+QString touchEventString(QTouchEvent* event) {
110+ if (!event) return QString();
111+ QString str;
112+ Q_FOREACH(const auto& touchPoint, event->touchPoints()) {
113+ str += QStringLiteral("[%1:%2 @ (%3, %4)], ").arg(touchPoint.id())
114+ .arg(touchState(touchPoint.state()))
115+ .arg(touchPoint.pos().x())
116+ .arg(touchPoint.pos().y());
117+ }
118+ return str;
119+}
120+
121+
122+} // namespace {
123+#else // TOUCHGESTUREAREA_DEBUG
124+#define tgaDebug(params) ((void)0)
125+#endif // TOUCHGESTUREAREA_DEBUG
126+
127+TouchGestureArea::TouchGestureArea(QQuickItem* parent)
128+ : QQuickItem(parent)
129+ , m_status(WaitingForTouch)
130+ , m_recognitionTimer(nullptr)
131+ , m_dragging(false)
132+ , m_minimumTouchPoints(1)
133+ , m_maximumTouchPoints(INT_MAX)
134+ , m_recognitionPeriod(50)
135+ , m_releaseRejectPeriod(100)
136+{
137+ setRecognitionTimer(new UbuntuGestures::Timer(this));
138+ m_recognitionTimer->setInterval(m_recognitionPeriod);
139+ m_recognitionTimer->setSingleShot(true);
140+}
141+
142+TouchGestureArea::~TouchGestureArea()
143+{
144+ clearTouchLists();
145+ qDeleteAll(m_liveTouchPoints);
146+ m_liveTouchPoints.clear();
147+ qDeleteAll(m_cachedTouchPoints);
148+ m_cachedTouchPoints.clear();
149+}
150+
151+bool TouchGestureArea::event(QEvent *event)
152+{
153+ // Process unowned touch events (handles update/release for incomplete gestures)
154+ if (event->type() == TouchOwnershipEvent::touchOwnershipEventType()) {
155+ touchOwnershipEvent(static_cast<TouchOwnershipEvent *>(event));
156+ return true;
157+ } else if (event->type() == UnownedTouchEvent::unownedTouchEventType()) {
158+ unownedTouchEvent(static_cast<UnownedTouchEvent *>(event)->touchEvent());
159+ return true;
160+ }
161+
162+ return QQuickItem::event(event);
163+}
164+
165+void TouchGestureArea::touchOwnershipEvent(TouchOwnershipEvent *event)
166+{
167+ int touchId = event->touchId();
168+ tgaDebug("touchOwnershipEvent - id:" << touchId << ", gained:" << event->gained());
169+
170+ if (event->gained()) {
171+ grabTouchPoints(QVector<int>() << touchId);
172+ m_candidateTouches.remove(touchId);
173+ TouchRegistry::instance()->addTouchWatcher(touchId, this);
174+ m_watchedTouches.insert(touchId);
175+
176+ if (m_watchedTouches.count() >= m_minimumTouchPoints) {
177+ setInternalStatus(InternalStatus::Recognized);
178+ }
179+ } else {
180+ rejectGesture();
181+ }
182+}
183+
184+void TouchGestureArea::touchEvent(QTouchEvent *event)
185+{
186+ if (!isEnabled() || !isVisible()) {
187+ tgaDebug(QString("NOT ENABLED touchEvent(%1) %2").arg(statusToString(m_status)).arg(touchEventString(event)));
188+ QQuickItem::touchEvent(event);
189+ return;
190+ }
191+
192+ tgaDebug(QString("touchEvent(%1) %2").arg(statusToString(m_status)).arg(touchEventString(event)));
193+
194+ switch (m_status) {
195+ case InternalStatus::WaitingForTouch:
196+ touchEvent_waitingForTouch(event);
197+ break;
198+ case InternalStatus::WaitingForMoreTouches:
199+ touchEvent_waitingForMoreTouches(event);
200+ break;
201+ case InternalStatus::WaitingForOwnership:
202+ touchEvent_waitingForOwnership(event);
203+ break;
204+ case InternalStatus::Recognized:
205+ case InternalStatus::WaitingForRejection:
206+ touchEvent_recognized(event);
207+ break;
208+ case InternalStatus::Rejected:
209+ touchEvent_rejected(event);
210+ break;
211+ default: // Recognized:
212+ break;
213+ }
214+
215+ updateTouchPoints(event);
216+}
217+
218+void TouchGestureArea::touchEvent_waitingForTouch(QTouchEvent *event)
219+{
220+ Q_FOREACH(const QTouchEvent::TouchPoint& touchPoint, event->touchPoints()) {
221+ Qt::TouchPointState touchPointState = touchPoint.state();
222+ int touchId = touchPoint.id();
223+
224+ if (touchPointState == Qt::TouchPointPressed) {
225+ if (!m_candidateTouches.contains(touchId)) {
226+ TouchRegistry::instance()->addCandidateOwnerForTouch(touchId, this);
227+ m_candidateTouches.insert(touchId);
228+ }
229+ }
230+ }
231+ event->ignore();
232+
233+ if (m_candidateTouches.count() > m_maximumTouchPoints) {
234+ rejectGesture();
235+ } else if (m_candidateTouches.count() >= m_minimumTouchPoints) {
236+ setInternalStatus(InternalStatus::WaitingForOwnership);
237+
238+ QSet<int> tmpCandidates(m_candidateTouches);
239+ Q_FOREACH(int candidateTouchId, tmpCandidates) {
240+ TouchRegistry::instance()->requestTouchOwnership(candidateTouchId, this);
241+ }
242+ // We accept the gesture; so don't pass to lower items
243+ event->accept();
244+ } else if (m_candidateTouches.count() > 0) {
245+ setInternalStatus(InternalStatus::WaitingForMoreTouches);
246+ }
247+}
248+
249+void TouchGestureArea::touchEvent_waitingForMoreTouches(QTouchEvent *event)
250+{
251+ Q_FOREACH(const QTouchEvent::TouchPoint& touchPoint, event->touchPoints()) {
252+ Qt::TouchPointState touchPointState = touchPoint.state();
253+ int touchId = touchPoint.id();
254+
255+ if (touchPointState == Qt::TouchPointPressed) {
256+ if (!m_candidateTouches.contains(touchId)) {
257+ TouchRegistry::instance()->addCandidateOwnerForTouch(touchId, this);
258+ m_candidateTouches.insert(touchId);
259+ }
260+ }
261+ }
262+ event->ignore();
263+
264+ if (m_candidateTouches.count() > m_maximumTouchPoints) {
265+ rejectGesture();
266+ } else if (m_candidateTouches.count() >= m_minimumTouchPoints) {
267+ setInternalStatus(InternalStatus::WaitingForOwnership);
268+
269+ QSet<int> tmpCandidates(m_candidateTouches);
270+ Q_FOREACH(int candidateTouchId, tmpCandidates) {
271+ TouchRegistry::instance()->requestTouchOwnership(candidateTouchId, this);
272+ }
273+ // We accept the gesture; so don't pass to lower items
274+ event->accept();
275+ }
276+}
277+
278+void TouchGestureArea::touchEvent_waitingForOwnership(QTouchEvent *event)
279+{
280+ Q_FOREACH(const QTouchEvent::TouchPoint& touchPoint, event->touchPoints()) {
281+ Qt::TouchPointState touchPointState = touchPoint.state();
282+ int touchId = touchPoint.id();
283+
284+ if (touchPointState == Qt::TouchPointPressed) {
285+ if (!m_watchedTouches.contains(touchId)) {
286+ TouchRegistry::instance()->addTouchWatcher(touchId, this);
287+ m_watchedTouches.insert(touchId);
288+ }
289+ }
290+ }
291+}
292+
293+void TouchGestureArea::touchEvent_recognized(QTouchEvent *event)
294+{
295+ Q_FOREACH(const QTouchEvent::TouchPoint& touchPoint, event->touchPoints()) {
296+ Qt::TouchPointState touchPointState = touchPoint.state();
297+ int touchId = touchPoint.id();
298+
299+ if (touchPointState == Qt::TouchPointPressed) {
300+ if (!m_watchedTouches.contains(touchId)) {
301+ TouchRegistry::instance()->addTouchWatcher(touchId, this);
302+ m_watchedTouches.insert(touchId);
303+ }
304+ }
305+ }
306+
307+ if (m_watchedTouches.count() > m_maximumTouchPoints) {
308+ rejectGesture();
309+ } else if (m_watchedTouches.count() >= m_minimumTouchPoints &&
310+ m_status==InternalStatus::WaitingForRejection) {
311+ setInternalStatus(InternalStatus::Recognized);
312+ }
313+}
314+
315+void TouchGestureArea::touchEvent_rejected(QTouchEvent *event)
316+{
317+ Q_FOREACH(const QTouchEvent::TouchPoint& touchPoint, event->touchPoints()) {
318+ Qt::TouchPointState touchPointState = touchPoint.state();
319+ int touchId = touchPoint.id();
320+
321+ if (touchPointState == Qt::TouchPointPressed) {
322+ if (!m_watchedTouches.contains(touchId)) {
323+ TouchRegistry::instance()->addTouchWatcher(touchId, this);
324+ m_watchedTouches.insert(touchId);
325+ }
326+ }
327+ }
328+}
329+
330+void TouchGestureArea::unownedTouchEvent(QTouchEvent *unownedTouchEvent)
331+{
332+ tgaDebug(QString("unownedTouchEvent(%1) %2").arg(statusToString(m_status)).arg(touchEventString(unownedTouchEvent)));
333+
334+ // Only monitor unowned touch events for presses/releases
335+ if ((unownedTouchEvent->touchPointStates() & (Qt::TouchPointPressed|Qt::TouchPointReleased)) == 0) {
336+ return;
337+ }
338+
339+ switch (m_status) {
340+ case InternalStatus::WaitingForTouch:
341+ break;
342+ case InternalStatus::WaitingForMoreTouches:
343+ unownedTouchEvent_waitingForMoreTouches(unownedTouchEvent);
344+ // do nothing
345+ break;
346+ case InternalStatus::WaitingForOwnership:
347+ unownedTouchEvent_waitingForOwnership(unownedTouchEvent);
348+ break;
349+ case InternalStatus::Recognized:
350+ case InternalStatus::WaitingForRejection:
351+ unownedTouchEvent_recognised(unownedTouchEvent);
352+ break;
353+ case InternalStatus::Rejected:
354+ unownedTouchEvent_rejected(unownedTouchEvent);
355+ break;
356+ default:
357+ break;
358+ }
359+
360+ updateTouchPoints(unownedTouchEvent);
361+}
362+
363+void TouchGestureArea::unownedTouchEvent_waitingForMoreTouches(QTouchEvent *event)
364+{
365+ Q_FOREACH(const QTouchEvent::TouchPoint& touchPoint, event->touchPoints()) {
366+ Qt::TouchPointState touchPointState = touchPoint.state();
367+ int touchId = touchPoint.id();
368+
369+ if (touchPointState == Qt::TouchPointReleased) {
370+ if (m_candidateTouches.contains(touchId)) {
371+ TouchRegistry::instance()->removeCandidateOwnerForTouch(touchId, this);
372+ m_candidateTouches.remove(touchId);
373+ }
374+ }
375+ }
376+
377+ if (m_candidateTouches.count() == 0) {
378+ setInternalStatus(InternalStatus::WaitingForTouch);
379+ }
380+}
381+
382+void TouchGestureArea::unownedTouchEvent_waitingForOwnership(QTouchEvent *event)
383+{
384+ Q_FOREACH(const QTouchEvent::TouchPoint& touchPoint, event->touchPoints()) {
385+ Qt::TouchPointState touchPointState = touchPoint.state();
386+ int touchId = touchPoint.id();
387+
388+ if (touchPointState == Qt::TouchPointReleased) {
389+ if (m_candidateTouches.contains(touchId)) {
390+ TouchRegistry::instance()->removeCandidateOwnerForTouch(touchId, this);
391+ m_candidateTouches.remove(touchId);
392+ }
393+ if (m_watchedTouches.contains(touchId)) {
394+ m_watchedTouches.remove(touchId);
395+ }
396+ }
397+ }
398+
399+ if (m_candidateTouches.count() + m_watchedTouches.count() == 0) {
400+ setInternalStatus(InternalStatus::WaitingForTouch);
401+ }
402+}
403+
404+void TouchGestureArea::unownedTouchEvent_recognised(QTouchEvent *event)
405+{
406+ Q_FOREACH(const QTouchEvent::TouchPoint& touchPoint, event->touchPoints()) {
407+ Qt::TouchPointState touchPointState = touchPoint.state();
408+ int touchId = touchPoint.id();
409+
410+ if (touchPointState == Qt::TouchPointReleased) {
411+ if (m_watchedTouches.contains(touchId)) {
412+ m_watchedTouches.remove(touchId);
413+ }
414+ }
415+ }
416+
417+ if (m_watchedTouches.count() < m_minimumTouchPoints && m_status==InternalStatus::Recognized) {
418+ setInternalStatus(InternalStatus::WaitingForRejection);
419+ }
420+}
421+
422+void TouchGestureArea::unownedTouchEvent_rejected(QTouchEvent *event)
423+{
424+ Q_FOREACH(const QTouchEvent::TouchPoint& touchPoint, event->touchPoints()) {
425+ Qt::TouchPointState touchPointState = touchPoint.state();
426+ int touchId = touchPoint.id();
427+
428+ if (touchPointState == Qt::TouchPointPressed) {
429+ if (!m_watchedTouches.contains(touchId)) {
430+ TouchRegistry::instance()->addTouchWatcher(touchId, this);
431+ m_watchedTouches.insert(touchId);
432+ }
433+ }
434+ if (touchPointState == Qt::TouchPointReleased) {
435+ if (m_watchedTouches.contains(touchId)) {
436+ m_watchedTouches.remove(touchId);
437+ }
438+ }
439+ }
440+
441+ if (m_watchedTouches.count() == 0) {
442+ setInternalStatus(InternalStatus::WaitingForTouch);
443+ }
444+}
445+
446+void TouchGestureArea::updateTouchPoints(QTouchEvent *touchEvent)
447+{
448+ bool added = false;
449+ bool ended = false;
450+ bool moved = false;
451+
452+ const int dragThreshold = qApp->styleHints()->startDragDistance();
453+ const int dragVelocity = qApp->styleHints()->startDragVelocity();
454+
455+ clearTouchLists();
456+ bool updateable = m_status != InternalStatus::WaitingForRejection;
457+
458+ Q_FOREACH(const QTouchEvent::TouchPoint& touchPoint, touchEvent->touchPoints()) {
459+ Qt::TouchPointState touchPointState = touchPoint.state();
460+ int touchId = touchPoint.id();
461+
462+ if (touchPointState & Qt::TouchPointReleased) {
463+ GestureTouchPoint* gtp = m_liveTouchPoints.value(touchId);
464+ if (!gtp) continue;
465+
466+ gtp->setPos(touchPoint.pos());
467+ gtp->setPressed(false);
468+ m_releasedTouchPoints.append(gtp);
469+ m_liveTouchPoints.remove(touchId);
470+
471+ if (updateable) {
472+ if (m_cachedTouchPoints.contains(touchId)) {
473+ GestureTouchPoint* cachedPoint = m_cachedTouchPoints.take(touchId);
474+ cachedPoint->deleteLater();
475+ }
476+ }
477+ ended = true;
478+ } else {
479+ GestureTouchPoint* gtp = m_liveTouchPoints.value(touchPoint.id(), nullptr);
480+ if (!gtp) {
481+ gtp = addTouchPoint(&touchPoint);
482+ m_pressedTouchPoints.append(gtp);
483+
484+ if (updateable) {
485+ if (m_cachedTouchPoints.contains(touchId)) {
486+ m_cachedTouchPoints[touchId]->setPos(touchPoint.pos());
487+ } else {
488+ m_cachedTouchPoints[touchId] = new GestureTouchPoint(*gtp);
489+ }
490+ }
491+ added = true;
492+ } else if (touchPointState & Qt::TouchPointMoved) {
493+ gtp->setPos(touchPoint.pos());
494+ m_movedTouchPoints.append(gtp);
495+ moved = true;
496+
497+ const QPointF &currentPos = touchPoint.scenePos();
498+ const QPointF &startPos = touchPoint.startScenePos();
499+
500+ bool overDragThreshold = false;
501+ bool supportsVelocity = (touchEvent->device()->capabilities() & QTouchDevice::Velocity) && dragVelocity;
502+ overDragThreshold |= qAbs(currentPos.x() - startPos.x()) > dragThreshold ||
503+ qAbs(currentPos.y() - startPos.y()) > dragThreshold;
504+ if (supportsVelocity) {
505+ QVector2D velocityVec = touchPoint.velocity();
506+ overDragThreshold |= qAbs(velocityVec.x()) > dragVelocity;
507+ overDragThreshold |= qAbs(velocityVec.y()) > dragVelocity;
508+ }
509+
510+ if (overDragThreshold) {
511+ gtp->setDragging(true);
512+ }
513+
514+ if (updateable) {
515+ if (m_cachedTouchPoints.contains(touchId)) {
516+ m_cachedTouchPoints[touchId]->setPos(touchPoint.pos());
517+ if (overDragThreshold) {
518+ m_cachedTouchPoints[touchId]->setDragging(true);
519+ }
520+ }
521+ }
522+ }
523+ }
524+ }
525+
526+ if (updateable) {
527+ if (!dragging() && m_status == InternalStatus::Recognized) {
528+ bool allWantDrag = !m_liveTouchPoints.isEmpty();
529+ Q_FOREACH(auto point, m_liveTouchPoints) {
530+ allWantDrag &= point->dragging();
531+ }
532+ // only dragging if all points are dragging.
533+ if (allWantDrag) {
534+ setDragging(true);
535+ }
536+ }
537+
538+ if (ended) {
539+ if (m_liveTouchPoints.isEmpty()) {
540+ if (!dragging()) Q_EMIT clicked();
541+ setDragging(false);
542+ }
543+ tgaDebug("Released " << touchesString(m_releasedTouchPoints));
544+ Q_EMIT released(m_releasedTouchPoints);
545+ }
546+ if (added) {
547+ tgaDebug("Pressed " << touchesString(m_pressedTouchPoints));
548+ Q_EMIT pressed(m_pressedTouchPoints);
549+ }
550+ if (moved) {
551+ tgaDebug("Updated " << touchesString(m_movedTouchPoints));
552+ Q_EMIT updated(m_movedTouchPoints);
553+ }
554+ if (added || ended || moved) {
555+ Q_EMIT touchPointsUpdated();
556+ }
557+ }
558+}
559+
560+void TouchGestureArea::clearTouchLists()
561+{
562+ Q_FOREACH (QObject *gtp, m_releasedTouchPoints) {
563+ delete gtp;
564+ }
565+ m_releasedTouchPoints.clear();
566+ m_pressedTouchPoints.clear();
567+ m_movedTouchPoints.clear();
568+}
569+
570+void TouchGestureArea::setInternalStatus(uint newStatus)
571+{
572+ if (newStatus == m_status)
573+ return;
574+
575+ uint oldStatus = m_status;
576+
577+ m_status = newStatus;
578+ Q_EMIT statusChanged(status());
579+
580+ if (oldStatus == InternalStatus::WaitingForMoreTouches || oldStatus == InternalStatus::WaitingForRejection) {
581+ m_recognitionTimer->stop();
582+ }
583+
584+ tgaDebug(statusToString(oldStatus) << " -> " << statusToString(newStatus));
585+
586+ switch (newStatus) {
587+ case InternalStatus::WaitingForTouch:
588+ resyncCachedTouchPoints();
589+ break;
590+ case InternalStatus::WaitingForMoreTouches:
591+ m_recognitionTimer->start(m_recognitionPeriod);
592+ break;
593+ case InternalStatus::Recognized:
594+ resyncCachedTouchPoints();
595+ break;
596+ case InternalStatus::WaitingForRejection:
597+ m_recognitionTimer->start(m_releaseRejectPeriod);
598+ break;
599+ case InternalStatus::Rejected:
600+ resyncCachedTouchPoints();
601+ break;
602+ default:
603+ // no-op
604+ break;
605+ }
606+}
607+
608+void TouchGestureArea::setRecognitionTimer(UbuntuGestures::AbstractTimer *timer)
609+{
610+ int interval = 0;
611+ bool timerWasRunning = false;
612+ bool wasSingleShot = false;
613+
614+ // can be null when called from the constructor
615+ if (m_recognitionTimer) {
616+ interval = m_recognitionTimer->interval();
617+ timerWasRunning = m_recognitionTimer->isRunning();
618+ if (m_recognitionTimer->parent() == this) {
619+ delete m_recognitionTimer;
620+ }
621+ }
622+
623+ m_recognitionTimer = timer;
624+ timer->setInterval(interval);
625+ timer->setSingleShot(wasSingleShot);
626+ connect(timer, SIGNAL(timeout()),
627+ this, SLOT(rejectGesture()));
628+ if (timerWasRunning) {
629+ m_recognitionTimer->start();
630+ }
631+}
632+
633+int TouchGestureArea::status() const
634+{
635+ return internalStatusToGestureStatus(m_status);
636+}
637+
638+bool TouchGestureArea::dragging() const
639+{
640+ return m_dragging;
641+}
642+
643+QQmlListProperty<GestureTouchPoint> TouchGestureArea::touchPoints()
644+{
645+ return QQmlListProperty<GestureTouchPoint>(this,
646+ 0,
647+ nullptr,
648+ TouchGestureArea::touchPoint_count,
649+ TouchGestureArea::touchPoint_at,
650+ 0);
651+}
652+
653+int TouchGestureArea::minimumTouchPoints() const
654+{
655+ return m_minimumTouchPoints;
656+}
657+
658+void TouchGestureArea::setMinimumTouchPoints(int value)
659+{
660+ if (m_minimumTouchPoints != value) {
661+ m_minimumTouchPoints = value;
662+ Q_EMIT minimumTouchPointsChanged(value);
663+ }
664+}
665+
666+int TouchGestureArea::maximumTouchPoints() const
667+{
668+ return m_maximumTouchPoints;
669+}
670+
671+void TouchGestureArea::setMaximumTouchPoints(int value)
672+{
673+ if (m_maximumTouchPoints != value) {
674+ m_maximumTouchPoints = value;
675+ Q_EMIT maximumTouchPointsChanged(value);
676+ }
677+}
678+
679+int TouchGestureArea::recognitionPeriod() const
680+{
681+ return m_recognitionPeriod;
682+}
683+
684+void TouchGestureArea::setRecognitionPeriod(int value)
685+{
686+ if (value != m_recognitionPeriod) {
687+ m_recognitionPeriod = value;
688+ Q_EMIT recognitionPeriodChanged(value);
689+ }
690+}
691+
692+int TouchGestureArea::releaseRejectPeriod() const
693+{
694+ return m_releaseRejectPeriod;
695+}
696+
697+void TouchGestureArea::setReleaseRejectPeriod(int value)
698+{
699+ if (value != m_releaseRejectPeriod) {
700+ m_releaseRejectPeriod = value;
701+ Q_EMIT releaseRejectPeriodChanged(value);
702+ }
703+}
704+
705+void TouchGestureArea::rejectGesture()
706+{
707+ tgaDebug("rejectGesture");
708+ ungrabTouchPoints();
709+
710+ Q_FOREACH(int touchId, m_candidateTouches) {
711+ TouchRegistry::instance()->removeCandidateOwnerForTouch(touchId, this);
712+ }
713+
714+ // Monitor the candidates
715+ Q_FOREACH(int touchId, m_candidateTouches) {
716+ TouchRegistry::instance()->addTouchWatcher(touchId, this);
717+ m_watchedTouches.insert(touchId);
718+ }
719+ m_candidateTouches.clear();
720+
721+ if (m_watchedTouches.count() == 0) {
722+ setInternalStatus(InternalStatus::WaitingForTouch);
723+ } else {
724+ setInternalStatus(InternalStatus::Rejected);
725+ }
726+}
727+
728+void TouchGestureArea::resyncCachedTouchPoints()
729+{
730+ clearTouchLists();
731+
732+ bool added = false;
733+ bool ended = false;
734+ bool moved = false;
735+ bool wantsDrag = false;
736+
737+ // list of deletes
738+ QMutableHashIterator<int, GestureTouchPoint*> removeIter(m_cachedTouchPoints);
739+ while(removeIter.hasNext()) {
740+ removeIter.next();
741+ if (!m_liveTouchPoints.contains(removeIter.key())) {
742+ m_releasedTouchPoints.append(removeIter.value());
743+ removeIter.remove();
744+ ended = true;
745+ }
746+ }
747+
748+ // list of adds/moves
749+ Q_FOREACH(GestureTouchPoint* touchPoint, m_liveTouchPoints) {
750+ if (m_cachedTouchPoints.contains(touchPoint->id())) {
751+ GestureTouchPoint* cachedPoint = m_cachedTouchPoints[touchPoint->id()];
752+
753+ if (*cachedPoint != *touchPoint) {
754+ *cachedPoint = *touchPoint;
755+ m_movedTouchPoints.append(touchPoint);
756+ moved = true;
757+ }
758+ } else {
759+ m_cachedTouchPoints.insert(touchPoint->id(), new GestureTouchPoint(*touchPoint));
760+ m_pressedTouchPoints.append(touchPoint);
761+ added = true;
762+ }
763+ }
764+
765+ if (wantsDrag && !dragging()) {
766+ setDragging(true);
767+ }
768+
769+ if (ended) {
770+ if (m_cachedTouchPoints.isEmpty()) {
771+ if (!dragging()) Q_EMIT clicked();
772+ setDragging(false);
773+ }
774+ tgaDebug("Cached Release " << touchesString(m_releasedTouchPoints));
775+ Q_EMIT released(m_releasedTouchPoints);
776+ }
777+ if (added) {
778+ tgaDebug("Cached Press " << touchesString(m_pressedTouchPoints));
779+ Q_EMIT pressed(m_pressedTouchPoints);
780+ }
781+ if (moved) {
782+ tgaDebug("Cached Update " << touchesString(m_movedTouchPoints));
783+ Q_EMIT updated(m_movedTouchPoints);
784+ }
785+ if (added || ended || moved) Q_EMIT touchPointsUpdated();
786+}
787+
788+int TouchGestureArea::touchPoint_count(QQmlListProperty<GestureTouchPoint> *list)
789+{
790+ TouchGestureArea *q = static_cast<TouchGestureArea*>(list->object);
791+ return q->m_cachedTouchPoints.count();
792+}
793+
794+GestureTouchPoint *TouchGestureArea::touchPoint_at(QQmlListProperty<GestureTouchPoint> *list, int index)
795+{
796+ TouchGestureArea *q = static_cast<TouchGestureArea*>(list->object);
797+ return (q->m_cachedTouchPoints.begin()+index).value();
798+}
799+
800+GestureTouchPoint* TouchGestureArea::addTouchPoint(QTouchEvent::TouchPoint const* tp)
801+{
802+ GestureTouchPoint* gtp = new GestureTouchPoint();
803+ gtp->setId(tp->id());
804+ gtp->setPressed(true);
805+ gtp->setPos(tp->pos());
806+ m_liveTouchPoints.insert(tp->id(), gtp);
807+ return gtp;
808+}
809+
810+void TouchGestureArea::itemChange(ItemChange change, const ItemChangeData &value)
811+{
812+ if (change == QQuickItem::ItemSceneChange) {
813+ if (value.window != nullptr) {
814+ value.window->installEventFilter(TouchRegistry::instance());
815+ }
816+ }
817+}
818+
819+void TouchGestureArea::setDragging(bool dragging)
820+{
821+ if (m_dragging == dragging)
822+ return;
823+
824+ tgaDebug("setDragging " << dragging);
825+
826+ m_dragging = dragging;
827+ Q_EMIT draggingChanged(m_dragging);
828+}
829+
830+void GestureTouchPoint::setId(int id)
831+{
832+ if (m_id == id)
833+ return;
834+ m_id = id;
835+ Q_EMIT idChanged();
836+}
837+
838+void GestureTouchPoint::setPressed(bool pressed)
839+{
840+ if (m_pressed == pressed)
841+ return;
842+ m_pressed = pressed;
843+ Q_EMIT pressedChanged();
844+}
845+
846+void GestureTouchPoint::setX(qreal x)
847+{
848+ if (m_x == x)
849+ return;
850+ m_x = x;
851+ Q_EMIT xChanged();
852+}
853+
854+void GestureTouchPoint::setY(qreal y)
855+{
856+ if (m_y == y)
857+ return;
858+ m_y = y;
859+ Q_EMIT yChanged();
860+}
861+
862+void GestureTouchPoint::setDragging(bool dragging)
863+{
864+ if (m_dragging == dragging)
865+ return;
866+
867+ m_dragging = dragging;
868+ Q_EMIT draggingChanged();
869+}
870+
871+void GestureTouchPoint::setPos(const QPointF &pos)
872+{
873+ setX(pos.x());
874+ setY(pos.y());
875+}
plugins/Ubuntu/Gestures/TouchGestureArea.hnew file+229
@@ -0,0 +1,229 @@
1+/*
2+ * Copyright (C) 2016 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 TOUCHGESTUREAREA_H
18+#define TOUCHGESTUREAREA_H
19+
20+#include "UbuntuGesturesQmlGlobal.h"
21+
22+#include <QQuickItem>
23+
24+// lib UbuntuGestures
25+#include <Timer.h>
26+
27+class TouchOwnershipEvent;
28+class UnownedTouchEvent;
29+
30+class GestureTouchPoint : public QObject
31+{
32+ Q_OBJECT
33+ Q_PROPERTY(int id READ id NOTIFY idChanged)
34+ Q_PROPERTY(bool pressed READ pressed NOTIFY pressedChanged)
35+ Q_PROPERTY(qreal x READ x NOTIFY xChanged)
36+ Q_PROPERTY(qreal y READ y NOTIFY yChanged)
37+ Q_PROPERTY(bool dragging READ dragging NOTIFY draggingChanged)
38+public:
39+ GestureTouchPoint()
40+ : m_id(-1)
41+ , m_pressed(false)
42+ , m_x(0)
43+ , m_y(0)
44+ , m_dragging(false)
45+ {
46+ }
47+
48+ GestureTouchPoint(const GestureTouchPoint& other)
49+ : QObject(nullptr)
50+ {
51+ operator=(other);
52+ }
53+
54+ int id() const { return m_id; }
55+ void setId(int id);
56+
57+ bool pressed() const { return m_pressed; }
58+ void setPressed(bool pressed);
59+
60+ qreal x() const { return m_x; }
61+ void setX(qreal x);
62+
63+ qreal y() const { return m_y; }
64+ void setY(qreal y);
65+
66+ bool dragging() const { return m_dragging; }
67+ void setDragging(bool dragging);
68+
69+ GestureTouchPoint& operator=(const GestureTouchPoint& rhs) {
70+ if (&rhs == this) return *this;
71+ m_id = rhs.m_id;
72+ m_pressed = rhs.m_pressed;
73+ m_x = rhs.m_x;
74+ m_y = rhs.m_y;
75+ m_dragging = rhs.m_dragging;
76+ return *this;
77+ }
78+
79+ bool operator=(const GestureTouchPoint& rhs) const {
80+ if (&rhs == this) return true;
81+ return m_id == rhs.m_id &&
82+ m_pressed == rhs.m_pressed &&
83+ m_x == rhs.m_x &&
84+ m_y == rhs.m_y &&
85+ m_dragging == rhs.m_dragging;
86+ }
87+ bool operator!=(const GestureTouchPoint& rhs) const { return !operator=(rhs); }
88+
89+ void setPos(const QPointF &pos);
90+
91+Q_SIGNALS:
92+ void idChanged();
93+ void pressedChanged();
94+ void xChanged();
95+ void yChanged();
96+ void draggingChanged();
97+
98+private:
99+ int m_id;
100+ bool m_pressed;
101+ qreal m_x;
102+ qreal m_y;
103+ bool m_dragging;
104+};
105+
106+/*
107+ An area that detects multi-finger gestures.
108+
109+ We can use this to detect gestures contstrained by a minimim and/or maximum number of touch points.
110+ This components uses the touch registry to apply for ownership of touch points.
111+ This way we can use the component in conjuntion with the directional drag area to compete for ownwership
112+ or gestures; unlike the MultiPointTouchArea.
113+ */
114+class UBUNTUGESTURESQML_EXPORT TouchGestureArea : public QQuickItem
115+{
116+ Q_OBJECT
117+ Q_ENUMS(Status)
118+
119+ Q_PROPERTY(int status READ status NOTIFY statusChanged)
120+ Q_PROPERTY(bool dragging READ dragging NOTIFY draggingChanged)
121+ Q_PROPERTY(QQmlListProperty<GestureTouchPoint> touchPoints READ touchPoints NOTIFY touchPointsUpdated)
122+
123+ Q_PROPERTY(int minimumTouchPoints READ minimumTouchPoints WRITE setMinimumTouchPoints NOTIFY minimumTouchPointsChanged)
124+ Q_PROPERTY(int maximumTouchPoints READ maximumTouchPoints WRITE setMaximumTouchPoints NOTIFY maximumTouchPointsChanged)
125+
126+ // Time(ms) the component will wait for after receiving an initial touch to recognise a gesutre before rejecting it.
127+ Q_PROPERTY(int recognitionPeriod READ recognitionPeriod WRITE setRecognitionPeriod NOTIFY recognitionPeriodChanged)
128+ // Time(ms) the component will allow a recognised gesture to intermitently release a touch point before rejecting the gesture.
129+ // This is so we will not immediately reject a gesture if there are fleeting touch point releases while dragging.
130+ Q_PROPERTY(int releaseRejectPeriod READ releaseRejectPeriod WRITE setReleaseRejectPeriod NOTIFY releaseRejectPeriodChanged)
131+
132+public:
133+ // Describes the state of the touch gesture area.
134+ enum Status {
135+ WaitingForTouch,
136+ Undecided,
137+ Recognized,
138+ Rejected
139+ };
140+ TouchGestureArea(QQuickItem* parent = NULL);
141+ ~TouchGestureArea();
142+
143+ bool event(QEvent *e) override;
144+
145+ void setRecognitionTimer(UbuntuGestures::AbstractTimer *timer);
146+
147+ int status() const;
148+ bool dragging() const;
149+ QQmlListProperty<GestureTouchPoint> touchPoints();
150+
151+ int minimumTouchPoints() const;
152+ void setMinimumTouchPoints(int value);
153+
154+ int maximumTouchPoints() const;
155+ void setMaximumTouchPoints(int value);
156+
157+ int recognitionPeriod() const;
158+ void setRecognitionPeriod(int value);
159+
160+ int releaseRejectPeriod() const;
161+ void setReleaseRejectPeriod(int value);
162+
163+Q_SIGNALS:
164+ void statusChanged(int status);
165+
166+ void touchPointsUpdated();
167+ void draggingChanged(bool dragging);
168+ void minimumTouchPointsChanged(bool value);
169+ void maximumTouchPointsChanged(bool value);
170+ void recognitionPeriodChanged(bool value);
171+ void releaseRejectPeriodChanged(bool value);
172+
173+ void pressed(const QList<QObject*>& points);
174+ void released(const QList<QObject*>& points);
175+ void updated(const QList<QObject*>& points);
176+ void clicked();
177+
178+protected:
179+ void itemChange(ItemChange change, const ItemChangeData &value);
180+
181+private Q_SLOTS:
182+ void rejectGesture();
183+
184+private:
185+ void touchEvent(QTouchEvent *event) override;
186+ void touchEvent_waitingForTouch(QTouchEvent *event);
187+ void touchEvent_waitingForMoreTouches(QTouchEvent *event);
188+ void touchEvent_waitingForOwnership(QTouchEvent *event);
189+ void touchEvent_recognized(QTouchEvent *event);
190+ void touchEvent_rejected(QTouchEvent *event);
191+
192+ void unownedTouchEvent(QTouchEvent *unownedTouchEvent);
193+ void unownedTouchEvent_waitingForMoreTouches(QTouchEvent *unownedTouchEvent);
194+ void unownedTouchEvent_waitingForOwnership(QTouchEvent *unownedTouchEvent);
195+ void unownedTouchEvent_recognised(QTouchEvent *unownedTouchEvent);
196+ void unownedTouchEvent_rejected(QTouchEvent *unownedTouchEvent);
197+
198+ void touchOwnershipEvent(TouchOwnershipEvent *event);
199+ void updateTouchPoints(QTouchEvent *event);
200+
201+ GestureTouchPoint* addTouchPoint(const QTouchEvent::TouchPoint *tp);
202+ void clearTouchLists();
203+ void setDragging(bool dragging);
204+ void setInternalStatus(uint status);
205+ void resyncCachedTouchPoints();
206+
207+ static int touchPoint_count(QQmlListProperty<GestureTouchPoint> *list);
208+ static GestureTouchPoint* touchPoint_at(QQmlListProperty<GestureTouchPoint> *list, int index);
209+
210+ uint m_status;
211+ QSet<int> m_candidateTouches;
212+ QSet<int> m_watchedTouches;
213+ UbuntuGestures::AbstractTimer *m_recognitionTimer;
214+
215+ bool m_dragging;
216+ QHash<int, GestureTouchPoint*> m_liveTouchPoints;
217+ QHash<int, GestureTouchPoint*> m_cachedTouchPoints;
218+ QList<QObject*> m_releasedTouchPoints;
219+ QList<QObject*> m_pressedTouchPoints;
220+ QList<QObject*> m_movedTouchPoints;
221+ int m_minimumTouchPoints;
222+ int m_maximumTouchPoints;
223+ int m_recognitionPeriod;
224+ int m_releaseRejectPeriod;
225+};
226+
227+QML_DECLARE_TYPE(GestureTouchPoint)
228+
229+#endif // TOUCHGESTUREAREA_H
plugins/Ubuntu/Gestures/plugin.cpp+3
@@ -21,6 +21,7 @@
2121#include "FloatingFlickable.h"
2222#include "PressedOutsideNotifier.h"
2323#include "TouchGate.h"
24+#include "TouchGestureArea.h"
2425
2526#include <qqml.h>
2627
@@ -38,4 +39,6 @@ void UbuntuGesturesQmlPlugin::registerTypes(const char *uri)
3839 qmlRegisterType<FloatingFlickable>(uri, 0, 1, "FloatingFlickable");
3940 qmlRegisterType<PressedOutsideNotifier>(uri, 0, 1, "PressedOutsideNotifier");
4041 qmlRegisterType<TouchGate>(uri, 0, 1, "TouchGate");
42+ qmlRegisterType<TouchGestureArea>(uri, 0, 1, "TouchGestureArea");
43+ qmlRegisterUncreatableType<GestureTouchPoint>(uri, 0, 1, "GestureTouchPoint", "Cannot create GestureTouchPoints");
4144}
plugins/Unity/Indicators/indicatorsmanager.cpp+2−2
@@ -116,7 +116,7 @@ void IndicatorsManager::loadFile(const QFileInfo& file_info)
116116 QSettings indicator_settings(file_info.absoluteFilePath(), QSettings::IniFormat, this);
117117 const QString name = indicator_settings.value(QStringLiteral("Indicator Service/Name")).toString();
118118
119− if (m_platform.isPC() && name == "indicator-keyboard") {
119+ if (m_platform.isPC() && name == QLatin1String("indicator-keyboard")) {
120120 return; // convergence: skip this indicator until it works in Mir
121121 }
122122
@@ -293,7 +293,7 @@ Indicator::Ptr IndicatorsManager::indicator(const QString& indicator_name)
293293 // The rest of the indicators respect their default profile (which is "phone", even on desktop PCs)
294294 if ((new_indicator->identifier() == QStringLiteral("indicator-session") && m_platform.isMultiSession())
295295 || (new_indicator->identifier() == QStringLiteral("indicator-power") && m_platform.isPC())) {
296− new_indicator->setProfile("desktop");
296+ new_indicator->setProfile(QStringLiteral("desktop"));
297297 } else {
298298 new_indicator->setProfile(m_profile);
299299 }
plugins/Unity/Indicators/rootstateparser.h+1
@@ -23,6 +23,7 @@
2323
2424class UNITYINDICATORS_EXPORT RootStateParser : public ActionStateParser
2525{
26+Q_OBJECT
2627public:
2728 RootStateParser(QObject* parent = nullptr);
2829 virtual QVariant toQVariant(GVariant* state) const override;
plugins/Unity/InputInfo/InputInfo.qmltypesnew file+71
@@ -0,0 +1,71 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable Unity.InputInfo 0.1 plugins'
8+
9+Module {
10+ Component {
11+ name: "QDeclarativeInputDeviceModel"
12+ prototype: "QAbstractListModel"
13+ exports: ["Unity.InputInfo/InputDeviceModel 0.1"]
14+ exportMetaObjectRevisions: [0]
15+ Property { name: "deviceFilter"; type: "QInputDevice::InputType" }
16+ Property { name: "count"; type: "int"; isReadonly: true }
17+ Signal {
18+ name: "deviceAdded"
19+ Parameter { name: "devicePath"; type: "string" }
20+ }
21+ Signal {
22+ name: "deviceRemoved"
23+ Parameter { name: "devicePath"; type: "string" }
24+ }
25+ Signal {
26+ name: "deviceFilterChanged"
27+ Parameter { name: "filter"; type: "QInputDevice::InputType" }
28+ }
29+ Method { name: "updateDeviceList" }
30+ Method {
31+ name: "indexOf"
32+ type: "int"
33+ Parameter { name: "devicePath"; type: "string" }
34+ }
35+ Method {
36+ name: "get"
37+ type: "QInputDevice*"
38+ Parameter { name: "index"; type: "int" }
39+ }
40+ }
41+ Component {
42+ name: "QInputDevice"
43+ prototype: "QObject"
44+ exports: ["Unity.InputInfo/InputInfo 0.1"]
45+ exportMetaObjectRevisions: [0]
46+ Enum {
47+ name: "InputType"
48+ values: {
49+ "Unknown": 0,
50+ "Button": 1,
51+ "Mouse": 2,
52+ "TouchPad": 4,
53+ "TouchScreen": 8,
54+ "Keyboard": 16,
55+ "Switch": 32
56+ }
57+ }
58+ Enum {
59+ name: "InputTypeFlags"
60+ values: {
61+ "Unknown": 0,
62+ "Button": 1,
63+ "Mouse": 2,
64+ "TouchPad": 4,
65+ "TouchScreen": 8,
66+ "Keyboard": 16,
67+ "Switch": 32
68+ }
69+ }
70+ }
71+}
plugins/Unity/Launcher/desktopfilehandler.cpp+2−2
@@ -146,9 +146,9 @@ QString DesktopFileHandler::icon() const
146146 QString iconString = settings.value(QStringLiteral("Icon")).toString();
147147 QString pathString = settings.value(QStringLiteral("Path")).toString();
148148
149− if (QFileInfo(iconString).exists()) {
149+ if (QFileInfo::exists(iconString)) {
150150 return QFileInfo(iconString).absoluteFilePath();
151− } else if (QFileInfo(pathString + '/' + iconString).exists()) {
151+ } else if (QFileInfo::exists(pathString + '/' + iconString)) {
152152 return pathString + '/' + iconString;
153153 }
154154 return "image://theme/" + iconString;
plugins/Unity/Launcher/launcheritem.cpp+1
@@ -37,6 +37,7 @@ LauncherItem::LauncherItem(const QString &appId, const QString &name, const QStr
3737 m_alerting(false),
3838 m_quickList(new QuickListModel(this))
3939{
40+ Q_ASSERT(parent != nullptr);
4041 QuickListEntry nameAction;
4142 nameAction.setActionId(QStringLiteral("launch_item"));
4243 nameAction.setText(m_name);
plugins/Unity/Launcher/launcheritem.h+1−1
@@ -32,7 +32,7 @@ class LauncherItem: public LauncherItemInterface
3232{
3333 Q_OBJECT
3434public:
35− LauncherItem(const QString &appId, const QString &name, const QString &icon, QObject *parent = 0);
35+ LauncherItem(const QString &appId, const QString &name, const QString &icon, QObject *parent);
3636
3737 QString appId() const override;
3838 QString name() const override;
plugins/Unity/Launcher/launchermodel.cpp+15−5
@@ -103,7 +103,7 @@ void LauncherModel::setAlerting(const QString &appId, bool alerting) {
103103 LauncherItem *item = m_list.at(index);
104104 if (!item->focused()) {
105105 item->setAlerting(alerting);
106− Q_EMIT dataChanged(modelIndex, modelIndex, QVector<int>() << RoleAlerting);
106+ Q_EMIT dataChanged(modelIndex, modelIndex, {RoleAlerting});
107107 }
108108 }
109109}
@@ -389,7 +389,8 @@ void LauncherModel::countVisibleChanged(const QString &appId, bool countVisible)
389389 if (countVisible && desktopFile.isValid()) {
390390 LauncherItem *item = new LauncherItem(appId,
391391 desktopFile.displayName(),
392− desktopFile.icon());
392+ desktopFile.icon(),
393+ this);
393394 item->setCountVisible(true);
394395 beginInsertRows(QModelIndex(), m_list.count(), m_list.count());
395396 m_list.append(item);
@@ -414,10 +415,19 @@ void LauncherModel::refresh()
414415 } else {
415416 int idx = m_list.indexOf(item);
416417 item->setName(desktopFile.displayName());
417− item->setIcon(desktopFile.icon());
418418 item->setPinned(item->pinned()); // update pinned text if needed
419419 item->setRunning(item->running());
420− Q_EMIT dataChanged(index(idx), index(idx), {RoleName, RoleIcon, RoleRunning});
420+ Q_EMIT dataChanged(index(idx), index(idx), {RoleName, RoleRunning});
421+
422+ const QString oldIcon = item->icon();
423+ if (oldIcon == desktopFile.icon()) { // same icon file, perhaps different contents, simulate changing the icon name to force reload
424+ item->setIcon(QString());
425+ Q_EMIT dataChanged(index(idx), index(idx), {RoleIcon});
426+ }
427+
428+ // now set the icon for real
429+ item->setIcon(desktopFile.icon());
430+ Q_EMIT dataChanged(index(idx), index(idx), {RoleIcon});
421431 }
422432 }
423433
@@ -489,7 +499,7 @@ void LauncherModel::alert(const QString &appId)
489499 if (idx >= 0) {
490500 LauncherItem *item = m_list.at(idx);
491501 setAlerting(item->appId(), true);
492− Q_EMIT dataChanged(index(idx), index(idx), QVector<int>() << RoleAlerting);
502+ Q_EMIT dataChanged(index(idx), index(idx), {RoleAlerting});
493503 }
494504}
495505
plugins/Unity/Launcher/launchermodel.h+1−1
@@ -38,7 +38,7 @@ class LauncherModel: public LauncherModelInterface
3838 Q_OBJECT
3939
4040public:
41− LauncherModel(QObject *parent = 0);
41+ LauncherModel(QObject *parent = nullptr);
4242 ~LauncherModel();
4343
4444 int rowCount(const QModelIndex &parent = QModelIndex()) const override;
plugins/Unity/Platform/Platform.qmltypesnew file+20
@@ -0,0 +1,20 @@
1+import QtQuick.tooling 1.1
2+
3+// This file describes the plugin-supplied types contained in the library.
4+// It is used for QML tooling purposes only.
5+//
6+// This file was auto-generated by:
7+// 'qmlplugindump -notrelocatable Unity.Platform 1.0 plugins'
8+
9+Module {
10+ Component {
11+ name: "Platform"
12+ prototype: "QObject"
13+ exports: ["Unity.Platform/Platform 1.0"]
14+ isCreatable: false
15+ isSingleton: true
16+ exportMetaObjectRevisions: [0]
17+ Property { name: "chassis"; type: "string"; isReadonly: true }
18+ Property { name: "isPC"; type: "bool"; isReadonly: true }
19+ }
20+}
plugins/Utils/CMakeLists.txt+2
@@ -23,6 +23,8 @@ set(QMLPLUGIN_SRC
2323 windowstatestorage.cpp
2424 timezoneFormatter.cpp
2525 inputeventgenerator.cpp
26+ deviceconfigparser.cpp
27+ globalfunctions.cpp
2628 plugin.cpp
2729 )
2830
plugins/Utils/deviceconfigparser.cppnew file+150
@@ -0,0 +1,150 @@
1+/*
2+ * Copyright 2016 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU Lesser General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "deviceconfigparser.h"
18+
19+#include <QSettings>
20+#include <QFileInfo>
21+#include <QDebug>
22+#include <QStandardPaths>
23+
24+DeviceConfigParser::DeviceConfigParser(QObject *parent): QObject(parent)
25+{
26+ QString path;
27+ Q_FOREACH (const QString &standardPath, QStandardPaths::standardLocations(QStandardPaths::GenericConfigLocation)) {
28+ if (QFileInfo(standardPath + "/devices.conf").exists()) {
29+ path = standardPath + "/devices.conf";
30+ break;
31+ }
32+ }
33+
34+ if (path.isEmpty()) {
35+ path = "/etc/ubuntu/devices.conf";
36+ }
37+ qDebug() << "Using" << path << "as device configuration file";
38+ m_config = new QSettings(path, QSettings::IniFormat, this);
39+}
40+
41+QString DeviceConfigParser::name() const
42+{
43+ return m_name;
44+}
45+
46+void DeviceConfigParser::setName(const QString &name)
47+{
48+ if (m_name == name) {
49+ return;
50+ }
51+ m_name = name;
52+ Q_EMIT changed();
53+}
54+
55+Qt::ScreenOrientation DeviceConfigParser::primaryOrientation() const
56+{
57+ return stringToOrientation(readOrientationFromConfig("PrimaryOrientation"), Qt::PrimaryOrientation);
58+}
59+
60+Qt::ScreenOrientations DeviceConfigParser::supportedOrientations() const
61+{
62+ QStringList values = readOrientationsFromConfig("SupportedOrientations");
63+ if (values.isEmpty()) {
64+ return Qt::PortraitOrientation
65+ | Qt::InvertedPortraitOrientation
66+ | Qt::LandscapeOrientation
67+ | Qt::InvertedLandscapeOrientation;
68+ }
69+
70+ Qt::ScreenOrientations ret = Qt::PrimaryOrientation;
71+ Q_FOREACH(const QString &orientationString, values) {
72+ ret |= stringToOrientation(orientationString, Qt::PrimaryOrientation);
73+ }
74+ return ret;
75+}
76+
77+Qt::ScreenOrientation DeviceConfigParser::landscapeOrientation() const
78+{
79+ return stringToOrientation(readOrientationFromConfig("LandscapeOrientation"), Qt::LandscapeOrientation);
80+}
81+
82+Qt::ScreenOrientation DeviceConfigParser::invertedLandscapeOrientation() const
83+{
84+ return stringToOrientation(readOrientationFromConfig("InvertedLandscapeOrientation"), Qt::InvertedLandscapeOrientation);
85+}
86+
87+Qt::ScreenOrientation DeviceConfigParser::portraitOrientation() const
88+{
89+ return stringToOrientation(readOrientationFromConfig("PortraitOrientation"), Qt::PortraitOrientation);
90+}
91+
92+Qt::ScreenOrientation DeviceConfigParser::invertedPortraitOrientation() const
93+{
94+ return stringToOrientation(readOrientationFromConfig("InvertedPortraitOrientation"), Qt::InvertedPortraitOrientation);
95+}
96+
97+QString DeviceConfigParser::category() const
98+{
99+ QStringList supportedValues = {"phone", "tablet", "desktop"};
100+ m_config->beginGroup(m_name);
101+ QString value = m_config->value("Category", "phone").toString();
102+ if (!supportedValues.contains(value)) {
103+ qWarning().nospace().noquote() << "Unknown option \"" << value << "\" in " << m_config->fileName()
104+ << ". Supported options are: " << supportedValues.join(", ") << ".";
105+ return "phone";
106+ }
107+ m_config->endGroup();
108+ return value;
109+}
110+
111+QStringList DeviceConfigParser::readOrientationsFromConfig(const QString &key) const
112+{
113+ m_config->beginGroup(m_name);
114+
115+ QStringList ret;
116+ if (m_config->contains(key)) {
117+ ret = m_config->value(key).toStringList();
118+ }
119+
120+ m_config->endGroup();
121+ return ret;
122+}
123+
124+QString DeviceConfigParser::readOrientationFromConfig(const QString &key) const
125+{
126+ QStringList ret = readOrientationsFromConfig(key);
127+ return ret.count() > 0 ? ret.first() : QString();
128+}
129+
130+Qt::ScreenOrientation DeviceConfigParser::stringToOrientation(const QString &orientationString, Qt::ScreenOrientation defaultValue) const
131+{
132+ if (orientationString == "Landscape") {
133+ return Qt::LandscapeOrientation;
134+ }
135+ if (orientationString == "InvertedLandscape") {
136+ return Qt::InvertedLandscapeOrientation;
137+ }
138+ if (orientationString == "Portrait") {
139+ return Qt::PortraitOrientation;
140+ }
141+ if (orientationString == "InvertedPortrait") {
142+ return Qt::InvertedPortraitOrientation;
143+ }
144+ if (!orientationString.isEmpty()) {
145+ // Some option we don't know. Give some hint on what went wrong.
146+ qWarning().nospace().noquote() << "Unknown option \"" << orientationString << "\" in " << m_config->fileName()
147+ << ". Supported options are: Landscape, InvertedLandscape, Portrait and InvertedPortrait.";
148+ }
149+ return defaultValue;
150+}
plugins/Utils/deviceconfigparser.hnew file+62
@@ -0,0 +1,62 @@
1+/*
2+ * Copyright 2016 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU Lesser General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef DEVICECONFIGPARSER_H
18+#define DEVICECONFIGPARSER_H
19+
20+#include <QObject>
21+#include <QSettings>
22+
23+class DeviceConfigParser: public QObject
24+{
25+ Q_OBJECT
26+ Q_PROPERTY(QString name READ name WRITE setName NOTIFY changed)
27+
28+ Q_PROPERTY(Qt::ScreenOrientation primaryOrientation READ primaryOrientation NOTIFY changed)
29+ Q_PROPERTY(Qt::ScreenOrientations supportedOrientations READ supportedOrientations NOTIFY changed)
30+ Q_PROPERTY(Qt::ScreenOrientation landscapeOrientation READ landscapeOrientation NOTIFY changed)
31+ Q_PROPERTY(Qt::ScreenOrientation invertedLandscapeOrientation READ invertedLandscapeOrientation NOTIFY changed)
32+ Q_PROPERTY(Qt::ScreenOrientation portraitOrientation READ portraitOrientation NOTIFY changed)
33+ Q_PROPERTY(Qt::ScreenOrientation invertedPortraitOrientation READ invertedPortraitOrientation NOTIFY changed)
34+ Q_PROPERTY(QString category READ category NOTIFY changed)
35+
36+public:
37+ DeviceConfigParser(QObject *parent = nullptr);
38+
39+ QString name() const;
40+ void setName(const QString &name);
41+
42+ Qt::ScreenOrientation primaryOrientation() const;
43+ Qt::ScreenOrientations supportedOrientations() const;
44+ Qt::ScreenOrientation landscapeOrientation() const;
45+ Qt::ScreenOrientation invertedLandscapeOrientation() const;
46+ Qt::ScreenOrientation portraitOrientation() const;
47+ Qt::ScreenOrientation invertedPortraitOrientation() const;
48+ QString category() const;
49+
50+Q_SIGNALS:
51+ void changed();
52+
53+private:
54+ QString m_name;
55+ QSettings *m_config;
56+
57+ QStringList readOrientationsFromConfig(const QString &key) const;
58+ QString readOrientationFromConfig(const QString &key) const;
59+ Qt::ScreenOrientation stringToOrientation(const QString &orientationString, Qt::ScreenOrientation defaultValue) const;
60+};
61+
62+#endif
plugins/Utils/globalfunctions.cppnew file+56
@@ -0,0 +1,56 @@
1+/*
2+ * Copyright 2015 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU Lesser General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+*/
16+
17+#include "globalfunctions.h"
18+
19+#pragma GCC diagnostic push
20+#pragma GCC diagnostic ignored "-pedantic"
21+#include <private/qquickitem_p.h>
22+#pragma GCC diagnostic pop
23+#include <QQmlEngine>
24+
25+GlobalFunctions::GlobalFunctions(QObject *parent)
26+ : QObject(parent)
27+{
28+}
29+
30+QQuickItem *GlobalFunctions::itemAt(QQuickItem* parent, int x, int y, QJSValue matcher)
31+{
32+ if (!parent) return nullptr;
33+ QList<QQuickItem *> children = QQuickItemPrivate::get(parent)->paintOrderChildItems();
34+
35+ for (int i = children.count() - 1; i >= 0; --i) {
36+ QQuickItem *child = children.at(i);
37+
38+ // Map coordinates to the child element's coordinate space
39+ QPointF point = parent->mapToItem(child, QPointF(x, y));
40+ if (child->isVisible() && point.x() >= 0
41+ && child->width() >= point.x()
42+ && point.y() >= 0
43+ && child->height() >= point.y()) {
44+ if (!matcher.isCallable()) return child;
45+
46+ QQmlEngine* engine = qmlEngine(child);
47+ if (!engine) return child;
48+
49+ QJSValue newObj = engine->newQObject(child);
50+ if (matcher.call(QJSValueList() << newObj).toBool()) {
51+ return child;
52+ }
53+ }
54+ }
55+ return nullptr;
56+}
plugins/Utils/globalfunctions.hnew file+42
@@ -0,0 +1,42 @@
1+/*
2+ * Copyright 2015 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU Lesser General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+*/
16+
17+#ifndef GLOBALFUNCTIONS_H
18+#define GLOBALFUNCTIONS_H
19+
20+#include <QObject>
21+#include <QJSValue>
22+class QQuickItem;
23+
24+/**
25+ * @brief The GlobalFunctions class
26+ *
27+ * This singleton class exposes utility functions to QML
28+ *
29+ */
30+class GlobalFunctions : public QObject
31+{
32+ Q_OBJECT
33+public:
34+ explicit GlobalFunctions(QObject *parent = 0);
35+
36+ static Q_INVOKABLE QQuickItem* itemAt(QQuickItem* parent,
37+ int x,
38+ int y,
39+ QJSValue matcher);
40+};
41+
42+#endif // GLOBALFUNCTIONS_H
plugins/Utils/plugin.cpp+11
@@ -37,6 +37,8 @@
3737#include "timezoneFormatter.h"
3838#include "applicationsfiltermodel.h"
3939#include "inputeventgenerator.h"
40+#include "deviceconfigparser.h"
41+#include "globalfunctions.h"
4042
4143static QObject *createWindowStateStorage(QQmlEngine *engine, QJSEngine *scriptEngine)
4244{
@@ -52,6 +54,13 @@ static QObject *createConstants(QQmlEngine *engine, QJSEngine *scriptEngine)
5254 return new Constants();
5355}
5456
57+static QObject *createGlobalFunctions(QQmlEngine *engine, QJSEngine *scriptEngine)
58+{
59+ Q_UNUSED(engine)
60+ Q_UNUSED(scriptEngine)
61+ return new GlobalFunctions();
62+}
63+
5564void UtilsPlugin::registerTypes(const char *uri)
5665{
5766 Q_ASSERT(uri == QLatin1String("Utils"));
@@ -70,6 +79,8 @@ void UtilsPlugin::registerTypes(const char *uri)
7079 qmlRegisterType<ActiveFocusLogger>(uri, 0, 1, "ActiveFocusLogger");
7180 qmlRegisterType<ApplicationsFilterModel>(uri, 0, 1, "ApplicationsFilterModel");
7281 qmlRegisterType<InputEventGenerator>(uri, 0, 1, "InputEventGenerator");
82+ qmlRegisterType<DeviceConfigParser>(uri, 0, 1, "DeviceConfigParser");
83+ qmlRegisterSingletonType<GlobalFunctions>(uri, 0, 1, "Functions", createGlobalFunctions);
7384}
7485
7586void UtilsPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
plugins/Utils/timezoneFormatter.cpp+10
@@ -33,3 +33,13 @@ QString TimezoneFormatter::currentTimeInTimezone(const QVariant &tzId) const
3333 }
3434 return QString();
3535}
36+
37+QString TimezoneFormatter::currentTimeInTimezoneWithAbbrev(const QVariant &tzId) const
38+{
39+ QTimeZone tz(tzId.toByteArray());
40+ if (tz.isValid()) {
41+ const QDateTime now = QDateTime::currentDateTime().toTimeZone(tz);
42+ return QStringLiteral("%1 %2").arg(now.time().toString(QStringLiteral("h:mm"))).arg(tz.abbreviation(now));
43+ }
44+ return QString();
45+}
plugins/Utils/timezoneFormatter.h+1
@@ -27,6 +27,7 @@ public:
2727 ~TimezoneFormatter() = default;
2828
2929 Q_INVOKABLE QString currentTimeInTimezone(const QVariant &tzId) const;
30+ Q_INVOKABLE QString currentTimeInTimezoneWithAbbrev(const QVariant &tzId) const;
3031};
3132
3233#endif
plugins/Utils/windowstatestorage.cpp+36−4
@@ -23,9 +23,14 @@
2323#include <QSqlError>
2424#include <QSqlResult>
2525#include <QRect>
26+#include <unity/shell/application/ApplicationInfoInterface.h>
2627
2728QMutex WindowStateStorage::s_mutex;
2829
30+inline QString sanitiseString(QString string) {
31+ return string.remove("\"").remove("'").remove("\\");
32+}
33+
2934WindowStateStorage::WindowStateStorage(QObject *parent):
3035 QObject(parent)
3136{
@@ -50,7 +55,7 @@ WindowStateStorage::~WindowStateStorage()
5055void WindowStateStorage::saveState(const QString &windowId, WindowStateStorage::WindowState state)
5156{
5257 const QString queryString = QStringLiteral("INSERT OR REPLACE INTO state (windowId, state) values ('%1', '%2');")
53− .arg(windowId)
58+ .arg(sanitiseString(windowId))
5459 .arg((int)state);
5560
5661 saveValue(queryString);
@@ -59,7 +64,7 @@ void WindowStateStorage::saveState(const QString &windowId, WindowStateStorage::
5964WindowStateStorage::WindowState WindowStateStorage::getState(const QString &windowId, WindowStateStorage::WindowState defaultValue) const
6065{
6166 const QString queryString = QStringLiteral("SELECT * FROM state WHERE windowId = '%1';")
62− .arg(windowId);
67+ .arg(sanitiseString(windowId));
6368
6469 QSqlQuery query = getValue(queryString);
6570
@@ -72,7 +77,7 @@ WindowStateStorage::WindowState WindowStateStorage::getState(const QString &wind
7277void WindowStateStorage::saveGeometry(const QString &windowId, const QRect rect)
7378{
7479 const QString queryString = QStringLiteral("INSERT OR REPLACE INTO geometry (windowId, x, y, width, height) values ('%1', '%2', '%3', '%4', '%5');")
75− .arg(windowId)
80+ .arg(sanitiseString(windowId))
7681 .arg(rect.x())
7782 .arg(rect.y())
7883 .arg(rect.width())
@@ -81,6 +86,28 @@ void WindowStateStorage::saveGeometry(const QString &windowId, const QRect rect)
8186 saveValue(queryString);
8287}
8388
89+void WindowStateStorage::saveStage(const QString &appId, int stage)
90+{
91+ const QString queryString = QStringLiteral("INSERT OR REPLACE INTO stage (appId, stage) values ('%1', '%2');")
92+ .arg(sanitiseString(appId))
93+ .arg((int)stage);
94+
95+ saveValue(queryString);
96+}
97+
98+int WindowStateStorage::getStage(const QString &appId) const
99+{
100+ const QString queryString = QStringLiteral("SELECT * FROM stage WHERE appId = '%1';")
101+ .arg(sanitiseString(appId));
102+
103+ QSqlQuery query = getValue(queryString);
104+
105+ if (!query.first()) {
106+ return unity::shell::application::ApplicationInfoInterface::MainStage;
107+ }
108+ return query.value("stage").toInt();
109+}
110+
84111void WindowStateStorage::executeAsyncQuery(const QString &queryString)
85112{
86113 QMutexLocker l(&s_mutex);
@@ -97,7 +124,7 @@ void WindowStateStorage::executeAsyncQuery(const QString &queryString)
97124QRect WindowStateStorage::getGeometry(const QString &windowId, const QRect defaultValue) const
98125{
99126 QString queryString = QStringLiteral("SELECT * FROM geometry WHERE windowId = '%1';")
100− .arg(windowId);
127+ .arg(sanitiseString(windowId));
101128
102129 QSqlQuery query = getValue(queryString);
103130
@@ -124,6 +151,11 @@ void WindowStateStorage::initdb()
124151 QSqlQuery query;
125152 query.exec(QStringLiteral("CREATE TABLE state(windowId TEXT UNIQUE, state INTEGER);"));
126153 }
154+
155+ if (!m_db.tables().contains(QStringLiteral("stage"))) {
156+ QSqlQuery query;
157+ query.exec(QStringLiteral("CREATE TABLE stage(appId TEXT UNIQUE, stage INTEGER);"));
158+ }
127159}
128160
129161void WindowStateStorage::saveValue(const QString &queryString)
plugins/Utils/windowstatestorage.h+3
@@ -38,6 +38,9 @@ public:
3838 Q_INVOKABLE void saveGeometry(const QString &windowId, const QRect rect);
3939 Q_INVOKABLE QRect getGeometry(const QString &windowId, const QRect defaultValue) const;
4040
41+ Q_INVOKABLE void saveStage(const QString &appId, int stage);
42+ Q_INVOKABLE int getStage(const QString &appId) const;
43+
4144private:
4245 void initdb();
4346
plugins/Wizard/CMakeLists.txt+7−1
@@ -1,10 +1,16 @@
1+include_directories(${GLIB_INCLUDE_DIRS} ${GEONAMES_INCLUDE_DIRS})
2+
13add_library(Wizard-qml MODULE
24 plugin.cpp
35 PageList.cpp
46 System.cpp
7+ LocalePlugin.cpp
8+ timezonemodel.cpp
9+ Status.cpp
510)
611
7−qt5_use_modules(Wizard-qml DBus Qml)
12+qt5_use_modules(Wizard-qml DBus Qml Concurrent)
13+target_link_libraries(Wizard-qml ${GLIB_LDFLAGS} ${GEONAMES_LDFLAGS})
814add_unity8_plugin(Wizard 0.1 Wizard TARGETS Wizard-qml)
915
1016set(POLKIT_LIB_DIR "${CMAKE_INSTALL_LOCALSTATEDIR}/lib/polkit-1")
plugins/Wizard/LocalePlugin.cppnew file+291
@@ -0,0 +1,291 @@
1+/*
2+ * Copyright (C) 2015 Canonical Ltd.
3+ *
4+ * This program is free software: you can redistribute it and/or modify it
5+ * under the terms of the GNU General Public License version 3, as published
6+ * by the Free Software Foundation.
7+ *
8+ * This program is distributed in the hope that it will be useful, but
9+ * WITHOUT ANY WARRANTY; without even the implied warranties of
10+ * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11+ * PURPOSE. See the GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License along
14+ * with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include <QLocale>
18+#include <QStringList>
19+
20+#include <libintl.h>
21+
22+#include "LocalePlugin.h"
23+
24+class LocalePrivate {
25+public:
26+ LocalePrivate() {
27+ m_mccCodes = QHash<int, QString>
28+ ({{202,"gr"},
29+ {204,"nl"},
30+ {206,"be"},
31+ {208,"fr"},
32+ {212,"mc"},
33+ {213,"ad"},
34+ {214,"es"},
35+ {216,"hu"},
36+ {218,"ba"},
37+ {219,"hr"},
38+ {220,"rs"},
39+ {222,"it"},
40+ {226,"ro"},
41+ {228,"ch"},
42+ {230,"cz"},
43+ {231,"sk"},
44+ {232,"at"},
45+ {234,"gb"},
46+ {235,"gb"},
47+ {238,"dk"},
48+ {240,"se"},
49+ {242,"no"},
50+ {244,"fi"},
51+ {246,"lt"},
52+ {247,"lv"},
53+ {248,"ee"},
54+ {250,"ru"},
55+ {255,"ua"},
56+ {257,"by"},
57+ {259,"md"},
58+ {260,"pl"},
59+ {262,"de"},
60+ {266,"gi"},
61+ {268,"pt"},
62+ {270,"lu"},
63+ {272,"ie"},
64+ {274,"is"},
65+ {276,"al"},
66+ {278,"mt"},
67+ {280,"cy"},
68+ {282,"ge"},
69+ {283,"am"},
70+ {284,"bg"},
71+ {286,"tr"},
72+ {288,"fo"},
73+ {289,"ge"},
74+ {290,"gl"},
75+ {292,"sm"},
76+ {293,"si"},
77+ {294,"mk"},
78+ {295,"li"},
79+ {297,"me"},
80+ {302,"ca"},
81+ {308,"pm"},
82+ {310,"gu"},
83+ {310,"us"},
84+ {311,"gu"},
85+ {311,"us"},
86+ {312,"us"},
87+ {316,"us"},
88+ {330,"pr"},
89+ {334,"mx"},
90+ {338,"jm"},
91+ {340,"fg"},
92+ {340,"gp"},
93+ {340,"mq"},
94+ {342,"bb"},
95+ {344,"ag"},
96+ {346,"ky"},
97+ {348,"vg"},
98+ {350,"bm"},
99+ {352,"gd"},
100+ {354,"ms"},
101+ {356,"kn"},
102+ {358,"lc"},
103+ {360,"vc"},
104+ {362,"an"},
105+ {362,"cw"},
106+ {363,"aw"},
107+ {364,"bs"},
108+ {365,"ai"},
109+ {366,"dm"},
110+ {368,"cu"},
111+ {370,"do"},
112+ {372,"ht"},
113+ {374,"tt"},
114+ {376,"tc"},
115+ {376,"vi"},
116+ {400,"az"},
117+ {401,"kz"},
118+ {402,"bt"},
119+ {404,"in"},
120+ {405,"in"},
121+ {410,"pk"},
122+ {412,"af"},
123+ {413,"lk"},
124+ {414,"mm"},
125+ {415,"lb"},
126+ {416,"jo"},
127+ {417,"sy"},
128+ {418,"iq"},
129+ {419,"kw"},
130+ {420,"sa"},
131+ {421,"ye"},
132+ {422,"om"},
133+ {424,"ae"},
134+ {425,"il"},
135+ {425,"ps"},
136+ {426,"bh"},
137+ {427,"qa"},
138+ {428,"mn"},
139+ {429,"np"},
140+ {430,"ae"},
141+ {431,"ae"},
142+ {432,"ir"},
143+ {434,"uz"},
144+ {436,"tk"},
145+ {437,"kg"},
146+ {438,"tm"},
147+ {440,"jp"},
148+ {441,"jp"},
149+ {450,"kr"},
150+ {452,"vn"},
151+ {454,"hk"},
152+ {455,"mo"},
153+ {456,"kh"},
154+ {457,"la"},
155+ {460,"cn"},
156+ {466,"tw"},
157+ {467,"kp"},
158+ {470,"bd"},
159+ {472,"mv"},
160+ {502,"my"},
161+ {505,"au"},
162+ {510,"id"},
163+ {514,"tp"},
164+ {515,"ph"},
165+ {520,"th"},
166+ {525,"sg"},
167+ {528,"bn"},
168+ {530,"nz"},
169+ {537,"pg"},
170+ {539,"to"},
171+ {540,"sb"},
172+ {541,"vu"},
173+ {542,"fj"},
174+ {544,"as"},
175+ {545,"ki"},
176+ {546,"nc"},
177+ {547,"pf"},
178+ {548,"ck"},
179+ {549,"ws"},
180+ {550,"fm"},
181+ {552,"pw"},
182+ {553,"tv"},
183+ {555,"nu"},
184+ {602,"eg"},
185+ {603,"dz"},
186+ {604,"ma"},
187+ {605,"tn"},
188+ {606,"ly"},
189+ {607,"gm"},
190+ {608,"sn"},
191+ {609,"mr"},
192+ {610,"ml"},
193+ {611,"gn"},
194+ {612,"ci"},
195+ {613,"bf"},
196+ {614,"ne"},
197+ {615,"tg"},
198+ {616,"bj"},
199+ {617,"mu"},
200+ {618,"lr"},
201+ {619,"sl"},
202+ {620,"gh"},
203+ {621,"ng"},
204+ {622,"td"},
205+ {623,"cf"},
206+ {624,"cm"},
207+ {625,"cv"},
208+ {626,"st"},
209+ {627,"gq"},
210+ {628,"ga"},
211+ {629,"cg"},
212+ {630,"cd"},
213+ {631,"ao"},
214+ {632,"gw"},
215+ {633,"sc"},
216+ {634,"sd"},
217+ {635,"rw"},
218+ {636,"et"},
219+ {637,"so"},
220+ {638,"dj"},
221+ {639,"ke"},
222+ {640,"tz"},
223+ {641,"ug"},
224+ {642,"bi"},
225+ {643,"mz"},
226+ {645,"zm"},
227+ {646,"mg"},
228+ {647,"re"},
229+ {648,"zw"},
230+ {649,"na"},
231+ {650,"mw"},
232+ {651,"ls"},
233+ {652,"bw"},
234+ {653,"sz"},
235+ {654,"km"},
236+ {655,"za"},
237+ {657,"er"},
238+ {659,"ss"},
239+ {702,"bz"},
240+ {704,"gt"},
241+ {706,"sv"},
242+ {708,"hn"},
243+ {710,"ni"},
244+ {712,"cr"},
245+ {714,"pa"},
246+ {716,"pe"},
247+ {722,"ar"},
248+ {724,"br"},
249+ {730,"cl"},
250+ {732,"co"},
251+ {734,"ve"},
252+ {736,"bo"},
253+ {738,"gy"},
254+ {740,"ec"},
255+ {744,"py"},
256+ {746,"sr"},
257+ {748,"uy"},
258+ {750,"fk"}}
259+ );
260+ }
261+
262+ QString mccToCountryCode(int mcc) const {
263+ return m_mccCodes.value(mcc, "us").toUpper();
264+ }
265+
266+private:
267+ // MCC = Mobile Country Code, see https://en.wikipedia.org/wiki/Mobile_country_code
268+ QHash<int,QString> m_mccCodes;
269+};
270+
271+Q_GLOBAL_STATIC(LocalePrivate, d)
272+
273+LocaleAttached::LocaleAttached(QObject* parent)
274+ : QObject(parent)
275+{
276+}
277+
278+QString LocaleAttached::mccToCountryCode(int mcc) const
279+{
280+ return d->mccToCountryCode(mcc);
281+}
282+
283+LocalePlugin::LocalePlugin(QObject* parent)
284+ : QObject(parent)
285+{
286+}
287+
288+LocaleAttached* LocalePlugin::qmlAttachedProperties(QObject* parent)
289+{
290+ return new LocaleAttached(parent);
291+}
plugins/Wizard/LocalePlugin.hnew file+58
@@ -0,0 +1,58 @@
1+/*
2+ * Copyright (C) 2015 Canonical Ltd.
3+ *
4+ * This program is free software: you can redistribute it and/or modify it
5+ * under the terms of the GNU General Public License version 3, as published
6+ * by the Free Software Foundation.
7+ *
8+ * This program is distributed in the hope that it will be useful, but
9+ * WITHOUT ANY WARRANTY; without even the implied warranties of
10+ * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11+ * PURPOSE. See the GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License along
14+ * with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef LOCALE_PLUGIN_H
18+#define LOCALE_PLUGIN_H
19+
20+#include <QObject>
21+#include <QString>
22+#include <QJsonObject>
23+#include <QtQml>
24+
25+class LocaleAttached: public QObject
26+{
27+ Q_OBJECT
28+protected:
29+ explicit LocaleAttached(QObject *parent = 0);
30+
31+public:
32+ Q_INVOKABLE QString mccToCountryCode(int mcc) const;
33+
34+ friend class LocalePlugin;
35+};
36+
37+/**
38+ * A simplified wrapper around QLocale.
39+ *
40+ * The wrapper is implemented as an attached property, which makes it possible
41+ * to use it as if its methods were static:
42+ *
43+ * @code
44+ * var langs = LocalePlugin.languages();
45+ * @endcode
46+ */
47+class LocalePlugin: public QObject
48+{
49+ Q_OBJECT
50+public:
51+ explicit LocalePlugin(QObject *parent = 0);
52+
53+ static LocaleAttached* qmlAttachedProperties(QObject *parent);
54+};
55+
56+QML_DECLARE_TYPEINFO(LocalePlugin, QML_HAS_ATTACHED_PROPERTIES)
57+
58+#endif // LOCALE_PLUGIN_H
plugins/Wizard/PageList.cpp+4−4
@@ -40,20 +40,20 @@ PageList::PageList(QObject *parent)
4040 m_index(-1),
4141 m_pages()
4242{
43− QString qmlSuffix = QStringLiteral(".qml");
44− QString disabledSuffix = QStringLiteral(".disabled");
43+ const QString qmlSuffix = QStringLiteral(".qml");
44+ const QString disabledSuffix = QStringLiteral(".disabled");
4545 QSet<QString> disabledPages;
4646 QStringList dataDirs;
4747
4848 if (!isRunningInstalled() && getenv("WIZARD_TESTING") == nullptr) {
49− dataDirs = QStringList() << qmlDirectory();
49+ dataDirs << qmlDirectory();
5050 } else {
5151 dataDirs = shellDataDirs();
5252 }
5353
5454 Q_FOREACH(const QString &dataDir, dataDirs) {
5555 QDir dir(dataDir + "/Wizard/Pages");
56− QStringList entries = dir.entryList(QStringList(QStringLiteral("[0-9]*")), QDir::Files | QDir::Readable);
56+ const QStringList entries = dir.entryList(QStringList(QStringLiteral("[0-9]*")), QDir::Files | QDir::Readable);
5757 Q_FOREACH(const QString &entry, entries) {
5858 if (!m_pages.contains(entry) && entry.endsWith(qmlSuffix))
5959 m_pages.insert(entry, dir.absoluteFilePath(entry));
plugins/Wizard/Status.cppnew file+143
@@ -0,0 +1,143 @@
1+/*
2+ * Copyright (C) 2015 Canonical Ltd.
3+ *
4+ * This program is free software: you can redistribute it and/or modify it
5+ * under the terms of the GNU General Public License version 3, as published
6+ * by the Free Software Foundation.
7+ *
8+ * This program is distributed in the hope that it will be useful, but
9+ * WITHOUT ANY WARRANTY; without even the implied warranties of
10+ * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11+ * PURPOSE. See the GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License along
14+ * with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include <QDebug>
18+#include <QDBusConnection>
19+
20+#include "Status.h"
21+
22+Status::Status()
23+{
24+ initNM();
25+ initUPower();
26+}
27+
28+void Status::initNM()
29+{
30+ m_nmIface = new QDBusInterface("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager", "org.freedesktop.NetworkManager",
31+ QDBusConnection::systemBus(), this);
32+
33+ QDBusConnection::systemBus().connect("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager", "org.freedesktop.NetworkManager", "PropertiesChanged",
34+ this, SLOT(onNMPropertiesChanged(QVariantMap)));
35+}
36+
37+void Status::onNMPropertiesChanged(const QVariantMap &changedProps)
38+{
39+ if (changedProps.contains("State") || changedProps.contains("Connectivity")) {
40+ Q_EMIT onlineChanged();
41+ Q_EMIT networkIconChanged();
42+ }
43+
44+ if (changedProps.contains("PrimaryConnection") || changedProps.contains("SpecificObject") || changedProps.contains("Strength")) {
45+ Q_EMIT networkIconChanged();
46+ }
47+}
48+
49+bool Status::online() const
50+{
51+ if (!m_nmIface->isValid())
52+ return false;
53+
54+ return m_nmIface->property("State").toUInt() == 70;
55+}
56+
57+QString Status::networkIcon()
58+{
59+ QString iconName = QStringLiteral("nm-no-connection");
60+
61+ if (!online()) {
62+ return iconName;
63+ }
64+
65+ const QString primaryConn = m_nmIface->property("PrimaryConnection").value<QDBusObjectPath>().path();
66+ const QString primaryConnType = m_nmIface->property("PrimaryConnectionType").toString();
67+
68+ if (primaryConn.isEmpty()) {
69+ qWarning() << "Empty primary connection";
70+ return iconName;
71+ }
72+
73+ if (primaryConnType == "802-11-wireless") {
74+ QDBusInterface activeConn("org.freedesktop.NetworkManager", primaryConn, "org.freedesktop.NetworkManager.Connection.Active", QDBusConnection::systemBus());
75+
76+ if (activeConn.isValid()) {
77+ const QString apPath = activeConn.property("SpecificObject").value<QDBusObjectPath>().path();
78+
79+ if (apPath.isEmpty()) {
80+ qWarning() << "No AP path";
81+ return iconName;
82+ }
83+
84+ QDBusConnection::systemBus().connect("org.freedesktop.NetworkManager", primaryConn, "org.freedesktop.NetworkManager.Connection.Active", "PropertiesChanged",
85+ this, SLOT(onNMPropertiesChanged(QVariantMap)));
86+
87+ QDBusInterface ap("org.freedesktop.NetworkManager", apPath, "org.freedesktop.NetworkManager.AccessPoint", QDBusConnection::systemBus());
88+
89+ if (!ap.isValid()) {
90+ qWarning() << "Invalid AP";
91+ return iconName;
92+ }
93+
94+ QDBusConnection::systemBus().connect("org.freedesktop.NetworkManager", apPath, "org.freedesktop.NetworkManager.AccessPoint", "PropertiesChanged",
95+ this, SLOT(onNMPropertiesChanged(QVariantMap)));
96+
97+ const uint strength = ap.property("Strength").toUInt();
98+ const uint flags = ap.property("Flags").toUInt();
99+
100+ if (strength == 0) {
101+ iconName = "nm-signal-00";
102+ } else if (strength <= 25) {
103+ iconName = "nm-signal-25";
104+ } else if (strength <= 50) {
105+ iconName = "nm-signal-50";
106+ } else if (strength <= 75) {
107+ iconName = "nm-signal-75";
108+ } else if (strength <= 100) {
109+ iconName = "nm-signal-100";
110+ }
111+
112+ if (flags >= 1) {
113+ iconName += "-secure";
114+ }
115+ }
116+ }
117+
118+ return iconName;
119+}
120+
121+void Status::initUPower()
122+{
123+ m_upowerIface = new QDBusInterface("org.freedesktop.UPower", "/org/freedesktop/UPower/devices/DisplayDevice", "org.freedesktop.UPower.Device",
124+ QDBusConnection::systemBus(), this);
125+ QDBusConnection::systemBus().connect("org.freedesktop.UPower", "/org/freedesktop/UPower/devices/DisplayDevice", "org.freedesktop.DBus.Properties",
126+ "PropertiesChanged", this, SLOT(onUPowerPropertiesChanged(QString,QVariantMap,QStringList)));
127+}
128+
129+void Status::onUPowerPropertiesChanged(const QString &iface, const QVariantMap &changedProps, const QStringList &invalidatedProps)
130+{
131+ Q_UNUSED(iface)
132+ Q_UNUSED(invalidatedProps)
133+
134+ if (changedProps.contains("IconName")) {
135+ Q_EMIT batteryIconChanged();
136+ }
137+}
138+
139+QString Status::batteryIcon() const
140+{
141+ const QString iconName = m_upowerIface->property("IconName").toString();
142+ return iconName;
143+}
plugins/Wizard/Status.hnew file+60
@@ -0,0 +1,60 @@
1+/*
2+ * Copyright (C) 2015 Canonical Ltd.
3+ *
4+ * This program is free software: you can redistribute it and/or modify it
5+ * under the terms of the GNU General Public License version 3, as published
6+ * by the Free Software Foundation.
7+ *
8+ * This program is distributed in the hope that it will be useful, but
9+ * WITHOUT ANY WARRANTY; without even the implied warranties of
10+ * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11+ * PURPOSE. See the GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License along
14+ * with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef WIZARD_STATUS_H
18+#define WIZARD_STATUS_H
19+
20+#include <QObject>
21+#include <QString>
22+#include <QDBusInterface>
23+
24+class Status: public QObject
25+{
26+ Q_OBJECT
27+ Q_PROPERTY(bool online READ online NOTIFY onlineChanged)
28+ Q_PROPERTY(QString networkIcon READ networkIcon NOTIFY networkIconChanged)
29+ Q_PROPERTY(QString batteryIcon READ batteryIcon NOTIFY batteryIconChanged)
30+public:
31+ Status();
32+ ~Status() = default;
33+
34+ bool online() const;
35+ QString networkIcon();
36+
37+ QString batteryIcon() const;
38+
39+Q_SIGNALS:
40+ void networkIconChanged();
41+ void onlineChanged();
42+ void batteryIconChanged();
43+
44+private Q_SLOTS:
45+ void onNMPropertiesChanged(const QVariantMap &changedProps);
46+ void onUPowerPropertiesChanged(const QString &iface, const QVariantMap &changedProps, const QStringList &invalidatedProps);
47+
48+private:
49+ Q_DISABLE_COPY(Status)
50+
51+ // network status
52+ void initNM();
53+ QDBusInterface * m_nmIface = nullptr;
54+
55+ // battery status
56+ void initUPower();
57+ QDBusInterface * m_upowerIface = nullptr;
58+};
59+
60+#endif
plugins/Wizard/System.cpp+5−4
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2014 Canonical Ltd.
2+ * Copyright (C) 2014-2015 Canonical Ltd.
33 *
44 * This program is free software: you can redistribute it and/or modify it
55 * under the terms of the GNU General Public License version 3, as published
@@ -25,10 +25,10 @@
2525#include <QLocale>
2626#include <QMap>
2727#include <QProcess>
28+#include <QDebug>
2829
2930System::System()
30− : QObject(),
31− m_fsWatcher()
31+ : QObject()
3232{
3333 // Register the argument needed for UpdateActivationEnvironment below
3434 qDBusRegisterMetaType<QMap<QString,QString>>();
@@ -88,7 +88,7 @@ void System::setSessionVariable(const QString &variable, const QString &value)
8888 QDBusConnection::sessionBus().asyncCall(msg);
8989}
9090
91−void System::updateSessionLanguage(const QString &locale)
91+void System::updateSessionLocale(const QString &locale)
9292{
9393 const QString language = locale.split(QStringLiteral("."))[0];
9494
@@ -106,5 +106,6 @@ void System::updateSessionLanguage(const QString &locale)
106106 initctl stop smart-scopes-proxy; \
107107 initctl emit --no-wait indicator-services-start; \
108108 initctl restart --no-wait maliit-server; \
109+ initctl restart --no-wait indicator-messages; \
109110 initctl restart --no-wait unity8-dash\""));
110111}
plugins/Wizard/System.h+3−2
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2014 Canonical Ltd.
2+ * Copyright (C) 2014-2015 Canonical Ltd.
33 *
44 * This program is free software: you can redistribute it and/or modify it
55 * under the terms of the GNU General Public License version 3, as published
@@ -28,12 +28,13 @@ class System : public QObject
2828
2929public:
3030 System();
31+ ~System() = default;
3132
3233 bool wizardEnabled() const;
3334 void setWizardEnabled(bool enabled);
3435
3536public Q_SLOTS:
36− void updateSessionLanguage(const QString &locale);
37+ void updateSessionLocale(const QString &locale);
3738
3839Q_SIGNALS:
3940 void wizardEnabledChanged();
plugins/Wizard/plugin.cpp+7−8
@@ -17,19 +17,18 @@
1717#include "plugin.h"
1818#include "PageList.h"
1919#include "System.h"
20+#include "timezonemodel.h"
21+#include "LocalePlugin.h"
22+#include "Status.h"
2023
2124#include <QtQml/qqml.h>
2225
23−static QObject *system_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
24−{
25− Q_UNUSED(engine)
26− Q_UNUSED(scriptEngine)
27− return new System();
28−}
29−
3026void WizardPlugin::registerTypes(const char *uri)
3127{
3228 Q_ASSERT(uri == QLatin1String("Wizard"));
3329 qmlRegisterType<PageList>(uri, 0, 1, "PageList");
34− qmlRegisterSingletonType<System>(uri, 0, 1, "System", system_provider);
30+ qmlRegisterSingletonType<System>(uri, 0, 1, "System", [](QQmlEngine*, QJSEngine*) -> QObject* { return new System; });
31+ qmlRegisterSingletonType<Status>(uri, 0, 1, "Status", [](QQmlEngine*, QJSEngine*) -> QObject* { return new Status; });
32+ qmlRegisterType<TimeZoneLocationModel>(uri, 0, 1, "TimeZoneModel");
33+ qmlRegisterType<LocalePlugin>(uri, 0, 1, "LocalePlugin");
3534}
plugins/Wizard/plugin.h+1−2
@@ -17,13 +17,12 @@
1717#ifndef WIZARD_PLUGIN_H
1818#define WIZARD_PLUGIN_H
1919
20−#include <QtQml/QQmlEngine>
2120#include <QtQml/QQmlExtensionPlugin>
2221
2322class WizardPlugin : public QQmlExtensionPlugin
2423{
2524 Q_OBJECT
26− Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
25+ Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
2726
2827public:
2928 void registerTypes(const char *uri) override;
plugins/Wizard/timezonemodel.cppnew file+239
@@ -0,0 +1,239 @@
1+/*
2+ * Copyright (C) 2016 Canonical Ltd.
3+ *
4+ * This program is free software: you can redistribute it and/or modify it
5+ * under the terms of the GNU General Public License version 3, as published
6+ * by the Free Software Foundation.
7+ *
8+ * This program is distributed in the hope that it will be useful, but
9+ * WITHOUT ANY WARRANTY; without even the implied warranties of
10+ * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11+ * PURPOSE. See the GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License along
14+ * with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include <QDebug>
18+
19+#include <glib.h>
20+#include <glib-object.h>
21+
22+#include "LocalePlugin.h"
23+#include "timezonemodel.h"
24+
25+TimeZoneLocationModel::TimeZoneLocationModel(QObject *parent):
26+ QAbstractListModel(parent),
27+ m_listUpdating(false),
28+ m_cancellable(nullptr)
29+{
30+ m_roleNames[Qt::DisplayRole] = "displayName";
31+ m_roleNames[TimeZoneRole] = "timeZone";
32+ m_roleNames[CityRole] = "city";
33+ m_roleNames[CountryRole] = "country";
34+ m_roleNames[OffsetRole] = "offset";
35+ m_roleNames[LatitudeRole] = "latitude";
36+ m_roleNames[LongitudeRole] = "longitude";
37+}
38+
39+int TimeZoneLocationModel::rowCount(const QModelIndex &parent) const
40+{
41+ if (parent.isValid()) {
42+ return 0;
43+ } else if (m_filter.isEmpty()) {
44+ return m_countryLocations.count();
45+ } else {
46+ return m_locations.count();
47+ }
48+}
49+
50+QVariant TimeZoneLocationModel::data(const QModelIndex &index, int role) const
51+{
52+ GeonamesCity *city;
53+ if (m_filter.isEmpty()) {
54+ city = m_countryLocations.value(index.row());
55+ } else {
56+ city = m_locations.value(index.row());
57+ }
58+ if (!city)
59+ return QVariant();
60+
61+ switch (role) {
62+ case Qt::DisplayRole:
63+ return QStringLiteral("%1, %2, %3").arg(geonames_city_get_name(city))
64+ .arg(geonames_city_get_state(city))
65+ .arg(geonames_city_get_country(city));
66+ case SimpleRole:
67+ return QStringLiteral("%1, %2").arg(geonames_city_get_name(city))
68+ .arg(geonames_city_get_country(city));
69+ case TimeZoneRole:
70+ return geonames_city_get_timezone(city);
71+ case CountryRole:
72+ return geonames_city_get_country(city);
73+ case CityRole:
74+ return geonames_city_get_name(city);
75+ case OffsetRole: {
76+ QTimeZone tmp(geonames_city_get_timezone(city));
77+ return static_cast<double>(tmp.standardTimeOffset(QDateTime::currentDateTime())) / 3600;
78+ }
79+ case LatitudeRole:
80+ return geonames_city_get_latitude(city);
81+ case LongitudeRole:
82+ return geonames_city_get_longitude(city);
83+ default:
84+ qWarning() << Q_FUNC_INFO << "Unknown role";
85+ return QVariant();
86+ }
87+}
88+
89+QHash<int, QByteArray> TimeZoneLocationModel::roleNames() const
90+{
91+ return m_roleNames;
92+}
93+
94+void TimeZoneLocationModel::setModel(const QList<GeonamesCity *> &locations)
95+{
96+ beginResetModel();
97+
98+ Q_FOREACH(GeonamesCity *city, m_locations) {
99+ geonames_city_free(city);
100+ }
101+
102+ m_locations = locations;
103+ endResetModel();
104+}
105+
106+void TimeZoneLocationModel::filterFinished(GObject *source_object,
107+ GAsyncResult *res,
108+ gpointer user_data)
109+{
110+ Q_UNUSED(source_object);
111+
112+ g_autofree gint *cities = nullptr;
113+ guint cities_len = 0;
114+ g_autoptr(GError) error = nullptr;
115+
116+ cities = geonames_query_cities_finish(res, &cities_len, &error);
117+ if (error) {
118+ if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
119+ TimeZoneLocationModel *model = static_cast<TimeZoneLocationModel *>(user_data);
120+ g_clear_object(&model->m_cancellable);
121+ model->setListUpdating(false);
122+ qWarning() << "Could not filter timezones:" << error->message;
123+ }
124+ return;
125+ }
126+
127+ QList<GeonamesCity *> locations;
128+
129+ for (guint i = 0; i < cities_len; ++i) {
130+ GeonamesCity *city = geonames_get_city(cities[i]);
131+ if (city) {
132+ locations.append(city);
133+ }
134+ }
135+
136+ TimeZoneLocationModel *model = static_cast<TimeZoneLocationModel *>(user_data);
137+
138+ g_clear_object(&model->m_cancellable);
139+
140+ model->setModel(locations);
141+ model->setListUpdating(false);
142+}
143+
144+bool TimeZoneLocationModel::listUpdating() const
145+{
146+ return m_listUpdating;
147+}
148+
149+void TimeZoneLocationModel::setListUpdating(bool listUpdating)
150+{
151+ if (m_listUpdating != listUpdating) {
152+ m_listUpdating = listUpdating;
153+ Q_EMIT listUpdatingChanged();
154+ }
155+}
156+
157+QString TimeZoneLocationModel::filter() const
158+{
159+ return m_filter;
160+}
161+
162+void TimeZoneLocationModel::setFilter(const QString &filter)
163+{
164+ if (filter != m_filter) {
165+ m_filter = filter;
166+ Q_EMIT filterChanged();
167+ }
168+
169+ setListUpdating(true);
170+
171+ if (m_cancellable) {
172+ g_cancellable_cancel(m_cancellable);
173+ g_clear_object(&m_cancellable);
174+ }
175+
176+ setModel(QList<GeonamesCity *>());
177+
178+ if (filter.isEmpty()) {
179+ setListUpdating(false);
180+ return;
181+ }
182+
183+ m_cancellable = g_cancellable_new();
184+ geonames_query_cities(filter.toUtf8().data(),
185+ GEONAMES_QUERY_DEFAULT,
186+ m_cancellable,
187+ filterFinished,
188+ this);
189+}
190+
191+QString TimeZoneLocationModel::country() const
192+{
193+ return m_country;
194+}
195+
196+static bool citycmp(GeonamesCity *a, GeonamesCity *b)
197+{
198+ return geonames_city_get_population(b) < geonames_city_get_population(a);
199+}
200+
201+void TimeZoneLocationModel::setCountry(const QString &country)
202+{
203+ if (m_country == country)
204+ return;
205+
206+ m_country = country;
207+
208+ Q_FOREACH(GeonamesCity *city, m_countryLocations) {
209+ geonames_city_free(city);
210+ }
211+
212+ gint num_cities = geonames_get_n_cities();
213+ for (gint i = 0; i < num_cities; i++) {
214+ GeonamesCity *city = geonames_get_city(i);
215+ if (city && m_country == geonames_city_get_country_code(city)) {
216+ m_countryLocations.append(city);
217+ }
218+ }
219+
220+ std::sort(m_countryLocations.begin(), m_countryLocations.end(), citycmp);
221+
222+ Q_EMIT countryChanged(country);
223+}
224+
225+TimeZoneLocationModel::~TimeZoneLocationModel()
226+{
227+ if (m_cancellable) {
228+ g_cancellable_cancel(m_cancellable);
229+ g_clear_object(&m_cancellable);
230+ }
231+
232+ Q_FOREACH(GeonamesCity *city, m_countryLocations) {
233+ geonames_city_free(city);
234+ }
235+
236+ Q_FOREACH(GeonamesCity *city, m_locations) {
237+ geonames_city_free(city);
238+ }
239+}
plugins/Wizard/timezonemodel.hnew file+80
@@ -0,0 +1,80 @@
1+/*
2+ * Copyright (C) 2016 Canonical Ltd.
3+ *
4+ * This program is free software: you can redistribute it and/or modify it
5+ * under the terms of the GNU General Public License version 3, as published
6+ * by the Free Software Foundation.
7+ *
8+ * This program is distributed in the hope that it will be useful, but
9+ * WITHOUT ANY WARRANTY; without even the implied warranties of
10+ * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11+ * PURPOSE. See the GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License along
14+ * with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef TIMEZONEMODEL_H
18+#define TIMEZONEMODEL_H
19+
20+#include <geonames.h>
21+#include <glib.h>
22+#include <QAbstractListModel>
23+
24+class TimeZoneLocationModel: public QAbstractListModel
25+{
26+ Q_OBJECT
27+ Q_PROPERTY(bool listUpdating READ listUpdating NOTIFY listUpdatingChanged)
28+ Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged)
29+ Q_PROPERTY(QString country READ country WRITE setCountry NOTIFY countryChanged)
30+ Q_ENUMS(Roles)
31+
32+public:
33+ explicit TimeZoneLocationModel(QObject *parent = nullptr);
34+ ~TimeZoneLocationModel();
35+
36+ enum Roles {
37+ TimeZoneRole = Qt::UserRole + 1,
38+ CityRole,
39+ CountryRole,
40+ SimpleRole,
41+ OffsetRole,
42+ LatitudeRole,
43+ LongitudeRole
44+ };
45+
46+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
47+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
48+ QHash<int, QByteArray> roleNames() const override;
49+
50+ bool listUpdating() const;
51+
52+ QString filter() const;
53+ void setFilter(const QString &filter);
54+
55+ QString country() const;
56+ void setCountry(const QString &country);
57+
58+Q_SIGNALS:
59+ void listUpdatingChanged();
60+ void filterChanged();
61+ void countryChanged(const QString &country);
62+
63+private:
64+ void setModel(const QList<GeonamesCity *> &locations);
65+ void setListUpdating(bool listUpdating);
66+ static void filterFinished(GObject *source_object,
67+ GAsyncResult *res,
68+ gpointer user_data);
69+
70+
71+ bool m_listUpdating;
72+ QString m_filter;
73+ QString m_country;
74+ GCancellable *m_cancellable;
75+ QHash<int, QByteArray> m_roleNames;
76+ QList<GeonamesCity *> m_locations;
77+ QList<GeonamesCity *> m_countryLocations;
78+};
79+
80+#endif
po/aa.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2016-02-12 10:18+0000\n"
1212"Last-Translator: Charif AYFARAH <ayfarah@ymail.com>\n"
1313"Language-Team: Afar <aa@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:36+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:57+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr "Inkih alif"
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr ""
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr "Goranto"
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr "Massosu"
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr ""
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr ""
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr ""
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr ""
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr "Goranto"
@@ -416,14 +416,6 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr ""
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr ""
426−
427419#: qml/Tutorial/TutorialBottom.qml:28
428420msgid "Open special menus"
429421msgstr ""
po/am.po+20−22
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-11-19 19:27+0000\n"
1212"Last-Translator: samson <Unknown>\n"
1313"Language-Team: Amharic <am@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:36+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:57+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -173,38 +173,38 @@ msgstr "አሁን እንደገና መገናኛ!"
173173msgid "Close all"
174174msgstr "ሁሉንም መዝጊያ"
175175
176−#: qml/Dash/DashPageHeader.qml:266
176+#: qml/Dash/DashPageHeader.qml:270
177177msgctxt "Button: Open the Ubuntu Store"
178178msgid "Store"
179179msgstr "ማስቀመጫ"
180180
181−#: qml/Dash/DashPageHeader.qml:273
181+#: qml/Dash/DashPageHeader.qml:277
182182msgctxt "Button: Start a search in the current dash scope"
183183msgid "Search"
184184msgstr "መፈለጊያ"
185185
186−#: qml/Dash/DashPageHeader.qml:283
186+#: qml/Dash/DashPageHeader.qml:287
187187msgctxt "Button: Show the current dash scope settings"
188188msgid "Settings"
189189msgstr "ማሰናጃዎች"
190190
191−#: qml/Dash/DashPageHeader.qml:290
191+#: qml/Dash/DashPageHeader.qml:294
192192msgid "Remove from Favorites"
193193msgstr "ከምወዳቸው ማስወገጃ"
194194
195−#: qml/Dash/DashPageHeader.qml:290
195+#: qml/Dash/DashPageHeader.qml:294
196196msgid "Add to Favorites"
197197msgstr "ወደምወዳቸው መጨመሪያ"
198198
199−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
199+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
200200msgid "See less"
201201msgstr "አነስተኛ መመልከቻ"
202202
203−#: qml/Dash/GenericScopeView.qml:587
203+#: qml/Dash/GenericScopeView.qml:565
204204msgid "See all"
205205msgstr "ሁሉንም መመልከቻ"
206206
207−#: qml/Dash/GenericScopeView.qml:649
207+#: qml/Dash/GenericScopeView.qml:627
208208msgctxt "Label: Hint for dash search line edit"
209209msgid "Search"
210210msgstr "መፈለጊያ"
@@ -423,14 +423,6 @@ msgctxt "Button: Call back on phone"
423423msgid "Call back"
424424msgstr "መልሶ መደወያ"
425425
426−#: qml/Panel/Indicators/ModemInfoItem.qml:105
427−msgid "Unlock SIM"
428−msgstr "ሲም መክፈቻ"
429−
430−#: qml/Panel/Indicators/RoamingIndication.qml:27
431−msgid "Roaming"
432−msgstr "ማዘዋወሪያ"
433−
434426#: qml/Tutorial/TutorialBottom.qml:28
435427msgid "Open special menus"
436428msgstr "የተለዩ ዝርዝሮች መክፈቻ"
@@ -495,7 +487,7 @@ msgstr "ሰላም"
495487
496488#: qml/Wizard/Pages/10-welcome.qml:44
497489msgid "Welcome to your Ubuntu device."
498−msgstr ""
490+msgstr "እንኳን ድህና መጡ ወደ ኡቡንቱ"
499491
500492#: qml/Wizard/Pages/10-welcome.qml:52
501493msgid "Let’s get started."
@@ -526,7 +518,7 @@ msgstr "ደህንነት መቆለፊያ"
526518
527519#: qml/Wizard/Pages/30-passwd-type.qml:79
528520msgid "Please select how you’d like to unlock your device."
529−msgstr ""
521+msgstr "እባክዎን የ እርስዎን አካል እንዴት እንደሚከፈት ይምረጡ"
530522
531523#: qml/Wizard/Pages/30-passwd-type.qml:102
532524msgctxt "Label: Type of security method"
@@ -630,7 +622,7 @@ msgstr "ጥሩ ሰርተዋል!"
630622
631623#: qml/Wizard/Pages/80-finished.qml:46
632624msgid "Your device is now ready to use."
633−msgstr ""
625+msgstr "የ እርስዎ አካል አሁን ዝግጁ ነው"
634626
635627#: qml/Wizard/Pages/80-finished.qml:53
636628msgid "Finish"
@@ -751,12 +743,18 @@ msgstr "%1 〉"
751743#~ msgid "Settings"
752744#~ msgstr "ማሰናጃ"
753745
746+#~ msgid "Unlock SIM"
747+#~ msgstr "ሲም መክፈቻ"
748+
754749#~ msgid ""
755750#~ "You have now mastered the edge gestures and can start using the "
756751#~ "phone<br><br>Tap on the screen to start"
757752#~ msgstr ""
758753#~ "አሁን የ ጠርዝ እንቅስቃሴን አውቀዋል እና መጀመር ይችላሉ ስልኩን መጠቀም <br><br>መመልከቻውን መታ ያድርጉ ለመጀመር"
759754
755+#~ msgid "Roaming"
756+#~ msgstr "ማዘዋወሪያ"
757+
760758#~ msgid "Restart"
761759#~ msgstr "እንደገና ማስጀመሪያ"
762760
po/ar.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-07-29 09:41+0000\n"
1212"Last-Translator: Ibrahim Saed <ibraheem5000@gmail.com>\n"
1313"Language-Team: Arabic <ar@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= "
1818"3 && n % 100 <= 10 ? 3 : n % 100 >= 11 && n % 100 <= 99 ? 4 : 5;\n"
19−"X-Launchpad-Export-Date: 2016-02-16 05:36+0000\n"
20−"X-Generator: Launchpad (build 17925)\n"
19+"X-Launchpad-Export-Date: 2016-03-10 05:57+0000\n"
20+"X-Generator: Launchpad (build 17936)\n"
2121
2222#: plugins/IntegratedLightDM/Greeter.cpp:112
2323msgid "Password: "
@@ -180,38 +180,38 @@ msgstr ""
180180msgid "Close all"
181181msgstr ""
182182
183−#: qml/Dash/DashPageHeader.qml:266
183+#: qml/Dash/DashPageHeader.qml:270
184184msgctxt "Button: Open the Ubuntu Store"
185185msgid "Store"
186186msgstr "المتجر"
187187
188−#: qml/Dash/DashPageHeader.qml:273
188+#: qml/Dash/DashPageHeader.qml:277
189189msgctxt "Button: Start a search in the current dash scope"
190190msgid "Search"
191191msgstr "بحث"
192192
193−#: qml/Dash/DashPageHeader.qml:283
193+#: qml/Dash/DashPageHeader.qml:287
194194msgctxt "Button: Show the current dash scope settings"
195195msgid "Settings"
196196msgstr "الإعدادات"
197197
198−#: qml/Dash/DashPageHeader.qml:290
198+#: qml/Dash/DashPageHeader.qml:294
199199msgid "Remove from Favorites"
200200msgstr "حذف من المفضلات"
201201
202−#: qml/Dash/DashPageHeader.qml:290
202+#: qml/Dash/DashPageHeader.qml:294
203203msgid "Add to Favorites"
204204msgstr "إضافة إلى المفضلات"
205205
206−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
206+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
207207msgid "See less"
208208msgstr "شاهد أقل"
209209
210−#: qml/Dash/GenericScopeView.qml:587
210+#: qml/Dash/GenericScopeView.qml:565
211211msgid "See all"
212212msgstr "عرض الكل"
213213
214−#: qml/Dash/GenericScopeView.qml:649
214+#: qml/Dash/GenericScopeView.qml:627
215215msgctxt "Label: Hint for dash search line edit"
216216msgid "Search"
217217msgstr "بحث"
@@ -441,14 +441,6 @@ msgctxt "Button: Call back on phone"
441441msgid "Call back"
442442msgstr ""
443443
444−#: qml/Panel/Indicators/ModemInfoItem.qml:105
445−msgid "Unlock SIM"
446−msgstr "فتح قفل بطاقة SIM"
447−
448−#: qml/Panel/Indicators/RoamingIndication.qml:27
449−msgid "Roaming"
450−msgstr "التجوال"
451−
452444#: qml/Tutorial/TutorialBottom.qml:28
453445msgid "Open special menus"
454446msgstr "فتح قوائم خاصة"
@@ -786,6 +778,9 @@ msgstr ""
786778#~ msgid "Please re-enter"
787779#~ msgstr "برجاء إعادة إدخالها"
788780
781+#~ msgid "Roaming"
782+#~ msgstr "التجوال"
783+
789784#~ msgid "Welcome to your Ubuntu phone."
790785#~ msgstr "مرحبا بك في أوبونتو للهواتف."
791786
@@ -794,3 +789,6 @@ msgstr ""
794789
795790#~ msgid "Your phone is now ready to use."
796791#~ msgstr "هاتفك جاهز الآن للاستخدام."
792+
793+#~ msgid "Unlock SIM"
794+#~ msgstr "فتح قفل بطاقة SIM"
po/ast.po+28−28
@@ -7,16 +7,16 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-02-12 00:28+0000\n"
11−"PO-Revision-Date: 2015-10-06 12:07+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
11+"PO-Revision-Date: 2016-02-19 19:39+0000\n"
1212"Last-Translator: Xuacu Saturio <xuacusk8@gmail.com>\n"
1313"Language-Team: Asturian <ast@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: 2016-02-16 05:36+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:57+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -152,60 +152,62 @@ msgstr "Aceutar"
152152
153153#: qml/Components/ModeSwitchWarningDialog.qml:32
154154msgid "Apps may have unsaved data:"
155−msgstr ""
155+msgstr "Apps que pueden tener datos sin guardar:"
156156
157157#: qml/Components/ModeSwitchWarningDialog.qml:57
158158msgid "Re-dock, save your work and close these apps to continue."
159159msgstr ""
160+"Pa siguir coneuta nuevamente'l preséu, guarda'l trabayu y zarra estes "
161+"aplicaciones."
160162
161163#: qml/Components/ModeSwitchWarningDialog.qml:63
162164msgid "Or force close now (unsaved data will be lost)."
163−msgstr ""
165+msgstr "O fuerza salir agora (perderás tolos datos sin guardar)."
164166
165167#: qml/Components/ModeSwitchWarningDialog.qml:75
166168msgid "OK, I will reconnect"
167−msgstr ""
169+msgstr "D'alcuerdu, reconeutaré"
168170
169171#: qml/Components/ModeSwitchWarningDialog.qml:76
170172msgid "Reconnect now!"
171−msgstr ""
173+msgstr "Reconeutar agora."
172174
173175#: qml/Components/ModeSwitchWarningDialog.qml:88
174176msgid "Close all"
175−msgstr ""
177+msgstr "Zarrar too"
176178
177−#: qml/Dash/DashPageHeader.qml:266
179+#: qml/Dash/DashPageHeader.qml:270
178180msgctxt "Button: Open the Ubuntu Store"
179181msgid "Store"
180182msgstr "Tienda"
181183
182−#: qml/Dash/DashPageHeader.qml:273
184+#: qml/Dash/DashPageHeader.qml:277
183185msgctxt "Button: Start a search in the current dash scope"
184186msgid "Search"
185187msgstr "Guetar"
186188
187−#: qml/Dash/DashPageHeader.qml:283
189+#: qml/Dash/DashPageHeader.qml:287
188190msgctxt "Button: Show the current dash scope settings"
189191msgid "Settings"
190192msgstr "Axustes"
191193
192−#: qml/Dash/DashPageHeader.qml:290
194+#: qml/Dash/DashPageHeader.qml:294
193195msgid "Remove from Favorites"
194196msgstr "Desaniciar de favoritos"
195197
196−#: qml/Dash/DashPageHeader.qml:290
198+#: qml/Dash/DashPageHeader.qml:294
197199msgid "Add to Favorites"
198200msgstr "Amestar a favoritos"
199201
200−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
202+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
201203msgid "See less"
202204msgstr "Ver menos"
203205
204−#: qml/Dash/GenericScopeView.qml:587
206+#: qml/Dash/GenericScopeView.qml:565
205207msgid "See all"
206208msgstr "Ver too"
207209
208−#: qml/Dash/GenericScopeView.qml:649
210+#: qml/Dash/GenericScopeView.qml:627
209211msgctxt "Label: Hint for dash search line edit"
210212msgid "Search"
211213msgstr "Guetar"
@@ -233,7 +235,7 @@ msgstr "Amestar una reseña"
233235
234236#: qml/Dash/Previews/PreviewSharing.qml:50
235237msgid "Preview Share Item"
236−msgstr ""
238+msgstr "Entever l'elementu compartíu"
237239
238240#: qml/Dash/PullToRefreshScopeStyle.qml:55
239241msgid "Pull to refresh…"
@@ -411,7 +413,7 @@ msgstr "Falló, toca pa reintentar"
411413#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
412414msgctxt "Button: Send a reply message"
413415msgid "Send"
414−msgstr ""
416+msgstr "Unviar"
415417
416418#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
417419msgctxt "Label: Hint in message indicator line edit"
@@ -421,15 +423,7 @@ msgstr "Responder"
421423#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
422424msgctxt "Button: Call back on phone"
423425msgid "Call back"
424−msgstr ""
425−
426−#: qml/Panel/Indicators/ModemInfoItem.qml:105
427−msgid "Unlock SIM"
428−msgstr "Desbloquiar SIM"
429−
430−#: qml/Panel/Indicators/RoamingIndication.qml:27
431−msgid "Roaming"
432−msgstr "Roaming"
426+msgstr "Devolver llamada"
433427
434428#: qml/Tutorial/TutorialBottom.qml:28
435429msgid "Open special menus"
@@ -761,9 +755,15 @@ msgstr "%1 〉"
761755#~ msgid "All"
762756#~ msgstr "Too"
763757
758+#~ msgid "Unlock SIM"
759+#~ msgstr "Desbloquiar SIM"
760+
764761#~ msgid "Store"
765762#~ msgstr "Tienda"
766763
764+#~ msgid "Roaming"
765+#~ msgstr "Roaming"
766+
767767#~ msgid "Restart"
768768#~ msgstr "Reaniciar"
769769
po/az.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2014-09-03 16:39+0000\n"
1212"Last-Translator: Nicat Məmmədov <n1c4t97@gmail.com>\n"
1313"Language-Team: Azerbaijani <az@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:36+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:57+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr ""
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr ""
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr ""
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr "Seçilmişlәrdәn çıxart"
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr "Seçilmişlәrә әlavә et"
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr "Daha azını gör"
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr "Hamısını gör"
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr ""
@@ -420,14 +420,6 @@ msgctxt "Button: Call back on phone"
420420msgid "Call back"
421421msgstr ""
422422
423−#: qml/Panel/Indicators/ModemInfoItem.qml:105
424−msgid "Unlock SIM"
425−msgstr "SIM kilidini aç"
426−
427−#: qml/Panel/Indicators/RoamingIndication.qml:27
428−msgid "Roaming"
429−msgstr "Rominq"
430−
431423#: qml/Tutorial/TutorialBottom.qml:28
432424msgid "Open special menus"
433425msgstr ""
@@ -713,6 +705,12 @@ msgstr ""
713705#~ msgid "Done"
714706#~ msgstr "Başa çatdı"
715707
708+#~ msgid "Unlock SIM"
709+#~ msgstr "SIM kilidini aç"
710+
711+#~ msgid "Roaming"
712+#~ msgstr "Rominq"
713+
716714#~ msgid "Log out"
717715#~ msgstr "Çıxış"
718716
po/be.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-12-13 13:12+0000\n"
1212"Last-Translator: Mikhail_SaTuRn <mikhail_saturn@tut.by>\n"
1313"Language-Team: Belarusian <be@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
19−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
20−"X-Generator: Launchpad (build 17925)\n"
19+"X-Launchpad-Export-Date: 2016-03-10 05:57+0000\n"
20+"X-Generator: Launchpad (build 17936)\n"
2121
2222#: plugins/IntegratedLightDM/Greeter.cpp:112
2323msgid "Password: "
@@ -178,38 +178,38 @@ msgstr "Перападлучыцца зараз!"
178178msgid "Close all"
179179msgstr "Зачыніць усё"
180180
181−#: qml/Dash/DashPageHeader.qml:266
181+#: qml/Dash/DashPageHeader.qml:270
182182msgctxt "Button: Open the Ubuntu Store"
183183msgid "Store"
184184msgstr "Крама"
185185
186−#: qml/Dash/DashPageHeader.qml:273
186+#: qml/Dash/DashPageHeader.qml:277
187187msgctxt "Button: Start a search in the current dash scope"
188188msgid "Search"
189189msgstr "Пошук"
190190
191−#: qml/Dash/DashPageHeader.qml:283
191+#: qml/Dash/DashPageHeader.qml:287
192192msgctxt "Button: Show the current dash scope settings"
193193msgid "Settings"
194194msgstr "Налады"
195195
196−#: qml/Dash/DashPageHeader.qml:290
196+#: qml/Dash/DashPageHeader.qml:294
197197msgid "Remove from Favorites"
198198msgstr "Выдаліць з абранага"
199199
200−#: qml/Dash/DashPageHeader.qml:290
200+#: qml/Dash/DashPageHeader.qml:294
201201msgid "Add to Favorites"
202202msgstr "Дадаць да абранага"
203203
204−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
204+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
205205msgid "See less"
206206msgstr "Карацей"
207207
208−#: qml/Dash/GenericScopeView.qml:587
208+#: qml/Dash/GenericScopeView.qml:565
209209msgid "See all"
210210msgstr "Больш падрабязна"
211211
212−#: qml/Dash/GenericScopeView.qml:649
212+#: qml/Dash/GenericScopeView.qml:627
213213msgctxt "Label: Hint for dash search line edit"
214214msgid "Search"
215215msgstr "Пошук"
@@ -430,14 +430,6 @@ msgctxt "Button: Call back on phone"
430430msgid "Call back"
431431msgstr "Патэлефанаваць"
432432
433−#: qml/Panel/Indicators/ModemInfoItem.qml:105
434−msgid "Unlock SIM"
435−msgstr "Разблакаваць SIM"
436−
437−#: qml/Panel/Indicators/RoamingIndication.qml:27
438−msgid "Roaming"
439−msgstr "Роўмінг"
440−
441433#: qml/Tutorial/TutorialBottom.qml:28
442434msgid "Open special menus"
443435msgstr "Адкрыць спецыяльныя меню"
@@ -705,6 +697,12 @@ msgstr "%1 〉"
705697#~ msgid "Confirm"
706698#~ msgstr "Пацвердзіць"
707699
700+#~ msgid "Unlock SIM"
701+#~ msgstr "Разблакаваць SIM"
702+
703+#~ msgid "Roaming"
704+#~ msgstr "Роўмінг"
705+
708706#~ msgid "Try swiping from the right edge to unlock the phone"
709707#~ msgstr "Правядзіце пальцам з правага краю, каб разблакаваць тэлефон"
710708
po/bg.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-04-12 14:43+0000\n"
1212"Last-Translator: George Karavasilev <kokoto-java@ubuntu.com>\n"
1313"Language-Team: Bulgarian <bg@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -173,38 +173,38 @@ msgstr ""
173173msgid "Close all"
174174msgstr ""
175175
176−#: qml/Dash/DashPageHeader.qml:266
176+#: qml/Dash/DashPageHeader.qml:270
177177msgctxt "Button: Open the Ubuntu Store"
178178msgid "Store"
179179msgstr ""
180180
181−#: qml/Dash/DashPageHeader.qml:273
181+#: qml/Dash/DashPageHeader.qml:277
182182msgctxt "Button: Start a search in the current dash scope"
183183msgid "Search"
184184msgstr ""
185185
186−#: qml/Dash/DashPageHeader.qml:283
186+#: qml/Dash/DashPageHeader.qml:287
187187msgctxt "Button: Show the current dash scope settings"
188188msgid "Settings"
189189msgstr ""
190190
191−#: qml/Dash/DashPageHeader.qml:290
191+#: qml/Dash/DashPageHeader.qml:294
192192msgid "Remove from Favorites"
193193msgstr ""
194194
195−#: qml/Dash/DashPageHeader.qml:290
195+#: qml/Dash/DashPageHeader.qml:294
196196msgid "Add to Favorites"
197197msgstr ""
198198
199−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
199+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
200200msgid "See less"
201201msgstr ""
202202
203−#: qml/Dash/GenericScopeView.qml:587
203+#: qml/Dash/GenericScopeView.qml:565
204204msgid "See all"
205205msgstr ""
206206
207−#: qml/Dash/GenericScopeView.qml:649
207+#: qml/Dash/GenericScopeView.qml:627
208208msgctxt "Label: Hint for dash search line edit"
209209msgid "Search"
210210msgstr ""
@@ -418,14 +418,6 @@ msgctxt "Button: Call back on phone"
418418msgid "Call back"
419419msgstr ""
420420
421−#: qml/Panel/Indicators/ModemInfoItem.qml:105
422−msgid "Unlock SIM"
423−msgstr ""
424−
425−#: qml/Panel/Indicators/RoamingIndication.qml:27
426−msgid "Roaming"
427−msgstr ""
428−
429421#: qml/Tutorial/TutorialBottom.qml:28
430422msgid "Open special menus"
431423msgstr ""
po/bn.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-11-27 19:38+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Bengali <bn@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:57+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -173,38 +173,38 @@ msgstr ""
173173msgid "Close all"
174174msgstr ""
175175
176−#: qml/Dash/DashPageHeader.qml:266
176+#: qml/Dash/DashPageHeader.qml:270
177177msgctxt "Button: Open the Ubuntu Store"
178178msgid "Store"
179179msgstr "স্টোর"
180180
181−#: qml/Dash/DashPageHeader.qml:273
181+#: qml/Dash/DashPageHeader.qml:277
182182msgctxt "Button: Start a search in the current dash scope"
183183msgid "Search"
184184msgstr "খুঁজুন"
185185
186−#: qml/Dash/DashPageHeader.qml:283
186+#: qml/Dash/DashPageHeader.qml:287
187187msgctxt "Button: Show the current dash scope settings"
188188msgid "Settings"
189189msgstr "সেটিংস"
190190
191−#: qml/Dash/DashPageHeader.qml:290
191+#: qml/Dash/DashPageHeader.qml:294
192192msgid "Remove from Favorites"
193193msgstr "পছন্দ থেকে মুছে ফেলুন"
194194
195−#: qml/Dash/DashPageHeader.qml:290
195+#: qml/Dash/DashPageHeader.qml:294
196196msgid "Add to Favorites"
197197msgstr "পছন্দতে যোগ করুন"
198198
199−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
199+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
200200msgid "See less"
201201msgstr "কম দেখুন"
202202
203−#: qml/Dash/GenericScopeView.qml:587
203+#: qml/Dash/GenericScopeView.qml:565
204204msgid "See all"
205205msgstr "সব দেখুন"
206206
207−#: qml/Dash/GenericScopeView.qml:649
207+#: qml/Dash/GenericScopeView.qml:627
208208msgctxt "Label: Hint for dash search line edit"
209209msgid "Search"
210210msgstr "খুঁজুন"
@@ -419,14 +419,6 @@ msgctxt "Button: Call back on phone"
419419msgid "Call back"
420420msgstr "কল ব্যাক"
421421
422−#: qml/Panel/Indicators/ModemInfoItem.qml:105
423−msgid "Unlock SIM"
424−msgstr "সিম লক খুলুন করুন"
425−
426−#: qml/Panel/Indicators/RoamingIndication.qml:27
427−msgid "Roaming"
428−msgstr "রোমিং"
429−
430422#: qml/Tutorial/TutorialBottom.qml:28
431423msgid "Open special menus"
432424msgstr ""
@@ -726,6 +718,12 @@ msgstr ""
726718#~ msgid "Speak Now..."
727719#~ msgstr "এখন বলুন..."
728720
721+#~ msgid "Unlock SIM"
722+#~ msgstr "সিম লক খুলুন করুন"
723+
724+#~ msgid "Roaming"
725+#~ msgstr "রোমিং"
726+
729727#~ msgid "Please re-enter"
730728#~ msgstr "অনুগ্রহ করে আবার লিখুন"
731729
po/br.po+32−30
@@ -7,16 +7,16 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-02-12 00:28+0000\n"
11−"PO-Revision-Date: 2015-10-05 06:47+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
11+"PO-Revision-Date: 2016-02-22 12:29+0000\n"
1212"Last-Translator: Fohanno Thierry <thierry.fohanno@ofis-bzh.org>\n"
1313"Language-Team: Breton <br@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:57+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -155,60 +155,62 @@ msgstr "Mat eo"
155155
156156#: qml/Components/ModeSwitchWarningDialog.qml:32
157157msgid "Apps may have unsaved data:"
158−msgstr ""
158+msgstr "Roadennoù ha n'int ket enrollet a c'hall bezañ gant an arloadoù :"
159159
160160#: qml/Components/ModeSwitchWarningDialog.qml:57
161161msgid "Re-dock, save your work and close these apps to continue."
162162msgstr ""
163+"Adlugit, enrollit ho labour ha serrit an arloadoù-mañ evit kenderc'hel."
163164
164165#: qml/Components/ModeSwitchWarningDialog.qml:63
165166msgid "Or force close now (unsaved data will be lost)."
166167msgstr ""
168+"Pe rediañ da serriñ bremañ (kollet e vo ar roadennoù n'int ket bet enrollet)."
167169
168170#: qml/Components/ModeSwitchWarningDialog.qml:75
169171msgid "OK, I will reconnect"
170−msgstr ""
172+msgstr "Mat eo, ez an da adkevreañ"
171173
172174#: qml/Components/ModeSwitchWarningDialog.qml:76
173175msgid "Reconnect now!"
174−msgstr ""
176+msgstr "Adkevreañ bremañ !"
175177
176178#: qml/Components/ModeSwitchWarningDialog.qml:88
177179msgid "Close all"
178−msgstr ""
180+msgstr "Serriñ pep tra"
179181
180−#: qml/Dash/DashPageHeader.qml:266
182+#: qml/Dash/DashPageHeader.qml:270
181183msgctxt "Button: Open the Ubuntu Store"
182184msgid "Store"
183185msgstr "Stal"
184186
185−#: qml/Dash/DashPageHeader.qml:273
187+#: qml/Dash/DashPageHeader.qml:277
186188msgctxt "Button: Start a search in the current dash scope"
187189msgid "Search"
188190msgstr "Klask"
189191
190−#: qml/Dash/DashPageHeader.qml:283
192+#: qml/Dash/DashPageHeader.qml:287
191193msgctxt "Button: Show the current dash scope settings"
192194msgid "Settings"
193195msgstr "Arventennoù"
194196
195−#: qml/Dash/DashPageHeader.qml:290
197+#: qml/Dash/DashPageHeader.qml:294
196198msgid "Remove from Favorites"
197199msgstr "Lemel eus ar sinedoù"
198200
199−#: qml/Dash/DashPageHeader.qml:290
201+#: qml/Dash/DashPageHeader.qml:294
200202msgid "Add to Favorites"
201203msgstr "Ouzhpennañ d'ar sinedoù"
202204
203−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
205+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
204206msgid "See less"
205207msgstr "Gwelet nebeutoc'h"
206208
207−#: qml/Dash/GenericScopeView.qml:587
209+#: qml/Dash/GenericScopeView.qml:565
208210msgid "See all"
209211msgstr "Gwelet pep tra"
210212
211−#: qml/Dash/GenericScopeView.qml:649
213+#: qml/Dash/GenericScopeView.qml:627
212214msgctxt "Label: Hint for dash search line edit"
213215msgid "Search"
214216msgstr "Klask"
@@ -236,7 +238,7 @@ msgstr "Ouzhpennañ un ali"
236238
237239#: qml/Dash/Previews/PreviewSharing.qml:50
238240msgid "Preview Share Item"
239−msgstr ""
241+msgstr "Rakwelet an elfenn lodet"
240242
241243#: qml/Dash/PullToRefreshScopeStyle.qml:55
242244msgid "Pull to refresh…"
@@ -267,6 +269,8 @@ msgid ""
267269"Your device is now connected to an external display. Use this screen as a "
268270"touch pad to interact with the mouse."
269271msgstr ""
272+"N'eo ket kevreet ho penveg ouzh un diskwel diavaez. Implijit ar skramm-mañ "
273+"da douch evit ober gant al logodenn."
270274
271275#: qml/Greeter/CoverPage.qml:107
272276msgid "Unlock"
@@ -414,7 +418,7 @@ msgstr "C'hwitet, touchit evit adkregiñ"
414418#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
415419msgctxt "Button: Send a reply message"
416420msgid "Send"
417−msgstr ""
421+msgstr "Kas"
418422
419423#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
420424msgctxt "Label: Hint in message indicator line edit"
@@ -424,15 +428,7 @@ msgstr "Respont"
424428#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
425429msgctxt "Button: Call back on phone"
426430msgid "Call back"
427−msgstr ""
428−
429−#: qml/Panel/Indicators/ModemInfoItem.qml:105
430−msgid "Unlock SIM"
431−msgstr "Dibrennañ ar gartenn SIM"
432−
433−#: qml/Panel/Indicators/RoamingIndication.qml:27
434−msgid "Roaming"
435−msgstr "O kantren"
431+msgstr "Gervel en-dro"
436432
437433#: qml/Tutorial/TutorialBottom.qml:28
438434msgid "Open special menus"
@@ -498,7 +494,7 @@ msgstr "Salud deoc'h !"
498494
499495#: qml/Wizard/Pages/10-welcome.qml:44
500496msgid "Welcome to your Ubuntu device."
501−msgstr ""
497+msgstr "Donemat en ho penveg Ubuntu"
502498
503499#: qml/Wizard/Pages/10-welcome.qml:52
504500msgid "Let’s get started."
@@ -529,7 +525,7 @@ msgstr "Surentez ar prennañ"
529525
530526#: qml/Wizard/Pages/30-passwd-type.qml:79
531527msgid "Please select how you’d like to unlock your device."
532−msgstr ""
528+msgstr "Diuzit penaos e fell deoc'h dibrennañ ho penveg, mar plij."
533529
534530#: qml/Wizard/Pages/30-passwd-type.qml:102
535531msgctxt "Label: Type of security method"
@@ -637,7 +633,7 @@ msgstr "Gwellat labour !"
637633
638634#: qml/Wizard/Pages/80-finished.qml:46
639635msgid "Your device is now ready to use."
640−msgstr ""
636+msgstr "Prest eo ho penveg da vezañ implijet bremañ."
641637
642638#: qml/Wizard/Pages/80-finished.qml:53
643639msgid "Finish"
@@ -752,6 +748,12 @@ msgstr "%1 〉"
752748#~ msgid "All"
753749#~ msgstr "An holl anezho"
754750
751+#~ msgid "Unlock SIM"
752+#~ msgstr "Dibrennañ ar gartenn SIM"
753+
754+#~ msgid "Roaming"
755+#~ msgstr "O kantren"
756+
755757#~ msgid "Favorites"
756758#~ msgstr "Gwellañ deuet"
757759
po/bs.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-12-01 20:06+0000\n"
1212"Last-Translator: Kenan Gutić <Unknown>\n"
1313"Language-Team: Bosnian <bs@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
20−"X-Generator: Launchpad (build 17925)\n"
19+"X-Launchpad-Export-Date: 2016-03-10 05:57+0000\n"
20+"X-Generator: Launchpad (build 17936)\n"
2121
2222#: plugins/IntegratedLightDM/Greeter.cpp:112
2323msgid "Password: "
@@ -177,38 +177,38 @@ msgstr "Ponovo poveži sada"
177177msgid "Close all"
178178msgstr "Zatvori sve"
179179
180−#: qml/Dash/DashPageHeader.qml:266
180+#: qml/Dash/DashPageHeader.qml:270
181181msgctxt "Button: Open the Ubuntu Store"
182182msgid "Store"
183183msgstr "Trgovina"
184184
185−#: qml/Dash/DashPageHeader.qml:273
185+#: qml/Dash/DashPageHeader.qml:277
186186msgctxt "Button: Start a search in the current dash scope"
187187msgid "Search"
188188msgstr "Pretraživanje"
189189
190−#: qml/Dash/DashPageHeader.qml:283
190+#: qml/Dash/DashPageHeader.qml:287
191191msgctxt "Button: Show the current dash scope settings"
192192msgid "Settings"
193193msgstr "Podešavanja"
194194
195−#: qml/Dash/DashPageHeader.qml:290
195+#: qml/Dash/DashPageHeader.qml:294
196196msgid "Remove from Favorites"
197197msgstr "Ukloni iz Omiljenih"
198198
199−#: qml/Dash/DashPageHeader.qml:290
199+#: qml/Dash/DashPageHeader.qml:294
200200msgid "Add to Favorites"
201201msgstr "Dodaj u Omiljene"
202202
203−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
203+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
204204msgid "See less"
205205msgstr "Pogledati manje"
206206
207−#: qml/Dash/GenericScopeView.qml:587
207+#: qml/Dash/GenericScopeView.qml:565
208208msgid "See all"
209209msgstr "Pogledati sve"
210210
211−#: qml/Dash/GenericScopeView.qml:649
211+#: qml/Dash/GenericScopeView.qml:627
212212msgctxt "Label: Hint for dash search line edit"
213213msgid "Search"
214214msgstr "Pretraži"
@@ -429,14 +429,6 @@ msgctxt "Button: Call back on phone"
429429msgid "Call back"
430430msgstr "Uzvrati poziv"
431431
432−#: qml/Panel/Indicators/ModemInfoItem.qml:105
433−msgid "Unlock SIM"
434−msgstr "Otključajte SIM"
435−
436−#: qml/Panel/Indicators/RoamingIndication.qml:27
437−msgid "Roaming"
438−msgstr "Roaming"
439−
440432#: qml/Tutorial/TutorialBottom.qml:28
441433msgid "Open special menus"
442434msgstr "Otvorite posebne menije"
@@ -699,6 +691,12 @@ msgstr "%1 〉"
699691#~ msgid "Please re-enter"
700692#~ msgstr "Molimo ponovo unesite"
701693
694+#~ msgid "Unlock SIM"
695+#~ msgstr "Otključajte SIM"
696+
697+#~ msgid "Roaming"
698+#~ msgstr "Roaming"
699+
702700#~ msgid "Welcome to your Ubuntu phone."
703701#~ msgstr "Dobrodošli u vaš Ubuntu telefon."
704702
po/ca.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-07-04 09:48+0000\n"
1212"Last-Translator: David Planella <david.planella@ubuntu.com>\n"
1313"Language-Team: Catalan <ca@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -179,38 +179,38 @@ msgstr "Torna a connectar"
179179msgid "Close all"
180180msgstr "Tanca-ho tot"
181181
182−#: qml/Dash/DashPageHeader.qml:266
182+#: qml/Dash/DashPageHeader.qml:270
183183msgctxt "Button: Open the Ubuntu Store"
184184msgid "Store"
185185msgstr "Botiga"
186186
187−#: qml/Dash/DashPageHeader.qml:273
187+#: qml/Dash/DashPageHeader.qml:277
188188msgctxt "Button: Start a search in the current dash scope"
189189msgid "Search"
190190msgstr "Cerca"
191191
192−#: qml/Dash/DashPageHeader.qml:283
192+#: qml/Dash/DashPageHeader.qml:287
193193msgctxt "Button: Show the current dash scope settings"
194194msgid "Settings"
195195msgstr "Paràmetres"
196196
197−#: qml/Dash/DashPageHeader.qml:290
197+#: qml/Dash/DashPageHeader.qml:294
198198msgid "Remove from Favorites"
199199msgstr "Suprimeix dels preferits"
200200
201−#: qml/Dash/DashPageHeader.qml:290
201+#: qml/Dash/DashPageHeader.qml:294
202202msgid "Add to Favorites"
203203msgstr "Afegeix als preferits"
204204
205−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
205+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
206206msgid "See less"
207207msgstr "Mostra'n menys"
208208
209−#: qml/Dash/GenericScopeView.qml:587
209+#: qml/Dash/GenericScopeView.qml:565
210210msgid "See all"
211211msgstr "Mostra-ho tot"
212212
213−#: qml/Dash/GenericScopeView.qml:649
213+#: qml/Dash/GenericScopeView.qml:627
214214msgctxt "Label: Hint for dash search line edit"
215215msgid "Search"
216216msgstr "Cerca"
@@ -430,14 +430,6 @@ msgctxt "Button: Call back on phone"
430430msgid "Call back"
431431msgstr "Retorna la trucada"
432432
433−#: qml/Panel/Indicators/ModemInfoItem.qml:105
434−msgid "Unlock SIM"
435−msgstr "Desbloca la SIM"
436−
437−#: qml/Panel/Indicators/RoamingIndication.qml:27
438−msgid "Roaming"
439−msgstr "Itinerància"
440−
441433#: qml/Tutorial/TutorialBottom.qml:28
442434msgid "Open special menus"
443435msgstr "Obre els menús especials"
@@ -747,12 +739,18 @@ msgstr "%1 〉"
747739#~ "Ja heu après com utilitzar els gestos de les vores per fer servir el "
748740#~ "telèfon<br><br>Feu un toc a la pantalla per començar"
749741
742+#~ msgid "Unlock SIM"
743+#~ msgstr "Desbloca la SIM"
744+
750745#~ msgid "Store"
751746#~ msgstr "Botiga"
752747
753748#~ msgid "Done"
754749#~ msgstr "Fet"
755750
751+#~ msgid "Roaming"
752+#~ msgstr "Itinerància"
753+
756754#~ msgid "Favorites"
757755#~ msgstr "Preferides"
758756
po/ca@valencia.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-02-22 15:22+0000\n"
1212"Last-Translator: David Planella <david.planella@ubuntu.com>\n"
1313"Language-Team: Catalan <ca@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -177,38 +177,38 @@ msgstr ""
177177msgid "Close all"
178178msgstr ""
179179
180−#: qml/Dash/DashPageHeader.qml:266
180+#: qml/Dash/DashPageHeader.qml:270
181181msgctxt "Button: Open the Ubuntu Store"
182182msgid "Store"
183183msgstr ""
184184
185−#: qml/Dash/DashPageHeader.qml:273
185+#: qml/Dash/DashPageHeader.qml:277
186186msgctxt "Button: Start a search in the current dash scope"
187187msgid "Search"
188188msgstr ""
189189
190−#: qml/Dash/DashPageHeader.qml:283
190+#: qml/Dash/DashPageHeader.qml:287
191191msgctxt "Button: Show the current dash scope settings"
192192msgid "Settings"
193193msgstr ""
194194
195−#: qml/Dash/DashPageHeader.qml:290
195+#: qml/Dash/DashPageHeader.qml:294
196196msgid "Remove from Favorites"
197197msgstr "Suprimeix dels preferits"
198198
199−#: qml/Dash/DashPageHeader.qml:290
199+#: qml/Dash/DashPageHeader.qml:294
200200msgid "Add to Favorites"
201201msgstr "Afig als preferits"
202202
203−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
203+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
204204msgid "See less"
205205msgstr "Mostra'n menys"
206206
207−#: qml/Dash/GenericScopeView.qml:587
207+#: qml/Dash/GenericScopeView.qml:565
208208msgid "See all"
209209msgstr "Mostra-ho tot"
210210
211−#: qml/Dash/GenericScopeView.qml:649
211+#: qml/Dash/GenericScopeView.qml:627
212212msgctxt "Label: Hint for dash search line edit"
213213msgid "Search"
214214msgstr ""
@@ -428,14 +428,6 @@ msgctxt "Button: Call back on phone"
428428msgid "Call back"
429429msgstr ""
430430
431−#: qml/Panel/Indicators/ModemInfoItem.qml:105
432−msgid "Unlock SIM"
433−msgstr "Desbloca la SIM"
434−
435−#: qml/Panel/Indicators/RoamingIndication.qml:27
436−msgid "Roaming"
437−msgstr "Itinerància"
438−
439431#: qml/Tutorial/TutorialBottom.qml:28
440432msgid "Open special menus"
441433msgstr ""
@@ -771,6 +763,12 @@ msgstr "%1 〉"
771763#~ msgid "Speaking..."
772764#~ msgstr "S'està parlant..."
773765
766+#~ msgid "Unlock SIM"
767+#~ msgstr "Desbloca la SIM"
768+
769+#~ msgid "Roaming"
770+#~ msgstr "Itinerància"
771+
774772#~ msgid "Please re-enter"
775773#~ msgstr "Torneu-ho a introduir"
776774
po/ce.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-02-15 04:01+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Chechen <ce@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr ""
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr ""
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr ""
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr ""
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr ""
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr ""
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr ""
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr ""
@@ -416,14 +416,6 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr ""
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr ""
426−
427419#: qml/Tutorial/TutorialBottom.qml:28
428420msgid "Open special menus"
429421msgstr ""
po/ckb.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2014-01-21 11:05+0000\n"
1212"Last-Translator: Aras <aras.noori@gmail.com>\n"
1313"Language-Team: Kurdish (Sorani) <ckb@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr ""
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr ""
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr ""
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr ""
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr ""
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr ""
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr ""
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr ""
@@ -416,14 +416,6 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr ""
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr ""
426−
427419#: qml/Tutorial/TutorialBottom.qml:28
428420msgid "Open special menus"
429421msgstr ""
po/cs.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-07-07 10:44+0000\n"
1212"Last-Translator: Vojtěch Daněk <vdanek@outlook.com>\n"
1313"Language-Team: Czech <cs@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020"Language: cs\n"
2121
2222#: plugins/IntegratedLightDM/Greeter.cpp:112
@@ -177,38 +177,38 @@ msgstr ""
177177msgid "Close all"
178178msgstr ""
179179
180−#: qml/Dash/DashPageHeader.qml:266
180+#: qml/Dash/DashPageHeader.qml:270
181181msgctxt "Button: Open the Ubuntu Store"
182182msgid "Store"
183183msgstr "Obchod"
184184
185−#: qml/Dash/DashPageHeader.qml:273
185+#: qml/Dash/DashPageHeader.qml:277
186186msgctxt "Button: Start a search in the current dash scope"
187187msgid "Search"
188188msgstr "Hledat"
189189
190−#: qml/Dash/DashPageHeader.qml:283
190+#: qml/Dash/DashPageHeader.qml:287
191191msgctxt "Button: Show the current dash scope settings"
192192msgid "Settings"
193193msgstr "Nastavení"
194194
195−#: qml/Dash/DashPageHeader.qml:290
195+#: qml/Dash/DashPageHeader.qml:294
196196msgid "Remove from Favorites"
197197msgstr "Odstranit z oblíbených"
198198
199−#: qml/Dash/DashPageHeader.qml:290
199+#: qml/Dash/DashPageHeader.qml:294
200200msgid "Add to Favorites"
201201msgstr "Přidat do oblíbených"
202202
203−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
203+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
204204msgid "See less"
205205msgstr "Zobrazit méně"
206206
207−#: qml/Dash/GenericScopeView.qml:587
207+#: qml/Dash/GenericScopeView.qml:565
208208msgid "See all"
209209msgstr "Zobrazit vše"
210210
211−#: qml/Dash/GenericScopeView.qml:649
211+#: qml/Dash/GenericScopeView.qml:627
212212msgctxt "Label: Hint for dash search line edit"
213213msgid "Search"
214214msgstr "Hledat"
@@ -429,14 +429,6 @@ msgctxt "Button: Call back on phone"
429429msgid "Call back"
430430msgstr ""
431431
432−#: qml/Panel/Indicators/ModemInfoItem.qml:105
433−msgid "Unlock SIM"
434−msgstr "Odemknout SIM"
435−
436−#: qml/Panel/Indicators/RoamingIndication.qml:27
437−msgid "Roaming"
438−msgstr "Roaming"
439−
440432#: qml/Tutorial/TutorialBottom.qml:28
441433msgid "Open special menus"
442434msgstr "Otevřít speciální menu"
@@ -734,6 +726,12 @@ msgstr "%1 〉"
734726#~ msgid "Please re-enter"
735727#~ msgstr "Vložte znovu"
736728
729+#~ msgid "Unlock SIM"
730+#~ msgstr "Odemknout SIM"
731+
732+#~ msgid "Roaming"
733+#~ msgstr "Roaming"
734+
737735#~ msgid "Welcome to your Ubuntu phone."
738736#~ msgstr "Vítejte ve vašem Ubuntu telefonu."
739737
po/cy.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-07-31 13:21+0000\n"
1212"Last-Translator: Owen Llywelyn <owen.llywelyn@gmail.com>\n"
1313"Language-Team: Welsh <cy@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=4; plural=n==1 ? 0 : n==2 ? 1 : (n != 8 && n != 11) ? "
1818"2 : 3;\n"
19−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
20−"X-Generator: Launchpad (build 17925)\n"
19+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
20+"X-Generator: Launchpad (build 17936)\n"
2121
2222#: plugins/IntegratedLightDM/Greeter.cpp:112
2323msgid "Password: "
@@ -178,38 +178,38 @@ msgstr ""
178178msgid "Close all"
179179msgstr ""
180180
181−#: qml/Dash/DashPageHeader.qml:266
181+#: qml/Dash/DashPageHeader.qml:270
182182msgctxt "Button: Open the Ubuntu Store"
183183msgid "Store"
184184msgstr "Marchnad"
185185
186−#: qml/Dash/DashPageHeader.qml:273
186+#: qml/Dash/DashPageHeader.qml:277
187187msgctxt "Button: Start a search in the current dash scope"
188188msgid "Search"
189189msgstr "Chwilio"
190190
191−#: qml/Dash/DashPageHeader.qml:283
191+#: qml/Dash/DashPageHeader.qml:287
192192msgctxt "Button: Show the current dash scope settings"
193193msgid "Settings"
194194msgstr "Gosodiadau"
195195
196−#: qml/Dash/DashPageHeader.qml:290
196+#: qml/Dash/DashPageHeader.qml:294
197197msgid "Remove from Favorites"
198198msgstr "Tynnu o Ffefrynnau"
199199
200−#: qml/Dash/DashPageHeader.qml:290
200+#: qml/Dash/DashPageHeader.qml:294
201201msgid "Add to Favorites"
202202msgstr "Ychwanegu at Ffefrynnau"
203203
204−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
204+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
205205msgid "See less"
206206msgstr "Gweld llai"
207207
208−#: qml/Dash/GenericScopeView.qml:587
208+#: qml/Dash/GenericScopeView.qml:565
209209msgid "See all"
210210msgstr "Gweld y cyfan"
211211
212−#: qml/Dash/GenericScopeView.qml:649
212+#: qml/Dash/GenericScopeView.qml:627
213213msgctxt "Label: Hint for dash search line edit"
214214msgid "Search"
215215msgstr "Chwilio"
@@ -433,14 +433,6 @@ msgctxt "Button: Call back on phone"
433433msgid "Call back"
434434msgstr ""
435435
436−#: qml/Panel/Indicators/ModemInfoItem.qml:105
437−msgid "Unlock SIM"
438−msgstr "Datgloi SIM"
439−
440−#: qml/Panel/Indicators/RoamingIndication.qml:27
441−msgid "Roaming"
442−msgstr "Crwydrol"
443−
444436#: qml/Tutorial/TutorialBottom.qml:28
445437msgid "Open special menus"
446438msgstr "Agor dewislenni arbennig"
@@ -717,6 +709,12 @@ msgstr "%1 〉"
717709#~ msgid "Tomorrow %H:%M"
718710#~ msgstr "Yfory %H:%M"
719711
712+#~ msgid "Unlock SIM"
713+#~ msgstr "Datgloi SIM"
714+
715+#~ msgid "Roaming"
716+#~ msgstr "Crwydrol"
717+
720718#~ msgid "Welcome to your Ubuntu phone."
721719#~ msgstr "Croeso i'ch ffôn Ubuntu."
722720
po/da.po+17−19
@@ -8,7 +8,7 @@ msgid ""
88msgstr ""
99"Project-Id-Version: unity8\n"
1010"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
11−"POT-Creation-Date: 2016-02-12 00:28+0000\n"
11+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1212"PO-Revision-Date: 2015-07-06 12:05+0000\n"
1313"Last-Translator: Folmer Fredslund <Unknown>\n"
1414"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Type: text/plain; charset=UTF-8\n"
1717"Content-Transfer-Encoding: 8bit\n"
1818"Plural-Forms: nplurals=2; plural=n != 1;\n"
19−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
20−"X-Generator: Launchpad (build 17925)\n"
19+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
20+"X-Generator: Launchpad (build 17936)\n"
2121
2222#: plugins/IntegratedLightDM/Greeter.cpp:112
2323msgid "Password: "
@@ -178,38 +178,38 @@ msgstr ""
178178msgid "Close all"
179179msgstr ""
180180
181−#: qml/Dash/DashPageHeader.qml:266
181+#: qml/Dash/DashPageHeader.qml:270
182182msgctxt "Button: Open the Ubuntu Store"
183183msgid "Store"
184184msgstr "Butik"
185185
186−#: qml/Dash/DashPageHeader.qml:273
186+#: qml/Dash/DashPageHeader.qml:277
187187msgctxt "Button: Start a search in the current dash scope"
188188msgid "Search"
189189msgstr "Søg"
190190
191−#: qml/Dash/DashPageHeader.qml:283
191+#: qml/Dash/DashPageHeader.qml:287
192192msgctxt "Button: Show the current dash scope settings"
193193msgid "Settings"
194194msgstr "Indstillinger"
195195
196−#: qml/Dash/DashPageHeader.qml:290
196+#: qml/Dash/DashPageHeader.qml:294
197197msgid "Remove from Favorites"
198198msgstr "Fjern fra Favoritter"
199199
200−#: qml/Dash/DashPageHeader.qml:290
200+#: qml/Dash/DashPageHeader.qml:294
201201msgid "Add to Favorites"
202202msgstr "Tilføj til Favoritter"
203203
204−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
204+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
205205msgid "See less"
206206msgstr "Vis mindre"
207207
208−#: qml/Dash/GenericScopeView.qml:587
208+#: qml/Dash/GenericScopeView.qml:565
209209msgid "See all"
210210msgstr "Se alle"
211211
212−#: qml/Dash/GenericScopeView.qml:649
212+#: qml/Dash/GenericScopeView.qml:627
213213msgctxt "Label: Hint for dash search line edit"
214214msgid "Search"
215215msgstr "Søg"
@@ -427,14 +427,6 @@ msgctxt "Button: Call back on phone"
427427msgid "Call back"
428428msgstr ""
429429
430−#: qml/Panel/Indicators/ModemInfoItem.qml:105
431−msgid "Unlock SIM"
432−msgstr "Lås SIM-kort op"
433−
434−#: qml/Panel/Indicators/RoamingIndication.qml:27
435−msgid "Roaming"
436−msgstr "Roaming"
437−
438430#: qml/Tutorial/TutorialBottom.qml:28
439431msgid "Open special menus"
440432msgstr "Åben specialmenuer"
@@ -738,6 +730,9 @@ msgstr "%1 〉"
738730#~ "Du mestrer nu kantbevægelserne og kan begynde at bruge telefonen<br><br>Tryk "
739731#~ "på skærmen for at starte"
740732
733+#~ msgid "Unlock SIM"
734+#~ msgstr "Lås SIM-kort op"
735+
741736#~ msgid "Please re-enter"
742737#~ msgstr "Vær venlig at genindtaste"
743738
@@ -750,6 +745,9 @@ msgstr "%1 〉"
750745#~ msgid "Welcome to your Ubuntu phone."
751746#~ msgstr "Velkommen til din Ubuntu-telefon."
752747
748+#~ msgid "Roaming"
749+#~ msgstr "Roaming"
750+
753751#~ msgid "%a %d %b %H:%M"
754752#~ msgstr "%a %b. %d %H:%M"
755753
po/de.po+24−24
@@ -7,16 +7,16 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-02-12 00:28+0000\n"
11−"PO-Revision-Date: 2015-07-24 18:03+0000\n"
12−"Last-Translator: Torsten Franz <Unknown>\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
11+"PO-Revision-Date: 2016-02-17 19:16+0000\n"
12+"Last-Translator: schuko24 <gerdsaenger@t-online.de>\n"
1313"Language-Team: German <de@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -179,38 +179,38 @@ msgstr "Jetzt verbinden!"
179179msgid "Close all"
180180msgstr "Alle schließen"
181181
182−#: qml/Dash/DashPageHeader.qml:266
182+#: qml/Dash/DashPageHeader.qml:270
183183msgctxt "Button: Open the Ubuntu Store"
184184msgid "Store"
185185msgstr "Speichern"
186186
187−#: qml/Dash/DashPageHeader.qml:273
187+#: qml/Dash/DashPageHeader.qml:277
188188msgctxt "Button: Start a search in the current dash scope"
189189msgid "Search"
190190msgstr "Suchen"
191191
192−#: qml/Dash/DashPageHeader.qml:283
192+#: qml/Dash/DashPageHeader.qml:287
193193msgctxt "Button: Show the current dash scope settings"
194194msgid "Settings"
195195msgstr "Einstellungen"
196196
197−#: qml/Dash/DashPageHeader.qml:290
197+#: qml/Dash/DashPageHeader.qml:294
198198msgid "Remove from Favorites"
199199msgstr "Aus den Favoriten entfernen"
200200
201−#: qml/Dash/DashPageHeader.qml:290
201+#: qml/Dash/DashPageHeader.qml:294
202202msgid "Add to Favorites"
203203msgstr "Zu Favoriten hinzufügen"
204204
205−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
205+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
206206msgid "See less"
207207msgstr "Weniger ansehen"
208208
209−#: qml/Dash/GenericScopeView.qml:587
209+#: qml/Dash/GenericScopeView.qml:565
210210msgid "See all"
211211msgstr "Alle anzeigen"
212212
213−#: qml/Dash/GenericScopeView.qml:649
213+#: qml/Dash/GenericScopeView.qml:627
214214msgctxt "Label: Hint for dash search line edit"
215215msgid "Search"
216216msgstr "Suchen"
@@ -269,6 +269,8 @@ msgid ""
269269"Your device is now connected to an external display. Use this screen as a "
270270"touch pad to interact with the mouse."
271271msgstr ""
272+"Ihr Gerät ist nun mit einer externen Anzeige verbunden. Benutzen Sie diesen "
273+"Bildschirm als Touchpad zur Steuerung des Mauszeigers."
272274
273275#: qml/Greeter/CoverPage.qml:107
274276msgid "Unlock"
@@ -428,14 +430,6 @@ msgctxt "Button: Call back on phone"
428430msgid "Call back"
429431msgstr "Zurückrufen"
430432
431−#: qml/Panel/Indicators/ModemInfoItem.qml:105
432−msgid "Unlock SIM"
433−msgstr "SIM-Karte entsperren"
434−
435−#: qml/Panel/Indicators/RoamingIndication.qml:27
436−msgid "Roaming"
437−msgstr "Roaming"
438−
439433#: qml/Tutorial/TutorialBottom.qml:28
440434msgid "Open special menus"
441435msgstr "Spezielle Menüs öffnen"
@@ -501,7 +495,7 @@ msgstr "Hallo!"
501495
502496#: qml/Wizard/Pages/10-welcome.qml:44
503497msgid "Welcome to your Ubuntu device."
504−msgstr ""
498+msgstr "Willkommen auf Ihrem Ubuntu-Gerät."
505499
506500#: qml/Wizard/Pages/10-welcome.qml:52
507501msgid "Let’s get started."
@@ -532,7 +526,7 @@ msgstr "Sicherheit nach dem Sperren"
532526
533527#: qml/Wizard/Pages/30-passwd-type.qml:79
534528msgid "Please select how you’d like to unlock your device."
535−msgstr ""
529+msgstr "Bitte wählen Sie, wie Sie dieses Gerät entsperren möchten."
536530
537531#: qml/Wizard/Pages/30-passwd-type.qml:102
538532msgctxt "Label: Type of security method"
@@ -641,7 +635,7 @@ msgstr "Gute Arbeit!"
641635
642636#: qml/Wizard/Pages/80-finished.qml:46
643637msgid "Your device is now ready to use."
644−msgstr ""
638+msgstr "Ihr Gerät ist nun einsatzbereit."
645639
646640#: qml/Wizard/Pages/80-finished.qml:53
647641msgid "Finish"
@@ -748,6 +742,9 @@ msgstr "%1 〉"
748742#~ msgid "All"
749743#~ msgstr "Alle"
750744
745+#~ msgid "Roaming"
746+#~ msgstr "Roaming"
747+
751748#~ msgid "Done"
752749#~ msgstr "Erledigt"
753750
@@ -775,6 +772,9 @@ msgstr "%1 〉"
775772#~ msgid "Restart"
776773#~ msgstr "Neustarten"
777774
775+#~ msgid "Unlock SIM"
776+#~ msgstr "SIM-Karte entsperren"
777+
778778#~ msgid "Manage Scopes"
779779#~ msgstr "Filter verwalten"
780780
po/el.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-12-04 09:38+0000\n"
1212"Last-Translator: Aggelos Arnaoutis <angelosarn@hotmail.com>\n"
1313"Language-Team: Greek <el@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -179,38 +179,38 @@ msgstr "Επανασύνδεση τώρα!"
179179msgid "Close all"
180180msgstr "Κλείσιμο όλων"
181181
182−#: qml/Dash/DashPageHeader.qml:266
182+#: qml/Dash/DashPageHeader.qml:270
183183msgctxt "Button: Open the Ubuntu Store"
184184msgid "Store"
185185msgstr "Κατάστημα"
186186
187−#: qml/Dash/DashPageHeader.qml:273
187+#: qml/Dash/DashPageHeader.qml:277
188188msgctxt "Button: Start a search in the current dash scope"
189189msgid "Search"
190190msgstr "Αναζήτηση"
191191
192−#: qml/Dash/DashPageHeader.qml:283
192+#: qml/Dash/DashPageHeader.qml:287
193193msgctxt "Button: Show the current dash scope settings"
194194msgid "Settings"
195195msgstr "Ρυθμίσεις"
196196
197−#: qml/Dash/DashPageHeader.qml:290
197+#: qml/Dash/DashPageHeader.qml:294
198198msgid "Remove from Favorites"
199199msgstr "Αφαίρεση από τα αγαπημένα"
200200
201−#: qml/Dash/DashPageHeader.qml:290
201+#: qml/Dash/DashPageHeader.qml:294
202202msgid "Add to Favorites"
203203msgstr "Προσθήκη στα αγαπημένα"
204204
205−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
205+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
206206msgid "See less"
207207msgstr "Λιγότερα"
208208
209−#: qml/Dash/GenericScopeView.qml:587
209+#: qml/Dash/GenericScopeView.qml:565
210210msgid "See all"
211211msgstr "Εμφάνιση όλων"
212212
213−#: qml/Dash/GenericScopeView.qml:649
213+#: qml/Dash/GenericScopeView.qml:627
214214msgctxt "Label: Hint for dash search line edit"
215215msgid "Search"
216216msgstr "Αναζήτηση"
@@ -430,14 +430,6 @@ msgctxt "Button: Call back on phone"
430430msgid "Call back"
431431msgstr "Επανάκληση"
432432
433−#: qml/Panel/Indicators/ModemInfoItem.qml:105
434−msgid "Unlock SIM"
435−msgstr "Ξεκλείδωμα SIM"
436−
437−#: qml/Panel/Indicators/RoamingIndication.qml:27
438−msgid "Roaming"
439−msgstr "Περιαγωγή"
440−
441433#: qml/Tutorial/TutorialBottom.qml:28
442434msgid "Open special menus"
443435msgstr "Άνοιγμα ειδικών μενού"
@@ -756,6 +748,12 @@ msgstr "%1 〉"
756748#~ msgid "All"
757749#~ msgstr "Όλα"
758750
751+#~ msgid "Unlock SIM"
752+#~ msgstr "Ξεκλείδωμα SIM"
753+
754+#~ msgid "Roaming"
755+#~ msgstr "Περιαγωγή"
756+
759757#~ msgid "Favorites"
760758#~ msgstr "Αγαπημένα"
761759
po/en_AU.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2016-02-12 23:22+0000\n"
1212"Last-Translator: Jared Norris <jarednorris@ubuntu.com>\n"
1313"Language-Team: English (Australia) <en_AU@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -173,38 +173,38 @@ msgstr "Reconnect now!"
173173msgid "Close all"
174174msgstr "Close all"
175175
176−#: qml/Dash/DashPageHeader.qml:266
176+#: qml/Dash/DashPageHeader.qml:270
177177msgctxt "Button: Open the Ubuntu Store"
178178msgid "Store"
179179msgstr "Store"
180180
181−#: qml/Dash/DashPageHeader.qml:273
181+#: qml/Dash/DashPageHeader.qml:277
182182msgctxt "Button: Start a search in the current dash scope"
183183msgid "Search"
184184msgstr "Search"
185185
186−#: qml/Dash/DashPageHeader.qml:283
186+#: qml/Dash/DashPageHeader.qml:287
187187msgctxt "Button: Show the current dash scope settings"
188188msgid "Settings"
189189msgstr "Settings"
190190
191−#: qml/Dash/DashPageHeader.qml:290
191+#: qml/Dash/DashPageHeader.qml:294
192192msgid "Remove from Favorites"
193193msgstr "Remove from Favourites"
194194
195−#: qml/Dash/DashPageHeader.qml:290
195+#: qml/Dash/DashPageHeader.qml:294
196196msgid "Add to Favorites"
197197msgstr "Add to Favourites"
198198
199−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
199+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
200200msgid "See less"
201201msgstr "See less"
202202
203−#: qml/Dash/GenericScopeView.qml:587
203+#: qml/Dash/GenericScopeView.qml:565
204204msgid "See all"
205205msgstr "See all"
206206
207−#: qml/Dash/GenericScopeView.qml:649
207+#: qml/Dash/GenericScopeView.qml:627
208208msgctxt "Label: Hint for dash search line edit"
209209msgid "Search"
210210msgstr "Search"
@@ -424,14 +424,6 @@ msgctxt "Button: Call back on phone"
424424msgid "Call back"
425425msgstr "Call back"
426426
427−#: qml/Panel/Indicators/ModemInfoItem.qml:105
428−msgid "Unlock SIM"
429−msgstr "Unlock SIM"
430−
431−#: qml/Panel/Indicators/RoamingIndication.qml:27
432−msgid "Roaming"
433−msgstr "Roaming"
434−
435427#: qml/Tutorial/TutorialBottom.qml:28
436428msgid "Open special menus"
437429msgstr "Open special menus"
@@ -735,6 +727,9 @@ msgstr "%1 〉"
735727#~ msgid "All"
736728#~ msgstr "All"
737729
730+#~ msgid "Unlock SIM"
731+#~ msgstr "Unlock SIM"
732+
738733#~ msgid "Favorites"
739734#~ msgstr "Favourites"
740735
@@ -747,6 +742,9 @@ msgstr "%1 〉"
747742#~ msgid "Done"
748743#~ msgstr "Done"
749744
745+#~ msgid "Roaming"
746+#~ msgstr "Roaming"
747+
750748#~ msgid "Log out"
751749#~ msgstr "Log out"
752750
po/en_GB.po+20−22
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-04-23 12:59+0000\n"
1212"Last-Translator: Andi Chandler <Unknown>\n"
1313"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -173,38 +173,38 @@ msgstr "Reconnect now!"
173173msgid "Close all"
174174msgstr "Close all"
175175
176−#: qml/Dash/DashPageHeader.qml:266
176+#: qml/Dash/DashPageHeader.qml:270
177177msgctxt "Button: Open the Ubuntu Store"
178178msgid "Store"
179179msgstr "Store"
180180
181−#: qml/Dash/DashPageHeader.qml:273
181+#: qml/Dash/DashPageHeader.qml:277
182182msgctxt "Button: Start a search in the current dash scope"
183183msgid "Search"
184184msgstr "Search"
185185
186−#: qml/Dash/DashPageHeader.qml:283
186+#: qml/Dash/DashPageHeader.qml:287
187187msgctxt "Button: Show the current dash scope settings"
188188msgid "Settings"
189189msgstr "Settings"
190190
191−#: qml/Dash/DashPageHeader.qml:290
191+#: qml/Dash/DashPageHeader.qml:294
192192msgid "Remove from Favorites"
193193msgstr "Remove from Favourites"
194194
195−#: qml/Dash/DashPageHeader.qml:290
195+#: qml/Dash/DashPageHeader.qml:294
196196msgid "Add to Favorites"
197197msgstr "Add to Favourites"
198198
199−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
199+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
200200msgid "See less"
201201msgstr "See less"
202202
203−#: qml/Dash/GenericScopeView.qml:587
203+#: qml/Dash/GenericScopeView.qml:565
204204msgid "See all"
205205msgstr "See all"
206206
207−#: qml/Dash/GenericScopeView.qml:649
207+#: qml/Dash/GenericScopeView.qml:627
208208msgctxt "Label: Hint for dash search line edit"
209209msgid "Search"
210210msgstr "Search"
@@ -424,14 +424,6 @@ msgctxt "Button: Call back on phone"
424424msgid "Call back"
425425msgstr "Call back"
426426
427−#: qml/Panel/Indicators/ModemInfoItem.qml:105
428−msgid "Unlock SIM"
429−msgstr "Unlock SIM"
430−
431−#: qml/Panel/Indicators/RoamingIndication.qml:27
432−msgid "Roaming"
433−msgstr "Roaming"
434−
435427#: qml/Tutorial/TutorialBottom.qml:28
436428msgid "Open special menus"
437429msgstr "Open special menus"
@@ -496,7 +488,7 @@ msgstr "Hi!"
496488
497489#: qml/Wizard/Pages/10-welcome.qml:44
498490msgid "Welcome to your Ubuntu device."
499−msgstr ""
491+msgstr "Welcome to your Ubuntu device."
500492
501493#: qml/Wizard/Pages/10-welcome.qml:52
502494msgid "Let’s get started."
@@ -527,7 +519,7 @@ msgstr "Lock security"
527519
528520#: qml/Wizard/Pages/30-passwd-type.qml:79
529521msgid "Please select how you’d like to unlock your device."
530−msgstr ""
522+msgstr "Please select how you would like to unlock your device."
531523
532524#: qml/Wizard/Pages/30-passwd-type.qml:102
533525msgctxt "Label: Type of security method"
@@ -634,7 +626,7 @@ msgstr "Nice work!"
634626
635627#: qml/Wizard/Pages/80-finished.qml:46
636628msgid "Your device is now ready to use."
637−msgstr ""
629+msgstr "Your device is now ready to use."
638630
639631#: qml/Wizard/Pages/80-finished.qml:53
640632msgid "Finish"
@@ -738,6 +730,9 @@ msgstr "%1 〉"
738730#~ msgid "All"
739731#~ msgstr "All"
740732
733+#~ msgid "Unlock SIM"
734+#~ msgstr "Unlock SIM"
735+
741736#~ msgid "Favorites"
742737#~ msgstr "Favourites"
743738
@@ -747,6 +742,9 @@ msgstr "%1 〉"
747742#~ msgid "Done"
748743#~ msgstr "Done"
749744
745+#~ msgid "Roaming"
746+#~ msgstr "Roaming"
747+
750748#~ msgid "Log out"
751749#~ msgstr "Log out"
752750
po/eo.po+53−28
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-06-06 23:37+0000\n"
1212"Last-Translator: Eliovir <Unknown>\n"
1313"Language-Team: Esperanto <eo@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -29,7 +29,7 @@ msgstr ""
2929
3030#: plugins/Unity/Launcher/launcheritem.cpp:52
3131msgid "Quit"
32−msgstr ""
32+msgstr "Ĉesi"
3333
3434#: plugins/Unity/Launcher/launcheritem.cpp:106
3535msgid "Unpin shortcut"
@@ -37,7 +37,7 @@ msgstr ""
3737
3838#: qml/Components/DelayedLockscreen.qml:49
3939msgid "Device Locked"
40−msgstr ""
40+msgstr "Aparato ŝlosita"
4141
4242#: qml/Components/DelayedLockscreen.qml:64
4343msgid "You have been locked out due to too many failed passphrase attempts."
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177−msgstr ""
177+msgstr "Programarejo"
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr "Serĉi"
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr "Agordoj"
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr ""
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr "Aldoni al favoritoj"
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr ""
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr ""
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr "Serĉi"
@@ -213,7 +213,7 @@ msgstr "Pli…"
213213
214214#: qml/Dash/Previews/PreviewActionCombo.qml:35
215215msgid "Less..."
216−msgstr ""
216+msgstr "Malpli..."
217217
218218#: qml/Dash/Previews/PreviewCommentInput.qml:68
219219#: qml/Dash/Previews/PreviewRatingInput.qml:174
@@ -246,11 +246,11 @@ msgstr ""
246246
247247#: qml/Dash/ScopesList.qml:67
248248msgid "Manage"
249−msgstr ""
249+msgstr "Administri"
250250
251251#: qml/Dash/ScopesList.qml:113
252252msgid "Home"
253−msgstr ""
253+msgstr "Hejmo"
254254
255255#: qml/Dash/ScopesList.qml:114
256256msgid "Also installed"
@@ -416,14 +416,6 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr ""
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr "Retmigrado"
426−
427419#: qml/Tutorial/TutorialBottom.qml:28
428420msgid "Open special menus"
429421msgstr ""
@@ -544,12 +536,12 @@ msgstr ""
544536#: qml/Wizard/Pages/30-passwd-type.qml:108
545537msgctxt "Label: Type of security method"
546538msgid "Passphrase"
547−msgstr ""
539+msgstr "Pasfrazo"
548540
549541#: qml/Wizard/Pages/30-passwd-type.qml:109
550542msgctxt "Label: Description of security method"
551543msgid "Numbers and letters"
552−msgstr ""
544+msgstr "Ciferoj kaj literoj"
553545
554546#: qml/Wizard/Pages/40-wifi.qml:29
555547msgid "Connect to Wi‑Fi"
@@ -616,7 +608,7 @@ msgstr ""
616608
617609#: qml/Wizard/Pages/80-finished.qml:39
618610msgid "Nice work!"
619−msgstr ""
611+msgstr "Bone farita!"
620612
621613#: qml/Wizard/Pages/80-finished.qml:46
622614msgid "Your device is now ready to use."
@@ -663,5 +655,38 @@ msgstr "〈 %1"
663655msgid "%1 〉"
664656msgstr "%1 〉"
665657
658+#~ msgid "Roaming"
659+#~ msgstr "Retmigrado"
660+
666661#~ msgid "Welcome to your Ubuntu phone."
667662#~ msgstr "Bonvenon al via Ubuntu-telefono."
663+
664+#~ msgid "%a %l:%M %p"
665+#~ msgstr "%a %l:%M %p"
666+
667+#~ msgid "Tomorrow %l:%M %p"
668+#~ msgstr "Morgaŭ %l:%M %p"
669+
670+#~ msgid "%l:%M %p"
671+#~ msgstr "%l:%M %p"
672+
673+#~ msgid "Yesterday %l:%M %p"
674+#~ msgstr "Hieraŭ %l:%M %p"
675+
676+#~ msgid "%H:%M"
677+#~ msgstr "%H:%M"
678+
679+#~ msgid "Yesterday %H:%M"
680+#~ msgstr "Hieraŭ %H:%M"
681+
682+#~ msgid "%a %d %b %l:%M %p"
683+#~ msgstr "%a %d %b %l:%M %p"
684+
685+#~ msgid "%a %d %b %H:%M"
686+#~ msgstr "%a %d %b %H:%M"
687+
688+#~ msgid "%a %H:%M"
689+#~ msgstr "%a %H:%M"
690+
691+#~ msgid "Tomorrow %H:%M"
692+#~ msgstr "Morgaŭ %H:%M"
po/es.po+20−22
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2016-01-15 14:48+0000\n"
1212"Last-Translator: Víctor R. Ruiz <Unknown>\n"
1313"Language-Team: Spanish <es@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -179,38 +179,38 @@ msgstr "¡Reconectar ahora!"
179179msgid "Close all"
180180msgstr "Cerrar todo"
181181
182−#: qml/Dash/DashPageHeader.qml:266
182+#: qml/Dash/DashPageHeader.qml:270
183183msgctxt "Button: Open the Ubuntu Store"
184184msgid "Store"
185185msgstr "Tienda"
186186
187−#: qml/Dash/DashPageHeader.qml:273
187+#: qml/Dash/DashPageHeader.qml:277
188188msgctxt "Button: Start a search in the current dash scope"
189189msgid "Search"
190190msgstr "Buscar"
191191
192−#: qml/Dash/DashPageHeader.qml:283
192+#: qml/Dash/DashPageHeader.qml:287
193193msgctxt "Button: Show the current dash scope settings"
194194msgid "Settings"
195195msgstr "Ajustes"
196196
197−#: qml/Dash/DashPageHeader.qml:290
197+#: qml/Dash/DashPageHeader.qml:294
198198msgid "Remove from Favorites"
199199msgstr "Quitar de favoritos"
200200
201−#: qml/Dash/DashPageHeader.qml:290
201+#: qml/Dash/DashPageHeader.qml:294
202202msgid "Add to Favorites"
203203msgstr "Añadir a favoritos"
204204
205−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
205+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
206206msgid "See less"
207207msgstr "Ver menos"
208208
209−#: qml/Dash/GenericScopeView.qml:587
209+#: qml/Dash/GenericScopeView.qml:565
210210msgid "See all"
211211msgstr "Ver todo"
212212
213−#: qml/Dash/GenericScopeView.qml:649
213+#: qml/Dash/GenericScopeView.qml:627
214214msgctxt "Label: Hint for dash search line edit"
215215msgid "Search"
216216msgstr "Búsqueda"
@@ -430,14 +430,6 @@ msgctxt "Button: Call back on phone"
430430msgid "Call back"
431431msgstr "Devolver llamada"
432432
433−#: qml/Panel/Indicators/ModemInfoItem.qml:105
434−msgid "Unlock SIM"
435−msgstr "Desbloquear SIM"
436−
437−#: qml/Panel/Indicators/RoamingIndication.qml:27
438−msgid "Roaming"
439−msgstr "Itinerancia"
440−
441433#: qml/Tutorial/TutorialBottom.qml:28
442434msgid "Open special menus"
443435msgstr "Abrir menús especiales"
@@ -502,7 +494,7 @@ msgstr "¡Hola!"
502494
503495#: qml/Wizard/Pages/10-welcome.qml:44
504496msgid "Welcome to your Ubuntu device."
505−msgstr ""
497+msgstr "Bienvenido a su dispositivo Ubuntu."
506498
507499#: qml/Wizard/Pages/10-welcome.qml:52
508500msgid "Let’s get started."
@@ -533,7 +525,7 @@ msgstr "Seguridad de bloqueo"
533525
534526#: qml/Wizard/Pages/30-passwd-type.qml:79
535527msgid "Please select how you’d like to unlock your device."
536−msgstr ""
528+msgstr "Por favor, seleccione cómo desea desbloquear el dispositivo."
537529
538530#: qml/Wizard/Pages/30-passwd-type.qml:102
539531msgctxt "Label: Type of security method"
@@ -640,7 +632,7 @@ msgstr "¡Buen trabajo!"
640632
641633#: qml/Wizard/Pages/80-finished.qml:46
642634msgid "Your device is now ready to use."
643−msgstr ""
635+msgstr "El dispositivo ya está listo."
644636
645637#: qml/Wizard/Pages/80-finished.qml:53
646638msgid "Finish"
@@ -744,9 +736,15 @@ msgstr "%1 〉"
744736#~ msgid "Power off"
745737#~ msgstr "Apagar"
746738
739+#~ msgid "Roaming"
740+#~ msgstr "Itinerancia"
741+
747742#~ msgid "All"
748743#~ msgstr "Todo"
749744
745+#~ msgid "Unlock SIM"
746+#~ msgstr "Desbloquear SIM"
747+
750748#~ msgid "Favorites"
751749#~ msgstr "Favoritos"
752750
po/eu.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-07-13 23:29+0000\n"
1212"Last-Translator: Ibai Oihanguren Sala <Unknown>\n"
1313"Language-Team: Basque <eu@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:57+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -174,38 +174,38 @@ msgstr ""
174174msgid "Close all"
175175msgstr ""
176176
177−#: qml/Dash/DashPageHeader.qml:266
177+#: qml/Dash/DashPageHeader.qml:270
178178msgctxt "Button: Open the Ubuntu Store"
179179msgid "Store"
180180msgstr "Denda"
181181
182−#: qml/Dash/DashPageHeader.qml:273
182+#: qml/Dash/DashPageHeader.qml:277
183183msgctxt "Button: Start a search in the current dash scope"
184184msgid "Search"
185185msgstr "Bilatu"
186186
187−#: qml/Dash/DashPageHeader.qml:283
187+#: qml/Dash/DashPageHeader.qml:287
188188msgctxt "Button: Show the current dash scope settings"
189189msgid "Settings"
190190msgstr "Ezarpenak"
191191
192−#: qml/Dash/DashPageHeader.qml:290
192+#: qml/Dash/DashPageHeader.qml:294
193193msgid "Remove from Favorites"
194194msgstr "Kendu gogokoetatik"
195195
196−#: qml/Dash/DashPageHeader.qml:290
196+#: qml/Dash/DashPageHeader.qml:294
197197msgid "Add to Favorites"
198198msgstr "Gehitu gogokoetara"
199199
200−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
200+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
201201msgid "See less"
202202msgstr "Ikusi gutxiago"
203203
204−#: qml/Dash/GenericScopeView.qml:587
204+#: qml/Dash/GenericScopeView.qml:565
205205msgid "See all"
206206msgstr "Ikusi guztiak"
207207
208−#: qml/Dash/GenericScopeView.qml:649
208+#: qml/Dash/GenericScopeView.qml:627
209209msgctxt "Label: Hint for dash search line edit"
210210msgid "Search"
211211msgstr "Bilatu"
@@ -423,14 +423,6 @@ msgctxt "Button: Call back on phone"
423423msgid "Call back"
424424msgstr ""
425425
426−#: qml/Panel/Indicators/ModemInfoItem.qml:105
427−msgid "Unlock SIM"
428−msgstr "Desblokeatu SIMa"
429−
430−#: qml/Panel/Indicators/RoamingIndication.qml:27
431−msgid "Roaming"
432−msgstr "Ibiltaritza"
433−
434426#: qml/Tutorial/TutorialBottom.qml:28
435427msgid "Open special menus"
436428msgstr "Ireki menu bereziak"
@@ -749,6 +741,12 @@ msgstr "%1 〉"
749741#~ msgid "All"
750742#~ msgstr "Guztiak"
751743
744+#~ msgid "Unlock SIM"
745+#~ msgstr "Desblokeatu SIMa"
746+
747+#~ msgid "Roaming"
748+#~ msgstr "Ibiltaritza"
749+
752750#~ msgid "Favorites"
753751#~ msgstr "Gogokoak"
754752
po/fa.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-07-11 15:43+0000\n"
1212"Last-Translator: Danial Behzadi <dani.behzi@gmail.com>\n"
1313"Language-Team: Persian <fa@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -174,38 +174,38 @@ msgstr "هم‌اکنون دوباره وصل شود"
174174msgid "Close all"
175175msgstr "بستن همه"
176176
177−#: qml/Dash/DashPageHeader.qml:266
177+#: qml/Dash/DashPageHeader.qml:270
178178msgctxt "Button: Open the Ubuntu Store"
179179msgid "Store"
180180msgstr "ذخیره"
181181
182−#: qml/Dash/DashPageHeader.qml:273
182+#: qml/Dash/DashPageHeader.qml:277
183183msgctxt "Button: Start a search in the current dash scope"
184184msgid "Search"
185185msgstr "جست‌وجو"
186186
187−#: qml/Dash/DashPageHeader.qml:283
187+#: qml/Dash/DashPageHeader.qml:287
188188msgctxt "Button: Show the current dash scope settings"
189189msgid "Settings"
190190msgstr "تنظیمات"
191191
192−#: qml/Dash/DashPageHeader.qml:290
192+#: qml/Dash/DashPageHeader.qml:294
193193msgid "Remove from Favorites"
194194msgstr "برداشتن از برگزیده‌ها"
195195
196−#: qml/Dash/DashPageHeader.qml:290
196+#: qml/Dash/DashPageHeader.qml:294
197197msgid "Add to Favorites"
198198msgstr "افزودن به برگزیده‌ها"
199199
200−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
200+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
201201msgid "See less"
202202msgstr "کم‌تر ببینید"
203203
204−#: qml/Dash/GenericScopeView.qml:587
204+#: qml/Dash/GenericScopeView.qml:565
205205msgid "See all"
206206msgstr "دیدن همه"
207207
208−#: qml/Dash/GenericScopeView.qml:649
208+#: qml/Dash/GenericScopeView.qml:627
209209msgctxt "Label: Hint for dash search line edit"
210210msgid "Search"
211211msgstr "جست‌وجو"
@@ -420,14 +420,6 @@ msgctxt "Button: Call back on phone"
420420msgid "Call back"
421421msgstr "پاسخ تماس"
422422
423−#: qml/Panel/Indicators/ModemInfoItem.qml:105
424−msgid "Unlock SIM"
425−msgstr "باز کردن قفل سیم‌کارت"
426−
427−#: qml/Panel/Indicators/RoamingIndication.qml:27
428−msgid "Roaming"
429−msgstr "رومینگ"
430−
431423#: qml/Tutorial/TutorialBottom.qml:28
432424msgid "Open special menus"
433425msgstr "باز کردن فهرست‌های مخصوص"
@@ -733,6 +725,9 @@ msgstr "%1 〉"
733725#~ msgid "All"
734726#~ msgstr "همه"
735727
728+#~ msgid "Unlock SIM"
729+#~ msgstr "باز کردن قفل سیم‌کارت"
730+
736731#~ msgid "Favorites"
737732#~ msgstr "برگزیده‌ها"
738733
@@ -745,6 +740,9 @@ msgstr "%1 〉"
745740#~ msgid "Done"
746741#~ msgstr "انجام شد"
747742
743+#~ msgid "Roaming"
744+#~ msgstr "رومینگ"
745+
748746#~ msgid "Power"
749747#~ msgstr "توان"
750748
po/fi.po+20−22
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-07-04 18:32+0000\n"
1212"Last-Translator: Jiri Grönroos <Unknown>\n"
1313"Language-Team: Finnish <fi@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -177,38 +177,38 @@ msgstr "Yhdistä uudelleen nyt!"
177177msgid "Close all"
178178msgstr "Sulje kaikki"
179179
180−#: qml/Dash/DashPageHeader.qml:266
180+#: qml/Dash/DashPageHeader.qml:270
181181msgctxt "Button: Open the Ubuntu Store"
182182msgid "Store"
183183msgstr "Kauppa"
184184
185−#: qml/Dash/DashPageHeader.qml:273
185+#: qml/Dash/DashPageHeader.qml:277
186186msgctxt "Button: Start a search in the current dash scope"
187187msgid "Search"
188188msgstr "Etsi"
189189
190−#: qml/Dash/DashPageHeader.qml:283
190+#: qml/Dash/DashPageHeader.qml:287
191191msgctxt "Button: Show the current dash scope settings"
192192msgid "Settings"
193193msgstr "Asetukset"
194194
195−#: qml/Dash/DashPageHeader.qml:290
195+#: qml/Dash/DashPageHeader.qml:294
196196msgid "Remove from Favorites"
197197msgstr "Poista suosikeista"
198198
199−#: qml/Dash/DashPageHeader.qml:290
199+#: qml/Dash/DashPageHeader.qml:294
200200msgid "Add to Favorites"
201201msgstr "Lisää suosikkeihin"
202202
203−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
203+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
204204msgid "See less"
205205msgstr "Näytä vähemmän"
206206
207−#: qml/Dash/GenericScopeView.qml:587
207+#: qml/Dash/GenericScopeView.qml:565
208208msgid "See all"
209209msgstr "Näytä kaikki"
210210
211−#: qml/Dash/GenericScopeView.qml:649
211+#: qml/Dash/GenericScopeView.qml:627
212212msgctxt "Label: Hint for dash search line edit"
213213msgid "Search"
214214msgstr "Etsi"
@@ -428,14 +428,6 @@ msgctxt "Button: Call back on phone"
428428msgid "Call back"
429429msgstr "Soita takaisin"
430430
431−#: qml/Panel/Indicators/ModemInfoItem.qml:105
432−msgid "Unlock SIM"
433−msgstr "Avaa SIM-kortin lukitus"
434−
435−#: qml/Panel/Indicators/RoamingIndication.qml:27
436−msgid "Roaming"
437−msgstr "Verkkovierailu"
438−
439431#: qml/Tutorial/TutorialBottom.qml:28
440432msgid "Open special menus"
441433msgstr "Avaa erikoisvalikot"
@@ -500,7 +492,7 @@ msgstr "Hei!"
500492
501493#: qml/Wizard/Pages/10-welcome.qml:44
502494msgid "Welcome to your Ubuntu device."
503−msgstr ""
495+msgstr "Tervetuloa Ubuntu-laitteesi pariin."
504496
505497#: qml/Wizard/Pages/10-welcome.qml:52
506498msgid "Let’s get started."
@@ -533,7 +525,7 @@ msgstr "Lukitusturva"
533525
534526#: qml/Wizard/Pages/30-passwd-type.qml:79
535527msgid "Please select how you’d like to unlock your device."
536−msgstr ""
528+msgstr "Valitse kuinka haluat avata laitteen lukituksen."
537529
538530#: qml/Wizard/Pages/30-passwd-type.qml:102
539531msgctxt "Label: Type of security method"
@@ -639,7 +631,7 @@ msgstr "Hyvä!"
639631
640632#: qml/Wizard/Pages/80-finished.qml:46
641633msgid "Your device is now ready to use."
642−msgstr ""
634+msgstr "Laitteesi on nyt valmis käytettäväksi."
643635
644636#: qml/Wizard/Pages/80-finished.qml:53
645637msgid "Finish"
@@ -737,6 +729,9 @@ msgstr "%1 〉"
737729#~ "Hallitset nyt reunaeleet, joten voit aloittaa puhelimen "
738730#~ "käytön<br><br>Napauta näyttöä aloittaaksesi"
739731
732+#~ msgid "Unlock SIM"
733+#~ msgstr "Avaa SIM-kortin lukitus"
734+
740735#~ msgid "All"
741736#~ msgstr "Kaikki"
742737
@@ -752,6 +747,9 @@ msgstr "%1 〉"
752747#~ msgid "Done"
753748#~ msgstr "Valmis"
754749
750+#~ msgid "Roaming"
751+#~ msgstr "Verkkovierailu"
752+
755753#~ msgid "Log out"
756754#~ msgstr "Kirjaudu ulos"
757755
po/fo.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2014-01-14 20:08+0000\n"
1212"Last-Translator: Jógvan Olsen <jeggy@jebster.net>\n"
1313"Language-Team: Faroese <fo@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr ""
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr ""
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr ""
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr ""
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr ""
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr ""
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr ""
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr ""
@@ -416,14 +416,6 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr ""
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr ""
426−
427419#: qml/Tutorial/TutorialBottom.qml:28
428420msgid "Open special menus"
429421msgstr ""
po/fr.po+22−22
@@ -7,16 +7,16 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-02-12 00:28+0000\n"
11−"PO-Revision-Date: 2016-02-13 09:30+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
11+"PO-Revision-Date: 2016-02-28 17:22+0000\n"
1212"Last-Translator: Anne <anneonyme017@gmail.com>\n"
1313"Language-Team: French <fr@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: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -181,38 +181,38 @@ msgstr "Se reconnecter maintenant !"
181181msgid "Close all"
182182msgstr "Tout fermer"
183183
184−#: qml/Dash/DashPageHeader.qml:266
184+#: qml/Dash/DashPageHeader.qml:270
185185msgctxt "Button: Open the Ubuntu Store"
186186msgid "Store"
187187msgstr "Logithèque"
188188
189−#: qml/Dash/DashPageHeader.qml:273
189+#: qml/Dash/DashPageHeader.qml:277
190190msgctxt "Button: Start a search in the current dash scope"
191191msgid "Search"
192192msgstr "Rechercher"
193193
194−#: qml/Dash/DashPageHeader.qml:283
194+#: qml/Dash/DashPageHeader.qml:287
195195msgctxt "Button: Show the current dash scope settings"
196196msgid "Settings"
197197msgstr "Paramètres"
198198
199−#: qml/Dash/DashPageHeader.qml:290
199+#: qml/Dash/DashPageHeader.qml:294
200200msgid "Remove from Favorites"
201201msgstr "Retirer des favoris"
202202
203−#: qml/Dash/DashPageHeader.qml:290
203+#: qml/Dash/DashPageHeader.qml:294
204204msgid "Add to Favorites"
205205msgstr "Ajouter aux favoris"
206206
207−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
207+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
208208msgid "See less"
209209msgstr "Voir moins"
210210
211−#: qml/Dash/GenericScopeView.qml:587
211+#: qml/Dash/GenericScopeView.qml:565
212212msgid "See all"
213213msgstr "Tout voir"
214214
215−#: qml/Dash/GenericScopeView.qml:649
215+#: qml/Dash/GenericScopeView.qml:627
216216msgctxt "Label: Hint for dash search line edit"
217217msgid "Search"
218218msgstr "Rechercher"
@@ -434,14 +434,6 @@ msgctxt "Button: Call back on phone"
434434msgid "Call back"
435435msgstr "Rappeler"
436436
437−#: qml/Panel/Indicators/ModemInfoItem.qml:105
438−msgid "Unlock SIM"
439−msgstr "Déverrouiller la carte SIM"
440−
441−#: qml/Panel/Indicators/RoamingIndication.qml:27
442−msgid "Roaming"
443−msgstr "Roaming"
444−
445437#: qml/Tutorial/TutorialBottom.qml:28
446438msgid "Open special menus"
447439msgstr "Ouvrir les menus spéciaux"
@@ -506,7 +498,7 @@ msgstr "Salut !"
506498
507499#: qml/Wizard/Pages/10-welcome.qml:44
508500msgid "Welcome to your Ubuntu device."
509−msgstr ""
501+msgstr "Bienvenue sur votre appareil Ubuntu."
510502
511503#: qml/Wizard/Pages/10-welcome.qml:52
512504msgid "Let’s get started."
@@ -540,6 +532,8 @@ msgstr "Sécurité de verrouillage"
540532#: qml/Wizard/Pages/30-passwd-type.qml:79
541533msgid "Please select how you’d like to unlock your device."
542534msgstr ""
535+"Veuillez sélectionner la façon dont vous souhaitez déverrouiller votre "
536+"appareil."
543537
544538#: qml/Wizard/Pages/30-passwd-type.qml:102
545539msgctxt "Label: Type of security method"
@@ -649,7 +643,7 @@ msgstr "Beau travail !"
649643
650644#: qml/Wizard/Pages/80-finished.qml:46
651645msgid "Your device is now ready to use."
652−msgstr ""
646+msgstr "Votre appareil est maintenant prêt à être utilisé."
653647
654648#: qml/Wizard/Pages/80-finished.qml:53
655649msgid "Finish"
@@ -754,6 +748,9 @@ msgstr "%1 〉"
754748#~ "Faites glisser votre doigt à partir du bord gauche pour afficher le lanceur "
755749#~ "d'applications."
756750
751+#~ msgid "Unlock SIM"
752+#~ msgstr "Déverrouiller la carte SIM"
753+
757754#~ msgid "Power off"
758755#~ msgstr "Éteindre"
759756
@@ -769,6 +766,9 @@ msgstr "%1 〉"
769766#~ msgid "Favorites"
770767#~ msgstr "Favorites"
771768
769+#~ msgid "Roaming"
770+#~ msgstr "Roaming"
771+
772772#~ msgid "Log out"
773773#~ msgstr "Se déconnecter"
774774
po/ga.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2016-01-25 11:33+0000\n"
1212"Last-Translator: Joshua Kiley <Unknown>\n"
1313"Language-Team: Irish <ga@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -174,38 +174,38 @@ msgstr "Athnasc anois!"
174174msgid "Close all"
175175msgstr "Dún Gach Rud"
176176
177−#: qml/Dash/DashPageHeader.qml:266
177+#: qml/Dash/DashPageHeader.qml:270
178178msgctxt "Button: Open the Ubuntu Store"
179179msgid "Store"
180180msgstr "Siopa"
181181
182−#: qml/Dash/DashPageHeader.qml:273
182+#: qml/Dash/DashPageHeader.qml:277
183183msgctxt "Button: Start a search in the current dash scope"
184184msgid "Search"
185185msgstr "Cuardach"
186186
187−#: qml/Dash/DashPageHeader.qml:283
187+#: qml/Dash/DashPageHeader.qml:287
188188msgctxt "Button: Show the current dash scope settings"
189189msgid "Settings"
190190msgstr "Socruithe"
191191
192−#: qml/Dash/DashPageHeader.qml:290
192+#: qml/Dash/DashPageHeader.qml:294
193193msgid "Remove from Favorites"
194194msgstr "Bain ó Cheanáin"
195195
196−#: qml/Dash/DashPageHeader.qml:290
196+#: qml/Dash/DashPageHeader.qml:294
197197msgid "Add to Favorites"
198198msgstr "Cuir le Ceanáin"
199199
200−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
200+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
201201msgid "See less"
202202msgstr "Taispeáin níos lú"
203203
204−#: qml/Dash/GenericScopeView.qml:587
204+#: qml/Dash/GenericScopeView.qml:565
205205msgid "See all"
206206msgstr "Taispeáin gach rud"
207207
208−#: qml/Dash/GenericScopeView.qml:649
208+#: qml/Dash/GenericScopeView.qml:627
209209msgctxt "Label: Hint for dash search line edit"
210210msgid "Search"
211211msgstr "Cuardach"
@@ -426,14 +426,6 @@ msgctxt "Button: Call back on phone"
426426msgid "Call back"
427427msgstr "Glaoch Ar Ais"
428428
429−#: qml/Panel/Indicators/ModemInfoItem.qml:105
430−msgid "Unlock SIM"
431−msgstr "Díghlasail an SIM"
432−
433−#: qml/Panel/Indicators/RoamingIndication.qml:27
434−msgid "Roaming"
435−msgstr "Fánaíocht"
436−
437429#: qml/Tutorial/TutorialBottom.qml:28
438430msgid "Open special menus"
439431msgstr "Oscail Roghchláir Speisialta"
@@ -680,6 +672,12 @@ msgstr ""
680672msgid "%1 〉"
681673msgstr ""
682674
675+#~ msgid "Unlock SIM"
676+#~ msgstr "Díghlasail an SIM"
677+
678+#~ msgid "Roaming"
679+#~ msgstr "Fánaíocht"
680+
683681#~ msgid "Welcome to your Ubuntu phone."
684682#~ msgstr "Tá fáilte romhat chuig do fhón Ubuntu."
685683
po/gd.po+20−21
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-07-16 10:56+0000\n"
1212"Last-Translator: GunChleoc <Unknown>\n"
1313"Language-Team: Fòram na Gàidhlig\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
1818"(n > 2 && n < 20) ? 2 : 3;\n"
19−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
20−"X-Generator: Launchpad (build 17925)\n"
19+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
20+"X-Generator: Launchpad (build 17936)\n"
2121"Language: gd\n"
2222
2323#: plugins/IntegratedLightDM/Greeter.cpp:112
@@ -183,38 +183,38 @@ msgstr "Ath-cheangail an-dràsta!"
183183msgid "Close all"
184184msgstr "Dùin na h-uile"
185185
186−#: qml/Dash/DashPageHeader.qml:266
186+#: qml/Dash/DashPageHeader.qml:270
187187msgctxt "Button: Open the Ubuntu Store"
188188msgid "Store"
189189msgstr "Am bùth"
190190
191−#: qml/Dash/DashPageHeader.qml:273
191+#: qml/Dash/DashPageHeader.qml:277
192192msgctxt "Button: Start a search in the current dash scope"
193193msgid "Search"
194194msgstr "Lorg"
195195
196−#: qml/Dash/DashPageHeader.qml:283
196+#: qml/Dash/DashPageHeader.qml:287
197197msgctxt "Button: Show the current dash scope settings"
198198msgid "Settings"
199199msgstr "Roghainnean"
200200
201−#: qml/Dash/DashPageHeader.qml:290
201+#: qml/Dash/DashPageHeader.qml:294
202202msgid "Remove from Favorites"
203203msgstr "Thoir air falbh o na h-annsachdan"
204204
205−#: qml/Dash/DashPageHeader.qml:290
205+#: qml/Dash/DashPageHeader.qml:294
206206msgid "Add to Favorites"
207207msgstr "Cuir ris na h-annsachdan"
208208
209−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
209+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
210210msgid "See less"
211211msgstr "Seall nas lugha"
212212
213−#: qml/Dash/GenericScopeView.qml:587
213+#: qml/Dash/GenericScopeView.qml:565
214214msgid "See all"
215215msgstr "Seall na h-uile"
216216
217−#: qml/Dash/GenericScopeView.qml:649
217+#: qml/Dash/GenericScopeView.qml:627
218218msgctxt "Label: Hint for dash search line edit"
219219msgid "Search"
220220msgstr "Lorg"
@@ -443,14 +443,6 @@ msgctxt "Button: Call back on phone"
443443msgid "Call back"
444444msgstr "Fònaig air ais"
445445
446−#: qml/Panel/Indicators/ModemInfoItem.qml:105
447−msgid "Unlock SIM"
448−msgstr "Thoir a' ghlas far an SIM"
449−
450−#: qml/Panel/Indicators/RoamingIndication.qml:27
451−msgid "Roaming"
452−msgstr "Air fàrsan"
453−
454446#: qml/Tutorial/TutorialBottom.qml:28
455447msgid "Open special menus"
456448msgstr "Fosgail na clàran-taice sònraichte"
@@ -515,7 +507,7 @@ msgstr "Shin thu!"
515507
516508#: qml/Wizard/Pages/10-welcome.qml:44
517509msgid "Welcome to your Ubuntu device."
518−msgstr ""
510+msgstr "Fàilte dhan uidheam Ubuntu agad."
519511
520512#: qml/Wizard/Pages/10-welcome.qml:52
521513msgid "Let’s get started."
@@ -547,6 +539,7 @@ msgstr "Glas tèarainteachd"
547539#: qml/Wizard/Pages/30-passwd-type.qml:79
548540msgid "Please select how you’d like to unlock your device."
549541msgstr ""
542+"Tagh an dòigh sa tha thu airson a' ghlas a thoirt far an uidheam agad."
550543
551544#: qml/Wizard/Pages/30-passwd-type.qml:102
552545msgctxt "Label: Type of security method"
@@ -658,7 +651,7 @@ msgstr "Shin thu!"
658651
659652#: qml/Wizard/Pages/80-finished.qml:46
660653msgid "Your device is now ready to use."
661−msgstr ""
654+msgstr "Tha an t-uidheam agad ullamh a-nis."
662655
663656#: qml/Wizard/Pages/80-finished.qml:53
664657msgid "Finish"
@@ -765,6 +758,9 @@ msgstr "%1 〉"
765758#~ msgid "All"
766759#~ msgstr "Na h-uile"
767760
761+#~ msgid "Unlock SIM"
762+#~ msgstr "Thoir a' ghlas far an SIM"
763+
768764#~ msgid "Favorites"
769765#~ msgstr "Annsachdan"
770766
@@ -777,6 +773,9 @@ msgstr "%1 〉"
777773#~ msgid "Done"
778774#~ msgstr "Deiseil"
779775
776+#~ msgid "Roaming"
777+#~ msgstr "Air fàrsan"
778+
780779#~ msgid "Log out"
781780#~ msgstr "Clàraich a-mach"
782781
po/gl.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2016-01-15 14:56+0000\n"
1212"Last-Translator: Marcos Lans <Unknown>\n"
1313"Language-Team: Galician <gl@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -173,38 +173,38 @@ msgstr "Reconectar agora."
173173msgid "Close all"
174174msgstr "Pechar todo"
175175
176−#: qml/Dash/DashPageHeader.qml:266
176+#: qml/Dash/DashPageHeader.qml:270
177177msgctxt "Button: Open the Ubuntu Store"
178178msgid "Store"
179179msgstr "Tenda"
180180
181−#: qml/Dash/DashPageHeader.qml:273
181+#: qml/Dash/DashPageHeader.qml:277
182182msgctxt "Button: Start a search in the current dash scope"
183183msgid "Search"
184184msgstr "Buscar"
185185
186−#: qml/Dash/DashPageHeader.qml:283
186+#: qml/Dash/DashPageHeader.qml:287
187187msgctxt "Button: Show the current dash scope settings"
188188msgid "Settings"
189189msgstr "Axustes"
190190
191−#: qml/Dash/DashPageHeader.qml:290
191+#: qml/Dash/DashPageHeader.qml:294
192192msgid "Remove from Favorites"
193193msgstr "Eliminar dos favoritos"
194194
195−#: qml/Dash/DashPageHeader.qml:290
195+#: qml/Dash/DashPageHeader.qml:294
196196msgid "Add to Favorites"
197197msgstr "Engadir aos favoritos"
198198
199−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
199+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
200200msgid "See less"
201201msgstr "Ver menos"
202202
203−#: qml/Dash/GenericScopeView.qml:587
203+#: qml/Dash/GenericScopeView.qml:565
204204msgid "See all"
205205msgstr "Ver todo"
206206
207−#: qml/Dash/GenericScopeView.qml:649
207+#: qml/Dash/GenericScopeView.qml:627
208208msgctxt "Label: Hint for dash search line edit"
209209msgid "Search"
210210msgstr "Buscar"
@@ -424,14 +424,6 @@ msgctxt "Button: Call back on phone"
424424msgid "Call back"
425425msgstr "Chamar de volta"
426426
427−#: qml/Panel/Indicators/ModemInfoItem.qml:105
428−msgid "Unlock SIM"
429−msgstr "Desbloquear a SIM"
430−
431−#: qml/Panel/Indicators/RoamingIndication.qml:27
432−msgid "Roaming"
433−msgstr "Itinerancia"
434−
435427#: qml/Tutorial/TutorialBottom.qml:28
436428msgid "Open special menus"
437429msgstr "Abrir menús especiais"
@@ -738,6 +730,9 @@ msgstr "%1 〉"
738730#~ msgid "All"
739731#~ msgstr "Todos"
740732
733+#~ msgid "Unlock SIM"
734+#~ msgstr "Desbloquear a SIM"
735+
741736#~ msgid "Favorites"
742737#~ msgstr "Favoritos"
743738
@@ -750,6 +745,9 @@ msgstr "%1 〉"
750745#~ msgid "Done"
751746#~ msgstr "Feito"
752747
748+#~ msgid "Roaming"
749+#~ msgstr "Itinerancia"
750+
753751#~ msgid "Log out"
754752#~ msgstr "Saír da sesión"
755753
po/gv.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-04-02 14:24+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Manx <gv@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : (n == 2 ? 1 : 2);\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -178,38 +178,38 @@ msgstr ""
178178msgid "Close all"
179179msgstr ""
180180
181−#: qml/Dash/DashPageHeader.qml:266
181+#: qml/Dash/DashPageHeader.qml:270
182182msgctxt "Button: Open the Ubuntu Store"
183183msgid "Store"
184184msgstr ""
185185
186−#: qml/Dash/DashPageHeader.qml:273
186+#: qml/Dash/DashPageHeader.qml:277
187187msgctxt "Button: Start a search in the current dash scope"
188188msgid "Search"
189189msgstr ""
190190
191−#: qml/Dash/DashPageHeader.qml:283
191+#: qml/Dash/DashPageHeader.qml:287
192192msgctxt "Button: Show the current dash scope settings"
193193msgid "Settings"
194194msgstr ""
195195
196−#: qml/Dash/DashPageHeader.qml:290
196+#: qml/Dash/DashPageHeader.qml:294
197197msgid "Remove from Favorites"
198198msgstr "Jean scughey woish Reihyn"
199199
200−#: qml/Dash/DashPageHeader.qml:290
200+#: qml/Dash/DashPageHeader.qml:294
201201msgid "Add to Favorites"
202202msgstr "Cur ayns Reihyn"
203203
204−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
204+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
205205msgid "See less"
206206msgstr "Faik ny sloo"
207207
208−#: qml/Dash/GenericScopeView.qml:587
208+#: qml/Dash/GenericScopeView.qml:565
209209msgid "See all"
210210msgstr "Faik ooilley"
211211
212−#: qml/Dash/GenericScopeView.qml:649
212+#: qml/Dash/GenericScopeView.qml:627
213213msgctxt "Label: Hint for dash search line edit"
214214msgid "Search"
215215msgstr ""
@@ -423,14 +423,6 @@ msgctxt "Button: Call back on phone"
423423msgid "Call back"
424424msgstr ""
425425
426−#: qml/Panel/Indicators/ModemInfoItem.qml:105
427−msgid "Unlock SIM"
428−msgstr ""
429−
430−#: qml/Panel/Indicators/RoamingIndication.qml:27
431−msgid "Roaming"
432−msgstr ""
433−
434426#: qml/Tutorial/TutorialBottom.qml:28
435427msgid "Open special menus"
436428msgstr ""
po/he.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-07-12 08:47+0000\n"
1212"Last-Translator: Yaron <sh.yaron@gmail.com>\n"
1313"Language-Team: Hebrew <he@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr "חנות"
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr "חיפוש"
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr "הגדרות"
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr "הסרה מהמועדפים"
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr "הוספה למועדפים"
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr "לראות פחות"
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr "להציג הכול"
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr "חיפוש"
@@ -416,14 +416,6 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr "שחרור נעילת ה־SIM"
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr "נדידה"
426−
427419#: qml/Tutorial/TutorialBottom.qml:28
428420msgid "Open special menus"
429421msgstr "פתיחת תפריטים מיוחדים"
@@ -730,9 +722,15 @@ msgstr ""
730722#~ msgid "All"
731723#~ msgstr "הכול"
732724
725+#~ msgid "Roaming"
726+#~ msgstr "נדידה"
727+
733728#~ msgid "Favorites"
734729#~ msgstr "מועדפים"
735730
731+#~ msgid "Unlock SIM"
732+#~ msgstr "שחרור נעילת ה־SIM"
733+
736734#~ msgid "Welcome to your Ubuntu phone."
737735#~ msgstr "ברוך בואך לטלפון האובונטו שלך."
738736
po/hi.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2014-01-15 01:49+0000\n"
1212"Last-Translator: Siddhanathan Shanmugam <Unknown>\n"
1313"Language-Team: Hindi <hi@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr ""
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr ""
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr ""
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr ""
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr ""
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr ""
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr ""
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr ""
@@ -416,14 +416,6 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr ""
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr ""
426−
427419#: qml/Tutorial/TutorialBottom.qml:28
428420msgid "Open special menus"
429421msgstr ""
po/hr.po+20−22
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2013-06-27 04:14+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Croatian <hr@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
20−"X-Generator: Launchpad (build 17925)\n"
19+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
20+"X-Generator: Launchpad (build 17936)\n"
2121
2222#: plugins/IntegratedLightDM/Greeter.cpp:112
2323msgid "Password: "
@@ -176,38 +176,38 @@ msgstr "Ponovno poveži odmah!"
176176msgid "Close all"
177177msgstr "Zatvori sve"
178178
179−#: qml/Dash/DashPageHeader.qml:266
179+#: qml/Dash/DashPageHeader.qml:270
180180msgctxt "Button: Open the Ubuntu Store"
181181msgid "Store"
182182msgstr "Trgovina"
183183
184−#: qml/Dash/DashPageHeader.qml:273
184+#: qml/Dash/DashPageHeader.qml:277
185185msgctxt "Button: Start a search in the current dash scope"
186186msgid "Search"
187187msgstr "Pretraži"
188188
189−#: qml/Dash/DashPageHeader.qml:283
189+#: qml/Dash/DashPageHeader.qml:287
190190msgctxt "Button: Show the current dash scope settings"
191191msgid "Settings"
192192msgstr "Postavke"
193193
194−#: qml/Dash/DashPageHeader.qml:290
194+#: qml/Dash/DashPageHeader.qml:294
195195msgid "Remove from Favorites"
196196msgstr "Ukloni iz omiljenih"
197197
198−#: qml/Dash/DashPageHeader.qml:290
198+#: qml/Dash/DashPageHeader.qml:294
199199msgid "Add to Favorites"
200200msgstr "Dodaj u omiljene"
201201
202−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
202+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
203203msgid "See less"
204204msgstr "Prikaži manje"
205205
206−#: qml/Dash/GenericScopeView.qml:587
206+#: qml/Dash/GenericScopeView.qml:565
207207msgid "See all"
208208msgstr "Prikaži sve"
209209
210−#: qml/Dash/GenericScopeView.qml:649
210+#: qml/Dash/GenericScopeView.qml:627
211211msgctxt "Label: Hint for dash search line edit"
212212msgid "Search"
213213msgstr "Pretraži"
@@ -430,14 +430,6 @@ msgctxt "Button: Call back on phone"
430430msgid "Call back"
431431msgstr "Uzvrati poziv"
432432
433−#: qml/Panel/Indicators/ModemInfoItem.qml:105
434−msgid "Unlock SIM"
435−msgstr "Otključaj SIM"
436−
437−#: qml/Panel/Indicators/RoamingIndication.qml:27
438−msgid "Roaming"
439−msgstr "Roaming"
440−
441433#: qml/Tutorial/TutorialBottom.qml:28
442434msgid "Open special menus"
443435msgstr "Otvori posebne izbornike"
@@ -502,7 +494,7 @@ msgstr "Bok!"
502494
503495#: qml/Wizard/Pages/10-welcome.qml:44
504496msgid "Welcome to your Ubuntu device."
505−msgstr ""
497+msgstr "Dobrodošli u svoj Ubuntu uređaj."
506498
507499#: qml/Wizard/Pages/10-welcome.qml:52
508500msgid "Let’s get started."
@@ -533,7 +525,7 @@ msgstr "Sigurnosno zaključavanje"
533525
534526#: qml/Wizard/Pages/30-passwd-type.qml:79
535527msgid "Please select how you’d like to unlock your device."
536−msgstr ""
528+msgstr "Odaberite kako želite otključavati svoj uređaj."
537529
538530#: qml/Wizard/Pages/30-passwd-type.qml:102
539531msgctxt "Label: Type of security method"
@@ -641,7 +633,7 @@ msgstr "Dobro obavljeno!"
641633
642634#: qml/Wizard/Pages/80-finished.qml:46
643635msgid "Your device is now ready to use."
644−msgstr ""
636+msgstr "Vaš uređaj je sada spreman za upotrebu."
645637
646638#: qml/Wizard/Pages/80-finished.qml:53
647639msgid "Finish"
@@ -702,6 +694,12 @@ msgstr "%1 〉"
702694#~ msgid "Search"
703695#~ msgstr "Pretraživanje"
704696
697+#~ msgid "Unlock SIM"
698+#~ msgstr "Otključaj SIM"
699+
700+#~ msgid "Roaming"
701+#~ msgstr "Roaming"
702+
705703#~ msgid "%a %l:%M %p"
706704#~ msgstr "%a %l:%M %p"
707705
po/hu.po+21−23
@@ -7,16 +7,16 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-02-12 00:28+0000\n"
11−"PO-Revision-Date: 2015-12-30 09:49+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
11+"PO-Revision-Date: 2016-02-16 07:23+0000\n"
1212"Last-Translator: Richard Somlói <ricsipontaz@gmail.com>\n"
1313"Language-Team: Hungarian <hu@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: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -175,38 +175,38 @@ msgstr "Újracsatlakozás most!"
175175msgid "Close all"
176176msgstr "Minden bezárása"
177177
178−#: qml/Dash/DashPageHeader.qml:266
178+#: qml/Dash/DashPageHeader.qml:270
179179msgctxt "Button: Open the Ubuntu Store"
180180msgid "Store"
181181msgstr "Áruház"
182182
183−#: qml/Dash/DashPageHeader.qml:273
183+#: qml/Dash/DashPageHeader.qml:277
184184msgctxt "Button: Start a search in the current dash scope"
185185msgid "Search"
186186msgstr "Keresés"
187187
188−#: qml/Dash/DashPageHeader.qml:283
188+#: qml/Dash/DashPageHeader.qml:287
189189msgctxt "Button: Show the current dash scope settings"
190190msgid "Settings"
191191msgstr "Beállítások"
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Remove from Favorites"
195195msgstr "Eltávolítás a kedvencek közül"
196196
197−#: qml/Dash/DashPageHeader.qml:290
197+#: qml/Dash/DashPageHeader.qml:294
198198msgid "Add to Favorites"
199199msgstr "Hozzáadás a kedvencekhez"
200200
201−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
201+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
202202msgid "See less"
203203msgstr "Kevesebb"
204204
205−#: qml/Dash/GenericScopeView.qml:587
205+#: qml/Dash/GenericScopeView.qml:565
206206msgid "See all"
207207msgstr "Összes megtekintése"
208208
209−#: qml/Dash/GenericScopeView.qml:649
209+#: qml/Dash/GenericScopeView.qml:627
210210msgctxt "Label: Hint for dash search line edit"
211211msgid "Search"
212212msgstr "Keresés"
@@ -426,14 +426,6 @@ msgctxt "Button: Call back on phone"
426426msgid "Call back"
427427msgstr "Visszahívás"
428428
429−#: qml/Panel/Indicators/ModemInfoItem.qml:105
430−msgid "Unlock SIM"
431−msgstr "SIM feloldása"
432−
433−#: qml/Panel/Indicators/RoamingIndication.qml:27
434−msgid "Roaming"
435−msgstr "Barangolás"
436−
437429#: qml/Tutorial/TutorialBottom.qml:28
438430msgid "Open special menus"
439431msgstr "Speciális menük elérése"
@@ -498,7 +490,7 @@ msgstr "Üdvözöljük!"
498490
499491#: qml/Wizard/Pages/10-welcome.qml:44
500492msgid "Welcome to your Ubuntu device."
501−msgstr ""
493+msgstr "Köszönti az Ubuntus eszköze."
502494
503495#: qml/Wizard/Pages/10-welcome.qml:52
504496msgid "Let’s get started."
@@ -531,7 +523,7 @@ msgstr "Képernyőzárolás"
531523
532524#: qml/Wizard/Pages/30-passwd-type.qml:79
533525msgid "Please select how you’d like to unlock your device."
534−msgstr ""
526+msgstr "Válassza ki, hogy milyen módon szeretné feloldani az eszközét."
535527
536528#: qml/Wizard/Pages/30-passwd-type.qml:102
537529msgctxt "Label: Type of security method"
@@ -638,7 +630,7 @@ msgstr "Szép munka!"
638630
639631#: qml/Wizard/Pages/80-finished.qml:46
640632msgid "Your device is now ready to use."
641−msgstr ""
633+msgstr "Az eszköze készen áll a használatra."
642634
643635#: qml/Wizard/Pages/80-finished.qml:53
644636msgid "Finish"
@@ -744,6 +736,12 @@ msgstr "%1 〉"
744736#~ msgid "All"
745737#~ msgstr "Összes"
746738
739+#~ msgid "Unlock SIM"
740+#~ msgstr "SIM feloldása"
741+
742+#~ msgid "Roaming"
743+#~ msgstr "Barangolás"
744+
747745#~ msgid "Favorites"
748746#~ msgstr "Kedvencek"
749747
po/hy.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2014-10-28 06:34+0000\n"
1212"Last-Translator: Vahan Harutyunyan <Unknown>\n"
1313"Language-Team: Armenian <hy@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:36+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:57+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -175,38 +175,38 @@ msgstr ""
175175msgid "Close all"
176176msgstr ""
177177
178−#: qml/Dash/DashPageHeader.qml:266
178+#: qml/Dash/DashPageHeader.qml:270
179179msgctxt "Button: Open the Ubuntu Store"
180180msgid "Store"
181181msgstr ""
182182
183−#: qml/Dash/DashPageHeader.qml:273
183+#: qml/Dash/DashPageHeader.qml:277
184184msgctxt "Button: Start a search in the current dash scope"
185185msgid "Search"
186186msgstr ""
187187
188−#: qml/Dash/DashPageHeader.qml:283
188+#: qml/Dash/DashPageHeader.qml:287
189189msgctxt "Button: Show the current dash scope settings"
190190msgid "Settings"
191191msgstr ""
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Remove from Favorites"
195195msgstr "Հեռացնել ընտրյալների ցուցակից"
196196
197−#: qml/Dash/DashPageHeader.qml:290
197+#: qml/Dash/DashPageHeader.qml:294
198198msgid "Add to Favorites"
199199msgstr "Ավելացնել ընտրյալների ցուցակում"
200200
201−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
201+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
202202msgid "See less"
203203msgstr ""
204204
205−#: qml/Dash/GenericScopeView.qml:587
205+#: qml/Dash/GenericScopeView.qml:565
206206msgid "See all"
207207msgstr "Տեսնել բոլորը"
208208
209−#: qml/Dash/GenericScopeView.qml:649
209+#: qml/Dash/GenericScopeView.qml:627
210210msgctxt "Label: Hint for dash search line edit"
211211msgid "Search"
212212msgstr ""
@@ -420,14 +420,6 @@ msgctxt "Button: Call back on phone"
420420msgid "Call back"
421421msgstr ""
422422
423−#: qml/Panel/Indicators/ModemInfoItem.qml:105
424−msgid "Unlock SIM"
425−msgstr "Ապաբլոկավորել SIM-ը"
426−
427−#: qml/Panel/Indicators/RoamingIndication.qml:27
428−msgid "Roaming"
429−msgstr "Ռոումինգ"
430−
431423#: qml/Tutorial/TutorialBottom.qml:28
432424msgid "Open special menus"
433425msgstr ""
@@ -733,6 +725,12 @@ msgstr ""
733725#~ msgid "All"
734726#~ msgstr "Բոլորը"
735727
728+#~ msgid "Unlock SIM"
729+#~ msgstr "Ապաբլոկավորել SIM-ը"
730+
731+#~ msgid "Roaming"
732+#~ msgstr "Ռոումինգ"
733+
736734#~ msgid "Please re-enter"
737735#~ msgstr "Խնդրում ենք նորից մուտքագրել"
738736
po/ia.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-08-25 19:31+0000\n"
1212"Last-Translator: karm <melo@carmu.com>\n"
1313"Language-Team: Interlingua <ia@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -176,38 +176,38 @@ msgstr "Reconnecter nunc!"
176176msgid "Close all"
177177msgstr "Clauder toto"
178178
179−#: qml/Dash/DashPageHeader.qml:266
179+#: qml/Dash/DashPageHeader.qml:270
180180msgctxt "Button: Open the Ubuntu Store"
181181msgid "Store"
182182msgstr "Salva"
183183
184−#: qml/Dash/DashPageHeader.qml:273
184+#: qml/Dash/DashPageHeader.qml:277
185185msgctxt "Button: Start a search in the current dash scope"
186186msgid "Search"
187187msgstr "Cerca"
188188
189−#: qml/Dash/DashPageHeader.qml:283
189+#: qml/Dash/DashPageHeader.qml:287
190190msgctxt "Button: Show the current dash scope settings"
191191msgid "Settings"
192192msgstr "Configurationes"
193193
194−#: qml/Dash/DashPageHeader.qml:290
194+#: qml/Dash/DashPageHeader.qml:294
195195msgid "Remove from Favorites"
196196msgstr "Remover ex le Favoritos"
197197
198−#: qml/Dash/DashPageHeader.qml:290
198+#: qml/Dash/DashPageHeader.qml:294
199199msgid "Add to Favorites"
200200msgstr "Adder al Favoritos"
201201
202−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
202+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
203203msgid "See less"
204204msgstr "Vider minus"
205205
206−#: qml/Dash/GenericScopeView.qml:587
206+#: qml/Dash/GenericScopeView.qml:565
207207msgid "See all"
208208msgstr "Vider toto"
209209
210−#: qml/Dash/GenericScopeView.qml:649
210+#: qml/Dash/GenericScopeView.qml:627
211211msgctxt "Label: Hint for dash search line edit"
212212msgid "Search"
213213msgstr "Cerca"
@@ -425,14 +425,6 @@ msgctxt "Button: Call back on phone"
425425msgid "Call back"
426426msgstr "Appellar retro"
427427
428−#: qml/Panel/Indicators/ModemInfoItem.qml:105
429−msgid "Unlock SIM"
430−msgstr "Liberar le SIM"
431−
432−#: qml/Panel/Indicators/RoamingIndication.qml:27
433−msgid "Roaming"
434−msgstr "Roaming"
435−
436428#: qml/Tutorial/TutorialBottom.qml:28
437429msgid "Open special menus"
438430msgstr "Aperi le menus special"
@@ -757,6 +749,12 @@ msgstr "%1 〉"
757749#~ msgid "Speaking..."
758750#~ msgstr "Parlante..."
759751
752+#~ msgid "Unlock SIM"
753+#~ msgstr "Liberar le SIM"
754+
755+#~ msgid "Roaming"
756+#~ msgstr "Roaming"
757+
760758#~ msgid "Please re-enter"
761759#~ msgstr "Per favor re-inserer"
762760
po/id.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2013-06-26 22:35+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Indonesian <id@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -174,38 +174,38 @@ msgstr ""
174174msgid "Close all"
175175msgstr ""
176176
177−#: qml/Dash/DashPageHeader.qml:266
177+#: qml/Dash/DashPageHeader.qml:270
178178msgctxt "Button: Open the Ubuntu Store"
179179msgid "Store"
180180msgstr ""
181181
182−#: qml/Dash/DashPageHeader.qml:273
182+#: qml/Dash/DashPageHeader.qml:277
183183msgctxt "Button: Start a search in the current dash scope"
184184msgid "Search"
185185msgstr ""
186186
187−#: qml/Dash/DashPageHeader.qml:283
187+#: qml/Dash/DashPageHeader.qml:287
188188msgctxt "Button: Show the current dash scope settings"
189189msgid "Settings"
190190msgstr ""
191191
192−#: qml/Dash/DashPageHeader.qml:290
192+#: qml/Dash/DashPageHeader.qml:294
193193msgid "Remove from Favorites"
194194msgstr "Hapus dari Favorit"
195195
196−#: qml/Dash/DashPageHeader.qml:290
196+#: qml/Dash/DashPageHeader.qml:294
197197msgid "Add to Favorites"
198198msgstr "Tambah ke Favorit"
199199
200−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
200+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
201201msgid "See less"
202202msgstr "Lihat lebih sedikit"
203203
204−#: qml/Dash/GenericScopeView.qml:587
204+#: qml/Dash/GenericScopeView.qml:565
205205msgid "See all"
206206msgstr "Lihat semua"
207207
208−#: qml/Dash/GenericScopeView.qml:649
208+#: qml/Dash/GenericScopeView.qml:627
209209msgctxt "Label: Hint for dash search line edit"
210210msgid "Search"
211211msgstr ""
@@ -423,14 +423,6 @@ msgctxt "Button: Call back on phone"
423423msgid "Call back"
424424msgstr ""
425425
426−#: qml/Panel/Indicators/ModemInfoItem.qml:105
427−msgid "Unlock SIM"
428−msgstr "Buka Kunci SIM"
429−
430−#: qml/Panel/Indicators/RoamingIndication.qml:27
431−msgid "Roaming"
432−msgstr "Roaming"
433−
434426#: qml/Tutorial/TutorialBottom.qml:28
435427msgid "Open special menus"
436428msgstr ""
@@ -745,6 +737,12 @@ msgstr ""
745737#~ msgid "Favorites"
746738#~ msgstr "Favorit"
747739
740+#~ msgid "Roaming"
741+#~ msgstr "Roaming"
742+
743+#~ msgid "Unlock SIM"
744+#~ msgstr "Buka Kunci SIM"
745+
748746#~ msgid "Manage Scopes"
749747#~ msgstr "Kelola Skup"
750748
po/is.po+17−19
@@ -9,7 +9,7 @@ msgid ""
99msgstr ""
1010"Project-Id-Version: po_unity8-is\n"
1111"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
12−"POT-Creation-Date: 2016-02-12 00:28+0000\n"
12+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1313"PO-Revision-Date: 2014-11-13 09:32+0000\n"
1414"Last-Translator: Sveinn í Felli <sv1@fellsnet.is>\n"
1515"Language-Team: Icelandic <translation-team-is@lists.sourceforge.net>\n"
@@ -17,8 +17,8 @@ msgstr ""
1717"Content-Type: text/plain; charset=UTF-8\n"
1818"Content-Transfer-Encoding: 8bit\n"
1919"Plural-Forms: nplurals=2; plural=n != 1;\n"
20−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
21−"X-Generator: Launchpad (build 17925)\n"
20+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
21+"X-Generator: Launchpad (build 17936)\n"
2222"Language: is\n"
2323
2424#: plugins/IntegratedLightDM/Greeter.cpp:112
@@ -180,38 +180,38 @@ msgstr ""
180180msgid "Close all"
181181msgstr ""
182182
183−#: qml/Dash/DashPageHeader.qml:266
183+#: qml/Dash/DashPageHeader.qml:270
184184msgctxt "Button: Open the Ubuntu Store"
185185msgid "Store"
186186msgstr ""
187187
188−#: qml/Dash/DashPageHeader.qml:273
188+#: qml/Dash/DashPageHeader.qml:277
189189msgctxt "Button: Start a search in the current dash scope"
190190msgid "Search"
191191msgstr ""
192192
193−#: qml/Dash/DashPageHeader.qml:283
193+#: qml/Dash/DashPageHeader.qml:287
194194msgctxt "Button: Show the current dash scope settings"
195195msgid "Settings"
196196msgstr ""
197197
198−#: qml/Dash/DashPageHeader.qml:290
198+#: qml/Dash/DashPageHeader.qml:294
199199msgid "Remove from Favorites"
200200msgstr "Fjarlægja úr Eftirlæti"
201201
202−#: qml/Dash/DashPageHeader.qml:290
202+#: qml/Dash/DashPageHeader.qml:294
203203msgid "Add to Favorites"
204204msgstr "Bæta við Eftirlæti"
205205
206−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
206+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
207207msgid "See less"
208208msgstr "Sjá minna"
209209
210−#: qml/Dash/GenericScopeView.qml:587
210+#: qml/Dash/GenericScopeView.qml:565
211211msgid "See all"
212212msgstr "Sjá allt"
213213
214−#: qml/Dash/GenericScopeView.qml:649
214+#: qml/Dash/GenericScopeView.qml:627
215215msgctxt "Label: Hint for dash search line edit"
216216msgid "Search"
217217msgstr ""
@@ -429,14 +429,6 @@ msgctxt "Button: Call back on phone"
429429msgid "Call back"
430430msgstr ""
431431
432−#: qml/Panel/Indicators/ModemInfoItem.qml:105
433−msgid "Unlock SIM"
434−msgstr "Aflæsa SIM-korti"
435−
436−#: qml/Panel/Indicators/RoamingIndication.qml:27
437−msgid "Roaming"
438−msgstr "Ráphamur"
439−
440432#: qml/Tutorial/TutorialBottom.qml:28
441433msgid "Open special menus"
442434msgstr ""
@@ -756,6 +748,9 @@ msgstr ""
756748#~ msgid "All"
757749#~ msgstr "Allt"
758750
751+#~ msgid "Unlock SIM"
752+#~ msgstr "Aflæsa SIM-korti"
753+
759754#~ msgid "Favorites"
760755#~ msgstr "Eftirlæti"
761756
@@ -765,6 +760,9 @@ msgstr ""
765760#~ msgid "Done"
766761#~ msgstr "Lokið"
767762
763+#~ msgid "Roaming"
764+#~ msgstr "Ráphamur"
765+
768766#~ msgid "Please re-enter"
769767#~ msgstr "Settu aftur inn"
770768
po/it.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-09-18 08:24+0000\n"
1212"Last-Translator: Claudio Arseni <claudio.arseni@gmail.com>\n"
1313"Language-Team: Italian <it@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -179,38 +179,38 @@ msgstr "Collegare ora."
179179msgid "Close all"
180180msgstr "Chiudi tutto"
181181
182−#: qml/Dash/DashPageHeader.qml:266
182+#: qml/Dash/DashPageHeader.qml:270
183183msgctxt "Button: Open the Ubuntu Store"
184184msgid "Store"
185185msgstr "Store"
186186
187−#: qml/Dash/DashPageHeader.qml:273
187+#: qml/Dash/DashPageHeader.qml:277
188188msgctxt "Button: Start a search in the current dash scope"
189189msgid "Search"
190190msgstr "Cerca"
191191
192−#: qml/Dash/DashPageHeader.qml:283
192+#: qml/Dash/DashPageHeader.qml:287
193193msgctxt "Button: Show the current dash scope settings"
194194msgid "Settings"
195195msgstr "Impostazioni"
196196
197−#: qml/Dash/DashPageHeader.qml:290
197+#: qml/Dash/DashPageHeader.qml:294
198198msgid "Remove from Favorites"
199199msgstr "Rimuovi dai preferiti"
200200
201−#: qml/Dash/DashPageHeader.qml:290
201+#: qml/Dash/DashPageHeader.qml:294
202202msgid "Add to Favorites"
203203msgstr "Aggiungi ai preferiti"
204204
205−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
205+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
206206msgid "See less"
207207msgstr "Mostra meno"
208208
209−#: qml/Dash/GenericScopeView.qml:587
209+#: qml/Dash/GenericScopeView.qml:565
210210msgid "See all"
211211msgstr "Mostra tutto"
212212
213−#: qml/Dash/GenericScopeView.qml:649
213+#: qml/Dash/GenericScopeView.qml:627
214214msgctxt "Label: Hint for dash search line edit"
215215msgid "Search"
216216msgstr "Cerca"
@@ -428,14 +428,6 @@ msgctxt "Button: Call back on phone"
428428msgid "Call back"
429429msgstr "Richiama"
430430
431−#: qml/Panel/Indicators/ModemInfoItem.qml:105
432−msgid "Unlock SIM"
433−msgstr "Sblocca SIM"
434−
435−#: qml/Panel/Indicators/RoamingIndication.qml:27
436−msgid "Roaming"
437−msgstr "Roaming"
438−
439431#: qml/Tutorial/TutorialBottom.qml:28
440432msgid "Open special menus"
441433msgstr "Apri menù speciali"
@@ -743,6 +735,9 @@ msgstr "%1 〉"
743735#~ msgid "All"
744736#~ msgstr "Tutto"
745737
738+#~ msgid "Unlock SIM"
739+#~ msgstr "Sblocca SIM"
740+
746741#~ msgid "Favorites"
747742#~ msgstr "Preferiti"
748743
@@ -755,6 +750,9 @@ msgstr "%1 〉"
755750#~ msgid "Done"
756751#~ msgstr "Fatto"
757752
753+#~ msgid "Roaming"
754+#~ msgstr "Roaming"
755+
758756#~ msgid "Log out"
759757#~ msgstr "Termina sessione"
760758
po/ja.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-10-05 10:05+0000\n"
1212"Last-Translator: Kentaro Kazuhama <Unknown>\n"
1313"Language-Team: Japanese <ja@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -170,38 +170,38 @@ msgstr ""
170170msgid "Close all"
171171msgstr ""
172172
173−#: qml/Dash/DashPageHeader.qml:266
173+#: qml/Dash/DashPageHeader.qml:270
174174msgctxt "Button: Open the Ubuntu Store"
175175msgid "Store"
176176msgstr ""
177177
178−#: qml/Dash/DashPageHeader.qml:273
178+#: qml/Dash/DashPageHeader.qml:277
179179msgctxt "Button: Start a search in the current dash scope"
180180msgid "Search"
181181msgstr ""
182182
183−#: qml/Dash/DashPageHeader.qml:283
183+#: qml/Dash/DashPageHeader.qml:287
184184msgctxt "Button: Show the current dash scope settings"
185185msgid "Settings"
186186msgstr ""
187187
188−#: qml/Dash/DashPageHeader.qml:290
188+#: qml/Dash/DashPageHeader.qml:294
189189msgid "Remove from Favorites"
190190msgstr "お気に入りから削除する"
191191
192−#: qml/Dash/DashPageHeader.qml:290
192+#: qml/Dash/DashPageHeader.qml:294
193193msgid "Add to Favorites"
194194msgstr "お気に入りに追加する"
195195
196−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
196+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
197197msgid "See less"
198198msgstr "隠す"
199199
200−#: qml/Dash/GenericScopeView.qml:587
200+#: qml/Dash/GenericScopeView.qml:565
201201msgid "See all"
202202msgstr "すべて表示する"
203203
204−#: qml/Dash/GenericScopeView.qml:649
204+#: qml/Dash/GenericScopeView.qml:627
205205msgctxt "Label: Hint for dash search line edit"
206206msgid "Search"
207207msgstr ""
@@ -415,14 +415,6 @@ msgctxt "Button: Call back on phone"
415415msgid "Call back"
416416msgstr ""
417417
418−#: qml/Panel/Indicators/ModemInfoItem.qml:105
419−msgid "Unlock SIM"
420−msgstr "SIMのアンロック"
421−
422−#: qml/Panel/Indicators/RoamingIndication.qml:27
423−msgid "Roaming"
424−msgstr "ローミング"
425−
426418#: qml/Tutorial/TutorialBottom.qml:28
427419msgid "Open special menus"
428420msgstr ""
@@ -722,6 +714,12 @@ msgstr ""
722714#~ msgid "Favorites"
723715#~ msgstr "お気に入り"
724716
717+#~ msgid "Unlock SIM"
718+#~ msgstr "SIMのアンロック"
719+
720+#~ msgid "Roaming"
721+#~ msgstr "ローミング"
722+
725723#~ msgid "Done"
726724#~ msgstr "完了"
727725
po/km.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2014-08-20 02:48+0000\n"
1212"Last-Translator: Sophea Sok <sksophea@gmail.com>\n"
1313"Language-Team: Khmer <km@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -173,38 +173,38 @@ msgstr ""
173173msgid "Close all"
174174msgstr ""
175175
176−#: qml/Dash/DashPageHeader.qml:266
176+#: qml/Dash/DashPageHeader.qml:270
177177msgctxt "Button: Open the Ubuntu Store"
178178msgid "Store"
179179msgstr "រក្សាទុក"
180180
181−#: qml/Dash/DashPageHeader.qml:273
181+#: qml/Dash/DashPageHeader.qml:277
182182msgctxt "Button: Start a search in the current dash scope"
183183msgid "Search"
184184msgstr "ស្វែងរក"
185185
186−#: qml/Dash/DashPageHeader.qml:283
186+#: qml/Dash/DashPageHeader.qml:287
187187msgctxt "Button: Show the current dash scope settings"
188188msgid "Settings"
189189msgstr "ការ​កំណត់"
190190
191−#: qml/Dash/DashPageHeader.qml:290
191+#: qml/Dash/DashPageHeader.qml:294
192192msgid "Remove from Favorites"
193193msgstr "យក​ចេញពី​សំណព្វ"
194194
195−#: qml/Dash/DashPageHeader.qml:290
195+#: qml/Dash/DashPageHeader.qml:294
196196msgid "Add to Favorites"
197197msgstr "បន្ថែម​ទៅ​សណព្វ"
198198
199−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
199+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
200200msgid "See less"
201201msgstr "មើល​តិច​ជាង"
202202
203−#: qml/Dash/GenericScopeView.qml:587
203+#: qml/Dash/GenericScopeView.qml:565
204204msgid "See all"
205205msgstr "មើល​ទាំងអស់"
206206
207−#: qml/Dash/GenericScopeView.qml:649
207+#: qml/Dash/GenericScopeView.qml:627
208208msgctxt "Label: Hint for dash search line edit"
209209msgid "Search"
210210msgstr "ស្វែងរក"
@@ -424,14 +424,6 @@ msgctxt "Button: Call back on phone"
424424msgid "Call back"
425425msgstr ""
426426
427−#: qml/Panel/Indicators/ModemInfoItem.qml:105
428−msgid "Unlock SIM"
429−msgstr "ដោះ​សោ​ស៊ីម"
430−
431−#: qml/Panel/Indicators/RoamingIndication.qml:27
432−msgid "Roaming"
433−msgstr "រ៉ូមីង"
434−
435427#: qml/Tutorial/TutorialBottom.qml:28
436428msgid "Open special menus"
437429msgstr ""
@@ -731,6 +723,9 @@ msgstr "%1 〉"
731723#~ msgid "All"
732724#~ msgstr "ទាំងអស់"
733725
726+#~ msgid "Unlock SIM"
727+#~ msgstr "ដោះ​សោ​ស៊ីម"
728+
734729#~ msgid "Favorites"
735730#~ msgstr "និយម"
736731
@@ -743,6 +738,9 @@ msgstr "%1 〉"
743738#~ msgid "Done"
744739#~ msgstr "ធ្វើរួច"
745740
741+#~ msgid "Roaming"
742+#~ msgstr "រ៉ូមីង"
743+
746744#~ msgid "Power"
747745#~ msgstr "បីទ/បើក"
748746
po/kn.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2013-06-27 05:43+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Kannada <kn@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr ""
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr ""
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr ""
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr ""
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr ""
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr ""
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr ""
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr ""
@@ -416,14 +416,6 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr ""
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr ""
426−
427419#: qml/Tutorial/TutorialBottom.qml:28
428420msgid "Open special menus"
429421msgstr ""
po/ko.po+20−22
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2014-08-19 13:02+0000\n"
1212"Last-Translator: MinSik CHO <Unknown>\n"
1313"Language-Team: Korean <ko@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -170,38 +170,38 @@ msgstr "지급 다시 접속!"
170170msgid "Close all"
171171msgstr "모두 닫기"
172172
173−#: qml/Dash/DashPageHeader.qml:266
173+#: qml/Dash/DashPageHeader.qml:270
174174msgctxt "Button: Open the Ubuntu Store"
175175msgid "Store"
176176msgstr "상점"
177177
178−#: qml/Dash/DashPageHeader.qml:273
178+#: qml/Dash/DashPageHeader.qml:277
179179msgctxt "Button: Start a search in the current dash scope"
180180msgid "Search"
181181msgstr "검색"
182182
183−#: qml/Dash/DashPageHeader.qml:283
183+#: qml/Dash/DashPageHeader.qml:287
184184msgctxt "Button: Show the current dash scope settings"
185185msgid "Settings"
186186msgstr "설정"
187187
188−#: qml/Dash/DashPageHeader.qml:290
188+#: qml/Dash/DashPageHeader.qml:294
189189msgid "Remove from Favorites"
190190msgstr "즐겨찾기에서 제거"
191191
192−#: qml/Dash/DashPageHeader.qml:290
192+#: qml/Dash/DashPageHeader.qml:294
193193msgid "Add to Favorites"
194194msgstr "즐겨찾기에 추가"
195195
196−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
196+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
197197msgid "See less"
198198msgstr "간단히 표시"
199199
200−#: qml/Dash/GenericScopeView.qml:587
200+#: qml/Dash/GenericScopeView.qml:565
201201msgid "See all"
202202msgstr "모두 보기"
203203
204−#: qml/Dash/GenericScopeView.qml:649
204+#: qml/Dash/GenericScopeView.qml:627
205205msgctxt "Label: Hint for dash search line edit"
206206msgid "Search"
207207msgstr "검색"
@@ -412,14 +412,6 @@ msgctxt "Button: Call back on phone"
412412msgid "Call back"
413413msgstr "부재중 번호로 전화"
414414
415−#: qml/Panel/Indicators/ModemInfoItem.qml:105
416−msgid "Unlock SIM"
417−msgstr "심 카드 잠금 해제"
418−
419−#: qml/Panel/Indicators/RoamingIndication.qml:27
420−msgid "Roaming"
421−msgstr "로밍"
422−
423415#: qml/Tutorial/TutorialBottom.qml:28
424416msgid "Open special menus"
425417msgstr "특별 메뉴 열기"
@@ -484,7 +476,7 @@ msgstr "안녕!"
484476
485477#: qml/Wizard/Pages/10-welcome.qml:44
486478msgid "Welcome to your Ubuntu device."
487−msgstr ""
479+msgstr "우분투를 사용해주셔서 감사합니다."
488480
489481#: qml/Wizard/Pages/10-welcome.qml:52
490482msgid "Let’s get started."
@@ -515,7 +507,7 @@ msgstr "보안 잠금"
515507
516508#: qml/Wizard/Pages/30-passwd-type.qml:79
517509msgid "Please select how you’d like to unlock your device."
518−msgstr ""
510+msgstr "장치의 잠금 해제 방법을 선택해주십시오."
519511
520512#: qml/Wizard/Pages/30-passwd-type.qml:102
521513msgctxt "Label: Type of security method"
@@ -616,7 +608,7 @@ msgstr "잘 하셨습니다!"
616608
617609#: qml/Wizard/Pages/80-finished.qml:46
618610msgid "Your device is now ready to use."
619−msgstr ""
611+msgstr "이제 장치를 사용할 수 있습니다."
620612
621613#: qml/Wizard/Pages/80-finished.qml:53
622614msgid "Finish"
@@ -695,6 +687,9 @@ msgstr "%1 〉"
695687#~ msgid "All"
696688#~ msgstr "모두"
697689
690+#~ msgid "Roaming"
691+#~ msgstr "로밍"
692+
698693#~ msgid "Favorites"
699694#~ msgstr "즐겨찾기"
700695
@@ -731,6 +726,9 @@ msgstr "%1 〉"
731726#~ msgid "Loading. Please Wait..."
732727#~ msgstr "불러오는 중 입니다. 짐시 기다려주십시오..."
733728
729+#~ msgid "Unlock SIM"
730+#~ msgstr "심 카드 잠금 해제"
731+
734732#~ msgid "Try swiping from the top edge to access the indicators"
735733#~ msgstr "위쪽 가장자리에서 쓸면 알림에 접근할 수 있습니다."
736734
po/ku.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2014-09-10 13:14+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Kurdish <ku@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -173,38 +173,38 @@ msgstr ""
173173msgid "Close all"
174174msgstr ""
175175
176−#: qml/Dash/DashPageHeader.qml:266
176+#: qml/Dash/DashPageHeader.qml:270
177177msgctxt "Button: Open the Ubuntu Store"
178178msgid "Store"
179179msgstr ""
180180
181−#: qml/Dash/DashPageHeader.qml:273
181+#: qml/Dash/DashPageHeader.qml:277
182182msgctxt "Button: Start a search in the current dash scope"
183183msgid "Search"
184184msgstr ""
185185
186−#: qml/Dash/DashPageHeader.qml:283
186+#: qml/Dash/DashPageHeader.qml:287
187187msgctxt "Button: Show the current dash scope settings"
188188msgid "Settings"
189189msgstr ""
190190
191−#: qml/Dash/DashPageHeader.qml:290
191+#: qml/Dash/DashPageHeader.qml:294
192192msgid "Remove from Favorites"
193193msgstr "Ji nav Bijareyan rake"
194194
195−#: qml/Dash/DashPageHeader.qml:290
195+#: qml/Dash/DashPageHeader.qml:294
196196msgid "Add to Favorites"
197197msgstr "Li Bijareyan zêde bike"
198198
199−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
199+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
200200msgid "See less"
201201msgstr "Hindiktir bibîne"
202202
203−#: qml/Dash/GenericScopeView.qml:587
203+#: qml/Dash/GenericScopeView.qml:565
204204msgid "See all"
205205msgstr "Tevî bibîne"
206206
207−#: qml/Dash/GenericScopeView.qml:649
207+#: qml/Dash/GenericScopeView.qml:627
208208msgctxt "Label: Hint for dash search line edit"
209209msgid "Search"
210210msgstr ""
@@ -422,14 +422,6 @@ msgctxt "Button: Call back on phone"
422422msgid "Call back"
423423msgstr ""
424424
425−#: qml/Panel/Indicators/ModemInfoItem.qml:105
426−msgid "Unlock SIM"
427−msgstr "Kilîda SIMê veke"
428−
429−#: qml/Panel/Indicators/RoamingIndication.qml:27
430−msgid "Roaming"
431−msgstr "Geriyan"
432−
433425#: qml/Tutorial/TutorialBottom.qml:28
434426msgid "Open special menus"
435427msgstr ""
@@ -752,3 +744,9 @@ msgstr ""
752744
753745#~ msgid "Speaking..."
754746#~ msgstr "Diaxive..."
747+
748+#~ msgid "Unlock SIM"
749+#~ msgstr "Kilîda SIMê veke"
750+
751+#~ msgid "Roaming"
752+#~ msgstr "Geriyan"
po/ky.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2013-06-27 06:17+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Kirghiz <ky@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr ""
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr ""
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr ""
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr ""
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr ""
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr ""
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr ""
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr ""
@@ -416,14 +416,6 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr ""
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr ""
426−
427419#: qml/Tutorial/TutorialBottom.qml:28
428420msgid "Open special menus"
429421msgstr ""
po/lo.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2013-10-02 10:00+0000\n"
1212"Last-Translator: Anousak <anousak@gmail.com>\n"
1313"Language-Team: Lao <lo@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr ""
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr ""
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr ""
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr ""
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr ""
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr ""
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr ""
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr ""
@@ -416,14 +416,6 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr ""
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr ""
426−
427419#: qml/Tutorial/TutorialBottom.qml:28
428420msgid "Open special menus"
429421msgstr ""
po/lt.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2014-05-19 17:15+0000\n"
1212"Last-Translator: Mantas Kriaučiūnas <mantas@akl.lt>\n"
1313"Language-Team: Lithuanian <lt@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"(n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
20−"X-Generator: Launchpad (build 17925)\n"
19+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
20+"X-Generator: Launchpad (build 17936)\n"
2121
2222#: plugins/IntegratedLightDM/Greeter.cpp:112
2323msgid "Password: "
@@ -172,38 +172,38 @@ msgstr ""
172172msgid "Close all"
173173msgstr ""
174174
175−#: qml/Dash/DashPageHeader.qml:266
175+#: qml/Dash/DashPageHeader.qml:270
176176msgctxt "Button: Open the Ubuntu Store"
177177msgid "Store"
178178msgstr ""
179179
180−#: qml/Dash/DashPageHeader.qml:273
180+#: qml/Dash/DashPageHeader.qml:277
181181msgctxt "Button: Start a search in the current dash scope"
182182msgid "Search"
183183msgstr ""
184184
185−#: qml/Dash/DashPageHeader.qml:283
185+#: qml/Dash/DashPageHeader.qml:287
186186msgctxt "Button: Show the current dash scope settings"
187187msgid "Settings"
188188msgstr ""
189189
190−#: qml/Dash/DashPageHeader.qml:290
190+#: qml/Dash/DashPageHeader.qml:294
191191msgid "Remove from Favorites"
192192msgstr ""
193193
194−#: qml/Dash/DashPageHeader.qml:290
194+#: qml/Dash/DashPageHeader.qml:294
195195msgid "Add to Favorites"
196196msgstr ""
197197
198−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
198+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
199199msgid "See less"
200200msgstr ""
201201
202−#: qml/Dash/GenericScopeView.qml:587
202+#: qml/Dash/GenericScopeView.qml:565
203203msgid "See all"
204204msgstr ""
205205
206−#: qml/Dash/GenericScopeView.qml:649
206+#: qml/Dash/GenericScopeView.qml:627
207207msgctxt "Label: Hint for dash search line edit"
208208msgid "Search"
209209msgstr ""
@@ -417,14 +417,6 @@ msgctxt "Button: Call back on phone"
417417msgid "Call back"
418418msgstr ""
419419
420−#: qml/Panel/Indicators/ModemInfoItem.qml:105
421−msgid "Unlock SIM"
422−msgstr ""
423−
424−#: qml/Panel/Indicators/RoamingIndication.qml:27
425−msgid "Roaming"
426−msgstr ""
427−
428420#: qml/Tutorial/TutorialBottom.qml:28
429421msgid "Open special menus"
430422msgstr ""
po/lv.po+17−19
@@ -8,7 +8,7 @@ msgid ""
88msgstr ""
99"Project-Id-Version: unity\n"
1010"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
11−"POT-Creation-Date: 2016-02-12 00:28+0000\n"
11+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1212"PO-Revision-Date: 2015-11-22 19:13+0000\n"
1313"Last-Translator: Klavs Anson <anson.klavs@gmail.com>\n"
1414"Language-Team: Latvian <lata-l10n@googlegroups.com>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Type: text/plain; charset=UTF-8\n"
1717"Content-Transfer-Encoding: 8bit\n"
1818"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
20−"X-Generator: Launchpad (build 17925)\n"
19+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
20+"X-Generator: Launchpad (build 17936)\n"
2121"Language: lv\n"
2222
2323#: plugins/IntegratedLightDM/Greeter.cpp:112
@@ -176,38 +176,38 @@ msgstr ""
176176msgid "Close all"
177177msgstr ""
178178
179−#: qml/Dash/DashPageHeader.qml:266
179+#: qml/Dash/DashPageHeader.qml:270
180180msgctxt "Button: Open the Ubuntu Store"
181181msgid "Store"
182182msgstr "Veikals"
183183
184−#: qml/Dash/DashPageHeader.qml:273
184+#: qml/Dash/DashPageHeader.qml:277
185185msgctxt "Button: Start a search in the current dash scope"
186186msgid "Search"
187187msgstr "Meklēt"
188188
189−#: qml/Dash/DashPageHeader.qml:283
189+#: qml/Dash/DashPageHeader.qml:287
190190msgctxt "Button: Show the current dash scope settings"
191191msgid "Settings"
192192msgstr "Iestatījumi"
193193
194−#: qml/Dash/DashPageHeader.qml:290
194+#: qml/Dash/DashPageHeader.qml:294
195195msgid "Remove from Favorites"
196196msgstr "Izņemt no izlases"
197197
198−#: qml/Dash/DashPageHeader.qml:290
198+#: qml/Dash/DashPageHeader.qml:294
199199msgid "Add to Favorites"
200200msgstr "Pievienot izlasei"
201201
202−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
202+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
203203msgid "See less"
204204msgstr "Skatīt mazāk"
205205
206−#: qml/Dash/GenericScopeView.qml:587
206+#: qml/Dash/GenericScopeView.qml:565
207207msgid "See all"
208208msgstr "Skatīt visus"
209209
210−#: qml/Dash/GenericScopeView.qml:649
210+#: qml/Dash/GenericScopeView.qml:627
211211msgctxt "Label: Hint for dash search line edit"
212212msgid "Search"
213213msgstr "Meklēt"
@@ -428,14 +428,6 @@ msgctxt "Button: Call back on phone"
428428msgid "Call back"
429429msgstr "Atzvanīt"
430430
431−#: qml/Panel/Indicators/ModemInfoItem.qml:105
432−msgid "Unlock SIM"
433−msgstr "Atbloķēt SIM"
434−
435−#: qml/Panel/Indicators/RoamingIndication.qml:27
436−msgid "Roaming"
437−msgstr "Viesabonēšana"
438−
439431#: qml/Tutorial/TutorialBottom.qml:28
440432msgid "Open special menus"
441433msgstr "Atvērt īpašas izvēlnes"
@@ -729,12 +721,18 @@ msgstr "%1 〉"
729721#~ msgid "All"
730722#~ msgstr "Visi"
731723
724+#~ msgid "Unlock SIM"
725+#~ msgstr "Atbloķēt SIM"
726+
732727#~ msgid "Favorites"
733728#~ msgstr "Iecienītās"
734729
735730#~ msgid "Done"
736731#~ msgstr "Pabeigts"
737732
733+#~ msgid "Roaming"
734+#~ msgstr "Viesabonēšana"
735+
738736#~ msgid "Store"
739737#~ msgstr "Veikals"
740738
po/ml.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2013-11-23 11:44+0000\n"
1212"Last-Translator: ST Alfas <Unknown>\n"
1313"Language-Team: Malayalam <ml@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr ""
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr ""
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr ""
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr ""
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr ""
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr ""
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr ""
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr ""
@@ -416,14 +416,6 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr ""
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr ""
426−
427419#: qml/Tutorial/TutorialBottom.qml:28
428420msgid "Open special menus"
429421msgstr ""
po/mr.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2014-01-14 19:54+0000\n"
1212"Last-Translator: Rohan Deshmukh <Unknown>\n"
1313"Language-Team: Marathi <mr@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr ""
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr "शोध"
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr ""
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr "आवड पासून काढूण टाका"
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr "आवड मध्ये जोडा"
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr ""
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr ""
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr "शोध"
@@ -416,14 +416,6 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr ""
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr ""
426−
427419#: qml/Tutorial/TutorialBottom.qml:28
428420msgid "Open special menus"
429421msgstr ""
po/ms.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2014-01-17 09:05+0000\n"
1212"Last-Translator: abuyop <Unknown>\n"
1313"Language-Team: Malay <ms@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -173,38 +173,38 @@ msgstr "Sambung semula sekarang!"
173173msgid "Close all"
174174msgstr "Tutup semua"
175175
176−#: qml/Dash/DashPageHeader.qml:266
176+#: qml/Dash/DashPageHeader.qml:270
177177msgctxt "Button: Open the Ubuntu Store"
178178msgid "Store"
179179msgstr "Kedai"
180180
181−#: qml/Dash/DashPageHeader.qml:273
181+#: qml/Dash/DashPageHeader.qml:277
182182msgctxt "Button: Start a search in the current dash scope"
183183msgid "Search"
184184msgstr "Gelintar"
185185
186−#: qml/Dash/DashPageHeader.qml:283
186+#: qml/Dash/DashPageHeader.qml:287
187187msgctxt "Button: Show the current dash scope settings"
188188msgid "Settings"
189189msgstr "Tetapan"
190190
191−#: qml/Dash/DashPageHeader.qml:290
191+#: qml/Dash/DashPageHeader.qml:294
192192msgid "Remove from Favorites"
193193msgstr "Buang dari Kegemaran"
194194
195−#: qml/Dash/DashPageHeader.qml:290
195+#: qml/Dash/DashPageHeader.qml:294
196196msgid "Add to Favorites"
197197msgstr "Tambah ke Kegemaran"
198198
199−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
199+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
200200msgid "See less"
201201msgstr "Lihat kurang"
202202
203−#: qml/Dash/GenericScopeView.qml:587
203+#: qml/Dash/GenericScopeView.qml:565
204204msgid "See all"
205205msgstr "Lihat semua"
206206
207−#: qml/Dash/GenericScopeView.qml:649
207+#: qml/Dash/GenericScopeView.qml:627
208208msgctxt "Label: Hint for dash search line edit"
209209msgid "Search"
210210msgstr "Gelintar"
@@ -422,14 +422,6 @@ msgctxt "Button: Call back on phone"
422422msgid "Call back"
423423msgstr "Panggilan semula"
424424
425−#: qml/Panel/Indicators/ModemInfoItem.qml:105
426−msgid "Unlock SIM"
427−msgstr "Buka SIM"
428−
429−#: qml/Panel/Indicators/RoamingIndication.qml:27
430−msgid "Roaming"
431−msgstr "Perayauan"
432−
433425#: qml/Tutorial/TutorialBottom.qml:28
434426msgid "Open special menus"
435427msgstr "Buka menu khas"
@@ -758,12 +750,18 @@ msgstr "%1 〉"
758750#~ msgid "Done"
759751#~ msgstr "Selesai"
760752
753+#~ msgid "Roaming"
754+#~ msgstr "Perayauan"
755+
761756#~ msgid "Please re-enter"
762757#~ msgstr "Sila masuk-semula"
763758
764759#~ msgid "Manage Scopes"
765760#~ msgstr "Urus Skop"
766761
762+#~ msgid "Unlock SIM"
763+#~ msgstr "Buka SIM"
764+
767765#~ msgid ""
768766#~ "You have now mastered the edge gestures and can start using the "
769767#~ "phone<br><br>Tap on the screen to start"
po/my.po+14−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2013-12-12 11:12+0000\n"
1212"Last-Translator: Pyae Sone <Unknown>\n"
1313"Language-Team: Burmese <my@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr "မှတ်သားပါ"
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr "ရှာဖွေရန်"
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr "ချိန်ညှိစရာများ"
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr "နှစ်သက်မှုအဖြစ်မှပယ်ဖျက်ပါ"
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr "နှစ်သက်မှုအဖြစ်ထည့်ပါ"
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr ""
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr ""
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr "ရှာဖွေရန်"
@@ -416,14 +416,6 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr ""
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr "Roaming"
426−
427419#: qml/Tutorial/TutorialBottom.qml:28
428420msgid "Open special menus"
429421msgstr ""
@@ -698,3 +690,6 @@ msgstr ""
698690
699691#~ msgid "Well done"
700692#~ msgstr "ကောင်းအောင်ပြုလုပ်ခဲ့သည်"
693+
694+#~ msgid "Roaming"
695+#~ msgstr "Roaming"
po/nb.po+22−22
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-07-05 19:44+0000\n"
1212"Last-Translator: Mathias Bynke <Unknown>\n"
1313"Language-Team: Norwegian Bokmal <nb@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -177,38 +177,38 @@ msgstr "Koble til nå!"
177177msgid "Close all"
178178msgstr "Lukk alle"
179179
180−#: qml/Dash/DashPageHeader.qml:266
180+#: qml/Dash/DashPageHeader.qml:270
181181msgctxt "Button: Open the Ubuntu Store"
182182msgid "Store"
183183msgstr "Butikk"
184184
185−#: qml/Dash/DashPageHeader.qml:273
185+#: qml/Dash/DashPageHeader.qml:277
186186msgctxt "Button: Start a search in the current dash scope"
187187msgid "Search"
188188msgstr "Søk"
189189
190−#: qml/Dash/DashPageHeader.qml:283
190+#: qml/Dash/DashPageHeader.qml:287
191191msgctxt "Button: Show the current dash scope settings"
192192msgid "Settings"
193193msgstr "Innstillinger"
194194
195−#: qml/Dash/DashPageHeader.qml:290
195+#: qml/Dash/DashPageHeader.qml:294
196196msgid "Remove from Favorites"
197197msgstr "Fjern fra favoritter"
198198
199−#: qml/Dash/DashPageHeader.qml:290
199+#: qml/Dash/DashPageHeader.qml:294
200200msgid "Add to Favorites"
201201msgstr "Legg til i favoritter"
202202
203−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
203+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
204204msgid "See less"
205205msgstr "Vis mindre"
206206
207−#: qml/Dash/GenericScopeView.qml:587
207+#: qml/Dash/GenericScopeView.qml:565
208208msgid "See all"
209209msgstr "Vis alt"
210210
211−#: qml/Dash/GenericScopeView.qml:649
211+#: qml/Dash/GenericScopeView.qml:627
212212msgctxt "Label: Hint for dash search line edit"
213213msgid "Search"
214214msgstr "Søk"
@@ -267,6 +267,8 @@ msgid ""
267267"Your device is now connected to an external display. Use this screen as a "
268268"touch pad to interact with the mouse."
269269msgstr ""
270+"Enheten er nå koblet til en ekstern skjerm. Bruk denne skjermen som "
271+"styreplate."
270272
271273#: qml/Greeter/CoverPage.qml:107
272274msgid "Unlock"
@@ -426,14 +428,6 @@ msgctxt "Button: Call back on phone"
426428msgid "Call back"
427429msgstr "Ring tilbake"
428430
429−#: qml/Panel/Indicators/ModemInfoItem.qml:105
430−msgid "Unlock SIM"
431−msgstr "Lås opp SIM"
432−
433−#: qml/Panel/Indicators/RoamingIndication.qml:27
434−msgid "Roaming"
435−msgstr "Fremmednett"
436−
437431#: qml/Tutorial/TutorialBottom.qml:28
438432msgid "Open special menus"
439433msgstr "Åpne spesialmenyer"
@@ -498,7 +492,7 @@ msgstr "Hei!"
498492
499493#: qml/Wizard/Pages/10-welcome.qml:44
500494msgid "Welcome to your Ubuntu device."
501−msgstr ""
495+msgstr "Velkommen til Ubuntu-enheten din."
502496
503497#: qml/Wizard/Pages/10-welcome.qml:52
504498msgid "Let’s get started."
@@ -529,7 +523,7 @@ msgstr "Låsesikkerhet"
529523
530524#: qml/Wizard/Pages/30-passwd-type.qml:79
531525msgid "Please select how you’d like to unlock your device."
532−msgstr ""
526+msgstr "Velg hvordan du vil låse opp enheten."
533527
534528#: qml/Wizard/Pages/30-passwd-type.qml:102
535529msgctxt "Label: Type of security method"
@@ -636,7 +630,7 @@ msgstr "Godt jobba!"
636630
637631#: qml/Wizard/Pages/80-finished.qml:46
638632msgid "Your device is now ready to use."
639−msgstr ""
633+msgstr "Enheten er nå klar til bruk."
640634
641635#: qml/Wizard/Pages/80-finished.qml:53
642636msgid "Finish"
@@ -731,6 +725,9 @@ msgstr "%1 〉"
731725#~ msgid "All"
732726#~ msgstr "Alt"
733727
728+#~ msgid "Unlock SIM"
729+#~ msgstr "Lås opp SIM"
730+
734731#~ msgid "Favorites"
735732#~ msgstr "Favoritter"
736733
@@ -743,6 +740,9 @@ msgstr "%1 〉"
743740#~ msgid "Done"
744741#~ msgstr "Ferdig"
745742
743+#~ msgid "Roaming"
744+#~ msgstr "Fremmednett"
745+
746746#~ msgid "Swipe from the left to reveal the launcher for quick access to apps"
747747#~ msgstr "Skyv fra venstre for å få tilgang til programoppstarteren"
748748
po/ne.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-12-06 15:11+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Nepali <ne@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr ""
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr ""
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr ""
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr ""
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr ""
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr ""
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr ""
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr ""
@@ -416,14 +416,6 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr ""
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr ""
426−
427419#: qml/Tutorial/TutorialBottom.qml:28
428420msgid "Open special menus"
429421msgstr ""
po/nl.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-07-07 07:14+0000\n"
1212"Last-Translator: Hannie Dumoleyn <Unknown>\n"
1313"Language-Team: Dutch <nl@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -177,38 +177,38 @@ msgstr ""
177177msgid "Close all"
178178msgstr ""
179179
180−#: qml/Dash/DashPageHeader.qml:266
180+#: qml/Dash/DashPageHeader.qml:270
181181msgctxt "Button: Open the Ubuntu Store"
182182msgid "Store"
183183msgstr "Winkel"
184184
185−#: qml/Dash/DashPageHeader.qml:273
185+#: qml/Dash/DashPageHeader.qml:277
186186msgctxt "Button: Start a search in the current dash scope"
187187msgid "Search"
188188msgstr "Zoeken"
189189
190−#: qml/Dash/DashPageHeader.qml:283
190+#: qml/Dash/DashPageHeader.qml:287
191191msgctxt "Button: Show the current dash scope settings"
192192msgid "Settings"
193193msgstr "Instellingen"
194194
195−#: qml/Dash/DashPageHeader.qml:290
195+#: qml/Dash/DashPageHeader.qml:294
196196msgid "Remove from Favorites"
197197msgstr "Verwijderen uit favorieten"
198198
199−#: qml/Dash/DashPageHeader.qml:290
199+#: qml/Dash/DashPageHeader.qml:294
200200msgid "Add to Favorites"
201201msgstr "Toevoegen aan favorieten"
202202
203−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
203+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
204204msgid "See less"
205205msgstr "Minder zien"
206206
207−#: qml/Dash/GenericScopeView.qml:587
207+#: qml/Dash/GenericScopeView.qml:565
208208msgid "See all"
209209msgstr "Alles zien"
210210
211−#: qml/Dash/GenericScopeView.qml:649
211+#: qml/Dash/GenericScopeView.qml:627
212212msgctxt "Label: Hint for dash search line edit"
213213msgid "Search"
214214msgstr "Zoeken"
@@ -426,14 +426,6 @@ msgctxt "Button: Call back on phone"
426426msgid "Call back"
427427msgstr ""
428428
429−#: qml/Panel/Indicators/ModemInfoItem.qml:105
430−msgid "Unlock SIM"
431−msgstr "Simkaart deblokkeren"
432−
433−#: qml/Panel/Indicators/RoamingIndication.qml:27
434−msgid "Roaming"
435−msgstr "Roaming"
436−
437429#: qml/Tutorial/TutorialBottom.qml:28
438430msgid "Open special menus"
439431msgstr "Speciale menu's openen"
@@ -746,6 +738,9 @@ msgstr "%1 〉"
746738#~ msgid "Store"
747739#~ msgstr "Winkel"
748740
741+#~ msgid "Roaming"
742+#~ msgstr "Roaming"
743+
749744#~ msgid "Done"
750745#~ msgstr "Klaar"
751746
@@ -767,6 +762,9 @@ msgstr "%1 〉"
767762#~ msgid "Power"
768763#~ msgstr "Energie"
769764
765+#~ msgid "Unlock SIM"
766+#~ msgstr "Simkaart deblokkeren"
767+
770768#~ msgid "Restart"
771769#~ msgstr "Herstarten"
772770
po/nn.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-05-12 11:32+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Norwegian Nynorsk <nn@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr ""
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr ""
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr ""
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr ""
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr ""
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr ""
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr ""
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr ""
@@ -416,14 +416,6 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr ""
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr ""
426−
427419#: qml/Tutorial/TutorialBottom.qml:28
428420msgid "Open special menus"
429421msgstr ""
po/oc.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-02-05 20:35+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Occitan (post 1500) <oc@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr ""
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr ""
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr ""
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr ""
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr ""
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr ""
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr ""
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr ""
@@ -416,14 +416,6 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr ""
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr ""
426−
427419#: qml/Tutorial/TutorialBottom.qml:28
428420msgid "Open special menus"
429421msgstr ""
po/or.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-03-21 05:28+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Oriya <or@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n!=1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr ""
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr ""
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr ""
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr ""
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr ""
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr ""
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr ""
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr ""
@@ -416,14 +416,6 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr ""
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr ""
426−
427419#: qml/Tutorial/TutorialBottom.qml:28
428420msgid "Open special menus"
429421msgstr ""
po/pa.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-04-24 04:29+0000\n"
1212"Last-Translator: Gursharnjit_Singh <ubuntuser13@gmail.com>\n"
1313"Language-Team: Punjabi <pa@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -173,38 +173,38 @@ msgstr ""
173173msgid "Close all"
174174msgstr ""
175175
176−#: qml/Dash/DashPageHeader.qml:266
176+#: qml/Dash/DashPageHeader.qml:270
177177msgctxt "Button: Open the Ubuntu Store"
178178msgid "Store"
179179msgstr "ਸਟੋਰ"
180180
181−#: qml/Dash/DashPageHeader.qml:273
181+#: qml/Dash/DashPageHeader.qml:277
182182msgctxt "Button: Start a search in the current dash scope"
183183msgid "Search"
184184msgstr "ਖੋਜ"
185185
186−#: qml/Dash/DashPageHeader.qml:283
186+#: qml/Dash/DashPageHeader.qml:287
187187msgctxt "Button: Show the current dash scope settings"
188188msgid "Settings"
189189msgstr "ਸੈਟਿੰਗ"
190190
191−#: qml/Dash/DashPageHeader.qml:290
191+#: qml/Dash/DashPageHeader.qml:294
192192msgid "Remove from Favorites"
193193msgstr "ਪਸੰਦ ਵਿੱਚੋਂ ਹਟਾਓ"
194194
195−#: qml/Dash/DashPageHeader.qml:290
195+#: qml/Dash/DashPageHeader.qml:294
196196msgid "Add to Favorites"
197197msgstr "ਪਸੰਦ ਵਿੱਚ ਜੋੜੋ"
198198
199−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
199+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
200200msgid "See less"
201201msgstr "ਘੱਟ ਵੇਖੋ"
202202
203−#: qml/Dash/GenericScopeView.qml:587
203+#: qml/Dash/GenericScopeView.qml:565
204204msgid "See all"
205205msgstr "ਸਾਰਾ ਵੇਖੋ"
206206
207−#: qml/Dash/GenericScopeView.qml:649
207+#: qml/Dash/GenericScopeView.qml:627
208208msgctxt "Label: Hint for dash search line edit"
209209msgid "Search"
210210msgstr "ਖੋਜ"
@@ -422,14 +422,6 @@ msgctxt "Button: Call back on phone"
422422msgid "Call back"
423423msgstr ""
424424
425−#: qml/Panel/Indicators/ModemInfoItem.qml:105
426−msgid "Unlock SIM"
427−msgstr "ਅਣਲਾਕ SIM"
428−
429−#: qml/Panel/Indicators/RoamingIndication.qml:27
430−msgid "Roaming"
431−msgstr "ਰੋਮਿੰਗ"
432−
433425#: qml/Tutorial/TutorialBottom.qml:28
434426msgid "Open special menus"
435427msgstr "ਖਾਸ਼ ਮੀਨੂੰ ਖੋਲ੍ਹੋ"
@@ -714,6 +706,12 @@ msgstr "%1 〉"
714706#~ msgid "Please re-enter"
715707#~ msgstr "ਕਿਰਪਾ ਕਰਕੇ ਮੁੜ-ਦਰਜ ਕਰੋ"
716708
709+#~ msgid "Unlock SIM"
710+#~ msgstr "ਅਣਲਾਕ SIM"
711+
712+#~ msgid "Roaming"
713+#~ msgstr "ਰੋਮਿੰਗ"
714+
717715#~ msgid "Please select how you’d like to unlock your phone."
718716#~ msgstr ""
719717#~ "ਕਿਰਪਾ ਕਰਕੇ ਚੁਣੋ ਤੁਸੀਂ ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਕਿਸ ਤਰ੍ਹਾਂ ਅਣ-ਲਾਕ ਕਰਨਾ ਪਸੰਦ ਕਰੋਗੇ।"
po/pl.po+20−22
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-07-12 09:46+0000\n"
1212"Last-Translator: Seweryn Opyd <Unknown>\n"
1313"Language-Team: Polish <pl@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
1818"|| n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
20−"X-Generator: Launchpad (build 17925)\n"
19+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
20+"X-Generator: Launchpad (build 17936)\n"
2121
2222#: plugins/IntegratedLightDM/Greeter.cpp:112
2323msgid "Password: "
@@ -175,38 +175,38 @@ msgstr "Ponownie połącz teraz!"
175175msgid "Close all"
176176msgstr "Zamknij wszystko"
177177
178−#: qml/Dash/DashPageHeader.qml:266
178+#: qml/Dash/DashPageHeader.qml:270
179179msgctxt "Button: Open the Ubuntu Store"
180180msgid "Store"
181181msgstr "Sklep"
182182
183−#: qml/Dash/DashPageHeader.qml:273
183+#: qml/Dash/DashPageHeader.qml:277
184184msgctxt "Button: Start a search in the current dash scope"
185185msgid "Search"
186186msgstr "Wyszukaj"
187187
188−#: qml/Dash/DashPageHeader.qml:283
188+#: qml/Dash/DashPageHeader.qml:287
189189msgctxt "Button: Show the current dash scope settings"
190190msgid "Settings"
191191msgstr "Ustawienia"
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Remove from Favorites"
195195msgstr "Usuń z ulubionych"
196196
197−#: qml/Dash/DashPageHeader.qml:290
197+#: qml/Dash/DashPageHeader.qml:294
198198msgid "Add to Favorites"
199199msgstr "Dodaj do ulubionych"
200200
201−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
201+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
202202msgid "See less"
203203msgstr "Zobacz mniej"
204204
205−#: qml/Dash/GenericScopeView.qml:587
205+#: qml/Dash/GenericScopeView.qml:565
206206msgid "See all"
207207msgstr "Zobacz wszystko"
208208
209−#: qml/Dash/GenericScopeView.qml:649
209+#: qml/Dash/GenericScopeView.qml:627
210210msgctxt "Label: Hint for dash search line edit"
211211msgid "Search"
212212msgstr "Szukaj"
@@ -429,14 +429,6 @@ msgctxt "Button: Call back on phone"
429429msgid "Call back"
430430msgstr "Oddzwoń"
431431
432−#: qml/Panel/Indicators/ModemInfoItem.qml:105
433−msgid "Unlock SIM"
434−msgstr "Odblokuj kartę SIM"
435−
436−#: qml/Panel/Indicators/RoamingIndication.qml:27
437−msgid "Roaming"
438−msgstr "Roaming"
439−
440432#: qml/Tutorial/TutorialBottom.qml:28
441433msgid "Open special menus"
442434msgstr "Otwórz menu specjalne"
@@ -501,7 +493,7 @@ msgstr "Witaj!"
501493
502494#: qml/Wizard/Pages/10-welcome.qml:44
503495msgid "Welcome to your Ubuntu device."
504−msgstr ""
496+msgstr "Witaj w swoim urządzeniu Ubuntu."
505497
506498#: qml/Wizard/Pages/10-welcome.qml:52
507499msgid "Let’s get started."
@@ -533,7 +525,7 @@ msgstr "Blokada"
533525
534526#: qml/Wizard/Pages/30-passwd-type.qml:79
535527msgid "Please select how you’d like to unlock your device."
536−msgstr ""
528+msgstr "Prosimy wybrać sposób, w jaki chcesz odblokować swoje urządzenie."
537529
538530#: qml/Wizard/Pages/30-passwd-type.qml:102
539531msgctxt "Label: Type of security method"
@@ -640,7 +632,7 @@ msgstr "Dobra robota!"
640632
641633#: qml/Wizard/Pages/80-finished.qml:46
642634msgid "Your device is now ready to use."
643−msgstr ""
635+msgstr "Twoje urządzenie jest już gotowe do użytku."
644636
645637#: qml/Wizard/Pages/80-finished.qml:53
646638msgid "Finish"
@@ -740,6 +732,9 @@ msgstr "%1 〉"
740732#~ "Wydawanie poleceń krawędzi zostało opanowane. Urządzenie gotowe do "
741733#~ "pracy.<br><br>Dotknij ekranu by rozpocząć"
742734
735+#~ msgid "Unlock SIM"
736+#~ msgstr "Odblokuj kartę SIM"
737+
743738#~ msgid "Log out"
744739#~ msgstr "Wyloguj"
745740
@@ -764,6 +759,9 @@ msgstr "%1 〉"
764759#~ msgid "Settings"
765760#~ msgstr "Ustawienia"
766761
762+#~ msgid "Roaming"
763+#~ msgstr "Roaming"
764+
767765#~ msgid "Please re-enter"
768766#~ msgstr "Proszę wprowadź ponownie"
769767
po/pt.po+28−30
@@ -7,16 +7,16 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-02-12 00:28+0000\n"
11−"PO-Revision-Date: 2015-12-20 09:20+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
11+"PO-Revision-Date: 2016-02-18 01:11+0000\n"
1212"Last-Translator: Ivo Xavier <ivofernandes12@gmail.com>\n"
1313"Language-Team: Portuguese <pt@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: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -143,7 +143,7 @@ msgstr "Reiniciar"
143143
144144#: qml/Components/Lockscreen.qml:245
145145msgid "Return to Call"
146−msgstr "Volte para chamada"
146+msgstr "Volte para a chamada"
147147
148148#: qml/Components/Lockscreen.qml:245
149149msgid "Emergency Call"
@@ -177,38 +177,38 @@ msgstr "Volte a ligar agora!"
177177msgid "Close all"
178178msgstr "Fechar tudo"
179179
180−#: qml/Dash/DashPageHeader.qml:266
180+#: qml/Dash/DashPageHeader.qml:270
181181msgctxt "Button: Open the Ubuntu Store"
182182msgid "Store"
183183msgstr "Store"
184184
185−#: qml/Dash/DashPageHeader.qml:273
185+#: qml/Dash/DashPageHeader.qml:277
186186msgctxt "Button: Start a search in the current dash scope"
187187msgid "Search"
188188msgstr "Procurar"
189189
190−#: qml/Dash/DashPageHeader.qml:283
190+#: qml/Dash/DashPageHeader.qml:287
191191msgctxt "Button: Show the current dash scope settings"
192192msgid "Settings"
193193msgstr "Definições"
194194
195−#: qml/Dash/DashPageHeader.qml:290
195+#: qml/Dash/DashPageHeader.qml:294
196196msgid "Remove from Favorites"
197197msgstr "Remover dos favoritos"
198198
199−#: qml/Dash/DashPageHeader.qml:290
199+#: qml/Dash/DashPageHeader.qml:294
200200msgid "Add to Favorites"
201201msgstr "Adicionar aos favoritos"
202202
203−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
203+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
204204msgid "See less"
205205msgstr "Ver menos"
206206
207−#: qml/Dash/GenericScopeView.qml:587
207+#: qml/Dash/GenericScopeView.qml:565
208208msgid "See all"
209209msgstr "Ver todos"
210210
211−#: qml/Dash/GenericScopeView.qml:649
211+#: qml/Dash/GenericScopeView.qml:627
212212msgctxt "Label: Hint for dash search line edit"
213213msgid "Search"
214214msgstr "Procurar"
@@ -347,7 +347,7 @@ msgstr "Mostrar palavra-passe"
347347
348348#: qml/Panel/ActiveCallHint.qml:79
349349msgid "Tap to return to call..."
350−msgstr "Toque para voltar a chamar..."
350+msgstr "Toque para voltar à chamada..."
351351
352352#: qml/Panel/ActiveCallHint.qml:92
353353msgid "Conference"
@@ -428,14 +428,6 @@ msgctxt "Button: Call back on phone"
428428msgid "Call back"
429429msgstr "Ligar de volta"
430430
431−#: qml/Panel/Indicators/ModemInfoItem.qml:105
432−msgid "Unlock SIM"
433−msgstr "Desbloquear SIM"
434−
435−#: qml/Panel/Indicators/RoamingIndication.qml:27
436−msgid "Roaming"
437−msgstr "Roaming"
438−
439431#: qml/Tutorial/TutorialBottom.qml:28
440432msgid "Open special menus"
441433msgstr "Abrir menus especiais"
@@ -500,7 +492,7 @@ msgstr "Olá!"
500492
501493#: qml/Wizard/Pages/10-welcome.qml:44
502494msgid "Welcome to your Ubuntu device."
503−msgstr ""
495+msgstr "Bem-vindo ao seu dispositivo Ubuntu."
504496
505497#: qml/Wizard/Pages/10-welcome.qml:52
506498msgid "Let’s get started."
@@ -532,7 +524,7 @@ msgstr "Bloqueio de segurança"
532524
533525#: qml/Wizard/Pages/30-passwd-type.qml:79
534526msgid "Please select how you’d like to unlock your device."
535−msgstr ""
527+msgstr "Escolha como quer desbloquear o seu dispositivo."
536528
537529#: qml/Wizard/Pages/30-passwd-type.qml:102
538530msgctxt "Label: Type of security method"
@@ -607,7 +599,7 @@ msgstr "De modo nenhum"
607599
608600#: qml/Wizard/Pages/50-location.qml:124
609601msgid "You can change your mind later in <b>System Settings</b>."
610−msgstr "Pode mudar de ideias mais tarde em <b>Definições</b>."
602+msgstr "Pode mudar de ideias mais tarde nas <b>Definições</b>."
611603
612604#: qml/Wizard/Pages/60-reporting.qml:26
613605msgid "Improving your experience"
@@ -626,8 +618,8 @@ msgid ""
626618"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
627619"Privacy</b>"
628620msgstr ""
629−"Isto pode ser desligado nas <b>Definições do Sistema</b> debaixo da "
630−"<b>Segurança eamp; Privacidade</b>"
621+"Isto pode ser desligado nas <b>Definições</b> debaixo da <b>Segurança eamp; "
622+"Privacidade</b>"
631623
632624#: qml/Wizard/Pages/80-finished.qml:24
633625msgid "All done"
@@ -639,7 +631,7 @@ msgstr "Bom trabalho!"
639631
640632#: qml/Wizard/Pages/80-finished.qml:46
641633msgid "Your device is now ready to use."
642−msgstr ""
634+msgstr "O seu dispositivo está pronto."
643635
644636#: qml/Wizard/Pages/80-finished.qml:53
645637msgid "Finish"
@@ -655,7 +647,7 @@ msgstr "Confirmar a palavra-passe"
655647
656648#: qml/Wizard/Pages/passwd-confirm.qml:50
657649msgid "Confirm passcode"
658−msgstr "Confirmar código"
650+msgstr "Confirme o código"
659651
660652#: qml/Wizard/Pages/passwd-confirm.qml:53
661653#: qml/Wizard/Pages/passwd-confirm.qml:54
@@ -664,7 +656,7 @@ msgstr "Por favor, tente novamente."
664656
665657#: qml/Wizard/Pages/passwd-set.qml:61
666658msgid "Choose your passcode"
667−msgstr "Escolha o seu código"
659+msgstr "Escolha o código"
668660
669661#: qml/Wizard/Pages/passwd-set.qml:68
670662msgid "Passphrase must be 4 characters long"
@@ -721,6 +713,9 @@ msgstr "%1 〉"
721713#~ msgid "All"
722714#~ msgstr "Todos"
723715
716+#~ msgid "Unlock SIM"
717+#~ msgstr "Desbloquear SIM"
718+
724719#~ msgid "Favorites"
725720#~ msgstr "Favoritos"
726721
@@ -730,6 +725,9 @@ msgstr "%1 〉"
730725#~ msgid "Done"
731726#~ msgstr "Concluído"
732727
728+#~ msgid "Roaming"
729+#~ msgstr "Roaming"
730+
733731#~ msgid "Log out"
734732#~ msgstr "Terminar sessão"
735733
po/pt_BR.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-08-05 04:40+0000\n"
1212"Last-Translator: Julio Alexander Sieg <julio.sieg@gmail.com>\n"
1313"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -175,38 +175,38 @@ msgstr ""
175175msgid "Close all"
176176msgstr ""
177177
178−#: qml/Dash/DashPageHeader.qml:266
178+#: qml/Dash/DashPageHeader.qml:270
179179msgctxt "Button: Open the Ubuntu Store"
180180msgid "Store"
181181msgstr "Loja"
182182
183−#: qml/Dash/DashPageHeader.qml:273
183+#: qml/Dash/DashPageHeader.qml:277
184184msgctxt "Button: Start a search in the current dash scope"
185185msgid "Search"
186186msgstr "Pesquisar"
187187
188−#: qml/Dash/DashPageHeader.qml:283
188+#: qml/Dash/DashPageHeader.qml:287
189189msgctxt "Button: Show the current dash scope settings"
190190msgid "Settings"
191191msgstr "Configurações"
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Remove from Favorites"
195195msgstr "Remover dos favoritos"
196196
197−#: qml/Dash/DashPageHeader.qml:290
197+#: qml/Dash/DashPageHeader.qml:294
198198msgid "Add to Favorites"
199199msgstr "Adicionar aos favoritos"
200200
201−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
201+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
202202msgid "See less"
203203msgstr "Ver menos"
204204
205−#: qml/Dash/GenericScopeView.qml:587
205+#: qml/Dash/GenericScopeView.qml:565
206206msgid "See all"
207207msgstr "Ver todos"
208208
209−#: qml/Dash/GenericScopeView.qml:649
209+#: qml/Dash/GenericScopeView.qml:627
210210msgctxt "Label: Hint for dash search line edit"
211211msgid "Search"
212212msgstr "Pesquisar"
@@ -424,14 +424,6 @@ msgctxt "Button: Call back on phone"
424424msgid "Call back"
425425msgstr ""
426426
427−#: qml/Panel/Indicators/ModemInfoItem.qml:105
428−msgid "Unlock SIM"
429−msgstr "Desbloquear SIM"
430−
431−#: qml/Panel/Indicators/RoamingIndication.qml:27
432−msgid "Roaming"
433−msgstr "Roaming"
434−
435427#: qml/Tutorial/TutorialBottom.qml:28
436428msgid "Open special menus"
437429msgstr "Abrir menus especiais"
@@ -737,6 +729,9 @@ msgstr "%1 〉"
737729#~ "Agora você já domina os gestos das bordas e pode começar a usar o "
738730#~ "telefone<br><br>Toque na tela para iniciar"
739731
732+#~ msgid "Unlock SIM"
733+#~ msgstr "Desbloquear SIM"
734+
740735#~ msgid "Store"
741736#~ msgstr "Loja"
742737
@@ -749,6 +744,9 @@ msgstr "%1 〉"
749744#~ msgid "Favorites"
750745#~ msgstr "Favoritos"
751746
747+#~ msgid "Roaming"
748+#~ msgstr "Roaming"
749+
752750#~ msgid "All"
753751#~ msgstr "Tudo"
754752
po/ro.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-07-06 17:47+0000\n"
1212"Last-Translator: Meriuță Cornel <meriutacornel@neacornel.eu>\n"
1313"Language-Team: Romanian <ro@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 "
1818"== 0) && (n != 0))) ? 2: 1));\n"
19−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
20−"X-Generator: Launchpad (build 17925)\n"
19+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
20+"X-Generator: Launchpad (build 17936)\n"
2121
2222#: plugins/IntegratedLightDM/Greeter.cpp:112
2323msgid "Password: "
@@ -178,38 +178,38 @@ msgstr ""
178178msgid "Close all"
179179msgstr ""
180180
181−#: qml/Dash/DashPageHeader.qml:266
181+#: qml/Dash/DashPageHeader.qml:270
182182msgctxt "Button: Open the Ubuntu Store"
183183msgid "Store"
184184msgstr "Magazin"
185185
186−#: qml/Dash/DashPageHeader.qml:273
186+#: qml/Dash/DashPageHeader.qml:277
187187msgctxt "Button: Start a search in the current dash scope"
188188msgid "Search"
189189msgstr "Căutare"
190190
191−#: qml/Dash/DashPageHeader.qml:283
191+#: qml/Dash/DashPageHeader.qml:287
192192msgctxt "Button: Show the current dash scope settings"
193193msgid "Settings"
194194msgstr "Configurări"
195195
196−#: qml/Dash/DashPageHeader.qml:290
196+#: qml/Dash/DashPageHeader.qml:294
197197msgid "Remove from Favorites"
198198msgstr "Șterge din favorite"
199199
200−#: qml/Dash/DashPageHeader.qml:290
200+#: qml/Dash/DashPageHeader.qml:294
201201msgid "Add to Favorites"
202202msgstr "Adaugă la favorite"
203203
204−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
204+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
205205msgid "See less"
206206msgstr "Afișează mai puține"
207207
208−#: qml/Dash/GenericScopeView.qml:587
208+#: qml/Dash/GenericScopeView.qml:565
209209msgid "See all"
210210msgstr "Afișează tot"
211211
212−#: qml/Dash/GenericScopeView.qml:649
212+#: qml/Dash/GenericScopeView.qml:627
213213msgctxt "Label: Hint for dash search line edit"
214214msgid "Search"
215215msgstr "Căutare"
@@ -432,14 +432,6 @@ msgctxt "Button: Call back on phone"
432432msgid "Call back"
433433msgstr ""
434434
435−#: qml/Panel/Indicators/ModemInfoItem.qml:105
436−msgid "Unlock SIM"
437−msgstr "Deblocare SIM"
438−
439−#: qml/Panel/Indicators/RoamingIndication.qml:27
440−msgid "Roaming"
441−msgstr "Roaming"
442−
443435#: qml/Tutorial/TutorialBottom.qml:28
444436msgid "Open special menus"
445437msgstr "Deschide meniurile speciale"
@@ -751,6 +743,9 @@ msgstr "%1 〉"
751743#~ msgid "All"
752744#~ msgstr "Tot"
753745
746+#~ msgid "Unlock SIM"
747+#~ msgstr "Deblocare SIM"
748+
754749#~ msgid "Favorites"
755750#~ msgstr "Favorite"
756751
@@ -763,6 +758,9 @@ msgstr "%1 〉"
763758#~ msgid "Done"
764759#~ msgstr "Finalizat"
765760
761+#~ msgid "Roaming"
762+#~ msgstr "Roaming"
763+
766764#~ msgid "Log out"
767765#~ msgstr "Închide sesiunea"
768766
po/ru.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-07-06 05:33+0000\n"
1212"Last-Translator: ☠Jay ZDLin☠ <Unknown>\n"
1313"Language-Team: Russian <ru@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
20−"X-Generator: Launchpad (build 17925)\n"
19+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
20+"X-Generator: Launchpad (build 17936)\n"
2121
2222#: plugins/IntegratedLightDM/Greeter.cpp:112
2323msgid "Password: "
@@ -179,38 +179,38 @@ msgstr "Переподключиться сейчас!"
179179msgid "Close all"
180180msgstr "Закрыть все"
181181
182−#: qml/Dash/DashPageHeader.qml:266
182+#: qml/Dash/DashPageHeader.qml:270
183183msgctxt "Button: Open the Ubuntu Store"
184184msgid "Store"
185185msgstr "Магазин"
186186
187−#: qml/Dash/DashPageHeader.qml:273
187+#: qml/Dash/DashPageHeader.qml:277
188188msgctxt "Button: Start a search in the current dash scope"
189189msgid "Search"
190190msgstr "Найти"
191191
192−#: qml/Dash/DashPageHeader.qml:283
192+#: qml/Dash/DashPageHeader.qml:287
193193msgctxt "Button: Show the current dash scope settings"
194194msgid "Settings"
195195msgstr "Настройки"
196196
197−#: qml/Dash/DashPageHeader.qml:290
197+#: qml/Dash/DashPageHeader.qml:294
198198msgid "Remove from Favorites"
199199msgstr "Удалить из избранного"
200200
201−#: qml/Dash/DashPageHeader.qml:290
201+#: qml/Dash/DashPageHeader.qml:294
202202msgid "Add to Favorites"
203203msgstr "Добавить в избранное"
204204
205−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
205+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
206206msgid "See less"
207207msgstr "Вкратце"
208208
209−#: qml/Dash/GenericScopeView.qml:587
209+#: qml/Dash/GenericScopeView.qml:565
210210msgid "See all"
211211msgstr "Показать всё"
212212
213−#: qml/Dash/GenericScopeView.qml:649
213+#: qml/Dash/GenericScopeView.qml:627
214214msgctxt "Label: Hint for dash search line edit"
215215msgid "Search"
216216msgstr "Поиск"
@@ -431,14 +431,6 @@ msgctxt "Button: Call back on phone"
431431msgid "Call back"
432432msgstr "Позвонить"
433433
434−#: qml/Panel/Indicators/ModemInfoItem.qml:105
435−msgid "Unlock SIM"
436−msgstr "Разблокировать SIM-карту"
437−
438−#: qml/Panel/Indicators/RoamingIndication.qml:27
439−msgid "Roaming"
440−msgstr "Роуминг"
441−
442434#: qml/Tutorial/TutorialBottom.qml:28
443435msgid "Open special menus"
444436msgstr "Открытие специальных меню"
@@ -747,12 +739,18 @@ msgstr "%1 〉"
747739#~ "Вы научились пользоваться Ubuntu и можете начать использовать свой "
748740#~ "телефон<br><br>Нажмите на экран"
749741
742+#~ msgid "Unlock SIM"
743+#~ msgstr "Разблокировать SIM-карту"
744+
750745#~ msgid "Power off"
751746#~ msgstr "Отключить"
752747
753748#~ msgid "All"
754749#~ msgstr "Все"
755750
751+#~ msgid "Roaming"
752+#~ msgstr "Роуминг"
753+
756754#~ msgid "Favorites"
757755#~ msgstr "Избранное"
758756
po/shn.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-11-10 12:09+0000\n"
1212"Last-Translator: Rockworld <sumoisrock@gmail.com>\n"
1313"Language-Team: Shan <shn@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=(n == 1) ? 0 : 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr ""
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr ""
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr ""
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr ""
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr ""
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr ""
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr ""
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr ""
@@ -416,14 +416,6 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr ""
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr ""
426−
427419#: qml/Tutorial/TutorialBottom.qml:28
428420msgid "Open special menus"
429421msgstr ""
po/si.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2013-06-26 22:36+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Sinhalese <si@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -173,38 +173,38 @@ msgstr ""
173173msgid "Close all"
174174msgstr ""
175175
176−#: qml/Dash/DashPageHeader.qml:266
176+#: qml/Dash/DashPageHeader.qml:270
177177msgctxt "Button: Open the Ubuntu Store"
178178msgid "Store"
179179msgstr ""
180180
181−#: qml/Dash/DashPageHeader.qml:273
181+#: qml/Dash/DashPageHeader.qml:277
182182msgctxt "Button: Start a search in the current dash scope"
183183msgid "Search"
184184msgstr ""
185185
186−#: qml/Dash/DashPageHeader.qml:283
186+#: qml/Dash/DashPageHeader.qml:287
187187msgctxt "Button: Show the current dash scope settings"
188188msgid "Settings"
189189msgstr ""
190190
191−#: qml/Dash/DashPageHeader.qml:290
191+#: qml/Dash/DashPageHeader.qml:294
192192msgid "Remove from Favorites"
193193msgstr ""
194194
195−#: qml/Dash/DashPageHeader.qml:290
195+#: qml/Dash/DashPageHeader.qml:294
196196msgid "Add to Favorites"
197197msgstr ""
198198
199−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
199+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
200200msgid "See less"
201201msgstr ""
202202
203−#: qml/Dash/GenericScopeView.qml:587
203+#: qml/Dash/GenericScopeView.qml:565
204204msgid "See all"
205205msgstr ""
206206
207−#: qml/Dash/GenericScopeView.qml:649
207+#: qml/Dash/GenericScopeView.qml:627
208208msgctxt "Label: Hint for dash search line edit"
209209msgid "Search"
210210msgstr ""
@@ -418,14 +418,6 @@ msgctxt "Button: Call back on phone"
418418msgid "Call back"
419419msgstr ""
420420
421−#: qml/Panel/Indicators/ModemInfoItem.qml:105
422−msgid "Unlock SIM"
423−msgstr ""
424−
425−#: qml/Panel/Indicators/RoamingIndication.qml:27
426−msgid "Roaming"
427−msgstr ""
428−
429421#: qml/Tutorial/TutorialBottom.qml:28
430422msgid "Open special menus"
431423msgstr ""
po/sk.po+179−157
@@ -7,577 +7,587 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-02-12 00:28+0000\n"
11−"PO-Revision-Date: 2015-04-10 09:15+0000\n"
12−"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
11+"PO-Revision-Date: 2016-03-02 01:54+0000\n"
12+"Last-Translator: P_E_T_O <Unknown>\n"
1313"Language-Team: Slovak <sk@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
20+"Language: sk\n"
2021
2122#: plugins/IntegratedLightDM/Greeter.cpp:112
2223msgid "Password: "
23−msgstr ""
24+msgstr "Heslo: "
2425
2526#: plugins/Unity/Launcher/launcheritem.cpp:47
2627#: plugins/Unity/Launcher/launcheritem.cpp:106
2728msgid "Pin shortcut"
28−msgstr ""
29+msgstr "Pripnúť odkaz"
2930
3031#: plugins/Unity/Launcher/launcheritem.cpp:52
3132msgid "Quit"
32−msgstr ""
33+msgstr "Ukončiť"
3334
3435#: plugins/Unity/Launcher/launcheritem.cpp:106
3536msgid "Unpin shortcut"
36−msgstr ""
37+msgstr "Odopnúť odkaz"
3738
3839#: qml/Components/DelayedLockscreen.qml:49
3940msgid "Device Locked"
40−msgstr ""
41+msgstr "Zariadenie zamknuté"
4142
4243#: qml/Components/DelayedLockscreen.qml:64
4344msgid "You have been locked out due to too many failed passphrase attempts."
4445msgstr ""
46+"Boli ste zablokovaný z dôvodu príliš veľkého počtu neúspešných pokusov o "
47+"prístupovú frázu."
4548
4649#: qml/Components/DelayedLockscreen.qml:65
4750msgid "You have been locked out due to too many failed passcode attempts."
4851msgstr ""
52+"Boli ste zablokovaný z dôvodu príliš veľkého počtu neúspešných pokusov o "
53+"prístupové heslo."
4954
5055#: qml/Components/DelayedLockscreen.qml:74
5156#, qt-format
5257msgid "Please wait %1 minute and then try again…"
5358msgid_plural "Please wait %1 minutes and then try again…"
54−msgstr[0] ""
55−msgstr[1] ""
59+msgstr[0] "Prosím počkajte %1 minút a skúste znova…"
60+msgstr[1] "Prosím počkajte %1 minútu a skúste znova…"
61+msgstr[2] "Prosím počkajte %1 minúty a skúste znova…"
5662
5763#: qml/Components/Dialogs.qml:144
5864msgctxt "Title: Lock/Log out dialog"
5965msgid "Log out"
60−msgstr ""
66+msgstr "Odhlásiť sa"
6167
6268#: qml/Components/Dialogs.qml:145
6369msgid "Are you sure you want to log out?"
64−msgstr ""
70+msgstr "Ste si istý, že sa chcete odhlásiť?"
6571
6672#: qml/Components/Dialogs.qml:147
6773msgctxt "Button: Lock the system"
6874msgid "Lock"
69−msgstr ""
75+msgstr "Zamknúť"
7076
7177#: qml/Components/Dialogs.qml:154
7278msgctxt "Button: Log out from the system"
7379msgid "Log Out"
74−msgstr ""
80+msgstr "Odhlásiť"
7581
7682#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:194
7783#: qml/Components/Dialogs.qml:253
7884msgid "Cancel"
79−msgstr ""
85+msgstr "Zrušiť"
8086
8187#: qml/Components/Dialogs.qml:173
8288msgctxt "Title: Reboot/Shut down dialog"
8389msgid "Shut down"
84−msgstr ""
90+msgstr "Vypnúť"
8591
8692#: qml/Components/Dialogs.qml:174
8793msgid "Are you sure you want to shut down?"
88−msgstr ""
94+msgstr "Chcete skutočne vypnúť zariadenie?"
8995
9096#: qml/Components/Dialogs.qml:176
9197msgctxt "Button: Reboot the system"
9298msgid "Reboot"
93−msgstr ""
99+msgstr "Reštartovať"
94100
95101#: qml/Components/Dialogs.qml:185
96102msgctxt "Button: Shut down the system"
97103msgid "Shut down"
98−msgstr ""
104+msgstr "Vypnúť"
99105
100106#: qml/Components/Dialogs.qml:207
101107msgctxt "Title: Reboot dialog"
102108msgid "Reboot"
103−msgstr ""
109+msgstr "Reštartovať"
104110
105111#: qml/Components/Dialogs.qml:208
106112msgid "Are you sure you want to reboot?"
107−msgstr ""
113+msgstr "Ste si istý, že chcete zariadenie reštartovať?"
108114
109115#: qml/Components/Dialogs.qml:210
110116msgid "No"
111−msgstr ""
117+msgstr "Nie"
112118
113119#: qml/Components/Dialogs.qml:217
114120msgid "Yes"
115−msgstr ""
121+msgstr "Áno"
116122
117123#: qml/Components/Dialogs.qml:232
118124msgctxt "Title: Power off/Restart dialog"
119125msgid "Power"
120−msgstr ""
126+msgstr "Napájanie"
121127
122128#: qml/Components/Dialogs.qml:233
123129msgid ""
124130"Are you sure you would like\n"
125131"to power off?"
126132msgstr ""
133+"Naozaj chcete zariadenie\n"
134+"vypnúť?"
127135
128136#: qml/Components/Dialogs.qml:235
129137msgctxt "Button: Power off the system"
130138msgid "Power off"
131−msgstr ""
139+msgstr "Vypnúť"
132140
133141#: qml/Components/Dialogs.qml:244
134142msgctxt "Button: Restart the system"
135143msgid "Restart"
136−msgstr ""
144+msgstr "Reštartovať"
137145
138146#: qml/Components/Lockscreen.qml:245
139147msgid "Return to Call"
140−msgstr ""
148+msgstr "Návrat k hovoru"
141149
142150#: qml/Components/Lockscreen.qml:245
143151msgid "Emergency Call"
144−msgstr ""
152+msgstr "Tiesňový hovor"
145153
146154#: qml/Components/Lockscreen.qml:277
147155msgid "OK"
148−msgstr ""
156+msgstr "OK"
149157
150158#: qml/Components/ModeSwitchWarningDialog.qml:32
151159msgid "Apps may have unsaved data:"
152−msgstr ""
160+msgstr "Aplikácia môže mať neuložené údaje:"
153161
154162#: qml/Components/ModeSwitchWarningDialog.qml:57
155163msgid "Re-dock, save your work and close these apps to continue."
156164msgstr ""
165+"Re-dock, uložte si prácu a zatvorte tieto aplikácie pre pokračovanie."
157166
158167#: qml/Components/ModeSwitchWarningDialog.qml:63
159168msgid "Or force close now (unsaved data will be lost)."
160−msgstr ""
169+msgstr "Alebo vynútiť ukončenie (neuložené údaje budú stratené)."
161170
162171#: qml/Components/ModeSwitchWarningDialog.qml:75
163172msgid "OK, I will reconnect"
164−msgstr ""
173+msgstr "OK, chcem sa znovu pripojiť"
165174
166175#: qml/Components/ModeSwitchWarningDialog.qml:76
167176msgid "Reconnect now!"
168−msgstr ""
177+msgstr "Znova pripojiť!"
169178
170179#: qml/Components/ModeSwitchWarningDialog.qml:88
171180msgid "Close all"
172−msgstr ""
181+msgstr "Zavrieť všetko"
173182
174−#: qml/Dash/DashPageHeader.qml:266
183+#: qml/Dash/DashPageHeader.qml:270
175184msgctxt "Button: Open the Ubuntu Store"
176185msgid "Store"
177−msgstr ""
186+msgstr "Obchod"
178187
179−#: qml/Dash/DashPageHeader.qml:273
188+#: qml/Dash/DashPageHeader.qml:277
180189msgctxt "Button: Start a search in the current dash scope"
181190msgid "Search"
182−msgstr ""
191+msgstr "Hľadať"
183192
184−#: qml/Dash/DashPageHeader.qml:283
193+#: qml/Dash/DashPageHeader.qml:287
185194msgctxt "Button: Show the current dash scope settings"
186195msgid "Settings"
187−msgstr ""
196+msgstr "Nastavenia"
188197
189−#: qml/Dash/DashPageHeader.qml:290
198+#: qml/Dash/DashPageHeader.qml:294
190199msgid "Remove from Favorites"
191−msgstr ""
200+msgstr "Odstrániť z obľúbených"
192201
193−#: qml/Dash/DashPageHeader.qml:290
202+#: qml/Dash/DashPageHeader.qml:294
194203msgid "Add to Favorites"
195−msgstr ""
204+msgstr "Pridať k obľúbeným"
196205
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
206+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198207msgid "See less"
199−msgstr ""
208+msgstr "Zobraziť menej"
200209
201−#: qml/Dash/GenericScopeView.qml:587
210+#: qml/Dash/GenericScopeView.qml:565
202211msgid "See all"
203−msgstr ""
212+msgstr "Zobraziť všetko"
204213
205−#: qml/Dash/GenericScopeView.qml:649
214+#: qml/Dash/GenericScopeView.qml:627
206215msgctxt "Label: Hint for dash search line edit"
207216msgid "Search"
208−msgstr ""
217+msgstr "Hľadať"
209218
210219#: qml/Dash/Previews/PreviewActionCombo.qml:35
211220msgid "More..."
212−msgstr ""
221+msgstr "Viac..."
213222
214223#: qml/Dash/Previews/PreviewActionCombo.qml:35
215224msgid "Less..."
216−msgstr ""
225+msgstr "Menej..."
217226
218227#: qml/Dash/Previews/PreviewCommentInput.qml:68
219228#: qml/Dash/Previews/PreviewRatingInput.qml:174
220229msgid "Send"
221−msgstr ""
230+msgstr "Poslať"
222231
223232#: qml/Dash/Previews/PreviewRatingInput.qml:84
224233msgid "Rate this"
225−msgstr ""
234+msgstr "Ohodnotiť"
226235
227236#: qml/Dash/Previews/PreviewRatingInput.qml:129
228237msgid "Add a review"
229−msgstr ""
238+msgstr "Pridať recenziu"
230239
231240#: qml/Dash/Previews/PreviewSharing.qml:50
232241msgid "Preview Share Item"
233−msgstr ""
242+msgstr "Náhľad zdieľaných položiek"
234243
235244#: qml/Dash/PullToRefreshScopeStyle.qml:55
236245msgid "Pull to refresh…"
237−msgstr ""
246+msgstr "Potiahnúť pre obnovenie..."
238247
239248#: qml/Dash/PullToRefreshScopeStyle.qml:60
240249msgid "Release to refresh…"
241−msgstr ""
250+msgstr "Uvoľniť pre obnovenie..."
242251
243252#: qml/Dash/ScopeSettings/ScopeSettingBoolean.qml:43
244253msgid "Enable location data"
245−msgstr ""
254+msgstr "Zapnúť údaje o polohe"
246255
247256#: qml/Dash/ScopesList.qml:67
248257msgid "Manage"
249−msgstr ""
258+msgstr "Spravovať"
250259
251260#: qml/Dash/ScopesList.qml:113
252261msgid "Home"
253−msgstr ""
262+msgstr "Domov"
254263
255264#: qml/Dash/ScopesList.qml:114
256265msgid "Also installed"
257−msgstr ""
266+msgstr "Tiež nainštalované"
258267
259268#: qml/DisabledScreenNotice.qml:87
260269msgid ""
261270"Your device is now connected to an external display. Use this screen as a "
262271"touch pad to interact with the mouse."
263272msgstr ""
273+"Zariadenie je pripojené k externej obrazovke. Použite obrazovku ako touchpad "
274+"pre spoluprácu s myšou."
264275
265276#: qml/Greeter/CoverPage.qml:107
266277msgid "Unlock"
267−msgstr ""
278+msgstr "Odomknúť"
268279
269280#: qml/Greeter/LoginList.qml:239
270281msgid "Retry"
271−msgstr ""
282+msgstr "Skúsiť znova"
272283
273284#: qml/Greeter/LoginList.qml:240
274285msgid "Tap to unlock"
275−msgstr ""
286+msgstr "Kliknúť pre odomknutie"
276287
277288#: qml/Greeter/NarrowView.qml:54 qml/Wizard/Pages/passwd-confirm.qml:53
278289msgid "Sorry, incorrect passphrase."
279−msgstr ""
290+msgstr "Prepáčte, nesprávna prístupová fráza."
280291
281292#: qml/Greeter/NarrowView.qml:55 qml/Wizard/Pages/passwd-confirm.qml:54
282293msgid "Sorry, incorrect passcode."
283−msgstr ""
294+msgstr "Prepáčte, nesprávne prístupové heslo."
284295
285296#: qml/Greeter/NarrowView.qml:56
286297msgid "This will be your last attempt."
287−msgstr ""
298+msgstr "Bude to váš posledný pokus."
288299
289300#: qml/Greeter/NarrowView.qml:58
290301msgid ""
291302"If passphrase is entered incorrectly, your phone will conduct a factory "
292303"reset and all personal data will be deleted."
293304msgstr ""
305+"Ak bude zle zadaná prístupová fráza, váš telefón vykoná továrenský reset a "
306+"všetky osobné údaje budú vymazané."
294307
295308#: qml/Greeter/NarrowView.qml:59
296309msgid ""
297310"If passcode is entered incorrectly, your phone will conduct a factory reset "
298311"and all personal data will be deleted."
299312msgstr ""
313+"Ak bude zle zadané heslo, váš telefón vykoná továrenský reset a všetky "
314+"osobné údaje budú vymazané."
300315
301316#: qml/Greeter/NarrowView.qml:116
302317#, qt-format
303318msgid "Enter %1"
304−msgstr ""
319+msgstr "Zadajte %1"
305320
306321#: qml/Greeter/NarrowView.qml:117 qml/Wizard/Pages/passwd-set.qml:60
307322msgid "Enter passphrase"
308−msgstr ""
323+msgstr "Zadajte prístupovú frázu"
309324
310325#: qml/Greeter/NarrowView.qml:118
311326msgid "Enter passcode"
312−msgstr ""
327+msgstr "Zadajte heslo"
313328
314329#: qml/Greeter/NarrowView.qml:119
315330#, qt-format
316331msgid "Sorry, incorrect %1"
317−msgstr ""
332+msgstr "Prepáčte, nesprávne %1"
318333
319334#: qml/Greeter/NarrowView.qml:120
320335msgid "Sorry, incorrect passphrase"
321−msgstr ""
336+msgstr "Prepáčte, nesprávna prístupová fráza"
322337
323338#: qml/Greeter/NarrowView.qml:121
324339msgctxt "passphrase"
325340msgid "Please re-enter"
326−msgstr ""
341+msgstr "Zadajte znova"
327342
328343#: qml/Greeter/NarrowView.qml:122
329344msgid "Sorry, incorrect passcode"
330−msgstr ""
345+msgstr "Prepáčte, nesprávne heslo"
331346
332347#: qml/Notifications/NotificationMenuItemFactory.qml:129
333348msgid "Show password"
334−msgstr ""
349+msgstr "Zobraziť heslo"
335350
336351#: qml/Panel/ActiveCallHint.qml:79
337352msgid "Tap to return to call..."
338−msgstr ""
353+msgstr "Kliknúť pre návrat k hovoru..."
339354
340355#: qml/Panel/ActiveCallHint.qml:92
341356msgid "Conference"
342−msgstr ""
357+msgstr "Konferencia"
343358
344359#: qml/Panel/Indicators/MenuItemFactory.qml:753
345360msgid "Nothing is playing"
346−msgstr ""
361+msgstr "Nič nehrá"
347362
348363#: qml/Panel/Indicators/MenuItemFactory.qml:882
349364#, qt-format
350365msgid "%1 hour"
351366msgid_plural "%1 hours"
352−msgstr[0] ""
353−msgstr[1] ""
367+msgstr[0] "%1 hodín"
368+msgstr[1] "%1 hodina"
369+msgstr[2] "%1 hodiny"
354370
355371#: qml/Panel/Indicators/MenuItemFactory.qml:886
356372#, qt-format
357373msgid "%1 minute"
358374msgid_plural "%1 minutes"
359−msgstr[0] ""
360−msgstr[1] ""
375+msgstr[0] "%1 minút"
376+msgstr[1] "%1 minúta"
377+msgstr[2] "%1 minúty"
361378
362379#: qml/Panel/Indicators/MenuItemFactory.qml:891
363380#, qt-format
364381msgid "%1 second"
365382msgid_plural "%1 seconds"
366−msgstr[0] ""
367−msgstr[1] ""
383+msgstr[0] "%1 sekúnd"
384+msgstr[1] "%1 sekunda"
385+msgstr[2] "%1 sekundy"
368386
369387#: qml/Panel/Indicators/MenuItemFactory.qml:894
370388msgid "0 seconds"
371−msgstr ""
389+msgstr "0 sekúnd"
372390
373391#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
374392#: qml/Panel/Indicators/MenuItemFactory.qml:896
375393#, qt-format
376394msgid "%1 remaining"
377−msgstr ""
395+msgstr "Zostáva %1"
378396
379397#: qml/Panel/Indicators/MenuItemFactory.qml:902
380398msgid "In queue…"
381−msgstr ""
399+msgstr "V poradí..."
382400
383401#: qml/Panel/Indicators/MenuItemFactory.qml:906
384402msgid "Downloading"
385−msgstr ""
403+msgstr "Sťahuje sa"
386404
387405#: qml/Panel/Indicators/MenuItemFactory.qml:908
388406msgid "Paused, tap to resume"
389−msgstr ""
407+msgstr "Pauza, kliknúť pre pokračovanie"
390408
391409#: qml/Panel/Indicators/MenuItemFactory.qml:910
392410msgid "Canceled"
393−msgstr ""
411+msgstr "Zrušené"
394412
395413#: qml/Panel/Indicators/MenuItemFactory.qml:912
396414msgid "Finished"
397−msgstr ""
415+msgstr "Ukončené"
398416
399417#: qml/Panel/Indicators/MenuItemFactory.qml:914
400418msgid "Failed, tap to retry"
401−msgstr ""
419+msgstr "Zlyhanie, kliknúť pre zopakovanie"
402420
403421#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
404422#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
405423msgctxt "Button: Send a reply message"
406424msgid "Send"
407−msgstr ""
425+msgstr "Poslať"
408426
409427#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
410428msgctxt "Label: Hint in message indicator line edit"
411429msgid "Reply"
412−msgstr ""
430+msgstr "Odpoveď"
413431
414432#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
415433msgctxt "Button: Call back on phone"
416434msgid "Call back"
417−msgstr ""
418−
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr ""
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr ""
435+msgstr "Zavolať naspäť"
426436
427437#: qml/Tutorial/TutorialBottom.qml:28
428438msgid "Open special menus"
429−msgstr ""
439+msgstr "Otvoriť špeciálne menu"
430440
431441#: qml/Tutorial/TutorialBottom.qml:29
432442msgid "Swipe up from the bottom edge."
433−msgstr ""
443+msgstr "Potiahnite nahor od spodného okraja."
434444
435445#: qml/Tutorial/TutorialBottomFinish.qml:24
436446msgid "This action does different things for different apps"
437−msgstr ""
447+msgstr "Táto akcia robí rôzne veci pre rôzne aplikácie"
438448
439449#: qml/Tutorial/TutorialBottomFinish.qml:25
440450msgid "Tap here to finish."
441−msgstr ""
451+msgstr "Klik tu pre ukončenie."
442452
443453#: qml/Tutorial/TutorialContent.qml:80 qml/Tutorial/TutorialLeftFinish.qml:25
444454#: qml/Tutorial/TutorialRight.qml:144
445455msgid "Tap here to continue."
446−msgstr ""
456+msgstr "Klik tu pre pokračovanie."
447457
448458#: qml/Tutorial/TutorialLeft.qml:26
449459msgid "Open the launcher"
450−msgstr ""
460+msgstr "Otvoriť Launcher"
451461
452462#: qml/Tutorial/TutorialLeft.qml:27
453463msgid "Short swipe from the left edge."
454−msgstr ""
464+msgstr "Krátke potiahnutie od ľavého okraja."
455465
456466#: qml/Tutorial/TutorialLeftFinish.qml:24
457467msgid "These are the shortcuts to favorite apps"
458−msgstr ""
468+msgstr "Toto sú skratky pre obľúbené aplikácie"
459469
460470#: qml/Tutorial/TutorialPage.qml:178
461471msgid "You almost got it!"
462−msgstr ""
472+msgstr "Skoro to máte!"
463473
464474#: qml/Tutorial/TutorialPage.qml:195
465475msgid "Try again."
466−msgstr ""
476+msgstr "Skúste znova."
467477
468478#: qml/Tutorial/TutorialRight.qml:31
469479msgid "To view open apps"
470−msgstr ""
480+msgstr "Ak chcete zobraziť otvorené aplikácie"
471481
472482#: qml/Tutorial/TutorialRight.qml:32
473483msgid "Long swipe from the right edge."
474−msgstr ""
484+msgstr "Dlhé potiahnutie od pravého okraja."
475485
476486#: qml/Tutorial/TutorialRight.qml:122
477487msgid "View all your running tasks."
478−msgstr ""
488+msgstr "Zobraziť všetky bežiace procesy."
479489
480490#: qml/Wizard/Page.qml:89
481491msgctxt "Button: Go back one page in the Wizard"
482492msgid "Back"
483−msgstr ""
493+msgstr "Naspäť"
484494
485495#: qml/Wizard/Pages/10-welcome.qml:27
486496msgid "Hi!"
487−msgstr ""
497+msgstr "Ahoj!"
488498
489499#: qml/Wizard/Pages/10-welcome.qml:44
490500msgid "Welcome to your Ubuntu device."
491−msgstr ""
501+msgstr "Vitajte vo svojom Ubuntu zariadení."
492502
493503#: qml/Wizard/Pages/10-welcome.qml:52
494504msgid "Let’s get started."
495−msgstr ""
505+msgstr "Začíname."
496506
497507#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:133
498508#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
499509#: qml/Wizard/Pages/60-reporting.qml:60 qml/Wizard/Pages/passwd-confirm.qml:82
500510#: qml/Wizard/Pages/passwd-set.qml:90
501511msgid "Continue"
502−msgstr ""
512+msgstr "Pokračovať"
503513
504514#: qml/Wizard/Pages/20-sim.qml:25
505515msgid "Add a SIM card and restart your device"
506−msgstr ""
516+msgstr "Vložte SIM kartu a reštartujte zariadenie"
507517
508518#: qml/Wizard/Pages/20-sim.qml:59
509519msgid "Without it, you won’t be able to make calls or use text messaging."
510−msgstr ""
520+msgstr "Bez nej nebudete môcť volať alebo používať textové správy."
511521
512522#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
513523msgid "Skip"
514−msgstr ""
524+msgstr "Preskočiť"
515525
516526#: qml/Wizard/Pages/30-passwd-type.qml:39
517527msgid "Lock security"
518−msgstr ""
528+msgstr "Bezpečnosť uzamknutia"
519529
520530#: qml/Wizard/Pages/30-passwd-type.qml:79
521531msgid "Please select how you’d like to unlock your device."
522−msgstr ""
532+msgstr "Prosím vyberte, ako by ste chceli odblokovať zariadenie."
523533
524534#: qml/Wizard/Pages/30-passwd-type.qml:102
525535msgctxt "Label: Type of security method"
526536msgid "Swipe"
527−msgstr ""
537+msgstr "Potiahnuť"
528538
529539#: qml/Wizard/Pages/30-passwd-type.qml:103
530540msgctxt "Label: Description of security method"
531541msgid "No security"
532−msgstr ""
542+msgstr "Bez ochrany"
533543
534544#: qml/Wizard/Pages/30-passwd-type.qml:105
535545msgctxt "Label: Type of security method"
536546msgid "Passcode"
537−msgstr ""
547+msgstr "Heslo"
538548
539549#: qml/Wizard/Pages/30-passwd-type.qml:106
540550msgctxt "Label: Description of security method"
541551msgid "4 digits only"
542−msgstr ""
552+msgstr "Len 4 číslice"
543553
544554#: qml/Wizard/Pages/30-passwd-type.qml:108
545555msgctxt "Label: Type of security method"
546556msgid "Passphrase"
547−msgstr ""
557+msgstr "Prístupová fráza"
548558
549559#: qml/Wizard/Pages/30-passwd-type.qml:109
550560msgctxt "Label: Description of security method"
551561msgid "Numbers and letters"
552−msgstr ""
562+msgstr "Čísla a písmená"
553563
554564#: qml/Wizard/Pages/40-wifi.qml:29
555565msgid "Connect to Wi‑Fi"
556−msgstr ""
566+msgstr "Pripojiť k Wifi"
557567
558568#: qml/Wizard/Pages/40-wifi.qml:168
559569msgid "Available networks…"
560−msgstr ""
570+msgstr "Dostupné siete..."
561571
562572#: qml/Wizard/Pages/40-wifi.qml:169
563573msgid "No available networks."
564−msgstr ""
574+msgstr "Žiadne dostupné siete."
565575
566576#: qml/Wizard/Pages/50-location.qml:27
567577msgid "Location"
568−msgstr ""
578+msgstr "Poloha"
569579
570580#: qml/Wizard/Pages/50-location.qml:62
571581msgid "Let the phone detect your location:"
572−msgstr ""
582+msgstr "Nechajte telefón zisťovať vašu polohu:"
573583
574584#: qml/Wizard/Pages/50-location.qml:69
575585msgid "Using GPS only (less accurate)"
576−msgstr ""
586+msgstr "Použiť len GPS (menej presné)"
577587
578588#: qml/Wizard/Pages/50-location.qml:86
579589msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
580−msgstr ""
590+msgstr "Použiť GPS, anonymné informácie Wifi a mobilnej siete (odporúčané)"
581591
582592#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
583593#: qml/Wizard/Pages/50-location.qml:103
@@ -585,80 +595,92 @@ msgid ""
585595"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
586596"conditions</a>."
587597msgstr ""
598+"Vybraním tejto možnosti súhlasíte s Nokia HERE <a href='#'>terms and "
599+"conditions</a>."
588600
589601#: qml/Wizard/Pages/50-location.qml:112
590602msgid "Not at all"
591−msgstr ""
603+msgstr "Vôbec"
592604
593605#: qml/Wizard/Pages/50-location.qml:124
594606msgid "You can change your mind later in <b>System Settings</b>."
595−msgstr ""
607+msgstr "Svoj názor môžete zmeniť neskôr v <b>Systémové nastavenia</b>."
596608
597609#: qml/Wizard/Pages/60-reporting.qml:26
598610msgid "Improving your experience"
599−msgstr ""
611+msgstr "Zlepšovanie vašich skúseností"
600612
601613#: qml/Wizard/Pages/60-reporting.qml:46
602614msgid ""
603615"Your phone is set up to automatically report errors to Canonical and its "
604616"partners, the makers of the operating system."
605617msgstr ""
618+"Telefón je nastavený tak, aby automaticky hlásil chyby Canonical-u a jeho "
619+"partnerom, tvorcom operačného systému."
606620
607621#: qml/Wizard/Pages/60-reporting.qml:53
608622msgid ""
609623"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
610624"Privacy</b>"
611625msgstr ""
626+"Môžete to vypnúť v <b>Systémové nastavenia</b> pod <b>Zabezpečenie a "
627+"súkromie</b>"
612628
613629#: qml/Wizard/Pages/80-finished.qml:24
614630msgid "All done"
615−msgstr ""
631+msgstr "Hotovo"
616632
617633#: qml/Wizard/Pages/80-finished.qml:39
618634msgid "Nice work!"
619−msgstr ""
635+msgstr "Dobrá práca!"
620636
621637#: qml/Wizard/Pages/80-finished.qml:46
622638msgid "Your device is now ready to use."
623−msgstr ""
639+msgstr "Vaše zariadenie je teraz pripravené."
624640
625641#: qml/Wizard/Pages/80-finished.qml:53
626642msgid "Finish"
627−msgstr ""
643+msgstr "Dokončiť"
628644
629645#: qml/Wizard/Pages/here-terms.qml:27
630646msgid "Terms & Conditions"
631−msgstr ""
647+msgstr "Všeobecné obchodné podmienky"
632648
633649#: qml/Wizard/Pages/passwd-confirm.qml:49
634650msgid "Confirm passphrase"
635−msgstr ""
651+msgstr "Potvrdiť prístupovú frázu"
636652
637653#: qml/Wizard/Pages/passwd-confirm.qml:50
638654msgid "Confirm passcode"
639−msgstr ""
655+msgstr "Potvrdiť heslo"
640656
641657#: qml/Wizard/Pages/passwd-confirm.qml:53
642658#: qml/Wizard/Pages/passwd-confirm.qml:54
643659msgid "Please try again."
644−msgstr ""
660+msgstr "Prosím, skúste znovu."
645661
646662#: qml/Wizard/Pages/passwd-set.qml:61
647663msgid "Choose your passcode"
648−msgstr ""
664+msgstr "Zvoliť heslo"
649665
650666#: qml/Wizard/Pages/passwd-set.qml:68
651667msgid "Passphrase must be 4 characters long"
652−msgstr ""
668+msgstr "Prístupová fráza musí mať 4 znaky"
653669
654670#. Translators: This is the arrow for "Back" buttons
655671#: qml/Wizard/StackButton.qml:39
656672#, qt-format
657673msgid "〈 %1"
658−msgstr ""
674+msgstr "〈 %1"
659675
660676#. Translators: This is the arrow for "Forward" buttons
661677#: qml/Wizard/StackButton.qml:42
662678#, qt-format
663679msgid "%1 〉"
664−msgstr ""
680+msgstr "%1 〉"
681+
682+#~ msgid "Unlock SIM"
683+#~ msgstr "Odomknúť SIM"
684+
685+#~ msgid "Roaming"
686+#~ msgstr "Roaming"
po/sl.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2016-01-31 18:34+0000\n"
1212"Last-Translator: Bernard Banko <Unknown>\n"
1313"Language-Team: Slovenian <sl@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || "
1818"n%100==4 ? 3 : 0);\n"
19−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
20−"X-Generator: Launchpad (build 17925)\n"
19+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
20+"X-Generator: Launchpad (build 17936)\n"
2121
2222#: plugins/IntegratedLightDM/Greeter.cpp:112
2323msgid "Password: "
@@ -178,38 +178,38 @@ msgstr "Ponovno priključi sedaj!"
178178msgid "Close all"
179179msgstr "Zapri vse"
180180
181−#: qml/Dash/DashPageHeader.qml:266
181+#: qml/Dash/DashPageHeader.qml:270
182182msgctxt "Button: Open the Ubuntu Store"
183183msgid "Store"
184184msgstr "Trgovina"
185185
186−#: qml/Dash/DashPageHeader.qml:273
186+#: qml/Dash/DashPageHeader.qml:277
187187msgctxt "Button: Start a search in the current dash scope"
188188msgid "Search"
189189msgstr "Iskanje"
190190
191−#: qml/Dash/DashPageHeader.qml:283
191+#: qml/Dash/DashPageHeader.qml:287
192192msgctxt "Button: Show the current dash scope settings"
193193msgid "Settings"
194194msgstr "Nastavitve"
195195
196−#: qml/Dash/DashPageHeader.qml:290
196+#: qml/Dash/DashPageHeader.qml:294
197197msgid "Remove from Favorites"
198198msgstr "Odstrani iz priljubljenih"
199199
200−#: qml/Dash/DashPageHeader.qml:290
200+#: qml/Dash/DashPageHeader.qml:294
201201msgid "Add to Favorites"
202202msgstr "Dodaj med priljubljene"
203203
204−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
204+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
205205msgid "See less"
206206msgstr "Pokaži manj"
207207
208−#: qml/Dash/GenericScopeView.qml:587
208+#: qml/Dash/GenericScopeView.qml:565
209209msgid "See all"
210210msgstr "Pokaži vse"
211211
212−#: qml/Dash/GenericScopeView.qml:649
212+#: qml/Dash/GenericScopeView.qml:627
213213msgctxt "Label: Hint for dash search line edit"
214214msgid "Search"
215215msgstr "Iskanje"
@@ -435,14 +435,6 @@ msgctxt "Button: Call back on phone"
435435msgid "Call back"
436436msgstr "Pokliči nazaj"
437437
438−#: qml/Panel/Indicators/ModemInfoItem.qml:105
439−msgid "Unlock SIM"
440−msgstr "Odkleni SIM"
441−
442−#: qml/Panel/Indicators/RoamingIndication.qml:27
443−msgid "Roaming"
444−msgstr "Gostovanje"
445−
446438#: qml/Tutorial/TutorialBottom.qml:28
447439msgid "Open special menus"
448440msgstr "Odpri posebne menije"
@@ -759,6 +751,12 @@ msgstr "%1 〉"
759751#~ msgid "All"
760752#~ msgstr "Vse"
761753
754+#~ msgid "Unlock SIM"
755+#~ msgstr "Odkleni SIM"
756+
757+#~ msgid "Roaming"
758+#~ msgstr "Gostovanje"
759+
762760#~ msgid "Favorites"
763761#~ msgstr "Priljubljeni"
764762
po/sq.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-11-30 21:05+0000\n"
1212"Last-Translator: Indrit Bashkimi <indrit.bashkimi@gmail.com>\n"
1313"Language-Team: Albanian <sq@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:36+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:57+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr "Rilidhu tani!"
171171msgid "Close all"
172172msgstr "Mbylli të gjitha"
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr "Ruaje"
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr "Kërko"
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr "Parametrat"
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr "Hiq nga të preferuarit"
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr "Shto në të preferuarit"
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr "Shfaq më pak"
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr "Shfaqe të tërin"
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr "Kërko"
@@ -416,14 +416,6 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr "Zhblloko SIM"
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr "Roaming"
426−
427419#: qml/Tutorial/TutorialBottom.qml:28
428420msgid "Open special menus"
429421msgstr ""
@@ -682,11 +674,17 @@ msgstr "%1 〉"
682674#~ msgid "Right edge"
683675#~ msgstr "Cepi djathtas"
684676
677+#~ msgid "Unlock SIM"
678+#~ msgstr "Zhblloko SIM"
679+
685680#~ msgid "Welcome to your Ubuntu phone."
686681#~ msgstr "Mirëseerdhët në telefonin tuaj Ubuntu."
687682
688683#~ msgid "Your phone is now ready to use."
689684#~ msgstr "Telefoni juaj tani është gati për përdorim."
690685
686+#~ msgid "Roaming"
687+#~ msgstr "Roaming"
688+
691689#~ msgid "Please select how you’d like to unlock your phone."
692690#~ msgstr "Zgjidhni mënyrën e zhbllokimit të telefonit."
po/sr.po+68−70
@@ -8,8 +8,8 @@ msgid ""
88msgstr ""
99"Project-Id-Version: unity\n"
1010"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
11−"POT-Creation-Date: 2016-02-12 00:28+0000\n"
12−"PO-Revision-Date: 2016-02-10 21:21+0000\n"
11+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
12+"PO-Revision-Date: 2016-03-09 21:47+0000\n"
1313"Last-Translator: Bojan Bogdanović <Unknown>\n"
1414"Language-Team: српски <xfce4@xfce4.org>\n"
1515"MIME-Version: 1.0\n"
@@ -17,8 +17,8 @@ msgstr ""
1717"Content-Transfer-Encoding: 8bit\n"
1818"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1919"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
20−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
21−"X-Generator: Launchpad (build 17925)\n"
20+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
21+"X-Generator: Launchpad (build 17936)\n"
2222"Language: sr\n"
2323
2424#: plugins/IntegratedLightDM/Greeter.cpp:112
@@ -54,9 +54,9 @@ msgstr "Закључано је због превише погрешних по
5454#, qt-format
5555msgid "Please wait %1 minute and then try again…"
5656msgid_plural "Please wait %1 minutes and then try again…"
57−msgstr[0] "Молим, сачекајте %1 минута, па покушајте поново…"
58−msgstr[1] "Молим, сачекајте %1 минута, па покушајте поново…"
59−msgstr[2] "Молим, сачекајте %1 минута, па покушајте поново…"
57+msgstr[0] "Сачекајте %1 минут, па покушајте поново…"
58+msgstr[1] "Сачекајте %1 минута, па покушајте поново…"
59+msgstr[2] "Сачекајте %1 минута, па покушајте поново…"
6060
6161#: qml/Components/Dialogs.qml:144
6262msgctxt "Title: Lock/Log out dialog"
@@ -75,7 +75,7 @@ msgstr "Закључај"
7575#: qml/Components/Dialogs.qml:154
7676msgctxt "Button: Log out from the system"
7777msgid "Log Out"
78−msgstr "Одјава"
78+msgstr "Одјави ме"
7979
8080#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:194
8181#: qml/Components/Dialogs.qml:253
@@ -85,7 +85,7 @@ msgstr "Откажи"
8585#: qml/Components/Dialogs.qml:173
8686msgctxt "Title: Reboot/Shut down dialog"
8787msgid "Shut down"
88−msgstr "Угаси"
88+msgstr "Гашење"
8989
9090#: qml/Components/Dialogs.qml:174
9191msgid "Are you sure you want to shut down?"
@@ -104,11 +104,11 @@ msgstr "Угаси"
104104#: qml/Components/Dialogs.qml:207
105105msgctxt "Title: Reboot dialog"
106106msgid "Reboot"
107−msgstr "Поново покрени"
107+msgstr "Поновно покретање"
108108
109109#: qml/Components/Dialogs.qml:208
110110msgid "Are you sure you want to reboot?"
111−msgstr "Сигурно желите да поново покренете?"
111+msgstr "Сигурно желите поново да покренете?"
112112
113113#: qml/Components/Dialogs.qml:210
114114msgid "No"
@@ -143,7 +143,7 @@ msgstr "Покрени поново"
143143
144144#: qml/Components/Lockscreen.qml:245
145145msgid "Return to Call"
146−msgstr "Пређи поново на позив"
146+msgstr "Врати се на позив"
147147
148148#: qml/Components/Lockscreen.qml:245
149149msgid "Emergency Call"
@@ -155,61 +155,61 @@ msgstr "У реду"
155155
156156#: qml/Components/ModeSwitchWarningDialog.qml:32
157157msgid "Apps may have unsaved data:"
158−msgstr "Апликације можда имају несачуванх података:"
158+msgstr "Програми можда имају несачуванх података:"
159159
160160#: qml/Components/ModeSwitchWarningDialog.qml:57
161161msgid "Re-dock, save your work and close these apps to continue."
162162msgstr ""
163−"Поново убаците у док, счувајте рад и затворите те апликације да наставите."
163+"Поново убаците у док, сачувајте рад и затворите те програме да наставите."
164164
165165#: qml/Components/ModeSwitchWarningDialog.qml:63
166166msgid "Or force close now (unsaved data will be lost)."
167−msgstr "Или форсирајте затварање одмах (несачувани подаци биће изгубљени)."
167+msgstr "Или сада приморајте затварање (несачувани подаци биће изгубљени)."
168168
169169#: qml/Components/ModeSwitchWarningDialog.qml:75
170170msgid "OK, I will reconnect"
171−msgstr "ОК, поново ћу се повезати"
171+msgstr "У реду, поново ћу се повезати"
172172
173173#: qml/Components/ModeSwitchWarningDialog.qml:76
174174msgid "Reconnect now!"
175−msgstr "Поновоно повезивање одмах!"
175+msgstr "Поново се повежи!"
176176
177177#: qml/Components/ModeSwitchWarningDialog.qml:88
178178msgid "Close all"
179179msgstr "Затворите све"
180180
181−#: qml/Dash/DashPageHeader.qml:266
181+#: qml/Dash/DashPageHeader.qml:270
182182msgctxt "Button: Open the Ubuntu Store"
183183msgid "Store"
184184msgstr "Продавница"
185185
186−#: qml/Dash/DashPageHeader.qml:273
186+#: qml/Dash/DashPageHeader.qml:277
187187msgctxt "Button: Start a search in the current dash scope"
188188msgid "Search"
189189msgstr "Тражи"
190190
191−#: qml/Dash/DashPageHeader.qml:283
191+#: qml/Dash/DashPageHeader.qml:287
192192msgctxt "Button: Show the current dash scope settings"
193193msgid "Settings"
194194msgstr "Подешавања"
195195
196−#: qml/Dash/DashPageHeader.qml:290
196+#: qml/Dash/DashPageHeader.qml:294
197197msgid "Remove from Favorites"
198198msgstr "Уклони из омиљених"
199199
200−#: qml/Dash/DashPageHeader.qml:290
200+#: qml/Dash/DashPageHeader.qml:294
201201msgid "Add to Favorites"
202−msgstr "Додај међу омиљене"
202+msgstr "Додај у омиљене"
203203
204−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
204+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
205205msgid "See less"
206206msgstr "Сажетије"
207207
208−#: qml/Dash/GenericScopeView.qml:587
208+#: qml/Dash/GenericScopeView.qml:565
209209msgid "See all"
210210msgstr "Опширније"
211211
212−#: qml/Dash/GenericScopeView.qml:649
212+#: qml/Dash/GenericScopeView.qml:627
213213msgctxt "Label: Hint for dash search line edit"
214214msgid "Search"
215215msgstr "Претрага"
@@ -237,7 +237,7 @@ msgstr "Напиши оцену"
237237
238238#: qml/Dash/Previews/PreviewSharing.qml:50
239239msgid "Preview Share Item"
240−msgstr "Предпреглед дељене ставке"
240+msgstr "Преглед дељене ставке"
241241
242242#: qml/Dash/PullToRefreshScopeStyle.qml:55
243243msgid "Pull to refresh…"
@@ -268,8 +268,8 @@ msgid ""
268268"Your device is now connected to an external display. Use this screen as a "
269269"touch pad to interact with the mouse."
270270msgstr ""
271−"Ваш уређај је сада повезан на спољњи монитор. Користите овај екран као "
272−"додирну плочу да остварите интеракцију са мишем."
271+"Ваш уређај је сада повезан на спољни монитор. Користите овај екран као "
272+"додирну плочу да радите са мишем."
273273
274274#: qml/Greeter/CoverPage.qml:107
275275msgid "Unlock"
@@ -281,15 +281,15 @@ msgstr "Покушај поново"
281281
282282#: qml/Greeter/LoginList.qml:240
283283msgid "Tap to unlock"
284−msgstr "Додирните да откључате"
284+msgstr "Лупните да откључате"
285285
286286#: qml/Greeter/NarrowView.qml:54 qml/Wizard/Pages/passwd-confirm.qml:53
287287msgid "Sorry, incorrect passphrase."
288−msgstr "Жао ми је, погрешна приступна фраза."
288+msgstr "Извините, погрешна приступна фраза."
289289
290290#: qml/Greeter/NarrowView.qml:55 qml/Wizard/Pages/passwd-confirm.qml:54
291291msgid "Sorry, incorrect passcode."
292−msgstr "Жао нам је, погрешан приступни код."
292+msgstr "Извините, погрешан приступни код."
293293
294294#: qml/Greeter/NarrowView.qml:56
295295msgid "This will be your last attempt."
@@ -300,16 +300,16 @@ msgid ""
300300"If passphrase is entered incorrectly, your phone will conduct a factory "
301301"reset and all personal data will be deleted."
302302msgstr ""
303−"Ако се унесе погрешна присупна фраза, ваш телефон ће се ресетовати и сви "
304−"лични подаци ће бити обрисани."
303+"Ако се унесе погрешна присупна фраза, ваш телефон ће се вратити на фабричка "
304+"подешавања и сви лични подаци биће обрисани."
305305
306306#: qml/Greeter/NarrowView.qml:59
307307msgid ""
308308"If passcode is entered incorrectly, your phone will conduct a factory reset "
309309"and all personal data will be deleted."
310310msgstr ""
311−"Ако се унесе погрешан приступни код, ваш телефон ће се ресетовати и сви "
312−"лични подаци ће бити обрисани."
311+"Ако се унесе погрешан приступни код, ваш телефон ће се вратити на фабричка "
312+"подешавања и сви лични подаци биће обрисани."
313313
314314#: qml/Greeter/NarrowView.qml:116
315315#, qt-format
@@ -327,20 +327,20 @@ msgstr "Унесите приступни код"
327327#: qml/Greeter/NarrowView.qml:119
328328#, qt-format
329329msgid "Sorry, incorrect %1"
330−msgstr "Жао ми је, погрешан %1"
330+msgstr "Извините, погрешан %1"
331331
332332#: qml/Greeter/NarrowView.qml:120
333333msgid "Sorry, incorrect passphrase"
334−msgstr "Жао ми је, погрешна приступна фраза"
334+msgstr "Извините, погрешна приступна фраза"
335335
336336#: qml/Greeter/NarrowView.qml:121
337337msgctxt "passphrase"
338338msgid "Please re-enter"
339−msgstr "Молим, унесите поново"
339+msgstr "Поново унесите"
340340
341341#: qml/Greeter/NarrowView.qml:122
342342msgid "Sorry, incorrect passcode"
343−msgstr "Жао ми је, погрешанприступни код"
343+msgstr "Извините, погрешан приступни код"
344344
345345#: qml/Notifications/NotificationMenuItemFactory.qml:129
346346msgid "Show password"
@@ -348,7 +348,7 @@ msgstr "Прикажи лозинку"
348348
349349#: qml/Panel/ActiveCallHint.qml:79
350350msgid "Tap to return to call..."
351−msgstr "Тапните да се вратите на позив..."
351+msgstr "Лупните да се вратите на позив..."
352352
353353#: qml/Panel/ActiveCallHint.qml:92
354354msgid "Conference"
@@ -356,7 +356,7 @@ msgstr "Конференција"
356356
357357#: qml/Panel/Indicators/MenuItemFactory.qml:753
358358msgid "Nothing is playing"
359−msgstr "Ништа се не репродукује"
359+msgstr "Ништа се не пушта"
360360
361361#: qml/Panel/Indicators/MenuItemFactory.qml:882
362362#, qt-format
@@ -384,17 +384,17 @@ msgstr[2] "%1 секунди"
384384
385385#: qml/Panel/Indicators/MenuItemFactory.qml:894
386386msgid "0 seconds"
387−msgstr "0 секунди"
387+msgstr "0 секунде"
388388
389389#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
390390#: qml/Panel/Indicators/MenuItemFactory.qml:896
391391#, qt-format
392392msgid "%1 remaining"
393−msgstr "%1 преостало"
393+msgstr "Преостаје %1"
394394
395395#: qml/Panel/Indicators/MenuItemFactory.qml:902
396396msgid "In queue…"
397−msgstr "Је заказано…"
397+msgstr "Заказано…"
398398
399399#: qml/Panel/Indicators/MenuItemFactory.qml:906
400400msgid "Downloading"
@@ -402,7 +402,7 @@ msgstr "Преузимање"
402402
403403#: qml/Panel/Indicators/MenuItemFactory.qml:908
404404msgid "Paused, tap to resume"
405−msgstr "Заустављено, тапните да наставите"
405+msgstr "Заустављено, лупните да наставите"
406406
407407#: qml/Panel/Indicators/MenuItemFactory.qml:910
408408msgid "Canceled"
@@ -414,7 +414,7 @@ msgstr "Завршено"
414414
415415#: qml/Panel/Indicators/MenuItemFactory.qml:914
416416msgid "Failed, tap to retry"
417−msgstr "Неуспешно, тапните да покушате поново"
417+msgstr "Неуспело, лупните да покушате поново"
418418
419419#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
420420#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
@@ -432,14 +432,6 @@ msgctxt "Button: Call back on phone"
432432msgid "Call back"
433433msgstr "Позови назад"
434434
435−#: qml/Panel/Indicators/ModemInfoItem.qml:105
436−msgid "Unlock SIM"
437−msgstr "Откључај СИМ картицу"
438−
439−#: qml/Panel/Indicators/RoamingIndication.qml:27
440−msgid "Roaming"
441−msgstr "Роминг"
442−
443435#: qml/Tutorial/TutorialBottom.qml:28
444436msgid "Open special menus"
445437msgstr "Отвори нарочите изборнике"
@@ -454,12 +446,12 @@ msgstr "Ова радња ради различите ствари за разл
454446
455447#: qml/Tutorial/TutorialBottomFinish.qml:25
456448msgid "Tap here to finish."
457−msgstr "Тапните овде за завршетак."
449+msgstr "Лупните овде да завршите."
458450
459451#: qml/Tutorial/TutorialContent.qml:80 qml/Tutorial/TutorialLeftFinish.qml:25
460452#: qml/Tutorial/TutorialRight.qml:144
461453msgid "Tap here to continue."
462−msgstr "Тапните овде за наставак."
454+msgstr "Лупните овде да наставите."
463455
464456#: qml/Tutorial/TutorialLeft.qml:26
465457msgid "Open the launcher"
@@ -491,7 +483,7 @@ msgstr "Дуго превуците са десне ивице."
491483
492484#: qml/Tutorial/TutorialRight.qml:122
493485msgid "View all your running tasks."
494−msgstr "Прегледајте покренуте задатке."
486+msgstr "Прегледајте све покренуте задатке."
495487
496488#: qml/Wizard/Page.qml:89
497489msgctxt "Button: Go back one page in the Wizard"
@@ -504,7 +496,7 @@ msgstr "Здраво!"
504496
505497#: qml/Wizard/Pages/10-welcome.qml:44
506498msgid "Welcome to your Ubuntu device."
507−msgstr ""
499+msgstr "Добро дошли у Убунту уређај."
508500
509501#: qml/Wizard/Pages/10-welcome.qml:52
510502msgid "Let’s get started."
@@ -535,7 +527,7 @@ msgstr "Безбедносно закључавање"
535527
536528#: qml/Wizard/Pages/30-passwd-type.qml:79
537529msgid "Please select how you’d like to unlock your device."
538−msgstr ""
530+msgstr "Изаберите како желите да откључате уређај."
539531
540532#: qml/Wizard/Pages/30-passwd-type.qml:102
541533msgctxt "Label: Type of security method"
@@ -585,7 +577,7 @@ msgstr "Положај"
585577
586578#: qml/Wizard/Pages/50-location.qml:62
587579msgid "Let the phone detect your location:"
588−msgstr "Допустите да телефон препозна Ваш положај:"
580+msgstr "Допустите да телефон препозна ваш положај:"
589581
590582#: qml/Wizard/Pages/50-location.qml:69
591583msgid "Using GPS only (less accurate)"
@@ -594,7 +586,7 @@ msgstr "Користећи само ГПС (мања тачност)"
594586#: qml/Wizard/Pages/50-location.qml:86
595587msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
596588msgstr ""
597−"Помоћу GPS-a, заштићених података о бежичним и мобилним мрежама (препоручено)"
589+"Користећи ГПС, заштићене податке о бежичним и мобилним мрежама (препоручено)"
598590
599591#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
600592#: qml/Wizard/Pages/50-location.qml:103
@@ -602,7 +594,7 @@ msgid ""
602594"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
603595"conditions</a>."
604596msgstr ""
605−"Избором ове могућности се слажете са <a href='#'>условима и одредбама</a> "
597+"Избором ове могућности слажете се са <a href='#'>условима и одредбама</a> "
606598"Nokia HERE-а."
607599
608600#: qml/Wizard/Pages/50-location.qml:112
@@ -611,18 +603,18 @@ msgstr "Нимало"
611603
612604#: qml/Wizard/Pages/50-location.qml:124
613605msgid "You can change your mind later in <b>System Settings</b>."
614−msgstr "Можете да измените поставке касније у <b>Поставкама система</b>."
606+msgstr "Можете да измените поставке касније у <b>Подешавањима система</b>."
615607
616608#: qml/Wizard/Pages/60-reporting.qml:26
617609msgid "Improving your experience"
618−msgstr "Унапређивање доживљаја"
610+msgstr "Побољшање искуства"
619611
620612#: qml/Wizard/Pages/60-reporting.qml:46
621613msgid ""
622614"Your phone is set up to automatically report errors to Canonical and its "
623615"partners, the makers of the operating system."
624616msgstr ""
625−"Телефон је подешен да аутоматски пријављује грешке Каноникалу и сарадницима, "
617+"Телефон је подешен да сам пријављује грешке Каноникалу и сарадницима, "
626618"творцима оперативног система."
627619
628620#: qml/Wizard/Pages/60-reporting.qml:53
@@ -630,7 +622,7 @@ msgid ""
630622"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
631623"Privacy</b>"
632624msgstr ""
633−"Ово може да се онемогући у <b>Поставкама система</b> под ставком "
625+"Ово можете да искључите у <b>Подешавањима система</b> под ставком "
634626"<b>Безбедност и приватност</b>"
635627
636628#: qml/Wizard/Pages/80-finished.qml:24
@@ -643,7 +635,7 @@ msgstr "Лепо одрађено!"
643635
644636#: qml/Wizard/Pages/80-finished.qml:46
645637msgid "Your device is now ready to use."
646−msgstr ""
638+msgstr "Ваш уређај је сада спреман за употребу."
647639
648640#: qml/Wizard/Pages/80-finished.qml:53
649641msgid "Finish"
@@ -664,11 +656,11 @@ msgstr "Потврдите приступни код"
664656#: qml/Wizard/Pages/passwd-confirm.qml:53
665657#: qml/Wizard/Pages/passwd-confirm.qml:54
666658msgid "Please try again."
667−msgstr "Молим, покушајте поново."
659+msgstr "Покушајте поново."
668660
669661#: qml/Wizard/Pages/passwd-set.qml:61
670662msgid "Choose your passcode"
671−msgstr "Изаберите ваш приступни код"
663+msgstr "Изаберите приступни код"
672664
673665#: qml/Wizard/Pages/passwd-set.qml:68
674666msgid "Passphrase must be 4 characters long"
@@ -771,6 +763,12 @@ msgstr "%1 〉"
771763#~ msgid "Done"
772764#~ msgstr "Готово"
773765
766+#~ msgid "Unlock SIM"
767+#~ msgstr "Откључај СИМ картицу"
768+
769+#~ msgid "Roaming"
770+#~ msgstr "Роминг"
771+
774772#~ msgid "Restart"
775773#~ msgstr "Поново покрени"
776774
po/sv.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-07-12 22:17+0000\n"
1212"Last-Translator: Josef Andersson <Unknown>\n"
1313"Language-Team: Swedish\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020"Language: sv\n"
2121
2222#: plugins/IntegratedLightDM/Greeter.cpp:112
@@ -175,38 +175,38 @@ msgstr "Återanslut nu!"
175175msgid "Close all"
176176msgstr "Stäng alla"
177177
178−#: qml/Dash/DashPageHeader.qml:266
178+#: qml/Dash/DashPageHeader.qml:270
179179msgctxt "Button: Open the Ubuntu Store"
180180msgid "Store"
181181msgstr "Förråd"
182182
183−#: qml/Dash/DashPageHeader.qml:273
183+#: qml/Dash/DashPageHeader.qml:277
184184msgctxt "Button: Start a search in the current dash scope"
185185msgid "Search"
186186msgstr "Sök"
187187
188−#: qml/Dash/DashPageHeader.qml:283
188+#: qml/Dash/DashPageHeader.qml:287
189189msgctxt "Button: Show the current dash scope settings"
190190msgid "Settings"
191191msgstr "Inställningar"
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Remove from Favorites"
195195msgstr "Ta bort från Favoriter"
196196
197−#: qml/Dash/DashPageHeader.qml:290
197+#: qml/Dash/DashPageHeader.qml:294
198198msgid "Add to Favorites"
199199msgstr "Lägg till Favoriter"
200200
201−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
201+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
202202msgid "See less"
203203msgstr "Visa mindre"
204204
205−#: qml/Dash/GenericScopeView.qml:587
205+#: qml/Dash/GenericScopeView.qml:565
206206msgid "See all"
207207msgstr "Visa alla"
208208
209−#: qml/Dash/GenericScopeView.qml:649
209+#: qml/Dash/GenericScopeView.qml:627
210210msgctxt "Label: Hint for dash search line edit"
211211msgid "Search"
212212msgstr "Sök"
@@ -426,14 +426,6 @@ msgctxt "Button: Call back on phone"
426426msgid "Call back"
427427msgstr "Ring upp"
428428
429−#: qml/Panel/Indicators/ModemInfoItem.qml:105
430−msgid "Unlock SIM"
431−msgstr "Lås upp SIM-kort"
432−
433−#: qml/Panel/Indicators/RoamingIndication.qml:27
434−msgid "Roaming"
435−msgstr "Roaming"
436−
437429#: qml/Tutorial/TutorialBottom.qml:28
438430msgid "Open special menus"
439431msgstr "Öppna specialmenyer"
@@ -736,6 +728,12 @@ msgstr "%1 〉"
736728#~ msgid "Speaking..."
737729#~ msgstr "Talar…"
738730
731+#~ msgid "Unlock SIM"
732+#~ msgstr "Lås upp SIM-kort"
733+
734+#~ msgid "Roaming"
735+#~ msgstr "Roaming"
736+
739737#~ msgid "Favorites"
740738#~ msgstr "Favoriter"
741739
po/sw.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-07-17 20:02+0000\n"
1212"Last-Translator: Valentine <mwangi_valentino@yahoo.com>\n"
1313"Language-Team: Swahili <sw@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -173,38 +173,38 @@ msgstr ""
173173msgid "Close all"
174174msgstr ""
175175
176−#: qml/Dash/DashPageHeader.qml:266
176+#: qml/Dash/DashPageHeader.qml:270
177177msgctxt "Button: Open the Ubuntu Store"
178178msgid "Store"
179179msgstr "Duka"
180180
181−#: qml/Dash/DashPageHeader.qml:273
181+#: qml/Dash/DashPageHeader.qml:277
182182msgctxt "Button: Start a search in the current dash scope"
183183msgid "Search"
184184msgstr "Tafuta"
185185
186−#: qml/Dash/DashPageHeader.qml:283
186+#: qml/Dash/DashPageHeader.qml:287
187187msgctxt "Button: Show the current dash scope settings"
188188msgid "Settings"
189189msgstr "Mipangilio"
190190
191−#: qml/Dash/DashPageHeader.qml:290
191+#: qml/Dash/DashPageHeader.qml:294
192192msgid "Remove from Favorites"
193193msgstr "Toa kutoka nilizopenda"
194194
195−#: qml/Dash/DashPageHeader.qml:290
195+#: qml/Dash/DashPageHeader.qml:294
196196msgid "Add to Favorites"
197197msgstr "Ongeza kwenye nilizopenda"
198198
199−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
199+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
200200msgid "See less"
201201msgstr "Onyesha kidogo"
202202
203−#: qml/Dash/GenericScopeView.qml:587
203+#: qml/Dash/GenericScopeView.qml:565
204204msgid "See all"
205205msgstr "Onyesha zote"
206206
207−#: qml/Dash/GenericScopeView.qml:649
207+#: qml/Dash/GenericScopeView.qml:627
208208msgctxt "Label: Hint for dash search line edit"
209209msgid "Search"
210210msgstr "Tafuta"
@@ -422,14 +422,6 @@ msgctxt "Button: Call back on phone"
422422msgid "Call back"
423423msgstr ""
424424
425−#: qml/Panel/Indicators/ModemInfoItem.qml:105
426−msgid "Unlock SIM"
427−msgstr "Fungua SIM"
428−
429−#: qml/Panel/Indicators/RoamingIndication.qml:27
430−msgid "Roaming"
431−msgstr "Uzururaji"
432−
433425#: qml/Tutorial/TutorialBottom.qml:28
434426msgid "Open special menus"
435427msgstr "Fungua orodha maalum"
@@ -711,6 +703,12 @@ msgstr ""
711703#~ msgid "Please re-enter"
712704#~ msgstr "Tafadhali bonyeza tena"
713705
706+#~ msgid "Unlock SIM"
707+#~ msgstr "Fungua SIM"
708+
709+#~ msgid "Roaming"
710+#~ msgstr "Uzururaji"
711+
714712#~ msgid "Please select how you’d like to unlock your phone."
715713#~ msgstr "Tafadhali chagua vile ungependa kufunga simu."
716714
po/ta.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2013-10-24 11:36+0000\n"
1212"Last-Translator: Arun Kumar - அருண் குமார் <thangam.arunx@gmail.com>\n"
1313"Language-Team: Ubuntu Tamil Team/Free Tamil Computing/Thamizha\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020"Language: ta\n"
2121
2222#: plugins/IntegratedLightDM/Greeter.cpp:112
@@ -172,38 +172,38 @@ msgstr ""
172172msgid "Close all"
173173msgstr ""
174174
175−#: qml/Dash/DashPageHeader.qml:266
175+#: qml/Dash/DashPageHeader.qml:270
176176msgctxt "Button: Open the Ubuntu Store"
177177msgid "Store"
178178msgstr ""
179179
180−#: qml/Dash/DashPageHeader.qml:273
180+#: qml/Dash/DashPageHeader.qml:277
181181msgctxt "Button: Start a search in the current dash scope"
182182msgid "Search"
183183msgstr ""
184184
185−#: qml/Dash/DashPageHeader.qml:283
185+#: qml/Dash/DashPageHeader.qml:287
186186msgctxt "Button: Show the current dash scope settings"
187187msgid "Settings"
188188msgstr ""
189189
190−#: qml/Dash/DashPageHeader.qml:290
190+#: qml/Dash/DashPageHeader.qml:294
191191msgid "Remove from Favorites"
192192msgstr ""
193193
194−#: qml/Dash/DashPageHeader.qml:290
194+#: qml/Dash/DashPageHeader.qml:294
195195msgid "Add to Favorites"
196196msgstr ""
197197
198−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
198+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
199199msgid "See less"
200200msgstr ""
201201
202−#: qml/Dash/GenericScopeView.qml:587
202+#: qml/Dash/GenericScopeView.qml:565
203203msgid "See all"
204204msgstr ""
205205
206−#: qml/Dash/GenericScopeView.qml:649
206+#: qml/Dash/GenericScopeView.qml:627
207207msgctxt "Label: Hint for dash search line edit"
208208msgid "Search"
209209msgstr ""
@@ -417,14 +417,6 @@ msgctxt "Button: Call back on phone"
417417msgid "Call back"
418418msgstr ""
419419
420−#: qml/Panel/Indicators/ModemInfoItem.qml:105
421−msgid "Unlock SIM"
422−msgstr ""
423−
424−#: qml/Panel/Indicators/RoamingIndication.qml:27
425−msgid "Roaming"
426−msgstr ""
427−
428420#: qml/Tutorial/TutorialBottom.qml:28
429421msgid "Open special menus"
430422msgstr ""
po/te.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2014-07-19 10:04+0000\n"
1212"Last-Translator: Praveen Illa <mail2ipn@gmail.com>\n"
1313"Language-Team: Telugu <te@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr ""
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr ""
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr ""
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr ""
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr ""
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr ""
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr ""
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr ""
@@ -416,14 +416,6 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr ""
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr ""
426−
427419#: qml/Tutorial/TutorialBottom.qml:28
428420msgid "Open special menus"
429421msgstr ""
po/th.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2014-10-02 04:55+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Thai <th@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr ""
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr ""
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr ""
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr ""
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr ""
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr ""
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr ""
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr ""
@@ -416,14 +416,6 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr ""
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr ""
426−
427419#: qml/Tutorial/TutorialBottom.qml:28
428420msgid "Open special menus"
429421msgstr ""
po/tr.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-03-22 15:56+0000\n"
1212"Last-Translator: Arda Ünlü <aarda.uunlu@gmail.com>\n"
1313"Language-Team: Turkish <tr@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr "Mağaza"
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr "Ara"
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr "Ayarlar"
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr "Sık kullanılanlardan kaldır"
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr "Yer İmlerine Ekle"
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr "Daha azını gör"
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr "Tümünü gör"
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr "Ara"
@@ -420,14 +420,6 @@ msgctxt "Button: Call back on phone"
420420msgid "Call back"
421421msgstr ""
422422
423−#: qml/Panel/Indicators/ModemInfoItem.qml:105
424−msgid "Unlock SIM"
425−msgstr "SIM kilidini aç"
426−
427−#: qml/Panel/Indicators/RoamingIndication.qml:27
428−msgid "Roaming"
429−msgstr "Dolaşım"
430−
431423#: qml/Tutorial/TutorialBottom.qml:28
432424msgid "Open special menus"
433425msgstr "Özel menüleri aç"
@@ -739,6 +731,9 @@ msgstr "%1 〉"
739731#~ msgid "Store"
740732#~ msgstr "Mağaza"
741733
734+#~ msgid "Unlock SIM"
735+#~ msgstr "SIM kilidini aç"
736+
742737#~ msgid "Reboot"
743738#~ msgstr "Yeniden başlat"
744739
@@ -760,6 +755,9 @@ msgstr "%1 〉"
760755#~ msgid "Restart"
761756#~ msgstr "Yeniden başlat"
762757
758+#~ msgid "Roaming"
759+#~ msgstr "Dolaşım"
760+
763761#~ msgid "Please re-enter"
764762#~ msgstr "Lütfen yeniden girin"
765763
po/ug.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-12-01 07:37+0000\n"
1212"Last-Translator: Eltikin <eltikinuyghur@hotmail.com>\n"
1313"Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -172,38 +172,38 @@ msgstr ""
172172msgid "Close all"
173173msgstr ""
174174
175−#: qml/Dash/DashPageHeader.qml:266
175+#: qml/Dash/DashPageHeader.qml:270
176176msgctxt "Button: Open the Ubuntu Store"
177177msgid "Store"
178178msgstr "ساقلا"
179179
180−#: qml/Dash/DashPageHeader.qml:273
180+#: qml/Dash/DashPageHeader.qml:277
181181msgctxt "Button: Start a search in the current dash scope"
182182msgid "Search"
183183msgstr "ئىزدە"
184184
185−#: qml/Dash/DashPageHeader.qml:283
185+#: qml/Dash/DashPageHeader.qml:287
186186msgctxt "Button: Show the current dash scope settings"
187187msgid "Settings"
188188msgstr "تەڭشەك"
189189
190−#: qml/Dash/DashPageHeader.qml:290
190+#: qml/Dash/DashPageHeader.qml:294
191191msgid "Remove from Favorites"
192192msgstr "يىغقۇچتىن چىقىرىۋەت"
193193
194−#: qml/Dash/DashPageHeader.qml:290
194+#: qml/Dash/DashPageHeader.qml:294
195195msgid "Add to Favorites"
196196msgstr "يىغقۇچقا قوش"
197197
198−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
198+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
199199msgid "See less"
200200msgstr "ئازراق كۆرۈش"
201201
202−#: qml/Dash/GenericScopeView.qml:587
202+#: qml/Dash/GenericScopeView.qml:565
203203msgid "See all"
204204msgstr "ھەممىنى كۆرۈش…"
205205
206−#: qml/Dash/GenericScopeView.qml:649
206+#: qml/Dash/GenericScopeView.qml:627
207207msgctxt "Label: Hint for dash search line edit"
208208msgid "Search"
209209msgstr "ئىزدە"
@@ -418,14 +418,6 @@ msgctxt "Button: Call back on phone"
418418msgid "Call back"
419419msgstr "تىلفۇن ئۇرلىۋاتىدۇ"
420420
421−#: qml/Panel/Indicators/ModemInfoItem.qml:105
422−msgid "Unlock SIM"
423−msgstr "SIM نى قۇلۇپسىزلاش"
424−
425−#: qml/Panel/Indicators/RoamingIndication.qml:27
426−msgid "Roaming"
427−msgstr "كەزمە"
428−
429421#: qml/Tutorial/TutorialBottom.qml:28
430422msgid "Open special menus"
431423msgstr "تىزملىكنى ئاچ"
@@ -756,6 +748,12 @@ msgstr "%1 〉"
756748#~ msgid "All"
757749#~ msgstr "ھەممىسى"
758750
751+#~ msgid "Unlock SIM"
752+#~ msgstr "SIM نى قۇلۇپسىزلاش"
753+
754+#~ msgid "Roaming"
755+#~ msgstr "كەزمە"
756+
759757#~ msgid "Restart"
760758#~ msgstr "قايتا قوزغات"
761759
po/uk.po+20−22
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-07-04 05:53+0000\n"
1212"Last-Translator: Yuri Chornoivan <yurchor@gmail.com>\n"
1313"Language-Team: Ukrainian <uk@li.org>\n"
@@ -16,8 +16,8 @@ msgstr ""
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
1818"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
20−"X-Generator: Launchpad (build 17925)\n"
19+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
20+"X-Generator: Launchpad (build 17936)\n"
2121
2222#: plugins/IntegratedLightDM/Greeter.cpp:112
2323msgid "Password: "
@@ -180,38 +180,38 @@ msgstr "Перепід’єднатися зараз!"
180180msgid "Close all"
181181msgstr "Закрити усе"
182182
183−#: qml/Dash/DashPageHeader.qml:266
183+#: qml/Dash/DashPageHeader.qml:270
184184msgctxt "Button: Open the Ubuntu Store"
185185msgid "Store"
186186msgstr "Крамниця"
187187
188−#: qml/Dash/DashPageHeader.qml:273
188+#: qml/Dash/DashPageHeader.qml:277
189189msgctxt "Button: Start a search in the current dash scope"
190190msgid "Search"
191191msgstr "Пошук"
192192
193−#: qml/Dash/DashPageHeader.qml:283
193+#: qml/Dash/DashPageHeader.qml:287
194194msgctxt "Button: Show the current dash scope settings"
195195msgid "Settings"
196196msgstr "Параметри"
197197
198−#: qml/Dash/DashPageHeader.qml:290
198+#: qml/Dash/DashPageHeader.qml:294
199199msgid "Remove from Favorites"
200200msgstr "Вилучити з вибраного"
201201
202−#: qml/Dash/DashPageHeader.qml:290
202+#: qml/Dash/DashPageHeader.qml:294
203203msgid "Add to Favorites"
204204msgstr "Додати до вибраного"
205205
206−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
206+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
207207msgid "See less"
208208msgstr "Стисліше"
209209
210−#: qml/Dash/GenericScopeView.qml:587
210+#: qml/Dash/GenericScopeView.qml:565
211211msgid "See all"
212212msgstr "Детальніше"
213213
214−#: qml/Dash/GenericScopeView.qml:649
214+#: qml/Dash/GenericScopeView.qml:627
215215msgctxt "Label: Hint for dash search line edit"
216216msgid "Search"
217217msgstr "Пошук"
@@ -434,14 +434,6 @@ msgctxt "Button: Call back on phone"
434434msgid "Call back"
435435msgstr "Зворотний виклик"
436436
437−#: qml/Panel/Indicators/ModemInfoItem.qml:105
438−msgid "Unlock SIM"
439−msgstr "Розблокувати SIM"
440−
441−#: qml/Panel/Indicators/RoamingIndication.qml:27
442−msgid "Roaming"
443−msgstr "Роумінг"
444−
445437#: qml/Tutorial/TutorialBottom.qml:28
446438msgid "Open special menus"
447439msgstr "Відкрити спеціальні меню"
@@ -506,7 +498,7 @@ msgstr "Привіт!"
506498
507499#: qml/Wizard/Pages/10-welcome.qml:44
508500msgid "Welcome to your Ubuntu device."
509−msgstr ""
501+msgstr "Вітаємо у вашому пристрої Ubuntu."
510502
511503#: qml/Wizard/Pages/10-welcome.qml:52
512504msgid "Let’s get started."
@@ -537,7 +529,7 @@ msgstr "Захист блокування"
537529
538530#: qml/Wizard/Pages/30-passwd-type.qml:79
539531msgid "Please select how you’d like to unlock your device."
540−msgstr ""
532+msgstr "Будь ласка, виберіть спосіб розблокування вашого пристрою."
541533
542534#: qml/Wizard/Pages/30-passwd-type.qml:102
543535msgctxt "Label: Type of security method"
@@ -647,7 +639,7 @@ msgstr "Чудова робота!"
647639
648640#: qml/Wizard/Pages/80-finished.qml:46
649641msgid "Your device is now ready to use."
650−msgstr ""
642+msgstr "Пристрій готовий до використання."
651643
652644#: qml/Wizard/Pages/80-finished.qml:53
653645msgid "Finish"
@@ -751,6 +743,9 @@ msgstr "%1 〉"
751743#~ msgid "All"
752744#~ msgstr "Все"
753745
746+#~ msgid "Unlock SIM"
747+#~ msgstr "Розблокувати SIM"
748+
754749#~ msgid "Favorites"
755750#~ msgstr "Улюблене"
756751
@@ -763,6 +758,9 @@ msgstr "%1 〉"
763758#~ msgid "Done"
764759#~ msgstr "Виконано"
765760
761+#~ msgid "Roaming"
762+#~ msgstr "Роумінг"
763+
766764#~ msgid "Log out"
767765#~ msgstr "Вийти"
768766
po/unity8.pot+34−40
@@ -8,7 +8,7 @@ msgid ""
88msgstr ""
99"Project-Id-Version: unity8\n"
1010"Report-Msgid-Bugs-To: \n"
11−"POT-Creation-Date: 2016-02-12 00:28+0000\n"
11+"POT-Creation-Date: 2016-03-10 22:48+0000\n"
1212"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1313"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1414"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -22,16 +22,16 @@ msgstr ""
2222msgid "Password: "
2323msgstr ""
2424
25−#: plugins/Unity/Launcher/launcheritem.cpp:47
26−#: plugins/Unity/Launcher/launcheritem.cpp:106
25+#: plugins/Unity/Launcher/launcheritem.cpp:48
26+#: plugins/Unity/Launcher/launcheritem.cpp:107
2727msgid "Pin shortcut"
2828msgstr ""
2929
30−#: plugins/Unity/Launcher/launcheritem.cpp:52
30+#: plugins/Unity/Launcher/launcheritem.cpp:53
3131msgid "Quit"
3232msgstr ""
3333
34−#: plugins/Unity/Launcher/launcheritem.cpp:106
34+#: plugins/Unity/Launcher/launcheritem.cpp:107
3535msgid "Unpin shortcut"
3636msgstr ""
3737
@@ -135,15 +135,15 @@ msgctxt "Button: Restart the system"
135135msgid "Restart"
136136msgstr ""
137137
138−#: qml/Components/Lockscreen.qml:245
138+#: qml/Components/Lockscreen.qml:231
139139msgid "Return to Call"
140140msgstr ""
141141
142−#: qml/Components/Lockscreen.qml:245
142+#: qml/Components/Lockscreen.qml:231
143143msgid "Emergency Call"
144144msgstr ""
145145
146−#: qml/Components/Lockscreen.qml:277
146+#: qml/Components/Lockscreen.qml:263
147147msgid "OK"
148148msgstr ""
149149
@@ -152,6 +152,8 @@ msgid "Apps may have unsaved data:"
152152msgstr ""
153153
154154#: qml/Components/ModeSwitchWarningDialog.qml:57
155+msgctxt ""
156+"Re-dock means connect the device again to an external screen/mouse/keyboard"
155157msgid "Re-dock, save your work and close these apps to continue."
156158msgstr ""
157159
@@ -171,38 +173,38 @@ msgstr ""
171173msgid "Close all"
172174msgstr ""
173175
174−#: qml/Dash/DashPageHeader.qml:266
176+#: qml/Dash/DashPageHeader.qml:270
175177msgctxt "Button: Open the Ubuntu Store"
176178msgid "Store"
177179msgstr ""
178180
179−#: qml/Dash/DashPageHeader.qml:273
181+#: qml/Dash/DashPageHeader.qml:277
180182msgctxt "Button: Start a search in the current dash scope"
181183msgid "Search"
182184msgstr ""
183185
184−#: qml/Dash/DashPageHeader.qml:283
186+#: qml/Dash/DashPageHeader.qml:287
185187msgctxt "Button: Show the current dash scope settings"
186188msgid "Settings"
187189msgstr ""
188190
189−#: qml/Dash/DashPageHeader.qml:290
191+#: qml/Dash/DashPageHeader.qml:294
190192msgid "Remove from Favorites"
191193msgstr ""
192194
193−#: qml/Dash/DashPageHeader.qml:290
195+#: qml/Dash/DashPageHeader.qml:294
194196msgid "Add to Favorites"
195197msgstr ""
196198
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
199+#: qml/Dash/GenericScopeView.qml:567 qml/Dash/GenericScopeView.qml:725
198200msgid "See less"
199201msgstr ""
200202
201−#: qml/Dash/GenericScopeView.qml:587
203+#: qml/Dash/GenericScopeView.qml:567
202204msgid "See all"
203205msgstr ""
204206
205−#: qml/Dash/GenericScopeView.qml:649
207+#: qml/Dash/GenericScopeView.qml:629
206208msgctxt "Label: Hint for dash search line edit"
207209msgid "Search"
208210msgstr ""
@@ -228,7 +230,7 @@ msgstr ""
228230msgid "Add a review"
229231msgstr ""
230232
231−#: qml/Dash/Previews/PreviewSharing.qml:50
233+#: qml/Dash/Previews/PreviewSharing.qml:66
232234msgid "Preview Share Item"
233235msgstr ""
234236
@@ -256,13 +258,13 @@ msgstr ""
256258msgid "Also installed"
257259msgstr ""
258260
259−#: qml/DisabledScreenNotice.qml:87
261+#: qml/DisabledScreenNotice.qml:104
260262msgid ""
261263"Your device is now connected to an external display. Use this screen as a "
262−"touch pad to interact with the mouse."
264+"touch pad to interact with the pointer."
263265msgstr ""
264266
265−#: qml/Greeter/CoverPage.qml:107
267+#: qml/Greeter/CoverPage.qml:118
266268msgid "Unlock"
267269msgstr ""
268270
@@ -341,62 +343,62 @@ msgstr ""
341343msgid "Conference"
342344msgstr ""
343345
344−#: qml/Panel/Indicators/MenuItemFactory.qml:753
346+#: qml/Panel/Indicators/MenuItemFactory.qml:752
345347msgid "Nothing is playing"
346348msgstr ""
347349
348−#: qml/Panel/Indicators/MenuItemFactory.qml:882
350+#: qml/Panel/Indicators/MenuItemFactory.qml:881
349351#, qt-format
350352msgid "%1 hour"
351353msgid_plural "%1 hours"
352354msgstr[0] ""
353355msgstr[1] ""
354356
355−#: qml/Panel/Indicators/MenuItemFactory.qml:886
357+#: qml/Panel/Indicators/MenuItemFactory.qml:885
356358#, qt-format
357359msgid "%1 minute"
358360msgid_plural "%1 minutes"
359361msgstr[0] ""
360362msgstr[1] ""
361363
362−#: qml/Panel/Indicators/MenuItemFactory.qml:891
364+#: qml/Panel/Indicators/MenuItemFactory.qml:890
363365#, qt-format
364366msgid "%1 second"
365367msgid_plural "%1 seconds"
366368msgstr[0] ""
367369msgstr[1] ""
368370
369−#: qml/Panel/Indicators/MenuItemFactory.qml:894
371+#: qml/Panel/Indicators/MenuItemFactory.qml:893
370372msgid "0 seconds"
371373msgstr ""
372374
373375#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
374−#: qml/Panel/Indicators/MenuItemFactory.qml:896
376+#: qml/Panel/Indicators/MenuItemFactory.qml:895
375377#, qt-format
376378msgid "%1 remaining"
377379msgstr ""
378380
379−#: qml/Panel/Indicators/MenuItemFactory.qml:902
381+#: qml/Panel/Indicators/MenuItemFactory.qml:901
380382msgid "In queue…"
381383msgstr ""
382384
383−#: qml/Panel/Indicators/MenuItemFactory.qml:906
385+#: qml/Panel/Indicators/MenuItemFactory.qml:905
384386msgid "Downloading"
385387msgstr ""
386388
387−#: qml/Panel/Indicators/MenuItemFactory.qml:908
389+#: qml/Panel/Indicators/MenuItemFactory.qml:907
388390msgid "Paused, tap to resume"
389391msgstr ""
390392
391−#: qml/Panel/Indicators/MenuItemFactory.qml:910
393+#: qml/Panel/Indicators/MenuItemFactory.qml:909
392394msgid "Canceled"
393395msgstr ""
394396
395−#: qml/Panel/Indicators/MenuItemFactory.qml:912
397+#: qml/Panel/Indicators/MenuItemFactory.qml:911
396398msgid "Finished"
397399msgstr ""
398400
399−#: qml/Panel/Indicators/MenuItemFactory.qml:914
401+#: qml/Panel/Indicators/MenuItemFactory.qml:913
400402msgid "Failed, tap to retry"
401403msgstr ""
402404
@@ -416,14 +418,6 @@ msgctxt "Button: Call back on phone"
416418msgid "Call back"
417419msgstr ""
418420
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr ""
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr ""
426−
427421#: qml/Tutorial/TutorialBottom.qml:28
428422msgid "Open special menus"
429423msgstr ""
po/ur.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-05-05 03:12+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Urdu <ur@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr ""
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr ""
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr ""
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr ""
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr ""
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr ""
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr ""
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr ""
@@ -416,14 +416,6 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr ""
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr ""
426−
427419#: qml/Tutorial/TutorialBottom.qml:28
428420msgid "Open special menus"
429421msgstr ""
po/uz.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-07-04 16:03+0000\n"
1212"Last-Translator: Learner <muzaffar.habibullayev@yandex.ru>\n"
1313"Language-Team: Uzbek <uz@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr ""
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr ""
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr ""
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr ""
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr ""
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr ""
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr ""
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr ""
@@ -416,14 +416,6 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr ""
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr ""
426−
427419#: qml/Tutorial/TutorialBottom.qml:28
428420msgid "Open special menus"
429421msgstr ""
po/vi.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2014-01-15 01:19+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Vietnamese <vi@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr ""
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr ""
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr ""
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr ""
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr ""
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr ""
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr ""
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr ""
@@ -416,14 +416,6 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr ""
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr ""
426−
427419#: qml/Tutorial/TutorialBottom.qml:28
428420msgid "Open special menus"
429421msgstr ""
po/wo.po+17−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-10-29 11:16+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Wolof <wo@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr "Ja"
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr "Seet"
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr "Jekkal"
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr "Dindee ci Tànneef yi"
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr "Yokk ci Tànneef yi"
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr "Gis lu néew"
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr "Gis lépp"
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr "Seet"
@@ -420,14 +420,6 @@ msgctxt "Button: Call back on phone"
420420msgid "Call back"
421421msgstr ""
422422
423−#: qml/Panel/Indicators/ModemInfoItem.qml:105
424−msgid "Unlock SIM"
425−msgstr "Tijji SIM"
426−
427−#: qml/Panel/Indicators/RoamingIndication.qml:27
428−msgid "Roaming"
429−msgstr "Roaming"
430−
431423#: qml/Tutorial/TutorialBottom.qml:28
432424msgid "Open special menus"
433425msgstr "Open njëli jagleel"
@@ -755,6 +747,12 @@ msgstr "%1 〉"
755747#~ msgid "Confirm"
756748#~ msgstr "Dëggal"
757749
750+#~ msgid "Unlock SIM"
751+#~ msgstr "Tijji SIM"
752+
753+#~ msgid "Roaming"
754+#~ msgstr "Roaming"
755+
758756#~ msgid "Please re-enter"
759757#~ msgstr "Di la ñaan nga duggalaat"
760758
po/xh.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2013-09-28 13:20+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Xhosa <xh@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr ""
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr ""
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr ""
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr ""
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr ""
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr ""
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr ""
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr ""
@@ -416,14 +416,6 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr ""
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr ""
426−
427419#: qml/Tutorial/TutorialBottom.qml:28
428420msgid "Open special menus"
429421msgstr ""
po/zh_CN.po+20−22
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2015-07-27 10:26+0000\n"
1212"Last-Translator: Ian Li <Unknown>\n"
1313"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -172,38 +172,38 @@ msgstr "即刻重新连接!"
172172msgid "Close all"
173173msgstr "关闭所有"
174174
175−#: qml/Dash/DashPageHeader.qml:266
175+#: qml/Dash/DashPageHeader.qml:270
176176msgctxt "Button: Open the Ubuntu Store"
177177msgid "Store"
178178msgstr "商店"
179179
180−#: qml/Dash/DashPageHeader.qml:273
180+#: qml/Dash/DashPageHeader.qml:277
181181msgctxt "Button: Start a search in the current dash scope"
182182msgid "Search"
183183msgstr "搜索"
184184
185−#: qml/Dash/DashPageHeader.qml:283
185+#: qml/Dash/DashPageHeader.qml:287
186186msgctxt "Button: Show the current dash scope settings"
187187msgid "Settings"
188188msgstr "设置"
189189
190−#: qml/Dash/DashPageHeader.qml:290
190+#: qml/Dash/DashPageHeader.qml:294
191191msgid "Remove from Favorites"
192192msgstr "从收藏夹中移除"
193193
194−#: qml/Dash/DashPageHeader.qml:290
194+#: qml/Dash/DashPageHeader.qml:294
195195msgid "Add to Favorites"
196196msgstr "添加到收藏夹"
197197
198−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
198+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
199199msgid "See less"
200200msgstr "显示更少"
201201
202−#: qml/Dash/GenericScopeView.qml:587
202+#: qml/Dash/GenericScopeView.qml:565
203203msgid "See all"
204204msgstr "查看全部"
205205
206−#: qml/Dash/GenericScopeView.qml:649
206+#: qml/Dash/GenericScopeView.qml:627
207207msgctxt "Label: Hint for dash search line edit"
208208msgid "Search"
209209msgstr "搜索"
@@ -414,14 +414,6 @@ msgctxt "Button: Call back on phone"
414414msgid "Call back"
415415msgstr "回电"
416416
417−#: qml/Panel/Indicators/ModemInfoItem.qml:105
418−msgid "Unlock SIM"
419−msgstr "解开 SIM"
420−
421−#: qml/Panel/Indicators/RoamingIndication.qml:27
422−msgid "Roaming"
423−msgstr "漫游"
424−
425417#: qml/Tutorial/TutorialBottom.qml:28
426418msgid "Open special menus"
427419msgstr "打开专题菜单"
@@ -486,7 +478,7 @@ msgstr "您好!"
486478
487479#: qml/Wizard/Pages/10-welcome.qml:44
488480msgid "Welcome to your Ubuntu device."
489−msgstr ""
481+msgstr "欢迎使用您的Ubuntu设备。"
490482
491483#: qml/Wizard/Pages/10-welcome.qml:52
492484msgid "Let’s get started."
@@ -517,7 +509,7 @@ msgstr "锁屏安全设定"
517509
518510#: qml/Wizard/Pages/30-passwd-type.qml:79
519511msgid "Please select how you’d like to unlock your device."
520−msgstr ""
512+msgstr "请选择你偏好的设备解锁方式。"
521513
522514#: qml/Wizard/Pages/30-passwd-type.qml:102
523515msgctxt "Label: Type of security method"
@@ -618,7 +610,7 @@ msgstr "干得好!"
618610
619611#: qml/Wizard/Pages/80-finished.qml:46
620612msgid "Your device is now ready to use."
621−msgstr ""
613+msgstr "您的设备已就绪。"
622614
623615#: qml/Wizard/Pages/80-finished.qml:53
624616msgid "Finish"
@@ -717,6 +709,9 @@ msgstr "%1 〉"
717709#~ msgid "All"
718710#~ msgstr "所有"
719711
712+#~ msgid "Unlock SIM"
713+#~ msgstr "解开 SIM"
714+
720715#~ msgid "Favorites"
721716#~ msgstr "收藏夹"
722717
@@ -729,6 +724,9 @@ msgstr "%1 〉"
729724#~ msgid "Done"
730725#~ msgstr "完成"
731726
727+#~ msgid "Roaming"
728+#~ msgstr "漫游"
729+
732730#~ msgid "Please re-enter"
733731#~ msgstr "请重新输入"
734732
po/zh_HK.po+11−19
@@ -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: 2016-02-12 00:28+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
1111"PO-Revision-Date: 2014-08-10 11:45+0000\n"
1212"Last-Translator: Daniel Cheung <daniel.2345@hotmail.com>\n"
1313"Language-Team: Chinese (Hong Kong) <zh_HK@li.org>\n"
@@ -15,8 +15,8 @@ msgstr ""
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=1; plural=0;\n"
18−"X-Launchpad-Export-Date: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
@@ -171,38 +171,38 @@ msgstr ""
171171msgid "Close all"
172172msgstr ""
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr ""
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr ""
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr ""
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr ""
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr ""
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr "縮減查看"
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr "查看全部"
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr ""
@@ -416,14 +416,6 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
421−msgstr ""
422−
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
425−msgstr ""
426−
427419#: qml/Tutorial/TutorialBottom.qml:28
428420msgid "Open special menus"
429421msgstr ""
po/zh_TW.po+22−24
@@ -7,16 +7,16 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-02-12 00:28+0000\n"
11−"PO-Revision-Date: 2015-07-31 09:29+0000\n"
10+"POT-Creation-Date: 2016-03-08 21:04+0000\n"
11+"PO-Revision-Date: 2016-02-24 04:40+0000\n"
1212"Last-Translator: Po-Hsu Lin <po-hsu.lin@canonical.com>\n"
1313"Language-Team: Chinese (Traditional) <zh_TW@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: 2016-02-16 05:37+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-03-10 05:58+0000\n"
19+"X-Generator: Launchpad (build 17936)\n"
2020"Language: zh_TW\n"
2121
2222#: plugins/IntegratedLightDM/Greeter.cpp:112
@@ -171,38 +171,38 @@ msgstr "即刻重新連線!"
171171msgid "Close all"
172172msgstr "全部關閉"
173173
174−#: qml/Dash/DashPageHeader.qml:266
174+#: qml/Dash/DashPageHeader.qml:270
175175msgctxt "Button: Open the Ubuntu Store"
176176msgid "Store"
177177msgstr "商城"
178178
179−#: qml/Dash/DashPageHeader.qml:273
179+#: qml/Dash/DashPageHeader.qml:277
180180msgctxt "Button: Start a search in the current dash scope"
181181msgid "Search"
182182msgstr "搜尋"
183183
184−#: qml/Dash/DashPageHeader.qml:283
184+#: qml/Dash/DashPageHeader.qml:287
185185msgctxt "Button: Show the current dash scope settings"
186186msgid "Settings"
187187msgstr "設定"
188188
189−#: qml/Dash/DashPageHeader.qml:290
189+#: qml/Dash/DashPageHeader.qml:294
190190msgid "Remove from Favorites"
191191msgstr "自「最愛」移除"
192192
193−#: qml/Dash/DashPageHeader.qml:290
193+#: qml/Dash/DashPageHeader.qml:294
194194msgid "Add to Favorites"
195195msgstr "加入到「最愛」"
196196
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
197+#: qml/Dash/GenericScopeView.qml:565 qml/Dash/GenericScopeView.qml:723
198198msgid "See less"
199199msgstr "縮減查看"
200200
201−#: qml/Dash/GenericScopeView.qml:587
201+#: qml/Dash/GenericScopeView.qml:565
202202msgid "See all"
203203msgstr "查看全部"
204204
205−#: qml/Dash/GenericScopeView.qml:649
205+#: qml/Dash/GenericScopeView.qml:627
206206msgctxt "Label: Hint for dash search line edit"
207207msgid "Search"
208208msgstr "搜尋"
@@ -401,7 +401,7 @@ msgstr "失敗,點按可重試"
401401#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
402402msgctxt "Button: Send a reply message"
403403msgid "Send"
404−msgstr ""
404+msgstr "傳送"
405405
406406#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
407407msgctxt "Label: Hint in message indicator line edit"
@@ -413,14 +413,6 @@ msgctxt "Button: Call back on phone"
413413msgid "Call back"
414414msgstr "回撥"
415415
416−#: qml/Panel/Indicators/ModemInfoItem.qml:105
417−msgid "Unlock SIM"
418−msgstr "解鎖 SIM 卡"
419−
420−#: qml/Panel/Indicators/RoamingIndication.qml:27
421−msgid "Roaming"
422−msgstr "漫遊"
423−
424416#: qml/Tutorial/TutorialBottom.qml:28
425417msgid "Open special menus"
426418msgstr "開啟特殊選單"
@@ -485,7 +477,7 @@ msgstr "您好!"
485477
486478#: qml/Wizard/Pages/10-welcome.qml:44
487479msgid "Welcome to your Ubuntu device."
488−msgstr ""
480+msgstr "歡迎使用您的 Ubuntu 裝置"
489481
490482#: qml/Wizard/Pages/10-welcome.qml:52
491483msgid "Let’s get started."
@@ -516,7 +508,7 @@ msgstr "安全鎖"
516508
517509#: qml/Wizard/Pages/30-passwd-type.qml:79
518510msgid "Please select how you’d like to unlock your device."
519−msgstr ""
511+msgstr "請選擇您想要的裝置解鎖方式。"
520512
521513#: qml/Wizard/Pages/30-passwd-type.qml:102
522514msgctxt "Label: Type of security method"
@@ -617,7 +609,7 @@ msgstr "做得漂亮!"
617609
618610#: qml/Wizard/Pages/80-finished.qml:46
619611msgid "Your device is now ready to use."
620−msgstr ""
612+msgstr "您的裝置已準備就緒。"
621613
622614#: qml/Wizard/Pages/80-finished.qml:53
623615msgid "Finish"
@@ -743,12 +735,18 @@ msgstr "%1 〉"
743735#~ msgid "Done"
744736#~ msgstr "完成"
745737
738+#~ msgid "Roaming"
739+#~ msgstr "漫遊"
740+
746741#~ msgid "Restart"
747742#~ msgstr "重新啟動"
748743
749744#~ msgid "Please re-enter"
750745#~ msgstr "請再輸入"
751746
747+#~ msgid "Unlock SIM"
748+#~ msgstr "解鎖 SIM 卡"
749+
752750#~ msgid "Welcome to your Ubuntu phone."
753751#~ msgstr "歡迎使用您的 Ubuntu 手機。"
754752
qml/Components/EdgeBarrier.qml+1−1
@@ -105,7 +105,7 @@ Item {
105105 },
106106 Transition {
107107 from: "resisting"; to: "passed"
108− UbuntuNumberAnimation { target: materialContainer; property: "opacity" }
108+ UbuntuNumberAnimation { duration: UbuntuAnimation.BriskDuration; target: materialContainer; property: "opacity" }
109109 }
110110 ]
111111}
qml/Components/Header.qml+1
@@ -18,6 +18,7 @@ import Ubuntu.Components 1.3
1818import Ubuntu.Components.Themes.Ambiance 1.3
1919
2020PageHeadStyle {
21+ // FIXME: Don't use this but PageHeader from Ubuntu.Components 1.3.
2122 id: root
2223
2324 property var styledItem: root
qml/Components/InputMethod.qml+1−9
@@ -22,15 +22,6 @@ import Ubuntu.Gestures 0.1
2222Item {
2323 id: root
2424
25− Connections {
26− target: SurfaceManager
27− onSurfaceCreated: {
28− if (surface.type == Mir.InputMethodType) {
29− surfaceItem.surface = surface;
30− }
31− }
32− }
33−
3425 property int transitionDuration: UbuntuAnimation.FastDuration
3526
3627 MirSurfaceItem {
@@ -41,6 +32,7 @@ Item {
4132
4233 surfaceWidth: width
4334 surfaceHeight: height
35+ surface: SurfaceManager.inputMethodSurface
4436
4537 onLiveChanged: {
4638 if (surface !== null && !live) {
qml/Components/Lockscreen.qml+80−94
@@ -121,108 +121,94 @@ Showable {
121121 opacity: root.darkenBackground
122122 }
123123
124− MouseArea {
125− anchors.fill: root
126− onClicked: {
127− if (pinPadLoader.item)
128− pinPadLoader.item.forceActiveFocus()
129− }
130− }
131−
132− FocusScope {
133− id: loaderScope
124+ Loader {
125+ id: pinPadLoader
126+ objectName: "pinPadLoader"
134127 anchors.fill: parent
135−
136− Loader {
137− id: pinPadLoader
138− objectName: "pinPadLoader"
139− anchors.fill: parent
140− property bool resetting: false
141− property bool waiting: false
142− property bool showWrongText: false
143−
144− source: {
145− if (resetting || !root.required) {
146− return ""
147− } else if (root.delayMinutes > 0) {
148− return "DelayedLockscreen.qml"
149− } else if (root.alphaNumeric) {
150− return "PassphraseLockscreen.qml"
151− } else {
152− return "PinLockscreen.qml"
153− }
154− }
155− onSourceChanged: {
156− waiting = false
157− showWrongText = false
158− if (loaderScope.activeFocus && pinPadLoader.item)
159− pinPadLoader.item.forceActiveFocus()
128+ property bool resetting: false
129+ property bool waiting: false
130+ property bool showWrongText: false
131+ focus: true
132+
133+ source: {
134+ if (resetting || !root.required) {
135+ return ""
136+ } else if (root.delayMinutes > 0) {
137+ return "DelayedLockscreen.qml"
138+ } else if (root.alphaNumeric) {
139+ return "PassphraseLockscreen.qml"
140+ } else {
141+ return "PinLockscreen.qml"
160142 }
143+ }
144+ onSourceChanged: {
145+ waiting = false
146+ showWrongText = false
147+ }
161148
162− Connections {
163− target: pinPadLoader.item
164−
165− onEntered: {
166− pinPadLoader.waiting = true
167− root.entered(passphrase);
168− }
149+ Connections {
150+ target: pinPadLoader.item
169151
170− onCancel: {
171− root.cancel()
172− }
152+ onEntered: {
153+ pinPadLoader.waiting = true
154+ root.entered(passphrase);
173155 }
174156
175− Binding {
176− target: pinPadLoader.item
177− property: "minPinLength"
178− value: root.minPinLength
179− }
180− Binding {
181− target: pinPadLoader.item
182− property: "maxPinLength"
183− value: root.maxPinLength
184− }
185− Binding {
186− target: pinPadLoader.item
187− property: "infoText"
188− value: root.infoText
189− }
190− Binding {
191− target: pinPadLoader.item
192− property: "retryText"
193− value: root.retryText
194− }
195− Binding {
196− target: pinPadLoader.item
197− property: "errorText"
198− value: pinPadLoader.showWrongText ? root.errorText : ""
199− }
200− Binding {
201− target: pinPadLoader.item
202− property: "entryEnabled"
203− value: !pinPadLoader.waiting
204− }
205− Binding {
206− target: pinPadLoader.item
207− property: "alphaNumeric"
208− value: root.alphaNumeric
209− }
210− Binding {
211− target: pinPadLoader.item
212− property: "delayMinutes"
213− value: root.delayMinutes
214− }
215− Binding {
216− target: pinPadLoader.item
217− property: "showCancelButton"
218− value: root.showCancelButton
219− }
220− Binding {
221− target: pinPadLoader.item
222− property: "foregroundColor"
223− value: root.foregroundColor
157+ onCancel: {
158+ root.cancel()
224159 }
225160 }
161+
162+ Binding {
163+ target: pinPadLoader.item
164+ property: "minPinLength"
165+ value: root.minPinLength
166+ }
167+ Binding {
168+ target: pinPadLoader.item
169+ property: "maxPinLength"
170+ value: root.maxPinLength
171+ }
172+ Binding {
173+ target: pinPadLoader.item
174+ property: "infoText"
175+ value: root.infoText
176+ }
177+ Binding {
178+ target: pinPadLoader.item
179+ property: "retryText"
180+ value: root.retryText
181+ }
182+ Binding {
183+ target: pinPadLoader.item
184+ property: "errorText"
185+ value: pinPadLoader.showWrongText ? root.errorText : ""
186+ }
187+ Binding {
188+ target: pinPadLoader.item
189+ property: "entryEnabled"
190+ value: !pinPadLoader.waiting
191+ }
192+ Binding {
193+ target: pinPadLoader.item
194+ property: "alphaNumeric"
195+ value: root.alphaNumeric
196+ }
197+ Binding {
198+ target: pinPadLoader.item
199+ property: "delayMinutes"
200+ value: root.delayMinutes
201+ }
202+ Binding {
203+ target: pinPadLoader.item
204+ property: "showCancelButton"
205+ value: root.showCancelButton
206+ }
207+ Binding {
208+ target: pinPadLoader.item
209+ property: "foregroundColor"
210+ value: root.foregroundColor
211+ }
226212 }
227213
228214 Item {
qml/Components/ModeSwitchWarningDialog.qml+1−1
@@ -54,7 +54,7 @@ ShellDialog {
5454 }
5555
5656 Label {
57− text: i18n.tr("Re-dock, save your work and close these apps to continue.")
57+ text: i18n.ctr("Re-dock means connect the device again to an external screen/mouse/keyboard", "Re-dock, save your work and close these apps to continue.")
5858 wrapMode: Text.WordWrap
5959 color: "#888888"
6060 }
qml/Components/PassphraseLockscreen.qml+5−4
@@ -18,10 +18,11 @@ import QtQuick 2.4
1818import Ubuntu.Components 1.3
1919import "../Components"
2020
21−Item {
21+FocusScope {
2222 id: root
2323 y: units.gu(4)
2424 height: shakeContainer.height
25+ focus: true
2526
2627 property string infoText
2728 property string errorText
@@ -42,8 +43,6 @@ Item {
4243 }
4344 }
4445
45− onActiveFocusChanged: if (activeFocus) pinentryField.forceActiveFocus()
46−
4746 Column {
4847 id: shakeContainer
4948 anchors.horizontalCenter: parent.horizontalCenter
@@ -59,14 +58,16 @@ Item {
5958 text: root.infoText
6059 }
6160
62− Item {
61+ FocusScope {
6362 id: entryContainer
6463 anchors { left: parent.left; right: parent.right; margins: units.gu(2) }
6564 height: units.gu(4)
65+ focus: true
6666
6767 TextInput {
6868 id: pinentryField
6969 objectName: "pinentryField"
70+ focus: true
7071
7172 property bool incorrectOverride: false
7273
qml/Components/PhysicalKeysMapper.qml+24
@@ -42,12 +42,15 @@ Item {
4242 signal screenshotTriggered;
4343
4444 readonly property bool altTabPressed: d.altTabPressed
45+ readonly property bool superPressed: d.superPressed
46+ readonly property bool superTabPressed: d.superTabPressed
4547
4648 property int powerKeyLongPressTime: 2000
4749
4850 // For testing. If running windowed (e.g. tryShell), Alt+Tab is taken by the
4951 // running desktop, set this to true to use Ctrl+Tab instead.
5052 property bool controlInsteadOfAlt: false
53+ property bool controlInsteadOfSuper: false
5154
5255 QtObject {
5356 id: d
@@ -59,6 +62,9 @@ Item {
5962 property bool altPressed: false
6063 property bool altTabPressed: false
6164
65+ property bool superPressed: false
66+ property bool superTabPressed: false
67+
6268 property var powerButtonPressStart: 0
6369
6470 // We need to eat ALT presses until we know what they're for (Alt+Tab or going to the app?)
@@ -119,11 +125,23 @@ Item {
119125 event.accepted = true;
120126 d.altPressInjected = false;
121127 }
128+
129+ // Adding MetaModifier here because that's what keyboards do. Pressing Super_L actually gives
130+ // Super_L + MetaModifier. This helps to make sure we only invoke superPressed if no other
131+ // Modifier is pressed too.
132+ } else if (((event.key == Qt.Key_Super_L || event.key == Qt.Key_Super_R) && event.modifiers === Qt.MetaModifier)
133+ || (root.controlInsteadOfSuper && event.key == Qt.Key_Control)
134+ ) {
135+ d.superPressed = true;
122136 } else if (event.key == Qt.Key_Tab) {
123137 if (d.altPressed && !d.altTabPressed) {
124138 d.altTabPressed = true;
125139 event.accepted = true;
126140 }
141+ if (d.superPressed && !d.superTabPressed) {
142+ d.superTabPressed = true;
143+ event.accepted = true;
144+ }
127145 }
128146 }
129147
@@ -154,6 +172,12 @@ Item {
154172 if (d.altTabPressed) {
155173 event.accepted = true;
156174 }
175+ } else if (event.key == Qt.Key_Super_L || event.key == Qt.Key_Super_R || (root.controlInsteadOfSuper && event.key == Qt.Key_Control)) {
176+ d.superPressed = false;
177+ if (d.superTabPressed) {
178+ d.superTabPressed = false;
179+ event.accepted = true;
180+ }
157181 }
158182 }
159183}
qml/Components/PinLockscreen.qml+22−1
@@ -19,8 +19,9 @@ import Ubuntu.Components 1.3
1919import Ubuntu.Components.ListItems 1.3
2020import "../Components"
2121
22−Item {
22+FocusScope {
2323 id: root
24+ focus: true
2425
2526 property string infoText
2627 property string retryText
@@ -45,6 +46,24 @@ Item {
4546 }
4647 }
4748
49+ Keys.onPressed: {
50+ if (pinentryField.text.length == root.maxPinLength)
51+ return;
52+
53+ if (event.key === Qt.Key_Backspace) {
54+ pinentryField.backspace();
55+ } else if (event.key === Qt.Key_Delete || event.key === Qt.Key_Escape) {
56+ closeButton.clicked()
57+ } else if (event.key === Qt.Key_Enter || event.key === Qt.Key_Return) {
58+ confirmButton.clicked()
59+ } else {
60+ var digit = parseInt(event.text);
61+ if (!isNaN(digit) && typeof digit == "number") {
62+ pinentryField.appendNumber(digit);
63+ }
64+ }
65+ }
66+
4867 Column {
4968 anchors {
5069 left: parent.left;
@@ -204,6 +223,7 @@ Item {
204223 width: numbersGrid.buttonWidth
205224 }
206225 PinPadButton {
226+ id: closeButton
207227 iconName: "close"
208228 height: units.gu(5) // visual spec has this row a little closer in
209229 width: numbersGrid.buttonWidth
@@ -216,6 +236,7 @@ Item {
216236 width: numbersGrid.buttonWidth
217237 }
218238 PinPadButton {
239+ id: confirmButton
219240 iconName: "tick"
220241 objectName: "confirmButton"
221242 height: units.gu(5)
qml/Components/ShellDialog.qml+8
@@ -37,7 +37,15 @@ Dialog {
3737
3838 focus: true
3939
40+ // FIXME: this is a hack because Dialog subtheming seems broken atm
41+ // https://bugs.launchpad.net/ubuntu/+source/ubuntu-ui-toolkit/+bug/1555548
42+ ThemeSettings {
43+ id: themeHack
44+ name: "Ubuntu.Components.Themes.Ambiance"
45+ }
46+
4047 Component.onCompleted: {
48+ __foreground.theme = themeHack
4149 show();
4250 }
4351}
qml/Components/Showable.qml+10
@@ -31,6 +31,7 @@ Item {
3131 property bool required
3232 property bool __shouldShow: false
3333 property bool __skipShowAnimation: false
34+ property bool __skipHideAnimation: false
3435
3536 property list<QtObject> hides
3637 property var showAnimation
@@ -120,12 +121,21 @@ Item {
120121 if (!hideAnimation.running) {
121122 hideAnimation.restart()
122123 }
124+ if (__skipHideAnimation) {
125+ hideAnimation.complete();
126+ }
123127 } else {
124128 visible = false
125129 required = false
126130 }
127131
128132 shown = false
133+ __skipHideAnimation = false;
134+ }
135+
136+ function hideNow() {
137+ __skipHideAnimation = true;
138+ hide();
129139 }
130140
131141 Connections {
qml/Dash/CardCarousel.qml−1
@@ -66,7 +66,6 @@ DashRenderer {
6666 item.cardData = Qt.binding(function() { return model; });
6767 item.fontScale = Qt.binding(function() { return carousel.fontScale; });
6868 item.showHeader = Qt.binding(function() { return loader.explicitlyScaled; });
69− item.titleAlignment = Qt.binding(function() { return cardTool.titleAlignment; });
7069 item.artShapeStyle = "shadow";
7170 item.scopeStyle = cardCarousel.scopeStyle;
7271 }
qml/Dash/CardGrid.qml−1
@@ -70,7 +70,6 @@ DashRenderer {
7070 item.fixedHeaderHeight = Qt.binding(function() { return cardTool.headerHeight; });
7171 item.fixedArtShapeSize = Qt.binding(function() { return cardTool.artShapeSize; });
7272 item.cardData = Qt.binding(function() { return model; });
73− item.titleAlignment = Qt.binding(function() { return cardTool.titleAlignment; });
7473 item.scopeStyle = root.scopeStyle;
7574 item.artShapeStyle = root.artShapeStyle;
7675 item.backgroundShapeStyle = root.backgroundShapeStyle;
qml/Dash/CardHorizontalList.qml−1
@@ -53,7 +53,6 @@ DashRenderer {
5353 item.fixedArtShapeSize = Qt.binding(function() { return cardTool.artShapeSize; });
5454 item.fixedHeaderHeight = Qt.binding(function() { return cardTool.headerHeight; });
5555 item.cardData = Qt.binding(function() { return model; });
56− item.titleAlignment = Qt.binding(function() { return cardTool.titleAlignment; });
5756 item.scopeStyle = root.scopeStyle;
5857 }
5958 Connections {
qml/Dash/CardTool.qml+2−26
@@ -66,7 +66,7 @@ Item {
6666 return layout;
6767 }
6868
69− property var cardComponent: CardCreatorCache.getCardComponent(cardTool.template, cardTool.components);
69+ property var cardComponent: CardCreatorCache.getCardComponent(cardTool.template, cardTool.components, false);
7070
7171 // FIXME: Saviq
7272 // Only way for the card below to actually be laid out completely.
@@ -139,29 +139,6 @@ Item {
139139 readonly property int headerHeight: cardLoader.item ? cardLoader.item.headerHeight : 0
140140 property size artShapeSize: cardLoader.item ? cardLoader.item.artShapeSize : 0
141141
142− /*!
143− \brief Desired alignment of title
144− */
145− readonly property int titleAlignment: {
146− if (template["card-layout"] === "horizontal"
147− || typeof components["title"] !== "object"
148− || components["title"]["align"] === "left") return Text.AlignLeft;
149−
150− var keys = ["mascot", "emblem", "subtitle", "attributes", "summary"];
151−
152− for (var key in keys) {
153− key = keys[key];
154− try {
155− if (typeof components[key] === "string"
156− || typeof components[key]["field"] === "string") return Text.AlignLeft;
157− } catch (e) {
158− continue;
159− }
160− }
161−
162− return Text.AlignHCenter;
163− }
164−
165142 QtObject {
166143 id: carouselTool
167144
@@ -216,10 +193,9 @@ Item {
216193 "summary": "—\n—\n—\n—\n—",
217194 "attributes": attributesModel.model
218195 }
219− sourceComponent: cardTool.cardComponent
196+ sourceComponent: CardCreatorCache.getCardComponent(cardTool.template, cardTool.components, true);
220197 onLoaded: {
221198 item.objectName = "cardToolCard";
222− item.asynchronous = false;
223199 item.width = Qt.binding(function() { return cardTool.cardWidth !== -1 ? cardTool.cardWidth : item.implicitWidth; });
224200 item.height = Qt.binding(function() { return cardTool.cardHeight !== -1 ? cardTool.cardHeight : item.implicitHeight; });
225201 }
qml/Dash/CardVerticalJournal.qml−1
@@ -72,7 +72,6 @@ DashRenderer {
7272 item.fixedArtShapeSize = Qt.binding(function() { return cardTool.artShapeSize; });
7373 item.fixedHeaderHeight = Qt.binding(function() { return cardTool.headerHeight; });
7474 item.cardData = Qt.binding(function() { return model; });
75− item.titleAlignment = Qt.binding(function() { return cardTool.titleAlignment; });
7675 item.scopeStyle = root.scopeStyle;
7776 }
7877 Connections {
qml/Dash/Dash.qml+11−11
@@ -37,6 +37,7 @@ Showable {
3737 }
3838
3939 property bool windowActive: window.active
40+ property bool showOverlayScope: false
4041
4142 DashCommunicatorService {
4243 objectName: "dashCommunicatorService"
@@ -80,7 +81,7 @@ Showable {
8081 return
8182 }
8283
83− closeOverlayScope();
84+ dash.showOverlayScope = false;
8485
8586 dashContent.closePreview();
8687
@@ -93,12 +94,6 @@ Showable {
9394 dashContent.setCurrentScopeAtIndex(scopeIndex, animate, reset)
9495 }
9596
96− function closeOverlayScope() {
97− if (dashContent.x != 0) {
98− dashContent.x = 0;
99− }
100− }
101−
10297 Scopes {
10398 id: scopes
10499 }
@@ -133,12 +128,13 @@ Showable {
133128 height: dash.height
134129 scopes: scopes
135130 visible: x != -width
131+ x: dash.showOverlayScope ? -width : 0
136132 onGotoScope: {
137133 dash.setCurrentScope(scopeId, true, false);
138134 }
139135 onOpenScope: {
140136 scopeItem.scope = scope;
141− x = -width;
137+ dash.showOverlayScope = true;
142138 }
143139 Behavior on x {
144140 UbuntuNumberAnimation {
@@ -207,7 +203,7 @@ Showable {
207203 bottomEdgeController.enableAnimation = true;
208204 bottomEdgeController.progress = 0;
209205 scopeItem.scope = scope;
210− dashContent.x = -dashContent.width;
206+ dash.showOverlayScope = true;
211207 }
212208 onGotoScope: {
213209 bottomEdgeController.enableAnimation = true;
@@ -226,7 +222,7 @@ Showable {
226222 id: scopeItem
227223 objectName: "dashTempScopeItem"
228224
229− x: dashContent.x + width
225+ x: dash.showOverlayScope ? 0 : width
230226 y: dashContent.y
231227 width: parent.width
232228 height: parent.height
@@ -234,7 +230,7 @@ Showable {
234230 hasBackAction: true
235231 isCurrent: visible
236232 onBackClicked: {
237− closeOverlayScope();
233+ dash.showOverlayScope = false;
238234 closePreview();
239235 }
240236
@@ -250,6 +246,10 @@ Showable {
250246 scopes.closeScope(oldScope);
251247 }
252248 }
249+
250+ Behavior on x {
251+ UbuntuNumberAnimation { }
252+ }
253253 }
254254
255255 Rectangle {
qml/Dash/DashPageHeader.qml+4
@@ -170,6 +170,7 @@ Item {
170170 anchors { left: parent.left; right: parent.right }
171171
172172 PageHeadStyle {
173+ // FIXME: Replace PageHeadStyle from the Ambiance theme by the new PageHeader from Ubuntu.Components 1.3.
173174 id: searchHeader
174175 anchors { left: parent.left; right: parent.right }
175176 opacity: headerContainer.clip || headerContainer.showSearch ? 1 : 0 // setting visible false cause column to relayout
@@ -179,6 +180,7 @@ Item {
179180 property color dividerColor: "transparent" // Doesn't matter as we don't have PageHeadSections
180181 property color panelColor: background.topColor
181182 panelForegroundColor: config.foregroundColor
183+ backgroundColor: "transparent"
182184 config: PageHeadConfiguration {
183185 foregroundColor: root.scopeStyle ? root.scopeStyle.headerForeground : theme.palette.normal.baseText
184186 backAction: Action {
@@ -241,6 +243,7 @@ Item {
241243 }
242244
243245 PageHeadStyle {
246+ // FIXME: Replace PageHeadStyle from the Ambiance theme by the new PageHeader from Ubuntu.Components 1.3.
244247 id: header
245248 objectName: "innerPageHeader"
246249 anchors { left: parent.left; right: parent.right }
@@ -251,6 +254,7 @@ Item {
251254 property color dividerColor: "transparent" // Doesn't matter as we don't have PageHeadSections
252255 property color panelColor: background.topColor
253256 panelForegroundColor: config.foregroundColor
257+ backgroundColor: "transparent"
254258 config: PageHeadConfiguration {
255259 title: root.title
256260 foregroundColor: root.scopeStyle ? root.scopeStyle.headerForeground : theme.palette.normal.baseText
qml/Dash/GenericScopeView.qml+16−42
@@ -47,7 +47,7 @@ FocusScope {
4747 style: scope ? scope.customizations : {}
4848 }
4949
50− readonly property bool processing: scope ? scope.searchInProgress || subPageLoader.processing : false
50+ readonly property bool processing: scope ? (scope.searchInProgress || scope.activationInProgress || subPageLoader.processing) : false
5151
5252 signal backClicked()
5353
@@ -73,49 +73,30 @@ FocusScope {
7373 }
7474
7575 property var maybePreviewResult;
76− property int maybePreviewIndex;
77− property var maybePreviewResultsModel;
78− property int maybePreviewLimitedCategoryItemCount;
7976 property string maybePreviewCategoryId;
8077
8178 function clearMaybePreviewData() {
8279 scopeView.maybePreviewResult = undefined;
83− scopeView.maybePreviewIndex = -1;
84− scopeView.maybePreviewResultsModel = undefined;
85− scopeView.maybePreviewLimitedCategoryItemCount = -1;
8680 scopeView.maybePreviewCategoryId = "";
8781 }
8882
89− function itemClicked(index, result, itemModel, resultsModel, limitedCategoryItemCount, categoryId) {
83+ function itemClicked(result, categoryId) {
9084 scopeView.maybePreviewResult = result;
91− scopeView.maybePreviewIndex = index;
92− scopeView.maybePreviewResultsModel = resultsModel;
93− scopeView.maybePreviewLimitedCategoryItemCount = limitedCategoryItemCount;
9485 scopeView.maybePreviewCategoryId = categoryId;
9586
9687 scope.activate(result, categoryId);
9788 }
9889
99− function itemPressedAndHeld(index, result, resultsModel, limitedCategoryItemCount, categoryId) {
90+ function itemPressedAndHeld(result, categoryId) {
10091 clearMaybePreviewData();
10192
102− openPreview(result, index, resultsModel, limitedCategoryItemCount, categoryId);
93+ openPreview(result, categoryId);
10394 }
10495
105− function openPreview(result, index, resultsModel, limitedCategoryItemCount, categoryId) {
106− var previewStack = scope.preview(result, categoryId);
107− if (previewStack) {
108− if (limitedCategoryItemCount > 0) {
109− previewLimitModel.model = resultsModel;
110− previewLimitModel.limit = limitedCategoryItemCount;
111− subPageLoader.model = previewLimitModel;
112− } else {
113− subPageLoader.model = resultsModel;
114− }
115− subPageLoader.initialIndex = -1;
116− subPageLoader.initialIndex = index;
117− subPageLoader.categoryId = categoryId;
118− subPageLoader.previewStack = previewStack;
96+ function openPreview(result, categoryId) {
97+ var previewModel = scope.preview(result, categoryId);
98+ if (previewModel) {
99+ subPageLoader.previewModel = previewModel;
119100 subPageLoader.openSubPage("preview");
120101 }
121102 }
@@ -166,9 +147,6 @@ FocusScope {
166147 onPreviewRequested: { // (QVariant const& result)
167148 if (result === scopeView.maybePreviewResult) {
168149 openPreview(result,
169− scopeView.maybePreviewIndex,
170− scopeView.maybePreviewResultsModel,
171− scopeView.maybePreviewLimitedCategoryItemCount,
172150 scopeView.maybePreviewCategoryId);
173151
174152 clearMaybePreviewData();
@@ -392,6 +370,8 @@ FocusScope {
392370 } else {
393371 cardTool.cardWidth = units.gu(10);
394372 }
373+ } else {
374+ cardTool.cardWidth = units.gu(12);
395375 }
396376 item.minimumHorizontalSpacing = item.defaultMinimumHorizontalSpacing;
397377 }
@@ -400,11 +380,11 @@ FocusScope {
400380 Connections {
401381 target: rendererLoader.item
402382 onClicked: { // (int index, var result, var item, var itemModel)
403− scopeView.itemClicked(index, result, itemModel, target.model, categoryItemCount(), baseItem.category);
383+ scopeView.itemClicked(result, baseItem.category);
404384 }
405385
406386 onPressAndHold: { // (int index, var result, var itemModel)
407− scopeView.itemPressedAndHeld(index, result, target.model, categoryItemCount(), baseItem.category);
387+ scopeView.itemPressedAndHeld(result, baseItem.category);
408388 }
409389
410390 function categoryItemCount() {
@@ -779,13 +759,10 @@ FocusScope {
779759 property var scope: scopeView.scope
780760 property var scopeStyle: scopeView.scopeStyle
781761 property int initialIndex: -1
782− property var previewStack;
783− property string categoryId
784− property var model: null
762+ property var previewModel;
785763
786764 readonly property bool processing: item && item.processing || false
787765 readonly property int count: item && item.count || 0
788− readonly property int currentIndex: item && item.currentIndex || 0
789766 readonly property var currentItem: item && item.currentItem || null
790767
791768 property string subPage: ""
@@ -800,7 +777,7 @@ FocusScope {
800777 }
801778
802779 source: switch(subPage) {
803− case "preview": return "PreviewListView.qml";
780+ case "preview": return "PreviewView.qml";
804781 case "settings": return "ScopeSettingsPage.qml";
805782 default: return "";
806783 }
@@ -810,11 +787,8 @@ FocusScope {
810787 item.scopeStyle = Qt.binding(function() { return subPageLoader.scopeStyle; } )
811788 if (subPage == "preview") {
812789 item.open = Qt.binding(function() { return subPageLoader.open; } )
813− item.initialIndex = Qt.binding(function() { return subPageLoader.initialIndex; } )
814− item.model = Qt.binding(function() { return subPageLoader.model; } )
815− item.categoryId = Qt.binding(function() { return subPageLoader.categoryId; } )
816− item.initialIndexPreviewStack = subPageLoader.previewStack;
817− subPageLoader.previewStack = null;
790+ item.previewModel = subPageLoader.previewModel;
791+ subPageLoader.previewModel = null;
818792 }
819793 open = true;
820794 }
qml/Dash/PreviewListView.qmldeleted−140
@@ -1,140 +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.4
18−import Ubuntu.Components 1.3
19−import Unity 0.2
20−import "../Components"
21−import "Previews" as Previews
22−
23−Item {
24− id: root
25−
26− property int initialIndex: -1
27− property var initialIndexPreviewStack: null
28− property var scope: null
29− property var scopeStyle: null
30− property string categoryId
31− property bool usedInitialIndex: false
32−
33− property alias showSignatureLine: header.showSignatureLine
34−
35− property alias open: previewListView.open
36− property alias model: previewListView.model
37− property alias currentIndex: previewListView.currentIndex
38− property alias currentItem: previewListView.currentItem
39− property alias count: previewListView.count
40−
41− readonly property bool processing: currentItem && (!currentItem.previewModel.loaded
42− || currentItem.previewModel.processingAction)
43−
44− signal backClicked()
45−
46− DashPageHeader {
47− id: header
48− objectName: "pageHeader"
49− width: parent.width
50− title: root.scope ? root.scope.name : ""
51− showBackButton: true
52− searchEntryEnabled: false
53− scopeStyle: root.scopeStyle
54−
55− onBackClicked: root.backClicked()
56− }
57−
58− ListView {
59− id: previewListView
60− objectName: "listView"
61− anchors {
62− top: header.bottom
63− bottom: parent.bottom
64− left: parent.left
65− right: parent.right
66− }
67− orientation: ListView.Horizontal
68− highlightRangeMode: ListView.StrictlyEnforceRange
69− snapMode: ListView.SnapOneItem
70− boundsBehavior: Flickable.DragAndOvershootBounds
71− highlightMoveDuration: 250
72− flickDeceleration: units.gu(625)
73− maximumFlickVelocity: width * 5
74− cacheBuffer: 0
75−
76− property bool open: false
77−
78− onOpenChanged: {
79− if (!open) {
80− // Cancel any pending preview requests or actions
81− if (previewListView.currentItem && previewListView.currentItem.previewData !== undefined) {
82− previewListView.currentItem.previewData.cancelAction();
83− }
84− root.scope.cancelActivation();
85− model = undefined;
86− }
87− }
88−
89− onModelChanged: {
90− if (count > 0 && initialIndex >= 0 && !usedInitialIndex) {
91− usedInitialIndex = true;
92− previewListView.positionViewAtIndex(initialIndex, ListView.SnapPosition);
93− }
94− }
95−
96− delegate: Previews.Preview {
97− id: preview
98− objectName: "preview" + index
99− height: previewListView.height
100− width: previewListView.width
101−
102− isCurrent: ListView.isCurrentItem
103−
104− readonly property var previewStack: {
105− if (root.open) {
106− if (index === root.initialIndex) {
107− return root.initialIndexPreviewStack;
108− } else {
109− return root.scope.preview(result, root.categoryId);
110− }
111− } else {
112− return null;
113− }
114− }
115−
116− previewModel: {
117− if (previewStack) {
118− return previewStack.getPreviewModel(0);
119− } else {
120− return null;
121− }
122− }
123−
124− scopeStyle: root.scopeStyle
125− }
126− }
127−
128− MouseArea {
129− id: processingMouseArea
130− objectName: "processingMouseArea"
131− anchors {
132− left: parent.left
133− right: parent.right
134− top: header.bottom
135− bottom: parent.bottom
136− }
137−
138− enabled: root.processing
139− }
140−}
qml/Dash/PreviewView.qmlnew file+76
@@ -0,0 +1,76 @@
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.4
18+import Ubuntu.Components 1.3
19+import Unity 0.2
20+import "../Components"
21+import "Previews" as Previews
22+
23+Item {
24+ id: root
25+
26+ property bool open: false
27+ property var scope: null
28+ property var scopeStyle: null
29+ property alias showSignatureLine: header.showSignatureLine
30+ property alias previewModel: preview.previewModel
31+ readonly property bool processing: previewModel && (!previewModel.loaded || previewModel.processingAction)
32+
33+ signal backClicked()
34+
35+ DashPageHeader {
36+ id: header
37+ objectName: "pageHeader"
38+ width: parent.width
39+ title: root.scope ? root.scope.name : ""
40+ showBackButton: true
41+ searchEntryEnabled: false
42+ scopeStyle: root.scopeStyle
43+
44+ onBackClicked: root.backClicked()
45+ }
46+
47+ onOpenChanged: {
48+ if (!open) {
49+ root.scope.cancelActivation();
50+ }
51+ }
52+
53+ Previews.Preview {
54+ id: preview
55+ objectName: "preview"
56+ anchors {
57+ top: header.bottom
58+ bottom: parent.bottom
59+ left: parent.left
60+ right: parent.right
61+ }
62+ scopeStyle: root.scopeStyle
63+ }
64+
65+ MouseArea {
66+ id: processingMouseArea
67+ objectName: "processingMouseArea"
68+ anchors {
69+ top: header.bottom
70+ bottom: parent.bottom
71+ left: parent.left
72+ right: parent.right
73+ }
74+ enabled: root.processing
75+ }
76+}
qml/Dash/Previews/Preview.qml−4
@@ -34,9 +34,6 @@ Item {
3434 */
3535 property var previewModel
3636
37− //! \brief Should be set to true if this preview is currently displayed.
38− property bool isCurrent: false
39−
4037 //! \brief The ScopeStyle component.
4138 property var scopeStyle: null
4239
@@ -88,7 +85,6 @@ Item {
8885 widgetId: model.widgetId
8986 widgetType: model.type
9087 widgetData: model.properties
91− isCurrentPreview: root.isCurrent
9288 scopeStyle: root.scopeStyle
9389 parentFlickable: column
9490
qml/Dash/Previews/PreviewAudioPlayback.qml+5−1
@@ -85,7 +85,11 @@ PreviewWidget {
8585 DashAudioPlayer.play();
8686 }
8787 } else {
88− DashAudioPlayer.playSource(sourceUrl);
88+ var playlist = [];
89+ for (var i = 0; i < trackRepeater.count; ++i) {
90+ playlist.push(trackRepeater.itemAt(i).sourceUrl);
91+ }
92+ DashAudioPlayer.playSource(sourceUrl, playlist);
8993 }
9094 }
9195 }
qml/Dash/Previews/PreviewExpandable.qml−1
@@ -84,7 +84,6 @@ PreviewWidget {
8484 widgetId: model.widgetId
8585 widgetType: model.type
8686 widgetData: model.properties
87− isCurrentPreview: root.isCurrentPreview
8887 scopeStyle: root.scopeStyle
8988 anchors {
9089 left: parent.left
qml/Dash/Previews/PreviewHeader.qml+37−9
@@ -25,6 +25,7 @@ import "../"
2525 * The mascot fall back image comes in widgetData["fallback"]
2626 * The subtitle comes in widgetData["subtitle"]
2727 * The attributes comes in widgetData["attributes"]
28+ * The emblem comes in widgetData["emblem"]
2829 */
2930
3031PreviewWidget {
@@ -40,6 +41,7 @@ PreviewWidget {
4041 readonly property string title: root.widgetData["title"] || ""
4142 readonly property string subtitle: root.widgetData["subtitle"] || ""
4243 readonly property var attributes: root.widgetData["attributes"] || null
44+ readonly property url emblem: root.widgetData["emblem"] || ""
4345 readonly property color fontColor: root.scopeStyle ? root.scopeStyle.foreground : theme.palette.normal.baseText
4446
4547 // Rewire the source since we may have unwired it on onStatusChanged
@@ -98,16 +100,42 @@ PreviewWidget {
98100 spacing: units.dp(2)
99101 anchors.verticalCenter: parent.verticalCenter
100102
101− Label {
102− id: titleLabel
103− objectName: "titleLabel"
103+ Item {
104104 anchors { left: parent.left; right: parent.right }
105− elide: Text.ElideRight
106− font.weight: Font.Normal
107− fontSize: "large"
108− wrapMode: Text.Wrap
109− color: headerRoot.fontColor
110− text: headerRoot.title
105+ height: titleLabel.height
106+
107+ Label {
108+ id: titleLabel
109+ objectName: "titleLabel"
110+ anchors {
111+ left: parent.left;
112+ right: iconLoader.right
113+ rightMargin: iconLoader.width > 0 ? units.gu(0.5) : 0
114+ }
115+ elide: Text.ElideRight
116+ font.weight: Font.Normal
117+ fontSize: "large"
118+ wrapMode: Text.Wrap
119+ color: headerRoot.fontColor
120+ text: headerRoot.title
121+ }
122+
123+ Loader {
124+ id: iconLoader
125+ active: headerRoot.emblem != ""
126+ anchors {
127+ bottom: titleLabel.baseline
128+ right: parent.right
129+ }
130+ sourceComponent: Icon {
131+ objectName: "emblemIcon"
132+ source: headerRoot.emblem
133+ color: headerRoot.fontColor
134+ height: source != "" ? titleLabel.font.pixelSize : 0
135+ // FIXME Workaround for bug https://bugs.launchpad.net/ubuntu/+source/ubuntu-ui-toolkit/+bug/1421293
136+ width: implicitWidth > 0 && implicitHeight > 0 ? (implicitWidth / implicitHeight * height) : implicitWidth
137+ }
138+ }
111139 }
112140
113141 Loader {
qml/Dash/Previews/PreviewOverlay.qml+1−1
@@ -158,7 +158,7 @@ Rectangle {
158158 anchors.centerIn: parent
159159 width: units.gu(2.5)
160160 height: width
161− color: theme.palette.normal.foregroundText
161+ color: "white"
162162 name: "close"
163163 }
164164 }
qml/Dash/Previews/PreviewPayments.qml+1−3
@@ -65,9 +65,7 @@ PreviewWidget {
6565 }
6666 onPurchaseCancelled: {
6767 paymentButton.opacity = 1;
68− // DO NOT emit the signal right now, as it causes a new
69− // preview to be requested, when that is not what we want.
70− //root.triggered(widgetId, "purchaseCancelled", source);
68+ root.triggered(widgetId, "purchaseCancelled", source);
7169 }
7270 }
7371 }
qml/Dash/Previews/PreviewRatingDisplay.qml−1
@@ -40,7 +40,6 @@ PreviewWidget {
4040 id: root
4141 implicitHeight: childrenRect.height
4242
43− onIsCurrentPreviewChanged: ratingsList.updateRanges();
4443 onParentFlickableChanged: ratingsList.updateRanges();
4544
4645 Connections {
qml/Dash/Previews/PreviewRatingEdit.qml−1
@@ -68,7 +68,6 @@ PreviewWidget {
6868
6969 widgetId: root.widgetId
7070 widgetData: root.widgetData
71− isCurrentPreview: root.isCurrentPreview
7271 scopeStyle: root.scopeStyle
7372
7473 ratingValue: widgetData["rating"]
qml/Dash/Previews/PreviewSharing.qml+17−7
@@ -44,6 +44,22 @@ Item {
4444 }
4545 }
4646
47+ function createExportedItems(url) {
48+ var items = new Array();
49+ if (typeof url === "string") {
50+ var exportItem = exportItemComponent.createObject();
51+ exportItem.url = url;
52+ items.push(exportItem);
53+ } else {
54+ for (var i = 0; i < url.length; i++) {
55+ var exportItem = exportItemComponent.createObject();
56+ exportItem.url = url[i];
57+ items.push(exportItem);
58+ }
59+ }
60+ return items;
61+ }
62+
4763 Component {
4864 id: exportItemComponent
4965 ContentItem {
@@ -76,13 +92,7 @@ Item {
7692 onPeerSelected: {
7793 var transfer = peer.request();
7894 if (transfer.state === ContentTransfer.InProgress) {
79− var items = new Array();
80− for (var i = 0; i < url.length; i++) {
81− var exportItem = exportItemComponent.createObject();
82− exportItem.url = url[i];
83− items.push(exportItem);
84− }
85− transfer.items = items;
95+ transfer.items = createExportedItems(url);
8696 transfer.state = ContentTransfer.Charged;
8797 }
8898 peerPicker.visible = false;
qml/Dash/Previews/PreviewWidget.qml−3
@@ -19,9 +19,6 @@ import QtQuick 2.4
1919/*! Interface for preview widgets. */
2020
2121Item {
22− //! Specifies the preview widget being currently used or not
23− property bool isCurrentPreview: true
24−
2522 //! The widget identifier
2623 property string widgetId
2724
qml/Dash/Previews/PreviewWidgetFactory.qml−4
@@ -37,9 +37,6 @@ Loader {
3737 //! Should the widget show in expanded mode (For those that support it)
3838 property bool expanded: widgetType !== "expandable" || widgetData["expanded"] === true
3939
40− //! Set to true if the parent preview is displayed.
41− property bool isCurrentPreview: false
42−
4340 //! Set margins width.
4441 property real widgetMargins: status === Loader.Ready ? item.widgetMargins : units.gu(1)
4542
@@ -82,7 +79,6 @@ Loader {
8279 onLoaded: {
8380 item.widgetId = Qt.binding(function() { return root.widgetId } )
8481 item.widgetData = Qt.binding(function() { return root.widgetData } )
85− item.isCurrentPreview = Qt.binding(function() { return root.isCurrentPreview } )
8682 item.expanded = Qt.binding(function() { return root.expanded } )
8783 item.scopeStyle = Qt.binding(function() { return root.scopeStyle } )
8884 item.parentFlickable = Qt.binding(function() { return root.parentFlickable } )
qml/Dash/ScopesList.qml+1−1
@@ -24,7 +24,7 @@ Item {
2424 property var scope: null
2525
2626 // Properties used by parent
27− readonly property bool processing: scope ? scope.searchInProgress : false
27+ readonly property bool processing: scope ? (scope.searchInProgress || scope.activationInProgress) : false
2828
2929 // Signals
3030 signal backClicked()
qml/Dash/ScopesListCategoryItem.qml+8−4
@@ -18,7 +18,7 @@ import QtQuick 2.4
1818import QtQuick.Layouts 1.1
1919import Ubuntu.Components 1.3
2020
21−MouseArea {
21+AbstractButton {
2222 id: root
2323
2424 signal requestFavorite(string scopeId, bool favorite)
@@ -84,15 +84,19 @@ MouseArea {
8484 visible: text != ""
8585 }
8686 }
87− MouseArea {
87+ AbstractButton {
8888 id: starArea
8989 objectName: "starArea"
9090 height: parent.height
9191 width: height
9292 anchors.right: parent.right
9393 onClicked: if (!editMode) root.requestFavorite(model.scopeId, !isFavorite);
94− onPressed: if (editMode) root.handlePressed(starArea);
95− onReleased: if (editMode) root.handleReleased(starArea);
94+ onPressedChanged: {
95+ if (editMode) {
96+ if (pressed) root.handlePressed(starArea.__mouseArea);
97+ else root.handleReleased(starArea.__mouseArea);
98+ }
99+ }
96100 visible: editMode || showStar
97101 Icon {
98102 id: star
qml/DeviceConfiguration.qml+54−16
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2015 Canonical, Ltd.
2+ * Copyright (C) 2015-2016 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -15,6 +15,7 @@
1515 */
1616
1717import QtQuick 2.4
18+import Utils 0.1
1819
1920QtObject {
2021 id: root
@@ -34,57 +35,83 @@ QtObject {
3435
3536 readonly property alias category: priv.category
3637
38+ readonly property var deviceConfigParser: DeviceConfigParser {
39+ name: root.name
40+ }
41+
3742 readonly property var priv: StateGroup {
3843 id: priv
3944
40− property int primaryOrientation: root.useNativeOrientation
45+ property int primaryOrientation: deviceConfigParser.primaryOrientation == Qt.PrimaryOrientation ?
46+ root.useNativeOrientation : deviceConfigParser.primaryOrientation
4147
42− property int supportedOrientations: Qt.PortraitOrientation
43− | Qt.InvertedPortraitOrientation
44− | Qt.LandscapeOrientation
45− | Qt.InvertedLandscapeOrientation
48+ property int supportedOrientations: deviceConfigParser.supportedOrientations
4649
47− property int landscapeOrientation: Qt.LandscapeOrientation
48− property int invertedLandscapeOrientation: Qt.InvertedLandscapeOrientation
49− property int portraitOrientation: Qt.PortraitOrientation
50− property int invertedPortraitOrientation: Qt.InvertedPortraitOrientation
51−
52− // Supported values so far:
53− // "phone", "tablet" or "desktop"
54− property string category: "phone"
50+ property int landscapeOrientation: deviceConfigParser.landscapeOrientation
51+ property int invertedLandscapeOrientation: deviceConfigParser.invertedLandscapeOrientation
52+ property int portraitOrientation: deviceConfigParser.portraitOrientation
53+ property int invertedPortraitOrientation: deviceConfigParser.invertedPortraitOrientation
54+ property string category: deviceConfigParser.category
5555
5656 states: [
5757 State {
5858 name: "mako"
5959 PropertyChanges {
6060 target: priv
61+ primaryOrientation: root.useNativeOrientation
6162 supportedOrientations: Qt.PortraitOrientation
6263 | Qt.LandscapeOrientation
6364 | Qt.InvertedLandscapeOrientation
65+ landscapeOrientation: Qt.LandscapeOrientation
66+ invertedLandscapeOrientation: Qt.InvertedLandscapeOrientation
67+ portraitOrientation: Qt.PortraitOrientation
68+ invertedPortraitOrientation: Qt.InvertedPortraitOrientation
69+ category: "phone"
6470 }
6571 },
6672 State {
6773 name: "krillin"
6874 PropertyChanges {
6975 target: priv
76+ primaryOrientation: root.useNativeOrientation
7077 supportedOrientations: Qt.PortraitOrientation
7178 | Qt.LandscapeOrientation
7279 | Qt.InvertedLandscapeOrientation
80+ landscapeOrientation: Qt.LandscapeOrientation
81+ invertedLandscapeOrientation: Qt.InvertedLandscapeOrientation
82+ portraitOrientation: Qt.PortraitOrientation
83+ invertedPortraitOrientation: Qt.InvertedPortraitOrientation
84+ category: "phone"
7385 }
7486 },
7587 State {
7688 name: "arale"
7789 PropertyChanges {
7890 target: priv
91+ primaryOrientation: root.useNativeOrientation
7992 supportedOrientations: Qt.PortraitOrientation
8093 | Qt.LandscapeOrientation
8194 | Qt.InvertedLandscapeOrientation
95+ landscapeOrientation: Qt.LandscapeOrientation
96+ invertedLandscapeOrientation: Qt.InvertedLandscapeOrientation
97+ portraitOrientation: Qt.PortraitOrientation
98+ invertedPortraitOrientation: Qt.InvertedPortraitOrientation
99+ category: "phone"
82100 }
83101 },
84102 State {
85103 name: "manta"
86104 PropertyChanges {
87105 target: priv
106+ primaryOrientation: root.useNativeOrientation
107+ supportedOrientations: Qt.PortraitOrientation
108+ | Qt.InvertedPortraitOrientation
109+ | Qt.LandscapeOrientation
110+ | Qt.InvertedLandscapeOrientation
111+ landscapeOrientation: Qt.LandscapeOrientation
112+ invertedLandscapeOrientation: Qt.InvertedLandscapeOrientation
113+ portraitOrientation: Qt.PortraitOrientation
114+ invertedPortraitOrientation: Qt.InvertedPortraitOrientation
88115 category: "tablet"
89116 }
90117 },
@@ -92,9 +119,15 @@ QtObject {
92119 name: "flo"
93120 PropertyChanges {
94121 target: priv
122+ primaryOrientation: Qt.InvertedLandscapeOrientation
123+ supportedOrientations: Qt.PortraitOrientation
124+ | Qt.InvertedPortraitOrientation
125+ | Qt.LandscapeOrientation
126+ | Qt.InvertedLandscapeOrientation
95127 landscapeOrientation: Qt.InvertedLandscapeOrientation
96128 invertedLandscapeOrientation: Qt.LandscapeOrientation
97− primaryOrientation: Qt.InvertedLandscapeOrientation
129+ portraitOrientation: Qt.PortraitOrientation
130+ invertedPortraitOrientation: Qt.InvertedPortraitOrientation
98131 category: "tablet"
99132 }
100133 },
@@ -102,8 +135,13 @@ QtObject {
102135 name: "desktop"
103136 PropertyChanges {
104137 target: priv
105− category: "desktop"
138+ primaryOrientation: root.useNativeOrientation
106139 supportedOrientations: root.useNativeOrientation
140+ landscapeOrientation: Qt.LandscapeOrientation
141+ invertedLandscapeOrientation: Qt.InvertedLandscapeOrientation
142+ portraitOrientation: Qt.PortraitOrientation
143+ invertedPortraitOrientation: Qt.InvertedPortraitOrientation
144+ category: "desktop"
107145 }
108146 }
109147 ]
qml/DisabledScreenNotice.qml+44−20
@@ -17,6 +17,7 @@
1717import QtQuick 2.4
1818import QtQuick.Layouts 1.1
1919import Ubuntu.Components 1.3
20+import Unity.Session 0.1
2021import QtQuick.Window 2.2
2122import "Components"
2223
@@ -25,19 +26,36 @@ Item {
2526
2627 property bool infoNoteDisplayed: true
2728
28− WallpaperResolver {
29− width: root.width
30− id: wallpaperResolver
29+ // For testing
30+ property var screen: Screen
31+ property var orientationLock: OrientationLock
32+
33+ DeviceConfiguration {
34+ id: deviceConfiguration
35+ name: applicationArguments.deviceName
3136 }
3237
3338 Item {
3439 id: contentContainer
40+ objectName: "contentContainer"
3541 anchors.centerIn: parent
3642 height: rotation == 90 || rotation == 270 ? parent.width : parent.height
3743 width: rotation == 90 || rotation == 270 ? parent.height : parent.width
3844
45+ property int savedOrientation: deviceConfiguration.primaryOrientation == deviceConfiguration.useNativeOrientation
46+ ? (root.width > root.height ? Qt.LandscapeOrientation : Qt.PortraitOrientation)
47+ : deviceConfiguration.primaryOrientation
48+
3949 rotation: {
40− switch (Screen.orientation) {
50+ var usedOrientation = root.screen.orientation;
51+
52+ if (root.orientationLock.enabled) {
53+ usedOrientation = savedOrientation;
54+ }
55+
56+ savedOrientation = usedOrientation;
57+
58+ switch (usedOrientation) {
4159 case Qt.PortraitOrientation:
4260 return 0;
4361 case Qt.LandscapeOrientation:
@@ -47,6 +65,8 @@ Item {
4765 case Qt.InvertedLandscapeOrientation:
4866 return 90;
4967 }
68+
69+ return 0;
5070 }
5171 transformOrigin: Item.Center
5272
@@ -60,9 +80,9 @@ Item {
6080 }
6181 }
6282
63− Image {
83+ Rectangle {
6484 anchors.fill: parent
65− source: wallpaperResolver.background
85+ color: "#3b3b3b"
6686 }
6787
6888 Item {
@@ -74,22 +94,26 @@ Item {
7494 UbuntuNumberAnimation { }
7595 }
7696
77− Rectangle {
78− anchors.fill: parent
79− color: "black"
80− opacity: 0.4
81− }
82−
83− Label {
84− id: text
97+ Column {
8598 anchors.centerIn: parent
8699 width: parent.width - units.gu(8)
87− text: i18n.tr("Your device is now connected to an external display. Use this screen as a touch pad to interact with the mouse.")
88− color: "white"
89− horizontalAlignment: Text.AlignHCenter
90− verticalAlignment: Text.AlignVCenter
91− fontSize: "x-large"
92− wrapMode: Text.Wrap
100+ spacing: units.gu(4)
101+
102+ Label {
103+ id: text
104+ text: i18n.tr("Your device is now connected to an external display. Use this screen as a touch pad to interact with the pointer.")
105+ color: "white"
106+ width: parent.width
107+ fontSize: "large"
108+ wrapMode: Text.Wrap
109+ }
110+ Icon {
111+ height: units.gu(8)
112+ width: height
113+ name: "input-touchpad-symbolic"
114+ color: "white"
115+ anchors.horizontalCenter: parent.horizontalCenter
116+ }
93117 }
94118 }
95119
qml/Greeter/CoverPage.qml+13−2
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013,2014,2015 Canonical, Ltd.
2+ * Copyright (C) 2013-2016 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -34,6 +34,7 @@ Showable {
3434 readonly property real showProgress: MathUtils.clamp((width - Math.abs(x)) / width, 0, 1)
3535
3636 signal tease()
37+ signal clicked()
3738
3839 function hideRight() {
3940 d.forceRightOnNextHideAnimation = true;
@@ -55,7 +56,17 @@ Showable {
5556 // instead, we can get a little extra horizontal push by using transforms.
5657 transform: Translate { id: translation; x: root.draggable ? launcherOffset : 0 }
5758
58− MouseArea { anchors.fill: parent; }
59+ // Eat events elsewhere on the coverpage, except mouse clicks which we pass
60+ // up (they are used in the NarrowView to hide the cover page)
61+ MouseArea {
62+ anchors.fill: parent
63+ onClicked: root.clicked()
64+
65+ MultiPointTouchArea {
66+ anchors.fill: parent
67+ mouseEnabled: false
68+ }
69+ }
5970
6071 Rectangle {
6172 // In case background fails to load
qml/Greeter/Infographics.qml+2−1
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013-2016 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -402,6 +402,7 @@ Item {
402402
403403 MouseArea {
404404 anchors.fill: dataCircle
405+ enabled: notification.text != ""
405406
406407 onDoubleClicked: {
407408 if (!d.animating) {
qml/Greeter/NarrowView.qml+14−1
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2015 Canonical, Ltd.
2+ * Copyright (C) 2015-2016 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -125,6 +125,18 @@ FocusScope {
125125 onCancel: coverPage.show()
126126 onEmergencyCall: root.emergencyCall()
127127
128+ onEnabledChanged: {
129+ if (enabled) {
130+ lockscreen.forceActiveFocus();
131+ }
132+ }
133+
134+ onVisibleChanged: {
135+ if (visible) {
136+ lockscreen.forceActiveFocus();
137+ }
138+ }
139+
128140 function maybeShow() {
129141 if (root.locked && !shown) {
130142 showNow();
@@ -145,6 +157,7 @@ FocusScope {
145157 width: parent.width
146158 background: root.background
147159 onTease: root.tease()
160+ onClicked: hide()
148161
149162 onShowProgressChanged: {
150163 if (showProgress === 1) {
qml/Launcher/Launcher.qml+144−11
@@ -19,21 +19,26 @@ import "../Components"
1919import Ubuntu.Components 1.3
2020import Ubuntu.Gestures 0.1
2121import Unity.Launcher 0.1
22+import GlobalShortcut 1.0
2223
23−Item {
24+FocusScope {
2425 id: root
2526
2627 property bool autohideEnabled: false
28+ property bool lockedVisible: false
2729 property bool available: true // can be used to disable all interactions
2830 property alias inverted: panel.inverted
2931 property bool shadeBackground: true // can be used to disable background shade when launcher is visible
3032
31− property int panelWidth: units.gu(8)
33+ property int panelWidth: units.gu(10)
3234 property int dragAreaWidth: units.gu(1)
3335 property int minimizeDistance: units.gu(26)
3436 property real progress: dragArea.dragging && dragArea.touchX > panelWidth ?
3537 (width * (dragArea.touchX-panelWidth) / (width - panelWidth)) : 0
3638
39+ property bool superPressed: false
40+ property bool superTabPressed: false
41+
3742 readonly property bool dragging: dragArea.dragging
3843 readonly property real dragDistance: dragArea.dragging ? dragArea.touchX : 0
3944 readonly property real visibleWidth: panel.width + panel.x
@@ -57,12 +62,55 @@ Item {
5762 }
5863 }
5964
65+ onSuperPressedChanged: {
66+ if (superPressed) {
67+ superPressTimer.start();
68+ superLongPressTimer.start();
69+ } else {
70+ superPressTimer.stop();
71+ superLongPressTimer.stop();
72+ launcher.switchToNextState("");
73+ panel.shortcutHintsShown = false;
74+ }
75+ }
76+
77+ onSuperTabPressedChanged: {
78+ if (superTabPressed) {
79+ switchToNextState("visible")
80+ panel.highlightIndex = -1;
81+ root.focus = true;
82+ superPressTimer.stop();
83+ superLongPressTimer.stop();
84+ } else {
85+ if (panel.highlightIndex == -1) {
86+ showDashHome();
87+ } else if (panel.highlightIndex >= 0){
88+ launcherApplicationSelected(LauncherModel.get(panel.highlightIndex).appId);
89+ }
90+ panel.highlightIndex = -2;
91+ switchToNextState("");
92+ root.focus = false;
93+ }
94+ }
95+
96+ onLockedVisibleChanged: {
97+ if (lockedVisible && state == "") {
98+ panel.dismissTimer.stop();
99+ fadeOutAnimation.stop();
100+ switchToNextState("visible")
101+ } else if (!lockedVisible && state == "visible") {
102+ hide();
103+ }
104+ }
105+
60106 function hide() {
61107 switchToNextState("")
62108 }
63109
64110 function fadeOut() {
65− fadeOutAnimation.start();
111+ if (!root.lockedVisible) {
112+ fadeOutAnimation.start();
113+ }
66114 }
67115
68116 function switchToNextState(state) {
@@ -90,6 +138,77 @@ Item {
90138 }
91139 }
92140
141+ function openForKeyboardNavigation() {
142+ panel.highlightIndex = -1; // The BFB
143+ root.focus = true;
144+ switchToNextState("visible")
145+ }
146+
147+ Keys.onPressed: {
148+ switch (event.key) {
149+ case Qt.Key_Backtab:
150+ panel.highlightPrevious();
151+ event.accepted = true;
152+ break;
153+ case Qt.Key_Up:
154+ if (root.inverted) {
155+ panel.highlightNext()
156+ } else {
157+ panel.highlightPrevious();
158+ }
159+ event.accepted = true;
160+ break;
161+ case Qt.Key_Tab:
162+ panel.highlightNext();
163+ event.accepted = true;
164+ break;
165+ case Qt.Key_Down:
166+ if (root.inverted) {
167+ panel.highlightPrevious();
168+ } else {
169+ panel.highlightNext();
170+ }
171+ event.accepted = true;
172+ break;
173+ case Qt.Key_Right:
174+ panel.openQuicklist(panel.highlightIndex)
175+ event.accepted = true;
176+ break;
177+ case Qt.Key_Escape:
178+ panel.highlightIndex = -2;
179+ // Falling through intentionally
180+ case Qt.Key_Enter:
181+ case Qt.Key_Return:
182+ case Qt.Key_Space:
183+ if (panel.highlightIndex == -1) {
184+ showDashHome();
185+ } else if (panel.highlightIndex >= 0) {
186+ launcherApplicationSelected(LauncherModel.get(panel.highlightIndex).appId);
187+ }
188+ root.hide();
189+ panel.highlightIndex = -2
190+ event.accepted = true;
191+ root.focus = false;
192+ }
193+ }
194+
195+ Timer {
196+ id: superPressTimer
197+ interval: 200
198+ onTriggered: {
199+ switchToNextState("visible")
200+ }
201+ }
202+
203+ Timer {
204+ id: superLongPressTimer
205+ interval: 1000
206+ onTriggered: {
207+ switchToNextState("visible")
208+ panel.shortcutHintsShown = true;
209+ }
210+ }
211+
93212 Timer {
94213 id: teaseTimer
95214 interval: mode == "teasing" ? 200 : 300
@@ -106,6 +225,13 @@ Item {
106225 interval: 1
107226 property string nextState: ""
108227 onTriggered: {
228+ if (root.lockedVisible && nextState == "") {
229+ // Due to binding updates when switching between modes
230+ // it could happen that our request to show will be overwritten
231+ // with a hide request. Rewrite it when we know hiding is not allowed.
232+ nextState = "visible"
233+ }
234+
109235 // switching to an intermediate state here to make sure all the
110236 // values are restored, even if we were already in the target state
111237 root.state = "tmp"
@@ -151,7 +277,7 @@ Item {
151277
152278 MouseArea {
153279 id: launcherDragArea
154− enabled: root.available && (root.state == "visible" || root.state == "visibleTemporary")
280+ enabled: root.available && (root.state == "visible" || root.state == "visibleTemporary") && !root.lockedVisible
155281 anchors.fill: panel
156282 anchors.rightMargin: -units.gu(2)
157283 drag {
@@ -172,9 +298,10 @@ Item {
172298 InverseMouseArea {
173299 id: closeMouseArea
174300 anchors.fill: panel
175− enabled: root.shadeBackground && root.state == "visible"
301+ enabled: root.shadeBackground && root.state == "visible" && (!root.lockedVisible || panel.highlightIndex >= -1)
176302 visible: enabled
177303 onPressed: {
304+ panel.highlightIndex = -2
178305 root.hide();
179306 }
180307 }
@@ -183,7 +310,7 @@ Item {
183310 id: backgroundShade
184311 anchors.fill: parent
185312 color: "black"
186− opacity: root.shadeBackground && root.state == "visible" ? 0.6 : 0
313+ opacity: root.shadeBackground && root.state == "visible" && !root.lockedVisible ? 0.6 : 0
187314
188315 Behavior on opacity { NumberAnimation { duration: UbuntuAnimation.BriskDuration } }
189316 }
@@ -202,8 +329,8 @@ Item {
202329 rotation: -90
203330 anchors.centerIn: parent
204331 gradient: Gradient {
205− GradientStop { position: 0.0; color: panel.color}
206− GradientStop { position: 1.0; color: Qt.rgba(panel.r,panel.g,panel.b,0)}
332+ GradientStop { position: 0.0; color: Qt.rgba(panel.color.r, panel.color.g, panel.color.b, .5)}
333+ GradientStop { position: 1.0; color: Qt.rgba(panel.color.r,panel.color.g,panel.color.b,0)}
207334 }
208335 }
209336 }
@@ -227,7 +354,7 @@ Item {
227354 Connections {
228355 target: panel.dismissTimer
229356 onTriggered: {
230− if (root.autohideEnabled) {
357+ if (root.autohideEnabled && !root.lockedVisible) {
231358 if (!panel.preventHiding) {
232359 root.state = ""
233360 } else {
@@ -240,11 +367,11 @@ Item {
240367 property bool animate: true
241368
242369 onApplicationSelected: {
243− root.state = ""
370+ root.hide();
244371 launcherApplicationSelected(appId)
245372 }
246373 onShowDashHome: {
247− root.state = ""
374+ root.hide();
248375 root.showDashHome();
249376 }
250377
@@ -254,6 +381,12 @@ Item {
254381 }
255382 }
256383
384+ onKbdNavigationCancelled: {
385+ panel.highlightIndex = -2;
386+ root.hide();
387+ root.focus = false;
388+ }
389+
257390 Behavior on x {
258391 enabled: !dragArea.dragging && !launcherDragArea.drag.active && panel.animate;
259392 NumberAnimation {
qml/Launcher/LauncherDelegate.qml+55−20
@@ -20,6 +20,7 @@ import Ubuntu.Components 1.3
2020Item {
2121 id: root
2222
23+ property int itemIndex: 0
2324 property string iconName
2425 property int count: 0
2526 property bool countVisible: false
@@ -29,10 +30,12 @@ Item {
2930 property real maxAngle: 0
3031 property bool inverted: false
3132 property bool alerting: false
32− readonly property alias wiggling: wiggleAnim.running
33+ property bool highlighted: false
34+ property bool shortcutHintShown: false
3335
3436 readonly property int effectiveHeight: Math.cos(angle * Math.PI / 180) * itemHeight
3537 readonly property real foldedHeight: Math.cos(maxAngle * Math.PI / 180) * itemHeight
38+ readonly property alias wiggling: wiggleAnim.running
3639
3740 property int itemWidth
3841 property int itemHeight
@@ -121,20 +124,32 @@ Item {
121124
122125 Item {
123126 id: iconItem
124− width: parent.itemWidth + units.gu(1)
127+ width: root.width
125128 height: parent.itemHeight + units.gu(1)
126129 anchors.centerIn: parent
127130
131+ Image {
132+ objectName: "focusRing"
133+ anchors.centerIn: iconShape
134+ height: width * 15 / 16
135+ width: iconShape.width + units.gu(1)
136+ source: "graphics/launcher-app-focus-ring.svg"
137+ sourceSize.width: width
138+ sourceSize.height: height
139+ visible: root.highlighted
140+ }
141+
128142 ProportionalShape {
129143 id: iconShape
130144 anchors.centerIn: parent
131− width: parent.width - units.gu(2)
145+ width: root.itemWidth
132146 aspect: UbuntuShape.DropShadow
133147 source: Image {
134148 id: iconImage
135149 sourceSize.width: iconShape.width
136150 sourceSize.height: iconShape.height
137151 source: root.iconName
152+ cache: false // see lpbug#1543290 why no cache
138153 }
139154 }
140155
@@ -144,7 +159,8 @@ Item {
144159 anchors {
145160 right: parent.right
146161 bottom: parent.bottom
147− margins: units.dp(3)
162+ rightMargin: (iconItem.width - root.itemWidth) / 2 - units.dp(2)
163+ margins: units.dp(5)
148164 }
149165 width: Math.min(root.itemWidth, Math.max(units.gu(2), countLabel.implicitWidth + units.gu(1)))
150166 height: units.gu(2)
@@ -172,16 +188,11 @@ Item {
172188 id: progressOverlay
173189 objectName: "progressOverlay"
174190
175− anchors {
176− left: iconItem.left
177− right: iconItem.right
178− verticalCenter: parent.verticalCenter
179− leftMargin: units.gu(1.5)
180− rightMargin: units.gu(1.5)
181− }
191+ anchors.centerIn: parent
192+ width: root.itemWidth * .8
182193 height: units.gu(1)
183194 visible: root.progress > -1
184− color: UbuntuColors.darkGrey
195+ backgroundColor: UbuntuColors.darkGrey
185196 borderSource: "none"
186197
187198 Item {
@@ -199,32 +210,56 @@ Item {
199210 top: parent.top
200211 bottom: parent.bottom
201212 }
202− color: "white"
213+ backgroundColor: "white"
203214 borderSource: "none"
204215 width: progressOverlay.width
205216 }
206217 }
207218 }
208219
209− Image {
210− objectName: "runningHighlight"
220+ Column {
211221 anchors {
212222 left: parent.left
213223 verticalCenter: parent.verticalCenter
214224 }
215− visible: root.itemRunning
216− rotation: 180
217− source: "graphics/focused_app_arrow.png"
225+ spacing: units.gu(.5)
226+ Repeater {
227+ model: 1 // TODO: This should be "Math.min(3, app.surfaceCount)" once we have multiple surfaces
228+ Rectangle {
229+ objectName: "runningHighlight" + index
230+ width: units.gu(0.25)
231+ height: units.gu(.5)
232+ color: "white"
233+ visible: root.itemRunning
234+ }
235+ }
218236 }
219237
220− Image {
238+ Rectangle {
221239 objectName: "focusedHighlight"
222240 anchors {
223241 right: parent.right
224242 verticalCenter: parent.verticalCenter
225243 }
244+ width: units.gu(0.25)
245+ height: units.gu(.5)
246+ color: "white"
226247 visible: root.itemFocused
227− source: "graphics/focused_app_arrow.png"
248+ }
249+
250+ Rectangle {
251+ objectName: "shortcutHint"
252+ anchors.centerIn: parent
253+ width: units.gu(3)
254+ height: width
255+ color: "#E0292929"
256+ visible: root.shortcutHintShown
257+ Label {
258+ anchors.centerIn: parent
259+ text: (itemIndex + 1) % 10
260+ color: "white"
261+ font.weight: Font.DemiBold
262+ }
228263 }
229264 }
230265
qml/Launcher/LauncherPanel.qml+122−51
@@ -19,12 +19,13 @@ import Ubuntu.Components 1.3
1919import Ubuntu.Components.ListItems 1.3 as ListItems
2020import Unity.Launcher 0.1
2121import Ubuntu.Components.Popups 1.3
22+import GlobalShortcut 1.0
2223import "../Components/ListItems"
2324import "../Components/"
2425
2526Rectangle {
2627 id: root
27− color: "#B2000000"
28+ color: "#E0292929"
2829
2930 rotation: inverted ? 180 : 0
3031
@@ -33,11 +34,13 @@ Rectangle {
3334 property bool dragging: false
3435 property bool moving: launcherListView.moving || launcherListView.flicking
3536 property bool preventHiding: moving || dndArea.draggedIndex >= 0 || quickList.state === "open" || dndArea.pressed
36− || mouseEventEater.containsMouse || dashItem.hovered
37− property int highlightIndex: -1
37+ || mouseEventEater.containsMouse || dashItem.hovered
38+ property int highlightIndex: -2
39+ property bool shortcutHintsShown: false
3840
3941 signal applicationSelected(string appId)
4042 signal showDashHome()
43+ signal kbdNavigationCancelled()
4144
4245 onXChanged: {
4346 if (quickList.state == "open") {
@@ -45,6 +48,26 @@ Rectangle {
4548 }
4649 }
4750
51+ function highlightNext() {
52+ highlightIndex++;
53+ if (highlightIndex >= launcherListView.count) {
54+ highlightIndex = -1;
55+ }
56+ launcherListView.moveToIndex(Math.max(highlightIndex, 0));
57+ }
58+ function highlightPrevious() {
59+ highlightIndex--;
60+ if (highlightIndex <= -2) {
61+ highlightIndex = launcherListView.count - 1;
62+ }
63+ launcherListView.moveToIndex(Math.max(highlightIndex, 0));
64+ }
65+ function openQuicklist(index) {
66+ quickList.open(index);
67+ quickList.selectedIndex = 0;
68+ quickList.focus = true;
69+ }
70+
4871 MouseArea {
4972 id: mouseEventEater
5073 anchors.fill: parent
@@ -57,24 +80,16 @@ Rectangle {
5780 fill: parent
5881 }
5982
60− Item {
83+ Rectangle {
6184 objectName: "buttonShowDashHome"
6285 width: parent.width
63− height: units.gu(7)
64− clip: true
65−
66− UbuntuShape {
67− anchors {
68− fill: parent
69− topMargin: -units.gu(2)
70− }
71− aspect: UbuntuShape.Flat
72− backgroundColor: UbuntuColors.orange
73− }
86+ height: width * .9
87+ color: UbuntuColors.orange
88+ readonly property bool highlighted: root.highlightIndex == -1;
7489
7590 Image {
7691 objectName: "dashItem"
77− width: units.gu(5)
92+ width: parent.width * .6
7893 height: width
7994 anchors.centerIn: parent
8095 source: "graphics/home.png"
@@ -85,6 +100,14 @@ Rectangle {
85100 anchors.fill: parent
86101 onClicked: root.showDashHome()
87102 }
103+ Rectangle {
104+ objectName: "bfbFocusHighlight"
105+ anchors.fill: parent
106+ border.color: "white"
107+ border.width: units.dp(1)
108+ color: "transparent"
109+ visible: parent.highlighted
110+ }
88111 }
89112
90113 Item {
@@ -102,10 +125,8 @@ Rectangle {
102125 objectName: "launcherListView"
103126 anchors {
104127 fill: parent
105− topMargin: -extensionSize + units.gu(0.5)
106− bottomMargin: -extensionSize + units.gu(1)
107− leftMargin: units.gu(0.5)
108− rightMargin: units.gu(0.5)
128+ topMargin: -extensionSize + width * .15
129+ bottomMargin: -extensionSize + width * .15
109130 }
110131 topMargin: extensionSize
111132 bottomMargin: extensionSize
@@ -140,11 +161,11 @@ Rectangle {
140161 }
141162
142163 // The height of the area where icons start getting folded
143− property int foldingStartHeight: units.gu(6.5)
164+ property int foldingStartHeight: itemHeight
144165 // The height of the area where the items reach the final folding angle
145166 property int foldingStopHeight: foldingStartHeight - itemHeight - spacing
146− property int itemWidth: units.gu(7)
147− property int itemHeight: units.gu(6.5)
167+ property int itemWidth: width * .75
168+ property int itemHeight: itemWidth * 15 / 16 + units.gu(1)
148169 property int clickFlickSpeed: units.gu(60)
149170 property int draggedIndex: dndArea.draggedIndex
150171 property real realContentY: contentY - originY + topMargin
@@ -172,12 +193,24 @@ Rectangle {
172193
173194 UbuntuNumberAnimation {
174195 id: moveAnimation
196+ objectName: "moveAnimation"
175197 target: launcherListView
176198 property: "contentY"
177199 function moveTo(contentY) {
178200 from = launcherListView.contentY;
179201 to = contentY;
180− start();
202+ restart();
203+ }
204+ }
205+ function moveToIndex(index) {
206+ var totalItemHeight = launcherListView.itemHeight + launcherListView.spacing
207+ var itemPosition = index * totalItemHeight;
208+ var height = launcherListView.height - launcherListView.topMargin - launcherListView.bottomMargin
209+ var distanceToEnd = index == 0 || index == launcherListView.count - 1 ? 0 : totalItemHeight
210+ if (itemPosition + totalItemHeight + distanceToEnd > launcherListView.contentY + launcherListView.originY + launcherListView.topMargin + height) {
211+ moveAnimation.moveTo(itemPosition + launcherListView.itemHeight - launcherListView.topMargin - height + distanceToEnd - launcherListView.originY);
212+ } else if (itemPosition - distanceToEnd < launcherListView.contentY - launcherListView.originY + launcherListView.topMargin) {
213+ moveAnimation.moveTo(itemPosition - distanceToEnd - launcherListView.topMargin + launcherListView.originY);
181214 }
182215 }
183216
@@ -192,9 +225,10 @@ Rectangle {
192225 // the right app when running autopilot tests for
193226 // multiple apps.
194227 readonly property string appId: model.appId
228+ itemIndex: index
195229 itemHeight: launcherListView.itemHeight
196230 itemWidth: launcherListView.itemWidth
197− width: itemWidth
231+ width: parent.width
198232 height: itemHeight
199233 iconName: model.icon
200234 count: model.count
@@ -204,6 +238,8 @@ Rectangle {
204238 itemFocused: model.focused
205239 inverted: root.inverted
206240 alerting: model.alerting
241+ highlighted: root.highlightIndex == index
242+ shortcutHintShown: root.shortcutHintsShown && index <= 9
207243 z: -Math.abs(offset)
208244 maxAngle: 55
209245 property bool dragging: false
@@ -241,14 +277,7 @@ Rectangle {
241277 onAlertingChanged: {
242278 if(alerting) {
243279 if (!dragging && (launcherListView.peekingIndex === -1 || launcher.visibleWidth > 0)) {
244− var itemPosition = index * launcherListView.itemHeight;
245− var height = launcherListView.height - launcherListView.topMargin - launcherListView.bottomMargin
246− var distanceToEnd = index == 0 || index == launcherListView.count - 1 ? 0 : launcherListView.itemHeight
247− if (itemPosition + launcherListView.itemHeight + distanceToEnd > launcherListView.contentY + launcherListView.topMargin + height) {
248− moveAnimation.moveTo(itemPosition + launcherListView.itemHeight - launcherListView.topMargin - height + distanceToEnd);
249− } else if (itemPosition - distanceToEnd < launcherListView.contentY + launcherListView.topMargin) {
250− moveAnimation.moveTo(itemPosition - distanceToEnd - launcherListView.topMargin);
251− }
280+ launcherListView.moveToIndex(index)
252281 if (!dragging && launcher.state !== "visible") {
253282 peekingAnimation.start()
254283 }
@@ -402,10 +431,7 @@ Rectangle {
402431
403432 if (mouse.button & Qt.RightButton) { // context menu
404433 // Opening QuickList
405− quickList.item = clickedItem;
406− quickList.model = launcherListView.model.get(index).quickList;
407− quickList.appId = launcherListView.model.get(index).appId;
408− quickList.state = "open";
434+ quickList.open(index);
409435 return;
410436 }
411437
@@ -413,10 +439,8 @@ Rectangle {
413439
414440 // First/last item do the scrolling at more than 12 degrees
415441 if (index == 0 || index == launcherListView.count - 1) {
416− if (clickedItem.angle > 12) {
417− launcherListView.flick(0, -launcherListView.clickFlickSpeed);
418− } else if (clickedItem.angle < -12) {
419− launcherListView.flick(0, launcherListView.clickFlickSpeed);
442+ if (clickedItem.angle > 12 || clickedItem.angle < -12) {
443+ launcherListView.moveToIndex(index);
420444 } else {
421445 root.applicationSelected(LauncherModel.get(index).appId);
422446 }
@@ -424,10 +448,8 @@ Rectangle {
424448 }
425449
426450 // the rest launches apps up to an angle of 30 degrees
427− if (clickedItem.angle > 30) {
428− launcherListView.flick(0, -launcherListView.clickFlickSpeed);
429− } else if (clickedItem.angle < -30) {
430− launcherListView.flick(0, launcherListView.clickFlickSpeed);
451+ if (clickedItem.angle > 30 || clickedItem.angle < -30) {
452+ launcherListView.moveToIndex(index);
431453 } else {
432454 root.applicationSelected(LauncherModel.get(index).appId);
433455 }
@@ -481,11 +503,7 @@ Rectangle {
481503
482504 draggedIndex = Math.floor((mouse.y + launcherListView.realContentY) / launcherListView.realItemHeight);
483505
484− // Opening QuickList
485− quickList.item = selectedItem;
486− quickList.model = launcherListView.model.get(draggedIndex).quickList;
487− quickList.appId = launcherListView.model.get(draggedIndex).appId;
488− quickList.state = "open";
506+ quickList.open(draggedIndex)
489507
490508 launcherListView.interactive = false
491509
@@ -644,7 +662,9 @@ Rectangle {
644662 enabled: quickList.state == "open" || pressed
645663
646664 onClicked: {
647− quickList.state = ""
665+ quickList.state = "";
666+ quickList.focus = false;
667+ root.kbdNavigationCancelled();
648668 }
649669
650670 // Forward for dragging to work when quickList is open
@@ -693,12 +713,60 @@ Rectangle {
693713 property var model
694714 property string appId
695715 property var item
716+ property int selectedIndex: -1
717+
718+ Keys.onPressed: {
719+ switch (event.key) {
720+ case Qt.Key_Down:
721+ selectedIndex++;
722+ if (selectedIndex >= popoverRepeater.count) {
723+ selectedIndex = 0;
724+ }
725+ event.accepted = true;
726+ break;
727+ case Qt.Key_Up:
728+ selectedIndex--;
729+ if (selectedIndex < 0) {
730+ selectedIndex = popoverRepeater.count - 1;
731+ }
732+ event.accepted = true;
733+ break;
734+ case Qt.Key_Left:
735+ case Qt.Key_Escape:
736+ quickList.selectedIndex = -1;
737+ quickList.focus = false;
738+ quickList.state = ""
739+ event.accepted = true;
740+ break;
741+ case Qt.Key_Enter:
742+ case Qt.Key_Return:
743+ case Qt.Key_Space:
744+ if (quickList.selectedIndex >= 0) {
745+ LauncherModel.quickListActionInvoked(quickList.appId, quickList.selectedIndex)
746+ }
747+ quickList.selectedIndex = -1;
748+ quickList.focus = false;
749+ quickList.state = ""
750+ root.kbdNavigationCancelled();
751+ event.accepted = true;
752+ break;
753+ }
754+ }
696755
697756 // internal
698757 property int itemCenter: item ? root.mapFromItem(quickList.item).y + (item.height / 2) + quickList.item.offset : units.gu(1)
699758 property int offset: itemCenter + (height/2) + units.gu(1) > parent.height ? -itemCenter - (height/2) - units.gu(1) + parent.height :
700759 itemCenter - (height/2) < units.gu(1) ? (height/2) - itemCenter + units.gu(1) : 0
701760
761+ function open(index) {
762+ var itemPosition = index * launcherListView.itemHeight;
763+ var height = launcherListView.height - launcherListView.topMargin - launcherListView.bottomMargin
764+ item = launcherListView.itemAt(launcherListView.width / 2, itemPosition + launcherListView.itemHeight / 2);
765+ quickList.model = launcherListView.model.get(index).quickList;
766+ quickList.appId = launcherListView.model.get(index).appId;
767+ quickList.state = "open";
768+ }
769+
702770 Column {
703771 id: quickListColumn
704772 width: parent.width
@@ -712,6 +780,7 @@ Rectangle {
712780 objectName: "quickListEntry" + index
713781 text: (model.clickable ? "" : "<b>") + model.label + (model.clickable ? "" : "</b>")
714782 highlightWhenPressed: model.clickable
783+ selected: index === quickList.selectedIndex
715784
716785 // FIXME: This is a workaround for the theme not being context sensitive. I.e. the
717786 // ListItems don't know that they are sitting in a themed Popover where the color
@@ -727,6 +796,8 @@ Rectangle {
727796 // Unsetting model to prevent showing changing entries during fading out
728797 // that may happen because of triggering an action.
729798 LauncherModel.quickListActionInvoked(quickList.appId, index);
799+ quickList.focus = false;
800+ root.kbdNavigationCancelled();
730801 quickList.model = undefined;
731802 }
732803 }
qml/Launcher/graphics/launcher-app-focus-ring.svgnew file+12
@@ -0,0 +1,12 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<svg width="172px" height="163px" viewBox="0 0 172 163" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
3+ <!-- Generator: Sketch 3.4.4 (17249) - http://www.bohemiancoding.com/sketch -->
4+ <title>Shape</title>
5+ <desc>Created with Sketch.</desc>
6+ <defs></defs>
7+ <g id="•-Launcher" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
8+ <g id="Artboard-9" sketch:type="MSArtboardGroup" transform="translate(-163.000000, -1436.000000)" fill="#E95420">
9+ <path d="M221.983432,1440 L221.983432,1440 C195.6127,1440 184.708233,1442.4723 177.107949,1450.10734 C169.476819,1457.77336 167,1468.79245 167,1495.3481 L167,1538.9019 C167,1565.45755 169.476819,1576.47664 177.107949,1584.14266 C184.708233,1591.7777 195.6127,1594.25 221.983432,1594.25 L276.016868,1594.25 C302.387595,1594.25 313.291998,1591.77771 320.892221,1584.14264 C328.523252,1576.47663 331,1565.45769 331,1538.9019 L331,1495.3481 C331,1468.79231 328.523252,1457.77337 320.892221,1450.10736 C313.291998,1442.47229 302.387595,1440 276.016868,1440 L221.983432,1440 Z M221.983432,1436 L276.016868,1436 C302.345315,1436 314.848953,1438.36655 323.727108,1447.2854 C332.633306,1456.23243 335,1468.85167 335,1495.3481 L335,1538.9019 C335,1565.39833 332.633306,1578.01757 323.727108,1586.9646 C314.848953,1595.88345 302.345315,1598.25 276.016868,1598.25 L221.983432,1598.25 C195.654985,1598.25 183.151291,1595.88345 174.273077,1586.96463 C165.366772,1578.0176 163,1565.39822 163,1538.9019 L163,1495.3481 C163,1468.85178 165.366772,1456.2324 174.273077,1447.28537 C183.151291,1438.36655 195.654985,1436 221.983432,1436 L221.983432,1436 Z" id="Shape" sketch:type="MSShapeGroup"></path>
10+ </g>
11+ </g>
12+</svg>
qml/Notifications/Notification.qml+9−5
@@ -23,7 +23,7 @@ import QMenuModel 0.1
2323import Utils 0.1
2424import "../Components"
2525
26−Item {
26+StyledItem {
2727 id: notification
2828
2929 property alias iconSource: icon.fileSource
@@ -58,6 +58,10 @@ Item {
5858 color: (type === Notification.Confirmation && notificationList.useModal && !greeter.shown) || darkOnBright ? sdLightGrey : Qt.rgba(0.132, 0.117, 0.109, 0.97)
5959 opacity: 1 - (x / notification.width) // FIXME: non-zero initially because of LP: #1354406 workaround, we want this to start at 0 upon creation eventually
6060
61+ theme: ThemeSettings {
62+ name: "Ubuntu.Components.Themes.Ambiance"
63+ }
64+
6165 state: {
6266 var result = "";
6367
@@ -281,7 +285,7 @@ Item {
281285 }
282286 visible: type !== Notification.Confirmation
283287 fontSize: "medium"
284− color: darkOnBright ? sdFontColor : theme.palette.selected.backgroundText
288+ color: darkOnBright ? sdFontColor : theme.palette.normal.backgroundText
285289 elide: Text.ElideRight
286290 textFormat: Text.PlainText
287291 }
@@ -296,8 +300,8 @@ Item {
296300 }
297301 visible: body != "" && type !== Notification.Confirmation
298302 fontSize: "small"
299− color: darkOnBright ? sdFontColor : theme.palette.selected.backgroundText
300− wrapMode: Text.WordWrap
303+ color: darkOnBright ? sdFontColor : theme.palette.normal.backgroundText
304+ wrapMode: Text.Wrap
301305 maximumLineCount: type == Notification.SnapDecision ? 12 : 2
302306 elide: Text.ElideRight
303307 textFormat: Text.PlainText
@@ -337,7 +341,7 @@ Item {
337341 anchors.horizontalCenter: parent.horizontalCenter
338342 visible: type === Notification.Confirmation && body !== ""
339343 fontSize: "medium"
340− color: darkOnBright ? sdFontColor : theme.palette.selected.backgroundText
344+ color: darkOnBright ? sdFontColor : theme.palette.normal.backgroundText
341345 wrapMode: Text.WordWrap
342346 maximumLineCount: 1
343347 elide: Text.ElideRight
qml/OrientedShell.qml+26−1
@@ -19,6 +19,7 @@ import QtQuick.Window 2.2
1919import Unity.InputInfo 0.1
2020import Unity.Session 0.1
2121import Unity.Screens 0.1
22+import Utils 0.1
2223import GSettings 1.0
2324import "Components"
2425import "Rotation"
@@ -77,6 +78,8 @@ Rectangle {
7778 InputDeviceModel {
7879 id: keyboardsModel
7980 deviceFilter: InputInfo.Keyboard
81+ onDeviceAdded: forceOSKEnabled = autopilotDevicePresent();
82+ onDeviceRemoved: forceOSKEnabled = autopilotDevicePresent();
8083 }
8184
8285 InputDeviceModel {
@@ -84,6 +87,27 @@ Rectangle {
8487 deviceFilter: InputInfo.TouchScreen
8588 }
8689
90+ /* FIXME: This exposes the NameRole as a work arround for lp:1542224.
91+ * When QInputInfo exposes NameRole to QML, this should be removed.
92+ */
93+ property bool forceOSKEnabled: false
94+ property var autopilotEmulatedDeviceNames: ["py-evdev-uinput"]
95+ UnitySortFilterProxyModel {
96+ id: autopilotDevices
97+ model: keyboardsModel
98+ }
99+
100+ function autopilotDevicePresent() {
101+ for(var i = 0; i < autopilotDevices.count; i++) {
102+ var device = autopilotDevices.get(i);
103+ if (autopilotEmulatedDeviceNames.indexOf(device.name) != -1) {
104+ console.warn("Forcing the OSK to be enabled as there is an autopilot eumlated device present.")
105+ return true;
106+ }
107+ }
108+ return false;
109+ }
110+
87111 Screens {
88112 id: screens
89113 }
@@ -195,7 +219,8 @@ Rectangle {
195219 // have multiple keyboards around. For now we only enable one keyboard at a time
196220 // thus hiding it here if there is a physical one around or if we have a second
197221 // screen (the virtual touchpad & osk on the phone) attached.
198− oskEnabled: keyboardsModel.count === 0 && screens.count === 1
222+ oskEnabled: (keyboardsModel.count === 0 && screens.count === 1) ||
223+ forceOSKEnabled
199224
200225 // TODO: Factor in the connected input devices (eg: physical keyboard, mouse, touchscreen),
201226 // what's the output device (eg: big TV, desktop monitor, phone display), etc.
qml/Panel/Handle.qml+2−2
@@ -19,7 +19,7 @@ import Ubuntu.Components 1.3
1919
2020Rectangle {
2121 id: handle
22− color: "#5d5d5d"
22+ color: theme.palette.normal.foreground
2323 height: units.gu(2)
2424 property bool active: false
2525
@@ -35,7 +35,7 @@ Rectangle {
3535 id: dot
3636 width: units.dp(3)
3737 height: width
38− color: handle.active ? UbuntuColors.orange : "#888888"
38+ color: handle.active ? theme.palette.highlighted.foreground : theme.palette.normal.raised
3939 radius: units.dp(1)
4040 }
4141 }
qml/Panel/IndicatorItem.qml+3−3
@@ -32,9 +32,9 @@ IndicatorDelegate {
3232 property bool selected: false
3333 property real iconHeight: units.gu(2)
3434 readonly property color color: {
35− if (!expanded) return "#ffffff";
36− if (!selected) return "#888888";
37− return "#ffffff";
35+ if (!expanded) return theme.palette.normal.backgroundText;
36+ if (!selected) return theme.palette.disabled.backgroundText;
37+ return theme.palette.normal.backgroundText;
3838 }
3939
4040 implicitWidth: mainItems.width
qml/Panel/Indicators/MenuItemFactory.qml+3−4
@@ -228,7 +228,6 @@ Item {
228228 text: menuData && menuData.label || ""
229229 iconSource: menuData && menuData.icon || ""
230230 value : menuData && menuData.actionState || 0.0
231− enabled: menuData && menuData.sensitive || false
232231 highlightWhenPressed: false
233232 }
234233 }
@@ -261,7 +260,7 @@ Item {
261260 name: "settings"
262261 height: units.gu(3)
263262 width: height
264− color: theme.palette.selected.backgroundText
263+ color: theme.palette.normal.backgroundText
265264 }
266265 }
267266 }
@@ -293,7 +292,7 @@ Item {
293292 source: menuData.icon
294293 height: units.gu(3)
295294 width: height
296− color: theme.palette.selected.backgroundText
295+ color: theme.palette.normal.backgroundText
297296 }
298297 }
299298 }
@@ -620,7 +619,7 @@ Item {
620619
621620 Component {
622621 id: modeminfoitem;
623− ModemInfoItem {
622+ Menus.ModemInfoItem {
624623 objectName: "modemInfoItem"
625624 property QtObject menuData: null
626625 property var menuModel: menuFactory.menuModel
qml/Panel/Indicators/ModemInfoItem.qmldeleted−111
@@ -1,111 +0,0 @@
1−/*
2− * Copyright 2014,2015 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU Lesser General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.4
18−import QtQuick.Layouts 1.1
19−import Ubuntu.Components 1.3
20−import Ubuntu.Components.ListItems 1.3 as ListItem
21−
22−ListItem.Empty {
23− id: menu
24− implicitHeight: mainColumn.implicitHeight
25− + mainColumn.anchors.topMargin
26− + mainColumn.anchors.bottomMargin
27−
28− property alias statusIcon: statusIcon.name
29− property alias statusText: labelStatus.text
30− property alias connectivityIcon: iconConnectivity.name
31− property alias simIdentifierText: labelSimIdentifier.text
32− property bool locked : false
33− property bool roaming: false
34− signal unlock
35−
36− ColumnLayout {
37− id: mainColumn
38− anchors.fill: parent
39− anchors.margins: menu.__contentsMargins
40− spacing: units.gu(0.5)
41−
42− Label {
43− id: labelSimIdentifier
44− elide: Text.ElideRight
45− visible: text !== ""
46− font.bold: true
47− opacity: menu.locked ? 0.6 : 1.0
48− }
49−
50− RowLayout {
51− id: statusRow
52− spacing: units.gu(1)
53−
54− height: labelStatus.height
55− width: parent.width
56−
57− Label {
58− id: labelStatus
59− elide: Text.ElideRight
60− opacity: 0.6
61− }
62−
63− RowLayout {
64− spacing: 0.5
65− height: parent.height
66− Icon {
67− id: statusIcon
68− color: theme.palette.selected.backgroundText
69−
70− Layout.preferredHeight: parent.height
71− Layout.preferredWidth: Layout.preferredHeight
72−
73− visible: name !== ""
74− }
75−
76− Icon {
77− id: iconConnectivity
78− color: theme.palette.selected.backgroundText
79−
80− Layout.preferredHeight: parent.height
81− Layout.preferredWidth: Layout.preferredHeight
82−
83− visible: name !== ""
84− }
85− }
86−
87− Item {
88− // eat up all the excess space so that RoamingIndication
89− // ends up to the far right
90− Layout.fillWidth: true
91− }
92−
93− RoamingIndication {
94− id: roamingIndication
95− visible: menu.roaming
96− Layout.fillHeight: true
97− }
98− }
99−
100− Button {
101− id: buttonUnlock
102− objectName: "buttonUnlockSim"
103− visible: menu.locked
104−
105− text: i18n.tr("Unlock SIM")
106− Layout.preferredWidth: implicitWidth + units.gu(5)
107−
108− onTriggered: menu.unlock()
109− }
110− }
111−}
qml/Panel/Indicators/RoamingIndication.qmldeleted−40
@@ -1,40 +0,0 @@
1−/*
2− * Copyright 2014,2015 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU Lesser General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.4
18−import QtQuick.Layouts 1.1
19−import Ubuntu.Components 1.3
20−
21−RowLayout {
22− spacing: units.gu(0.5)
23− Label {
24− id: labelRoaming
25− elide: Text.ElideRight
26− fontSize: "x-small"
27− text: i18n.tr("Roaming")
28− opacity: 0.6
29− }
30−
31− Icon {
32− id: iconRoaming
33− color: theme.palette.selected.backgroundText
34−
35− Layout.preferredHeight: parent.height
36− Layout.preferredWidth: Layout.preferredHeight
37−
38− name: "network-cellular-roaming"
39− }
40−}
qml/Panel/Indicators/client/IndicatorsClient.qml+1−1
@@ -26,7 +26,7 @@ Rectangle {
2626 id: root
2727
2828 Component.onCompleted: {
29− theme.name = "Ubuntu.Components.Themes.SuruGradient"
29+ theme.name = "Ubuntu.Components.Themes.SuruDark"
3030 }
3131
3232 PageStack {
qml/Panel/IndicatorsMenu.qml+3−2
@@ -38,7 +38,7 @@ Showable {
3838 property bool enableHint: true
3939 property bool contentEnabled: true
4040 property bool showOnClick: true
41− property color panelColor: "#292929"
41+ property color panelColor: UbuntuColors.jet
4242
4343 signal showTapped(point position)
4444
@@ -76,6 +76,7 @@ Showable {
7676 MenuContent {
7777 id: content
7878 objectName: "menuContent"
79+ color: root.panelColor
7980
8081 anchors {
8182 left: parent.left
@@ -110,7 +111,7 @@ Showable {
110111 height: units.gu(0.5)
111112 gradient: Gradient {
112113 GradientStop { position: 0.0; color: "transparent" }
113− GradientStop { position: 1.0; color: "#292929" }
114+ GradientStop { position: 1.0; color: root.panelColor }
114115 }
115116 opacity: 0.3
116117 }
qml/Panel/MenuContent.qml+1−1
@@ -27,7 +27,7 @@ Rectangle {
2727
2828 property QtObject indicatorsModel: null
2929 property int currentMenuIndex: -1
30− color: "#292929" // FIXME not in palette yet
30+ color: theme.palette.normal.background
3131
3232 width: units.gu(40)
3333 height: units.gu(42)
qml/Panel/Panel.qml+5−1
@@ -89,7 +89,7 @@ Item {
8989
9090 Rectangle {
9191 id: indicatorAreaBackground
92− color: callHint.visible ? "green" : "#292929"
92+ color: callHint.visible ? UbuntuColors.green : indicators.panelColor
9393 anchors {
9494 top: parent.top
9595 left: parent.left
@@ -169,8 +169,10 @@ Item {
169169 objectName: "windowDecorationTitle"
170170 anchors {
171171 left: parent.left
172+ right: __indicators.left
172173 top: parent.top
173174 leftMargin: units.gu(1)
175+ rightMargin: units.gu(1)
174176 topMargin: units.gu(0.5)
175177 bottomMargin: units.gu(0.5)
176178 }
@@ -181,6 +183,8 @@ Item {
181183 fontSize: "medium"
182184 font.weight: Font.Normal
183185 text: PanelState.title
186+ elide: Text.ElideRight
187+ maximumLineCount: 1
184188 }
185189
186190 // TODO here would the Locally integrated menus come
qml/ScopeTool.qml−8
@@ -52,14 +52,6 @@ Rectangle {
5252 color: "#FCFCFC"
5353 }
5454
55− Image {
56− anchors.fill: dashContent
57− source: root.width > root.height ? "Dash/graphics/paper_landscape.png" : "Dash/graphics/paper_portrait.png"
58− fillMode: Image.PreserveAspectCrop
59− horizontalAlignment: Image.AlignRight
60− verticalAlignment: Image.AlignTop
61− }
62−
6355 DashContent {
6456 id: dashContent
6557
qml/Shell.qml+54−9
@@ -25,6 +25,7 @@ import Ubuntu.Telephony 0.1 as Telephony
2525import Unity.Connectivity 0.1
2626import Unity.Launcher 0.1
2727import GlobalShortcut 1.0 // has to be before Utils, because of WindowKeysFilter
28+import GSettings 1.0
2829import Utils 0.1
2930import Powerd 0.1
3031import SessionBroadcast 0.1
@@ -119,9 +120,7 @@ Item {
119120 if (ApplicationManager.findApplication(appId)) {
120121 ApplicationManager.requestFocusApplication(appId);
121122 } else {
122− var execFlags = shell.usageScenario === "phone" ? ApplicationManager.ForceMainStage
123− : ApplicationManager.NoFlag;
124− ApplicationManager.startApplication(appId, execFlags);
123+ ApplicationManager.startApplication(appId);
125124 }
126125 }
127126
@@ -139,7 +138,7 @@ Item {
139138 }
140139
141140 Component.onCompleted: {
142− theme.name = "Ubuntu.Components.Themes.SuruGradient"
141+ theme.name = "Ubuntu.Components.Themes.SuruDark"
143142 if (ApplicationManager.count > 0) {
144143 ApplicationManager.focusApplication(ApplicationManager.get(0).appId);
145144 }
@@ -187,6 +186,11 @@ Item {
187186 }
188187 }
189188
189+ GSettings {
190+ id: settings
191+ schema.id: "com.canonical.Unity8"
192+ }
193+
190194 Item {
191195 id: stages
192196 objectName: "stages"
@@ -347,6 +351,11 @@ Item {
347351 property: "altTabPressed"
348352 value: physicalKeysMapper.altTabPressed
349353 }
354+ Binding {
355+ target: applicationsDisplayLoader.item
356+ property: "leftMargin"
357+ value: shell.usageScenario == "desktop" && !settings.autohideLauncher ? launcher.panelWidth: 0
358+ }
350359 }
351360
352361 Tutorial {
@@ -377,7 +386,11 @@ Item {
377386 InputMethod {
378387 id: inputMethod
379388 objectName: "inputMethod"
380− anchors { fill: parent; topMargin: panel.panelHeight }
389+ anchors {
390+ fill: parent
391+ topMargin: panel.panelHeight
392+ leftMargin: launcher.lockedVisible ? launcher.panelWidth : 0
393+ }
381394 z: notifications.useModal || panel.indicators.shown || wizard.active ? overlay.z + 1 : overlay.z - 1
382395 }
383396
@@ -536,9 +549,7 @@ Item {
536549 greeterShown: greeter.shown
537550 }
538551
539− readonly property bool topmostApplicationIsFullscreen:
540− ApplicationManager.focusedApplicationId &&
541− ApplicationManager.findApplication(ApplicationManager.focusedApplicationId).fullscreen
552+ readonly property bool topmostApplicationIsFullscreen: mainApp && mainApp.fullscreen
542553
543554 fullscreenMode: (topmostApplicationIsFullscreen && !lightDM.greeter.active && launcher.progress == 0)
544555 || greeter.hasLockedApp
@@ -561,6 +572,10 @@ Item {
561572 && !greeter.hasLockedApp
562573 inverted: shell.usageScenario !== "desktop"
563574 shadeBackground: !tutorial.running
575+ superPressed: physicalKeysMapper.superPressed
576+ superTabPressed: physicalKeysMapper.superTabPressed
577+ panelWidth: units.gu(settings.launcherWidth)
578+ lockedVisible: shell.usageScenario == "desktop" && !settings.autohideLauncher && !panel.fullscreenMode
564579
565580 onShowDashHome: showHome()
566581 onDash: showDash()
@@ -580,13 +595,43 @@ Item {
580595 panel.indicators.hide()
581596 }
582597 }
598+ onFocusChanged: {
599+ if (!focus) {
600+ applicationsDisplayLoader.focus = true;
601+ }
602+ }
603+
604+ GlobalShortcut {
605+ shortcut: Qt.AltModifier | Qt.Key_F1
606+ onTriggered: {
607+ launcher.openForKeyboardNavigation();
608+ }
609+ }
610+ GlobalShortcut {
611+ shortcut: Qt.MetaModifier | Qt.Key_0
612+ onTriggered: {
613+ if (LauncherModel.get(9)) {
614+ activateApplication(LauncherModel.get(9).appId);
615+ }
616+ }
617+ }
618+ Repeater {
619+ model: 9
620+ GlobalShortcut {
621+ shortcut: Qt.MetaModifier | (Qt.Key_1 + index)
622+ onTriggered: {
623+ if (LauncherModel.get(index)) {
624+ activateApplication(LauncherModel.get(index).appId);
625+ }
626+ }
627+ }
628+ }
583629 }
584630
585631 Wizard {
586632 id: wizard
587633 objectName: "wizard"
588634 anchors.fill: parent
589− background: wallpaperResolver.background
590635
591636 function unlockWhenDoneWithWizard() {
592637 if (!active) {
qml/Stages/AbstractStage.qml+4−2
@@ -21,7 +21,7 @@ import GSettings 1.0
2121Rectangle {
2222 id: root
2323
24− color: "#111111"
24+ color: "#060606"
2525
2626 // Controls to be set from outside
2727 property bool altTabPressed
@@ -39,10 +39,12 @@ Rectangle {
3939 property int shellOrientationAngle
4040 property bool spreadEnabled: true // If false, animations and right edge will be disabled
4141 property bool suspended
42+ // A Stage should paint a wallpaper etc over its full size but not use the margins for window placement
43+ property int leftMargin: 0
4244
4345 // To be read from outside
4446 property var mainApp: null
45− property int mainAppWindowOrientationAngle
47+ property int mainAppWindowOrientationAngle: 0
4648 property bool orientationChangesEnabled
4749 property int supportedOrientations: Qt.PortraitOrientation
4850 | Qt.LandscapeOrientation
qml/Stages/ApplicationWindow.qml+3−1
@@ -24,12 +24,14 @@ FocusScope {
2424 implicitHeight: sessionContainer.implicitHeight
2525
2626 // to be read from outside
27− readonly property bool fullscreen: application ? application.fullscreen : false
2827 property alias interactive: sessionContainer.interactive
2928 property bool orientationChangesEnabled: d.supportsSurfaceResize ? d.surfaceOldEnoughToBeResized : true
3029 readonly property string title: sessionContainer.surface && sessionContainer.surface.name !== "" ?
3130 sessionContainer.surface.name : d.name
3231
32+ // overridable from outside
33+ property bool fullscreen: application ? application.fullscreen : false
34+
3335 // to be set from outside
3436 property QtObject application
3537 property int surfaceOrientationAngle
qml/Stages/DesktopSpread.qml+64−17
@@ -19,6 +19,7 @@ import QtQuick.Layouts 1.1
1919import Ubuntu.Components 1.3
2020import Ubuntu.Gestures 0.1
2121import Unity.Application 0.1
22+import "../Components"
2223
2324FocusScope {
2425 id: root
@@ -26,8 +27,11 @@ FocusScope {
2627 property bool altTabPressed: false
2728 property Item workspace: null
2829
30+ readonly property alias ready: blurLayer.ready
2931 readonly property alias highlightedIndex: spreadRepeater.highlightedIndex
3032
33+ signal playFocusAnimation(int index)
34+
3135 function show() {
3236 spreadContainer.animateIn = true;
3337 root.state = "altTab";
@@ -91,6 +95,9 @@ FocusScope {
9195
9296 function focusSelected() {
9397 if (spreadRepeater.highlightedIndex != -1) {
98+ if (spreadContainer.visible) {
99+ root.playFocusAnimation(spreadRepeater.highlightedIndex)
100+ }
94101 var application = ApplicationManager.get(spreadRepeater.highlightedIndex);
95102 ApplicationManager.requestFocusApplication(application.appId);
96103 }
@@ -101,6 +108,31 @@ FocusScope {
101108 state = ""
102109 }
103110
111+ BlurLayer {
112+ id: blurLayer
113+ anchors.fill: parent
114+ source: root.workspace
115+ visible: false
116+ }
117+
118+ Rectangle {
119+ id: spreadBackground
120+ anchors.fill: parent
121+ color: "#B2000000"
122+ visible: false
123+ opacity: visible ? 1 : 0
124+ Behavior on opacity {
125+ UbuntuNumberAnimation { duration: UbuntuAnimation.SnapDuration }
126+ }
127+ }
128+
129+ MouseArea {
130+ id: eventEater
131+ anchors.fill: parent
132+ visible: spreadBackground.visible
133+ enabled: visible
134+ }
135+
104136 Item {
105137 id: spreadContainer
106138 objectName: "spreadContainer"
@@ -226,13 +258,20 @@ FocusScope {
226258 Transition {
227259 from: ""
228260 to: "altTab"
229− PropertyAction { target: spreadDelegate; properties: "y,height,width,angle,z,itemScale,itemScaleOriginY,visible" }
230− PropertyAction { target: clippedSpreadDelegate; properties: "anchors.topMargin" }
231− PropertyAnimation {
232− target: spreadDelegate; properties: "x"
233− from: root.width
234− duration: spreadContainer.animateIn ? UbuntuAnimation.FastDuration :0
235− easing: UbuntuAnimation.StandardEasing
261+ SequentialAnimation {
262+ ParallelAnimation {
263+ PropertyAction { target: spreadDelegate; properties: "y,height,width,angle,z,itemScale,itemScaleOriginY,visible" }
264+ PropertyAction { target: clippedSpreadDelegate; properties: "anchors.topMargin" }
265+ PropertyAnimation {
266+ target: spreadDelegate; properties: "x"
267+ from: root.width
268+ duration: spreadContainer.animateIn ? UbuntuAnimation.FastDuration :0
269+ easing: UbuntuAnimation.StandardEasing
270+ }
271+ UbuntuNumberAnimation { target: clippedSpreadDelegate; property: "shadowOpacity"; from: 0; to: spreadMaths.shadowOpacity; duration: spreadContainer.animateIn ? UbuntuAnimation.FastDuration : 0 }
272+ UbuntuNumberAnimation { target: tileInfo; property: "opacity"; from: 0; to: spreadMaths.tileInfoOpacity; duration: spreadContainer.animateIn ? UbuntuAnimation.FastDuration : 0 }
273+ }
274+ PropertyAction { target: spreadSelectArea; property: "enabled" }
236275 }
237276 }
238277 ]
@@ -240,7 +279,11 @@ FocusScope {
240279 MouseArea {
241280 id: tileInfo
242281 objectName: "tileInfo"
243− anchors { left: parent.left; top: clippedSpreadDelegate.bottom; topMargin: units.gu(5) }
282+ anchors {
283+ left: parent.left
284+ top: clippedSpreadDelegate.bottom
285+ topMargin: ((spreadMaths.sceneHeight - spreadDelegate.y) - clippedSpreadDelegate.height) * 0.2
286+ }
244287 property int nextItemX: spreadRepeater.count > index + 1 ? spreadRepeater.itemAt(index + 1).x : spreadDelegate.x + units.gu(30)
245288 width: Math.min(units.gu(30), nextItemX - spreadDelegate.x)
246289 height: titleInfoColumn.height
@@ -262,12 +305,20 @@ FocusScope {
262305 anchors { left: parent.left; top: parent.top; right: parent.right }
263306 spacing: units.gu(1)
264307
265− UbuntuShape {
308+ UbuntuShapeForItem {
266309 Layout.preferredHeight: Math.min(units.gu(6), root.height * .05)
267310 Layout.preferredWidth: height * 8 / 7.6
268311 image: Image {
269312 anchors.fill: parent
270313 source: model.icon
314+ Rectangle {
315+ anchors.fill: parent
316+ color: "black"
317+ opacity: clippedSpreadDelegate.highlightShown ? 0 : .1
318+ Behavior on opacity {
319+ UbuntuNumberAnimation { duration: UbuntuAnimation.SnapDuration }
320+ }
321+ }
271322 }
272323 }
273324 Label {
@@ -420,7 +471,7 @@ FocusScope {
420471
421472 property var source: ShaderEffectSource {
422473 id: shaderEffectSource
423− sourceItem: appContainer
474+ sourceItem: root.workspace
424475 }
425476
426477 fragmentShader: "
@@ -494,20 +545,17 @@ FocusScope {
494545 from: "*"
495546 to: "altTab"
496547 SequentialAnimation {
497− PropertyAction { target: hoverMouseArea; property: "progressiveScrollingEnabled"; value: false }
498548 PropertyAction { target: spreadRepeater; property: "highlightedIndex"; value: Math.min(ApplicationManager.count - 1, 1) }
499− PauseAnimation { duration: 140 }
549+ PauseAnimation { duration: spreadContainer.animateIn ? 0 : 140 }
500550 PropertyAction { target: workspaceSelector; property: "visible" }
501551 PropertyAction { target: spreadContainer; property: "visible" }
502552 ParallelAnimation {
503− UbuntuNumberAnimation {
504− target: blurLayer; properties: "saturation,blurRadius";
505− duration: spreadContainer.animateIn ? UbuntuAnimation.FastDuration : 0
506− }
553+ UbuntuNumberAnimation { target: blurLayer; properties: "saturation,blurRadius"; duration: UbuntuAnimation.SnapDuration }
507554 PropertyAction { target: spreadFlickable; property: "visible" }
508555 PropertyAction { targets: [currentSelectedLabel,spreadBackground]; property: "visible" }
509556 PropertyAction { target: spreadFlickable; property: "contentX"; value: 0 }
510557 }
558+ PropertyAction { target: hoverMouseArea; properties: "enabled,progressiveScrollingEnabled"; value: false }
511559 }
512560 },
513561 Transition {
@@ -518,6 +566,5 @@ FocusScope {
518566 PropertyAction { target: spreadRepeater; property: "highlightedIndex"; value: -1 }
519567 PropertyAction { target: spreadContainer; property: "animateIn"; value: false }
520568 }
521−
522569 ]
523570}
qml/Stages/DesktopSpreadDelegate.qml+15−1
@@ -56,6 +56,11 @@ Item {
5656 }
5757 ]
5858
59+ scale: highlightShown ? 1.025 : 1
60+ Behavior on scale {
61+ UbuntuNumberAnimation { duration: UbuntuAnimation.SnapDuration }
62+ }
63+
5964 BorderImage {
6065 anchors {
6166 fill: root
@@ -70,7 +75,7 @@ Item {
7075 anchors.fill: parent
7176 anchors.margins: -units.gu(1)
7277 color: "white"
73− opacity: highlightShown ? 0.15 : 0
78+ opacity: highlightShown ? 0.55 : 0
7479 antialiasing: true
7580 }
7681
@@ -108,4 +113,13 @@ Item {
108113 ]
109114 }
110115 }
116+
117+ Rectangle {
118+ anchors.fill: parent
119+ color: "black"
120+ opacity: root.highlightShown ? 0 : .1
121+ Behavior on opacity {
122+ UbuntuNumberAnimation { duration: UbuntuAnimation.SnapDuration }
123+ }
124+ }
111125}
qml/Stages/DesktopStage.qml+37−37
@@ -224,6 +224,7 @@ AbstractStage {
224224 PanelState.dropShadow = false;
225225 }
226226
227+
227228 FocusScope {
228229 id: appContainer
229230 objectName: "appContainer"
@@ -274,6 +275,7 @@ AbstractStage {
274275 readonly property alias maximizedLeft: appDelegatePrivate.maximizedLeft
275276 readonly property alias maximizedRight: appDelegatePrivate.maximizedRight
276277 readonly property alias minimized: appDelegatePrivate.minimized
278+ readonly property alias fullscreen: decoratedWindow.fullscreen
277279
278280 readonly property string appId: model.appId
279281 property bool animationsEnabled: true
@@ -293,6 +295,7 @@ AbstractStage {
293295 visible: !visuallyMinimized &&
294296 !greeter.fullyShown &&
295297 (priv.foregroundMaximizedAppZ === -1 || priv.foregroundMaximizedAppZ <= z) ||
298+ decoratedWindow.fullscreen ||
296299 (spread.state == "altTab" && index === spread.highlightedIndex)
297300
298301 Binding {
@@ -348,13 +351,26 @@ AbstractStage {
348351 ApplicationManager.focusApplication(appId);
349352 }
350353
354+ function playFocusAnimation() {
355+ focusAnimation.start()
356+ }
357+
358+ UbuntuNumberAnimation {
359+ id: focusAnimation
360+ target: appDelegate
361+ property: "scale"
362+ from: 0.98
363+ to: 1
364+ duration: UbuntuAnimation.SnapDuration
365+ }
366+
351367 states: [
352368 State {
353369 name: "fullscreen"; when: decoratedWindow.fullscreen
354− extend: "maximized"
355370 PropertyChanges {
356371 target: appDelegate;
357− y: -PanelState.panelHeight
372+ x: 0; y: -PanelState.panelHeight
373+ requestedWidth: appContainer.width; requestedHeight: appContainer.height;
358374 }
359375 },
360376 State {
@@ -371,7 +387,7 @@ AbstractStage {
371387 name: "maximized"; when: appDelegate.maximized && !appDelegate.minimized
372388 PropertyChanges {
373389 target: appDelegate;
374− x: 0; y: 0;
390+ x: root.leftMargin; y: 0;
375391 visuallyMinimized: false;
376392 visuallyMaximized: true
377393 }
@@ -384,27 +400,27 @@ AbstractStage {
384400 State {
385401 name: "maximizedLeft"; when: appDelegate.maximizedLeft && !appDelegate.minimized
386402 PropertyChanges {
387− target: appDelegate;
388− x: 0;
389− y: PanelState.panelHeight;
403+ target: appDelegate
404+ x: root.leftMargin
405+ y: PanelState.panelHeight
390406 }
391407 PropertyChanges {
392408 target: decoratedWindow
393− requestedWidth: root.width/2
394− requestedHeight: root.height - PanelState.panelHeight
409+ requestedWidth: (appContainer.width - root.leftMargin)/2
410+ requestedHeight: appContainer.height - PanelState.panelHeight
395411 }
396412 },
397413 State {
398414 name: "maximizedRight"; when: appDelegate.maximizedRight && !appDelegate.minimized
399415 PropertyChanges {
400416 target: appDelegate;
401− x: root.width/2;
417+ x: (appContainer.width + root.leftMargin)/2
402418 y: PanelState.panelHeight
403419 }
404420 PropertyChanges {
405421 target: decoratedWindow
406− requestedWidth: root.width/2;
407− requestedHeight: root.height - PanelState.panelHeight
422+ requestedWidth: (appContainer.width - root.leftMargin)/2
423+ requestedHeight: appContainer.height - PanelState.panelHeight
408424 }
409425 },
410426 State {
@@ -465,7 +481,7 @@ AbstractStage {
465481 target: appDelegate
466482 property: "z"
467483 value: ApplicationManager.count + 1
468− when: index == spread.highlightedIndex && blurLayer.ready
484+ when: index == spread.highlightedIndex && spread.ready
469485 }
470486
471487 WindowResizeArea {
@@ -476,8 +492,9 @@ AbstractStage {
476492 minHeight: units.gu(10)
477493 borderThickness: units.gu(2)
478494 windowId: model.appId // FIXME: Change this to point to windowId once we have such a thing
479− screenWidth: root.width
480− screenHeight: root.height
495+ screenWidth: appContainer.width
496+ screenHeight: appContainer.height
497+ leftMargin: root.leftMargin
481498
482499 onPressed: { ApplicationManager.focusApplication(model.appId) }
483500
@@ -525,27 +542,6 @@ AbstractStage {
525542 }
526543 }
527544
528− BlurLayer {
529− id: blurLayer
530− anchors.fill: parent
531− source: appContainer
532− visible: false
533− }
534−
535− Rectangle {
536− id: spreadBackground
537− anchors.fill: parent
538− color: "#55000000"
539− visible: false
540− }
541−
542− MouseArea {
543− id: eventEater
544− anchors.fill: parent
545− visible: spreadBackground.visible
546− enabled: visible
547− }
548−
549545 EdgeBarrier {
550546 id: edgeBarrier
551547
@@ -561,7 +557,7 @@ AbstractStage {
561557 rotation: 90
562558 anchors.centerIn: parent
563559 gradient: Gradient {
564− GradientStop { position: 0.0; color: Qt.rgba(0.16,0.16,0.16,0.7)}
560+ GradientStop { position: 0.0; color: Qt.rgba(0.16,0.16,0.16,0.5)}
565561 GradientStop { position: 1.0; color: Qt.rgba(0.16,0.16,0.16,0)}
566562 }
567563 }
@@ -579,9 +575,13 @@ AbstractStage {
579575 DesktopSpread {
580576 id: spread
581577 objectName: "spread"
582− anchors.fill: parent
578+ anchors.fill: appContainer
583579 workspace: appContainer
584580 focus: state == "altTab"
585581 altTabPressed: root.altTabPressed
582+
583+ onPlayFocusAnimation: {
584+ appRepeater.itemAt(index).playFocusAnimation();
585+ }
586586 }
587587}
qml/Stages/PhoneStage.qml+77−3
@@ -44,6 +44,33 @@ AbstractStage {
4444 }
4545 }
4646
47+ onAltTabPressedChanged: {
48+ if (!spreadEnabled || !altTabEnabled) {
49+ return;
50+ }
51+ if (altTabPressed) {
52+ spreadView.snapToSpread();
53+ priv.highlightIndex = Math.min(spreadRepeater.count - 1, 1);
54+ } else {
55+ spreadView.snapTo(priv.highlightIndex)
56+ }
57+ }
58+
59+ FocusScope {
60+ focus: root.altTabPressed
61+
62+ Keys.onPressed: {
63+ switch (event.key) {
64+ case Qt.Key_Tab:
65+ priv.highlightIndex = (priv.highlightIndex + 1) % spreadRepeater.count
66+ break;
67+ case Qt.Key_Backtab:
68+ priv.highlightIndex = (priv.highlightIndex + spreadRepeater.count - 1) % spreadRepeater.count
69+ break;
70+ }
71+ }
72+ }
73+
4774 // Functions to be called from outside
4875 function updateFocusedAppOrientation() {
4976 if (spreadRepeater.count > 0) {
@@ -74,6 +101,12 @@ AbstractStage {
74101 }
75102 }
76103
104+ function pushRightEdge(amount) {
105+ if (spreadView.contentX == -spreadView.shift) {
106+ edgeBarrier.push(amount);
107+ }
108+ }
109+
77110 mainApp: applicationManager.focusedApplicationId
78111 ? applicationManager.findApplication(applicationManager.focusedApplicationId)
79112 : null
@@ -180,6 +213,7 @@ AbstractStage {
180213
181214 property real oldInverseProgress: 0
182215 property bool animateX: false
216+ property int highlightIndex: 0
183217
184218 onFocusedAppDelegateChanged: {
185219 if (focusedAppDelegate) {
@@ -214,6 +248,10 @@ AbstractStage {
214248 spreadView.phase = 0;
215249 spreadView.contentX = -spreadView.shift;
216250 }
251+
252+ onHighlightIndexChanged: {
253+ spreadView.contentX = highlightIndex * spreadView.contentWidth / (spreadRepeater.count + 2)
254+ }
217255 }
218256 Timer {
219257 id: fullyShowingFocusedAppUpdateTimer
@@ -281,6 +319,11 @@ AbstractStage {
281319 }
282320 }
283321
322+ Behavior on contentX {
323+ enabled: root.altTabPressed
324+ UbuntuNumberAnimation {}
325+ }
326+
284327 onShiftedContentXChanged: {
285328 if (root.beingResized) {
286329 // Flickabe.contentX wiggles during resizes. Don't react to it.
@@ -319,12 +362,17 @@ AbstractStage {
319362 } else if (shiftedContentX < positionMarker3 * width) {
320363 snapTo(1);
321364 } else if (phase < 2){
322− // Add 1 pixel to make sure we definitely hit positionMarker4 even with rounding errors of the animation.
323− snapAnimation.targetContentX = width * positionMarker4 + 1 - shift;
324− snapAnimation.start();
365+ snapToSpread();
325366 root.opened();
326367 }
327368 }
369+
370+ function snapToSpread() {
371+ // Add 1 pixel to make sure we definitely hit positionMarker4 even with rounding errors of the animation.
372+ snapAnimation.targetContentX = (root.width * spreadView.positionMarker4) + 1 - spreadView.shift;
373+ snapAnimation.start();
374+ }
375+
328376 function snapTo(index) {
329377 if (!root.altTabEnabled) {
330378 // Reset to start instead
@@ -427,6 +475,7 @@ AbstractStage {
427475 maximizedAppTopMargin: root.maximizedAppTopMargin
428476 dropShadow: spreadView.active || priv.focusedAppDelegateIsDislocated
429477 focusFirstApp: root.focusFirstApp
478+ highlightShown: root.altTabPressed && index === priv.highlightIndex
430479
431480 readonly property bool isDash: model.appId == "unity8-dash"
432481
@@ -661,4 +710,29 @@ AbstractStage {
661710 }
662711 }
663712 }
713+
714+ EdgeBarrier {
715+ id: edgeBarrier
716+
717+ // NB: it does its own positioning according to the specified edge
718+ edge: Qt.RightEdge
719+
720+ onPassed: {
721+ spreadView.snapToSpread();
722+ }
723+ material: Component {
724+ Item {
725+ Rectangle {
726+ width: parent.height
727+ height: parent.width
728+ rotation: 90
729+ anchors.centerIn: parent
730+ gradient: Gradient {
731+ GradientStop { position: 0.0; color: Qt.rgba(0.16,0.16,0.16,0.7)}
732+ GradientStop { position: 1.0; color: Qt.rgba(0.16,0.16,0.16,0)}
733+ }
734+ }
735+ }
736+ }
737+ }
664738}
qml/Stages/SideStage.qmlnew file+118
@@ -0,0 +1,118 @@
1+/*
2+ * Copyright (C) 2016 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.4
18+import QtQuick.Layouts 1.1
19+import Ubuntu.Components 1.3
20+import Ubuntu.Gestures 0.1
21+import "../Components"
22+
23+Showable {
24+ id: root
25+ property bool showHint: true
26+ property int panelWidth: units.gu(40)
27+ readonly property alias dragging: hideSideStageDragArea.dragging
28+ readonly property real progress: width / panelWidth
29+
30+ width: 0
31+ shown: false
32+
33+ Item {
34+ id: sideStageDragHandle
35+ anchors {
36+ right: root.left
37+ top: root.top
38+ bottom: root.bottom
39+ }
40+ width: units.gu(2)
41+
42+ opacity: root.shown ? 1 : 0
43+ Behavior on opacity { UbuntuNumberAnimation {} }
44+
45+ Image {
46+ anchors.centerIn: parent
47+ width: hideSideStageDragArea.pressed ? parent.width * 2 : parent.width
48+ height: parent.height
49+ source: "graphics/sidestage_handle@20.png"
50+ Behavior on width { UbuntuNumberAnimation {} }
51+ }
52+ }
53+
54+ Rectangle {
55+ anchors.fill: parent
56+ color: Qt.rgba(0,0,0,0.95)
57+ }
58+
59+ Column {
60+ anchors.verticalCenter: parent.verticalCenter
61+ width: panelWidth - units.gu(6)
62+ x: panelWidth/2 - width/2
63+ spacing: units.gu(3)
64+ opacity: 0.8
65+ visible: showHint
66+
67+ Icon {
68+ width: units.gu(30)
69+ anchors.horizontalCenter: parent.horizontalCenter
70+ source: "graphics/sidestage_drag.svg"
71+ color: enabled ? Qt.rgba(1,1,1,1) : Qt.rgba(1,0,0,1)
72+ keyColor: Qt.rgba(1,1,1,1)
73+ }
74+
75+ Label {
76+ text: i18n.tr("Drag using 3 fingers any application from one window to the other")
77+ width: parent.width
78+ wrapMode: Text.WordWrap
79+ color: enabled ? Qt.rgba(1,1,1,1) : Qt.rgba(1,0,0,1)
80+ }
81+ }
82+
83+ showAnimation: NumberAnimation {
84+ property: "width"
85+ to: panelWidth
86+ duration: UbuntuAnimation.BriskDuration
87+ easing.type: Easing.OutCubic
88+ }
89+
90+ hideAnimation: NumberAnimation {
91+ property: "width"
92+ to: 0
93+ duration: UbuntuAnimation.BriskDuration
94+ easing.type: Easing.OutCubic
95+ }
96+
97+ DragHandle {
98+ id: hideSideStageDragArea
99+ objectName: "hideSideStageDragArea"
100+
101+ direction: Direction.Leftwards
102+ rotation: 180
103+ enabled: root.shown
104+ anchors.right: root.left
105+ width: sideStageDragHandle.width
106+ height: root.height
107+ stretch: true
108+
109+ immediateRecognition: true
110+ maxTotalDragDistance: panelWidth
111+ autoCompleteDragThreshold: panelWidth / 2
112+ }
113+
114+ // SideStage mouse event eater
115+ MouseArea {
116+ anchors.fill: parent
117+ }
118+}
qml/Stages/Splash.qml+4−2
@@ -76,6 +76,7 @@ Item {
7676 }
7777
7878 Ambiance.PageHeadStyle {
79+ // FIXME: Replace PageHeadStyle by PageHeader from Ubuntu.Components 1.3.
7980 id: header
8081 anchors {
8182 left: parent.left;
@@ -86,9 +87,10 @@ Item {
8687 property color dividerColor: Qt.darker(styledItem.backgroundColor, 1.1)
8788 property color panelColor: Qt.lighter(styledItem.backgroundColor, 1.1)
8889 panelForegroundColor: config.foregroundColor
90+ backgroundColor: "transparent"
8991 config: PageHeadConfiguration {
9092 id: headerConfig
91− foregroundColor: styledItem.fakeTheme.palette.selected.backgroundText
93+ foregroundColor: styledItem.fakeTheme.palette.normal.backgroundText
9294 }
9395
9496 property var contents: null
@@ -134,7 +136,7 @@ Item {
134136 anchors.topMargin: units.gu(2)
135137 fontSize: "large"
136138
137− color: styledItem.fakeTheme.palette.selected.backgroundText
139+ color: styledItem.fakeTheme.palette.normal.backgroundText
138140 visible: d.showIcon
139141 }
140142
qml/Stages/SpreadDelegate.qml+30−1
@@ -32,6 +32,11 @@ FocusScope {
3232 readonly property alias appWindowOrientationAngle: appWindowWithShadow.orientationAngle
3333 readonly property alias appWindowRotation: appWindowWithShadow.rotation
3434 readonly property alias orientationChangesEnabled: appWindow.orientationChangesEnabled
35+ property int supportedOrientations: application ? application.supportedOrientations :
36+ Qt.PortraitOrientation
37+ | Qt.LandscapeOrientation
38+ | Qt.InvertedPortraitOrientation
39+ | Qt.InvertedLandscapeOrientation
3540
3641 // to be set from outside
3742 property bool interactive: true
@@ -43,6 +48,10 @@ FocusScope {
4348 property int shellOrientationAngle
4449 property int shellOrientation
4550 property QtObject orientations
51+ property bool highlightShown: false
52+
53+ // overrideable from outside
54+ property alias fullscreen: appWindow.fullscreen
4655
4756 function matchShellOrientation() {
4857 if (!root.application)
@@ -153,7 +162,8 @@ FocusScope {
153162 if (!root.application || root.application.rotatesWindowContents) {
154163 return 0;
155164 }
156− var supportedOrientations = root.application.supportedOrientations;
165+
166+ var supportedOrientations = root.supportedOrientations;
157167
158168 if (supportedOrientations === Qt.PrimaryOrientation) {
159169 supportedOrientations = root.orientations.primary;
@@ -261,6 +271,25 @@ FocusScope {
261271 Behavior on opacity { UbuntuNumberAnimation {} }
262272 }
263273
274+ Rectangle {
275+ id: selectionHighlight
276+ objectName: "selectionHighlight"
277+ anchors.fill: appWindow
278+ anchors.margins: -units.gu(1)
279+ color: "white"
280+ opacity: root.highlightShown ? 0.15 : 0
281+ antialiasing: true
282+ visible: opacity > 0
283+ }
284+
285+ Rectangle {
286+ anchors { left: selectionHighlight.left; right: selectionHighlight.right; bottom: selectionHighlight.bottom; }
287+ height: units.dp(2)
288+ color: UbuntuColors.orange
289+ visible: root.highlightShown
290+ antialiasing: true
291+ }
292+
264293 ApplicationWindow {
265294 id: appWindow
266295 objectName: application ? "appWindow_" + application.appId : "appWindow_null"
qml/Stages/SurfaceContainer.qml+1
@@ -118,6 +118,7 @@ FocusScope {
118118
119119
120120 TouchGate {
121+ objectName: "touchGate-"+name
121122 targetItem: surfaceItem
122123 anchors.fill: root
123124 enabled: surfaceItem.enabled
qml/Stages/TabletSideStageTouchGesture.qmlnew file+154
@@ -0,0 +1,154 @@
1+/*
2+ * Copyright (C) 2016 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.4
18+import Ubuntu.Gestures 0.1
19+
20+TouchGestureArea {
21+ id: root
22+ minimumTouchPoints: 3
23+ maximumTouchPoints: 3
24+
25+ property bool enableDrag: true
26+ property Component dragComponent
27+ property var dragComponentProperties: undefined
28+
29+ readonly property bool recognisedPress: status == TouchGestureArea.Recognized &&
30+ touchPoints.length >= minimumTouchPoints &&
31+ touchPoints.length <= maximumTouchPoints
32+ readonly property bool recognisedDrag: priv.wasRecognisedPress && dragging
33+
34+ signal pressed(int x, int y)
35+ signal clicked
36+ signal dragStarted
37+ signal dropped
38+ signal cancelled
39+
40+ onEnabledChanged: {
41+ if (!enabled) {
42+ if (priv.dragObject) root.cancelled();
43+ priv.wasRecognisedDrag = false;
44+ priv.wasRecognisedPress = false;
45+ }
46+ }
47+
48+ onRecognisedPressChanged: {
49+ if (recognisedPress) {
50+ // get the app at the center of the gesture
51+ var centerX = 0;
52+ var centerY = 0;
53+ for (var i = 0; i < touchPoints.length; i++) {
54+ centerX += touchPoints[i].x;
55+ centerY += touchPoints[i].y;
56+ }
57+ centerX = centerX/touchPoints.length;
58+ centerY = centerY/touchPoints.length;
59+
60+ pressed(centerX, centerY);
61+ priv.wasRecognisedPress = true;
62+ }
63+ }
64+
65+ onStatusChanged: {
66+ if (status != TouchGestureArea.Recognized) {
67+ if (status == TouchGestureArea.Rejected) {
68+ root.cancelled();
69+ } else if (status == TouchGestureArea.WaitingForTouch) {
70+ if (priv.wasRecognisedPress) {
71+ if (!priv.wasRecognisedDrag) {
72+ root.clicked();
73+ } else {
74+ root.dropped();
75+ }
76+ }
77+ }
78+ priv.wasRecognisedDrag = false;
79+ priv.wasRecognisedPress = false;
80+ }
81+ }
82+
83+ onRecognisedDragChanged: {
84+ if (enableDrag && recognisedDrag) {
85+ priv.wasRecognisedDrag = true;
86+ root.dragStarted()
87+ }
88+ }
89+
90+ QtObject {
91+ id: priv
92+ property var dragObject: null
93+
94+ property bool wasRecognisedPress: false
95+ property bool wasRecognisedDrag: false
96+ }
97+
98+ onCancelled: {
99+ if (priv.dragObject) {
100+ var obj = priv.dragObject;
101+ priv.dragObject = null;
102+
103+ obj.Drag.cancel();
104+ obj.destroy();
105+ }
106+ }
107+
108+ onDragStarted: {
109+ if (dragComponentProperties) {
110+ priv.dragObject = dragComponent.createObject(root, dragComponentProperties);
111+ } else {
112+ priv.dragObject = dragComponent.createObject(root);
113+ }
114+ priv.dragObject.Drag.start();
115+ }
116+
117+ onDropped: {
118+ if (priv.dragObject) {
119+ var obj = priv.dragObject;
120+ priv.dragObject = null;
121+
122+ obj.Drag.drop();
123+ obj.destroy();
124+ }
125+ }
126+
127+ Binding {
128+ target: priv.dragObject
129+ when: priv.dragObject && priv.wasRecognisedDrag
130+ property: "x"
131+ value: {
132+ if (!priv.dragObject) return 0;
133+ var sum = 0;
134+ for (var i = 0; i < root.touchPoints.length; i++) {
135+ sum += root.touchPoints[i].x;
136+ }
137+ return sum/root.touchPoints.length - priv.dragObject.width/2;
138+ }
139+ }
140+
141+ Binding {
142+ target: priv.dragObject
143+ when: priv.dragObject && priv.wasRecognisedDrag
144+ property: "y"
145+ value: {
146+ if (!priv.dragObject) return 0;
147+ var sum = 0;
148+ for (var i = 0; i < root.touchPoints.length; i++) {
149+ sum += root.touchPoints[i].y;
150+ }
151+ return sum/root.touchPoints.length - priv.dragObject.height/2;
152+ }
153+ }
154+}
qml/Stages/TabletStage.qml+469−173
@@ -46,7 +46,7 @@ AbstractStage {
4646 if (delta < 0) { delta += 360; }
4747 delta = delta % 360;
4848
49− var supportedOrientations = spreadDelegate.application.supportedOrientations;
49+ var supportedOrientations = spreadDelegate.supportedOrientations;
5050 if (supportedOrientations === Qt.PrimaryOrientation) {
5151 supportedOrientations = spreadDelegate.orientations.primary;
5252 }
@@ -70,11 +70,32 @@ AbstractStage {
7070 }
7171 }
7272
73+ function pushRightEdge(amount) {
74+ if (spreadView.contentX == -spreadView.shift) {
75+ edgeBarrier.push(amount);
76+ }
77+ }
78+
7379 orientationChangesEnabled: priv.mainAppOrientationChangesEnabled
7480
75− supportedOrientations: mainApp ? mainApp.supportedOrientations
76− : (Qt.PortraitOrientation | Qt.LandscapeOrientation
77− | Qt.InvertedPortraitOrientation | Qt.InvertedLandscapeOrientation)
81+ supportedOrientations: {
82+ if (mainApp) {
83+ var orientations = mainApp.supportedOrientations;
84+ orientations |= Qt.LandscapeOrientation | Qt.InvertedLandscapeOrientation;
85+ if (priv.sideStageAppId && !spreadView.surfaceDragging) {
86+ // If we have a sidestage app, support Portrait orientation
87+ // so that it will switch the sidestage app to mainstage on rotate
88+ orientations |= Qt.PortraitOrientation|Qt.InvertedPortraitOrientation;
89+ }
90+ return orientations;
91+ } else {
92+ // we just don't care
93+ return Qt.PortraitOrientation |
94+ Qt.LandscapeOrientation |
95+ Qt.InvertedPortraitOrientation |
96+ Qt.InvertedLandscapeOrientation;
97+ }
98+ }
7899
79100 onWidthChanged: {
80101 spreadView.selectedIndex = -1;
@@ -82,13 +103,6 @@ AbstractStage {
82103 spreadView.contentX = -spreadView.shift;
83104 }
84105
85− onShellOrientationChanged: {
86− if (shellOrientation == Qt.PortraitOrientation || shellOrientation == Qt.InvertedPortraitOrientation) {
87− ApplicationManager.focusApplication(priv.mainStageAppId);
88− priv.sideStageAppId = "";
89− }
90− }
91−
92106 onInverseProgressChanged: {
93107 // This can't be a simple binding because that would be triggered after this handler
94108 // while we need it active before doing the anition left/right
@@ -102,6 +116,38 @@ AbstractStage {
102116 priv.oldInverseProgress = inverseProgress;
103117 }
104118
119+ onAltTabPressedChanged: {
120+ if (!spreadEnabled) {
121+ return;
122+ }
123+ if (altTabPressed) {
124+ priv.highlightIndex = Math.min(spreadRepeater.count - 1, 1);
125+ spreadView.snapToSpread();
126+ } else {
127+ for (var i = 0; i < spreadRepeater.count; i++) {
128+ if (spreadRepeater.itemAt(i).zIndex === priv.highlightIndex) {
129+ spreadView.snapTo(i);
130+ return;
131+ }
132+ }
133+ }
134+ }
135+
136+ FocusScope {
137+ focus: root.altTabPressed
138+
139+ Keys.onPressed: {
140+ switch (event.key) {
141+ case Qt.Key_Tab:
142+ priv.highlightIndex = (priv.highlightIndex + 1) % spreadRepeater.count
143+ break;
144+ case Qt.Key_Backtab:
145+ priv.highlightIndex = (priv.highlightIndex + spreadRepeater.count - 1) % spreadRepeater.count
146+ break;
147+ }
148+ }
149+ }
150+
105151 QtObject {
106152 id: priv
107153 objectName: "stagesPriv"
@@ -130,20 +176,9 @@ AbstractStage {
130176
131177 property int oldInverseProgress: 0
132178
133− onFocusedAppIdChanged: {
134− if (priv.focusedAppId.length > 0) {
135− var focusedApp = ApplicationManager.findApplication(focusedAppId);
136− if (focusedApp.stage == ApplicationInfoInterface.SideStage) {
137− priv.sideStageAppId = focusedAppId;
138− } else {
139− priv.mainStageAppId = focusedAppId;
140− root.mainApp = focusedApp;
141− }
142− }
179+ property int highlightIndex: 0
143180
144− appId0 = ApplicationManager.count >= 1 ? ApplicationManager.get(0).appId : "";
145− appId1 = ApplicationManager.count > 1 ? ApplicationManager.get(1).appId : "";
146− }
181+ onFocusedAppIdChanged: updateStageApps()
147182
148183 onFocusedAppDelegateChanged: {
149184 if (focusedAppDelegate) {
@@ -185,6 +220,50 @@ AbstractStage {
185220 }
186221 return oneWayFlick;
187222 }
223+
224+ onHighlightIndexChanged: {
225+ spreadView.contentX = highlightIndex * spreadView.contentWidth / (spreadRepeater.count + 2)
226+ }
227+
228+ function getTopApp(stage) {
229+ for (var i = 0; i < ApplicationManager.count; i++) {
230+ var app = ApplicationManager.get(i)
231+ if (app.stage === stage) {
232+ return app;
233+ }
234+ }
235+ return null;
236+ }
237+
238+ function setAppStage(appId, stage, save) {
239+ var app = ApplicationManager.findApplication(appId);
240+ if (app) {
241+ app.stage = stage;
242+ if (save) {
243+ WindowStateStorage.saveStage(appId, stage);
244+ }
245+ }
246+ }
247+
248+ function updateStageApps() {
249+ var app = priv.getTopApp(ApplicationInfoInterface.MainStage);
250+ priv.mainStageAppId = app ? app.appId : ""
251+ root.mainApp = app;
252+
253+ if (sideStage.shown) {
254+ app = priv.getTopApp(ApplicationInfoInterface.SideStage);
255+ priv.sideStageAppId = app ? app.appId : ""
256+ } else {
257+ priv.sideStageAppId = "";
258+ }
259+
260+ appId0 = ApplicationManager.count >= 1 ? ApplicationManager.get(0).appId : "";
261+ appId1 = ApplicationManager.count > 1 ? ApplicationManager.get(1).appId : "";
262+ }
263+
264+ readonly property bool sideStageEnabled: root.shellOrientation == Qt.LandscapeOrientation ||
265+ root.shellOrientation == Qt.InvertedLandscapeOrientation
266+ Component.onCompleted: updateStageApps();
188267 }
189268
190269 Connections {
@@ -212,7 +291,8 @@ AbstractStage {
212291 ApplicationManager.focusApplication("unity8-dash")
213292 }
214293 if (priv.sideStageAppId == appId) {
215− priv.sideStageAppId = "";
294+ var app = priv.getTopApp(ApplicationInfoInterface.SideStage);
295+ priv.sideStageAppId = app === null ? "" : app.appId;
216296 }
217297
218298 if (ApplicationManager.count == 0) {
@@ -223,6 +303,7 @@ AbstractStage {
223303 // lets make sure the spread doesn't mess up by the changing app list.
224304 spreadView.phase = 0;
225305 spreadView.contentX = -spreadView.shift;
306+
226307 ApplicationManager.focusApplication(ApplicationManager.get(0).appId);
227308 }
228309 }
@@ -278,6 +359,7 @@ AbstractStage {
278359 property int selectedIndex: -1
279360 property int draggedDelegateCount: 0
280361 property int closingIndex: -1
362+ property var selectedApplication: selectedIndex !== -1 ? ApplicationManager.get(selectedIndex) : null
281363
282364 // FIXME: Workaround Flickable's not keepping its contentX still when resized
283365 onContentXChanged: { forceItToRemainStillIfBeingResized(); }
@@ -299,15 +381,8 @@ AbstractStage {
299381 }
300382 }
301383
302− property bool sideStageDragging: sideStageDragHandle.dragging
303− property real sideStageDragProgress: sideStageDragHandle.progress
304−
305− onSideStageDragProgressChanged: {
306− if (sideStageDragProgress == 1) {
307− ApplicationManager.focusApplication(priv.mainStageAppId);
308− priv.sideStageAppId = "";
309− }
310− }
384+ property real sideStageDragProgress: sideStage.progress
385+ property bool surfaceDragging: triGestureArea.recognisedDrag
311386
312387 // In case the ApplicationManager already holds an app when starting up we're missing animations
313388 // Make sure we end up in the same state
@@ -358,7 +433,7 @@ AbstractStage {
358433 }
359434 ]
360435 state: {
361− if (priv.mainStageAppId && !priv.sideStageAppId) {
436+ if ((priv.mainStageAppId && !priv.sideStageAppId) || !priv.sideStageEnabled) {
362437 return "main";
363438 }
364439 if (!priv.mainStageAppId && priv.sideStageAppId) {
@@ -375,12 +450,26 @@ AbstractStage {
375450 // Flickabe.contentX wiggles during resizes. Don't react to it.
376451 return;
377452 }
378− if (spreadView.phase == 0 && spreadView.shiftedContentX > spreadView.width * spreadView.positionMarker2) {
379− spreadView.phase = 1;
380− } else if (spreadView.phase == 1 && spreadView.shiftedContentX > spreadView.width * spreadView.positionMarker4) {
381− spreadView.phase = 2;
382− } else if (spreadView.phase == 1 && spreadView.shiftedContentX < spreadView.width * spreadView.positionMarker2) {
383− spreadView.phase = 0;
453+
454+ switch (phase) {
455+ case 0:
456+ // the "spreadEnabled" part is because when code does "phase = 0; contentX = -shift" to
457+ // dismiss the spread because spreadEnabled went to false, for some reason, during tests,
458+ // Flickable might jump in and change contentX value back, causing the code below to do
459+ // "phase = 1" which will make the spread stay.
460+ // It sucks that we have no control whatsoever over whether or when Flickable animates its
461+ // contentX.
462+ if (root.spreadEnabled && shiftedContentX > width * positionMarker2) {
463+ phase = 1;
464+ }
465+ break;
466+ case 1:
467+ if (shiftedContentX < width * positionMarker2) {
468+ phase = 0;
469+ } else if (shiftedContentX >= width * positionMarker4 && !spreadDragArea.dragging) {
470+ phase = 2;
471+ }
472+ break;
384473 }
385474 }
386475
@@ -391,12 +480,18 @@ AbstractStage {
391480 } else if (shiftedContentX < phase1Width) {
392481 snapTo(1);
393482 } else {
394− // Add 1 pixel to make sure we definitely hit positionMarker4 even with rounding errors of the animation.
395− snapAnimation.targetContentX = spreadView.width * spreadView.positionMarker4 + 1 - shift;
396− snapAnimation.start();
483+ snapToSpread();
397484 }
398485 }
486+
487+ function snapToSpread() {
488+ // Add 1 pixel to make sure we definitely hit positionMarker4 even with rounding errors of the animation.
489+ snapAnimation.targetContentX = (spreadView.width * spreadView.positionMarker4) + 1 - shift;
490+ snapAnimation.start();
491+ }
492+
399493 function snapTo(index) {
494+ snapAnimation.stop();
400495 spreadView.selectedIndex = index;
401496 snapAnimation.targetContentX = -shift;
402497 snapAnimation.start();
@@ -406,55 +501,41 @@ AbstractStage {
406501 // We don't want to really reorder them in the model because that allows us to keep track
407502 // of the last focused order.
408503 function indexToZIndex(index) {
504+ // only shuffle when we've got a main and overlay
505+ if (state !== "mainAndOverlay") return index;
506+
409507 var app = ApplicationManager.get(index);
410508 if (!app) {
411509 return index;
412510 }
413511
414− var active = app.appId == priv.mainStageAppId || app.appId == priv.sideStageAppId;
415− if (active && app.stage == ApplicationInfoInterface.MainStage) {
416− // if this app is active, and its the MainStage, always put it to index 0
512+ // don't shuffle indexes greater than "actives or next"
513+ if (index > 2) return index;
514+
515+ if (app.appId === priv.mainStageAppId) {
516+ // Active main stage always at 0
417517 return 0;
418518 }
419− if (active && app.stage == ApplicationInfoInterface.SideStage) {
420− if (!priv.mainStageAppId) {
421− // Only have SS apps running. Put the active one at 0
422− return 0;
423− }
424519
425− // Precondition now: There's an active MS app and this is SS app:
426− if (spreadView.nextInStack >= 0 && ApplicationManager.get(spreadView.nextInStack).stage == ApplicationInfoInterface.MainStage) {
427− // If the next app coming from the right is a MS app, we need to elevate this SS ap above it.
428− // Put it to at least level 2, or higher if there's more apps coming in before this one.
429− return Math.max(index, 2);
430− } else {
431− // if this is no next app to come in from the right, place this one at index 1, just on top the active MS app.
520+ if (spreadView.nextInStack > 0) {
521+ var nextAppInStack = ApplicationManager.get(spreadView.nextInStack);
522+
523+ if (index === spreadView.nextInStack) {
524+ // this is the next app in stack.
525+
526+ if (app.stage === ApplicationInfoInterface.SideStage) {
527+ // if the next app in stack is a sidestage app, it must order on top of other side stage app
528+ return Math.min(2, ApplicationManager.count-1);
529+ }
432530 return 1;
433531 }
434− }
435− if (index <= 2 && app.stage == ApplicationInfoInterface.MainStage && priv.sideStageAppId) {
436− // Ok, this is an inactive MS app. If there's an active SS app around, we need to place this one
437− // in between the active MS app and the active SS app, so that it comes in from there when dragging from the right.
438− // If there's now active SS app, just leave it where it is.
439− return priv.indexOf(priv.sideStageAppId) < index ? index - 1 : index;
440− }
441− if (index == spreadView.nextInStack && app.stage == ApplicationInfoInterface.SideStage) {
442− // This is a SS app and the next one to come in from the right:
443− if (priv.sideStageAppId && priv.mainStageAppId) {
444− // If there's both, an active MS and an active SS app, put this one right on top of that
445− return 2;
532+ if (nextAppInStack.stage === ApplicationInfoInterface.SideStage) {
533+ // if the next app in stack is a sidestage app, it must order on top of other side stage app
534+ return 1;
446535 }
447− // Or if there's only one other active app, put it on top of that.
448− // The case that there isn't any other active app is already handled above.
449− return 1;
536+ return Math.min(2, ApplicationManager.count-1);
450537 }
451− if (index == 2 && spreadView.nextInStack == 1 && priv.sideStageAppId) {
452− // If its index 2 but not the next one to come in, it means
453− // we've pulled another one down to index 2. Move this one up to 2 instead.
454− return 3;
455− }
456− // don't touch all others... (mostly index > 3 + simple cases where the above doesn't shuffle much)
457− return index;
538+ return Math.min(index+1, ApplicationManager.count-1);
458539 }
459540
460541 SequentialAnimation {
@@ -472,8 +553,12 @@ AbstractStage {
472553 script: {
473554 if (spreadView.selectedIndex >= 0) {
474555 var newIndex = spreadView.selectedIndex;
556+ var application = ApplicationManager.get(newIndex);
557+ if (application.stage === ApplicationInfoInterface.SideStage) {
558+ sideStage.showNow();
559+ }
475560 spreadView.selectedIndex = -1;
476− ApplicationManager.focusApplication(ApplicationManager.get(newIndex).appId);
561+ ApplicationManager.focusApplication(application.appId);
477562 spreadView.phase = 0;
478563 spreadView.contentX = -spreadView.shift;
479564 }
@@ -481,6 +566,11 @@ AbstractStage {
481566 }
482567 }
483568
569+ Behavior on contentX {
570+ enabled: root.altTabPressed
571+ UbuntuNumberAnimation {}
572+ }
573+
484574 MouseArea {
485575 id: spreadRow
486576 x: spreadView.contentX
@@ -491,87 +581,82 @@ AbstractStage {
491581 spreadView.snapTo(0);
492582 }
493583
494− Rectangle {
495− id: sideStageBackground
496− color: "black"
497− width: spreadView.sideStageWidth * (1 - sideStageDragHandle.progress)
498− height: priv.landscapeHeight
499− x: spreadView.width - width
500− z: spreadView.indexToZIndex(priv.indexOf(priv.sideStageAppId))
501− opacity: spreadView.phase == 0 ? 1 : 0
502− Behavior on opacity { UbuntuNumberAnimation {} }
584+ DropArea {
585+ objectName: "MainStageDropArea"
586+ anchors {
587+ left: parent.left
588+ top: parent.top
589+ bottom: parent.bottom
590+ }
591+ width: spreadView.width - sideStage.width
592+ enabled: priv.sideStageEnabled
593+
594+ onDropped: {
595+ priv.setAppStage(drag.source.appId, ApplicationInfoInterface.MainStage, true);
596+ ApplicationManager.focusApplication(drag.source.appId);
597+ }
598+ keys: "SideStage"
503599 }
504600
505− Item {
506− id: sideStageDragHandle
507− anchors.right: sideStageBackground.left
508− anchors.top: sideStageBackground.top
509− width: units.gu(2)
601+ SideStage {
602+ id: sideStage
603+ objectName: "sideStage"
510604 height: priv.landscapeHeight
511− z: sideStageBackground.z
512− opacity: spreadView.phase <= 0 && spreadView.sideStageVisible ? 1 : 0
513− property real progress: 0
514− property bool dragging: false
605+ x: spreadView.width - width
606+ z: {
607+ if (!priv.mainStageAppId) return 0;
515608
516− Behavior on opacity { UbuntuNumberAnimation {} }
609+ if (priv.sideStageAppId && spreadView.nextInStack > 0) {
610+ var nextAppInStack = ApplicationManager.get(spreadView.nextInStack);
517611
518− Connections {
519− target: spreadView
520− onSideStageVisibleChanged: {
521− if (spreadView.sideStageVisible) {
522− sideStageDragHandle.progress = 0;
612+ if (nextAppInStack.stage === ApplicationInfoInterface.MainStage) {
613+ // if the next app in stack is a main stage app, put the sidestage on top of it.
614+ return 2;
523615 }
616+ return 1;
524617 }
618+
619+ return 1;
525620 }
621+ visible: progress != 0
622+ enabled: priv.sideStageEnabled && sideStageDropArea.dropAllowed
623+ opacity: priv.sideStageEnabled && !spreadView.active ? 1 : 0
624+ Behavior on opacity { UbuntuNumberAnimation {} }
526625
527− Image {
528− anchors.centerIn: parent
529− width: sideStageDragHandleMouseArea.pressed ? parent.width * 2 : parent.width
530− height: parent.height
531− source: "graphics/sidestage_handle@20.png"
532− Behavior on width { UbuntuNumberAnimation {} }
626+ onShownChanged: {
627+ if (!shown && ApplicationManager.focusedApplicationId == priv.sideStageAppId) {
628+ ApplicationManager.requestFocusApplication(priv.mainStageAppId);
629+ }
630+ priv.updateStageApps();
631+ if (shown && priv.sideStageAppId) {
632+ ApplicationManager.requestFocusApplication(priv.sideStageAppId);
633+ }
533634 }
534635
535− MouseArea {
536− id: sideStageDragHandleMouseArea
636+ DropArea {
637+ id: sideStageDropArea
638+ objectName: "SideStageDropArea"
537639 anchors.fill: parent
538− enabled: spreadView.shiftedContentX == 0
539− property int startX
540− property var gesturePoints: new Array()
541− property real totalDiff
542−
543− onPressed: {
544− gesturePoints = [];
545− startX = mouseX;
546− totalDiff = 0.0;
547− sideStageDragHandle.progress = 0;
548− sideStageDragHandle.dragging = true;
549− }
550− onMouseXChanged: {
551− totalDiff += mouseX - startX;
552− if (priv.mainStageAppId) {
553− sideStageDragHandle.progress = Math.max(0, totalDiff / spreadView.sideStageWidth);
554− }
555− gesturePoints.push(mouseX);
640+
641+ property bool dropAllowed: true
642+
643+ onEntered: {
644+ dropAllowed = drag.keys != "Disabled";
556645 }
557− onReleased: {
558− if (priv.mainStageAppId) {
559− var oneWayFlick = priv.evaluateOneWayFlick(gesturePoints);
560− sideStageDragSnapAnimation.to = sideStageDragHandle.progress > 0.5 || oneWayFlick ? 1 : 0;
561− sideStageDragSnapAnimation.start();
562− } else {
563− sideStageDragHandle.dragging = false;
646+ onExited: {
647+ dropAllowed = true;
648+ }
649+ onDropped: {
650+ if (drop.keys == "MainStage") {
651+ priv.setAppStage(drop.source.appId, ApplicationInfoInterface.SideStage, true);
652+ ApplicationManager.requestFocusApplication(drop.source.appId);
564653 }
565654 }
566− }
567− UbuntuNumberAnimation {
568− id: sideStageDragSnapAnimation
569− target: sideStageDragHandle
570− property: "progress"
571−
572− onRunningChanged: {
573− if (!running) {
574− sideStageDragHandle.dragging = false;
655+ drag {
656+ onSourceChanged: {
657+ if (!sideStageDropArea.drag.source) {
658+ dropAllowed = true;
659+ }
575660 }
576661 }
577662 }
@@ -586,36 +671,54 @@ AbstractStage {
586671 id: spreadTile
587672 objectName: model.appId ? "tabletSpreadDelegate_" + model.appId
588673 : "tabletSpreadDelegate_null";
589− width: {
590− if (wantsMainStage) {
591− return spreadView.width;
592− } else {
593− return spreadView.sideStageWidth;
594− }
595− }
596− height: {
597− if (wantsMainStage) {
598− return spreadView.height;
599− } else {
600− return priv.landscapeHeight;
601− }
602− }
603− active: model.appId == priv.mainStageAppId || model.appId == priv.sideStageAppId
604− zIndex: spreadView.indexToZIndex(index)
674+ width: spreadView.width
675+ height: spreadView.height
676+ active: appId == priv.mainStageAppId || appId == priv.sideStageAppId
677+ zIndex: selected && stage == ApplicationInfoInterface.MainStage ? 0 : spreadView.indexToZIndex(index)
605678 selected: spreadView.selectedIndex == index
606679 otherSelected: spreadView.selectedIndex >= 0 && !selected
607− isInSideStage: priv.sideStageAppId == model.appId
680+ isInSideStage: priv.sideStageAppId === appId
608681 interactive: !spreadView.interactive && spreadView.phase === 0 && root.interactive
609682 swipeToCloseEnabled: spreadView.interactive && !snapAnimation.running
610683 maximizedAppTopMargin: root.maximizedAppTopMargin
611− dragOffset: !isDash && model.appId == priv.mainStageAppId && root.inverseProgress > 0 && spreadView.phase === 0 ? root.inverseProgress : 0
684+ dragOffset: !isDash && appId == priv.mainStageAppId && root.inverseProgress > 0 && spreadView.phase === 0 ? root.inverseProgress : 0
612685 application: ApplicationManager.get(index)
613686 closeable: !isDash
687+ highlightShown: root.altTabPressed && priv.highlightIndex == zIndex
614688
615689 readonly property bool wantsMainStage: model.stage == ApplicationInfoInterface.MainStage
616690
617691 readonly property bool isDash: model.appId == "unity8-dash"
618692
693+ stage: model.stage
694+ fullscreen: {
695+ if (mainApp && stage === ApplicationInfoInterface.SideStage) {
696+ return mainApp.fullscreen;
697+ }
698+ return application ? application.fullscreen : false;
699+ }
700+
701+ supportedOrientations: {
702+ if (application) {
703+ var orientations = application.supportedOrientations;
704+ if (stage == ApplicationInfoInterface.MainStage) {
705+ // When an app is in the mainstage, it always supports Landscape|InvertedLandscape
706+ // so that we can drag it from the main stage to the side stage
707+ orientations |= Qt.LandscapeOrientation | Qt.InvertedLandscapeOrientation;
708+ }
709+ return orientations;
710+ } else {
711+ // we just don't care
712+ return Qt.PortraitOrientation |
713+ Qt.LandscapeOrientation |
714+ Qt.InvertedPortraitOrientation |
715+ Qt.InvertedLandscapeOrientation;
716+ }
717+ }
718+
719+ readonly property string appId: model.appId
720+ readonly property bool isDash: appId == "unity8-dash"
721+
619722 Binding {
620723 target: spreadTile.application
621724 property: "exemptFromLifecycle"
@@ -646,6 +749,28 @@ AbstractStage {
646749 enabled: spreadView.closingIndex >= 0
647750 UbuntuNumberAnimation {}
648751 }
752+ Connections {
753+ target: priv
754+ onSideStageEnabledChanged: refreshStage()
755+ }
756+
757+ Component.onCompleted: {
758+ refreshStage()
759+ stageChanged.connect(priv.updateStageApps);
760+ }
761+
762+ function refreshStage() {
763+ var stage = ApplicationInfoInterface.MainStage;
764+ if (priv.sideStageEnabled) {
765+ if (application && application.supportedOrientations & (Qt.PortraitOrientation|Qt.InvertedPortraitOrientation)) {
766+ stage = WindowStateStorage.getStage(appId);
767+ }
768+ }
769+
770+ if (model.stage !== stage) {
771+ priv.setAppStage(appId, stage, false);
772+ }
773+ }
649774
650775 // This is required because none of the bindings are triggered in some cases:
651776 // When an app is closed, it might happen that ApplicationManager.get(nextInStack)
@@ -670,7 +795,7 @@ AbstractStage {
670795
671796 // TODO: Hiding tile when progress is such that it will be off screen.
672797 property bool occluded: {
673− if (spreadView.active) return false;
798+ if (spreadView.active && !offScreen) return false;
674799 else if (spreadTile.active) return false;
675800 else if (xTranslateAnimating) return false;
676801 else if (z <= 1 && priv.focusedAppDelegateIsDislocated) return false;
@@ -694,17 +819,87 @@ AbstractStage {
694819 return progress;
695820 }
696821
697− shellOrientationAngle: wantsMainStage ? root.shellOrientationAngle : 0
698− shellOrientation: wantsMainStage ? root.shellOrientation : Qt.PortraitOrientation
699− orientations: Orientations {
700− primary: spreadTile.wantsMainStage ? root.orientations.primary : Qt.PortraitOrientation
701− native_: spreadTile.wantsMainStage ? root.orientations.native_ : Qt.PortraitOrientation
822+ shellOrientationAngle: root.shellOrientationAngle
823+ shellOrientation: root.shellOrientation
824+ orientations: root.orientations
825+
826+ states: [
827+ State {
828+ name: "MainStage"
829+ when: spreadTile.stage == ApplicationInfoInterface.MainStage
830+ },
831+ State {
832+ name: "SideStage"
833+ when: spreadTile.stage == ApplicationInfoInterface.SideStage
834+
835+ PropertyChanges {
836+ target: spreadTile
837+ width: spreadView.sideStageWidth
838+ height: priv.landscapeHeight
839+
840+ supportedOrientations: Qt.PortraitOrientation
841+ shellOrientationAngle: 0
842+ shellOrientation: Qt.PortraitOrientation
843+ orientations: sideStageOrientations
844+ }
845+ }
846+ ]
847+
848+ Orientations {
849+ id: sideStageOrientations
850+ primary: Qt.PortraitOrientation
851+ native_: Qt.PortraitOrientation
702852 portrait: root.orientations.portrait
703853 invertedPortrait: root.orientations.invertedPortrait
704854 landscape: root.orientations.landscape
705855 invertedLandscape: root.orientations.invertedLandscape
706856 }
707857
858+ transitions: [
859+ Transition {
860+ to: "SideStage"
861+ SequentialAnimation {
862+ PropertyAction {
863+ target: spreadTile
864+ properties: "width,height,supportedOrientations,shellOrientationAngle,shellOrientation,orientations"
865+ }
866+ ScriptAction {
867+ script: {
868+ // rotate immediately.
869+ spreadTile.matchShellOrientation();
870+ if (ApplicationManager.focusedApplicationId === spreadTile.appId &&
871+ priv.sideStageEnabled && !sideStage.shown) {
872+ // Sidestage was focused, so show the side stage.
873+ sideStage.show();
874+ // if we've switched to a main app which doesnt support portrait, hide the side stage.
875+ } else if (mainApp && (mainApp.supportedOrientations & (Qt.PortraitOrientation|Qt.InvertedPortraitOrientation)) == 0) {
876+ sideStage.hideNow();
877+ }
878+ }
879+ }
880+ }
881+ },
882+ Transition {
883+ from: "SideStage"
884+ SequentialAnimation {
885+ ScriptAction {
886+ script: {
887+ if (priv.sideStageAppId === spreadTile.appId &&
888+ mainApp && (mainApp.supportedOrientations & (Qt.PortraitOrientation|Qt.InvertedPortraitOrientation)) == 0) {
889+ // The mainstage app did not natively support portrait orientation, so focus the sidestage.
890+ ApplicationManager.requestFocusApplication(spreadTile.appId);
891+ }
892+ }
893+ }
894+ PropertyAction {
895+ target: spreadTile
896+ properties: "width,height,supportedOrientations,shellOrientationAngle,shellOrientation,orientations"
897+ }
898+ ScriptAction { script: { spreadTile.matchShellOrientation(); } }
899+ }
900+ }
901+ ]
902+
708903 onClicked: {
709904 if (spreadView.phase == 2) {
710905 spreadView.snapTo(index);
@@ -724,6 +919,16 @@ AbstractStage {
724919 ApplicationManager.stopApplication(ApplicationManager.get(index).appId);
725920 }
726921
922+ onFocusChanged: {
923+ if (focus && ApplicationManager.focusedApplicationId !== appId) {
924+ ApplicationManager.focusApplication(appId);
925+ }
926+
927+ if (focus && priv.sideStageEnabled && stage === ApplicationInfoInterface.SideStage) {
928+ sideStage.show();
929+ }
930+ }
931+
727932 Binding {
728933 target: root
729934 when: model.appId == priv.mainStageAppId
@@ -758,6 +963,71 @@ AbstractStage {
758963 }
759964 }
760965
966+ TabletSideStageTouchGesture {
967+ id: triGestureArea
968+ anchors.fill: parent
969+ enabled: priv.sideStageEnabled && !spreadView.active
970+ property var dragObject: null
971+ property string appId: ""
972+ dragComponent: dragComponent
973+ dragComponentProperties: { "appId": appId }
974+
975+ onPressed: {
976+ function matchDelegate(obj) { return String(obj.objectName).indexOf("tabletSpreadDelegate") >= 0; }
977+
978+ var delegateAtCenter = Functions.itemAt(spreadRow, x, y, matchDelegate);
979+ if (!delegateAtCenter) return;
980+
981+ appId = delegateAtCenter.appId;
982+ }
983+
984+ onClicked: {
985+ if (sideStage.shown) {
986+ sideStage.hide();
987+ } else {
988+ sideStage.show();
989+ }
990+ }
991+
992+ onDragStarted: {
993+ // If we're dragging to the sidestage.
994+ if (!sideStage.shown) {
995+ sideStage.show();
996+ }
997+ }
998+
999+ Component {
1000+ id: dragComponent
1001+ SessionContainer {
1002+ property string appId: ""
1003+ property var application: ApplicationManager.findApplication(appId)
1004+
1005+ session: application ? application.session : null
1006+ interactive: false
1007+ resizeSurface: false
1008+ focus: false
1009+
1010+ width: units.gu(40)
1011+ height: units.gu(40)
1012+
1013+ Drag.hotSpot.x: width/2
1014+ Drag.hotSpot.y: height/2
1015+ // only accept opposite stage.
1016+ Drag.keys: {
1017+ if (!application) return "Disabled";
1018+
1019+ if (application.stage === ApplicationInfo.MainStage) {
1020+ if (application.supportedOrientations & (Qt.PortraitOrientation|Qt.InvertedPortraitOrientation)) {
1021+ return "MainStage";
1022+ }
1023+ return "Disabled";
1024+ }
1025+ return "SideStage";
1026+ }
1027+ }
1028+ }
1029+ }
1030+
7611031 //eat touch events during the right edge gesture
7621032 MouseArea {
7631033 anchors.fill: parent
@@ -767,7 +1037,8 @@ AbstractStage {
7671037 DirectionalDragArea {
7681038 id: spreadDragArea
7691039 objectName: "spreadDragArea"
770− anchors { top: parent.top; right: parent.right; bottom: parent.bottom }
1040+ x: parent.width - root.dragAreaWidth
1041+ anchors { top: parent.top; bottom: parent.bottom }
7711042 width: root.dragAreaWidth
7721043 direction: Direction.Leftwards
7731044 enabled: (spreadView.phase != 2 && root.spreadEnabled) || dragging
@@ -815,4 +1086,29 @@ AbstractStage {
8151086 }
8161087 }
8171088 }
1089+
1090+ EdgeBarrier {
1091+ id: edgeBarrier
1092+
1093+ // NB: it does its own positioning according to the specified edge
1094+ edge: Qt.RightEdge
1095+
1096+ onPassed: {
1097+ spreadView.snapToSpread();
1098+ }
1099+ material: Component {
1100+ Item {
1101+ Rectangle {
1102+ width: parent.height
1103+ height: parent.width
1104+ rotation: 90
1105+ anchors.centerIn: parent
1106+ gradient: Gradient {
1107+ GradientStop { position: 0.0; color: Qt.rgba(0.16,0.16,0.16,0.7)}
1108+ GradientStop { position: 1.0; color: Qt.rgba(0.16,0.16,0.16,0)}
1109+ }
1110+ }
1111+ }
1112+ }
1113+ }
8181114}
qml/Stages/TransformedTabletSpreadDelegate.qml+84−56
@@ -31,6 +31,7 @@ SpreadDelegate {
3131 // Set this to true when this tile a currently active on either the MS or the SS.
3232 property bool active: false
3333
34+ property int stage
3435 property int zIndex
3536 property real progress: 0
3637 property real animatedProgress: 0
@@ -49,10 +50,11 @@ SpreadDelegate {
4950
5051 property int dragOffset: 0
5152 readonly property alias xTranslateAnimating: xTranslateAnimation.running
53+ readonly property bool offScreen: priv.xTranslate >= 0
5254
5355 dropShadow: spreadView.active ||
5456 (active
55− && (model.stage == ApplicationInfoInterface.MainStage || !priv.shellIsLandscape)
57+ && (stage == ApplicationInfoInterface.MainStage || !priv.shellIsLandscape)
5658 && priv.xTranslate != 0)
5759
5860 onSelectedChanged: {
@@ -141,9 +143,9 @@ SpreadDelegate {
141143 enabled: !spreadView.active &&
142144 !snapAnimation.running &&
143145 model.appId !== "unity8-dash" &&
144− !spreadView.sideStageDragging &&
145146 spreadView.animateX &&
146− !spreadView.beingResized
147+ !spreadView.beingResized &&
148+ priv.state !== "sideStage"
147149 UbuntuNumberAnimation {
148150 id: xTranslateAnimation
149151 duration: UbuntuAnimation.FastDuration
@@ -153,21 +155,20 @@ SpreadDelegate {
153155 property real xTranslate: {
154156 var newTranslate = 0;
155157
156− if (otherSelected) {
157− return priv.selectedXTranslate;
158− }
159−
160− if (isSelected) {
161− if (model.stage == ApplicationInfoInterface.MainStage) {
158+ // selected app or opposite stage active app.
159+ if (isSelected || (otherSelected && root.active && spreadView.selectedApplication && spreadView.selectedApplication.stage !== stage)) {
160+ if (stage == ApplicationInfoInterface.MainStage) {
162161 return linearAnimation(selectedProgress, negativeProgress, selectedXTranslate, -spreadView.width, root.progress);
163162 } else {
164163 return linearAnimation(selectedProgress, negativeProgress, selectedXTranslate, -spreadView.sideStageWidth, root.progress);
165164 }
165+ } else if (otherSelected) {
166+ return selectedXTranslate;
166167 }
167168
168169 // The tile should move a bit to the left if a new one comes on top of it, but not for the Side Stage and not
169170 // when we're only dragging the side stage in on top of a main stage app
170− var shouldMoveAway = spreadView.nextInStack >= 0 && priv.movedActive && model.stage === ApplicationInfoInterface.MainStage &&
171+ var shouldMoveAway = spreadView.nextInStack >= 0 && priv.movedActive && stage === ApplicationInfoInterface.MainStage &&
171172 ApplicationManager.get(spreadView.nextInStack).stage === ApplicationInfoInterface.MainStage;
172173
173174 if (active) {
@@ -177,36 +178,45 @@ SpreadDelegate {
177178 newTranslate += linearAnimation(0, spreadView.positionMarker2, 0, -units.gu(4), root.animatedProgress);
178179 }
179180 newTranslate += root.dragOffset;
180− }
181− if (!spreadView.active && model.appId == "unity8-dash" && !root.active) {
181+ } else if (!spreadView.active && model.appId == "unity8-dash") {
182182 newTranslate -= root.width;
183183 }
184184
185− if (nextInStack && spreadView.phase == 0) {
186− if (model.stage == ApplicationInfoInterface.MainStage) {
187− if (spreadView.sideStageVisible && root.progress > 0) {
188− // Move it so it appears from behind the side stage immediately
189− newTranslate += -spreadView.sideStageWidth;
185+ if (!spreadView.active) {
186+ return newTranslate;
187+ }
188+
189+ var shadowOffset = units.gu(2);
190+
191+ if (spreadView.phase == 0) {
192+ if (nextInStack) {
193+ if (stage == ApplicationInfoInterface.MainStage) {
194+ if (spreadView.sideStageVisible && root.progress > 0) {
195+ // Move it so it appears from behind the side stage immediately
196+ newTranslate += -spreadView.sideStageWidth;
197+ }
190198 }
191− }
192199
193− if (model.stage == ApplicationInfoInterface.SideStage && !spreadView.sideStageVisible) {
194− // This is when we only drag the side stage in, without rotation or snapping
195− newTranslate = linearAnimation(0, spreadView.positionMarker2, 0, -spreadView.sideStageWidth, root.progress);
196− } else {
197− newTranslate += linearAnimation(0, spreadView.positionMarker2, 0, -spreadView.sideStageWidth * spreadView.snapPosition, root.animatedProgress);
200+ if (stage == ApplicationInfoInterface.SideStage && !spreadView.sideStageVisible) {
201+ // This is when we only drag the side stage in, without rotation or snapping
202+ newTranslate = linearAnimation(0, spreadView.positionMarker2, 0, -spreadView.sideStageWidth, root.animatedProgress);
203+ } else {
204+ newTranslate += linearAnimation(0, spreadView.positionMarker2, 0, -spreadView.sideStageWidth * spreadView.snapPosition, root.animatedProgress);
205+ }
206+ } else if (!root.active) {
207+ newTranslate += shadowOffset;
198208 }
199209 }
200210
201211 if (spreadView.phase == 1) {
202212 if (nextInStack) {
203− if (model.stage == ApplicationInfoInterface.MainStage) {
213+ if (stage == ApplicationInfoInterface.MainStage) {
204214 var startValue = -spreadView.sideStageWidth * spreadView.snapPosition + (spreadView.sideStageVisible ? -spreadView.sideStageWidth : 0);
205215 newTranslate += linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, startValue, priv.phase2StartTranslate, root.animatedProgress);
206216 } else {
207217 var endValue = -spreadView.width + spreadView.width * root.zIndex / 6;
208218 if (!spreadView.sideStageVisible) {
209− newTranslate += linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, -spreadView.sideStageWidth, priv.phase2StartTranslate, root.progress);
219+ newTranslate += linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, -spreadView.sideStageWidth, priv.phase2StartTranslate, root.animatedProgress);
210220 } else {
211221 newTranslate += linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, -spreadView.sideStageWidth * spreadView.snapPosition, priv.phase2StartTranslate, root.animatedProgress);
212222 }
@@ -215,16 +225,20 @@ SpreadDelegate {
215225 var startProgress = spreadView.positionMarker2 - (zIndex * spreadView.positionMarker2 / 2);
216226 var endProgress = spreadView.positionMarker4 - (zIndex * spreadView.tileDistance / spreadView.width);
217227 var startTranslate = -root.width + (shouldMoveAway ? -units.gu(4) : 0);
218− newTranslate = linearAnimation(startProgress, endProgress, startTranslate, priv.phase2StartTranslate, root.progress);
228+ newTranslate = linearAnimation(startProgress, endProgress, startTranslate, priv.phase2StartTranslate, root.animatedProgress);
219229 } else {
220230 var startProgress = spreadView.positionMarker2 - (zIndex * spreadView.positionMarker2 / 2);
221231 var endProgress = spreadView.positionMarker4 - (zIndex * spreadView.tileDistance / spreadView.width);
222− newTranslate = linearAnimation(startProgress, endProgress, 0, priv.phase2StartTranslate, root.progress);
232+ newTranslate = linearAnimation(startProgress, endProgress, shadowOffset * Math.max(0, zIndex-2), priv.phase2StartTranslate, root.animatedProgress);
223233 }
224234 }
225235
226236 if (spreadView.phase == 2) {
227− newTranslate = -easingCurve.value * (spreadView.width - root.zIndex * animatedEndDistance);
237+ if (easingCurve.value == 0 && !nextInStack) {
238+ newTranslate = shadowOffset;
239+ } else {
240+ newTranslate = -easingCurve.value * (spreadView.width - root.zIndex * animatedEndDistance);
241+ }
228242 }
229243
230244 return newTranslate;
@@ -235,33 +249,30 @@ SpreadDelegate {
235249 return 1;
236250 }
237251
238− if (otherSelected) {
239− return selectedScale;
240− }
241−
242− if (isSelected) {
252+ // selected app or opposite stage active app.
253+ if (isSelected || (otherSelected && root.active && spreadView.selectedApplication && spreadView.selectedApplication.stage !== stage)) {
243254 return linearAnimation(selectedProgress, negativeProgress, selectedScale, 1, root.progress);
255+ } else if (otherSelected) {
256+ return selectedScale;
244257 }
245258
246259 if (spreadView.phase == 0) {
247260 if (nextInStack) {
248− if (model.stage == ApplicationInfoInterface.SideStage && !spreadView.sideStageVisible) {
261+ if (stage == ApplicationInfoInterface.SideStage && !spreadView.sideStageVisible) {
249262 return 1;
250263 } else {
251264 var targetScale = root.dragStartScale - ((root.dragStartScale - 1) * spreadView.snapPosition);
252265 return linearAnimation(0, spreadView.positionMarker2, root.dragStartScale, targetScale, root.animatedProgress);
253266 }
254− } else if (active) {
255− return 1;
256267 } else {
257− return linearAnimation(0, spreadView.positionMarker2, root.startScale, root.endScale, root.progress);
268+ return 1;
258269 }
259270 }
260271
261272 if (spreadView.phase == 1) {
262273 if (nextInStack) {
263274 var startScale = 1;
264− if (model.stage !== ApplicationInfoInterface.SideStage || spreadView.sideStageVisible) {
275+ if (stage !== ApplicationInfoInterface.SideStage || spreadView.sideStageVisible) {
265276 startScale = root.dragStartScale - ((root.dragStartScale - 1) * spreadView.snapPosition);
266277 }
267278 return linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, startScale, priv.phase2StartScale, root.animatedProgress);
@@ -283,21 +294,22 @@ SpreadDelegate {
283294 return 0;
284295 }
285296
286− if (otherSelected) {
287− return selectedAngle;
288− }
289− if (isSelected) {
297+ // selected app or opposite stage active app.
298+ if (isSelected || (otherSelected && root.active && spreadView.selectedApplication && spreadView.selectedApplication.stage !== stage)) {
290299 return linearAnimation(selectedProgress, negativeProgress, selectedAngle, 0, root.progress);
300+ } else if (otherSelected) {
301+ return selectedAngle;
291302 }
292303
293304 // The tile should rotate a bit when another one comes on top, but not when only dragging the side stage in
294− var shouldMoveAway = spreadView.nextInStack >= 0 && movedActive &&
305+ var shouldMoveAway = spreadView.nextInStack == -1 ||
306+ spreadView.nextInStack >= 0 && priv.movedActive &&
295307 (ApplicationManager.get(spreadView.nextInStack).stage === ApplicationInfoInterface.MainStage ||
296− model.stage == ApplicationInfoInterface.SideStage);
308+ stage == ApplicationInfoInterface.SideStage);
297309
298310 if (spreadView.phase == 0) {
299311 if (nextInStack) {
300− if (model.stage == ApplicationInfoInterface.SideStage && !spreadView.sideStageVisible) {
312+ if (stage == ApplicationInfoInterface.SideStage && !spreadView.sideStageVisible) {
301313 return 0;
302314 } else {
303315 return linearAnimation(0, spreadView.positionMarker2, root.startAngle, root.startAngle * (1-spreadView.snapPosition), root.animatedProgress);
@@ -309,7 +321,7 @@ SpreadDelegate {
309321 }
310322 if (spreadView.phase == 1) {
311323 if (nextInStack) {
312− if (model.stage == ApplicationInfoInterface.SideStage && !spreadView.sideStageVisible) {
324+ if (stage == ApplicationInfoInterface.SideStage && !spreadView.sideStageVisible) {
313325 return linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, 0, priv.phase2StartAngle, root.animatedProgress);
314326 } else {
315327 return linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, root.startAngle * (1-spreadView.snapPosition), priv.phase2StartAngle, root.animatedProgress);
@@ -328,31 +340,47 @@ SpreadDelegate {
328340 }
329341
330342 property real opacityTransform: {
331− if (otherSelected && spreadView.phase == 2) {
343+ // animate opacity for items not snapping into view.
344+ if (spreadView.phase !== 2) return 1;
345+ if (root.isSelected) return 1;
346+
347+ if (otherSelected) {
348+ if (root.active && spreadView.selectedApplication && spreadView.selectedApplication.stage !== stage) {
349+ return 1;
350+ }
332351 return linearAnimation(selectedProgress, negativeProgress, selectedOpacity, 0, root.progress);
333352 }
334−
335353 return 1;
336354 }
337355
338356 property real topMarginProgress: {
339− if (priv.isSelected) {
357+ // selected app or opposite stage active app.
358+ if (isSelected || (otherSelected && root.active && spreadView.selectedApplication && spreadView.selectedApplication.stage !== stage)) {
340359 return linearAnimation(selectedProgress, negativeProgress, selectedTopMarginProgress, 0, root.progress);
341360 }
342− switch (spreadView.phase) {
343− case 0:
361+
362+ if (spreadView.phase == 0) {
344363 return 0;
345− case 1:
346− return linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4,
347− 0, priv.phase2StartTopMarginProgress, root.progress);
364+ } else if (spreadView.phase == 1) {
365+ if (nextInStack) {
366+ return linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4,
367+ 0, 1, root.progress);
368+ }
369+ var startProgress = spreadView.positionMarker2 - (zIndex * spreadView.positionMarker2 / 2);
370+ var endProgress = spreadView.positionMarker4 - (zIndex * spreadView.tileDistance / spreadView.width);
371+ return linearAnimation(startProgress, endProgress, 0, 1, root.progress);
348372 }
349373 return 1;
350374 }
351375
352376 states: [
353377 State {
354− name: "sideStageDragging"; when: spreadView.sideStageDragging && root.isInSideStage
355− PropertyChanges { target: priv; xTranslate: -spreadView.sideStageWidth + spreadView.sideStageWidth * spreadView.sideStageDragProgress }
378+ name: "sideStage";
379+ when: root.isInSideStage && spreadView.shiftedContentX == 0 && spreadView.phase == 0
380+ PropertyChanges {
381+ target: priv;
382+ xTranslate: -spreadView.sideStageWidth + spreadView.sideStageWidth * (1-spreadView.sideStageDragProgress)
383+ }
356384 }
357385 ]
358386 }
qml/Stages/WindowResizeArea.qml+8−5
@@ -40,6 +40,7 @@ MouseArea {
4040 property int defaultHeight: units.gu(50)
4141 property int screenWidth: 0
4242 property int screenHeight: 0
43+ property int leftMargin: 0
4344
4445 QtObject {
4546 id: priv
@@ -72,10 +73,12 @@ MouseArea {
7273 var windowGeometry = windowStateStorage.getGeometry(root.windowId,
7374 Qt.rect(target.x, target.y, defaultWidth, defaultHeight));
7475
75− target.requestedWidth = Math.min(Math.max(windowGeometry.width, d.minimumWidth), screenWidth);
76− target.requestedHeight = Math.min(Math.max(windowGeometry.height, d.minimumHeight), root.screenHeight - PanelState.panelHeight);
77− target.x = Math.max(Math.min(windowGeometry.x, root.screenWidth - target.requestedWidth), 0)
78− target.y = Math.max(Math.min(windowGeometry.y, root.screenHeight - target.requestedHeight), PanelState.panelHeight)
76+ target.requestedWidth = Qt.binding(function() { return Math.min(Math.max(windowGeometry.width, d.minimumWidth), screenWidth - root.leftMargin); });
77+ target.requestedHeight = Qt.binding(function() { return Math.min(Math.max(windowGeometry.height, d.minimumHeight),
78+ root.screenHeight - (target.fullscreen ? 0 : PanelState.panelHeight)); });
79+ target.x = Qt.binding(function() { return Math.max(Math.min(windowGeometry.x, root.screenWidth - root.leftMargin - target.requestedWidth),
80+ (target.fullscreen ? 0 : root.leftMargin)); });
81+ target.y = Qt.binding(function() { return Math.max(Math.min(windowGeometry.y, root.screenHeight - target.requestedHeight), PanelState.panelHeight); });
7982
8083 var windowState = windowStateStorage.getState(root.windowId, WindowStateStorage.WindowStateNormal)
8184 if (windowState === WindowStateStorage.WindowStateMaximized) {
@@ -298,7 +301,7 @@ MouseArea {
298301 }
299302
300303 if (d.topBorder) {
301− var newTargetY = d.startY + deltaY;
304+ var newTargetY = Math.max(d.startY + deltaY, PanelState.panelHeight); // disallow resizing up past Panel
302305 var bottomBorderY = target.y + target.height;
303306 if (bottomBorderY > newTargetY + d.minimumHeight) {
304307 if (bottomBorderY < newTargetY + d.maximumHeight) {
qml/Stages/graphics/sidestage_drag.svgnew file+207
@@ -0,0 +1,207 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="540"
13+ height="324"
14+ id="svg4874"
15+ version="1.1"
16+ inkscape:version="0.91+devel r"
17+ viewBox="0 0 540 324"
18+ sodipodi:docname="gesture_3f_touch.svg">
19+ <defs
20+ id="defs4876" />
21+ <sodipodi:namedview
22+ id="base"
23+ pagecolor="#292929"
24+ bordercolor="#666666"
25+ borderopacity="1.0"
26+ inkscape:pageopacity="1"
27+ inkscape:pageshadow="2"
28+ inkscape:zoom="1.1785993"
29+ inkscape:cx="-19.084613"
30+ inkscape:cy="11.707485"
31+ inkscape:document-units="px"
32+ inkscape:current-layer="g4780"
33+ showgrid="false"
34+ showborder="true"
35+ fit-margin-top="0"
36+ fit-margin-left="0"
37+ fit-margin-right="0"
38+ fit-margin-bottom="0"
39+ inkscape:snap-bbox="true"
40+ inkscape:bbox-paths="true"
41+ inkscape:bbox-nodes="true"
42+ inkscape:snap-bbox-edge-midpoints="true"
43+ inkscape:snap-bbox-midpoints="true"
44+ inkscape:object-paths="true"
45+ inkscape:snap-intersection-paths="true"
46+ inkscape:object-nodes="true"
47+ inkscape:snap-smooth-nodes="true"
48+ inkscape:snap-midpoints="true"
49+ inkscape:snap-object-midpoints="true"
50+ inkscape:snap-center="true"
51+ showguides="false"
52+ inkscape:guide-bbox="true"
53+ inkscape:snap-global="true"
54+ inkscape:snap-others="false"
55+ inkscape:snap-page="true">
56+ <inkscape:grid
57+ type="xygrid"
58+ id="grid5451"
59+ empspacing="8"
60+ originx="-2.7715014e-06"
61+ originy="-2.5124622e-06" />
62+ <sodipodi:guide
63+ orientation="1,0"
64+ position="7.9999972,-8.0000025"
65+ id="guide4063"
66+ inkscape:locked="false" />
67+ <sodipodi:guide
68+ orientation="1,0"
69+ position="3.9999972,-8.0000025"
70+ id="guide4065"
71+ inkscape:locked="false" />
72+ <sodipodi:guide
73+ orientation="0,1"
74+ position="-8.0000027,87.999998"
75+ id="guide4067"
76+ inkscape:locked="false" />
77+ <sodipodi:guide
78+ orientation="0,1"
79+ position="-8.0000027,91.999998"
80+ id="guide4069"
81+ inkscape:locked="false" />
82+ <sodipodi:guide
83+ orientation="0,1"
84+ position="104,3.9999975"
85+ id="guide4071"
86+ inkscape:locked="false" />
87+ <sodipodi:guide
88+ orientation="0,1"
89+ position="-5.0000027,7.9999975"
90+ id="guide4073"
91+ inkscape:locked="false" />
92+ <sodipodi:guide
93+ orientation="1,0"
94+ position="91.999996,-8.0000025"
95+ id="guide4075"
96+ inkscape:locked="false" />
97+ <sodipodi:guide
98+ orientation="1,0"
99+ position="87.999997,-8.0000025"
100+ id="guide4077"
101+ inkscape:locked="false" />
102+ <sodipodi:guide
103+ orientation="0,1"
104+ position="-8.0000027,83.999998"
105+ id="guide4074"
106+ inkscape:locked="false" />
107+ <sodipodi:guide
108+ orientation="1,0"
109+ position="11.999997,-8.0000025"
110+ id="guide4076"
111+ inkscape:locked="false" />
112+ <sodipodi:guide
113+ orientation="0,1"
114+ position="-5.0000027,11.999997"
115+ id="guide4078"
116+ inkscape:locked="false" />
117+ <sodipodi:guide
118+ orientation="1,0"
119+ position="83.999997,-9.0000025"
120+ id="guide4080"
121+ inkscape:locked="false" />
122+ <sodipodi:guide
123+ position="47.999997,-8.0000025"
124+ orientation="1,0"
125+ id="guide4170"
126+ inkscape:locked="false" />
127+ <sodipodi:guide
128+ position="-8.0000027,47.999997"
129+ orientation="0,1"
130+ id="guide4172"
131+ inkscape:locked="false" />
132+ </sodipodi:namedview>
133+ <metadata
134+ id="metadata4879">
135+ <rdf:RDF>
136+ <cc:Work
137+ rdf:about="">
138+ <dc:format>image/svg+xml</dc:format>
139+ <dc:type
140+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
141+ <dc:title></dc:title>
142+ </cc:Work>
143+ </rdf:RDF>
144+ </metadata>
145+ <g
146+ inkscape:label="Layer 1"
147+ inkscape:groupmode="layer"
148+ id="layer1"
149+ transform="translate(67.857143,149.49498)">
150+ <g
151+ transform="matrix(0,-1,-1,0,373.50506,516.50504)"
152+ id="g4845"
153+ style="display:inline">
154+ <g
155+ inkscape:export-ydpi="90"
156+ inkscape:export-xdpi="90"
157+ inkscape:export-filename="next01.png"
158+ transform="matrix(-0.9996045,0,0,1,575.94296,-611.00001)"
159+ id="g4778"
160+ inkscape:label="Layer 1">
161+ <g
162+ transform="matrix(-1,0,0,1,575.99999,611)"
163+ id="g4780"
164+ style="display:inline">
165+ <path
166+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.6204567px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;display:inline;fill:none;fill-opacity:1;stroke:#f7f7f7;stroke-width:4.00079107;stroke-miterlimit:4;stroke-dasharray:none"
167+ d="m 526.90578,343.72628 c 14.3803,3.85163 8.37809,26.10701 -5.96811,22.26448 l -10e-6,10e-6 -50.91437,-13.63709 67.92084,18.21108 c 15.93089,4.26693 9.28148,28.92202 -6.61162,24.66516 l -10e-6,1e-5 -67.93497,-18.15834 58.38757,15.63874 c 15.85637,4.24702 9.23761,28.78845 -6.58115,24.5515 v -2e-5 l 1e-5,-2e-5 -71.03537,-19.00646 -33.09607,-8.85524 -0.18781,-0.0503 v 0 l -6.91408,-1.85189 18.07353,23.47068 c 8.45364,10.48525 11.9521,17.66446 -3.54852,27.89697 l -43.91145,-37.31132 c -28.38683,-22.97811 -35.17793,-41.86133 -27.95127,-70.42985 10.25002,-40.5206 40.5632,-49.89857 76.24862,-40.34047 4.5224,1.21129 36.24839,9.63672 40.29164,10.71968 14.0412,3.76084 12.54552,13.74563 6.76936,26.96549 z"
168+ id="path4845-6"
169+ inkscape:connector-curvature="0"
170+ sodipodi:nodetypes="ccccccccccccccccccccssscc" />
171+ <path
172+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.25;fill:#f7f7f7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.51758671;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
173+ d="m 571.27587,383.27233 a 35.064884,35.05101 0 0 1 -16.02978,29.39649 35.064884,35.05101 0 0 1 -34.38665,28.3418 35.064884,35.05101 0 0 1 -34.85362,-31.56055 l 29.19904,7.8125 c 15.81876,4.23695 22.4371,-20.30571 6.58073,-24.55274 l -28.91769,-7.74609 a 35.064884,35.05101 0 0 1 0.01,-0.0137 l 38.45466,10.2793 c 15.8931,4.25686 22.54288,-20.39714 6.61199,-24.66407 l -48.41758,-12.98242 a 35.064884,35.05101 0 0 1 0,-0.006 l 31.41086,8.41407 c 14.3462,3.84253 20.34945,-18.414 5.96915,-22.26563 l -31.70199,-8.49023 a 35.064884,35.05101 0 0 1 29.21468,-15.70704 35.064884,35.05101 0 0 1 35.06465,35.05274 35.064884,35.05101 0 0 1 -0.0879,2.45312 35.064884,35.05101 0 0 1 11.8797,26.23828 z"
174+ id="ellipse4239-1"
175+ inkscape:connector-curvature="0" />
176+ <g
177+ style="display:inline"
178+ id="g5379"
179+ transform="matrix(-0.99999722,0,0,-0.99999722,645.25394,919.46958)">
180+ <path
181+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#f7f7f7;stroke-width:4.00079107;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
182+ id="path4116"
183+ sodipodi:type="arc"
184+ sodipodi:cx="808.72699"
185+ sodipodi:cy="244.79436"
186+ sodipodi:rx="250.36082"
187+ sodipodi:ry="263.63275"
188+ sodipodi:start="3.8048178"
189+ sodipodi:end="5.6286868"
190+ sodipodi:open="true"
191+ d="M 611.43997,82.485822 A 250.36082,263.63275 0 0 1 809.81939,-18.835885 250.36082,263.63275 0 0 1 1007.3516,84.304899"
192+ inkscape:transform-center-x="-17.044876"
193+ inkscape:transform-center-y="-0.0015034578"
194+ transform="matrix(0,1,1,0,0,0)" />
195+ <path
196+ inkscape:transform-center-y="4.9738279"
197+ inkscape:transform-center-x="2.0443183"
198+ inkscape:connector-curvature="0"
199+ id="path4198"
200+ d="m 73.559638,1014.0226 14.78221,-18.91287 c 0,0 6.80763,12.50667 9.95238,23.00047 -10.9469,-0.5114 -24.73459,-4.0876 -24.73459,-4.0876 z"
201+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#f7f7f7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.00059342;marker:none;enable-background:accumulate" />
202+ </g>
203+ </g>
204+ </g>
205+ </g>
206+ </g>
207+</svg>
qml/Stages/graphics/sidestage_open.svgnew file+181
@@ -0,0 +1,181 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3+
4+<svg
5+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6+ xmlns:cc="http://creativecommons.org/ns#"
7+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8+ xmlns:svg="http://www.w3.org/2000/svg"
9+ xmlns="http://www.w3.org/2000/svg"
10+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12+ width="162"
13+ height="230"
14+ id="svg4874"
15+ version="1.1"
16+ inkscape:version="0.91+devel r"
17+ viewBox="0 0 162 230"
18+ sodipodi:docname="gesture_3f_tap.svg"
19+ style="shape-rendering:crispEdges">
20+ <defs
21+ id="defs4876" />
22+ <sodipodi:namedview
23+ id="base"
24+ pagecolor="#292929"
25+ bordercolor="#666666"
26+ borderopacity="1.0"
27+ inkscape:pageopacity="1"
28+ inkscape:pageshadow="2"
29+ inkscape:zoom="1.8415614"
30+ inkscape:cx="162.13161"
31+ inkscape:cy="116.01485"
32+ inkscape:document-units="px"
33+ inkscape:current-layer="g4780"
34+ showgrid="false"
35+ showborder="true"
36+ fit-margin-top="0"
37+ fit-margin-left="0"
38+ fit-margin-right="0"
39+ fit-margin-bottom="0"
40+ inkscape:snap-bbox="true"
41+ inkscape:bbox-paths="true"
42+ inkscape:bbox-nodes="true"
43+ inkscape:snap-bbox-edge-midpoints="true"
44+ inkscape:snap-bbox-midpoints="true"
45+ inkscape:object-paths="true"
46+ inkscape:snap-intersection-paths="true"
47+ inkscape:object-nodes="true"
48+ inkscape:snap-smooth-nodes="true"
49+ inkscape:snap-midpoints="true"
50+ inkscape:snap-object-midpoints="true"
51+ inkscape:snap-center="true"
52+ showguides="false"
53+ inkscape:guide-bbox="true"
54+ inkscape:snap-global="false"
55+ inkscape:snap-others="false"
56+ inkscape:snap-page="true">
57+ <inkscape:grid
58+ type="xygrid"
59+ id="grid5451"
60+ empspacing="8"
61+ originx="-2.7715014e-06"
62+ originy="-2.5124622e-06" />
63+ <sodipodi:guide
64+ orientation="1,0"
65+ position="7.9999972,-8.0000026"
66+ id="guide4063"
67+ inkscape:locked="false" />
68+ <sodipodi:guide
69+ orientation="1,0"
70+ position="3.9999972,-8.0000026"
71+ id="guide4065"
72+ inkscape:locked="false" />
73+ <sodipodi:guide
74+ orientation="0,1"
75+ position="-8.0000027,87.999998"
76+ id="guide4067"
77+ inkscape:locked="false" />
78+ <sodipodi:guide
79+ orientation="0,1"
80+ position="-8.0000027,91.999998"
81+ id="guide4069"
82+ inkscape:locked="false" />
83+ <sodipodi:guide
84+ orientation="0,1"
85+ position="104,3.9999975"
86+ id="guide4071"
87+ inkscape:locked="false" />
88+ <sodipodi:guide
89+ orientation="0,1"
90+ position="-5.0000027,7.9999975"
91+ id="guide4073"
92+ inkscape:locked="false" />
93+ <sodipodi:guide
94+ orientation="1,0"
95+ position="91.999997,-8.0000026"
96+ id="guide4075"
97+ inkscape:locked="false" />
98+ <sodipodi:guide
99+ orientation="1,0"
100+ position="87.999997,-8.0000026"
101+ id="guide4077"
102+ inkscape:locked="false" />
103+ <sodipodi:guide
104+ orientation="0,1"
105+ position="-8.0000027,83.999998"
106+ id="guide4074"
107+ inkscape:locked="false" />
108+ <sodipodi:guide
109+ orientation="1,0"
110+ position="11.999997,-8.0000026"
111+ id="guide4076"
112+ inkscape:locked="false" />
113+ <sodipodi:guide
114+ orientation="0,1"
115+ position="-5.0000027,11.999997"
116+ id="guide4078"
117+ inkscape:locked="false" />
118+ <sodipodi:guide
119+ orientation="1,0"
120+ position="83.999997,-9.0000026"
121+ id="guide4080"
122+ inkscape:locked="false" />
123+ <sodipodi:guide
124+ position="47.999997,-8.0000026"
125+ orientation="1,0"
126+ id="guide4170"
127+ inkscape:locked="false" />
128+ <sodipodi:guide
129+ position="-8.0000027,47.999997"
130+ orientation="0,1"
131+ id="guide4172"
132+ inkscape:locked="false" />
133+ </sodipodi:namedview>
134+ <metadata
135+ id="metadata4879">
136+ <rdf:RDF>
137+ <cc:Work
138+ rdf:about="">
139+ <dc:format>image/svg+xml</dc:format>
140+ <dc:type
141+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
142+ <dc:title></dc:title>
143+ </cc:Work>
144+ </rdf:RDF>
145+ </metadata>
146+ <g
147+ inkscape:label="Layer 1"
148+ inkscape:groupmode="layer"
149+ id="layer1"
150+ transform="translate(67.857143,55.494966)">
151+ <g
152+ transform="matrix(0,-1,-1,0,373.50506,516.50504)"
153+ id="g4845"
154+ style="display:inline">
155+ <g
156+ inkscape:export-ydpi="90"
157+ inkscape:export-xdpi="90"
158+ inkscape:export-filename="next01.png"
159+ transform="matrix(-0.9996045,0,0,1,575.94296,-611.00001)"
160+ id="g4778"
161+ inkscape:label="Layer 1">
162+ <g
163+ transform="matrix(-1,0,0,1,575.99999,611)"
164+ id="g4780"
165+ style="display:inline">
166+ <path
167+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.6204567px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;text-align:end;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:end;display:inline;fill:none;fill-opacity:1;stroke:#f7f7f7;stroke-width:4.00079107;stroke-miterlimit:4;stroke-dasharray:none"
168+ d="m 526.90578,343.72628 c 14.3803,3.85163 8.37809,26.10701 -5.96811,22.26448 l -10e-6,10e-6 -50.91437,-13.63709 67.92084,18.21108 c 15.93089,4.26693 9.28148,28.92202 -6.61162,24.66516 l -10e-6,1e-5 -67.93497,-18.15834 58.38757,15.63874 c 15.85637,4.24702 9.23761,28.78845 -6.58115,24.5515 v -2e-5 l 1e-5,-2e-5 -71.03537,-19.00646 -33.09607,-8.85524 -0.18781,-0.0503 v 0 l -6.91408,-1.85189 18.07353,23.47068 c 8.45364,10.48525 11.9521,17.66446 -3.54852,27.89697 l -43.91145,-37.31132 c -28.38683,-22.97811 -35.17793,-41.86133 -27.95127,-70.42985 10.25002,-40.5206 40.5632,-49.89857 76.24862,-40.34047 4.5224,1.21129 36.24839,9.63672 40.29164,10.71968 14.0412,3.76084 12.54552,13.74563 6.76936,26.96549 z"
169+ id="path4845-6"
170+ inkscape:connector-curvature="0"
171+ sodipodi:nodetypes="ccccccccccccccccccccssscc" />
172+ <path
173+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.5;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#f7f7f7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.99999976;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
174+ d="m 571.45563,383.2743 c -0.0175,12.04505 -6.22338,23.19765 -16.35804,29.64062 -3.3052,16.24493 -17.57029,28.04101 -34.23815,28.04493 -18.13447,4.3e-4 -33.08059,-13.83538 -34.83995,-31.50586 l 4.16766,1.11523 c 2.22233,14.95164 15.08799,26.39099 30.67229,26.39063 15.06147,-0.004 27.92054,-10.79228 30.53552,-25.61915 l 0.15631,-0.89648 0.78156,-0.46875 c 9.37156,-5.64255 15.10396,-15.76543 15.12121,-26.70117 v -0.004 c -0.0108,-9.30873 -4.17362,-18.12357 -11.35605,-24.04883 l -0.8265,-0.68359 0.10942,-1.06641 c 0.10013,-0.96319 0.1562,-1.9301 0.16608,-2.89843 -0.004,-17.20453 -13.91519,-31.10752 -31.12755,-31.10743 -10.37812,-5e-5 -19.55027,5.05891 -25.20333,12.84375 l -4.0856,-1.09375 c 6.29481,-9.48451 17.06827,-15.75006 29.28893,-15.75 19.37764,-1e-4 35.12924,15.74527 35.12913,35.11524 v 0.01 0.01 c -0.008,0.77822 -0.0716,1.55426 -0.13091,2.33008 7.57765,6.66645 12.02745,16.21382 12.03797,26.33984 v 0.002 z m -74.3634,2.80273 c -0.004,0.005 -0.008,0.0106 -0.0117,0.0156 l -4.15595,-1.11328 c 0.003,-0.004 0.006,-0.009 0.01,-0.0137 z m -3.51507,-27.4082 -4.14421,-1.10938 c -1.8e-4,-0.002 1.7e-4,-0.004 0,-0.006 l 4.14226,1.10937 c 2.7e-4,0.002 0.002,0.004 0.002,0.006 z"
175+ id="ellipse4488"
176+ inkscape:connector-curvature="0" />
177+ </g>
178+ </g>
179+ </g>
180+ </g>
181+</svg>
qml/Wizard/CheckableSetting.qml+10−2
@@ -31,9 +31,11 @@ ListItem.Empty {
3131 signal linkActivated(string link)
3232
3333 implicitHeight: Math.max(label.height, checkBox.height)
34+ highlightWhenPressed: false
3435
35− Item {
36+ FocusScope {
3637 anchors.fill: parent
38+ focus: true
3739
3840 CheckBox {
3941 id: checkBox
@@ -77,8 +79,14 @@ ListItem.Empty {
7779 rightMargin: listItem.rightMargin
7880 }
7981 wrapMode: Text.Wrap
80− linkColor: theme.palette.normal.foregroundText
82+ linkColor: UbuntuColors.orange
83+ color: textColor
84+ font.weight: Font.Light
85+ fontSize: "small"
86+ lineHeight: 1.2
8187 onLinkActivated: listItem.linkActivated(link)
8288 }
89+
90+ Keys.onSpacePressed: checkBox.trigger()
8391 }
8492}
qml/Wizard/Page.qml+260−44

This diff is too big to show here.

qml/Wizard/Pages.qml+75−31

This diff is too big to show here.

qml/Wizard/Pages/10-welcome.qml+121−48

This diff is too big to show here.

qml/Wizard/Pages/20-sim.qmldeleted−77

This diff is too big to show here.

qml/Wizard/Pages/30-passwd-type.qmldeleted−140

This diff is too big to show here.

qml/Wizard/Pages/30-wifi.qmlnew file+210

This diff is too big to show here.

qml/Wizard/Pages/40-location.qmlnew file+291

This diff is too big to show here.

qml/Wizard/Pages/40-wifi.qmldeleted−219

This diff is too big to show here.

qml/Wizard/Pages/50-location.qmldeleted−150

This diff is too big to show here.

qml/Wizard/Pages/50-timezone.qmlnew file+275

This diff is too big to show here.

qml/Wizard/Pages/60-reporting.qml → qml/Wizard/Pages/60-account.qmlrenamed+30−20

This diff is too big to show here.

qml/Wizard/Pages/70-passwd-type.qmlnew file+166

This diff is too big to show here.

qml/Wizard/Pages/75-report-check.qmlnew file+91

This diff is too big to show here.

qml/Wizard/Pages/80-finished.qml+94−16

This diff is too big to show here.

qml/Wizard/Pages/data/Desktop_header_bkg.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/Desktop_splash_screen_bkg.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/Phone_header_bkg.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/Phone_splash_screen_bkg.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/Tick@30.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/meet_ubuntu_simcard@30.pngdeleted

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/map.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/pin.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-1.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-10.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-11.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-2.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-3.5.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-3.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-4.5.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-4.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-5.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-6.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-7.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-8.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-9.5.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-9.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_0.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_1.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_10.5.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_10.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_11.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_12.75.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_12.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_13.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_2.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_3.5.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_3.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_4.5.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_4.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_5.5.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_5.75.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_5.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_6.5.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_6.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_7.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_8.5.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_8.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_9.5.pngnew file

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_9.pngnew file

Binary file not shown.

qml/Wizard/Pages/here-terms.qml+72−65

This diff is too big to show here.

qml/Wizard/Pages/passwd-confirm.qml → qml/Wizard/Pages/passcode-confirm.qmlrenamed+12−29

This diff is too big to show here.

qml/Wizard/Pages/passcode-desktop.qmlnew file+132

This diff is too big to show here.

qml/Wizard/Pages/passwd-set.qml → qml/Wizard/Pages/passcode-set.qmlrenamed+12−28

This diff is too big to show here.

qml/Wizard/Pages/password-set.qmlnew file+149

This diff is too big to show here.

qml/Wizard/Pages/sim.qmlnew file+108

This diff is too big to show here.

qml/Wizard/PasswordMeter.qmlnew file+106

This diff is too big to show here.

qml/Wizard/StackButton.qml+6−11

This diff is too big to show here.

qml/Wizard/Wizard.qml−9

This diff is too big to show here.

qml/Wizard/WizardTextField.qmlnew file+25

This diff is too big to show here.

src/CMakeLists.txt+1−1

This diff is too big to show here.

src/CachingNetworkManagerFactory.cpp+2−2

This diff is too big to show here.

src/CachingNetworkManagerFactory.h+3−2

This diff is too big to show here.

src/Dash/CMakeLists.txt+1−1

This diff is too big to show here.

src/MouseTouchAdaptor.cpp+53−9

This diff is too big to show here.

src/MouseTouchAdaptor.h+5−3

This diff is too big to show here.

tests/autopilot/unity8/dash.py+1−2

This diff is too big to show here.

tests/autopilot/unity8/shell/tests/test_helpers.py−2

This diff is too big to show here.

tests/libs/UbuntuGestures/tst_TouchRegistry.cpp+59

This diff is too big to show here.

tests/mocks/AccountsService/AccountsService.cpp+23−3

This diff is too big to show here.

tests/mocks/AccountsService/AccountsService.h+12−5

This diff is too big to show here.

tests/mocks/GSettings.1.0/fake_gsettings.cpp+64

This diff is too big to show here.

tests/mocks/GSettings.1.0/fake_gsettings.h+18

This diff is too big to show here.

tests/mocks/IntegratedLightDM/liblightdm/UsersModel.cpp−14

This diff is too big to show here.

tests/mocks/MeeGo/QOfono/MockOfonoSimManager.qml+1

This diff is too big to show here.

tests/mocks/Ubuntu/Connectivity/plugin.cpp+1

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/CMakeLists.txt+2

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/Diagnostics/CMakeLists.txtnew file+1

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/Diagnostics/MockDiagnostics.qmlnew file+24

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/Diagnostics/qmldirnew file+2

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/LanguagePlugin/MockLanguagePlugin.qml+2−2

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/SecurityPrivacy/MockSecurityPrivacy.cpp+1−1

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/TimeDate/CMakeLists.txtnew file+1

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/TimeDate/MockTimeDate.qmlnew file+25

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/TimeDate/qmldirnew file+2

This diff is too big to show here.

tests/mocks/Unity/Application/ApplicationManager.cpp+10−22

This diff is too big to show here.

tests/mocks/Unity/Application/ApplicationManager.h−8

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurface.cpp+6−2

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurface.h+2−1

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurfaceItem.cpp+17

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurfaceItem.h+1

This diff is too big to show here.

tests/mocks/Unity/Application/SurfaceManager.cpp+8−9

This diff is too big to show here.

tests/mocks/Unity/Application/SurfaceManager.h+3−3

This diff is too big to show here.

tests/mocks/Unity/Application/VirtualKeyboard.cpp+3−2

This diff is too big to show here.

tests/mocks/Unity/Application/VirtualKeyboard.h+1−1

This diff is too big to show here.

tests/mocks/Unity/Application/plugin.cpp+2−1

This diff is too big to show here.

tests/mocks/Unity/Application/resources/MirSurfaceItem.qml+59

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Unity/Launcher/MockLauncherModel.cpp+2

This diff is too big to show here.

tests/mocks/Unity/Unity.qmltypes+33−50

This diff is too big to show here.

tests/mocks/Unity/fake_previewstack.cppdeleted−68

This diff is too big to show here.

tests/mocks/Unity/fake_previewstack.hdeleted−52

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Unity/fake_unity_plugin.cpp+1−2

This diff is too big to show here.

tests/mocks/Utils/CMakeLists.txt+3−1

This diff is too big to show here.

tests/mocks/Utils/plugin.cpp+14

This diff is too big to show here.

tests/mocks/Utils/windowstatestorage.cpp+13

This diff is too big to show here.

tests/mocks/Utils/windowstatestorage.h+4

This diff is too big to show here.

tests/mocks/Wizard/CMakeLists.txt+6−1

This diff is too big to show here.

tests/mocks/Wizard/MockSystem.cpp+4−2

This diff is too big to show here.

tests/mocks/Wizard/MockSystem.h+2−2

This diff is too big to show here.

tests/mocks/Wizard/mockplugin.cpp+7−8

This diff is too big to show here.

tests/plugins/AccountsService/CMakeLists.txt+5

This diff is too big to show here.

tests/plugins/AccountsService/PropertiesServer.cpp+16−4

This diff is too big to show here.

tests/plugins/AccountsService/PropertiesServer.h+2−1

This diff is too big to show here.

tests/plugins/AccountsService/UscServer.cppnew file+28

This diff is too big to show here.

tests/plugins/AccountsService/UscServer.hnew file+39

This diff is too big to show here.

tests/plugins/AccountsService/client.cpp+63−9

This diff is too big to show here.

tests/plugins/AccountsService/interfaces.xml+16

This diff is too big to show here.

tests/plugins/AccountsService/server.cpp+12

This diff is too big to show here.

tests/plugins/Dash/cardcreator/1.res+4−6

This diff is too big to show here.

tests/plugins/Dash/cardcreator/1.res.cardcreatornew file+119

This diff is too big to show here.

tests/plugins/Dash/cardcreator/10.res+3−5

This diff is too big to show here.

tests/plugins/Dash/cardcreator/10.res.cardcreatornew file+137

This diff is too big to show here.

tests/plugins/Dash/cardcreator/11.res+5−7

This diff is too big to show here.

tests/plugins/Dash/cardcreator/11.res.cardcreatornew file+210

This diff is too big to show here.

tests/plugins/Dash/cardcreator/2.res+3−5

This diff is too big to show here.

tests/plugins/Dash/cardcreator/2.res.cardcreatornew file+136

This diff is too big to show here.

tests/plugins/Dash/cardcreator/3.res+3−5

This diff is too big to show here.

tests/plugins/Dash/cardcreator/3.res.cardcreatornew file+137

This diff is too big to show here.

tests/plugins/Dash/cardcreator/4.res+3−5

This diff is too big to show here.

tests/plugins/Dash/cardcreator/4.res.cardcreatornew file+109

This diff is too big to show here.

tests/plugins/Dash/cardcreator/5.res+5−7

This diff is too big to show here.

tests/plugins/Dash/cardcreator/5.res.cardcreatornew file+156

This diff is too big to show here.

tests/plugins/Dash/cardcreator/6.res+2−4

This diff is too big to show here.

tests/plugins/Dash/cardcreator/6.res.cardcreatornew file+126

This diff is too big to show here.

tests/plugins/Dash/cardcreator/7.res+3−5

This diff is too big to show here.

tests/plugins/Dash/cardcreator/7.res.cardcreatornew file+149

This diff is too big to show here.

tests/plugins/Dash/cardcreator/8.res+3−5

This diff is too big to show here.

tests/plugins/Dash/cardcreator/8.res.cardcreatornew file+107

This diff is too big to show here.

tests/plugins/Dash/cardcreator/9.res+4−5

This diff is too big to show here.

tests/plugins/Dash/cardcreator/9.res.cardcreatornew file+119

This diff is too big to show here.

tests/plugins/Dash/cardcreatortest.cpp+32−22

This diff is too big to show here.

tests/plugins/Dash/cardcreatortest.qml+4−4

This diff is too big to show here.

tests/plugins/IntegratedLightDM/CMakeLists.txt+25

This diff is too big to show here.

tests/plugins/IntegratedLightDM/integrated.cppnew file+91

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/CMakeLists.txt+7−1

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/GestureTest.cpp+44

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/GestureTest.h+13−1

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_DirectionalDragArea.cpp−56

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_TouchGestureArea.cppnew file+270

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_TouchGestureArea.qmlnew file+90

This diff is too big to show here.

tests/plugins/Unity/Launcher/launchermodeltest.cpp+1

This diff is too big to show here.

tests/plugins/Utils/CMakeLists.txt+7−1

This diff is too big to show here.

tests/plugins/Utils/DeviceConfigParserTest.cppnew file+70

This diff is too big to show here.

tests/qmltests/CMakeLists.txt+2−1

This diff is too big to show here.

tests/qmltests/Components/tst_Lockscreen.qml+14−7

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewAudioPlayback.qml+12−3

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewHeader.qml+18−1

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewSharing.qml+17−3

This diff is too big to show here.

tests/qmltests/Dash/tst_CardTool.qml+4−4

This diff is too big to show here.

tests/qmltests/Dash/tst_Dash.qml+89

This diff is too big to show here.

tests/qmltests/Dash/tst_GenericScopeView.qml−28

This diff is too big to show here.

tests/qmltests/Dash/tst_PreviewListView.qml → tests/qmltests/Dash/tst_PreviewView.qmlrenamed+23−16

This diff is too big to show here.

tests/qmltests/Greeter/tst_NarrowView.qml+9

This diff is too big to show here.

tests/qmltests/Launcher/tst_Launcher.qml+254−18

This diff is too big to show here.

tests/qmltests/Notifications/tst_OptionToggle.qml+1−1

This diff is too big to show here.

tests/qmltests/Notifications/tst_VisualSnapDecisionsQueue.qml+1

This diff is too big to show here.

tests/qmltests/Panel/Indicators/tst_MenuItemFactory.qml+2−4

This diff is too big to show here.

tests/qmltests/Panel/tst_IndicatorItem.qml+16−14

This diff is too big to show here.

tests/qmltests/Panel/tst_Panel.qml+2

This diff is too big to show here.

tests/qmltests/Stages/tst_DesktopStage.qml+2−1

This diff is too big to show here.

tests/qmltests/Stages/tst_PhoneStage.qml+19−6

This diff is too big to show here.

tests/qmltests/Stages/tst_SpreadDelegate.qml+7

This diff is too big to show here.

tests/qmltests/Stages/tst_TabletStage.qml+162−1

This diff is too big to show here.

tests/qmltests/Wizard/tst_Wizard.qml+171−200

This diff is too big to show here.

tests/qmltests/tst_DeviceConfiguration.qmlnew file+49

This diff is too big to show here.

tests/qmltests/tst_DisabledScreenNotice.qml+76−2

This diff is too big to show here.

tests/qmltests/tst_OrientedShell.qml+56−12

This diff is too big to show here.

tests/qmltests/tst_Shell.qml+241−59

This diff is too big to show here.

tests/utils/modules/Unity/Test/UnityTestCase.qml+67−11

This diff is too big to show here.