on xenial help sign in
merged trunk
commit17eafeae6f1a18b9048029183898b69bbc09470a authorAndrea Cimitan <andrea.cimitan@gmail.com> dateTue 3 May 2016, 13:07 (10 years ago) parent9a51eedcce8634
598 files changed+60070−31204
CMakeLists.txt+3−2 CODING+2 cmake/modules/QmlTest.cmake+1−1 data/com.canonical.Unity8.gschema.xml+16 data/devices.conf+30 data/unity8-dash.conf+1 data/unity8-dash.desktop.in−1 data/unity8.conf+6−10 debian/bileto_pre_release_hook+5 debian/changelog+321 debian/control+19−15 debian/rules−8 debian/tests/autopilot.sh+13 debian/tests/control+5 debian/unity8-common.udev+2 debian/unity8-doc.install+1 debian/unity8-private.install+1 debian/unity8.install+1 doc/devices.conf+45 libs/UbuntuGestures/Timer.h+5 libs/UbuntuGestures/TouchRegistry.cpp+15−10 plugins/AccountsService/AccountsService.cpp+246−331 plugins/AccountsService/AccountsService.h+46−23 plugins/AccountsService/AccountsService.qmltypes+5 plugins/AccountsService/AccountsServiceDBusAdaptor.cpp+23−6 plugins/AccountsService/AccountsServiceDBusAdaptor.h+5−6 plugins/AccountsService/CMakeLists.txt+5 plugins/AccountsService/com.canonical.unity.AccountsService.xml+5 plugins/CMakeLists.txt+1 plugins/Cursor/Cursor.qmltypes+78 plugins/Dash/AudioProgressBar.qml+1 plugins/Dash/CardCreator.js+73−45 plugins/Dash/CardCreatorCache.qml+3−3 plugins/Dash/ScopeStyle.qml+1−1 plugins/Dash/listviewwithpageheader.cpp+29−12 plugins/Dash/listviewwithpageheader.h+2−1 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/ScreenGrabber/screengrabber.cpp−2 plugins/SessionBroadcast/CMakeLists.txt+5 plugins/SessionBroadcast/SessionBroadcast.cpp+5−1 plugins/SessionBroadcast/SessionBroadcast.h+3 plugins/Ubuntu/Gestures/CMakeLists.txt+1 plugins/Ubuntu/Gestures/DirectionalDragArea.cpp+43−5 plugins/Ubuntu/Gestures/DirectionalDragArea.h+8 plugins/Ubuntu/Gestures/DirectionalDragArea_p.h+2 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+5−7 plugins/Unity/Indicators/rootstateparser.h+1 plugins/Unity/InputInfo/InputInfo.qmltypes+71 plugins/Unity/Launcher/CMakeLists.txt+2 plugins/Unity/Launcher/asadapter.cpp+6−2 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/Unity/Session/CMakeLists.txt+2 plugins/Unity/Session/dbusunitysessionservice.cpp+8−7 plugins/Utils/CMakeLists.txt+3−1 plugins/Utils/Utils.qmltypes+2−2 plugins/Utils/deviceconfigparser.cpp+158 plugins/Utils/deviceconfigparser.h+63 plugins/Utils/globalfunctions.cpp+56 plugins/Utils/globalfunctions.h+42 plugins/Utils/plugin.cpp+13−2 plugins/Utils/timezoneFormatter.cpp+10 plugins/Utils/timezoneFormatter.h+1 plugins/Utils/windowkeysfilter.cpp → plugins/Utils/windowinputfilter.cpp+14−16 plugins/Utils/windowkeysfilter.h → plugins/Utils/windowinputfilter.h+11−11 plugins/Utils/windowstatestorage.cpp+36−4 plugins/Utils/windowstatestorage.h+3 plugins/WindowManager/CMakeLists.txt+13 plugins/WindowManager/TopLevelSurfaceList.cpp+486 plugins/WindowManager/TopLevelSurfaceList.h+223 plugins/WindowManager/WindowManagerPlugin.cpp+28 plugins/WindowManager/WindowManagerPlugin.h+32 plugins/WindowManager/qmldir+2 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+244 plugins/Wizard/timezonemodel.h+80 po/aa.po+306−206 po/am.po+517−265 po/ar.po+485−251 po/ast.po+509−263 po/az.po+291−204 po/be.po+506−258 po/bg.po+272−200 po/bn.po+369−222 po/br.po+515−268 po/bs.po+508−257 po/ca.po+507−261 po/ca@valencia.po+414−241 po/ce.po+272−200 po/ckb.po+272−200 po/cs.po+531−255 po/cy.po+506−255 po/da.po+507−256 po/de.po+538−269 po/el.po+536−275 po/en_AU.po+524−266 po/en_GB.po+525−267 po/eo.po+355−216 po/es.po+535−271 po/eu.po+506−258 po/fa.po+530−267 po/fi.po+533−270 po/fo.po+272−200 po/fr.po+549−271 po/ga.po+492−254 po/gd.po+550−271 po/gl.po+532−270 po/gv.po+283−205 po/he.po+431−236 po/hi.po+272−200 po/hr.po+536−266 po/hu.po+538−272 po/hy.po+287−206 po/ia.po+535−269 po/id.po+291−207 po/is.po+291−207 po/it.po+538−271 po/ja.po+303−207 po/km.po+375−236 po/kn.po+272−200 po/ko.po+505−257 po/ku.po+291−204 po/ky.po+272−200 po/lo.po+272−200 po/lt.po+272−200 po/lv.po+504−256 po/ml.po+272−200 po/mr.po+272−200 po/ms.po+507−259 po/my.po+285−203 po/nb.po+528−267 po/ne.po+272−200 po/nl.po+523−266 po/nn.po+272−200 po/oc.po+599−278 po/or.po+272−200 po/pa.po+506−258 po/pl.po+540−273 po/pt.po+541−280 po/pt_BR.po+517−269 po/ro.po+508−260 po/ru.po+513−261 po/shn.po+272−200 po/si.po+275−203 po/sk.po+620−331 po/sl.po+529−268 po/sq.po+431−239 po/sr.po+558−299 po/sv.po+529−268 po/sw.po+439−238 po/ta.po+272−200 po/te.po+272−200 po/th.po+272−200 po/tr.po+506−258 po/ug.po+487−253 po/uk.po+538−271 po/unity8.pot+271−199 po/ur.po+272−200 po/uz.po+272−200 po/vi.po+272−200 po/wo.po+506−258 po/xh.po+272−200 po/zh_CN.po+515−261 po/zh_HK.po+280−202 po/zh_TW.po+508−260 qml/Components/Dialogs.qml+8−52 qml/Components/EdgeBarrier.qml+1−1 qml/Components/Header.qml+1 qml/Components/InputMethod.qml+5−10 qml/Components/KeymapSwitcher.qml+65 qml/Components/Lockscreen.qml+82−96 qml/Components/ModeSwitchWarningDialog.qml+1−1 qml/Components/NotificationAudio.qml+4−7 qml/Components/PanelState/PanelState.qml+2−1 qml/Components/PassphraseLockscreen.qml+5−4 qml/Components/PhysicalKeysMapper.qml+24 qml/Components/PinLockscreen.qml+24−2 qml/Components/PinPadButton.qml+17−2 qml/Components/ShellDialog.qml+10 qml/Components/Showable.qml+10 qml/Components/UbuntuShapeForItem.qml+1 qml/Components/Unity8Settings.qml−50 qml/Components/WindowControlButtons.qml+8−6 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+19−19 qml/Dash/DashContent.qml+2−2 qml/Dash/DashNavigation.qml+159−78 qml/Dash/DashNavigationButton.qml−233 qml/Dash/DashNavigationHeader.qml+73 qml/Dash/DashNavigationList.qml+33−85 qml/Dash/DashPageHeader.qml+144−131 qml/Dash/Filters/FilterOptionSelector.qml+91 qml/Dash/Filters/FilterRangeInput.qml+136 qml/Dash/Filters/FilterValueSlider.qml+87 qml/Dash/Filters/FilterWidget.qml+29 qml/Dash/Filters/FilterWidgetFactory.qml+80 qml/Dash/FiltersPopover.qml+105 qml/Dash/GenericScopeView.qml+95−91 qml/Dash/PageHeaderExtraPanel.qml+176 qml/Dash/PreviewListView.qml−140 qml/Dash/PreviewView.qml+76 qml/Dash/Previews/Preview.qml+4−5 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/Greeter.qml+22−11 qml/Greeter/Infographics.qml+2−1 qml/Greeter/NarrowView.qml+14−1 qml/Launcher/Launcher.qml+143−12 qml/Launcher/LauncherDelegate.qml+58−25 qml/Launcher/LauncherPanel.qml+168−80 qml/Launcher/graphics/launcher-app-focus-ring.svg+12 qml/Launcher/graphics/quicklist_tooltip@30.png qml/Notifications/Notification.qml+134−126 qml/Notifications/NotificationButton.qml+72 qml/Notifications/NotificationMenuItemFactory.qml+5−11 qml/Notifications/Notifications.qml+4−3 qml/Notifications/OptionToggle.qml+12−10 qml/Notifications/ShapedIcon.qml+1 qml/Notifications/SwipeToAct.qml+16−20 qml/Notifications/grip-large.svg−150 qml/OrientedShell.qml+71−21 qml/Panel/Handle.qml+2−2 qml/Panel/IndicatorItem.qml+3−10 qml/Panel/IndicatorItemRow.qml+5−2 qml/Panel/Indicators/MenuItemFactory.qml+26−8 qml/Panel/Indicators/ModemInfoItem.qml−111 qml/Panel/Indicators/RoamingIndication.qml−40 qml/Panel/Indicators/client/IndicatorsClient.qml+2−2 qml/Panel/IndicatorsMenu.qml+2−4 qml/Panel/MenuContent.qml+1−1 qml/Panel/Panel.qml+8−3 qml/ScopeTool.qml−8 qml/Shell.qml+162−114 qml/Stages/AbstractStage.qml+15−3 qml/Stages/Animations/BaseSessionAnimation.qml−96 qml/Stages/Animations/SwipeFromBottomAnimation.qml−53 qml/Stages/ApplicationWindow.qml+116−76 qml/Stages/DecoratedWindow.qml+6−6 qml/Stages/DesktopSpread.qml+86−35 qml/Stages/DesktopSpreadDelegate.qml+19−4 qml/Stages/DesktopStage.qml+264−134 qml/Stages/PhoneStage.qml+242−98 qml/Stages/PromptSurfaceAnimations.qml+81 qml/Stages/SessionContainer.qml−180 qml/Stages/SideStage.qml+118 qml/Stages/Splash.qml+4−2 qml/Stages/SpreadDelegate.qml+34−4 qml/Stages/StagedFullscreenPolicy.qml+56 qml/Stages/SurfaceContainer.qml+97−39 qml/Stages/TabletSideStageTouchGesture.qml+154 qml/Stages/TabletStage.qml+663−289 qml/Stages/TopLevelSurfaceRepeater.qml+52 qml/Stages/TransformedSpreadDelegate.qml+4−4 qml/Stages/TransformedTabletSpreadDelegate.qml+94−60 qml/Stages/WindowDecoration.qml+4−3 qml/Stages/WindowResizeArea.qml+10−7 qml/Stages/WindowedFullscreenPolicy.qml+39 qml/Stages/graphics/sidestage_drag.svg+207 qml/Stages/graphics/sidestage_open.svg+181 qml/Tutorial/Arrow.qml−56 qml/Tutorial/InactivityTimer.qml+62 qml/Tutorial/Slider.qml−123 qml/Tutorial/Tutorial.qml+39−14 qml/Tutorial/TutorialBottom.qml+86−66 qml/Tutorial/TutorialBottomFinish.qml−41 qml/Tutorial/TutorialContent.qml+227−55 qml/Tutorial/TutorialLeft.qml+21−68 qml/Tutorial/TutorialLeftLong.qml+54 qml/Tutorial/TutorialPage.qml+62−186 qml/Tutorial/TutorialRight.qml+31−192 qml/Tutorial/TutorialTop.qml+61 qml/Tutorial/graphics/arrow.svg+19 qml/Tutorial/graphics/background1.png qml/Tutorial/graphics/background2.png qml/Tutorial/graphics/camera.png qml/Tutorial/graphics/chevron.png qml/Tutorial/graphics/dialer.png qml/Tutorial/graphics/facebook.png qml/Tutorial/graphics/gallery.png qml/Tutorial/graphics/tick.png qml/Wizard/CheckableSetting.qml+11−3 qml/Wizard/Page.qml+261−44 qml/Wizard/Pages.qml+75−31 qml/Wizard/Pages/10-welcome.qml+128−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+290 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+71−66 qml/Wizard/Pages/passwd-confirm.qml → qml/Wizard/Pages/passcode-confirm.qml+13−30 qml/Wizard/Pages/passcode-desktop.qml+132 qml/Wizard/Pages/passwd-set.qml → qml/Wizard/Pages/passcode-set.qml+13−29 qml/Wizard/Pages/password-set.qml+149 qml/Wizard/Pages/sim.qml+108 qml/Wizard/PasswordMeter.qml+106 qml/Wizard/StackButton.qml+7−12 qml/Wizard/Wizard.qml−9 qml/Tutorial/TutorialLeftFinish.qml → qml/Wizard/WizardTextField.qml+5−21 src/CMakeLists.txt+1−1 src/CachingNetworkManagerFactory.cpp+2−2 src/CachingNetworkManagerFactory.h+3−2 src/Dash/CMakeLists.txt+1−1 src/Dash/main.cpp+5 src/MouseTouchAdaptor.cpp+53−9 src/MouseTouchAdaptor.h+5−3 src/ShellView.cpp+6−2 src/main.cpp+5 src/qmldebuggerutils.h+33 tests/autopilot/unity8/dash.py+1−2 tests/autopilot/unity8/settings_wizard/__init__.py−555 tests/autopilot/unity8/settings_wizard/fixture_setup.py−58 tests/autopilot/unity8/settings_wizard/ofono_helper.py−116 tests/autopilot/unity8/settings_wizard/tests/__init__.py tests/autopilot/unity8/settings_wizard/tests/test_settings_wizard.py−99 tests/autopilot/unity8/shell/emulators.py−2 tests/autopilot/unity8/shell/tests/test_helpers.py−2 tests/autopilot/unity8/shell/tests/test_tutorial.py−57 tests/autopilot/unity8/tutorial.py−73 tests/libs/UbuntuGestures/tst_TouchRegistry.cpp+60−1 tests/mocks/AccountsService/AccountsService.cpp+60−3 tests/mocks/AccountsService/AccountsService.h+30−5 tests/mocks/AccountsService/AccountsService.qmltypes+5 tests/mocks/GSettings.1.0/fake_gsettings.cpp+178−26 tests/mocks/GSettings.1.0/fake_gsettings.h+61−18 tests/mocks/IntegratedLightDM/liblightdm/UsersModel.cpp−14 tests/mocks/MeeGo/QOfono/MockOfonoSimManager.qml+1 tests/mocks/QMenuModel/QDBusActionGroup.qml+5−5 tests/mocks/QtMultimedia/audio.cpp+13 tests/mocks/QtMultimedia/audio.h+5 tests/mocks/Ubuntu/Connectivity/plugin.cpp+1 tests/mocks/Ubuntu/SystemSettings/CMakeLists.txt+2 tests/mocks/Ubuntu/SystemSettings/Diagnostics/CMakeLists.txt+1 qml/Tutorial/Tick.qml → tests/mocks/Ubuntu/SystemSettings/Diagnostics/MockDiagnostics.qml+4−9 tests/mocks/Ubuntu/SystemSettings/Diagnostics/qmldir+2 tests/mocks/Ubuntu/SystemSettings/LanguagePlugin/MockKeyboardPlugin.qml+21 tests/mocks/Ubuntu/SystemSettings/LanguagePlugin/MockLanguagePlugin.qml+2−2 tests/mocks/Ubuntu/SystemSettings/LanguagePlugin/qmldir+1 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/ApplicationInfo.cpp+191−100 tests/mocks/Unity/Application/ApplicationInfo.h+44−25 tests/mocks/Unity/Application/ApplicationManager.cpp+119−97 tests/mocks/Unity/Application/ApplicationManager.h+12−22 tests/mocks/Unity/Application/ApplicationScreenshotProvider.cpp−79 tests/mocks/Unity/Application/ApplicationScreenshotProvider.h−34 tests/mocks/Unity/Application/ApplicationTestInterface.cpp−117 tests/mocks/Unity/Application/ApplicationTestInterface.h−45 tests/mocks/Unity/Application/CMakeLists.txt+3−5 tests/mocks/Unity/Application/MirSurface.cpp+205−8 tests/mocks/Unity/Application/MirSurface.h+61−9 tests/mocks/Unity/Application/MirSurfaceItem.cpp+41−12 tests/mocks/Unity/Application/MirSurfaceItem.h+2 tests/mocks/Unity/Application/MirSurfaceListModel.cpp+121 tests/mocks/Unity/Application/MirSurfaceListModel.h+56 tests/mocks/Unity/Application/ObjectListModel.h+2 tests/mocks/Unity/Application/Session.cpp−184 tests/mocks/Unity/Application/Session.h−97 tests/mocks/Unity/Application/SessionManager.cpp−55 tests/mocks/Unity/Application/SessionModel.h−35 tests/mocks/Unity/Application/SurfaceManager.cpp+23−17 tests/mocks/Unity/Application/SurfaceManager.h+8−5 tests/mocks/Unity/Application/UbuntuKeyboardInfo.cpp−2 tests/mocks/Unity/Application/UbuntuKeyboardInfo.h−9 tests/mocks/Unity/Application/plugin.cpp+35−39 tests/mocks/Unity/Application/resources/MirSurfaceItem.qml+59 tests/mocks/Unity/CMakeLists.txt+14−3 tests/mocks/Unity/Indicators/ModelActionRootState.qml+26−4 tests/mocks/Unity/InputInfo/qinputdeviceinfo_mock.cpp+1−1 tests/mocks/Unity/Launcher/MockLauncherModel.cpp+2 tests/mocks/Unity/Notifications/MockNotificationModel.cpp+6−11 tests/mocks/Unity/Unity.qmltypes+33−50 tests/mocks/Unity/fake_filters.cpp+125 tests/mocks/Unity/fake_filters.h+46 tests/mocks/Unity/fake_navigation.cpp+9−10 tests/mocks/Unity/fake_optionselectorfilter.cpp+65 tests/mocks/Unity/fake_optionselectorfilter.h+52 tests/mocks/Unity/fake_optionselectoroptions.cpp+77 tests/mocks/Unity/fake_optionselectoroptions.h+47 tests/mocks/Unity/fake_previewstack.cpp−68 tests/mocks/Unity/fake_previewstack.h−52 tests/mocks/Unity/fake_rangeinputfilter.cpp+167 tests/mocks/Unity/fake_rangeinputfilter.h+79 tests/mocks/Unity/fake_scope.cpp+59−29 tests/mocks/Unity/fake_scope.h+23−9 tests/mocks/Unity/fake_unity_plugin.cpp+8−2 tests/mocks/Unity/fake_valuesliderfilter.cpp+84 tests/mocks/Unity/fake_valuesliderfilter.h+55 tests/mocks/Unity/fake_valueslidervalues.cpp+51 tests/mocks/Unity/Application/SessionManager.h → tests/mocks/Unity/fake_valueslidervalues.h+11−19 tests/mocks/Utils/CMakeLists.txt+8−2 tests/mocks/Utils/Utils.qmltypes+2−2 tests/mocks/Utils/plugin.cpp+17−3 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+12−1 tests/plugins/AccountsService/PropertiesServer.cpp+55−4 tests/plugins/AccountsService/PropertiesServer.h+9−2 tests/plugins/AccountsService/UscServer.cpp+28 tests/plugins/AccountsService/UscServer.h+39 tests/plugins/AccountsService/client.cpp+168−13 tests/plugins/AccountsService/interfaces.xml+29 tests/plugins/AccountsService/server.cpp+12 tests/plugins/AccountsService/types.h+25 tests/plugins/Dash/cardcreator/1.res+8−17 tests/plugins/Dash/cardcreator/1.res.cardcreator+112 tests/plugins/Dash/cardcreator/10.res+3−5 tests/plugins/Dash/cardcreator/10.res.cardcreator+137 tests/plugins/Dash/cardcreator/11.res+8−17 tests/plugins/Dash/cardcreator/11.res.cardcreator+203 tests/plugins/Dash/cardcreator/2.res+3−5 tests/plugins/Dash/cardcreator/2.res.cardcreator+136 tests/plugins/Dash/cardcreator/3.res+6−15 tests/plugins/Dash/cardcreator/3.res.cardcreator+130 tests/plugins/Dash/cardcreator/4.res+3−5 tests/plugins/Dash/cardcreator/4.res.cardcreator+109 tests/plugins/Dash/cardcreator/5.res+8−17 tests/plugins/Dash/cardcreator/5.res.cardcreator+149 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/Dash/listviewwithpageheadersectiontest.cpp+15 tests/plugins/Dash/listviewwithpageheadertest.cpp+15 tests/plugins/Dash/listviewwithpageheadertestsection.qml+1−1 tests/plugins/Dash/tst_ScopeStyle.qml+1−1 tests/plugins/IntegratedLightDM/CMakeLists.txt+26 tests/plugins/IntegratedLightDM/dbus.cpp+3−5 tests/plugins/IntegratedLightDM/integrated.cpp+88 tests/plugins/IntegratedLightDM/pam.cpp+3−1 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_FloatingFlickable.cpp+2 tests/plugins/Ubuntu/Gestures/tst_TouchGestureArea.cpp+270 tests/plugins/Ubuntu/Gestures/tst_TouchGestureArea.qml+90 tests/plugins/Unity/Launcher/CMakeLists.txt+2 tests/plugins/Unity/Launcher/launchermodeltest.cpp+8−6 tests/plugins/Unity/Session/CMakeLists.txt+2 tests/plugins/Utils/CMakeLists.txt+7−1 tests/plugins/Utils/DeviceConfigParserTest.cpp+70 tests/qmltests/CMakeLists.txt+6−2 tests/qmltests/Components/tst_Dialogs.qml+4−2 tests/qmltests/Components/tst_Lockscreen.qml+14−7 tests/qmltests/Components/tst_PhysicalKeysMapper.qml+3−3 tests/qmltests/Dash/Filters/tst_FilterOptionSelector.qml+96 tests/qmltests/Dash/Filters/tst_FilterRangeInput.qml+247 tests/qmltests/Dash/Filters/tst_FilterValueSlider.qml+101 tests/qmltests/Dash/Filters/tst_FilterWidgetFactory.qml+58 tests/qmltests/Dash/Previews/tst_Preview.qml+1 tests/qmltests/Dash/Previews/tst_PreviewHeader.qml+18−1 tests/qmltests/Dash/Previews/tst_PreviewImageGallery.qml+3−2 tests/qmltests/Dash/Previews/tst_PreviewSharing.qml+17−3 tests/qmltests/Dash/tst_Card.qml+10−10 tests/qmltests/Dash/tst_CardTool.qml+4−4 tests/qmltests/Dash/tst_Dash.qml+89 tests/qmltests/Dash/tst_DashContent.qml+165−152 tests/qmltests/Dash/tst_DashPageHeader.qml+24−15 tests/qmltests/Dash/tst_DashShell.qml+6−2 tests/qmltests/Dash/tst_GenericScopeView.qml+3−31 tests/qmltests/Dash/tst_PreviewListView.qml → tests/qmltests/Dash/tst_PreviewView.qml+23−16 tests/qmltests/Greeter/tst_Greeter.qml+10−3 tests/qmltests/Greeter/tst_NarrowView.qml+12−1 tests/qmltests/Launcher/tst_Launcher.qml+259−20 tests/qmltests/Notifications/tst_Notifications.qml+53−52 tests/qmltests/Notifications/tst_OptionToggle.qml+11−2 tests/qmltests/Notifications/tst_SwipeToAct.qml+11−1 tests/qmltests/Notifications/tst_VisualSnapDecisionsQueue.qml+16−6 tests/qmltests/Panel/IndicatorTest.qml+2−1 tests/qmltests/Panel/Indicators/tst_MenuItemFactory.qml+2−4 tests/qmltests/Panel/tst_ActiveCallHint.qml+3−2 tests/qmltests/Panel/tst_IndicatorItem.qml+16−17 tests/qmltests/Panel/tst_IndicatorItemRow.qml+1−2 tests/qmltests/Panel/tst_IndicatorsMenu.qml−1 tests/qmltests/Panel/tst_Panel.qml+4−2 tests/qmltests/Stages/ApplicationCheckBox.qml+103−58 tests/qmltests/Stages/RecursingChildSessionControl.qml+10−61 tests/qmltests/Stages/SurfaceManagerControls.qml+6−7 tests/qmltests/Stages/tst_ApplicationWindow.qml+73−59 tests/qmltests/Stages/tst_DesktopStage.qml+257−168 tests/qmltests/Stages/tst_PhoneStage.qml+282−79 tests/qmltests/Stages/tst_SessionContainer.qml−331 tests/qmltests/Stages/tst_SpreadDelegate.qml+10−2 tests/qmltests/Stages/tst_SurfaceContainer.qml+242−46 tests/qmltests/Stages/tst_TabletStage.qml+409−85 tests/qmltests/Stages/tst_WindowResizeArea.qml+7 tests/qmltests/Tutorial/tst_Tutorial.qml+628−198 tests/qmltests/Wizard/tst_Wizard.qml+127−214 tests/qmltests/tst_DeviceConfiguration.qml+49 tests/qmltests/tst_DisabledScreenNotice.qml+76−2 tests/qmltests/tst_OrientedShell.qml+242−96 tests/qmltests/tst_Shell.qml+595−198 tests/qmltests/tst_ShellWithPin.qml+9−35 tests/utils/modules/Unity/Test/UnityTestCase.qml+165−14
CMakeLists.txt+3−2
@@ -57,7 +57,8 @@ find_package(Qt5DBus 5.4 REQUIRED)
5757find_package(Qt5Concurrent 5.4 REQUIRED)
5858find_package(Qt5Sql 5.4 REQUIRED)
5959
60−pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=13)
60+pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=15)
61+pkg_check_modules(GEONAMES REQUIRED geonames>=0.2)
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+16
@@ -27,6 +27,22 @@
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="u" name="edge-drag-width">
31+ <default>2</default>
32+ <summary>The width of the edge drag areas</summary>
33+ <description>How big (in grid units) the edge-drag sensitive area should be.</description>
34+ </key>
35+ <key type="b" name="autohide-launcher">
36+ <default>true</default>
37+ <summary>Autohide the launcher</summary>
38+ <description>This will only be applied in windowed mode. In staged mode, the launcher will always hide.</description>
39+ </key>
40+ <key type="u" name="launcher-width">
41+ <default>8</default>
42+ <range min="6" max="12"/>
43+ <summary>Width of the launcher in grid units.</summary>
44+ <description>Changes the width of the launcher in all usage modes.</description>
45+ </key>
3046 </schema>
3147
3248 <schema path="/com/canonical/unity8/greeter/" id="com.canonical.Unity8.Greeter" gettext-domain="unity8">
data/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
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
data/unity8-dash.desktop.in−1
@@ -7,4 +7,3 @@ Terminal=false
77Icon=@CMAKE_INSTALL_PREFIX@/@SHELL_APP_DIR@/Dash/unity8-dash.png
88NoDisplay=true
99X-Ubuntu-Touch=true
10−X-Ubuntu-Supported-Orientations=primary
data/unity8.conf+6−10
@@ -44,22 +44,18 @@ pre-start script
4444 fi
4545
4646 initctl set-env --global MIR_SERVER_PROMPT_FILE=1
47+
48+ # Disable Qt's stuttering 'touch compression' to fix scrolling smoothness
49+ # issues (LP: #1486341, LP: #1556763). As a bonus, this eliminates most of
50+ # the lag seen in the indicator panel pull-down (LP: #1488327) and also
51+ # reduces lag seen in apps:
52+ initctl set-env --global QML_NO_TOUCH_COMPRESSION=1
4753end script
4854
4955exec ${BINARY:-unity8} $ARGS
5056
5157post-start script
5258 initctl emit --no-wait indicator-services-start
53−
54− # Disable Qt's stuttering 'touch compression' to fix scrolling smoothness
55− # issues (LP: #1486341). As a bonus, this eliminates most of the
56− # lag seen in the indicator panel pull-down (LP: #1488327) and also
57− # reduces lag seen in apps:
58− initctl set-env --global QML_NO_TOUCH_COMPRESSION=1
59−
60− # For twice the fun and half the latency, try this (Warning: not all
61− # devices are fast enough to keep up smoothly yet)...
62− # initctl set-env MIR_SERVER_NBUFFERS=2
6359end script
6460
6561post-stop script
debian/bileto_pre_release_hooknew file+5
@@ -0,0 +1,5 @@
1+#!/bin/sh
2+
3+set -eux
4+
5+sh ./po/update-unity-pot
debian/changelog+321
@@ -1,3 +1,324 @@
1+unity8 (8.12+16.04.20160427.3-0ubuntu1) xenial; urgency=medium
2+
3+ [ Albert Astals Cid ]
4+ * Add env var to enable js debugging/profiling even if not built on
5+ debug mode
6+ * Better error message if the item does not exist
7+ * CardCreator: Remove ShaderEffectSource (LP: #1544875)
8+ * Compile with Qt 5.6 (LP: #1565632)
9+ * LVWPH: Account for contentHeight not really being "all" of the
10+ content height (LP: #1569976)
11+ * NotificationAudio: We don't need weird "ifdef" for multimedia 5.6 vs
12+ 5.0 roles anymore
13+ * See all/less -> Show all/less (LP: #1349471)
14+ * Stabilize test_superTabToCycleLauncher
15+ * Take into account that sectionItem height can change
16+ * Turn verify intro tryCompareFunction
17+ * forceLayout before calling positionViewAtIndex (LP: #1553475)
18+ * rootObject can be null for a small moment after setSource is called
19+ (LP: #1560501)
20+
21+ [ CI Train Bot ]
22+ * Resync trunk.
23+
24+ [ Daniel van Vugt ]
25+ * Reinstate the touch performance/smoothness fix (LP: #1486341, LP:
26+ #1556763). (LP: #1556763, #1486341)
27+
28+ [ Josh Arenson ]
29+ * Change the color of the activity pulse to blue (LP: #1568082)
30+ * Make scope filter settings button the same color as other foreground
31+ elements (LP: #1563357)
32+
33+ [ Lukáš Tinkl ]
34+ * Drop OOBE wizard autopilot tests
35+ * Fix labels in desktop spread
36+ * Fix upcoming event ETAs falling out of sync (LP: #1557571)
37+ * Hide the close button for dash (LP: #1550056, #1564347)
38+ * Notifications visual update, close button on mouse hover (LP:
39+ #1564343)
40+ * Shell visual update
41+ * Stabilize wizard tests
42+ * Unity8 windows now cascade instead of opening all in the top left
43+ corner (LP: #1513813)
44+
45+ [ Michael Terry ]
46+ * Fix some unreliable test code.
47+ * Ignore Home Key presses when the greeter is up. (LP: #1565818)
48+
49+ [ Michael Zanetti ]
50+ * Drop the rotation lock for the dash (LP: #1465331, #1574165)
51+ * improve the pin lockscreen
52+ * install devices.conf by default
53+
54+ [ Ted Gould ]
55+ * Switch to using uid/pwdent for getting username
56+
57+ -- Michael Terry <michael.terry@canonical.com> Wed, 27 Apr 2016 15:01:28 +0000
58+
59+unity8 (8.12+16.04.20160421.1-0ubuntu1) xenial; urgency=medium
60+
61+ [ Daniel d'Andrada ]
62+ * Refactor keymap switching code
63+ * Surface-based window management
64+ * Use Item.grabToImage() instead of qtmir's ApplicationScreenshot
65+ provider
66+
67+ [ Michael Zanetti ]
68+ * Fixes for programmatically closing Applications
69+
70+ [ Robert Bruce Park ]
71+ * Use new bileto_pre_release_hook
72+
73+ -- Gerry Boland <ci-train-bot@canonical.com> Thu, 21 Apr 2016 13:48:02 +0000
74+
75+unity8 (8.12+16.04.20160414.1-0ubuntu1) xenial; urgency=medium
76+
77+ [ Michael Terry ]
78+ * Make sure that usageMode is set on startup, fixing a problem with
79+ the tutorial not noticing that it is running on a desktop. (LP:
80+ #1564351)
81+
82+ [ Michael Zanetti ]
83+ * make the edge drag area width configurable (LP: #1559512)
84+
85+ -- Michael Zanetti <michael.zanetti@canonical.com> Thu, 14 Apr 2016 21:20:28 +0000
86+
87+unity8 (8.12+16.04.20160401-0ubuntu1) xenial; urgency=medium
88+
89+ * Add missing Testsuite header
90+ * Skip the failing test until we have a working solution for bug
91+ #1564571 (LP: #1564571)
92+
93+ -- Michał Sawicz <michal.sawicz@canonical.com> Fri, 01 Apr 2016 08:32:16 +0000
94+
95+unity8 (8.12+16.04.20160330-0ubuntu1) xenial; urgency=medium
96+
97+ [ Albert Astals Cid ]
98+ * Use tutorialLeftLoader instead of tutorialLeft
99+
100+ [ CI Train Bot ]
101+ * Update translation template
102+
103+ [ Lukáš Tinkl ]
104+ * Fix the last chance popup colors/theme
105+
106+ [ Michael Terry ]
107+ * Adjust text for desktop right edge tutorial to be accurate. (LP:
108+ #1563103)
109+ * Fix OOBE wizard not setting your name. (LP: #1562872)
110+ * Fix showing "Retry" in password prompt when turning on screen in
111+ tablet mode.
112+
113+ -- Michał Sawicz <michal.sawicz@canonical.com> Wed, 30 Mar 2016 07:46:51 +0000
114+
115+unity8 (8.12+16.04.20160323.2-0ubuntu1) xenial; urgency=medium
116+
117+ [ Michael Terry ]
118+ *
119+ * Fix setting OSK layout in OOBE wizard
120+ * Stop the left edge tutorial from being shown when the bottom edge
121+ tutorial wants to be shown after receiving a call.
122+
123+ [ Albert Astals Cid ]
124+ * Filter implementation with Option Selector filter as the only filter
125+ * Get the engine from the parent context
126+ * Implement the API changes due to filters
127+ * Match design visuals for the new dash navigation/page header popup
128+ * New Dash Navigation UX
129+ * Range Input filter
130+ * Value slider filter
131+ * Workaround SDK ListItem bug
132+
133+ [ Albert Astals Cid, Lukáš Tinkl ]
134+ * Fix various tests
135+
136+ [ CI Train Bot ]
137+ * Resync trunk.
138+ * Update translation template
139+
140+ [ Lukáš Tinkl, Michael Terry ]
141+ * New first-run wizard for the phone (part of the OOBE effort) (LP:
142+ #1536688, #1536617, #1543790, #1555222)
143+
144+ [ Lukáš Tinkl, Michał Sawicz ]
145+ * Keymap switching support (LP: #1524400, #1412492, #1491340)
146+
147+ [ Michael Terry, Michael Zanetti ]
148+ * Redesign the first-boot edge tutorial
149+
150+ [ Michael Zanetti ]
151+ * disabling some tests that are flaky in adt but can't be made fail on
152+ our machines
153+
154+ [ Michael Zanetti, Michał Sawicz ]
155+ * Change the behavior alond with the switch in indicator-display (LP:
156+ #1538591)
157+
158+ [ Michael Zanetti, Michał Sawicz, Nick Dedekind ]
159+ * Add support for low shell chrome. (LP: #1535397)
160+ * Sidestage load/unload redesign (LP: #1544479)
161+
162+ -- Michael Zanetti <michael.zanetti@canonical.com> Wed, 23 Mar 2016 09:53:17 +0000
163+
164+unity8 (8.11+16.04.20160318.1-0ubuntu1) xenial; urgency=medium
165+
166+ [ CI Train Bot ]
167+ * Update translation template
168+
169+ [ Lukáš Tinkl ]
170+ * Fix notifications with the new UITK color schemes (LP: #1554616,
171+ #1556523)
172+
173+ [ Lukáš Tinkl, Michael Zanetti, Nick Dedekind ]
174+ * more fixes for the new theme palette (LP: #1554616, #1557534)
175+
176+ -- Michael Zanetti <michael.zanetti@canonical.com> Fri, 18 Mar 2016 17:12:53 +0000
177+
178+unity8 (8.11+16.04.20160310.4-0ubuntu1) xenial; urgency=medium
179+
180+ [ Albert Astals Cid ]
181+ * Add context for Re-dock as asked by translators (LP: #1534608)
182+ * Add emblem to the preview header widget (LP: #1424720)
183+ * Add haptics to ScopesListCategoryItem buttons
184+ * Audio Cards: Make some of the image loading async (LP: #1533432)
185+ * Do not create fallback code for the card tool fake card (LP:
186+ #1545865)
187+ * Fix resizing the dash bringing temp scopes size out of sync (LP:
188+ #1543130)
189+ * Minor fixes for unity-scope-tool
190+ * Resolve title alignment on card creator time instead of on runtime
191+ * Use fixedHeaderHeight only in the non cardtool cards
192+ * Use the new undeprecated connectivityqt::Connectivity
193+ * asynchronous is only false on the fake card in cardtool
194+ * clazy fixes
195+
196+ [ Albert Astals Cid, CI Train Bot ]
197+ * click scope: Add the else branch so we reset the card size in all
198+ situations
199+
200+ [ Andrea Cimitan ]
201+ * PreviewSharing widget now accepts both string and array of
202+ widgetData["share-data"]["uri"] (LP: #1549056)
203+ * Update AP tests for new single preview
204+ * Use Text.Wrap for body notification text (LP: #1544909)
205+
206+ [ Andrea Cimitan, Lukáš Tinkl, Michael Zanetti, Nick Dedekind ]
207+ * some fixes for the new palette (LP: #1554616)
208+
209+ [ CI Train Bot ]
210+ * Resync trunk.
211+ * Update translation template
212+
213+ [ CI Train Bot, Daniel d'Andrada ]
214+ * Ensure the QML engine doesn't delete our mock MirSurfaces on its
215+ own.
216+
217+ [ Daniel d'Andrada ]
218+ * tst_Shell: Remove unused qml items
219+
220+ [ Josh Arenson ]
221+ * Allow the shell to blacklist input devices and force the OSK shown.
222+ (LP: #1542224)
223+
224+ [ Lukáš Tinkl ]
225+ * Disallow resizing windows up, past the Panel (LP: #1544766)
226+ * Elide the window title not to let it overflow into the indicators
227+ area (LP: #1535767)
228+ * Enable the PIN lockscreen to be used with a HW keyboard (LP:
229+ #1550359)
230+ * Fix tiny windows when switching stages
231+ * Provide a range of ports to QML JS Debugger
232+ * Watch for launcher item icon changes (LP: #1543290)
233+
234+ [ Michael Terry ]
235+ * Proxy more mouse and touchpad properties to USC (LP: #1540398) (LP:
236+ #1543344, #1540398)
237+ * Refactor the AccountsService plugin and make it slightly faster.
238+ * To let the user log in if a mouse is connected, hide the greeter
239+ cover page on a mouse click (but NOT a touch click). (LP: #1540497)
240+ * Watch AccountsService for changes to the user's real name. This was
241+ preventing us from noticing when the user set their name in the
242+ welcome wizard.
243+
244+ [ Michael Zanetti ]
245+ * Allow alt+tabbing in staged mode too (LP: #1540502)
246+ * Allow invoking the staged mode spreads by mouse right edge pushes
247+ too (LP: #1540392)
248+ * Allow loading the device configuration from an external file
249+ * Implement Launcher's keyboard navigation and updated pip design
250+ * Make launcher scalable, allow it locking (LP: #1511015)
251+ * Properly parent launcher items in all cases (LP: #1495732)
252+ * Read inputMethod surface from the new property int QtMir (LP:
253+ #1545286)
254+ * Some visual updates and rotation lock for the virtual touchpad (LP:
255+ #1549087)
256+ * Visual updates for the windowed spread (LP: #1488148)
257+ * stabilize swipeAwayGreeter()
258+
259+ [ Michał Sawicz ]
260+ * Add udev rules to make sure we have access to uinput
261+ * Make dash respawn indefinitely (LP: #1550056)
262+ * Use dpkg-architecture, not arch, to disable touch emulation
263+
264+ [ Vesa Rautiainen ]
265+ * Fixing the vertical position of desktop spread item icon.
266+
267+ -- Michał Sawicz <michal.sawicz@canonical.com> Thu, 10 Mar 2016 22:44:16 +0000
268+
269+unity8 (8.11+16.04.20160308-0ubuntu1) xenial; urgency=medium
270+
271+ [ Albert Astals Cid ]
272+ * Make these tests pass with the new SDK
273+
274+ [ Andrea Cimitan, Nick Dedekind ]
275+ * replace selected.backgroundText with normal.backgroundText in
276+ Splash, Notifications, Wizard
277+
278+ [ CI Train Bot ]
279+ * Update translation template
280+
281+ [ Michał Sawicz, Nick Dedekind ]
282+ * Fixed colours palette value set. Moved ModemItem to USC.
283+
284+ [ Michał Sawicz, Tim Peeters ]
285+ * Update headers for Dash and Splash to work properly with the new UI
286+ toolkit release.
287+
288+ [ Zoltán Balogh, Zsombor Egri ]
289+ * Use SuruDark theme instead of the deprecated SuruGradient.
290+
291+ -- Zoltan Balogh <zoltan.balogh@canonical.com> Tue, 08 Mar 2016 20:59:34 +0000
292+
293+unity8 (8.11+16.04.20160307-0ubuntu1) xenial; urgency=medium
294+
295+ [ CI Train Bot ]
296+ * Resync trunk.
297+ * Update translation template
298+
299+ [ Rodney Dawes ]
300+ * Re-enable the purchaseCancelled signal.
301+
302+ -- Rodney Dawes <ci-train-bot@canonical.com> Mon, 07 Mar 2016 14:12:08 +0000
303+
304+unity8 (8.11+16.04.20160301-0ubuntu1) xenial; urgency=medium
305+
306+ [ Albert Astals Cid ]
307+ * Hook the new scope.activationInProgress property (LP: #1537132)
308+
309+ [ Andrea Cimitan ]
310+ * Updated the Preview view to use a single PreviewModel instead old
311+ PreviewStack, using a Loader instead ListView (LP: #1541967)
312+
313+ [ CI Train Bot ]
314+ * Resync trunk.
315+ * Update translation template
316+
317+ [ Michał Sawicz ]
318+ * Add autopilot as DEP-8 tests added: debian/tests/autopilot.sh
319+
320+ -- Pawel Stolowski <ci-train-bot@canonical.com> Tue, 01 Mar 2016 10:28:52 +0000
321+
1322unity8 (8.11+16.04.20160216.1-0ubuntu1) xenial; urgency=medium
2323
3324 [ Albert Astals Cid ]
debian/control+19−15
@@ -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.106),
33+ libunity-api-dev (>= 7.110),
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
@@ -65,12 +66,13 @@ Homepage: http://launchpad.net/unity
6566# and sync up the code again.
6667Vcs-Bzr: https://code.launchpad.net/unity8
6768Vcs-Browser: https://bazaar.launchpad.net/~unity-team/unity8/trunk
69+XS-Testsuite: autopkgtest
6870X-Ubuntu-Use-Langpack: yes
6971
7072Package: indicators-client
7173Architecture: amd64 armhf i386
7274Depends: qmenumodel-qml (>= 0.2.9),
73− qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 1.3.1627) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 1.3.1627),
75+ qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 1.3.1845) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 1.3.1845),
7476 unity8 (= ${binary:Version}),
7577 ${misc:Depends},
7678 ${shlibs:Depends},
@@ -101,8 +103,7 @@ Depends: dmz-cursor-theme,
101103 qml-module-qt-labs-folderlistmodel,
102104 qml-module-qtquick-xmllistmodel,
103105 qml-module-qtsysteminfo,
104− qtdeclarative5-gsettings1.0,
105− qtdeclarative5-qtmir-plugin (>= 0.4.5),
106+ qtdeclarative5-qtmir-plugin (>= 0.4.8),
106107 qtdeclarative5-ubuntu-telephony0.1,
107108 qtdeclarative5-ubuntu-web-plugin,
108109 ubuntu-system-settings,
@@ -112,7 +113,8 @@ Depends: dmz-cursor-theme,
112113 unity8-private | unity-launcher-impl,
113114 ${misc:Depends},
114115 ${shlibs:Depends},
115−Recommends: unity-scope-click,
116+Recommends: indicator-session,
117+ unity-scope-click,
116118 unity-scope-mediascanner2,
117119Breaks: indicator-network (<< 0.5.1+14.10.20141014),
118120 ubuntu-touch-session (<< 0.107),
@@ -126,15 +128,15 @@ Description: Unity 8 shell
126128Package: unity8-common
127129Architecture: all
128130Depends: qml-module-qtquick-layouts,
129− qtdeclarative5-ubuntu-settings-components (>= 0.6),
131+ qtdeclarative5-ubuntu-settings-components (>= 0.7),
130132 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),
133+ qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 1.3.1845) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 1.3.1845),
132134 qtdeclarative5-unity-notifications-plugin (>= 0.1.2) | unity-notifications-impl,
133135 ubuntu-thumbnailer-impl-0,
134− unity-application-impl-13,
136+ unity-application-impl-15,
135137 unity-notifications-impl-3,
136138 unity-plugin-scopes | unity-scopes-impl,
137− unity-scopes-impl-9,
139+ unity-scopes-impl-11,
138140 unity8-fake-env | unity-application-impl,
139141 ${misc:Depends},
140142Breaks: unity8 (<< 7.86),
@@ -158,7 +160,7 @@ Depends: autopilot-qt5 (>= 1.4),
158160 python3-fixtures,
159161 python3-gi,
160162 qttestability-autopilot (>= 1.4),
161− ubuntu-ui-toolkit-autopilot (>= 1.2.1485+15.04.20150417.1-0ubuntu1),
163+ ubuntu-ui-toolkit-autopilot (>= 1.3.1845),
162164 unity-scope-click,
163165 unity8 (= ${source:Version}),
164166 unity8-fake-env (= ${source:Version}),
@@ -177,7 +179,7 @@ Pre-Depends: ${misc:Pre-Depends},
177179Depends: ${misc:Depends},
178180 ${shlibs:Depends},
179181Provides: unity-application-impl,
180− unity-application-impl-13,
182+ unity-application-impl-15,
181183Replaces: unity8-autopilot (<< 8.02+15.04.20150422-0ubuntu1)
182184Description: Fake environment for running Unity 8 shell
183185 Provides fake implementations of some QML modules used by Unity 8 shell
@@ -192,6 +194,8 @@ Depends: accountsservice-ubuntu-schemas (>= 0.0.5),
192194 libhardware2,
193195 pay-service,
194196 unity-schemas (>= 7.3.1+14.10.20140915),
197+ qtdeclarative5-gsettings1.0,
198+ qml-module-qtmultimedia,
195199 ${misc:Depends},
196200 ${shlibs:Depends},
197201Provides: unity-launcher-impl,
debian/rules−8
@@ -36,11 +36,3 @@ override_dh_makeshlibs:
3636# libMockLightDM-qml.so links against liblightdm-qt5-2.so which doesn't exist
3737override_dh_shlibdeps:
3838 dh_shlibdeps -XlibMockLightDM-qml.so
39−
40−override_dh_auto_clean:
41− dh_auto_clean
42− # only run under "CI Train"
43− if [ -n "$(SILONAME)" -a -x /usr/bin/bzr ]; then \
44− ./po/update-unity-pot; \
45− bzr commit --message "Update translation template" po/unity8.pot; \
46− fi
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/*
debian/unity8-private.install+1
@@ -14,6 +14,7 @@ usr/lib/*/unity8/qml/Ubuntu
1414usr/lib/*/unity8/qml/Unity
1515usr/lib/*/unity8/qml/UInput
1616usr/lib/*/unity8/qml/Utils
17+usr/lib/*/unity8/qml/WindowManager
1718usr/lib/*/unity8/qml/Wizard
1819usr/share/accountsservice/interfaces
1920usr/share/dbus-1/interfaces
debian/unity8.install+1
@@ -2,6 +2,7 @@ var/lib/unity8/version
22data/unity8-dash.conf usr/share/upstart/sessions/
33data/unity8-filewatcher.conf usr/share/upstart/sessions/
44data/unity8.conf usr/share/upstart/sessions/
5+data/devices.conf etc/ubuntu/
56usr/bin/unity8
67usr/bin/unity8-dash
78usr/share/applications/unity8-dash.desktop
doc/devices.confnew file+45
@@ -0,0 +1,45 @@
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
31+
32+# Example for the Nexus 7
33+# This device has the screen mounted in portrait, but we run it as a landscape
34+# device and we want the side stage on it.
35+[flo]
36+PrimaryOrientation=LandscapeOrienation
37+Category=tablet
38+
39+# Example for the Nexus 4
40+# The screen is already mounted the way we want it, so no special config
41+# required. However, we don't want the phone to rotate upside down, so lets
42+# restrict that.
43+[mako]
44+SupportedOrientations=Portrait,Landscape,InvertedLandscape
45+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+246−331
@@ -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,62 @@
2422#include <QStringList>
2523#include <QDebug>
2624
25+#include <glib.h>
26+
27+#define IFACE_ACCOUNTS_USER QStringLiteral("org.freedesktop.Accounts.User")
28+#define IFACE_LOCATION_HERE QStringLiteral("com.ubuntu.location.providers.here.AccountsService")
29+#define IFACE_UBUNTU_INPUT QStringLiteral("com.ubuntu.AccountsService.Input")
30+#define IFACE_UBUNTU_SECURITY QStringLiteral("com.ubuntu.AccountsService.SecurityPrivacy")
31+#define IFACE_UBUNTU_SECURITY_OLD QStringLiteral("com.ubuntu.touch.AccountsService.SecurityPrivacy")
32+#define IFACE_UNITY QStringLiteral("com.canonical.unity.AccountsService")
33+#define IFACE_UNITY_PRIVATE QStringLiteral("com.canonical.unity.AccountsService.Private")
34+
35+#define PROP_BACKGROUND_FILE QStringLiteral("BackgroundFile")
36+#define PROP_DEMO_EDGES QStringLiteral("demo-edges")
37+#define PROP_DEMO_EDGES_COMPLETED QStringLiteral("DemoEdgesCompleted")
38+#define PROP_EMAIL QStringLiteral("Email")
39+#define PROP_ENABLE_INDICATORS_WHILE_LOCKED QStringLiteral("EnableIndicatorsWhileLocked")
40+#define PROP_ENABLE_LAUNCHER_WHILE_LOCKED QStringLiteral("EnableLauncherWhileLocked")
41+#define PROP_FAILED_LOGINS QStringLiteral("FailedLogins")
42+#define PROP_INPUT_SOURCES QStringLiteral("InputSources")
43+#define PROP_LICENSE_ACCEPTED QStringLiteral("LicenseAccepted")
44+#define PROP_LICENSE_BASE_PATH QStringLiteral("LicenseBasePath")
45+#define PROP_MOUSE_CURSOR_SPEED QStringLiteral("MouseCursorSpeed")
46+#define PROP_MOUSE_DOUBLE_CLICK_SPEED QStringLiteral("MouseDoubleClickSpeed")
47+#define PROP_MOUSE_PRIMARY_BUTTON QStringLiteral("MousePrimaryButton")
48+#define PROP_MOUSE_SCROLL_SPEED QStringLiteral("MouseScrollSpeed")
49+#define PROP_PASSWORD_DISPLAY_HINT QStringLiteral("PasswordDisplayHint")
50+#define PROP_REAL_NAME QStringLiteral("RealName")
51+#define PROP_STATS_WELCOME_SCREEN QStringLiteral("StatsWelcomeScreen")
52+#define PROP_TOUCHPAD_CURSOR_SPEED QStringLiteral("TouchpadCursorSpeed")
53+#define PROP_TOUCHPAD_DISABLE_WHILE_TYPING QStringLiteral("TouchpadDisableWhileTyping")
54+#define PROP_TOUCHPAD_DISABLE_WITH_MOUSE QStringLiteral("TouchpadDisableWithMouse")
55+#define PROP_TOUCHPAD_DOUBLE_CLICK_SPEED QStringLiteral("TouchpadDoubleClickSpeed")
56+#define PROP_TOUCHPAD_PRIMARY_BUTTON QStringLiteral("TouchpadPrimaryButton")
57+#define PROP_TOUCHPAD_SCROLL_SPEED QStringLiteral("TouchpadScrollSpeed")
58+#define PROP_TOUCHPAD_TAP_TO_CLICK QStringLiteral("TouchpadTapToClick")
59+#define PROP_TOUCHPAD_TWO_FINGER_SCROLL QStringLiteral("TouchpadTwoFingerScroll")
60+
61+using StringMap = QMap<QString,QString>;
62+using StringMapList = QList<StringMap>;
63+Q_DECLARE_METATYPE(StringMapList)
64+
65+
66+QVariant primaryButtonConverter(const QVariant &value)
67+{
68+ QString stringValue = value.toString();
69+ if (stringValue == "left") {
70+ return QVariant::fromValue(0);
71+ } else if (stringValue == "right") {
72+ return QVariant::fromValue(1); // Mir is less clear on this -- any non-zero value is the same
73+ } else {
74+ return QVariant::fromValue(0); // default to left
75+ }
76+}
77+
2778AccountsService::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
79+ : QObject(parent)
80+ , m_service(new AccountsServiceDBusAdaptor(this))
3881{
3982 m_unityInput = new QDBusInterface(QStringLiteral("com.canonical.Unity.Input"),
4083 QStringLiteral("/com/canonical/Unity/Input"),
@@ -44,7 +87,48 @@ AccountsService::AccountsService(QObject* parent, const QString &user)
4487 connect(m_service, &AccountsServiceDBusAdaptor::propertiesChanged, this, &AccountsService::onPropertiesChanged);
4588 connect(m_service, &AccountsServiceDBusAdaptor::maybeChanged, this, &AccountsService::onMaybeChanged);
4689
47− setUser(!user.isEmpty() ? user : QString::fromUtf8(qgetenv("USER")));
90+ registerProperty(IFACE_ACCOUNTS_USER, PROP_BACKGROUND_FILE, QStringLiteral("backgroundFileChanged"));
91+ registerProperty(IFACE_ACCOUNTS_USER, PROP_EMAIL, QStringLiteral("emailChanged"));
92+ registerProperty(IFACE_ACCOUNTS_USER, PROP_REAL_NAME, QStringLiteral("realNameChanged"));
93+ registerProperty(IFACE_ACCOUNTS_USER, PROP_INPUT_SOURCES, QStringLiteral("keymapsChanged"));
94+ registerProperty(IFACE_LOCATION_HERE, PROP_LICENSE_ACCEPTED, QStringLiteral("hereEnabledChanged"));
95+ registerProperty(IFACE_LOCATION_HERE, PROP_LICENSE_BASE_PATH, QStringLiteral("hereLicensePathChanged"));
96+ registerProperty(IFACE_UBUNTU_SECURITY, PROP_ENABLE_LAUNCHER_WHILE_LOCKED, QStringLiteral("enableLauncherWhileLockedChanged"));
97+ registerProperty(IFACE_UBUNTU_SECURITY, PROP_ENABLE_INDICATORS_WHILE_LOCKED, QStringLiteral("enableIndicatorsWhileLockedChanged"));
98+ registerProperty(IFACE_UBUNTU_SECURITY, PROP_PASSWORD_DISPLAY_HINT, QStringLiteral("passwordDisplayHintChanged"));
99+ registerProperty(IFACE_UBUNTU_SECURITY_OLD, PROP_STATS_WELCOME_SCREEN, QStringLiteral("statsWelcomeScreenChanged"));
100+ registerProperty(IFACE_UNITY, PROP_DEMO_EDGES, QStringLiteral("demoEdgesChanged"));
101+ registerProperty(IFACE_UNITY, PROP_DEMO_EDGES_COMPLETED, QStringLiteral("demoEdgesCompletedChanged"));
102+ registerProperty(IFACE_UNITY_PRIVATE, PROP_FAILED_LOGINS, QStringLiteral("failedLoginsChanged"));
103+
104+ registerProxy(IFACE_UBUNTU_INPUT, PROP_MOUSE_CURSOR_SPEED,
105+ m_unityInput, QStringLiteral("setMouseCursorSpeed"));
106+ registerProxy(IFACE_UBUNTU_INPUT, PROP_MOUSE_DOUBLE_CLICK_SPEED,
107+ m_unityInput, QStringLiteral("setMouseDoubleClickSpeed"));
108+ registerProxy(IFACE_UBUNTU_INPUT, PROP_MOUSE_PRIMARY_BUTTON,
109+ m_unityInput, QStringLiteral("setMousePrimaryButton"),
110+ primaryButtonConverter);
111+ registerProxy(IFACE_UBUNTU_INPUT, PROP_MOUSE_SCROLL_SPEED,
112+ m_unityInput, QStringLiteral("setMouseScrollSpeed"));
113+ registerProxy(IFACE_UBUNTU_INPUT, PROP_TOUCHPAD_CURSOR_SPEED,
114+ m_unityInput, QStringLiteral("setTouchpadCursorSpeed"));
115+ registerProxy(IFACE_UBUNTU_INPUT, PROP_TOUCHPAD_SCROLL_SPEED,
116+ m_unityInput, QStringLiteral("setTouchpadScrollSpeed"));
117+ registerProxy(IFACE_UBUNTU_INPUT, PROP_TOUCHPAD_DISABLE_WHILE_TYPING,
118+ m_unityInput, QStringLiteral("setTouchpadDisableWhileTyping"));
119+ registerProxy(IFACE_UBUNTU_INPUT, PROP_TOUCHPAD_DISABLE_WITH_MOUSE,
120+ m_unityInput, QStringLiteral("setTouchpadDisableWithMouse"));
121+ registerProxy(IFACE_UBUNTU_INPUT, PROP_TOUCHPAD_DOUBLE_CLICK_SPEED,
122+ m_unityInput, QStringLiteral("setTouchpadDoubleClickSpeed"));
123+ registerProxy(IFACE_UBUNTU_INPUT, PROP_TOUCHPAD_PRIMARY_BUTTON,
124+ m_unityInput, QStringLiteral("setTouchpadPrimaryButton"),
125+ primaryButtonConverter);
126+ registerProxy(IFACE_UBUNTU_INPUT, PROP_TOUCHPAD_TAP_TO_CLICK,
127+ m_unityInput, QStringLiteral("setTouchpadTapToClick"));
128+ registerProxy(IFACE_UBUNTU_INPUT, PROP_TOUCHPAD_TWO_FINGER_SCROLL,
129+ m_unityInput, QStringLiteral("setTouchpadTwoFingerScroll"));
130+
131+ setUser(!user.isEmpty() ? user : QString::fromUtf8(g_get_user_name()));
48132}
49133
50134QString AccountsService::user() const
@@ -57,410 +141,256 @@ void AccountsService::setUser(const QString &user)
57141 if (user.isEmpty() || m_user == user)
58142 return;
59143
144+ bool wasEmpty = m_user.isEmpty();
145+
60146 m_user = user;
61147 Q_EMIT userChanged();
62148
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);
149+ // Do the first update synchronously, as a cheap way to block rendering
150+ // until we have the right values on bootup.
151+ refresh(!wasEmpty);
74152}
75153
76154bool AccountsService::demoEdges() const
77155{
78− return m_demoEdges;
156+ auto value = getProperty(IFACE_UNITY, PROP_DEMO_EDGES);
157+ return value.toBool();
79158}
80159
81160void AccountsService::setDemoEdges(bool demoEdges)
82161{
83− if (m_demoEdges != demoEdges) {
84− m_demoEdges = demoEdges;
85− m_service->setUserPropertyAsync(m_user, QStringLiteral("com.canonical.unity.AccountsService"), QStringLiteral("demo-edges"), demoEdges);
162+ setProperty(IFACE_UNITY, PROP_DEMO_EDGES, demoEdges);
163+}
86164
87− Q_EMIT demoEdgesChanged();
165+QStringList AccountsService::demoEdgesCompleted() const
166+{
167+ auto value = getProperty(IFACE_UNITY, PROP_DEMO_EDGES_COMPLETED);
168+ return value.toStringList();
169+}
170+
171+void AccountsService::markDemoEdgeCompleted(const QString &edge)
172+{
173+ auto currentList = demoEdgesCompleted();
174+ if (!currentList.contains(edge)) {
175+ setProperty(IFACE_UNITY, PROP_DEMO_EDGES_COMPLETED, currentList << edge);
88176 }
89177}
90178
91179bool AccountsService::enableLauncherWhileLocked() const
92180{
93− return m_enableLauncherWhileLocked;
181+ auto value = getProperty(IFACE_UBUNTU_SECURITY, PROP_ENABLE_LAUNCHER_WHILE_LOCKED);
182+ return value.toBool();
94183}
95184
96185bool AccountsService::enableIndicatorsWhileLocked() const
97186{
98− return m_enableIndicatorsWhileLocked;
187+ auto value = getProperty(IFACE_UBUNTU_SECURITY, PROP_ENABLE_INDICATORS_WHILE_LOCKED);
188+ return value.toBool();
99189}
100190
101191QString AccountsService::backgroundFile() const
102192{
103− return m_backgroundFile;
193+ auto value = getProperty(IFACE_ACCOUNTS_USER, PROP_BACKGROUND_FILE);
194+ return value.toString();
104195}
105196
106197bool AccountsService::statsWelcomeScreen() const
107198{
108− return m_statsWelcomeScreen;
199+ auto value = getProperty(IFACE_UBUNTU_SECURITY_OLD, PROP_STATS_WELCOME_SCREEN);
200+ return value.toBool();
109201}
110202
111203AccountsService::PasswordDisplayHint AccountsService::passwordDisplayHint() const
112204{
113− return m_passwordDisplayHint;
205+ auto value = getProperty(IFACE_UBUNTU_SECURITY, PROP_PASSWORD_DISPLAY_HINT);
206+ return (PasswordDisplayHint)value.toInt();
114207}
115208
116209bool AccountsService::hereEnabled() const
117210{
118− return m_hereEnabled;
211+ auto value = getProperty(IFACE_LOCATION_HERE, PROP_LICENSE_ACCEPTED);
212+ return value.toBool();
119213}
120214
121215void AccountsService::setHereEnabled(bool enabled)
122216{
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− }
217+ setProperty(IFACE_LOCATION_HERE, PROP_LICENSE_ACCEPTED, enabled);
129218}
130219
131220QString AccountsService::hereLicensePath() const
132221{
133− return m_hereLicensePath;
222+ auto value = getProperty(IFACE_LOCATION_HERE, PROP_LICENSE_BASE_PATH);
223+ QString hereLicensePath = value.toString();
224+ if (hereLicensePath.isEmpty() || !QFile::exists(hereLicensePath))
225+ hereLicensePath = QStringLiteral("");
226+ return hereLicensePath;
134227}
135228
136229bool AccountsService::hereLicensePathValid() const
137230{
138− return !m_hereLicensePath.isNull();
231+ auto value = getProperty(IFACE_LOCATION_HERE, PROP_LICENSE_BASE_PATH);
232+ return !value.toString().isNull();
139233}
140234
141−void AccountsService::updateDemoEdges(bool async)
235+QString AccountsService::realName() const
142236{
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− }
237+ auto value = getProperty(IFACE_ACCOUNTS_USER, PROP_REAL_NAME);
238+ return value.toString();
168239}
169240
170−void AccountsService::updateEnableLauncherWhileLocked(bool async)
241+void AccountsService::setRealName(const QString &realName)
171242{
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− }
243+ setProperty(IFACE_ACCOUNTS_USER, PROP_REAL_NAME, realName);
197244}
198245
199−void AccountsService::updateEnableIndicatorsWhileLocked(bool async)
246+QString AccountsService::email() const
200247{
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− }
248+ auto value = getProperty(IFACE_ACCOUNTS_USER, PROP_EMAIL);
249+ return value.toString();
226250}
227251
228−void AccountsService::updateBackgroundFile(bool async)
252+void AccountsService::setEmail(const QString &email)
229253{
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) {
254+ setProperty(IFACE_ACCOUNTS_USER, PROP_EMAIL, email);
255+}
237256
238− QDBusPendingReply<QVariant> reply = *watcher;
239− watcher->deleteLater();
240− if (reply.isError()) {
241− qWarning() << "Failed to get 'BackgroundFile' property - " << reply.error().message();
242− return;
257+QStringList AccountsService::keymaps() const
258+{
259+ auto value = getProperty(IFACE_ACCOUNTS_USER, PROP_INPUT_SOURCES);
260+ QDBusArgument arg = value.value<QDBusArgument>();
261+ StringMapList maps = qdbus_cast<StringMapList>(arg);
262+ QStringList simplifiedMaps;
263+
264+ Q_FOREACH(const StringMap &map, maps) {
265+ Q_FOREACH(const QString &entry, map) {
266+ simplifiedMaps.append(entry);
243267 }
268+ }
244269
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;
270+ if (!simplifiedMaps.isEmpty()) {
271+ return simplifiedMaps;
254272 }
273+
274+ return {QStringLiteral("us")};
255275}
256276
257−void AccountsService::updateMouseCursorSpeed()
277+uint AccountsService::failedLogins() const
258278{
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− });
279+ return getProperty(IFACE_UNITY_PRIVATE, PROP_FAILED_LOGINS).toUInt();
278280}
279281
280−void AccountsService::updateTouchpadCursorSpeed()
282+void AccountsService::setFailedLogins(uint failedLogins)
281283{
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) {
284+ setProperty(IFACE_UNITY_PRIVATE, PROP_FAILED_LOGINS, failedLogins);
285+}
289286
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− }
287+// ====================================================
288+// Everything below this line is generic helper methods
289+// ====================================================
296290
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− });
291+void AccountsService::emitChangedForProperty(const QString &interface, const QString &property)
292+{
293+ QString signalName = m_properties[interface][property].signal;
294+ QMetaObject::invokeMethod(this, signalName.toUtf8().data());
301295}
302296
303−void AccountsService::updateStatsWelcomeScreen(bool async)
297+QVariant AccountsService::getProperty(const QString &interface, const QString &property) const
304298{
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− }
299+ return m_properties[interface][property].value;
330300}
331301
332−void AccountsService::updatePasswordDisplayHint(bool async)
302+void AccountsService::setProperty(const QString &interface, const QString &property, const QVariant &value)
333303{
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;
304+ if (m_properties[interface][property].value != value) {
305+ m_properties[interface][property].value = value;
306+ m_service->setUserPropertyAsync(m_user, interface, property, value);
307+ emitChangedForProperty(interface, property);
358308 }
359309}
360310
361−void AccountsService::updateFailedLogins(bool async)
311+void AccountsService::updateCache(const QString &interface, const QString &property, const QVariant &value)
362312{
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;
313+ PropertyInfo &info = m_properties[interface][property];
314+
315+ if (info.proxyInterface) {
316+ QVariant finalValue;
317+ if (info.proxyConverter) {
318+ finalValue = info.proxyConverter(value);
319+ } else {
320+ finalValue = value;
376321 }
322+ info.proxyInterface->asyncCall(info.proxyMethod, finalValue);
323+ return; // don't bother saving a copy
324+ }
377325
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;
326+ if (info.value != value) {
327+ info.value = value;
328+ emitChangedForProperty(interface, property);
387329 }
388330}
389331
390−void AccountsService::updateHereEnabled(bool async)
332+void AccountsService::updateProperty(const QString &interface, const QString &property)
391333{
392334 QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
393− QStringLiteral("com.ubuntu.location.providers.here.AccountsService"),
394− QStringLiteral("LicenseAccepted"));
335+ interface,
336+ property);
395337 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
396338
397339 connect(watcher, &QDBusPendingCallWatcher::finished,
398− this, [this](QDBusPendingCallWatcher* watcher) {
340+ this, [this, interface, property](QDBusPendingCallWatcher* watcher) {
399341
400342 QDBusPendingReply<QVariant> reply = *watcher;
401343 watcher->deleteLater();
402344 if (reply.isError()) {
403− qWarning() << "Failed to get 'LicenseAccepted' property - " << reply.error().message();
345+ qWarning() << "Failed to get '" << property << "' property:" << reply.error().message();
404346 return;
405347 }
406348
407− const bool hereEnabled = reply.value().toBool();
408− if (m_hereEnabled != hereEnabled) {
409− m_hereEnabled = hereEnabled;
410− Q_EMIT hereEnabledChanged();
411− }
349+ updateCache(interface, property, reply.value());
412350 });
413− if (!async) {
414− watcher->waitForFinished();
415− delete watcher;
416− }
417351}
418352
419−void AccountsService::updateHereLicensePath(bool async)
353+void AccountsService::updateAllProperties(const QString &interface, bool async)
420354{
421− QDBusPendingCall pendingReply = m_service->getUserPropertyAsync(m_user,
422− QStringLiteral("com.ubuntu.location.providers.here.AccountsService"),
423− QStringLiteral("LicenseBasePath"));
355+ QDBusPendingCall pendingReply = m_service->getAllPropertiesAsync(m_user,
356+ interface);
424357 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingReply, this);
425358
426359 connect(watcher, &QDBusPendingCallWatcher::finished,
427− this, [this](QDBusPendingCallWatcher* watcher) {
360+ this, [this, interface](QDBusPendingCallWatcher* watcher) {
428361
429− QDBusPendingReply<QVariant> reply = *watcher;
362+ QDBusPendingReply< QHash<QString, QVariant> > reply = *watcher;
430363 watcher->deleteLater();
431364 if (reply.isError()) {
432− qWarning() << "Failed to get 'LicenseBasePath' property - " << reply.error().message();
365+ qWarning() << "Failed to get all properties for" << interface << ":" << reply.error().message();
433366 return;
434367 }
435368
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();
369+ auto valueHash = reply.value();
370+ auto i = valueHash.constBegin();
371+ while (i != valueHash.constEnd()) {
372+ updateCache(interface, i.key(), i.value());
373+ ++i;
443374 }
444375 });
445376 if (!async) {
446377 watcher->waitForFinished();
447− delete watcher;
448378 }
449379}
450380
451−uint AccountsService::failedLogins() const
381+void AccountsService::registerProxy(const QString &interface, const QString &property, QDBusInterface *iface, const QString &method, ProxyConverter converter)
452382{
453− return m_failedLogins;
383+ registerProperty(interface, property, nullptr);
384+
385+ m_properties[interface][property].proxyInterface = iface;
386+ m_properties[interface][property].proxyMethod = method;
387+ m_properties[interface][property].proxyConverter = converter;
454388}
455389
456−void AccountsService::setFailedLogins(uint failedLogins)
390+void AccountsService::registerProperty(const QString &interface, const QString &property, const QString &signal)
457391{
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− }
392+ m_properties[interface][property] = PropertyInfo();
393+ m_properties[interface][property].signal = signal;
464394}
465395
466396void AccountsService::onPropertiesChanged(const QString &user, const QString &interface, const QStringList &changed)
@@ -469,42 +399,13 @@ void AccountsService::onPropertiesChanged(const QString &user, const QString &in
469399 return;
470400 }
471401
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();
402+ auto propHash = m_properties.value(interface);
403+ auto i = propHash.constBegin();
404+ while (i != propHash.constEnd()) {
405+ if (changed.contains(i.key())) {
406+ updateProperty(interface, i.key());
507407 }
408+ ++i;
508409 }
509410}
510411
@@ -514,6 +415,20 @@ void AccountsService::onMaybeChanged(const QString &user)
514415 return;
515416 }
516417
517− // Standard properties might have changed
518− updateBackgroundFile();
418+ // Any of the standard properties might have changed!
419+ auto propHash = m_properties.value(IFACE_ACCOUNTS_USER);
420+ auto i = propHash.constBegin();
421+ while (i != propHash.constEnd()) {
422+ updateProperty(IFACE_ACCOUNTS_USER, i.key());
423+ ++i;
424+ }
425+}
426+
427+void AccountsService::refresh(bool async)
428+{
429+ auto i = m_properties.constBegin();
430+ while (i != m_properties.constEnd()) {
431+ updateAllProperties(i.key(), async);
432+ ++i;
433+ }
519434}
plugins/AccountsService/AccountsService.h+46−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,16 @@
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 <QStringList>
24+#include <QVariant>
2425
2526class AccountsServiceDBusAdaptor;
2627class QDBusInterface;
@@ -37,6 +38,9 @@ class AccountsService: public QObject
3738 READ demoEdges
3839 WRITE setDemoEdges
3940 NOTIFY demoEdgesChanged)
41+ Q_PROPERTY (QStringList demoEdgesCompleted
42+ READ demoEdgesCompleted
43+ NOTIFY demoEdgesCompletedChanged)
4044 Q_PROPERTY (bool enableLauncherWhileLocked
4145 READ enableLauncherWhileLocked
4246 NOTIFY enableLauncherWhileLockedChanged)
@@ -66,6 +70,11 @@ class AccountsService: public QObject
6670 Q_PROPERTY(bool hereLicensePathValid // qml sees a null string as "", so we use proxy setting for that
6771 READ hereLicensePathValid
6872 NOTIFY hereLicensePathChanged)
73+ Q_PROPERTY(QString realName READ realName WRITE setRealName NOTIFY realNameChanged)
74+ Q_PROPERTY(QString email READ email WRITE setEmail NOTIFY emailChanged)
75+ Q_PROPERTY(QStringList keymaps
76+ READ keymaps
77+ NOTIFY keymapsChanged)
6978
7079public:
7180 enum PasswordDisplayHint {
@@ -80,6 +89,8 @@ public:
8089 void setUser(const QString &user);
8190 bool demoEdges() const;
8291 void setDemoEdges(bool demoEdges);
92+ QStringList demoEdgesCompleted() const;
93+ Q_INVOKABLE void markDemoEdgeCompleted(const QString &edge);
8394 bool enableLauncherWhileLocked() const;
8495 bool enableIndicatorsWhileLocked() const;
8596 QString backgroundFile() const;
@@ -91,10 +102,16 @@ public:
91102 void setHereEnabled(bool enabled);
92103 QString hereLicensePath() const;
93104 bool hereLicensePathValid() const;
105+ QString realName() const;
106+ void setRealName(const QString &realName);
107+ QString email() const;
108+ void setEmail(const QString &email);
109+ QStringList keymaps() const;
94110
95111Q_SIGNALS:
96112 void userChanged();
97113 void demoEdgesChanged();
114+ void demoEdgesCompletedChanged();
98115 void enableLauncherWhileLockedChanged();
99116 void enableIndicatorsWhileLockedChanged();
100117 void backgroundFileChanged();
@@ -103,36 +120,42 @@ Q_SIGNALS:
103120 void failedLoginsChanged();
104121 void hereEnabledChanged();
105122 void hereLicensePathChanged();
123+ void realNameChanged();
124+ void emailChanged();
125+ void keymapsChanged();
106126
107127private Q_SLOTS:
108128 void onPropertiesChanged(const QString &user, const QString &interface, const QStringList &changed);
109129 void onMaybeChanged(const QString &user);
110130
111131private:
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);
132+ typedef QVariant (*ProxyConverter)(const QVariant &);
133+
134+ void refresh(bool async);
135+ void registerProperty(const QString &interface, const QString &property, const QString &signal);
136+ void registerProxy(const QString &interface, const QString &property, QDBusInterface *iface, const QString &method, ProxyConverter converter = nullptr);
137+
138+ void updateAllProperties(const QString &interface, bool async);
139+ void updateProperty(const QString &interface, const QString &property);
140+ void updateCache(const QString &interface, const QString &property, const QVariant &value);
123141
142+ void setProperty(const QString &interface, const QString &property, const QVariant &value);
143+ QVariant getProperty(const QString &interface, const QString &property) const;
144+
145+ void emitChangedForProperty(const QString &interface, const QString &property);
146+
147+ struct PropertyInfo {
148+ QVariant value{};
149+ QString signal{};
150+ QDBusInterface *proxyInterface{};
151+ QString proxyMethod{};
152+ ProxyConverter proxyConverter{};
153+ };
154+ typedef QHash< QString, QHash<QString, PropertyInfo> > PropertyHash;
155+ PropertyHash m_properties;
124156 AccountsServiceDBusAdaptor *m_service;
125157 QDBusInterface *m_unityInput;
126158 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;
136159};
137160
138161#endif
plugins/AccountsService/AccountsService.qmltypes+5
@@ -23,6 +23,7 @@ Module {
2323 }
2424 Property { name: "user"; type: "string" }
2525 Property { name: "demoEdges"; type: "bool" }
26+ Property { name: "demoEdgesCompleted"; type: "QStringList"; isReadonly: true }
2627 Property { name: "enableLauncherWhileLocked"; type: "bool"; isReadonly: true }
2728 Property { name: "enableIndicatorsWhileLocked"; type: "bool"; isReadonly: true }
2829 Property { name: "backgroundFile"; type: "string"; isReadonly: true }
@@ -32,5 +33,9 @@ Module {
3233 Property { name: "hereEnabled"; type: "bool" }
3334 Property { name: "hereLicensePath"; type: "string"; isReadonly: true }
3435 Property { name: "hereLicensePathValid"; type: "bool"; isReadonly: true }
36+ Method {
37+ name: "markDemoEdgeCompleted"
38+ Parameter { name: "edge"; type: "string" }
39+ }
3540 }
3641}
plugins/AccountsService/AccountsServiceDBusAdaptor.cpp+23−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− * 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);
@@ -50,8 +57,18 @@ QDBusPendingCall AccountsServiceDBusAdaptor::setUserPropertyAsync(const QString
5057{
5158 QDBusInterface *iface = getUserInterface(user);
5259 if (iface != nullptr && iface->isValid()) {
53− // The value needs to be carefully wrapped
54− return iface->asyncCall(QStringLiteral("Set"), interface, property, QVariant::fromValue(QDBusVariant(value)));
60+ if (interface == QStringLiteral("org.freedesktop.Accounts.User")) {
61+ // Standard AccountsService properties use special set methods.
62+ // It will not let you use the usual DBus property setters.
63+ QDBusInterface accountsIface(iface->service(),
64+ iface->path(),
65+ interface,
66+ iface->connection());
67+ return accountsIface.asyncCall(QStringLiteral("Set") + property, value);
68+ } else {
69+ // The value needs to be carefully wrapped
70+ return iface->asyncCall(QStringLiteral("Set"), interface, property, QVariant::fromValue(QDBusVariant(value)));
71+ }
5572 }
5673 return QDBusPendingCall::fromCompletedCall(QDBusMessage::createError(QDBusError::Other, QStringLiteral("Invalid Interface")));
5774}
@@ -80,7 +97,7 @@ void AccountsServiceDBusAdaptor::maybeChangedSlot()
8097 m_ignoreNextChanged = false;
8198}
8299
83−QString AccountsServiceDBusAdaptor::getUserForPath(const QString &path)
100+QString AccountsServiceDBusAdaptor::getUserForPath(const QString &path) const
84101{
85102 QMap<QString, QDBusInterface *>::const_iterator i;
86103 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/AccountsService/CMakeLists.txt+5
@@ -1,4 +1,5 @@
11add_definitions(-DSM_BUSNAME=systemBus)
2+include_directories(${GLIB_INCLUDE_DIRS})
23
34add_library(AccountsService-qml MODULE
45 AccountsService.cpp
@@ -8,6 +9,10 @@ add_library(AccountsService-qml MODULE
89
910qt5_use_modules(AccountsService-qml DBus Qml)
1011
12+target_link_libraries(AccountsService-qml
13+ ${GLIB_LIBRARIES}
14+ )
15+
1116add_unity8_plugin(AccountsService 0.1 AccountsService TARGETS AccountsService-qml)
1217
1318set(DBUS_IFACE_DIR "${CMAKE_INSTALL_PREFIX}/share/dbus-1/interfaces")
plugins/AccountsService/com.canonical.unity.AccountsService.xml+5
@@ -14,6 +14,11 @@
1414 <annotation name="org.freedesktop.Accounts.DefaultValue" value="true"/>
1515 </property>
1616
17+ <!-- List of tutorial pages that have been completed by the user -->
18+ <property name="DemoEdgesCompleted" type="as" access="readwrite">
19+ <annotation name="org.freedesktop.Accounts.DefaultValue" value="[]"/>
20+ </property>
21+
1722 <property name="LauncherItems" type="aa{sv}" access="readwrite">
1823 <annotation name="org.freedesktop.Accounts.DefaultValue" value="[{'defaults': <true>}]"/>
1924 </property>
plugins/CMakeLists.txt+1
@@ -25,4 +25,5 @@ add_subdirectory(Ubuntu)
2525add_subdirectory(UInput)
2626add_subdirectory(Unity)
2727add_subdirectory(Utils)
28+add_subdirectory(WindowManager)
2829add_subdirectory(Wizard)
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+73−45
@@ -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\
@@ -61,10 +62,11 @@ var kBackgroundLoaderCode = 'Loader {\n\
6162// %1 is used as anchors of artShapeHolder
6263// %2 is used as image width
6364// %3 is used as image height
64−// %4 is used for artShapeSource.hideSource and inner Loader visible
65+// %4 is whether the image or the Loader with the UbuntuShape/ProportionalShape should be 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,23 +75,15 @@ 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\
8284 objectName: "artShape"; \n\
8385 visible: image.status == Image.Ready; \n\
8486 readonly property alias image: artImage; \n\
85− ShaderEffectSource { \n\
86− id: artShapeSource; \n\
87− sourceItem: artImage; \n\
88− anchors.centerIn: parent; \n\
89− width: 1; \n\
90− height: 1; \n\
91− hideSource: %4; \n\
92− } \n\
9387 Loader { \n\
9488 anchors.fill: parent; \n\
9589 visible: %4; \n\
@@ -97,7 +91,7 @@ var kArtShapeHolderCode = 'Item { \n\
9791 Component { \n\
9892 id: artShapeShapeComponent; \n\
9993 UbuntuShape { \n\
100− source: artShapeSource; \n\
94+ source: artImage; \n\
10195 sourceFillMode: UbuntuShape.PreserveAspectCrop; \n\
10296 radius: "medium"; \n\
10397 aspect: { \n\
@@ -112,7 +106,7 @@ var kArtShapeHolderCode = 'Item { \n\
112106 } \n\
113107 Component { \n\
114108 id: artShapeIconComponent; \n\
115− ProportionalShape { source: artShapeSource; aspect: UbuntuShape.DropShadow; } \n\
109+ ProportionalShape { source: artImage; aspect: UbuntuShape.DropShadow; } \n\
116110 } \n\
117111 } \n\
118112 readonly property real fixedArtShapeSizeAspect: (root.fixedArtShapeSize.height > 0 && root.fixedArtShapeSize.width > 0) ? root.fixedArtShapeSize.width / root.fixedArtShapeSize.height : -1; \n\
@@ -132,10 +126,11 @@ var kArtShapeHolderCode = 'Item { \n\
132126 id: artImage; \n\
133127 objectName: "artImage"; \n\
134128 source: artShapeLoader.cardArt; \n\
135− asynchronous: root.asynchronous; \n\
129+ asynchronous: %6; \n\
130+ visible: !%4; \n\
136131 width: %2; \n\
137132 height: %3; \n\
138− %6 \n\
133+ %7 \n\
139134 } \n\
140135 } \n\
141136 } \n\
@@ -144,6 +139,7 @@ var kArtShapeHolderCode = 'Item { \n\
144139// %1 is anchors.fill
145140// %2 is width
146141// %3 is height
142+// %4 is whether the icon should be asynchronous or not
147143var kAudioButtonCode = 'AbstractButton { \n\
148144 id: audioButton; \n\
149145 anchors.fill: %1; \n\
@@ -169,6 +165,7 @@ var kAudioButtonCode = 'AbstractButton { \n\
169165 opacity: 0.9; \n\
170166 name: DashAudioPlayer.playing && AudioUrlComparer.compare(parent.source, DashAudioPlayer.currentSource) ? "media-playback-pause" : "media-playback-start"; \n\
171167 color: "white"; \n\
168+ asynchronous: %4; \n\
172169 } \n\
173170 onClicked: { \n\
174171 if (AudioUrlComparer.compare(source, DashAudioPlayer.currentSource)) { \n\
@@ -187,12 +184,14 @@ var kAudioButtonCode = 'AbstractButton { \n\
187184 } \n\
188185 }';
189186
187+// %1 is whether the loader should be asynchronous or not
188+// %2 is the header height code
190189var kOverlayLoaderCode = 'Loader { \n\
191190 id: overlayLoader; \n\
192− readonly property real overlayHeight: (fixedHeaderHeight > 0 ? fixedHeaderHeight : headerHeight) + units.gu(2); \n\
191+ readonly property real overlayHeight: %2 + units.gu(2); \n\
193192 anchors.fill: artShapeHolder; \n\
194193 active: artShapeLoader.active && artShapeLoader.item && artShapeLoader.item.image.status === Image.Ready || false; \n\
195− asynchronous: root.asynchronous; \n\
194+ asynchronous: %1; \n\
196195 visible: showHeader && status == Loader.Ready; \n\
197196 sourceComponent: UbuntuShapeOverlay { \n\
198197 id: overlay; \n\
@@ -211,17 +210,19 @@ function kHeaderRowCodeGenerator() {
211210 objectName: "outerRow"; \n\
212211 property real margins: units.gu(1); \n\
213212 spacing: margins; \n\
214− height: root.fixedHeaderHeight != -1 ? root.fixedHeaderHeight : implicitHeight; \n\
213+ %2\
215214 anchors { %1 } \n\
216215 anchors.right: parent.right; \n\
217216 anchors.margins: margins; \n\
218217 anchors.rightMargin: 0; \n\
219218 data: [ \n\
220− %2 \n\
219+ %3 \n\
221220 ] \n\
222221 }\n';
223222 var args = Array.prototype.slice.call(arguments);
224− var code = kHeaderRowCodeTemplate.arg(args.shift()).arg(args.join(',\n'));
223+ var isCardTool = args.shift();
224+ var heightCode = isCardTool ? "" : "height: root.fixedHeaderHeight; \n";
225+ var code = kHeaderRowCodeTemplate.arg(args.shift()).arg(heightCode).arg(args.join(',\n'));
225226 return code;
226227}
227228
@@ -242,10 +243,11 @@ function kHeaderContainerCodeGenerator() {
242243}
243244
244245// %1 is used as anchors of mascotShapeLoader
246+// %2 is whether the loader should be asynchronous or not
245247var kMascotShapeLoaderCode = 'Loader { \n\
246248 id: mascotShapeLoader; \n\
247249 objectName: "mascotShapeLoader"; \n\
248− asynchronous: root.asynchronous; \n\
250+ asynchronous: %2; \n\
249251 active: mascotImage.status === Image.Ready; \n\
250252 visible: showHeader && active && status == Loader.Ready; \n\
251253 width: units.gu(6); \n\
@@ -275,6 +277,7 @@ var kMascotImageCode = 'CroppedImageMinimumSourceSize { \n\
275277// %2 is used as color of titleLabel
276278// %3 is used as extra condition for visible of titleLabel
277279// %4 is used as title width
280+// %5 is used as horizontal alignment
278281var kTitleLabelCode = 'Label { \n\
279282 id: titleLabel; \n\
280283 objectName: "titleLabel"; \n\
@@ -289,7 +292,7 @@ var kTitleLabelCode = 'Label { \n\
289292 width: %4; \n\
290293 text: root.title; \n\
291294 font.weight: cardData && cardData["subtitle"] ? Font.DemiBold : Font.Normal; \n\
292− horizontalAlignment: root.titleAlignment; \n\
295+ horizontalAlignment: %5; \n\
293296 }\n';
294297
295298// %1 is used as extra anchors of emblemIcon
@@ -398,7 +401,7 @@ function sanitizeColor(colorString) {
398401 return colorString;
399402}
400403
401−function cardString(template, components) {
404+function cardString(template, components, isCardTool) {
402405 var code;
403406
404407 var templateInteractive = (template == null ? true : (template["non-interactive"] !== undefined ? !template["non-interactive"] : true)) ? "true" : "false";
@@ -410,16 +413,16 @@ function cardString(template, components) {
410413 property string backgroundShapeStyle: "inset"; \n\
411414 property real fontScale: 1.0; \n\
412415 property var scopeStyle: null; \n\
413− property int titleAlignment: Text.AlignLeft; \n\
414− property int fixedHeaderHeight: -1; \n\
416+ %2\
415417 property size fixedArtShapeSize: Qt.size(-1, -1); \n\
416418 readonly property string title: cardData && cardData["title"] || ""; \n\
417− property bool asynchronous: true; \n\
418419 property bool showHeader: true; \n\
419420 implicitWidth: childrenRect.width; \n\
420421 enabled: %1; \n\
421422 \n'.arg(templateInteractive);
422423
424+ code = code.arg(isCardTool ? "" : "property int fixedHeaderHeight: -1; \n");
425+
423426 var hasArt = components["art"] && components["art"]["field"] || false;
424427 var hasSummary = components["summary"] || false;
425428 var isConciergeMode = components["art"] && components["art"]["conciergeMode"] || false;
@@ -435,6 +438,7 @@ function cardString(template, components) {
435438 var hasHeaderRow = hasMascot && hasTitle;
436439 var hasAttributes = hasTitle && components["attributes"] && components["attributes"]["field"] || false;
437440 var isAudio = template["quick-preview-type"] === "audio";
441+ var asynchronous = isCardTool ? "false" : "true";
438442
439443 if (isAudio) {
440444 // For now we only support audio cards with [optional] art, title, subtitle
@@ -468,7 +472,7 @@ function cardString(template, components) {
468472 backgroundElements1 = '"%1"'.arg(element1);
469473 }
470474 }
471− code += kBackgroundLoaderCode.arg(backgroundElements0).arg(backgroundElements1).arg(templateCardBackground);
475+ code += kBackgroundLoaderCode.arg(backgroundElements0).arg(backgroundElements1).arg(asynchronous).arg(templateCardBackground);
472476 }
473477
474478 if (hasArt) {
@@ -497,23 +501,31 @@ function cardString(template, components) {
497501 if (isNaN(aspectRatio)) {
498502 aspectRatio = 1;
499503 }
500− var fallback = components["art"] && components["art"]["fallback"] || "";
504+ var fallback = !isCardTool && components["art"] && components["art"]["fallback"] || "";
501505 fallback = encodeURI(fallback);
502506 var fallbackStatusCode = "";
503507 var fallbackURICode = '""';
504508 if (fallback !== "") {
505509 // 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;';
510+ // which in kArtShapeHolderCode is %8
511+ fallbackStatusCode += 'onStatusChanged: if (status === Image.Error) source = %8;';
508512 fallbackURICode = 'decodeURI("%1")'.arg(fallback);
509513 }
510− code += kArtShapeHolderCode.arg(artAnchors).arg(widthCode).arg(heightCode).arg(isConciergeMode ? "false" : "true").arg(aspectRatio).arg(fallbackStatusCode).arg(fallbackURICode);
514+ code += kArtShapeHolderCode.arg(artAnchors)
515+ .arg(widthCode)
516+ .arg(heightCode)
517+ .arg(isConciergeMode ? "false" : "true")
518+ .arg(aspectRatio)
519+ .arg(asynchronous)
520+ .arg(fallbackStatusCode)
521+ .arg(fallbackURICode);
511522 } else {
512523 code += 'readonly property size artShapeSize: Qt.size(-1, -1);\n'
513524 }
514525
515526 if (headerAsOverlay) {
516− code += kOverlayLoaderCode;
527+ var headerHeightCode = isCardTool ? "headerHeight" : "root.fixedHeaderHeight";
528+ code += kOverlayLoaderCode.arg(asynchronous).arg(headerHeightCode);
517529 }
518530
519531 var headerVerticalAnchors;
@@ -595,11 +607,11 @@ function cardString(template, components) {
595607 }
596608
597609 if (useMascotShape) {
598− mascotShapeCode = kMascotShapeLoaderCode.arg(mascotAnchors);
610+ mascotShapeCode = kMascotShapeLoaderCode.arg(mascotAnchors).arg(asynchronous);
599611 }
600612
601613 var mascotImageVisible = useMascotShape ? 'false' : 'showHeader';
602− var fallback = components["mascot"] && components["mascot"]["fallback"] || "";
614+ var fallback = !isCardTool && components["mascot"] && components["mascot"]["fallback"] || "";
603615 fallback = encodeURI(fallback);
604616 var fallbackStatusCode = "";
605617 var fallbackURICode = '""';
@@ -715,9 +727,24 @@ function cardString(template, components) {
715727 }
716728 }
717729
730+ var titleAlignment = "Text.AlignHCenter";
731+ if (template["card-layout"] === "horizontal"
732+ || typeof components["title"] !== "object"
733+ || components["title"]["align"] === "left") titleAlignment = "Text.AlignLeft";
734+ var keys = ["mascot", "emblem", "subtitle", "attributes", "summary"];
735+ for (var key in keys) {
736+ key = keys[key];
737+ try {
738+ if (typeof components[key] === "string"
739+ || typeof components[key]["field"] === "string") titleAlignment = "Text.AlignLeft";
740+ } catch (e) {
741+ continue;
742+ }
743+ }
744+
718745 // code for different elements
719746 var titleLabelVisibleExtra = (headerAsOverlay ? '&& overlayLoader.active': '');
720− var titleCode = kTitleLabelCode.arg(titleAnchors).arg(titleColor).arg(titleLabelVisibleExtra).arg(titleWidth);
747+ var titleCode = kTitleLabelCode.arg(titleAnchors).arg(titleColor).arg(titleLabelVisibleExtra).arg(titleWidth).arg(titleAlignment);
721748 var subtitleCode;
722749 var attributesCode;
723750
@@ -759,7 +786,7 @@ function cardString(template, components) {
759786 if (mascotShapeCode != '') {
760787 rowCode.unshift(mascotShapeCode);
761788 }
762− code += kHeaderRowCodeGenerator(headerVerticalAnchors + headerLeftAnchor, rowCode)
789+ code += kHeaderRowCodeGenerator(isCardTool, headerVerticalAnchors + headerLeftAnchor, rowCode)
763790 } else {
764791 code += mascotShapeCode + mascotCode + titleSubtitleCode;
765792 }
@@ -783,9 +810,10 @@ function cardString(template, components) {
783810 } else {
784811 audioButtonAnchorsFill = 'undefined';
785812 audioButtonWidth = 'height';
786− audioButtonHeight = '(root.fixedHeaderHeight > 0 ? root.fixedHeaderHeight : headerHeight) + 2 * units.gu(1)';
813+ audioButtonHeight = isCardTool ? 'headerHeight + 2 * units.gu(1)'
814+ : 'root.fixedHeaderHeight + 2 * units.gu(1)';
787815 }
788− code += kAudioButtonCode.arg(audioButtonAnchorsFill).arg(audioButtonWidth).arg(audioButtonHeight);
816+ code += kAudioButtonCode.arg(audioButtonAnchorsFill).arg(audioButtonWidth).arg(audioButtonHeight).arg(asynchronous);
789817 }
790818
791819 if (hasSummary) {
@@ -854,13 +882,13 @@ function cardString(template, components) {
854882 return code;
855883}
856884
857−function createCardComponent(parent, template, components, identifier) {
885+function createCardComponent(parent, template, components, isCardTool, identifier) {
858886 var imports = 'import QtQuick 2.4; \n\
859887 import Ubuntu.Components 1.3; \n\
860888 import Ubuntu.Settings.Components 0.1; \n\
861889 import Dash 0.1;\n\
862890 import Utils 0.1;\n';
863− var card = cardString(template, components);
891+ var card = cardString(template, components, isCardTool);
864892 var code = imports + 'Component {\n' + card + '}\n';
865893
866894 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/ScopeStyle.qml+1−1
@@ -58,7 +58,7 @@ QtObject {
5858 readonly property url headerLogo: "logo" in d.headerStyle ? d.headerStyle["logo"] : ""
5959
6060 /// Background style for the header
61− readonly property url headerBackground: "background" in d.headerStyle ? d.headerStyle["background"] : "color:///#f5f5f5"
61+ readonly property url headerBackground: "background" in d.headerStyle ? d.headerStyle["background"] : "color:///#ffffff"
6262
6363 /// Foreground color for the header
6464 readonly property color headerForeground: "foreground-color" in d.headerStyle ? d.headerStyle["foreground-color"] : foreground
plugins/Dash/listviewwithpageheader.cpp+29−12
@@ -285,7 +285,7 @@ void ListViewWithPageHeader::setSectionDelegate(QQmlComponent *delegate)
285285
286286 m_sectionDelegate = delegate;
287287
288− m_topSectionItem = getSectionItem(QString());
288+ m_topSectionItem = getSectionItem(QString(), false /*watchGeometry*/);
289289 m_topSectionItem->setZ(3);
290290 QQuickItemPrivate::get(m_topSectionItem)->setCulled(true);
291291 connect(m_topSectionItem, &QQuickItem::heightChanged, this, &ListViewWithPageHeader::stickyHeaderHeightChanged);
@@ -514,6 +514,11 @@ qreal ListViewWithPageHeader::minYExtent() const
514514 return m_minYExtent;
515515}
516516
517+qreal ListViewWithPageHeader::maxYExtent() const
518+{
519+ return height() - contentHeight();
520+}
521+
517522void ListViewWithPageHeader::componentComplete()
518523{
519524 if (m_delegateModel)
@@ -700,8 +705,10 @@ void ListViewWithPageHeader::reallyReleaseItem(ListItem *listItem)
700705
701706void ListViewWithPageHeader::releaseItem(ListItem *listItem)
702707{
703− QQuickItemPrivate *itemPrivate = QQuickItemPrivate::get(listItem->m_item);
704− itemPrivate->removeItemChangeListener(this, QQuickItemPrivate::Geometry);
708+ QQuickItemPrivate::get(listItem->m_item)->removeItemChangeListener(this, QQuickItemPrivate::Geometry);
709+ if (listItem->sectionItem()) {
710+ QQuickItemPrivate::get(listItem->sectionItem())->removeItemChangeListener(this, QQuickItemPrivate::Geometry);
711+ }
705712 m_itemsToRelease << listItem;
706713}
707714
@@ -744,7 +751,7 @@ QQuickItem *ListViewWithPageHeader::getSectionItem(int modelIndex, bool alreadyI
744751 return getSectionItem(section);
745752}
746753
747−QQuickItem *ListViewWithPageHeader::getSectionItem(const QString &sectionText)
754+QQuickItem *ListViewWithPageHeader::getSectionItem(const QString &sectionText, bool watchGeometry)
748755{
749756 QQuickItem *sectionItem = nullptr;
750757
@@ -768,7 +775,9 @@ QQuickItem *ListViewWithPageHeader::getSectionItem(const QString &sectionText)
768775 }
769776 m_sectionDelegate->completeCreate();
770777
771− // TODO attach to sectionItem so we can accomodate to it changing its height
778+ if (watchGeometry) {
779+ QQuickItemPrivate::get(sectionItem)->addItemChangeListener(this, QQuickItemPrivate::Geometry);
780+ }
772781
773782 return sectionItem;
774783}
@@ -1126,15 +1135,23 @@ void ListViewWithPageHeader::contentYAnimationRunningChanged(bool running)
11261135 }
11271136}
11281137
1129−void ListViewWithPageHeader::itemGeometryChanged(QQuickItem * /*item*/, const QRectF &newGeometry, const QRectF &oldGeometry)
1138+void ListViewWithPageHeader::itemGeometryChanged(QQuickItem *item, const QRectF &newGeometry, const QRectF &oldGeometry)
11301139{
11311140 const qreal heightDiff = newGeometry.height() - oldGeometry.height();
11321141 if (heightDiff != 0) {
1133− if (!m_inContentHeightKeepHeaderShown && oldGeometry.y() + oldGeometry.height() + m_clipItem->y() <= contentY() && !m_visibleItems.isEmpty()) {
1142+ if (!m_visibleItems.isEmpty()) {
11341143 ListItem *firstItem = m_visibleItems.first();
1135− firstItem->setY(firstItem->y() - heightDiff);
1136− adjustMinYExtent();
1137− layout();
1144+ const auto prevFirstItemY = firstItem->y();
1145+ if (!m_inContentHeightKeepHeaderShown && oldGeometry.y() + oldGeometry.height() + m_clipItem->y() <= contentY()) {
1146+ firstItem->setY(firstItem->y() - heightDiff);
1147+ } else if (item == firstItem->sectionItem()) {
1148+ firstItem->setY(firstItem->y() + heightDiff);
1149+ }
1150+
1151+ if (firstItem->y() != prevFirstItemY) {
1152+ adjustMinYExtent();
1153+ layout();
1154+ }
11381155 }
11391156 refill();
11401157 adjustMinYExtent();
@@ -1186,7 +1203,7 @@ void ListViewWithPageHeader::headerHeightChanged(qreal newHeaderHeight, qreal ol
11861203
11871204void ListViewWithPageHeader::adjustMinYExtent()
11881205{
1189− if (m_visibleItems.isEmpty() || contentHeight() < height()) {
1206+ if (m_visibleItems.isEmpty() || (contentHeight() + m_minYExtent < height())) {
11901207 m_minYExtent = 0;
11911208 } else {
11921209 qreal nonCreatedHeight = 0;
@@ -1368,7 +1385,7 @@ void ListViewWithPageHeader::updatePolish()
13681385
13691386 m_contentHeightDirty = false;
13701387 adjustMinYExtent();
1371− if (contentHeight < height()) {
1388+ if (contentHeight + m_minYExtent < height()) {
13721389 // need this since in the previous call to adjustMinYExtent contentHeight is not set yet
13731390 m_minYExtent = 0;
13741391 }
plugins/Dash/listviewwithpageheader.h+2−1
@@ -115,6 +115,7 @@ protected:
115115 void componentComplete() override;
116116 void viewportMoved(Qt::Orientations orient) override;
117117 qreal minYExtent() const override;
118+ qreal maxYExtent() const override;
118119 void itemGeometryChanged(QQuickItem *item, const QRectF &newGeometry, const QRectF &oldGeometry) override;
119120 void itemImplicitHeightChanged(QQuickItem *item) override;
120121 void updatePolish() override;
@@ -166,7 +167,7 @@ private:
166167 void reallyReleaseItem(ListItem *item);
167168 void updateWatchedRoles();
168169 QQuickItem *getSectionItem(int modelIndex, bool alreadyInserted);
169− QQuickItem *getSectionItem(const QString &sectionText);
170+ QQuickItem *getSectionItem(const QString &sectionText, bool watchGeometry = true);
170171 void updateSectionItem(int modelIndex);
171172 void initializeValuesForEmptyList();
172173
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/ScreenGrabber/screengrabber.cpp−2
@@ -46,12 +46,10 @@ ScreenGrabber::ScreenGrabber(QObject *parent)
4646
4747 QDir screenshotsDir;
4848 if (qEnvironmentVariableIsSet("UNITY_TESTING")) {
49− qDebug() << "Using test environment";
5049 QTemporaryDir tDir;
5150 tDir.setAutoRemove(false);
5251 screenshotsDir = tDir.path();
5352 } else {
54− qDebug() << "Using real environment";
5553 screenshotsDir = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation);
5654 }
5755 screenshotsDir.mkpath(QStringLiteral("Screenshots"));
plugins/SessionBroadcast/CMakeLists.txt+5
@@ -1,3 +1,4 @@
1+include_directories(${GLIB_INCLUDE_DIRS})
12add_definitions(-DSM_BUSNAME=systemBus)
23
34add_library(SessionBroadcast-qml MODULE
@@ -7,4 +8,8 @@ add_library(SessionBroadcast-qml MODULE
78
89qt5_use_modules(SessionBroadcast-qml DBus Qml)
910
11+target_link_libraries(SessionBroadcast-qml
12+ ${GLIB_LIBRARIES}
13+ )
14+
1015add_unity8_plugin(SessionBroadcast 0.1 SessionBroadcast TARGETS SessionBroadcast-qml)
plugins/SessionBroadcast/SessionBroadcast.cpp+5−1
@@ -19,9 +19,13 @@
1919#include "SessionBroadcast.h"
2020#include <QDBusConnection>
2121
22+#include <glib.h>
23+
2224SessionBroadcast::SessionBroadcast(QObject* parent)
2325 : QObject(parent)
2426{
27+ m_username = QString::fromUtf8(g_get_user_name());
28+
2529 auto connection = QDBusConnection::SM_BUSNAME();
2630
2731 connection.connect(QStringLiteral("com.canonical.Unity.Greeter.Broadcast"),
@@ -35,7 +39,7 @@ SessionBroadcast::SessionBroadcast(QObject* parent)
3539void SessionBroadcast::onShowHome(const QString &username)
3640{
3741 // Only listen to requests meant for us
38− if (username == qgetenv("USER")) {
42+ if (username == m_username) {
3943 Q_EMIT showHome();
4044 }
4145}
plugins/SessionBroadcast/SessionBroadcast.h+3
@@ -36,6 +36,9 @@ Q_SIGNALS:
3636
3737private Q_SLOTS:
3838 void onShowHome(const QString &username);
39+
40+private:
41+ QString m_username;
3942};
4043
4144#endif
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+43−5
@@ -194,6 +194,26 @@ void DirectionalDragArea::setImmediateRecognition(bool enabled)
194194 }
195195}
196196
197+bool DirectionalDragArea::monitorOnly() const
198+{
199+ return d->monitorOnly;
200+}
201+
202+void DirectionalDragArea::setMonitorOnly(bool monitorOnly)
203+{
204+ if (d->monitorOnly != monitorOnly) {
205+ d->monitorOnly = monitorOnly;
206+
207+ if (monitorOnly && d->status == DirectionalDragAreaPrivate::Undecided) {
208+ TouchRegistry::instance()->removeCandidateOwnerForTouch(d->touchId, this);
209+ // We still wanna know when it ends for keeping the composition time window up-to-date
210+ TouchRegistry::instance()->addTouchWatcher(d->touchId, this);
211+ }
212+
213+ Q_EMIT monitorOnlyChanged(monitorOnly);
214+ }
215+}
216+
197217void DirectionalDragArea::removeTimeConstraints()
198218{
199219 d->setMaxTime(60 * 60 * 1000);
@@ -260,7 +280,10 @@ void DirectionalDragAreaPrivate::unownedTouchEvent(UnownedTouchEvent *unownedTou
260280 unownedTouchEvent_undecided(unownedTouchEvent);
261281 break;
262282 default: // Recognized:
263− // do nothing
283+ if (monitorOnly) {
284+ // Treat unowned event as if we owned it, but we are really just watching it
285+ touchEvent_recognized(event);
286+ }
264287 break;
265288 }
266289
@@ -311,7 +334,9 @@ void DirectionalDragAreaPrivate::unownedTouchEvent_undecided(UnownedTouchEvent *
311334 }
312335
313336 if (movedFarEnoughAlongGestureAxis()) {
314− TouchRegistry::instance()->requestTouchOwnership(touchId, q);
337+ if (!monitorOnly) {
338+ TouchRegistry::instance()->requestTouchOwnership(touchId, q);
339+ }
315340 setStatus(Recognized);
316341 setPublicPos(touchPoint->pos());
317342 setPublicScenePos(touchScenePos);
@@ -411,12 +436,21 @@ void DirectionalDragAreaPrivate::touchEvent_absent(QTouchEvent *event)
411436 if (recognitionIsDisabled()) {
412437 // Behave like a dumb TouchArea
413438 ddaDebug("Gesture recognition is disabled. Requesting touch ownership immediately.");
414− TouchRegistry::instance()->requestTouchOwnership(touchId, q);
415439 setStatus(Recognized);
416− event->accept();
440+ if (monitorOnly) {
441+ watchPressedTouchPoints(touchPoints);
442+ event->ignore();
443+ } else {
444+ TouchRegistry::instance()->requestTouchOwnership(touchId, q);
445+ event->accept();
446+ }
417447 } else {
418448 // just monitor the touch points for now.
419− TouchRegistry::instance()->addCandidateOwnerForTouch(touchId, q);
449+ if (monitorOnly) {
450+ watchPressedTouchPoints(touchPoints);
451+ } else {
452+ TouchRegistry::instance()->addCandidateOwnerForTouch(touchId, q);
453+ }
420454
421455 setStatus(Undecided);
422456 // Let the item below have it. We will monitor it and grab it later if a gesture
@@ -606,6 +640,9 @@ void DirectionalDragAreaPrivate::setStatus(Status newStatus)
606640 Q_EMIT q->pressedChanged(true);
607641 break;
608642 case Recognized:
643+ if (oldStatus == WaitingForTouch) { // for immediate recognition
644+ Q_EMIT q->pressedChanged(true);
645+ }
609646 Q_EMIT q->draggingChanged(true);
610647 break;
611648 default:
@@ -890,5 +927,6 @@ DirectionalDragAreaPrivate::DirectionalDragAreaPrivate(DirectionalDragArea *q)
890927 , recognitionTimer(nullptr)
891928 , timeSource(new RealTimeSource)
892929 , activeTouches(timeSource)
930+ , monitorOnly(false)
893931{
894932}
plugins/Ubuntu/Gestures/DirectionalDragArea.h+8
@@ -77,6 +77,10 @@ class UBUNTUGESTURESQML_EXPORT DirectionalDragArea : public QQuickItem {
7777 WRITE setImmediateRecognition
7878 NOTIFY immediateRecognitionChanged)
7979
80+ // Whether we are merely monitoring touch events (in which case, we don't
81+ // claim ownership of the touch).
82+ Q_PROPERTY(bool monitorOnly READ monitorOnly WRITE setMonitorOnly NOTIFY monitorOnlyChanged)
83+
8084 Q_ENUMS(Direction)
8185public:
8286 DirectionalDragArea(QQuickItem *parent = 0);
@@ -100,6 +104,9 @@ public:
100104 bool immediateRecognition() const;
101105 void setImmediateRecognition(bool enabled);
102106
107+ bool monitorOnly() const;
108+ void setMonitorOnly(bool monitorOnly);
109+
103110 bool event(QEvent *e) override;
104111
105112 /*
@@ -123,6 +130,7 @@ Q_SIGNALS:
123130 void touchSceneXChanged(qreal value);
124131 void touchSceneYChanged(qreal value);
125132 void immediateRecognitionChanged(bool value);
133+ void monitorOnlyChanged(bool value);
126134
127135protected:
128136 void touchEvent(QTouchEvent *event) override;
plugins/Ubuntu/Gestures/DirectionalDragArea_p.h+2
@@ -160,6 +160,8 @@ public:
160160
161161 ActiveTouchesInfo activeTouches;
162162
163+ bool monitorOnly;
164+
163165Q_SIGNALS:
164166 void statusChanged(Status value);
165167};
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+5−7
@@ -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: Nick Dedekind <nick.dedekind@canonical.com>
1715 */
1816
1917#include "indicatorsmanager.h"
@@ -116,7 +114,7 @@ void IndicatorsManager::loadFile(const QFileInfo& file_info)
116114 QSettings indicator_settings(file_info.absoluteFilePath(), QSettings::IniFormat, this);
117115 const QString name = indicator_settings.value(QStringLiteral("Indicator Service/Name")).toString();
118116
119− if (m_platform.isPC() && name == "indicator-keyboard") {
117+ if (m_platform.isPC() && name == QLatin1String("indicator-keyboard")) {
120118 return; // convergence: skip this indicator until it works in Mir
121119 }
122120
@@ -286,14 +284,14 @@ Indicator::Ptr IndicatorsManager::indicator(const QString& indicator_name)
286284 new_indicator->init(data->m_fileInfo.fileName(), settings);
287285
288286 // convergence:
289− // 1) enable session indicator conditionally, typically when running in a multisession/multiuser environment
287+ // 1) enable session indicator
290288 // 2) on a PC, switch the battery/power indicator to desktop mode,
291289 // can't control brightness for now and phone-on-desktop broken (FIXME)
292290 //
293291 // The rest of the indicators respect their default profile (which is "phone", even on desktop PCs)
294− if ((new_indicator->identifier() == QStringLiteral("indicator-session") && m_platform.isMultiSession())
292+ if ((new_indicator->identifier() == QStringLiteral("indicator-session"))
295293 || (new_indicator->identifier() == QStringLiteral("indicator-power") && m_platform.isPC())) {
296− new_indicator->setProfile("desktop");
294+ new_indicator->setProfile(QStringLiteral("desktop"));
297295 } else {
298296 new_indicator->setProfile(m_profile);
299297 }
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/CMakeLists.txt+2
@@ -7,6 +7,7 @@ include_directories(
77 ${CMAKE_CURRENT_SOURCE_DIR}
88 ${CMAKE_SOURCE_DIR}/plugins/AccountsService
99 ${GSETTINGS_QT_INCLUDE_DIRS}
10+ ${GLIB_INCLUDE_DIRS}
1011 ${libunity8-private_SOURCE_DIR}
1112)
1213
@@ -34,6 +35,7 @@ add_library(UnityLauncher-qml MODULE
3435target_link_libraries(UnityLauncher-qml
3536 unity8-private
3637 ${GSETTINGS_QT_LDFLAGS}
38+ ${GLIB_LIBRARIES}
3739 )
3840
3941qt5_use_modules(UnityLauncher-qml DBus Qml Gui)
plugins/Unity/Launcher/asadapter.cpp+6−2
@@ -18,14 +18,18 @@
1818#include "launcheritem.h"
1919#include "AccountsServiceDBusAdaptor.h"
2020
21+#include <glib.h>
22+
2123#include <QDebug>
2224
2325ASAdapter::ASAdapter()
2426{
2527 m_accounts = new AccountsServiceDBusAdaptor();
26− m_user = qgetenv("USER");
28+
29+ m_user = QString::fromUtf8(g_get_user_name());
30+
2731 if (m_user.isEmpty()) {
28− qWarning() << "$USER not valid. Account Service integration will not work.";
32+ qWarning() << "username not valid. Account Service integration will not work.";
2933 }
3034}
3135
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/Unity/Session/CMakeLists.txt+2
@@ -2,6 +2,7 @@ include_directories(
22 ${CMAKE_CURRENT_SOURCE_DIR}
33 ${CMAKE_CURRENT_BINARY_DIR}
44 ${GIO_INCLUDE_DIRS}
5+ ${GLIB_INCLUDE_DIRS}
56 ${libunity8-private_SOURCE_DIR}
67)
78
@@ -19,6 +20,7 @@ qt5_use_modules(UnitySession-qml DBus Qml)
1920target_link_libraries(UnitySession-qml
2021 unity8-private
2122 ${GIO_LDFLAGS}
23+ ${GLIB_LIBRARIES}
2224 )
2325
2426# export the qmldir and qmltypes files
plugins/Unity/Session/dbusunitysessionservice.cpp+8−7
@@ -30,6 +30,9 @@
3030#include <QDateTime>
3131#include <QDBusUnixFileDescriptor>
3232
33+// Glib
34+#include <glib.h>
35+
3336#define LOGIN1_SERVICE QStringLiteral("org.freedesktop.login1")
3437#define LOGIN1_PATH QStringLiteral("/org/freedesktop/login1")
3538#define LOGIN1_IFACE QStringLiteral("org.freedesktop.login1.Manager")
@@ -295,12 +298,7 @@ bool DBusUnitySessionService::CanLock() const
295298
296299QString DBusUnitySessionService::UserName() const
297300{
298− struct passwd *p = getpwuid(geteuid());
299− if (p) {
300− return QString::fromUtf8(p->pw_name);
301− }
302−
303− return QString();
301+ return QString::fromUtf8(g_get_user_name());
304302}
305303
306304QString DBusUnitySessionService::RealName() const
@@ -336,6 +334,9 @@ void DBusUnitySessionService::PromptLock()
336334
337335void DBusUnitySessionService::Lock()
338336{
337+ // signal u8 to show the lockscreen/greeter
338+ PromptLock();
339+
339340 // lock the session using the org.freedesktop.DisplayManager system DBUS service
340341 const QString sessionPath = QString::fromLocal8Bit(qgetenv("XDG_SESSION_PATH"));
341342 QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("org.freedesktop.DisplayManager"),
@@ -348,7 +349,7 @@ void DBusUnitySessionService::Lock()
348349 connect(watcher, &QDBusPendingCallWatcher::finished,
349350 this, [this](QDBusPendingCallWatcher* watcher) {
350351
351− QDBusPendingReply<QVariant> reply = *watcher;
352+ QDBusPendingReply<void> reply = *watcher;
352353 watcher->deleteLater();
353354 if (reply.isError()) {
354355 qWarning() << "Lock call failed" << reply.error().message();
plugins/Utils/CMakeLists.txt+3−1
@@ -17,12 +17,14 @@ set(QMLPLUGIN_SRC
1717 unitysortfilterproxymodelqml.cpp
1818 Timer.cpp
1919 unitymenumodelpaths.cpp
20− windowkeysfilter.cpp
20+ windowinputfilter.cpp
2121 windowscreenshotprovider.cpp
2222 easingcurve.cpp
2323 windowstatestorage.cpp
2424 timezoneFormatter.cpp
2525 inputeventgenerator.cpp
26+ deviceconfigparser.cpp
27+ globalfunctions.cpp
2628 plugin.cpp
2729 )
2830
plugins/Utils/Utils.qmltypes+2−2
@@ -147,10 +147,10 @@ Module {
147147 }
148148 }
149149 Component {
150− name: "WindowKeysFilter"
150+ name: "WindowInputFilter"
151151 defaultProperty: "data"
152152 prototype: "QQuickItem"
153− exports: ["Utils/WindowKeysFilter 0.1"]
153+ exports: ["Utils/WindowInputFilter 0.1"]
154154 exportMetaObjectRevisions: [0]
155155 }
156156 Component {
plugins/Utils/deviceconfigparser.cppnew file+158
@@ -0,0 +1,158 @@
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+ // Local files have highest priority
27+ QString path;
28+ Q_FOREACH (const QString &standardPath, QStandardPaths::standardLocations(QStandardPaths::GenericConfigLocation)) {
29+ if (QFileInfo(standardPath + "/devices.conf").exists()) {
30+ path = standardPath + "/devices.conf";
31+ break;
32+ }
33+ }
34+
35+ // Check if there is an override in the device tarball (/system/etc/)
36+ if (path.isEmpty() && QFileInfo::exists("/system/etc/ubuntu/devices.conf")) {
37+ path = "/system/etc/ubuntu/devices.conf";
38+ }
39+
40+ // No higher priority files found. Use standard of /etc/
41+ if (path.isEmpty()) {
42+ path = "/etc/ubuntu/devices.conf";
43+ }
44+
45+ qDebug() << "Using" << path << "as device configuration file";
46+ m_config = new QSettings(path, QSettings::IniFormat, this);
47+}
48+
49+QString DeviceConfigParser::name() const
50+{
51+ return m_name;
52+}
53+
54+void DeviceConfigParser::setName(const QString &name)
55+{
56+ if (m_name == name) {
57+ return;
58+ }
59+ m_name = name;
60+ Q_EMIT changed();
61+}
62+
63+Qt::ScreenOrientation DeviceConfigParser::primaryOrientation() const
64+{
65+ return stringToOrientation(readOrientationFromConfig("PrimaryOrientation"), Qt::PrimaryOrientation);
66+}
67+
68+Qt::ScreenOrientations DeviceConfigParser::supportedOrientations() const
69+{
70+ QStringList values = readOrientationsFromConfig("SupportedOrientations");
71+ if (values.isEmpty()) {
72+ return Qt::PortraitOrientation
73+ | Qt::InvertedPortraitOrientation
74+ | Qt::LandscapeOrientation
75+ | Qt::InvertedLandscapeOrientation;
76+ }
77+
78+ Qt::ScreenOrientations ret = Qt::PrimaryOrientation;
79+ Q_FOREACH(const QString &orientationString, values) {
80+ ret |= stringToOrientation(orientationString, Qt::PrimaryOrientation);
81+ }
82+ return ret;
83+}
84+
85+Qt::ScreenOrientation DeviceConfigParser::landscapeOrientation() const
86+{
87+ return stringToOrientation(readOrientationFromConfig("LandscapeOrientation"), Qt::LandscapeOrientation);
88+}
89+
90+Qt::ScreenOrientation DeviceConfigParser::invertedLandscapeOrientation() const
91+{
92+ return stringToOrientation(readOrientationFromConfig("InvertedLandscapeOrientation"), Qt::InvertedLandscapeOrientation);
93+}
94+
95+Qt::ScreenOrientation DeviceConfigParser::portraitOrientation() const
96+{
97+ return stringToOrientation(readOrientationFromConfig("PortraitOrientation"), Qt::PortraitOrientation);
98+}
99+
100+Qt::ScreenOrientation DeviceConfigParser::invertedPortraitOrientation() const
101+{
102+ return stringToOrientation(readOrientationFromConfig("InvertedPortraitOrientation"), Qt::InvertedPortraitOrientation);
103+}
104+
105+QString DeviceConfigParser::category() const
106+{
107+ QStringList supportedValues = {"phone", "tablet", "desktop"};
108+ m_config->beginGroup(m_name);
109+ QString value = m_config->value("Category", "phone").toString();
110+ if (!supportedValues.contains(value)) {
111+ qWarning().nospace().noquote() << "Unknown option \"" << value << "\" in " << m_config->fileName()
112+ << ". Supported options are: " << supportedValues.join(", ") << ".";
113+ return "phone";
114+ }
115+ m_config->endGroup();
116+ return value;
117+}
118+
119+QStringList DeviceConfigParser::readOrientationsFromConfig(const QString &key) const
120+{
121+ m_config->beginGroup(m_name);
122+
123+ QStringList ret;
124+ if (m_config->contains(key)) {
125+ ret = m_config->value(key).toStringList();
126+ }
127+
128+ m_config->endGroup();
129+ return ret;
130+}
131+
132+QString DeviceConfigParser::readOrientationFromConfig(const QString &key) const
133+{
134+ QStringList ret = readOrientationsFromConfig(key);
135+ return ret.count() > 0 ? ret.first() : QString();
136+}
137+
138+Qt::ScreenOrientation DeviceConfigParser::stringToOrientation(const QString &orientationString, Qt::ScreenOrientation defaultValue) const
139+{
140+ if (orientationString == "Landscape") {
141+ return Qt::LandscapeOrientation;
142+ }
143+ if (orientationString == "InvertedLandscape") {
144+ return Qt::InvertedLandscapeOrientation;
145+ }
146+ if (orientationString == "Portrait") {
147+ return Qt::PortraitOrientation;
148+ }
149+ if (orientationString == "InvertedPortrait") {
150+ return Qt::InvertedPortraitOrientation;
151+ }
152+ if (!orientationString.isEmpty()) {
153+ // Some option we don't know. Give some hint on what went wrong.
154+ qWarning().nospace().noquote() << "Unknown option \"" << orientationString << "\" in " << m_config->fileName()
155+ << ". Supported options are: Landscape, InvertedLandscape, Portrait and InvertedPortrait.";
156+ }
157+ return defaultValue;
158+}
plugins/Utils/deviceconfigparser.hnew file+63
@@ -0,0 +1,63 @@
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+ // NOTE: When changing this properties, also update the examples in docs and data
29+ Q_PROPERTY(Qt::ScreenOrientation primaryOrientation READ primaryOrientation NOTIFY changed)
30+ Q_PROPERTY(Qt::ScreenOrientations supportedOrientations READ supportedOrientations NOTIFY changed)
31+ Q_PROPERTY(Qt::ScreenOrientation landscapeOrientation READ landscapeOrientation NOTIFY changed)
32+ Q_PROPERTY(Qt::ScreenOrientation invertedLandscapeOrientation READ invertedLandscapeOrientation NOTIFY changed)
33+ Q_PROPERTY(Qt::ScreenOrientation portraitOrientation READ portraitOrientation NOTIFY changed)
34+ Q_PROPERTY(Qt::ScreenOrientation invertedPortraitOrientation READ invertedPortraitOrientation NOTIFY changed)
35+ Q_PROPERTY(QString category READ category NOTIFY changed)
36+
37+public:
38+ DeviceConfigParser(QObject *parent = nullptr);
39+
40+ QString name() const;
41+ void setName(const QString &name);
42+
43+ Qt::ScreenOrientation primaryOrientation() const;
44+ Qt::ScreenOrientations supportedOrientations() const;
45+ Qt::ScreenOrientation landscapeOrientation() const;
46+ Qt::ScreenOrientation invertedLandscapeOrientation() const;
47+ Qt::ScreenOrientation portraitOrientation() const;
48+ Qt::ScreenOrientation invertedPortraitOrientation() const;
49+ QString category() const;
50+
51+Q_SIGNALS:
52+ void changed();
53+
54+private:
55+ QString m_name;
56+ QSettings *m_config;
57+
58+ QStringList readOrientationsFromConfig(const QString &key) const;
59+ QString readOrientationFromConfig(const QString &key) const;
60+ Qt::ScreenOrientation stringToOrientation(const QString &orientationString, Qt::ScreenOrientation defaultValue) const;
61+};
62+
63+#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+13−2
@@ -30,13 +30,15 @@
3030#include "qlimitproxymodelqml.h"
3131#include "unitysortfilterproxymodelqml.h"
3232#include "unitymenumodelpaths.h"
33−#include "windowkeysfilter.h"
33+#include "windowinputfilter.h"
3434#include "windowscreenshotprovider.h"
3535#include "windowstatestorage.h"
3636#include "constants.h"
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"));
@@ -60,7 +69,7 @@ void UtilsPlugin::registerTypes(const char *uri)
6069 qmlRegisterType<QLimitProxyModelQML>(uri, 0, 1, "LimitProxyModel");
6170 qmlRegisterType<UnitySortFilterProxyModelQML>(uri, 0, 1, "UnitySortFilterProxyModel");
6271 qmlRegisterType<UnityMenuModelPaths>(uri, 0, 1, "UnityMenuModelPaths");
63− qmlRegisterType<WindowKeysFilter>(uri, 0, 1, "WindowKeysFilter");
72+ qmlRegisterType<WindowInputFilter>(uri, 0, 1, "WindowInputFilter");
6473 qmlRegisterType<EasingCurve>(uri, 0, 1, "EasingCurve");
6574 qmlRegisterSingletonType<WindowStateStorage>(uri, 0, 1, "WindowStateStorage", createWindowStateStorage);
6675 qmlRegisterType<InputWatcher>(uri, 0, 1, "InputWatcher");
@@ -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/windowkeysfilter.cpp → plugins/Utils/windowinputfilter.cpprenamed+14−16
@@ -16,36 +16,34 @@
1616 * Author: Daniel d'Andrada <daniel.dandrada@canonical.com>
1717 */
1818
19−#include "windowkeysfilter.h"
19+#include "windowinputfilter.h"
2020
2121#include <QQuickWindow>
2222
23−WindowKeysFilter::WindowKeysFilter(QQuickItem *parent)
23+WindowInputFilter::WindowInputFilter(QQuickItem *parent)
2424 : QQuickItem(parent),
25− m_currentEventTimestamp(0)
25+ m_lastInputTimestamp(0)
2626{
2727 connect(this, &QQuickItem::windowChanged,
28− this, &WindowKeysFilter::setupFilterOnWindow);
28+ this, &WindowInputFilter::setupFilterOnWindow);
2929}
3030
31−bool WindowKeysFilter::eventFilter(QObject *watched, QEvent *event)
31+bool WindowInputFilter::eventFilter(QObject *watched, QEvent *event)
3232{
3333 Q_ASSERT(!m_filteredWindow.isNull());
3434 Q_ASSERT(watched == static_cast<QObject*>(m_filteredWindow.data()));
3535 Q_UNUSED(watched);
3636
37+ QInputEvent *inputEvent = dynamic_cast<QInputEvent*>(event);
38+ if (inputEvent) {
39+ m_lastInputTimestamp = inputEvent->timestamp();
40+ Q_EMIT lastInputTimestampChanged();
41+ }
42+
3743 if (event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease) {
3844 // Let QML see this event and decide if it does not want it
3945 event->accept();
40−
41− m_currentEventTimestamp = static_cast<QInputEvent*>(event)->timestamp();
42− Q_EMIT currentEventTimestampChanged();
43−
4446 QCoreApplication::sendEvent(this, event);
45−
46− m_currentEventTimestamp = 0;
47− Q_EMIT currentEventTimestampChanged();
48−
4947 return event->isAccepted();
5048 } else {
5149 // Not interested
@@ -53,7 +51,7 @@ bool WindowKeysFilter::eventFilter(QObject *watched, QEvent *event)
5351 }
5452}
5553
56−void WindowKeysFilter::setupFilterOnWindow(QQuickWindow *window)
54+void WindowInputFilter::setupFilterOnWindow(QQuickWindow *window)
5755{
5856 if (!m_filteredWindow.isNull()) {
5957 m_filteredWindow->removeEventFilter(this);
@@ -66,7 +64,7 @@ void WindowKeysFilter::setupFilterOnWindow(QQuickWindow *window)
6664 }
6765}
6866
69−ulong WindowKeysFilter::currentEventTimestamp() const
67+ulong WindowInputFilter::lastInputTimestamp() const
7068{
71− return m_currentEventTimestamp;
69+ return m_lastInputTimestamp;
7270}
plugins/Utils/windowkeysfilter.h → plugins/Utils/windowinputfilter.hrenamed+11−11
@@ -16,8 +16,8 @@
1616 * Author: Daniel d'Andrada <daniel.dandrada@canonical.com>
1717 */
1818
19−#ifndef UNITY_WINDOWKEYSFILTER_H
20−#define UNITY_WINDOWKEYSFILTER_H
19+#ifndef UNITY_WINDOWINPUTFILTER_H
20+#define UNITY_WINDOWINPUTFILTER_H
2121
2222#include <QQuickItem>
2323#include <QPointer>
@@ -29,30 +29,30 @@
2929 accepted ones will be filtered out. Events are accepted by default, so make sure you reject
3030 the keys you're not interested in.
3131
32− If more than one WindowKeysFilter exist in the same QML scene (and thus in the same QQuickWindow)
32+ If more than one WindowInputFilter exist in the same QML scene (and thus in the same QQuickWindow)
3333 they will be called in the order of creation, which can be tricky to assess. So the best practice
34− is to have at most one WindowKeysFilter per QML scene.
34+ is to have at most one WindowInputFilter per QML scene.
3535 */
36−class WindowKeysFilter : public QQuickItem
36+class WindowInputFilter : public QQuickItem
3737{
3838 Q_OBJECT
39− Q_PROPERTY(ulong currentEventTimestamp READ currentEventTimestamp NOTIFY currentEventTimestampChanged)
39+ Q_PROPERTY(ulong lastInputTimestamp READ lastInputTimestamp NOTIFY lastInputTimestampChanged)
4040public:
41− WindowKeysFilter(QQuickItem *parent = 0);
41+ WindowInputFilter(QQuickItem *parent = 0);
4242
4343 bool eventFilter(QObject *watched, QEvent *event) override;
4444
45− ulong currentEventTimestamp() const;
45+ ulong lastInputTimestamp() const;
4646
4747Q_SIGNALS:
48− void currentEventTimestampChanged();
48+ void lastInputTimestampChanged();
4949
5050private Q_SLOTS:
5151 void setupFilterOnWindow(QQuickWindow *window);
5252
5353private:
5454 QPointer<QQuickWindow> m_filteredWindow;
55− ulong m_currentEventTimestamp;
55+ ulong m_lastInputTimestamp;
5656};
5757
58−#endif // UNITY_WINDOWKEYSFILTER_H
58+#endif // UNITY_WINDOWINPUTFILTER_H
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/WindowManager/CMakeLists.txtnew file+13
@@ -0,0 +1,13 @@
1+set(WINDOWMANAGER_SRC
2+ TopLevelSurfaceList.cpp
3+ WindowManagerPlugin.cpp
4+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
5+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/Mir.h
6+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceInterface.h
7+ )
8+
9+add_library(windowmanager-qml SHARED ${WINDOWMANAGER_SRC})
10+
11+qt5_use_modules(windowmanager-qml Qml Quick Gui)
12+
13+add_unity8_plugin(WindowManager 0.1 WindowManager TARGETS windowmanager-qml)
plugins/WindowManager/TopLevelSurfaceList.cppnew file+486
@@ -0,0 +1,486 @@
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 "TopLevelSurfaceList.h"
18+
19+// unity-api
20+#include <unity/shell/application/ApplicationInfoInterface.h>
21+#include <unity/shell/application/MirSurfaceInterface.h>
22+#include <unity/shell/application/MirSurfaceListInterface.h>
23+
24+#include <QMetaObject>
25+
26+Q_LOGGING_CATEGORY(UNITY_TOPSURFACELIST, "unity.topsurfacelist", QtDebugMsg)
27+
28+#define DEBUG_MSG qCDebug(UNITY_TOPSURFACELIST).nospace().noquote() << __func__
29+
30+using namespace unity::shell::application;
31+
32+TopLevelSurfaceList::TopLevelSurfaceList(QObject *parent) :
33+ QAbstractListModel(parent)
34+{
35+ DEBUG_MSG << "()";
36+}
37+
38+TopLevelSurfaceList::~TopLevelSurfaceList()
39+{
40+ DEBUG_MSG << "()";
41+}
42+
43+int TopLevelSurfaceList::rowCount(const QModelIndex &parent) const
44+{
45+ return !parent.isValid() ? m_surfaceList.size() : 0;
46+}
47+
48+QVariant TopLevelSurfaceList::data(const QModelIndex& index, int role) const
49+{
50+ if (index.row() < 0 || index.row() >= m_surfaceList.size())
51+ return QVariant();
52+
53+ if (role == SurfaceRole) {
54+ MirSurfaceInterface *surface = m_surfaceList.at(index.row()).surface;
55+ return QVariant::fromValue(surface);
56+ } else if (role == ApplicationRole) {
57+ return QVariant::fromValue(m_surfaceList.at(index.row()).application);
58+ } else if (role == IdRole) {
59+ return QVariant::fromValue(m_surfaceList.at(index.row()).id);
60+ } else {
61+ return QVariant();
62+ }
63+}
64+
65+void TopLevelSurfaceList::raise(MirSurfaceInterface *surface)
66+{
67+ if (!surface)
68+ return;
69+
70+ DEBUG_MSG << "(MirSurface[" << (void*)surface << "])";
71+
72+ int i = indexOf(surface);
73+ if (i != -1) {
74+ raiseId(m_surfaceList.at(i).id);
75+ }
76+}
77+
78+void TopLevelSurfaceList::appendPlaceholder(ApplicationInfoInterface *application)
79+{
80+ DEBUG_MSG << "(" << application->appId() << ")";
81+
82+ appendSurfaceHelper(nullptr, application);
83+}
84+
85+void TopLevelSurfaceList::appendSurface(MirSurfaceInterface *surface, ApplicationInfoInterface *application)
86+{
87+ Q_ASSERT(surface != nullptr);
88+
89+ bool filledPlaceholder = false;
90+ for (int i = 0; i < m_surfaceList.count() && !filledPlaceholder; ++i) {
91+ ModelEntry &entry = m_surfaceList[i];
92+ if (entry.application == application && entry.surface == nullptr) {
93+ entry.surface = surface;
94+ connectSurface(surface);
95+ DEBUG_MSG << " appId=" << application->appId() << " surface=" << surface
96+ << ", filling out placeholder. after: " << toString();
97+ Q_EMIT dataChanged(index(i) /* topLeft */, index(i) /* bottomRight */, QVector<int>() << SurfaceRole);
98+ filledPlaceholder = true;
99+ }
100+ }
101+
102+ if (!filledPlaceholder) {
103+ DEBUG_MSG << " appId=" << application->appId() << " surface=" << surface << ", adding new row";
104+ appendSurfaceHelper(surface, application);
105+ }
106+}
107+
108+void TopLevelSurfaceList::appendSurfaceHelper(MirSurfaceInterface *surface, ApplicationInfoInterface *application)
109+{
110+ if (m_modelState == IdleState) {
111+ m_modelState = InsertingState;
112+ beginInsertRows(QModelIndex(), m_surfaceList.size() /*first*/, m_surfaceList.size() /*last*/);
113+ } else {
114+ Q_ASSERT(m_modelState == ResettingState);
115+ // No point in signaling anything if we're resetting the whole model
116+ }
117+
118+ int id = generateId();
119+ m_surfaceList.append(ModelEntry(surface, application, id));
120+ if (surface) {
121+ connectSurface(surface);
122+ }
123+
124+ if (m_modelState == InsertingState) {
125+ endInsertRows();
126+ Q_EMIT countChanged();
127+ Q_EMIT listChanged();
128+ m_modelState = IdleState;
129+ }
130+
131+ DEBUG_MSG << " after " << toString();
132+}
133+
134+void TopLevelSurfaceList::connectSurface(MirSurfaceInterface *surface)
135+{
136+ connect(surface, &MirSurfaceInterface::focusedChanged, this, [this, surface](bool focused){
137+ if (focused) {
138+ this->raise(surface);
139+ }
140+ });
141+ connect(surface, &MirSurfaceInterface::liveChanged, this, [this, surface](bool live){
142+ if (!live) {
143+ onSurfaceDied(surface);
144+ }
145+ });
146+ connect(surface, &QObject::destroyed, this, [this, surface](){ this->onSurfaceDestroyed(surface); });
147+}
148+
149+void TopLevelSurfaceList::onSurfaceDied(MirSurfaceInterface *surface)
150+{
151+ int i = indexOf(surface);
152+ if (i == -1) {
153+ return;
154+ }
155+
156+ auto application = m_surfaceList[i].application;
157+
158+ // can't be starting if it already has a surface
159+ Q_ASSERT(application->state() != ApplicationInfoInterface::Starting);
160+
161+ if (application->state() == ApplicationInfoInterface::Running) {
162+ m_surfaceList[i].removeOnceSurfaceDestroyed = true;
163+ } else {
164+ // assume it got killed by the out-of-memory daemon.
165+ //
166+ // So leave entry in the model and only remove its surface, so shell can display a screenshot
167+ // in its place.
168+ m_surfaceList[i].removeOnceSurfaceDestroyed = false;
169+ }
170+}
171+
172+void TopLevelSurfaceList::onSurfaceDestroyed(MirSurfaceInterface *surface)
173+{
174+ int i = indexOf(surface);
175+ if (i == -1) {
176+ return;
177+ }
178+
179+ if (m_surfaceList[i].removeOnceSurfaceDestroyed) {
180+ removeAt(i);
181+ } else {
182+ m_surfaceList[i].surface = nullptr;
183+ Q_EMIT dataChanged(index(i) /* topLeft */, index(i) /* bottomRight */, QVector<int>() << SurfaceRole);
184+ DEBUG_MSG << " Removed surface from entry. After: " << toString();
185+ }
186+}
187+
188+void TopLevelSurfaceList::removeAt(int index)
189+{
190+ if (m_modelState == IdleState) {
191+ beginRemoveRows(QModelIndex(), index, index);
192+ m_modelState = RemovingState;
193+ } else {
194+ Q_ASSERT(m_modelState == ResettingState);
195+ // No point in signaling anything if we're resetting the whole model
196+ }
197+
198+ m_surfaceList.removeAt(index);
199+
200+ if (m_modelState == RemovingState) {
201+ endRemoveRows();
202+ Q_EMIT countChanged();
203+ Q_EMIT listChanged();
204+ m_modelState = IdleState;
205+ }
206+
207+ DEBUG_MSG << " after " << toString();
208+}
209+
210+int TopLevelSurfaceList::indexOf(MirSurfaceInterface *surface)
211+{
212+ for (int i = 0; i < m_surfaceList.count(); ++i) {
213+ if (m_surfaceList.at(i).surface == surface) {
214+ return i;
215+ }
216+ }
217+ return -1;
218+}
219+
220+void TopLevelSurfaceList::move(int from, int to)
221+{
222+ if (from == to) return;
223+ DEBUG_MSG << " from=" << from << " to=" << to;
224+
225+ if (from >= 0 && from < m_surfaceList.size() && to >= 0 && to < m_surfaceList.size()) {
226+ QModelIndex parent;
227+ /* When moving an item down, the destination index needs to be incremented
228+ by one, as explained in the documentation:
229+ http://qt-project.org/doc/qt-5.0/qtcore/qabstractitemmodel.html#beginMoveRows */
230+
231+ Q_ASSERT(m_modelState == IdleState);
232+ m_modelState = MovingState;
233+
234+ beginMoveRows(parent, from, from, parent, to + (to > from ? 1 : 0));
235+ m_surfaceList.move(from, to);
236+ endMoveRows();
237+ Q_EMIT listChanged();
238+
239+ m_modelState = IdleState;
240+
241+ DEBUG_MSG << " after " << toString();
242+ }
243+}
244+
245+MirSurfaceInterface *TopLevelSurfaceList::surfaceAt(int index) const
246+{
247+ if (index >=0 && index < m_surfaceList.count()) {
248+ return m_surfaceList[index].surface;
249+ } else {
250+ return nullptr;
251+ }
252+}
253+
254+ApplicationInfoInterface *TopLevelSurfaceList::applicationAt(int index) const
255+{
256+ if (index >=0 && index < m_surfaceList.count()) {
257+ return m_surfaceList[index].application;
258+ } else {
259+ return nullptr;
260+ }
261+}
262+
263+int TopLevelSurfaceList::idAt(int index) const
264+{
265+ if (index >=0 && index < m_surfaceList.count()) {
266+ return m_surfaceList[index].id;
267+ } else {
268+ return 0;
269+ }
270+}
271+
272+int TopLevelSurfaceList::indexForId(int id) const
273+{
274+ for (int i = 0; i < m_surfaceList.count(); ++i) {
275+ if (m_surfaceList[i].id == id) {
276+ return i;
277+ }
278+ }
279+ return -1;
280+}
281+
282+void TopLevelSurfaceList::doRaiseId(int id)
283+{
284+ int fromIndex = indexForId(id);
285+ if (fromIndex != -1) {
286+ move(fromIndex, 0 /* toIndex */);
287+ }
288+}
289+
290+void TopLevelSurfaceList::raiseId(int id)
291+{
292+ if (m_modelState == IdleState) {
293+ DEBUG_MSG << "(id=" << id << ") - do it now.";
294+ doRaiseId(id);
295+ } else {
296+ DEBUG_MSG << "(id=" << id << ") - Model busy (modelState=" << m_modelState << "). Try again in the next event loop.";
297+ // The model has just signalled some change. If we have a Repeater responding to this update, it will get nuts
298+ // if we perform yet another model change straight away.
299+ //
300+ // A bad sympton of this problem is a Repeater.itemAt(index) call returning null event though Repeater.count says
301+ // the index is definitely within bounds.
302+ QMetaObject::invokeMethod(this, "raiseId", Qt::QueuedConnection, Q_ARG(int, id));
303+ }
304+}
305+
306+int TopLevelSurfaceList::generateId()
307+{
308+ int id = m_nextId;
309+ m_nextId = nextFreeId(m_nextId + 1);
310+ Q_EMIT nextIdChanged();
311+ return id;
312+}
313+
314+int TopLevelSurfaceList::nextFreeId(int candidateId)
315+{
316+ if (candidateId > m_maxId) {
317+ return nextFreeId(1);
318+ } else {
319+ if (indexForId(candidateId) == -1) {
320+ // it's indeed free
321+ return candidateId;
322+ } else {
323+ return nextFreeId(candidateId + 1);
324+ }
325+ }
326+}
327+
328+QString TopLevelSurfaceList::toString()
329+{
330+ QString str;
331+ for (int i = 0; i < m_surfaceList.count(); ++i) {
332+ auto item = m_surfaceList.at(i);
333+
334+ QString itemStr = QString("(index=%1,appId=%2,surface=0x%3,id=%4)")
335+ .arg(i)
336+ .arg(item.application->appId())
337+ .arg((qintptr)item.surface, 0, 16)
338+ .arg(item.id);
339+
340+ if (i > 0) {
341+ str.append(",");
342+ }
343+ str.append(itemStr);
344+ }
345+ return str;
346+}
347+
348+void TopLevelSurfaceList::addApplication(ApplicationInfoInterface *application)
349+{
350+ DEBUG_MSG << "(" << application->appId() << ")";
351+ Q_ASSERT(!m_applications.contains(application));
352+ m_applications.append(application);
353+
354+ MirSurfaceListInterface *surfaceList = application->surfaceList();
355+
356+ if (application->state() != ApplicationInfoInterface::Stopped) {
357+ if (surfaceList->count() == 0) {
358+ appendPlaceholder(application);
359+ } else {
360+ for (int i = 0; i < surfaceList->count(); ++i) {
361+ appendSurface(surfaceList->get(i), application);
362+ }
363+ }
364+ }
365+
366+ connect(surfaceList, &QAbstractItemModel::rowsInserted, this,
367+ [this, application, surfaceList](const QModelIndex & /*parent*/, int first, int last)
368+ {
369+ for (int i = last; i >= first; --i) {
370+ this->appendSurface(surfaceList->get(i), application);
371+ }
372+ });
373+}
374+
375+void TopLevelSurfaceList::removeApplication(ApplicationInfoInterface *application)
376+{
377+ DEBUG_MSG << "(" << application->appId() << ")";
378+ Q_ASSERT(m_applications.contains(application));
379+
380+ MirSurfaceListInterface *surfaceList = application->surfaceList();
381+
382+ disconnect(surfaceList, 0, this, 0);
383+
384+ Q_ASSERT(m_modelState == IdleState);
385+ m_modelState = RemovingState;
386+
387+ int i = 0;
388+ while (i < m_surfaceList.count()) {
389+ if (m_surfaceList.at(i).application == application) {
390+ beginRemoveRows(QModelIndex(), i, i);
391+ m_surfaceList.removeAt(i);
392+ endRemoveRows();
393+ Q_EMIT countChanged();
394+ Q_EMIT listChanged();
395+ } else {
396+ ++i;
397+ }
398+ }
399+
400+ m_modelState = IdleState;
401+
402+ DEBUG_MSG << " after " << toString();
403+
404+ m_applications.removeAll(application);
405+}
406+
407+QAbstractListModel *TopLevelSurfaceList::applicationsModel() const
408+{
409+ return m_applicationsModel;
410+}
411+
412+void TopLevelSurfaceList::setApplicationsModel(QAbstractListModel* value)
413+{
414+ if (m_applicationsModel == value) {
415+ return;
416+ }
417+
418+ DEBUG_MSG << "(" << value << ")";
419+
420+ Q_ASSERT(m_modelState == IdleState);
421+ m_modelState = ResettingState;
422+
423+ beginResetModel();
424+
425+ if (m_applicationsModel) {
426+ m_surfaceList.clear();
427+ m_applications.clear();
428+ disconnect(m_applicationsModel, 0, this, 0);
429+ }
430+
431+ m_applicationsModel = value;
432+
433+ if (m_applicationsModel) {
434+ findApplicationRole();
435+
436+ connect(m_applicationsModel, &QAbstractItemModel::rowsInserted,
437+ this, [this](const QModelIndex &/*parent*/, int first, int last) {
438+ for (int i = first; i <= last; ++i) {
439+ auto application = getApplicationFromModelAt(i);
440+ addApplication(application);
441+ }
442+ });
443+
444+ connect(m_applicationsModel, &QAbstractItemModel::rowsAboutToBeRemoved,
445+ this, [this](const QModelIndex &/*parent*/, int first, int last) {
446+ for (int i = first; i <= last; ++i) {
447+ auto application = getApplicationFromModelAt(i);
448+ removeApplication(application);
449+ }
450+ });
451+
452+ for (int i = 0; i < m_applicationsModel->rowCount(); ++i) {
453+ auto application = getApplicationFromModelAt(i);
454+ addApplication(application);
455+ }
456+ }
457+
458+ endResetModel();
459+ m_modelState = IdleState;
460+}
461+
462+ApplicationInfoInterface *TopLevelSurfaceList::getApplicationFromModelAt(int index)
463+{
464+ QModelIndex modelIndex = m_applicationsModel->index(index);
465+
466+ QVariant variant = m_applicationsModel->data(modelIndex, m_applicationRole);
467+
468+ // variant.value<ApplicationInfoInterface*>() returns null for some reason.
469+ return static_cast<ApplicationInfoInterface*>(variant.value<QObject*>());
470+}
471+
472+void TopLevelSurfaceList::findApplicationRole()
473+{
474+ QHash<int, QByteArray> namesHash = m_applicationsModel->roleNames();
475+
476+ m_applicationRole = -1;
477+ for (auto i = namesHash.begin(); i != namesHash.end() && m_applicationRole == -1; ++i) {
478+ if (i.value() == "application") {
479+ m_applicationRole = i.key();
480+ }
481+ }
482+
483+ if (m_applicationRole == -1) {
484+ qFatal("TopLevelSurfaceList: applicationsModel must have a \"application\" role.");
485+ }
486+}
plugins/WindowManager/TopLevelSurfaceList.hnew file+223
@@ -0,0 +1,223 @@
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 TOPLEVELSURFACELIST_H
18+#define TOPLEVELSURFACELIST_H
19+
20+#include <QAbstractListModel>
21+#include <QList>
22+#include <QLoggingCategory>
23+
24+Q_DECLARE_LOGGING_CATEGORY(UNITY_TOPSURFACELIST)
25+
26+namespace unity {
27+ namespace shell {
28+ namespace application {
29+ class ApplicationInfoInterface;
30+ class MirSurfaceInterface;
31+ }
32+ }
33+}
34+
35+/**
36+ * @brief A model of top-level surfaces
37+ *
38+ * It's an abstraction of top-level application windows.
39+ *
40+ * When an entry first appears, it normaly doesn't have a surface yet, meaning that the application is
41+ * still starting up. A shell should then display a splash screen or saved screenshot of the application
42+ * until its surface comes up.
43+ *
44+ * As applications can have multiple surfaces and you can also have entries without surfaces at all,
45+ * the only way to unambiguously refer to an entry in this model is through its id.
46+ */
47+class TopLevelSurfaceList : public QAbstractListModel
48+{
49+
50+ Q_OBJECT
51+
52+ /**
53+ * @brief A list model of applications.
54+ *
55+ * It's expected to have a role called "application" which returns a ApplicationInfoInterface
56+ */
57+ Q_PROPERTY(QAbstractListModel* applicationsModel READ applicationsModel
58+ WRITE setApplicationsModel
59+ NOTIFY applicationsModelChanged)
60+
61+ /**
62+ * @brief Number of top-level surfaces in this model
63+ *
64+ * This is the same as rowCount, added in order to keep compatibility with QML ListModels.
65+ */
66+ Q_PROPERTY(int count READ rowCount NOTIFY countChanged)
67+
68+ /**
69+ The id to be used on the next entry created
70+ Useful for tests
71+ */
72+ Q_PROPERTY(int nextId READ nextId NOTIFY nextIdChanged)
73+public:
74+
75+ /**
76+ * @brief The Roles supported by the model
77+ *
78+ * SurfaceRole - A MirSurfaceInterface. It will be null if the application is still starting up
79+ * ApplicationRole - An ApplicationInfoInterface
80+ * IdRole - A unique identifier for this entry. Useful to unambiguosly track elements as they move around in the list
81+ */
82+ enum Roles {
83+ SurfaceRole = Qt::UserRole,
84+ ApplicationRole = Qt::UserRole + 1,
85+ IdRole = Qt::UserRole + 2,
86+ };
87+
88+ explicit TopLevelSurfaceList(QObject *parent = nullptr);
89+ virtual ~TopLevelSurfaceList();
90+
91+ // QAbstractItemModel methods
92+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
93+ QVariant data(const QModelIndex& index, int role) const override;
94+ QHash<int, QByteArray> roleNames() const override {
95+ QHash<int, QByteArray> roleNames { {SurfaceRole, "surface"},
96+ {ApplicationRole, "application"},
97+ {IdRole, "id"} };
98+ return roleNames;
99+ }
100+
101+ int nextId() const { return m_nextId; }
102+
103+ QAbstractListModel *applicationsModel() const;
104+ void setApplicationsModel(QAbstractListModel*);
105+
106+public Q_SLOTS:
107+ /**
108+ * @brief Returns the surface at the given index
109+ *
110+ * It will be a nullptr if the application is still starting up and thus hasn't yet created
111+ * and drawn into a surface.
112+ */
113+ unity::shell::application::MirSurfaceInterface *surfaceAt(int index) const;
114+
115+ /**
116+ * @brief Returns the application at the given index
117+ */
118+ unity::shell::application::ApplicationInfoInterface *applicationAt(int index) const;
119+
120+ /**
121+ * @brief Returns the unique id of the element at the given index
122+ */
123+ int idAt(int index) const;
124+
125+ /**
126+ * @brief Returns the index where the row with the given id is located
127+ *
128+ * Returns -1 if there's no row with the given id.
129+ */
130+ int indexForId(int id) const;
131+
132+ /**
133+ * @brief Raises the row with the given id to index 0
134+ */
135+ void raiseId(int id);
136+
137+ void doRaiseId(int id);
138+
139+Q_SIGNALS:
140+ void countChanged();
141+
142+ /**
143+ * @brief Emitted when the list changes
144+ *
145+ * Emitted when model gains an element, loses an element or when elements exchange positions.
146+ */
147+ void listChanged();
148+
149+ void nextIdChanged();
150+
151+ void applicationsModelChanged();
152+
153+private:
154+ void addApplication(unity::shell::application::ApplicationInfoInterface *application);
155+ void removeApplication(unity::shell::application::ApplicationInfoInterface *application);
156+
157+ int indexOf(unity::shell::application::MirSurfaceInterface *surface);
158+ void raise(unity::shell::application::MirSurfaceInterface *surface);
159+ void move(int from, int to);
160+ void appendSurfaceHelper(unity::shell::application::MirSurfaceInterface *surface,
161+ unity::shell::application::ApplicationInfoInterface *application);
162+ void connectSurface(unity::shell::application::MirSurfaceInterface *surface);
163+ int generateId();
164+ int nextFreeId(int candidateId);
165+ QString toString();
166+ void onSurfaceDestroyed(unity::shell::application::MirSurfaceInterface *surface);
167+ void onSurfaceDied(unity::shell::application::MirSurfaceInterface *surface);
168+ void removeAt(int index);
169+ void findApplicationRole();
170+
171+ unity::shell::application::ApplicationInfoInterface *getApplicationFromModelAt(int index);
172+
173+ /*
174+ Placeholder for a future surface from a starting or running application.
175+ Enables shell to give immediate feedback to the user by showing, eg,
176+ a splash screen.
177+
178+ It's a model row containing a null surface and the given application.
179+ */
180+ void appendPlaceholder(unity::shell::application::ApplicationInfoInterface *application);
181+
182+ /*
183+ Adds a model row with the given surface and application
184+
185+ Alternatively, if a placeholder exists for the given application it's
186+ filled with the given surface instead.
187+ */
188+ void appendSurface(unity::shell::application::MirSurfaceInterface *surface,
189+ unity::shell::application::ApplicationInfoInterface *application);
190+
191+ struct ModelEntry {
192+ ModelEntry(unity::shell::application::MirSurfaceInterface *surface, unity::shell::application::ApplicationInfoInterface *application, int id)
193+ : surface(surface), application(application), id(id) {}
194+ unity::shell::application::MirSurfaceInterface *surface;
195+ unity::shell::application::ApplicationInfoInterface *application;
196+ int id;
197+ bool removeOnceSurfaceDestroyed{false};
198+ };
199+
200+ QList<ModelEntry> m_surfaceList;
201+ int m_nextId{1};
202+ static const int m_maxId{1000000};
203+
204+ // applications that are being monitored
205+ QList<unity::shell::application::ApplicationInfoInterface *> m_applications;
206+
207+ QAbstractListModel* m_applicationsModel{nullptr};
208+ int m_applicationRole{-1};
209+
210+ enum ModelState {
211+ IdleState,
212+ InsertingState,
213+ RemovingState,
214+ MovingState,
215+ ResettingState
216+ };
217+ ModelState m_modelState{IdleState};
218+};
219+
220+Q_DECLARE_METATYPE(TopLevelSurfaceList*)
221+Q_DECLARE_METATYPE(QAbstractListModel*)
222+
223+#endif // TOPLEVELSURFACELIST_H
plugins/WindowManager/WindowManagerPlugin.cppnew file+28
@@ -0,0 +1,28 @@
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 "WindowManagerPlugin.h"
18+
19+#include "TopLevelSurfaceList.h"
20+
21+#include <QtQml>
22+
23+void WindowManagerPlugin::registerTypes(const char *uri)
24+{
25+ qmlRegisterType<TopLevelSurfaceList>(uri, 0, 1, "TopLevelSurfaceList");
26+
27+ qRegisterMetaType<QAbstractListModel*>("QAbstractListModel*");
28+}
plugins/WindowManager/WindowManagerPlugin.hnew file+32
@@ -0,0 +1,32 @@
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 WINDOWMANAGER_PLUGIN_H
18+#define WINDOWMANAGER_PLUGIN_H
19+
20+#include <QtQml/QQmlEngine>
21+#include <QtQml/QQmlExtensionPlugin>
22+
23+class WindowManagerPlugin : public QQmlExtensionPlugin
24+{
25+ Q_OBJECT
26+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
27+
28+public:
29+ void registerTypes(const char *uri) override;
30+};
31+
32+#endif // WINDOWMANAGER_PLUGIN_H
plugins/WindowManager/qmldirnew file+2
@@ -0,0 +1,2 @@
1+module WindowManager
2+plugin windowmanager-qml
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+244
@@ -0,0 +1,244 @@
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+ beginResetModel();
207+
208+ m_country = country;
209+
210+ Q_FOREACH(GeonamesCity *city, m_countryLocations) {
211+ geonames_city_free(city);
212+ }
213+ m_countryLocations.clear();
214+
215+ gint num_cities = geonames_get_n_cities();
216+ for (gint i = 0; i < num_cities; i++) {
217+ GeonamesCity *city = geonames_get_city(i);
218+ if (city && m_country == geonames_city_get_country_code(city)) {
219+ m_countryLocations.append(city);
220+ }
221+ }
222+
223+ std::sort(m_countryLocations.begin(), m_countryLocations.end(), citycmp);
224+
225+ endResetModel();
226+
227+ Q_EMIT countryChanged(country);
228+}
229+
230+TimeZoneLocationModel::~TimeZoneLocationModel()
231+{
232+ if (m_cancellable) {
233+ g_cancellable_cancel(m_cancellable);
234+ g_clear_object(&m_cancellable);
235+ }
236+
237+ Q_FOREACH(GeonamesCity *city, m_countryLocations) {
238+ geonames_city_free(city);
239+ }
240+
241+ Q_FOREACH(GeonamesCity *city, m_locations) {
242+ geonames_city_free(city);
243+ }
244+}
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+306−206
@@ -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-16 03:29+0000\n"
10+"POT-Creation-Date: 2016-04-27 15:01+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,23 +15,23 @@ 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-23 06:03+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-04-30 05:36+0000\n"
19+"X-Generator: Launchpad (build 17995)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
2323msgstr "Cuumita "
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 "Kat"
3333
34−#: plugins/Unity/Launcher/launcheritem.cpp:106
34+#: plugins/Unity/Launcher/launcheritem.cpp:107
3535msgid "Unpin shortcut"
3636msgstr ""
3737
@@ -73,77 +73,59 @@ msgctxt "Button: Log out from the system"
7373msgid "Log Out"
7474msgstr "Eweq"
7575
76−#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:194
77−#: qml/Components/Dialogs.qml:253
76+#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
77+#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
78+#: qml/Wizard/Pages/passcode-set.qml:32
7879msgid "Cancel"
7980msgstr "Bayis"
8081
8182#: qml/Components/Dialogs.qml:173
82−msgctxt "Title: Reboot/Shut down dialog"
83−msgid "Shut down"
84−msgstr "Bargus"
85−
86−#: qml/Components/Dialogs.qml:174
87−msgid "Are you sure you want to shut down?"
88−msgstr "Bargussuh digga maay litoo?"
89−
90−#: qml/Components/Dialogs.qml:176
91−msgctxt "Button: Reboot the system"
92−msgid "Reboot"
93−msgstr "Wadir-ugus"
94−
95−#: qml/Components/Dialogs.qml:185
96−msgctxt "Button: Shut down the system"
97−msgid "Shut down"
98−msgstr "Bargus"
99−
100−#: qml/Components/Dialogs.qml:207
10183msgctxt "Title: Reboot dialog"
10284msgid "Reboot"
10385msgstr "Wadir-ugus"
10486
105−#: qml/Components/Dialogs.qml:208
87+#: qml/Components/Dialogs.qml:174
10688msgid "Are you sure you want to reboot?"
10789msgstr "Wadir-ugussuh digga maay litoo?"
10890
109−#: qml/Components/Dialogs.qml:210
91+#: qml/Components/Dialogs.qml:176
11092msgid "No"
11193msgstr "Maleey"
11294
113−#: qml/Components/Dialogs.qml:217
95+#: qml/Components/Dialogs.qml:182
11496msgid "Yes"
11597msgstr "Yeey"
11698
117−#: qml/Components/Dialogs.qml:232
99+#: qml/Components/Dialogs.qml:197
118100msgctxt "Title: Power off/Restart dialog"
119101msgid "Power"
120102msgstr "Cayla"
121103
122−#: qml/Components/Dialogs.qml:233
104+#: qml/Components/Dialogs.qml:198
123105msgid ""
124106"Are you sure you would like\n"
125107"to power off?"
126108msgstr "Timmi haytuh digga maay litoo?"
127109
128−#: qml/Components/Dialogs.qml:235
110+#: qml/Components/Dialogs.qml:200
129111msgctxt "Button: Power off the system"
130112msgid "Power off"
131113msgstr "Timmi hayis"
132114
133−#: qml/Components/Dialogs.qml:244
115+#: qml/Components/Dialogs.qml:209
134116msgctxt "Button: Restart the system"
135117msgid "Restart"
136118msgstr "Wadir-qimbis"
137119
138−#: qml/Components/Lockscreen.qml:245
120+#: qml/Components/Lockscreen.qml:231
139121msgid "Return to Call"
140122msgstr "Seecol gacis"
141123
142−#: qml/Components/Lockscreen.qml:245
124+#: qml/Components/Lockscreen.qml:231
143125msgid "Emergency Call"
144126msgstr ""
145127
146−#: qml/Components/Lockscreen.qml:277
128+#: qml/Components/Lockscreen.qml:263
147129msgid "OK"
148130msgstr "Hayya"
149131
@@ -152,6 +134,8 @@ msgid "Apps may have unsaved data:"
152134msgstr ""
153135
154136#: qml/Components/ModeSwitchWarningDialog.qml:57
137+msgctxt ""
138+"Re-dock means connect the device again to an external screen/mouse/keyboard"
155139msgid "Re-dock, save your work and close these apps to continue."
156140msgstr ""
157141
@@ -171,42 +155,58 @@ msgstr ""
171155msgid "Close all"
172156msgstr "Inkih alif"
173157
174−#: qml/Dash/DashPageHeader.qml:266
158+#: qml/Dash/DashPageHeader.qml:337
175159msgctxt "Button: Open the Ubuntu Store"
176160msgid "Store"
177161msgstr ""
178162
179−#: qml/Dash/DashPageHeader.qml:273
163+#: qml/Dash/DashPageHeader.qml:344
180164msgctxt "Button: Start a search in the current dash scope"
181165msgid "Search"
182166msgstr "Goranto"
183167
184−#: qml/Dash/DashPageHeader.qml:283
168+#: qml/Dash/DashPageHeader.qml:354
185169msgctxt "Button: Show the current dash scope settings"
186170msgid "Settings"
187171msgstr "Massosu"
188172
189−#: qml/Dash/DashPageHeader.qml:290
173+#: qml/Dash/DashPageHeader.qml:361
190174msgid "Remove from Favorites"
191175msgstr ""
192176
193−#: qml/Dash/DashPageHeader.qml:290
177+#: qml/Dash/DashPageHeader.qml:361
194178msgid "Add to Favorites"
195179msgstr ""
196180
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
198−msgid "See less"
181+#: qml/Dash/FiltersPopover.qml:60
182+msgid "Refine your results"
199183msgstr ""
200184
201−#: qml/Dash/GenericScopeView.qml:587
202−msgid "See all"
185+#: qml/Dash/FiltersPopover.qml:69
186+msgid "Reset"
203187msgstr ""
204188
205−#: qml/Dash/GenericScopeView.qml:649
189+#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
190+msgid "Show less"
191+msgstr ""
192+
193+#: qml/Dash/GenericScopeView.qml:570
194+msgid "Show all"
195+msgstr ""
196+
197+#: qml/Dash/GenericScopeView.qml:627
206198msgctxt "Label: Hint for dash search line edit"
207199msgid "Search"
208200msgstr "Goranto"
209201
202+#: qml/Dash/PageHeaderExtraPanel.qml:55
203+msgid "Recent Searches"
204+msgstr ""
205+
206+#: qml/Dash/PageHeaderExtraPanel.qml:66
207+msgid "Clear All"
208+msgstr ""
209+
210210#: qml/Dash/Previews/PreviewActionCombo.qml:35
211211msgid "More..."
212212msgstr ""
@@ -228,7 +228,7 @@ msgstr ""
228228msgid "Add a review"
229229msgstr ""
230230
231−#: qml/Dash/Previews/PreviewSharing.qml:50
231+#: qml/Dash/Previews/PreviewSharing.qml:66
232232msgid "Preview Share Item"
233233msgstr ""
234234
@@ -256,13 +256,13 @@ msgstr "Dabqi"
256256msgid "Also installed"
257257msgstr ""
258258
259−#: qml/DisabledScreenNotice.qml:87
259+#: qml/DisabledScreenNotice.qml:104
260260msgid ""
261261"Your device is now connected to an external display. Use this screen as a "
262−"touch pad to interact with the mouse."
262+"touch pad to interact with the pointer."
263263msgstr ""
264264
265−#: qml/Greeter/CoverPage.qml:107
265+#: qml/Greeter/CoverPage.qml:118
266266msgid "Unlock"
267267msgstr ""
268268
@@ -274,11 +274,11 @@ msgstr "Qagis"
274274msgid "Tap to unlock"
275275msgstr ""
276276
277−#: qml/Greeter/NarrowView.qml:54 qml/Wizard/Pages/passwd-confirm.qml:53
277+#: qml/Greeter/NarrowView.qml:54
278278msgid "Sorry, incorrect passphrase."
279279msgstr ""
280280
281−#: qml/Greeter/NarrowView.qml:55 qml/Wizard/Pages/passwd-confirm.qml:54
281+#: qml/Greeter/NarrowView.qml:55
282282msgid "Sorry, incorrect passcode."
283283msgstr ""
284284
@@ -303,7 +303,7 @@ msgstr ""
303303msgid "Enter %1"
304304msgstr "%1 culus"
305305
306−#: qml/Greeter/NarrowView.qml:117 qml/Wizard/Pages/passwd-set.qml:60
306+#: qml/Greeter/NarrowView.qml:117
307307msgid "Enter passphrase"
308308msgstr "Tatur-maxco culus"
309309
@@ -329,7 +329,7 @@ msgstr ""
329329msgid "Sorry, incorrect passcode"
330330msgstr ""
331331
332−#: qml/Notifications/NotificationMenuItemFactory.qml:129
332+#: qml/Notifications/NotificationMenuItemFactory.qml:124
333333msgid "Show password"
334334msgstr "Cuumita uybulluy"
335335
@@ -341,62 +341,62 @@ msgstr ""
341341msgid "Conference"
342342msgstr "Koboxu"
343343
344−#: qml/Panel/Indicators/MenuItemFactory.qml:753
344+#: qml/Panel/Indicators/MenuItemFactory.qml:762
345345msgid "Nothing is playing"
346346msgstr ""
347347
348−#: qml/Panel/Indicators/MenuItemFactory.qml:882
348+#: qml/Panel/Indicators/MenuItemFactory.qml:891
349349#, qt-format
350350msgid "%1 hour"
351351msgid_plural "%1 hours"
352352msgstr[0] "%1 saaqata"
353353msgstr[1] "%1 saaqata"
354354
355−#: qml/Panel/Indicators/MenuItemFactory.qml:886
355+#: qml/Panel/Indicators/MenuItemFactory.qml:895
356356#, qt-format
357357msgid "%1 minute"
358358msgid_plural "%1 minutes"
359359msgstr[0] "%1 miniti"
360360msgstr[1] "%1 miniti"
361361
362−#: qml/Panel/Indicators/MenuItemFactory.qml:891
362+#: qml/Panel/Indicators/MenuItemFactory.qml:900
363363#, qt-format
364364msgid "%1 second"
365365msgid_plural "%1 seconds"
366366msgstr[0] "%1 nammayye"
367367msgstr[1] "%1 nammayye"
368368
369−#: qml/Panel/Indicators/MenuItemFactory.qml:894
369+#: qml/Panel/Indicators/MenuItemFactory.qml:903
370370msgid "0 seconds"
371371msgstr "0 nammayye"
372372
373373#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
374−#: qml/Panel/Indicators/MenuItemFactory.qml:896
374+#: qml/Panel/Indicators/MenuItemFactory.qml:905
375375#, qt-format
376376msgid "%1 remaining"
377377msgstr "%1 raaqe"
378378
379−#: qml/Panel/Indicators/MenuItemFactory.qml:902
379+#: qml/Panel/Indicators/MenuItemFactory.qml:911
380380msgid "In queue…"
381381msgstr ""
382382
383−#: qml/Panel/Indicators/MenuItemFactory.qml:906
383+#: qml/Panel/Indicators/MenuItemFactory.qml:915
384384msgid "Downloading"
385385msgstr "Qulluumah"
386386
387−#: qml/Panel/Indicators/MenuItemFactory.qml:908
387+#: qml/Panel/Indicators/MenuItemFactory.qml:917
388388msgid "Paused, tap to resume"
389389msgstr ""
390390
391−#: qml/Panel/Indicators/MenuItemFactory.qml:910
391+#: qml/Panel/Indicators/MenuItemFactory.qml:919
392392msgid "Canceled"
393393msgstr "Bayteh"
394394
395−#: qml/Panel/Indicators/MenuItemFactory.qml:912
395+#: qml/Panel/Indicators/MenuItemFactory.qml:921
396396msgid "Finished"
397397msgstr "Duudumteh"
398398
399−#: qml/Panel/Indicators/MenuItemFactory.qml:914
399+#: qml/Panel/Indicators/MenuItemFactory.qml:923
400400msgid "Failed, tap to retry"
401401msgstr ""
402402
@@ -416,252 +416,352 @@ 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"
419+#: qml/Stages/SideStage.qml:76
420+msgid "Drag using 3 fingers any application from one window to the other"
425421msgstr ""
426422
427−#: qml/Tutorial/TutorialBottom.qml:28
428−msgid "Open special menus"
423+#: qml/Tutorial/TutorialBottom.qml:78
424+msgid "Swipe up to add a contact"
429425msgstr ""
430426
431−#: qml/Tutorial/TutorialBottom.qml:29
432−msgid "Swipe up from the bottom edge."
427+#: qml/Tutorial/TutorialBottom.qml:80
428+msgid "Swipe up for favorite calculations"
433429msgstr ""
434430
435−#: qml/Tutorial/TutorialBottomFinish.qml:24
436−msgid "This action does different things for different apps"
431+#: qml/Tutorial/TutorialBottom.qml:82
432+msgid "Swipe up for recent calls"
437433msgstr ""
438434
439−#: qml/Tutorial/TutorialBottomFinish.qml:25
440−msgid "Tap here to finish."
435+#: qml/Tutorial/TutorialBottom.qml:84
436+msgid "Swipe up to create a message"
441437msgstr ""
442438
443−#: qml/Tutorial/TutorialContent.qml:80 qml/Tutorial/TutorialLeftFinish.qml:25
444−#: qml/Tutorial/TutorialRight.qml:144
445−msgid "Tap here to continue."
439+#: qml/Tutorial/TutorialBottom.qml:85
440+msgid "Swipe up to manage the app"
446441msgstr ""
447442
448−#: qml/Tutorial/TutorialLeft.qml:26
449−msgid "Open the launcher"
443+#: qml/Tutorial/TutorialLeftLong.qml:47
444+msgid "Long swipe from the left edge to open the Today scope"
450445msgstr ""
451446
452−#: qml/Tutorial/TutorialLeft.qml:27
453−msgid "Short swipe from the left edge."
447+#: qml/Tutorial/TutorialLeft.qml:47
448+msgid "Swipe from the left edge to open the launcher"
454449msgstr ""
455450
456−#: qml/Tutorial/TutorialLeftFinish.qml:24
457−msgid "These are the shortcuts to favorite apps"
451+#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
458453msgstr ""
459454
460−#: qml/Tutorial/TutorialPage.qml:178
461−msgid "You almost got it!"
455+#: qml/Tutorial/TutorialRight.qml:56
456+msgid "Short or long swipe from the right edge to view your open apps"
462457msgstr ""
463458
464−#: qml/Tutorial/TutorialPage.qml:195
465−msgid "Try again."
459+#: qml/Tutorial/TutorialTop.qml:53
460+msgid "Swipe from the top right edge to open the notification bar"
466461msgstr ""
467462
468−#: qml/Tutorial/TutorialRight.qml:31
469−msgid "To view open apps"
463+#: qml/Tutorial/TutorialTop.qml:54
464+msgid "Swipe from the top edge to open the notification bar"
470465msgstr ""
471466
472−#: qml/Tutorial/TutorialRight.qml:32
473−msgid "Long swipe from the right edge."
474−msgstr ""
475−
476−#: qml/Tutorial/TutorialRight.qml:122
477−msgid "View all your running tasks."
478−msgstr ""
479−
480−#: qml/Wizard/Page.qml:89
467+#: qml/Wizard/Page.qml:54
481468msgctxt "Button: Go back one page in the Wizard"
482469msgid "Back"
483470msgstr "Derre"
484471
485472#: qml/Wizard/Pages/10-welcome.qml:27
486−msgid "Hi!"
487−msgstr "Nagaale!"
473+msgid "Language"
474+msgstr ""
488475
489−#: qml/Wizard/Pages/10-welcome.qml:44
490−msgid "Welcome to your Ubuntu device."
476+#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
477+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
478+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
479+#: qml/Wizard/Pages/75-report-check.qml:84
480+#: qml/Wizard/Pages/passcode-desktop.qml:124
481+#: qml/Wizard/Pages/password-set.qml:141
482+msgid "Next"
491483msgstr ""
492484
493−#: qml/Wizard/Pages/10-welcome.qml:52
494−msgid "Let’s get started."
495−msgstr "Hayya qimbisnay."
485+#: qml/Wizard/Pages/30-wifi.qml:29
486+msgid "Connect to Wi‑Fi"
487+msgstr ""
496488
497−#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:133
498−#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
499−#: qml/Wizard/Pages/60-reporting.qml:60 qml/Wizard/Pages/passwd-confirm.qml:82
500−#: qml/Wizard/Pages/passwd-set.qml:90
501−msgid "Continue"
502−msgstr "Tatur"
489+#: qml/Wizard/Pages/30-wifi.qml:130
490+msgid "Connected"
491+msgstr ""
503492
504−#: qml/Wizard/Pages/20-sim.qml:25
505−msgid "Add a SIM card and restart your device"
493+#: qml/Wizard/Pages/30-wifi.qml:163
494+msgid "Available Wi-Fi networks"
506495msgstr ""
507496
508−#: qml/Wizard/Pages/20-sim.qml:59
509−msgid "Without it, you won’t be able to make calls or use text messaging."
497+#: qml/Wizard/Pages/30-wifi.qml:164
498+msgid "No available Wi-Fi networks"
510499msgstr ""
511500
512−#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
501+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
502+#: qml/Wizard/Pages/sim.qml:101
513503msgid "Skip"
514504msgstr "Kaqit"
515505
516−#: qml/Wizard/Pages/30-passwd-type.qml:39
517−msgid "Lock security"
506+#: qml/Wizard/Pages/40-location.qml:27
507+msgid "Location Services"
508+msgstr ""
509+
510+#: qml/Wizard/Pages/40-location.qml:83
511+msgid ""
512+"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
513+"(recommended)"
514+msgstr ""
515+
516+#: qml/Wizard/Pages/40-location.qml:105
517+#, qt-format
518+msgid "By selecting this option you agree to the Nokia HERE %1."
518519msgstr ""
519520
520−#: qml/Wizard/Pages/30-passwd-type.qml:79
521−msgid "Please select how you’d like to unlock your device."
521+#: qml/Wizard/Pages/40-location.qml:106
522+msgctxt "part of: Nokia HERE terms and conditions"
523+msgid "terms and conditions"
522524msgstr ""
523525
524−#: qml/Wizard/Pages/30-passwd-type.qml:102
525−msgctxt "Label: Type of security method"
526−msgid "Swipe"
527−msgstr "Uysuttuc"
526+#: qml/Wizard/Pages/40-location.qml:160
527+msgid "GPS only"
528+msgstr ""
529+
530+#: qml/Wizard/Pages/40-location.qml:214
531+msgid "Don't use my location"
532+msgstr ""
533+
534+#: qml/Wizard/Pages/40-location.qml:260
535+msgid "You can change it later in System Settings."
536+msgstr ""
537+
538+#: qml/Wizard/Pages/50-timezone.qml:29
539+msgid "Time Zone"
540+msgstr ""
541+
542+#: qml/Wizard/Pages/50-timezone.qml:178
543+msgid "Enter your city"
544+msgstr ""
528545
529−#: qml/Wizard/Pages/30-passwd-type.qml:103
530−msgctxt "Label: Description of security method"
531−msgid "No security"
546+#: qml/Wizard/Pages/60-account.qml:24
547+msgid "Personalize Your Device"
532548msgstr ""
533549
534−#: qml/Wizard/Pages/30-passwd-type.qml:105
550+#: qml/Wizard/Pages/60-account.qml:48
551+msgid "Preferred Name"
552+msgstr ""
553+
554+#: qml/Wizard/Pages/70-passwd-type.qml:39
555+msgid "Lock Screen"
556+msgstr ""
557+
558+#: qml/Wizard/Pages/70-passwd-type.qml:101
535559msgctxt "Label: Type of security method"
536−msgid "Passcode"
560+msgid "Create new password"
537561msgstr ""
538562
539−#: qml/Wizard/Pages/30-passwd-type.qml:106
540−msgctxt "Label: Description of security method"
541−msgid "4 digits only"
563+#: qml/Wizard/Pages/70-passwd-type.qml:103
564+msgctxt "Label: Type of security method"
565+msgid "Create passcode (numbers only)"
542566msgstr ""
543567
544−#: qml/Wizard/Pages/30-passwd-type.qml:108
568+#: qml/Wizard/Pages/70-passwd-type.qml:105
545569msgctxt "Label: Type of security method"
546−msgid "Passphrase"
570+msgid "No lock code"
547571msgstr ""
548572
549−#: qml/Wizard/Pages/30-passwd-type.qml:109
550−msgctxt "Label: Description of security method"
551−msgid "Numbers and letters"
573+#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
574+msgid "Privacy Policy"
552575msgstr ""
553576
554−#: qml/Wizard/Pages/40-wifi.qml:29
555−msgid "Connect to Wi‑Fi"
577+#: qml/Wizard/Pages/75-report-check.qml:26
578+msgid "Help Us Improve"
556579msgstr ""
557580
558−#: qml/Wizard/Pages/40-wifi.qml:168
559−msgid "Available networks…"
581+#: qml/Wizard/Pages/75-report-check.qml:59
582+msgid "Improve system performance by sending us crashes and error reports."
560583msgstr ""
561584
562−#: qml/Wizard/Pages/40-wifi.qml:169
563−msgid "No available networks."
585+#: qml/Wizard/Pages/75-report-check.qml:60
586+msgid "Privacy policy"
564587msgstr ""
565588
566−#: qml/Wizard/Pages/50-location.qml:27
567−msgid "Location"
589+#: qml/Wizard/Pages/80-finished.qml:89
590+msgid "Welcome to Ubuntu"
568591msgstr ""
569592
570−#: qml/Wizard/Pages/50-location.qml:62
571−msgid "Let the phone detect your location:"
593+#: qml/Wizard/Pages/80-finished.qml:104
594+msgid "You are ready to use your device now"
572595msgstr ""
573596
574−#: qml/Wizard/Pages/50-location.qml:69
575−msgid "Using GPS only (less accurate)"
597+#: qml/Wizard/Pages/80-finished.qml:124
598+msgid "Get Started"
599+msgstr ""
600+
601+#: qml/Wizard/Pages/here-terms.qml:25
602+msgid "Terms & Conditions"
576603msgstr ""
577604
578−#: qml/Wizard/Pages/50-location.qml:86
579−msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
605+#: qml/Wizard/Pages/here-terms.qml:69
606+msgid "Your device uses positioning technologies provided by HERE."
580607msgstr ""
581608
582−#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
583−#: qml/Wizard/Pages/50-location.qml:103
609+#: qml/Wizard/Pages/here-terms.qml:81
584610msgid ""
585−"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
586−"conditions</a>."
611+"To provide you with positioning services and to improve their quality, HERE "
612+"collects information about nearby cell towers and Wi-Fi hotspots around your "
613+"current location whenever your position is being found."
587614msgstr ""
588615
589−#: qml/Wizard/Pages/50-location.qml:112
590−msgid "Not at all"
616+#: qml/Wizard/Pages/here-terms.qml:93
617+msgid ""
618+"The information collected is used to analyze the service and to improve the "
619+"use of service, but not to identify you personally."
591620msgstr ""
592621
593−#: qml/Wizard/Pages/50-location.qml:124
594−msgid "You can change your mind later in <b>System Settings</b>."
622+#: qml/Wizard/Pages/here-terms.qml:106
623+#, qt-format
624+msgid "By continuing, you agree to the HERE platform %1 and %2."
595625msgstr ""
596626
597−#: qml/Wizard/Pages/60-reporting.qml:26
598−msgid "Improving your experience"
627+#: qml/Wizard/Pages/here-terms.qml:107
628+msgid "Service Terms"
599629msgstr ""
600630
601−#: qml/Wizard/Pages/60-reporting.qml:46
602−msgid ""
603−"Your phone is set up to automatically report errors to Canonical and its "
604−"partners, the makers of the operating system."
631+#: qml/Wizard/Pages/passcode-confirm.qml:43
632+#: qml/Wizard/Pages/passcode-desktop.qml:80
633+msgid "Confirm passcode"
605634msgstr ""
606635
607−#: qml/Wizard/Pages/60-reporting.qml:53
608−msgid ""
609−"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
610−"Privacy</b>"
636+#: qml/Wizard/Pages/passcode-confirm.qml:45
637+msgid "Incorrect passcode."
611638msgstr ""
612639
613−#: qml/Wizard/Pages/80-finished.qml:24
614−msgid "All done"
640+#: qml/Wizard/Pages/passcode-confirm.qml:45
641+msgctxt "Enter the passcode again"
642+msgid "Please re-enter."
615643msgstr ""
616644
617−#: qml/Wizard/Pages/80-finished.qml:39
618−msgid "Nice work!"
645+#: qml/Wizard/Pages/passcode-desktop.qml:30
646+msgid "Lock Screen Passcode"
619647msgstr ""
620648
621−#: qml/Wizard/Pages/80-finished.qml:46
622−msgid "Your device is now ready to use."
649+#: qml/Wizard/Pages/passcode-desktop.qml:56
650+msgid "Enter 4 numbers to setup your passcode"
623651msgstr ""
624652
625−#: qml/Wizard/Pages/80-finished.qml:53
626−msgid "Finish"
653+#: qml/Wizard/Pages/passcode-desktop.qml:65
654+#: qml/Wizard/Pages/passcode-set.qml:54
655+msgid "Choose passcode"
627656msgstr ""
628657
629−#: qml/Wizard/Pages/here-terms.qml:27
630−msgid "Terms & Conditions"
658+#: qml/Wizard/Pages/passcode-desktop.qml:105
659+msgid "Passcode too short"
631660msgstr ""
632661
633−#: qml/Wizard/Pages/passwd-confirm.qml:49
634−msgid "Confirm passphrase"
662+#: qml/Wizard/Pages/passcode-desktop.qml:107
663+msgid "Passcodes match"
635664msgstr ""
636665
637−#: qml/Wizard/Pages/passwd-confirm.qml:50
638−msgid "Confirm passcode"
666+#: qml/Wizard/Pages/passcode-desktop.qml:109
667+msgid "Passcodes do not match"
639668msgstr ""
640669
641−#: qml/Wizard/Pages/passwd-confirm.qml:53
642−#: qml/Wizard/Pages/passwd-confirm.qml:54
643−msgid "Please try again."
670+#: qml/Wizard/Pages/passcode-set.qml:62
671+msgid "Passcode must be 4 characters long"
644672msgstr ""
645673
646−#: qml/Wizard/Pages/passwd-set.qml:61
647−msgid "Choose your passcode"
674+#: qml/Wizard/Pages/password-set.qml:30
675+msgid "Lock Screen Password"
648676msgstr ""
649677
650−#: qml/Wizard/Pages/passwd-set.qml:68
651−msgid "Passphrase must be 4 characters long"
678+#: qml/Wizard/Pages/password-set.qml:61
679+msgid "Enter at least 8 characters"
652680msgstr ""
653681
654−#. Translators: This is the arrow for "Back" buttons
655−#: qml/Wizard/StackButton.qml:39
656−#, qt-format
657−msgid "〈 %1"
682+#: qml/Wizard/Pages/password-set.qml:73
683+msgid "Choose password"
658684msgstr ""
659685
660−#. Translators: This is the arrow for "Forward" buttons
661−#: qml/Wizard/StackButton.qml:42
662−#, qt-format
663−msgid "%1 〉"
686+#: qml/Wizard/Pages/password-set.qml:103
687+msgid "Confirm password"
688+msgstr ""
689+
690+#: qml/Wizard/Pages/sim.qml:27
691+msgid "No SIM card installed"
692+msgstr ""
693+
694+#: qml/Wizard/Pages/sim.qml:54
695+msgid "SIM card added"
696+msgstr ""
697+
698+#: qml/Wizard/Pages/sim.qml:55
699+msgid "You must restart the device to access the mobile network."
700+msgstr ""
701+
702+#: qml/Wizard/Pages/sim.qml:59
703+msgid "Restart"
664704msgstr ""
665705
706+#: qml/Wizard/Pages/sim.qml:78
707+msgid "You won’t be able to make calls or use text messaging without a SIM."
708+msgstr ""
709+
710+#: qml/Wizard/Pages/sim.qml:90
711+msgid "To proceed with no SIM tap Skip."
712+msgstr ""
713+
714+#: qml/Wizard/PasswordMeter.qml:87
715+msgid "Passwords match"
716+msgstr ""
717+
718+#: qml/Wizard/PasswordMeter.qml:89
719+msgid "Passwords do not match"
720+msgstr ""
721+
722+#: qml/Wizard/PasswordMeter.qml:93
723+msgid "Strong password"
724+msgstr ""
725+
726+#: qml/Wizard/PasswordMeter.qml:95
727+msgid "Fair password"
728+msgstr ""
729+
730+#: qml/Wizard/PasswordMeter.qml:97
731+msgid "Weak password"
732+msgstr ""
733+
734+#: qml/Wizard/PasswordMeter.qml:99
735+msgid "Very weak password"
736+msgstr ""
737+
738+#~ msgctxt "Title: Reboot/Shut down dialog"
739+#~ msgid "Shut down"
740+#~ msgstr "Bargus"
741+
742+#~ msgid "Are you sure you want to shut down?"
743+#~ msgstr "Bargussuh digga maay litoo?"
744+
745+#~ msgctxt "Button: Shut down the system"
746+#~ msgid "Shut down"
747+#~ msgstr "Bargus"
748+
749+#~ msgctxt "Button: Reboot the system"
750+#~ msgid "Reboot"
751+#~ msgstr "Wadir-ugus"
752+
753+#~ msgctxt "Label: Type of security method"
754+#~ msgid "Swipe"
755+#~ msgstr "Uysuttuc"
756+
757+#~ msgid "Hi!"
758+#~ msgstr "Nagaale!"
759+
666760#~ msgid "Welcome to your Ubuntu phone."
667761#~ msgstr "Ubuntu Telefoonul arcib"
762+
763+#~ msgid "Let’s get started."
764+#~ msgstr "Hayya qimbisnay."
765+
766+#~ msgid "Continue"
767+#~ msgstr "Tatur"
po/am.po+517−265
@@ -7,31 +7,31 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-02-16 03:29+0000\n"
11−"PO-Revision-Date: 2015-11-19 19:27+0000\n"
10+"POT-Creation-Date: 2016-04-27 15:01+0000\n"
11+"PO-Revision-Date: 2016-03-24 19:07+0000\n"
1212"Last-Translator: samson <Unknown>\n"
1313"Language-Team: Amharic <am@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-23 06:03+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-04-30 05:36+0000\n"
19+"X-Generator: Launchpad (build 17995)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
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
@@ -73,53 +73,35 @@ msgctxt "Button: Log out from the system"
7373msgid "Log Out"
7474msgstr "መውጫ"
7575
76−#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:194
77−#: qml/Components/Dialogs.qml:253
76+#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
77+#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
78+#: qml/Wizard/Pages/passcode-set.qml:32
7879msgid "Cancel"
7980msgstr "መሰረዣ"
8081
8182#: qml/Components/Dialogs.qml:173
82−msgctxt "Title: Reboot/Shut down dialog"
83−msgid "Shut down"
84−msgstr "ማጥፊያ"
85−
86−#: qml/Components/Dialogs.qml:174
87−msgid "Are you sure you want to shut down?"
88−msgstr "በእርግጥ ማጥፋት ይፈልጋሉ?"
89−
90−#: qml/Components/Dialogs.qml:176
91−msgctxt "Button: Reboot the system"
92−msgid "Reboot"
93−msgstr "እንደገና ማስነሻ"
94−
95−#: qml/Components/Dialogs.qml:185
96−msgctxt "Button: Shut down the system"
97−msgid "Shut down"
98−msgstr "ማጥፊያ"
99−
100−#: qml/Components/Dialogs.qml:207
10183msgctxt "Title: Reboot dialog"
10284msgid "Reboot"
10385msgstr "እንደገና ማስነሻ"
10486
105−#: qml/Components/Dialogs.qml:208
87+#: qml/Components/Dialogs.qml:174
10688msgid "Are you sure you want to reboot?"
10789msgstr "በእርግጥ እንደገና ማስነሳት ይፈልጋሉ?"
10890
109−#: qml/Components/Dialogs.qml:210
91+#: qml/Components/Dialogs.qml:176
11092msgid "No"
11193msgstr "አይ"
11294
113−#: qml/Components/Dialogs.qml:217
95+#: qml/Components/Dialogs.qml:182
11496msgid "Yes"
11597msgstr "አዎ"
11698
117−#: qml/Components/Dialogs.qml:232
99+#: qml/Components/Dialogs.qml:197
118100msgctxt "Title: Power off/Restart dialog"
119101msgid "Power"
120102msgstr "ሐይል"
121103
122−#: qml/Components/Dialogs.qml:233
104+#: qml/Components/Dialogs.qml:198
123105msgid ""
124106"Are you sure you would like\n"
125107"to power off?"
@@ -127,25 +109,25 @@ msgstr ""
127109"በእርግጥ ሐይሉን ማጥፋት\n"
128110"ይፈልጋሉ?"
129111
130−#: qml/Components/Dialogs.qml:235
112+#: qml/Components/Dialogs.qml:200
131113msgctxt "Button: Power off the system"
132114msgid "Power off"
133115msgstr "ሐይል ማጥፊያ"
134116
135−#: qml/Components/Dialogs.qml:244
117+#: qml/Components/Dialogs.qml:209
136118msgctxt "Button: Restart the system"
137119msgid "Restart"
138120msgstr "እንደገና ማስጀመሪያ"
139121
140−#: qml/Components/Lockscreen.qml:245
122+#: qml/Components/Lockscreen.qml:231
141123msgid "Return to Call"
142124msgstr "ወደ ጥሪ መመለሻ"
143125
144−#: qml/Components/Lockscreen.qml:245
126+#: qml/Components/Lockscreen.qml:231
145127msgid "Emergency Call"
146128msgstr "የ ድንገተኛ ጥሪ"
147129
148−#: qml/Components/Lockscreen.qml:277
130+#: qml/Components/Lockscreen.qml:263
149131msgid "OK"
150132msgstr "እሺ"
151133
@@ -154,6 +136,8 @@ msgid "Apps may have unsaved data:"
154136msgstr "መተግበሪያው ያልተቀመጠ ዳታ ይዟል:"
155137
156138#: qml/Components/ModeSwitchWarningDialog.qml:57
139+msgctxt ""
140+"Re-dock means connect the device again to an external screen/mouse/keyboard"
157141msgid "Re-dock, save your work and close these apps to continue."
158142msgstr "እንደገና-ማሳረፊያ: ስራዎትን ያስቀምጡ እና ይዝጉ መተግበሪያው እንዲቀጥል"
159143
@@ -173,42 +157,58 @@ msgstr "አሁን እንደገና መገናኛ!"
173157msgid "Close all"
174158msgstr "ሁሉንም መዝጊያ"
175159
176−#: qml/Dash/DashPageHeader.qml:266
160+#: qml/Dash/DashPageHeader.qml:337
177161msgctxt "Button: Open the Ubuntu Store"
178162msgid "Store"
179163msgstr "ማስቀመጫ"
180164
181−#: qml/Dash/DashPageHeader.qml:273
165+#: qml/Dash/DashPageHeader.qml:344
182166msgctxt "Button: Start a search in the current dash scope"
183167msgid "Search"
184168msgstr "መፈለጊያ"
185169
186−#: qml/Dash/DashPageHeader.qml:283
170+#: qml/Dash/DashPageHeader.qml:354
187171msgctxt "Button: Show the current dash scope settings"
188172msgid "Settings"
189173msgstr "ማሰናጃዎች"
190174
191−#: qml/Dash/DashPageHeader.qml:290
175+#: qml/Dash/DashPageHeader.qml:361
192176msgid "Remove from Favorites"
193177msgstr "ከምወዳቸው ማስወገጃ"
194178
195−#: qml/Dash/DashPageHeader.qml:290
179+#: qml/Dash/DashPageHeader.qml:361
196180msgid "Add to Favorites"
197181msgstr "ወደምወዳቸው መጨመሪያ"
198182
199−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
200−msgid "See less"
201−msgstr "አነስተኛ መመልከቻ"
183+#: qml/Dash/FiltersPopover.qml:60
184+msgid "Refine your results"
185+msgstr "የ እርስዎን ውጤቶች እንደገና ማጣሪያ"
202186
203−#: qml/Dash/GenericScopeView.qml:587
204−msgid "See all"
205−msgstr "ሁሉንም መመልከቻ"
187+#: qml/Dash/FiltersPopover.qml:69
188+msgid "Reset"
189+msgstr "እንደ ነበረ መመለሻ"
190+
191+#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
192+msgid "Show less"
193+msgstr ""
206194
207−#: qml/Dash/GenericScopeView.qml:649
195+#: qml/Dash/GenericScopeView.qml:570
196+msgid "Show all"
197+msgstr ""
198+
199+#: qml/Dash/GenericScopeView.qml:627
208200msgctxt "Label: Hint for dash search line edit"
209201msgid "Search"
210202msgstr "መፈለጊያ"
211203
204+#: qml/Dash/PageHeaderExtraPanel.qml:55
205+msgid "Recent Searches"
206+msgstr "የ ቅርብ ጊዜ ፍለጋዎች"
207+
208+#: qml/Dash/PageHeaderExtraPanel.qml:66
209+msgid "Clear All"
210+msgstr "ሁሉንም ማጽጃ"
211+
212212#: qml/Dash/Previews/PreviewActionCombo.qml:35
213213msgid "More..."
214214msgstr "ተጨማሪ..."
@@ -230,7 +230,7 @@ msgstr "ለዚህ ደረጃ ይስጡ"
230230msgid "Add a review"
231231msgstr "ግምገማ መጨመሪያ"
232232
233−#: qml/Dash/Previews/PreviewSharing.qml:50
233+#: qml/Dash/Previews/PreviewSharing.qml:66
234234msgid "Preview Share Item"
235235msgstr "የሚካፈሉትን እቃ ቅድመ እይታ"
236236
@@ -258,14 +258,13 @@ msgstr "ቤት"
258258msgid "Also installed"
259259msgstr "እንዲሁም የተገጠሙ"
260260
261−#: qml/DisabledScreenNotice.qml:87
261+#: qml/DisabledScreenNotice.qml:104
262262msgid ""
263263"Your device is now connected to an external display. Use this screen as a "
264−"touch pad to interact with the mouse."
265−msgstr ""
266−"የ እርስዎ አካል አሁን ከ ውጪ ማሳያ ጋር ተገናኝቷል: ይህን መመልከቻ እንደ ተችፓድ ከ አይጥ ጋር ተባብሮ ይሰራል"
264+"touch pad to interact with the pointer."
265+msgstr "የ እርስዎ አካል አሁን ከ ውጪ ማሳያ ጋር ተገናኝቷል: ይህን መመልከቻ እንደ ተችፓድ መጠቀሚያ"
267266
268−#: qml/Greeter/CoverPage.qml:107
267+#: qml/Greeter/CoverPage.qml:118
269268msgid "Unlock"
270269msgstr "መክፈቻ"
271270
@@ -277,11 +276,11 @@ msgstr "እንደገና ይሞክሩ"
277276msgid "Tap to unlock"
278277msgstr "ለመክፈት መታ ያድርጉ"
279278
280−#: qml/Greeter/NarrowView.qml:54 qml/Wizard/Pages/passwd-confirm.qml:53
279+#: qml/Greeter/NarrowView.qml:54
281280msgid "Sorry, incorrect passphrase."
282281msgstr "አዝናለሁ የተሳሳተ የማለፊያ ሐረግ"
283282
284−#: qml/Greeter/NarrowView.qml:55 qml/Wizard/Pages/passwd-confirm.qml:54
283+#: qml/Greeter/NarrowView.qml:55
285284msgid "Sorry, incorrect passcode."
286285msgstr "አዝናለሁ የተሳሳተ የማለፊያ ኮድ"
287286
@@ -310,7 +309,7 @@ msgstr ""
310309msgid "Enter %1"
311310msgstr "ማስገቢያ %1"
312311
313−#: qml/Greeter/NarrowView.qml:117 qml/Wizard/Pages/passwd-set.qml:60
312+#: qml/Greeter/NarrowView.qml:117
314313msgid "Enter passphrase"
315314msgstr "የ ማለፊያ ሀረግ ያስገቡ"
316315
@@ -336,7 +335,7 @@ msgstr "እባክዎን እንደገና-ያስገቡ"
336335msgid "Sorry, incorrect passcode"
337336msgstr "አዝናለሁ የተሳሳተ የማለፊያ ኮድ"
338337
339−#: qml/Notifications/NotificationMenuItemFactory.qml:129
338+#: qml/Notifications/NotificationMenuItemFactory.qml:124
340339msgid "Show password"
341340msgstr "የመግቢያ ቃል ማሳያ"
342341
@@ -348,62 +347,62 @@ msgstr "ወደ ጥሪው ለመመለስ መታ ያድርጉ..."
348347msgid "Conference"
349348msgstr "ስብሰባ"
350349
351−#: qml/Panel/Indicators/MenuItemFactory.qml:753
350+#: qml/Panel/Indicators/MenuItemFactory.qml:762
352351msgid "Nothing is playing"
353352msgstr "ምንም አይጫወትም"
354353
355−#: qml/Panel/Indicators/MenuItemFactory.qml:882
354+#: qml/Panel/Indicators/MenuItemFactory.qml:891
356355#, qt-format
357356msgid "%1 hour"
358357msgid_plural "%1 hours"
359358msgstr[0] "%1 ሰአት"
360359msgstr[1] "%1 ሰአቶች"
361360
362−#: qml/Panel/Indicators/MenuItemFactory.qml:886
361+#: qml/Panel/Indicators/MenuItemFactory.qml:895
363362#, qt-format
364363msgid "%1 minute"
365364msgid_plural "%1 minutes"
366365msgstr[0] "%1 ደቂቃ"
367366msgstr[1] "%1 ደቂቃዎች"
368367
369−#: qml/Panel/Indicators/MenuItemFactory.qml:891
368+#: qml/Panel/Indicators/MenuItemFactory.qml:900
370369#, qt-format
371370msgid "%1 second"
372371msgid_plural "%1 seconds"
373372msgstr[0] "%1 ሰከንድ"
374373msgstr[1] "%1 ሰከንዶች"
375374
376−#: qml/Panel/Indicators/MenuItemFactory.qml:894
375+#: qml/Panel/Indicators/MenuItemFactory.qml:903
377376msgid "0 seconds"
378377msgstr "0 ሰከንዶች"
379378
380379#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
381−#: qml/Panel/Indicators/MenuItemFactory.qml:896
380+#: qml/Panel/Indicators/MenuItemFactory.qml:905
382381#, qt-format
383382msgid "%1 remaining"
384383msgstr "%1 የቀረው"
385384
386−#: qml/Panel/Indicators/MenuItemFactory.qml:902
385+#: qml/Panel/Indicators/MenuItemFactory.qml:911
387386msgid "In queue…"
388387msgstr "ወረፋ በመጠበቅ ላይ…"
389388
390−#: qml/Panel/Indicators/MenuItemFactory.qml:906
389+#: qml/Panel/Indicators/MenuItemFactory.qml:915
391390msgid "Downloading"
392391msgstr "በማውረድ ላይ"
393392
394−#: qml/Panel/Indicators/MenuItemFactory.qml:908
393+#: qml/Panel/Indicators/MenuItemFactory.qml:917
395394msgid "Paused, tap to resume"
396395msgstr "ማስቆሚያ: ለመቀጠል መታ ያድርጉ"
397396
398−#: qml/Panel/Indicators/MenuItemFactory.qml:910
397+#: qml/Panel/Indicators/MenuItemFactory.qml:919
399398msgid "Canceled"
400399msgstr "ተሰርዟል"
401400
402−#: qml/Panel/Indicators/MenuItemFactory.qml:912
401+#: qml/Panel/Indicators/MenuItemFactory.qml:921
403402msgid "Finished"
404403msgstr "ጨርሷል"
405404
406−#: qml/Panel/Indicators/MenuItemFactory.qml:914
405+#: qml/Panel/Indicators/MenuItemFactory.qml:923
407406msgid "Failed, tap to retry"
408407msgstr "አልተቻለም: እንደገና ለመሞከር መታ ያድርጉ"
409408
@@ -423,255 +422,326 @@ msgctxt "Button: Call back on phone"
423422msgid "Call back"
424423msgstr "መልሶ መደወያ"
425424
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−
434−#: qml/Tutorial/TutorialBottom.qml:28
435−msgid "Open special menus"
436−msgstr "የተለዩ ዝርዝሮች መክፈቻ"
425+#: qml/Stages/SideStage.qml:76
426+msgid "Drag using 3 fingers any application from one window to the other"
427+msgstr "መጎተቻ 3 ጣቶች በ መጠቀም ማንኛውንም መተግበሪያ ከ አንድ መስኮት ወደ ሌላ"
437428
438−#: qml/Tutorial/TutorialBottom.qml:29
439−msgid "Swipe up from the bottom edge."
440−msgstr "ከ ታች ጠርዝ በኩል ወደ ላይ ይጥረጉ"
429+#: qml/Tutorial/TutorialBottom.qml:78
430+msgid "Swipe up to add a contact"
431+msgstr "ወደ ላይ ይጥረጉ ግንኙነት ለ መጨመር"
441432
442−#: qml/Tutorial/TutorialBottomFinish.qml:24
443−msgid "This action does different things for different apps"
444−msgstr "ይህ ተግባር ለተለያዩ መተግበሪያዎች የተለያየ ነገር ይሰራል"
433+#: qml/Tutorial/TutorialBottom.qml:80
434+msgid "Swipe up for favorite calculations"
435+msgstr "ወደ ላይ ይጥረጉ የሚወዱትን ለማስላት"
445436
446−#: qml/Tutorial/TutorialBottomFinish.qml:25
447−msgid "Tap here to finish."
448−msgstr "እዚህ መታ ይድርጉ ለመጨረስ"
437+#: qml/Tutorial/TutorialBottom.qml:82
438+msgid "Swipe up for recent calls"
439+msgstr "ወደ ላይ ይጥረጉ ለ ቅርብ ጊዜ ጥሪዎች"
449440
450−#: qml/Tutorial/TutorialContent.qml:80 qml/Tutorial/TutorialLeftFinish.qml:25
451−#: qml/Tutorial/TutorialRight.qml:144
452−msgid "Tap here to continue."
453−msgstr "እዚህ መታ ይድርጉ ለመቀጠል"
441+#: qml/Tutorial/TutorialBottom.qml:84
442+msgid "Swipe up to create a message"
443+msgstr "ወደ ላይ ይጥረጉ መልእክት ለ መፍጠር"
454444
455−#: qml/Tutorial/TutorialLeft.qml:26
456−msgid "Open the launcher"
457−msgstr "ማስጀመሪያውን መክፈቻ"
445+#: qml/Tutorial/TutorialBottom.qml:85
446+msgid "Swipe up to manage the app"
447+msgstr "ወደ ላይ ይጥረጉ መተግበሪያ ለማስተዳደር"
458448
459−#: qml/Tutorial/TutorialLeft.qml:27
460−msgid "Short swipe from the left edge."
461−msgstr "ከ ግራ ጠርዝ በኩል በትንሹ ይጥረጉ"
449+#: qml/Tutorial/TutorialLeftLong.qml:47
450+msgid "Long swipe from the left edge to open the Today scope"
451+msgstr "በ ረጅሙ ከ ግራ ጠርዝ በኩል ይጥረጉ የ ዛሬን ክልል ለ መክፈት"
462452
463−#: qml/Tutorial/TutorialLeftFinish.qml:24
464−msgid "These are the shortcuts to favorite apps"
465−msgstr "እነዚህ አቋራጮች ናቸው እርስዎ ለሚወዷቸው መተግበሪያዎች"
453+#: qml/Tutorial/TutorialLeft.qml:47
454+msgid "Swipe from the left edge to open the launcher"
455+msgstr "ከ ግራ ጠርዝ በኩል ይጥረጉ ማስጀመሪያውን ለ መክፈት"
466456
467−#: qml/Tutorial/TutorialPage.qml:178
468−msgid "You almost got it!"
469−msgstr "እርስዎ አሁን እያገኙት ነው!"
470−
471−#: qml/Tutorial/TutorialPage.qml:195
472−msgid "Try again."
473−msgstr "እንደገና ይሞክሩ"
457+#: qml/Tutorial/TutorialRight.qml:55
458+msgid "Push your mouse against the right edge to view your open apps"
459+msgstr ""
474460
475−#: qml/Tutorial/TutorialRight.qml:31
476−msgid "To view open apps"
477−msgstr "ለመመልከት መተግበሪያዎች ይክፈቱ"
461+#: qml/Tutorial/TutorialRight.qml:56
462+msgid "Short or long swipe from the right edge to view your open apps"
463+msgstr "በ አጭሩ ወይንም በ ረጅሙ ይጥረጉ ከ ቀኝ ጠረዝ በኩል የ ተከፈቱ መተግበሪያዎችን ለማየት"
478464
479−#: qml/Tutorial/TutorialRight.qml:32
480−msgid "Long swipe from the right edge."
481−msgstr "ከ ቀኝ ጠርዝ በኩል በረጅሙ ይጥረጉ"
465+#: qml/Tutorial/TutorialTop.qml:53
466+msgid "Swipe from the top right edge to open the notification bar"
467+msgstr "ከ ላይ ቀኝ ጠርዝ በኩል ይጥረጉ የ ማስታወቂያ መደርደሪያ ለ መክፈት"
482468
483−#: qml/Tutorial/TutorialRight.qml:122
484−msgid "View all your running tasks."
485−msgstr "እርስዎ የሚያስኬዱትን ተግባሮች በሙሉ መመልከቻ"
469+#: qml/Tutorial/TutorialTop.qml:54
470+msgid "Swipe from the top edge to open the notification bar"
471+msgstr "ከ ላይ ጠርዝ በኩል ይጥረጉ የ ማስታወቂያ መደርደሪያ ለ መክፈት"
486472
487−#: qml/Wizard/Page.qml:89
473+#: qml/Wizard/Page.qml:54
488474msgctxt "Button: Go back one page in the Wizard"
489475msgid "Back"
490476msgstr "ወደ ኋላ"
491477
492478#: qml/Wizard/Pages/10-welcome.qml:27
493−msgid "Hi!"
494−msgstr "ሰላም"
495−
496−#: qml/Wizard/Pages/10-welcome.qml:44
497−msgid "Welcome to your Ubuntu device."
498−msgstr "እንኳን ድህና መጡ ወደ ኡቡንቱ"
499−
500−#: qml/Wizard/Pages/10-welcome.qml:52
501−msgid "Let’s get started."
502−msgstr "ስራ እንጀምር"
503−
504−#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:133
505−#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
506−#: qml/Wizard/Pages/60-reporting.qml:60 qml/Wizard/Pages/passwd-confirm.qml:82
507−#: qml/Wizard/Pages/passwd-set.qml:90
508−msgid "Continue"
479+msgid "Language"
480+msgstr "ቋንቋ"
481+
482+#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
483+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
484+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
485+#: qml/Wizard/Pages/75-report-check.qml:84
486+#: qml/Wizard/Pages/passcode-desktop.qml:124
487+#: qml/Wizard/Pages/password-set.qml:141
488+msgid "Next"
509489msgstr "ይቀጥሉ"
510490
511−#: qml/Wizard/Pages/20-sim.qml:25
512−msgid "Add a SIM card and restart your device"
513−msgstr "የ ሲም ካርድ ይጨምሩ እና አካሉን እንደገና ያስነሱ"
491+#: qml/Wizard/Pages/30-wifi.qml:29
492+msgid "Connect to Wi‑Fi"
493+msgstr "ወደ ዋይ‑ፋይ መገናኛ"
494+
495+#: qml/Wizard/Pages/30-wifi.qml:130
496+msgid "Connected"
497+msgstr "ተገናኝቷል"
498+
499+#: qml/Wizard/Pages/30-wifi.qml:163
500+msgid "Available Wi-Fi networks"
501+msgstr "ዝግጁ የ ዋይ-ፋይ ኔትዎርኮች"
514502
515−#: qml/Wizard/Pages/20-sim.qml:59
516−msgid "Without it, you won’t be able to make calls or use text messaging."
517−msgstr "ያለ እሱ ጥሪ መፈጸም ወይንም የ ጽሁፍ መልእክት መላክ አይችሉም"
503+#: qml/Wizard/Pages/30-wifi.qml:164
504+msgid "No available Wi-Fi networks"
505+msgstr "ምንም ዝግጁ ዋይ-ፋይ ኔትዎርኮች አልተገኙም"
518506
519−#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
507+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
508+#: qml/Wizard/Pages/sim.qml:101
520509msgid "Skip"
521510msgstr "መዝለያ"
522511
523−#: qml/Wizard/Pages/30-passwd-type.qml:39
524−msgid "Lock security"
525−msgstr "ደህንነት መቆለፊያ"
512+#: qml/Wizard/Pages/40-location.qml:27
513+msgid "Location Services"
514+msgstr "የ አካባቢ ግልጋሎት"
526515
527−#: qml/Wizard/Pages/30-passwd-type.qml:79
528−msgid "Please select how you’d like to unlock your device."
529−msgstr "እባክዎን የ እርስዎን አካል እንዴት እንደሚከፈት ይምረጡ"
516+#: qml/Wizard/Pages/40-location.qml:83
517+msgid ""
518+"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
519+"(recommended)"
520+msgstr "ይጠቀሙ ጂፒኤስ: ዋይ-ፋይ: hotspots እና ተንቀሳቃሽ ኔትዎርክ ሳይታወቁ አካባቢ ለማግኘት (ይመከራሉ)"
530521
531−#: qml/Wizard/Pages/30-passwd-type.qml:102
532−msgctxt "Label: Type of security method"
533−msgid "Swipe"
534−msgstr "መጥረጊያ"
522+#: qml/Wizard/Pages/40-location.qml:105
523+#, qt-format
524+msgid "By selecting this option you agree to the Nokia HERE %1."
525+msgstr "ይህን ምርጫ በ መምረጥ እርስዎ ተስማምተዋል ከ Nokia HERE %1."
535526
536−#: qml/Wizard/Pages/30-passwd-type.qml:103
537−msgctxt "Label: Description of security method"
538−msgid "No security"
539−msgstr "ደህንነት አልተገኘም"
527+#: qml/Wizard/Pages/40-location.qml:106
528+msgctxt "part of: Nokia HERE terms and conditions"
529+msgid "terms and conditions"
530+msgstr "ስምምነት እና ሁኔታዎች"
540531
541−#: qml/Wizard/Pages/30-passwd-type.qml:105
542−msgctxt "Label: Type of security method"
543−msgid "Passcode"
544−msgstr "ማለፊያ ኮድ"
532+#: qml/Wizard/Pages/40-location.qml:160
533+msgid "GPS only"
534+msgstr "ጂፒኤስ ብቻ"
545535
546−#: qml/Wizard/Pages/30-passwd-type.qml:106
547−msgctxt "Label: Description of security method"
548−msgid "4 digits only"
549−msgstr "4 ዲጂት ብቻ"
536+#: qml/Wizard/Pages/40-location.qml:214
537+msgid "Don't use my location"
538+msgstr "የ እኔን አካባቢ አትጠቀም"
550539
551−#: qml/Wizard/Pages/30-passwd-type.qml:108
552−msgctxt "Label: Type of security method"
553−msgid "Passphrase"
554−msgstr "የማለፊያ ሐረግ"
540+#: qml/Wizard/Pages/40-location.qml:260
541+msgid "You can change it later in System Settings."
542+msgstr "እርስዎ በኋላ በ ስርአት ማሰናጃ ውስጥ መቀየር ይችላሉ"
555543
556−#: qml/Wizard/Pages/30-passwd-type.qml:109
557−msgctxt "Label: Description of security method"
558−msgid "Numbers and letters"
559−msgstr "ቁጥሮች እና ፊደሎች"
544+#: qml/Wizard/Pages/50-timezone.qml:29
545+msgid "Time Zone"
546+msgstr "የ ሰአት ክልል"
560547
561−#: qml/Wizard/Pages/40-wifi.qml:29
562−msgid "Connect to Wi‑Fi"
563−msgstr "ወደ ዋይ‑ፋይ መገናኛ"
548+#: qml/Wizard/Pages/50-timezone.qml:178
549+msgid "Enter your city"
550+msgstr "የ እርስዎን ከተማ ያስገቡ"
564551
565−#: qml/Wizard/Pages/40-wifi.qml:168
566−msgid "Available networks…"
567−msgstr "ዝግጁ ኔትዎርኮች…"
552+#: qml/Wizard/Pages/60-account.qml:24
553+msgid "Personalize Your Device"
554+msgstr "የ እርስዎን አካል የ ግልዎ ያድርጉ"
568555
569−#: qml/Wizard/Pages/40-wifi.qml:169
570−msgid "No available networks."
571−msgstr "ዝግጁ ኔትዎርኮች አልተገኙም"
556+#: qml/Wizard/Pages/60-account.qml:48
557+msgid "Preferred Name"
558+msgstr "የመረጡት ስም"
572559
573−#: qml/Wizard/Pages/50-location.qml:27
574−msgid "Location"
575−msgstr "አካባቢ"
560+#: qml/Wizard/Pages/70-passwd-type.qml:39
561+msgid "Lock Screen"
562+msgstr "መመልከቻውን መቆለፊያ"
576563
577−#: qml/Wizard/Pages/50-location.qml:62
578−msgid "Let the phone detect your location:"
579−msgstr "እባክዎን እርስዎ ያሉበትን አካባቢ ስልኩ እራሱ ይፈልግ:"
564+#: qml/Wizard/Pages/70-passwd-type.qml:101
565+msgctxt "Label: Type of security method"
566+msgid "Create new password"
567+msgstr "አዲስ የ መግቢያ ቃል መፍጠሪያ"
580568
581−#: qml/Wizard/Pages/50-location.qml:69
582−msgid "Using GPS only (less accurate)"
583−msgstr "ጂፒኤስን ብቻ መጠቀሚያ(በጣም ቅርብ)"
569+#: qml/Wizard/Pages/70-passwd-type.qml:103
570+msgctxt "Label: Type of security method"
571+msgid "Create passcode (numbers only)"
572+msgstr "አዲስ የ ማለፊያ ኮድ መፍጠሪያ (ቁጥር ብቻ)"
584573
585−#: qml/Wizard/Pages/50-location.qml:86
586−msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
587−msgstr "ይጠቀሙ ጂፒኤስ ግልጽ ያልሆነ ዋይ-ፋይ እና ተንቀሳቃሽ ኔትዎርክ መረጃ (ይመከራሉ)"
574+#: qml/Wizard/Pages/70-passwd-type.qml:105
575+msgctxt "Label: Type of security method"
576+msgid "No lock code"
577+msgstr "ምንም መቆለፊያ ኮድ አልተገኘም"
588578
589−#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
590−#: qml/Wizard/Pages/50-location.qml:103
591−msgid ""
592−"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
593−"conditions</a>."
594−msgstr "ይህን ምርጫ በመምረጥ ተስማምቻለሁ ከ Nokia HERE <a href='#'>ውሎች እና ሁኔታዎች ጋር</a>."
579+#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
580+msgid "Privacy Policy"
581+msgstr "የ ግላዊነት መመሪያ"
582+
583+#: qml/Wizard/Pages/75-report-check.qml:26
584+msgid "Help Us Improve"
585+msgstr "እንድንሻሻል ይርዱን"
586+
587+#: qml/Wizard/Pages/75-report-check.qml:59
588+msgid "Improve system performance by sending us crashes and error reports."
589+msgstr "የ ስርአቱን አፈጻጸም ለማሻሻል የ ግጭት እና የ ስህተት መልእክቶች ይላኩልን"
590+
591+#: qml/Wizard/Pages/75-report-check.qml:60
592+msgid "Privacy policy"
593+msgstr "የ ግላዊነት መመሪያ"
594+
595+#: qml/Wizard/Pages/80-finished.qml:89
596+msgid "Welcome to Ubuntu"
597+msgstr "እንኳን ደህና መጡ ወደ ኡቡንቱ"
595598
596−#: qml/Wizard/Pages/50-location.qml:112
597−msgid "Not at all"
598−msgstr "አይደለም"
599+#: qml/Wizard/Pages/80-finished.qml:104
600+msgid "You are ready to use your device now"
601+msgstr "የ እርስዎን አካል ለ መጠቀም አሁን ዝግጁ ነው"
599602
600−#: qml/Wizard/Pages/50-location.qml:124
601−msgid "You can change your mind later in <b>System Settings</b>."
602−msgstr "እርስዎ በኋላ መቀየር ይችላሉ ከ <b>ስርአት ማሰናጃዎች</b>."
603+#: qml/Wizard/Pages/80-finished.qml:124
604+msgid "Get Started"
605+msgstr "እንጀምር"
603606
604−#: qml/Wizard/Pages/60-reporting.qml:26
605−msgid "Improving your experience"
606−msgstr "የ እርስዎን ልምምድ ማሻሻያ"
607+#: qml/Wizard/Pages/here-terms.qml:25
608+msgid "Terms & Conditions"
609+msgstr "ውሎች & ሁኔታዎች"
610+
611+#: qml/Wizard/Pages/here-terms.qml:69
612+msgid "Your device uses positioning technologies provided by HERE."
613+msgstr "የ እርስዎ አካል ይጠቀማል ያሉበትን አካባቢ ቴክኖሎጂ የቀረበውን በ HERE."
607614
608−#: qml/Wizard/Pages/60-reporting.qml:46
615+#: qml/Wizard/Pages/here-terms.qml:81
609616msgid ""
610−"Your phone is set up to automatically report errors to Canonical and its "
611−"partners, the makers of the operating system."
617+"To provide you with positioning services and to improve their quality, HERE "
618+"collects information about nearby cell towers and Wi-Fi hotspots around your "
619+"current location whenever your position is being found."
612620msgstr ""
613−"የ እርስዎ ስልክ ራሱ በራሱ የ ስህተት መግለጫዎች ወደ Canonical and its partners, የ መስሪያ ስርአት "
614−"አምራቾች"
621+"እርስዎ ያሉበትን አካባቢ ግልጋሎት ለ መስጠት እና ለማሻሻል: HERE መረጃ ይሰበስባል በቅርብ ያሉ የ ሴል ምሶሶዎች እና "
622+"ዋይ-ፋይ hotspots እርስዎ አሁን ያሉበትን አካባቢ ሲታወቅ"
615623
616−#: qml/Wizard/Pages/60-reporting.qml:53
624+#: qml/Wizard/Pages/here-terms.qml:93
617625msgid ""
618−"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
619−"Privacy</b>"
620−msgstr ""
621−"ይህን ግልጋሎት ማሰናከል ይችላሉ ከ <b>ስርአት ማሰናጃዎች</b> under <b>Security &amp; Privacy</b>"
626+"The information collected is used to analyze the service and to improve the "
627+"use of service, but not to identify you personally."
628+msgstr "የ ተሰበሰበው መረጃ የሚጠቅመው ግልጋሎት ለማሻሻል ነው: ነገር ግን እርስዎን በ ግል ለ መለየት አይደለም"
622629
623−#: qml/Wizard/Pages/80-finished.qml:24
624−msgid "All done"
625−msgstr "ሁሉም ተፈጽሟል"
630+#: qml/Wizard/Pages/here-terms.qml:106
631+#, qt-format
632+msgid "By continuing, you agree to the HERE platform %1 and %2."
633+msgstr "በ መቀጠል እርስዎ ተስማምተዋል ከ HERE platform %1 እና %2."
626634
627−#: qml/Wizard/Pages/80-finished.qml:39
628−msgid "Nice work!"
629−msgstr "ጥሩ ሰርተዋል!"
635+#: qml/Wizard/Pages/here-terms.qml:107
636+msgid "Service Terms"
637+msgstr "የ ግልጋሎት ስምምነቶች"
630638
631−#: qml/Wizard/Pages/80-finished.qml:46
632−msgid "Your device is now ready to use."
633−msgstr "የ እርስዎ አካል አሁን ዝግጁ ነው"
639+#: qml/Wizard/Pages/passcode-confirm.qml:43
640+#: qml/Wizard/Pages/passcode-desktop.qml:80
641+msgid "Confirm passcode"
642+msgstr "የማለፊያ ኮድ ማረጋገጫ"
634643
635−#: qml/Wizard/Pages/80-finished.qml:53
636−msgid "Finish"
637−msgstr "መጨረሻ"
644+#: qml/Wizard/Pages/passcode-confirm.qml:45
645+msgid "Incorrect passcode."
646+msgstr "የ ተሳሳተ የማለፊያ ኮድ"
638647
639−#: qml/Wizard/Pages/here-terms.qml:27
640−msgid "Terms & Conditions"
641−msgstr "ውሎች & ሁኔታዎች"
648+#: qml/Wizard/Pages/passcode-confirm.qml:45
649+msgctxt "Enter the passcode again"
650+msgid "Please re-enter."
651+msgstr "እባክዎን እንደገና-ያስገቡ"
642652
643−#: qml/Wizard/Pages/passwd-confirm.qml:49
644−msgid "Confirm passphrase"
645−msgstr "የ ማለፊያ ሐረግ ማረጋገጫ"
653+#: qml/Wizard/Pages/passcode-desktop.qml:30
654+msgid "Lock Screen Passcode"
655+msgstr "የ መመልከቻው መቆለፊያ የ ማለፊያ ኮድ"
646656
647−#: qml/Wizard/Pages/passwd-confirm.qml:50
648−msgid "Confirm passcode"
649−msgstr "የማለፊያ ኮድ ማረጋገጫ"
657+#: qml/Wizard/Pages/passcode-desktop.qml:56
658+msgid "Enter 4 numbers to setup your passcode"
659+msgstr "ያስገቡ 4 ቁጥሮች የ እርስዎን የ ማለፊያ ኮድ ለማሰናዳት"
650660
651−#: qml/Wizard/Pages/passwd-confirm.qml:53
652−#: qml/Wizard/Pages/passwd-confirm.qml:54
653−msgid "Please try again."
654−msgstr "እባክዎን እንደገና ይሞክሩ"
661+#: qml/Wizard/Pages/passcode-desktop.qml:65
662+#: qml/Wizard/Pages/passcode-set.qml:54
663+msgid "Choose passcode"
664+msgstr "የ ማለፊያ ኮድ ይምረጡ"
655665
656−#: qml/Wizard/Pages/passwd-set.qml:61
657−msgid "Choose your passcode"
658−msgstr "የ እርስዎን የማለፊያ ኮድ ይምረጡ"
666+#: qml/Wizard/Pages/passcode-desktop.qml:105
667+msgid "Passcode too short"
668+msgstr "የ ማለፊያ ኮዱ በጣም አጭር ነው"
659669
660−#: qml/Wizard/Pages/passwd-set.qml:68
661−msgid "Passphrase must be 4 characters long"
662−msgstr "የ ማለፊያ ሀረግ ቢያንስ 4 ባህሪዎች መሆን አለበት"
670+#: qml/Wizard/Pages/passcode-desktop.qml:107
671+msgid "Passcodes match"
672+msgstr "የ ማለፊያ ኮዶቹ ተመሳሳይ ናቸው"
663673
664−#. Translators: This is the arrow for "Back" buttons
665−#: qml/Wizard/StackButton.qml:39
666−#, qt-format
667−msgid "〈 %1"
668−msgstr "〈 %1"
674+#: qml/Wizard/Pages/passcode-desktop.qml:109
675+msgid "Passcodes do not match"
676+msgstr "የ ማለፊያ ኮዶቹ አይመሳሰሉም"
669677
670−#. Translators: This is the arrow for "Forward" buttons
671−#: qml/Wizard/StackButton.qml:42
672−#, qt-format
673−msgid "%1 〉"
674−msgstr "%1 〉"
678+#: qml/Wizard/Pages/passcode-set.qml:62
679+msgid "Passcode must be 4 characters long"
680+msgstr "የ ማለፊያ ኮድ 4 ባህሪዎች መሆን አለበት"
681+
682+#: qml/Wizard/Pages/password-set.qml:30
683+msgid "Lock Screen Password"
684+msgstr "የ መመልከቻ መቆለፊያ የ መግቢያ ቃል"
685+
686+#: qml/Wizard/Pages/password-set.qml:61
687+msgid "Enter at least 8 characters"
688+msgstr "ያስገቡ ቢያንስ 8 ባህሪዎች"
689+
690+#: qml/Wizard/Pages/password-set.qml:73
691+msgid "Choose password"
692+msgstr "የ መግቢያ ቃል ይምረጡ"
693+
694+#: qml/Wizard/Pages/password-set.qml:103
695+msgid "Confirm password"
696+msgstr "የ መግቢያ ቃሉን ያረጋግጡ"
697+
698+#: qml/Wizard/Pages/sim.qml:27
699+msgid "No SIM card installed"
700+msgstr "ምንም ሲም ካርድ አልተገጠመም"
701+
702+#: qml/Wizard/Pages/sim.qml:54
703+msgid "SIM card added"
704+msgstr "ሲም ካርድ ተጨምሯል"
705+
706+#: qml/Wizard/Pages/sim.qml:55
707+msgid "You must restart the device to access the mobile network."
708+msgstr "እርስዎ አካሉን እንደገና ማስጀመር አለብዎት ተንቀሳቃሽ ኔትዎርክ ጋር ለ መድረስ"
709+
710+#: qml/Wizard/Pages/sim.qml:59
711+msgid "Restart"
712+msgstr "እንደገና ማስጀመሪያ"
713+
714+#: qml/Wizard/Pages/sim.qml:78
715+msgid "You won’t be able to make calls or use text messaging without a SIM."
716+msgstr "ያለ ሲም ካርድ እርስዎ ጥሪ መፈጸም ወይንም በ ጽሁፍ መልእክት መላክ አይችሉም"
717+
718+#: qml/Wizard/Pages/sim.qml:90
719+msgid "To proceed with no SIM tap Skip."
720+msgstr "ያለ ሲም ለ መቀጠል መዝለያውን መታ ያድርጉ"
721+
722+#: qml/Wizard/PasswordMeter.qml:87
723+msgid "Passwords match"
724+msgstr "የ መግቢያ ቃሎቹ ተመሳሳይ ናቸው"
725+
726+#: qml/Wizard/PasswordMeter.qml:89
727+msgid "Passwords do not match"
728+msgstr "የ መግቢያ ቃሎቹ ተመሳሳይ አይደሉም"
729+
730+#: qml/Wizard/PasswordMeter.qml:93
731+msgid "Strong password"
732+msgstr "ጠንካራ የ መግቢያ ቃል"
733+
734+#: qml/Wizard/PasswordMeter.qml:95
735+msgid "Fair password"
736+msgstr "ደህና የ መግቢያ ቃል"
737+
738+#: qml/Wizard/PasswordMeter.qml:97
739+msgid "Weak password"
740+msgstr "ደካማ የ መግቢያ ቃል"
741+
742+#: qml/Wizard/PasswordMeter.qml:99
743+msgid "Very weak password"
744+msgstr "በጣም ደካማ የ መግቢያ ቃል"
675745
676746#~ msgid "Top edge"
677747#~ msgstr "የላይ ጠርዝ"
@@ -703,6 +773,12 @@ msgstr "%1 〉"
703773#~ msgid "Search"
704774#~ msgstr "መፈለጊያ"
705775
776+#~ msgid "See less"
777+#~ msgstr "አነስተኛ መመልከቻ"
778+
779+#~ msgid "See all"
780+#~ msgstr "ሁሉንም መመልከቻ"
781+
706782#~ msgid "Skip intro"
707783#~ msgstr "መግቢያውን መዝለያ"
708784
@@ -742,6 +818,9 @@ msgstr "%1 〉"
742818#~ msgid "Log out"
743819#~ msgstr "መውጫ"
744820
821+#~ msgid "Are you sure you want to shut down?"
822+#~ msgstr "በእርግጥ ማጥፋት ይፈልጋሉ?"
823+
745824#~ msgid "Shut down"
746825#~ msgstr "ማጥፊያ"
747826
@@ -751,14 +830,17 @@ msgstr "%1 〉"
751830#~ msgid "Settings"
752831#~ msgstr "ማሰናጃ"
753832
833+#~ msgid "Unlock SIM"
834+#~ msgstr "ሲም መክፈቻ"
835+
754836#~ msgid ""
755837#~ "You have now mastered the edge gestures and can start using the "
756838#~ "phone<br><br>Tap on the screen to start"
757839#~ msgstr ""
758840#~ "አሁን የ ጠርዝ እንቅስቃሴን አውቀዋል እና መጀመር ይችላሉ ስልኩን መጠቀም <br><br>መመልከቻውን መታ ያድርጉ ለመጀመር"
759841
760−#~ msgid "Restart"
761−#~ msgstr "እንደገና ማስጀመሪያ"
842+#~ msgid "Roaming"
843+#~ msgstr "ማዘዋወሪያ"
762844
763845#~ msgid "Manage Scopes"
764846#~ msgstr "የ ክልል አስተዳዳሪ"
@@ -766,15 +848,182 @@ msgstr "%1 〉"
766848#~ msgid "Please re-enter"
767849#~ msgstr "እባክዎን እንደገና-ያስገቡ"
768850
851+#~ msgid "Lock security"
852+#~ msgstr "ደህንነት መቆለፊያ"
853+
769854#~ msgid "Please select how you’d like to unlock your phone."
770855#~ msgstr "እባክዎን የ እርስዎን ስልክ እንዴት እንደሚከፍቱ ይምረጡ"
771856
857+#~ msgid "Improving your experience"
858+#~ msgstr "የ እርስዎን ልምምድ ማሻሻያ"
859+
860+#~ msgid "Available networks…"
861+#~ msgstr "ዝግጁ ኔትዎርኮች…"
862+
863+#~ msgid "No available networks."
864+#~ msgstr "ዝግጁ ኔትዎርኮች አልተገኙም"
865+
866+#~ msgid "Location"
867+#~ msgstr "አካባቢ"
868+
869+#~ msgid ""
870+#~ "This can be disabled in <b>System Settings</b> under <b>Security &amp; "
871+#~ "Privacy</b>"
872+#~ msgstr ""
873+#~ "ይህን ግልጋሎት ማሰናከል ይችላሉ ከ <b>ስርአት ማሰናጃዎች</b> under <b>Security &amp; Privacy</b>"
874+
875+#~ msgid "Nice work!"
876+#~ msgstr "ጥሩ ሰርተዋል!"
877+
878+#~ msgid "All done"
879+#~ msgstr "ሁሉም ተፈጽሟል"
880+
881+#~ msgid "Finish"
882+#~ msgstr "መጨረሻ"
883+
772884#~ msgid "Your phone is now ready to use."
773885#~ msgstr "ስልኩ አሁን ለመጠቀም ዝግጁ ነው"
774886
887+#~ msgid "Confirm passphrase"
888+#~ msgstr "የ ማለፊያ ሐረግ ማረጋገጫ"
889+
890+#~ msgid "Please try again."
891+#~ msgstr "እባክዎን እንደገና ይሞክሩ"
892+
893+#~ msgid "Add a SIM card and restart your device"
894+#~ msgstr "የ ሲም ካርድ ይጨምሩ እና አካሉን እንደገና ያስነሱ"
895+
896+#~ msgid "Without it, you won’t be able to make calls or use text messaging."
897+#~ msgstr "ያለ እሱ ጥሪ መፈጸም ወይንም የ ጽሁፍ መልእክት መላክ አይችሉም"
898+
899+#~ msgid "Hi!"
900+#~ msgstr "ሰላም"
901+
775902#~ msgid "Welcome to your Ubuntu phone."
776903#~ msgstr "እንኳን ደህና መጡ ወደ እርስዎ ኡቡንቱ ስልክ"
777904
905+#~ msgid "Let’s get started."
906+#~ msgstr "ስራ እንጀምር"
907+
908+#~ msgid "Continue"
909+#~ msgstr "ይቀጥሉ"
910+
911+#~ msgid "Passphrase must be 4 characters long"
912+#~ msgstr "የ ማለፊያ ሀረግ ቢያንስ 4 ባህሪዎች መሆን አለበት"
913+
914+#~ msgid "Choose your passcode"
915+#~ msgstr "የ እርስዎን የማለፊያ ኮድ ይምረጡ"
916+
917+#~ msgid "Let the phone detect your location:"
918+#~ msgstr "እባክዎን እርስዎ ያሉበትን አካባቢ ስልኩ እራሱ ይፈልግ:"
919+
920+#, qt-format
921+#~ msgid "〈 %1"
922+#~ msgstr "〈 %1"
923+
924+#, qt-format
925+#~ msgid "%1 〉"
926+#~ msgstr "%1 〉"
927+
928+#~ msgid "You can change your mind later in <b>System Settings</b>."
929+#~ msgstr "እርስዎ በኋላ መቀየር ይችላሉ ከ <b>ስርአት ማሰናጃዎች</b>."
930+
931+#~ msgid "Not at all"
932+#~ msgstr "አይደለም"
933+
934+#~ msgid "Using GPS only (less accurate)"
935+#~ msgstr "ጂፒኤስን ብቻ መጠቀሚያ(በጣም ቅርብ)"
936+
937+#~ msgid ""
938+#~ "Your phone is set up to automatically report errors to Canonical and its "
939+#~ "partners, the makers of the operating system."
940+#~ msgstr ""
941+#~ "የ እርስዎ ስልክ ራሱ በራሱ የ ስህተት መግለጫዎች ወደ Canonical and its partners, የ መስሪያ ስርአት "
942+#~ "አምራቾች"
943+
944+#~ msgid ""
945+#~ "By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
946+#~ "conditions</a>."
947+#~ msgstr "ይህን ምርጫ በመምረጥ ተስማምቻለሁ ከ Nokia HERE <a href='#'>ውሎች እና ሁኔታዎች ጋር</a>."
948+
949+#~ msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
950+#~ msgstr "ይጠቀሙ ጂፒኤስ ግልጽ ያልሆነ ዋይ-ፋይ እና ተንቀሳቃሽ ኔትዎርክ መረጃ (ይመከራሉ)"
951+
952+#~ msgid "This action does different things for different apps"
953+#~ msgstr "ይህ ተግባር ለተለያዩ መተግበሪያዎች የተለያየ ነገር ይሰራል"
954+
955+#~ msgid "Tap here to finish."
956+#~ msgstr "እዚህ መታ ይድርጉ ለመጨረስ"
957+
958+#~ msgid "Short swipe from the left edge."
959+#~ msgstr "ከ ግራ ጠርዝ በኩል በትንሹ ይጥረጉ"
960+
961+#~ msgid "Open the launcher"
962+#~ msgstr "ማስጀመሪያውን መክፈቻ"
963+
964+#~ msgid "Tap here to continue."
965+#~ msgstr "እዚህ መታ ይድርጉ ለመቀጠል"
966+
967+#~ msgid "These are the shortcuts to favorite apps"
968+#~ msgstr "እነዚህ አቋራጮች ናቸው እርስዎ ለሚወዷቸው መተግበሪያዎች"
969+
970+#~ msgid "Swipe up from the bottom edge."
971+#~ msgstr "ከ ታች ጠርዝ በኩል ወደ ላይ ይጥረጉ"
972+
973+#~ msgid "Open special menus"
974+#~ msgstr "የተለዩ ዝርዝሮች መክፈቻ"
975+
976+#~ msgid "To view open apps"
977+#~ msgstr "ለመመልከት መተግበሪያዎች ይክፈቱ"
978+
979+#~ msgid "Try again."
980+#~ msgstr "እንደገና ይሞክሩ"
981+
982+#~ msgid "You almost got it!"
983+#~ msgstr "እርስዎ አሁን እያገኙት ነው!"
984+
985+#~ msgid "Long swipe from the right edge."
986+#~ msgstr "ከ ቀኝ ጠርዝ በኩል በረጅሙ ይጥረጉ"
987+
988+#~ msgid "View all your running tasks."
989+#~ msgstr "እርስዎ የሚያስኬዱትን ተግባሮች በሙሉ መመልከቻ"
990+
991+#~ msgctxt "Button: Shut down the system"
992+#~ msgid "Shut down"
993+#~ msgstr "ማጥፊያ"
994+
995+#~ msgctxt "Title: Reboot/Shut down dialog"
996+#~ msgid "Shut down"
997+#~ msgstr "ማጥፊያ"
998+
999+#~ msgctxt "Button: Reboot the system"
1000+#~ msgid "Reboot"
1001+#~ msgstr "እንደገና ማስነሻ"
1002+
1003+#~ msgctxt "Label: Type of security method"
1004+#~ msgid "Passcode"
1005+#~ msgstr "ማለፊያ ኮድ"
1006+
1007+#~ msgctxt "Label: Description of security method"
1008+#~ msgid "No security"
1009+#~ msgstr "ደህንነት አልተገኘም"
1010+
1011+#~ msgctxt "Label: Description of security method"
1012+#~ msgid "4 digits only"
1013+#~ msgstr "4 ዲጂት ብቻ"
1014+
1015+#~ msgctxt "Label: Type of security method"
1016+#~ msgid "Swipe"
1017+#~ msgstr "መጥረጊያ"
1018+
1019+#~ msgctxt "Label: Type of security method"
1020+#~ msgid "Passphrase"
1021+#~ msgstr "የማለፊያ ሐረግ"
1022+
1023+#~ msgctxt "Label: Description of security method"
1024+#~ msgid "Numbers and letters"
1025+#~ msgstr "ቁጥሮች እና ፊደሎች"
1026+
7781027#~ msgid "%a %d %b %H:%M"
7791028#~ msgstr "%a %d %b %ሰ:%ደ"
7801029
@@ -807,3 +1056,6 @@ msgstr "%1 〉"
8071056
8081057#~ msgid "Call back"
8091058#~ msgstr "መልሶ መደወያ"
1059+
1060+#~ msgid "Hover your mouse on the right edge to view your open apps"
1061+#~ msgstr "የ እርስዎን አይጥ ወደ ቀኝ ጠርዝ በኩል ሲያደርጉ የ ተከፈቱ መተግበሪያዎች መመልከቻ"
po/ar.po+485−251
@@ -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-16 03:29+0000\n"
10+"POT-Creation-Date: 2016-04-27 15:01+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,23 +16,23 @@ 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-23 06:03+0000\n"
20−"X-Generator: Launchpad (build 17925)\n"
19+"X-Launchpad-Export-Date: 2016-04-30 05:36+0000\n"
20+"X-Generator: Launchpad (build 17995)\n"
2121
2222#: plugins/IntegratedLightDM/Greeter.cpp:112
2323msgid "Password: "
2424msgstr "كلمة السر: "
2525
26−#: plugins/Unity/Launcher/launcheritem.cpp:47
27−#: plugins/Unity/Launcher/launcheritem.cpp:106
26+#: plugins/Unity/Launcher/launcheritem.cpp:48
27+#: plugins/Unity/Launcher/launcheritem.cpp:107
2828msgid "Pin shortcut"
2929msgstr "تثبيت الاختصار"
3030
31−#: plugins/Unity/Launcher/launcheritem.cpp:52
31+#: plugins/Unity/Launcher/launcheritem.cpp:53
3232msgid "Quit"
3333msgstr "خروج"
3434
35−#: plugins/Unity/Launcher/launcheritem.cpp:106
35+#: plugins/Unity/Launcher/launcheritem.cpp:107
3636msgid "Unpin shortcut"
3737msgstr "إزالة تثبيت الاختصار"
3838
@@ -80,53 +80,35 @@ msgctxt "Button: Log out from the system"
8080msgid "Log Out"
8181msgstr "خروج"
8282
83−#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:194
84−#: qml/Components/Dialogs.qml:253
83+#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
84+#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
85+#: qml/Wizard/Pages/passcode-set.qml:32
8586msgid "Cancel"
8687msgstr "إلغاء"
8788
8889#: qml/Components/Dialogs.qml:173
89−msgctxt "Title: Reboot/Shut down dialog"
90−msgid "Shut down"
91−msgstr "إطفاء الجهاز"
92−
93−#: qml/Components/Dialogs.qml:174
94−msgid "Are you sure you want to shut down?"
95−msgstr "هل أنت متأكد من رغبتك في إطفاء الجهاز؟"
96−
97−#: qml/Components/Dialogs.qml:176
98−msgctxt "Button: Reboot the system"
99−msgid "Reboot"
100−msgstr "إعادة التشغيل"
101−
102−#: qml/Components/Dialogs.qml:185
103−msgctxt "Button: Shut down the system"
104−msgid "Shut down"
105−msgstr "إطفاء الجهاز"
106−
107−#: qml/Components/Dialogs.qml:207
10890msgctxt "Title: Reboot dialog"
10991msgid "Reboot"
11092msgstr "إعادة التشغيل"
11193
112−#: qml/Components/Dialogs.qml:208
94+#: qml/Components/Dialogs.qml:174
11395msgid "Are you sure you want to reboot?"
11496msgstr "هل أنت متأكد من رغبتك في إعادة تشغيل الجهاز؟"
11597
116−#: qml/Components/Dialogs.qml:210
98+#: qml/Components/Dialogs.qml:176
11799msgid "No"
118100msgstr "لا"
119101
120−#: qml/Components/Dialogs.qml:217
102+#: qml/Components/Dialogs.qml:182
121103msgid "Yes"
122104msgstr "نعم"
123105
124−#: qml/Components/Dialogs.qml:232
106+#: qml/Components/Dialogs.qml:197
125107msgctxt "Title: Power off/Restart dialog"
126108msgid "Power"
127109msgstr "الطاقة"
128110
129−#: qml/Components/Dialogs.qml:233
111+#: qml/Components/Dialogs.qml:198
130112msgid ""
131113"Are you sure you would like\n"
132114"to power off?"
@@ -134,25 +116,25 @@ msgstr ""
134116"هل أنت متأكد من رغبتك\n"
135117"في إيقاف التشغيل؟"
136118
137−#: qml/Components/Dialogs.qml:235
119+#: qml/Components/Dialogs.qml:200
138120msgctxt "Button: Power off the system"
139121msgid "Power off"
140122msgstr "إيقاف التشغيل"
141123
142−#: qml/Components/Dialogs.qml:244
124+#: qml/Components/Dialogs.qml:209
143125msgctxt "Button: Restart the system"
144126msgid "Restart"
145127msgstr "إعادة التشغيل"
146128
147−#: qml/Components/Lockscreen.qml:245
129+#: qml/Components/Lockscreen.qml:231
148130msgid "Return to Call"
149131msgstr "العودة إلى المكالمة"
150132
151−#: qml/Components/Lockscreen.qml:245
133+#: qml/Components/Lockscreen.qml:231
152134msgid "Emergency Call"
153135msgstr "مكالمة طوارئ"
154136
155−#: qml/Components/Lockscreen.qml:277
137+#: qml/Components/Lockscreen.qml:263
156138msgid "OK"
157139msgstr "موافق"
158140
@@ -161,6 +143,8 @@ msgid "Apps may have unsaved data:"
161143msgstr ""
162144
163145#: qml/Components/ModeSwitchWarningDialog.qml:57
146+msgctxt ""
147+"Re-dock means connect the device again to an external screen/mouse/keyboard"
164148msgid "Re-dock, save your work and close these apps to continue."
165149msgstr ""
166150
@@ -180,42 +164,58 @@ msgstr ""
180164msgid "Close all"
181165msgstr ""
182166
183−#: qml/Dash/DashPageHeader.qml:266
167+#: qml/Dash/DashPageHeader.qml:337
184168msgctxt "Button: Open the Ubuntu Store"
185169msgid "Store"
186170msgstr "المتجر"
187171
188−#: qml/Dash/DashPageHeader.qml:273
172+#: qml/Dash/DashPageHeader.qml:344
189173msgctxt "Button: Start a search in the current dash scope"
190174msgid "Search"
191175msgstr "بحث"
192176
193−#: qml/Dash/DashPageHeader.qml:283
177+#: qml/Dash/DashPageHeader.qml:354
194178msgctxt "Button: Show the current dash scope settings"
195179msgid "Settings"
196180msgstr "الإعدادات"
197181
198−#: qml/Dash/DashPageHeader.qml:290
182+#: qml/Dash/DashPageHeader.qml:361
199183msgid "Remove from Favorites"
200184msgstr "حذف من المفضلات"
201185
202−#: qml/Dash/DashPageHeader.qml:290
186+#: qml/Dash/DashPageHeader.qml:361
203187msgid "Add to Favorites"
204188msgstr "إضافة إلى المفضلات"
205189
206−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
207−msgid "See less"
208−msgstr "شاهد أقل"
190+#: qml/Dash/FiltersPopover.qml:60
191+msgid "Refine your results"
192+msgstr ""
209193
210−#: qml/Dash/GenericScopeView.qml:587
211−msgid "See all"
212−msgstr "عرض الكل"
194+#: qml/Dash/FiltersPopover.qml:69
195+msgid "Reset"
196+msgstr ""
213197
214−#: qml/Dash/GenericScopeView.qml:649
198+#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
199+msgid "Show less"
200+msgstr ""
201+
202+#: qml/Dash/GenericScopeView.qml:570
203+msgid "Show all"
204+msgstr ""
205+
206+#: qml/Dash/GenericScopeView.qml:627
215207msgctxt "Label: Hint for dash search line edit"
216208msgid "Search"
217209msgstr "بحث"
218210
211+#: qml/Dash/PageHeaderExtraPanel.qml:55
212+msgid "Recent Searches"
213+msgstr ""
214+
215+#: qml/Dash/PageHeaderExtraPanel.qml:66
216+msgid "Clear All"
217+msgstr ""
218+
219219#: qml/Dash/Previews/PreviewActionCombo.qml:35
220220msgid "More..."
221221msgstr "المزيد..."
@@ -237,7 +237,7 @@ msgstr "قيّم ذلك"
237237msgid "Add a review"
238238msgstr "أضف تعليق"
239239
240−#: qml/Dash/Previews/PreviewSharing.qml:50
240+#: qml/Dash/Previews/PreviewSharing.qml:66
241241msgid "Preview Share Item"
242242msgstr ""
243243
@@ -265,13 +265,13 @@ msgstr "الرئيسية"
265265msgid "Also installed"
266266msgstr "أيضا تم تثبيت"
267267
268−#: qml/DisabledScreenNotice.qml:87
268+#: qml/DisabledScreenNotice.qml:104
269269msgid ""
270270"Your device is now connected to an external display. Use this screen as a "
271−"touch pad to interact with the mouse."
271+"touch pad to interact with the pointer."
272272msgstr ""
273273
274−#: qml/Greeter/CoverPage.qml:107
274+#: qml/Greeter/CoverPage.qml:118
275275msgid "Unlock"
276276msgstr "فك القفل"
277277
@@ -283,11 +283,11 @@ msgstr "إعادة المحاولة"
283283msgid "Tap to unlock"
284284msgstr "انقر لفك القفل"
285285
286−#: qml/Greeter/NarrowView.qml:54 qml/Wizard/Pages/passwd-confirm.qml:53
286+#: qml/Greeter/NarrowView.qml:54
287287msgid "Sorry, incorrect passphrase."
288288msgstr "عذرًا، عبارة سرّية خاطئة."
289289
290−#: qml/Greeter/NarrowView.qml:55 qml/Wizard/Pages/passwd-confirm.qml:54
290+#: qml/Greeter/NarrowView.qml:55
291291msgid "Sorry, incorrect passcode."
292292msgstr "عذرًا، رمز سرّي خاطيء."
293293
@@ -316,7 +316,7 @@ msgstr ""
316316msgid "Enter %1"
317317msgstr "أدخِل %1"
318318
319−#: qml/Greeter/NarrowView.qml:117 qml/Wizard/Pages/passwd-set.qml:60
319+#: qml/Greeter/NarrowView.qml:117
320320msgid "Enter passphrase"
321321msgstr "أدخِل العبارة السرية"
322322
@@ -342,7 +342,7 @@ msgstr "برجاء إعادة إدخالها"
342342msgid "Sorry, incorrect passcode"
343343msgstr "نأسف، الرمز السري غير صحيح"
344344
345−#: qml/Notifications/NotificationMenuItemFactory.qml:129
345+#: qml/Notifications/NotificationMenuItemFactory.qml:124
346346msgid "Show password"
347347msgstr "عرض كلمة السر"
348348
@@ -354,11 +354,11 @@ msgstr "انقر للعودة إلى المكالمة..."
354354msgid "Conference"
355355msgstr "مؤتمر"
356356
357−#: qml/Panel/Indicators/MenuItemFactory.qml:753
357+#: qml/Panel/Indicators/MenuItemFactory.qml:762
358358msgid "Nothing is playing"
359359msgstr "لا شيء مُشغّل"
360360
361−#: qml/Panel/Indicators/MenuItemFactory.qml:882
361+#: qml/Panel/Indicators/MenuItemFactory.qml:891
362362#, qt-format
363363msgid "%1 hour"
364364msgid_plural "%1 hours"
@@ -369,7 +369,7 @@ msgstr[3] "%1 ساعات"
369369msgstr[4] "%1 ساعة"
370370msgstr[5] "%1 ساعة"
371371
372−#: qml/Panel/Indicators/MenuItemFactory.qml:886
372+#: qml/Panel/Indicators/MenuItemFactory.qml:895
373373#, qt-format
374374msgid "%1 minute"
375375msgid_plural "%1 minutes"
@@ -380,7 +380,7 @@ msgstr[3] "%1 دقائق"
380380msgstr[4] "%1 دقيقة"
381381msgstr[5] "%1 دقيقة"
382382
383−#: qml/Panel/Indicators/MenuItemFactory.qml:891
383+#: qml/Panel/Indicators/MenuItemFactory.qml:900
384384#, qt-format
385385msgid "%1 second"
386386msgid_plural "%1 seconds"
@@ -391,37 +391,37 @@ msgstr[3] "%1 ثوان"
391391msgstr[4] "%1 ثانية"
392392msgstr[5] "%1 ثانية"
393393
394−#: qml/Panel/Indicators/MenuItemFactory.qml:894
394+#: qml/Panel/Indicators/MenuItemFactory.qml:903
395395msgid "0 seconds"
396396msgstr "أقل من ثانية"
397397
398398#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
399−#: qml/Panel/Indicators/MenuItemFactory.qml:896
399+#: qml/Panel/Indicators/MenuItemFactory.qml:905
400400#, qt-format
401401msgid "%1 remaining"
402402msgstr "باق %1"
403403
404−#: qml/Panel/Indicators/MenuItemFactory.qml:902
404+#: qml/Panel/Indicators/MenuItemFactory.qml:911
405405msgid "In queue…"
406406msgstr "في الانتظار..."
407407
408−#: qml/Panel/Indicators/MenuItemFactory.qml:906
408+#: qml/Panel/Indicators/MenuItemFactory.qml:915
409409msgid "Downloading"
410410msgstr "التنزيل"
411411
412−#: qml/Panel/Indicators/MenuItemFactory.qml:908
412+#: qml/Panel/Indicators/MenuItemFactory.qml:917
413413msgid "Paused, tap to resume"
414414msgstr "مُلبث، انقر للاستئناف"
415415
416−#: qml/Panel/Indicators/MenuItemFactory.qml:910
416+#: qml/Panel/Indicators/MenuItemFactory.qml:919
417417msgid "Canceled"
418418msgstr "تم إلغائه"
419419
420−#: qml/Panel/Indicators/MenuItemFactory.qml:912
420+#: qml/Panel/Indicators/MenuItemFactory.qml:921
421421msgid "Finished"
422422msgstr "انتهى"
423423
424−#: qml/Panel/Indicators/MenuItemFactory.qml:914
424+#: qml/Panel/Indicators/MenuItemFactory.qml:923
425425msgid "Failed, tap to retry"
426426msgstr "فشل، انقل لإعادة المحاولة"
427427
@@ -441,260 +441,323 @@ 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−
452−#: qml/Tutorial/TutorialBottom.qml:28
453−msgid "Open special menus"
454−msgstr "فتح قوائم خاصة"
455−
456−#: qml/Tutorial/TutorialBottom.qml:29
457−msgid "Swipe up from the bottom edge."
458−msgstr "اسحب لأعلى من الحافة السفلى."
444+#: qml/Stages/SideStage.qml:76
445+msgid "Drag using 3 fingers any application from one window to the other"
446+msgstr ""
459447
460−#: qml/Tutorial/TutorialBottomFinish.qml:24
461−msgid "This action does different things for different apps"
462−msgstr "هذا الإجراء يقوم بأشياء مختلفة على التطبيقات المختلفة"
448+#: qml/Tutorial/TutorialBottom.qml:78
449+msgid "Swipe up to add a contact"
450+msgstr ""
463451
464−#: qml/Tutorial/TutorialBottomFinish.qml:25
465−msgid "Tap here to finish."
466−msgstr "انقر هنا للإنهاء."
452+#: qml/Tutorial/TutorialBottom.qml:80
453+msgid "Swipe up for favorite calculations"
454+msgstr ""
467455
468−#: qml/Tutorial/TutorialContent.qml:80 qml/Tutorial/TutorialLeftFinish.qml:25
469−#: qml/Tutorial/TutorialRight.qml:144
470−msgid "Tap here to continue."
471−msgstr "انقر هنا للمتابعة."
456+#: qml/Tutorial/TutorialBottom.qml:82
457+msgid "Swipe up for recent calls"
458+msgstr ""
472459
473−#: qml/Tutorial/TutorialLeft.qml:26
474−msgid "Open the launcher"
460+#: qml/Tutorial/TutorialBottom.qml:84
461+msgid "Swipe up to create a message"
475462msgstr ""
476463
477−#: qml/Tutorial/TutorialLeft.qml:27
478−msgid "Short swipe from the left edge."
479−msgstr "اسحب سحبة قصيرة من الحافة اليسرى."
464+#: qml/Tutorial/TutorialBottom.qml:85
465+msgid "Swipe up to manage the app"
466+msgstr ""
480467
481−#: qml/Tutorial/TutorialLeftFinish.qml:24
482−msgid "These are the shortcuts to favorite apps"
483−msgstr "هذه اختصارات للتطبيقات المُفضلة"
468+#: qml/Tutorial/TutorialLeftLong.qml:47
469+msgid "Long swipe from the left edge to open the Today scope"
470+msgstr ""
484471
485−#: qml/Tutorial/TutorialPage.qml:178
486−msgid "You almost got it!"
487−msgstr "انت حصلت على ذلك تقريبا!"
472+#: qml/Tutorial/TutorialLeft.qml:47
473+msgid "Swipe from the left edge to open the launcher"
474+msgstr ""
488475
489−#: qml/Tutorial/TutorialPage.qml:195
490−msgid "Try again."
491−msgstr "حاول مجددًا."
476+#: qml/Tutorial/TutorialRight.qml:55
477+msgid "Push your mouse against the right edge to view your open apps"
478+msgstr ""
492479
493−#: qml/Tutorial/TutorialRight.qml:31
494−msgid "To view open apps"
480+#: qml/Tutorial/TutorialRight.qml:56
481+msgid "Short or long swipe from the right edge to view your open apps"
495482msgstr ""
496483
497−#: qml/Tutorial/TutorialRight.qml:32
498−msgid "Long swipe from the right edge."
499−msgstr "سحبة طويلة من الحافة اليمنى."
484+#: qml/Tutorial/TutorialTop.qml:53
485+msgid "Swipe from the top right edge to open the notification bar"
486+msgstr ""
500487
501−#: qml/Tutorial/TutorialRight.qml:122
502−msgid "View all your running tasks."
503−msgstr "عرض جميع المهام النشطة."
488+#: qml/Tutorial/TutorialTop.qml:54
489+msgid "Swipe from the top edge to open the notification bar"
490+msgstr ""
504491
505−#: qml/Wizard/Page.qml:89
492+#: qml/Wizard/Page.qml:54
506493msgctxt "Button: Go back one page in the Wizard"
507494msgid "Back"
508495msgstr "عودة"
509496
510497#: qml/Wizard/Pages/10-welcome.qml:27
511−msgid "Hi!"
512−msgstr "أهلا!"
498+msgid "Language"
499+msgstr ""
513500
514−#: qml/Wizard/Pages/10-welcome.qml:44
515−msgid "Welcome to your Ubuntu device."
501+#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
502+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
503+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
504+#: qml/Wizard/Pages/75-report-check.qml:84
505+#: qml/Wizard/Pages/passcode-desktop.qml:124
506+#: qml/Wizard/Pages/password-set.qml:141
507+msgid "Next"
516508msgstr ""
517509
518−#: qml/Wizard/Pages/10-welcome.qml:52
519−msgid "Let’s get started."
520−msgstr "هيا بنا نبدأ."
510+#: qml/Wizard/Pages/30-wifi.qml:29
511+msgid "Connect to Wi‑Fi"
512+msgstr "اتصل بالواي فاي"
521513
522−#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:133
523−#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
524−#: qml/Wizard/Pages/60-reporting.qml:60 qml/Wizard/Pages/passwd-confirm.qml:82
525−#: qml/Wizard/Pages/passwd-set.qml:90
526−msgid "Continue"
527−msgstr "متابعة"
514+#: qml/Wizard/Pages/30-wifi.qml:130
515+msgid "Connected"
516+msgstr ""
528517
529−#: qml/Wizard/Pages/20-sim.qml:25
530−msgid "Add a SIM card and restart your device"
531−msgstr "أدخِل شريحة SIM ثم أعِد تشغيل الجهاز"
518+#: qml/Wizard/Pages/30-wifi.qml:163
519+msgid "Available Wi-Fi networks"
520+msgstr ""
532521
533−#: qml/Wizard/Pages/20-sim.qml:59
534−msgid "Without it, you won’t be able to make calls or use text messaging."
522+#: qml/Wizard/Pages/30-wifi.qml:164
523+msgid "No available Wi-Fi networks"
535524msgstr ""
536−"بدونها لن تتمكن من إجراء أي مكالمات هاتفية أو استخدام الرسائل النصية."
537525
538−#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
526+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
527+#: qml/Wizard/Pages/sim.qml:101
539528msgid "Skip"
540529msgstr "تخطي"
541530
542−#: qml/Wizard/Pages/30-passwd-type.qml:39
543−msgid "Lock security"
544−msgstr "قِفل الأمان"
531+#: qml/Wizard/Pages/40-location.qml:27
532+msgid "Location Services"
533+msgstr ""
545534
546−#: qml/Wizard/Pages/30-passwd-type.qml:79
547−msgid "Please select how you’d like to unlock your device."
535+#: qml/Wizard/Pages/40-location.qml:83
536+msgid ""
537+"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
538+"(recommended)"
548539msgstr ""
549540
550−#: qml/Wizard/Pages/30-passwd-type.qml:102
551−msgctxt "Label: Type of security method"
552−msgid "Swipe"
553−msgstr "سحبة"
541+#: qml/Wizard/Pages/40-location.qml:105
542+#, qt-format
543+msgid "By selecting this option you agree to the Nokia HERE %1."
544+msgstr ""
554545
555−#: qml/Wizard/Pages/30-passwd-type.qml:103
556−msgctxt "Label: Description of security method"
557−msgid "No security"
558−msgstr "بدون أمان"
546+#: qml/Wizard/Pages/40-location.qml:106
547+msgctxt "part of: Nokia HERE terms and conditions"
548+msgid "terms and conditions"
549+msgstr ""
559550
560−#: qml/Wizard/Pages/30-passwd-type.qml:105
551+#: qml/Wizard/Pages/40-location.qml:160
552+msgid "GPS only"
553+msgstr ""
554+
555+#: qml/Wizard/Pages/40-location.qml:214
556+msgid "Don't use my location"
557+msgstr ""
558+
559+#: qml/Wizard/Pages/40-location.qml:260
560+msgid "You can change it later in System Settings."
561+msgstr ""
562+
563+#: qml/Wizard/Pages/50-timezone.qml:29
564+msgid "Time Zone"
565+msgstr ""
566+
567+#: qml/Wizard/Pages/50-timezone.qml:178
568+msgid "Enter your city"
569+msgstr ""
570+
571+#: qml/Wizard/Pages/60-account.qml:24
572+msgid "Personalize Your Device"
573+msgstr ""
574+
575+#: qml/Wizard/Pages/60-account.qml:48
576+msgid "Preferred Name"
577+msgstr ""
578+
579+#: qml/Wizard/Pages/70-passwd-type.qml:39
580+msgid "Lock Screen"
581+msgstr ""
582+
583+#: qml/Wizard/Pages/70-passwd-type.qml:101
561584msgctxt "Label: Type of security method"
562−msgid "Passcode"
563−msgstr "رمز سري"
585+msgid "Create new password"
586+msgstr ""
564587
565−#: qml/Wizard/Pages/30-passwd-type.qml:106
566−msgctxt "Label: Description of security method"
567−msgid "4 digits only"
568−msgstr "4 أرقام فقط"
588+#: qml/Wizard/Pages/70-passwd-type.qml:103
589+msgctxt "Label: Type of security method"
590+msgid "Create passcode (numbers only)"
591+msgstr ""
569592
570−#: qml/Wizard/Pages/30-passwd-type.qml:108
593+#: qml/Wizard/Pages/70-passwd-type.qml:105
571594msgctxt "Label: Type of security method"
572−msgid "Passphrase"
573−msgstr "عبارة سرية"
595+msgid "No lock code"
596+msgstr ""
574597
575−#: qml/Wizard/Pages/30-passwd-type.qml:109
576−msgctxt "Label: Description of security method"
577−msgid "Numbers and letters"
578−msgstr "أرقام وحروف"
598+#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
599+msgid "Privacy Policy"
600+msgstr ""
579601
580−#: qml/Wizard/Pages/40-wifi.qml:29
581−msgid "Connect to Wi‑Fi"
582−msgstr "اتصل بالواي فاي"
602+#: qml/Wizard/Pages/75-report-check.qml:26
603+msgid "Help Us Improve"
604+msgstr ""
583605
584−#: qml/Wizard/Pages/40-wifi.qml:168
585−msgid "Available networks…"
586−msgstr "الشبكات المتاحة..."
606+#: qml/Wizard/Pages/75-report-check.qml:59
607+msgid "Improve system performance by sending us crashes and error reports."
608+msgstr ""
587609
588−#: qml/Wizard/Pages/40-wifi.qml:169
589−msgid "No available networks."
590−msgstr "لا توجد شبكات متاحة."
610+#: qml/Wizard/Pages/75-report-check.qml:60
611+msgid "Privacy policy"
612+msgstr ""
591613
592−#: qml/Wizard/Pages/50-location.qml:27
593−msgid "Location"
594−msgstr "الموقع"
614+#: qml/Wizard/Pages/80-finished.qml:89
615+msgid "Welcome to Ubuntu"
616+msgstr ""
595617
596−#: qml/Wizard/Pages/50-location.qml:62
597−msgid "Let the phone detect your location:"
598−msgstr "دع هاتفك يحدد موقعك:"
618+#: qml/Wizard/Pages/80-finished.qml:104
619+msgid "You are ready to use your device now"
620+msgstr ""
599621
600−#: qml/Wizard/Pages/50-location.qml:69
601−msgid "Using GPS only (less accurate)"
602−msgstr "باستخدام نظام تحديد المواقع (GPS) فقط (أقل دقّة)"
622+#: qml/Wizard/Pages/80-finished.qml:124
623+msgid "Get Started"
624+msgstr ""
625+
626+#: qml/Wizard/Pages/here-terms.qml:25
627+msgid "Terms & Conditions"
628+msgstr "الشروط والأحكام"
629+
630+#: qml/Wizard/Pages/here-terms.qml:69
631+msgid "Your device uses positioning technologies provided by HERE."
632+msgstr ""
603633
604−#: qml/Wizard/Pages/50-location.qml:86
605−msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
634+#: qml/Wizard/Pages/here-terms.qml:81
635+msgid ""
636+"To provide you with positioning services and to improve their quality, HERE "
637+"collects information about nearby cell towers and Wi-Fi hotspots around your "
638+"current location whenever your position is being found."
606639msgstr ""
607−"باستخدام نظام تحديد المواقع (GPS)، والواي فاي، وبيانات الشبكة الخلوية "
608−"(مستحسن)"
609640
610−#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
611−#: qml/Wizard/Pages/50-location.qml:103
641+#: qml/Wizard/Pages/here-terms.qml:93
612642msgid ""
613−"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
614−"conditions</a>."
643+"The information collected is used to analyze the service and to improve the "
644+"use of service, but not to identify you personally."
615645msgstr ""
616−"باختيارك لهذا الخيار فإنك توافق على <a href='#'>الشروط والأحكام</a> الخاصة "
617−"بـ Nokia HERE."
618646
619−#: qml/Wizard/Pages/50-location.qml:112
620−msgid "Not at all"
647+#: qml/Wizard/Pages/here-terms.qml:106
648+#, qt-format
649+msgid "By continuing, you agree to the HERE platform %1 and %2."
621650msgstr ""
622651
623−#: qml/Wizard/Pages/50-location.qml:124
624−msgid "You can change your mind later in <b>System Settings</b>."
625−msgstr "يمكنك تغيير رأيك في وقت لاحق عن طريق <b>إعدادات النظام</b>."
652+#: qml/Wizard/Pages/here-terms.qml:107
653+msgid "Service Terms"
654+msgstr ""
626655
627−#: qml/Wizard/Pages/60-reporting.qml:26
628−msgid "Improving your experience"
629−msgstr "تحسين تجربتك"
656+#: qml/Wizard/Pages/passcode-confirm.qml:43
657+#: qml/Wizard/Pages/passcode-desktop.qml:80
658+msgid "Confirm passcode"
659+msgstr "تأكيد الرمز السري"
630660
631−#: qml/Wizard/Pages/60-reporting.qml:46
632−msgid ""
633−"Your phone is set up to automatically report errors to Canonical and its "
634−"partners, the makers of the operating system."
661+#: qml/Wizard/Pages/passcode-confirm.qml:45
662+msgid "Incorrect passcode."
635663msgstr ""
636−"هاتفك مُعدّ لإرسال تقارير آلية بالأخطاء إلى كانونيكال وشركائها (صانعي نظام "
637−"التشغيل)."
638664
639−#: qml/Wizard/Pages/60-reporting.qml:53
640−msgid ""
641−"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
642−"Privacy</b>"
665+#: qml/Wizard/Pages/passcode-confirm.qml:45
666+msgctxt "Enter the passcode again"
667+msgid "Please re-enter."
643668msgstr ""
644−"يمكن تعطيل ذلك بالذهاب إلى <b>إعدادات النظام</b> من خلال <b>الأمان "
645−"والخصوصية</b>"
646669
647−#: qml/Wizard/Pages/80-finished.qml:24
648−msgid "All done"
649−msgstr "تم ذلك"
670+#: qml/Wizard/Pages/passcode-desktop.qml:30
671+msgid "Lock Screen Passcode"
672+msgstr ""
650673
651−#: qml/Wizard/Pages/80-finished.qml:39
652−msgid "Nice work!"
653−msgstr "عمل جيد!"
674+#: qml/Wizard/Pages/passcode-desktop.qml:56
675+msgid "Enter 4 numbers to setup your passcode"
676+msgstr ""
654677
655−#: qml/Wizard/Pages/80-finished.qml:46
656−msgid "Your device is now ready to use."
678+#: qml/Wizard/Pages/passcode-desktop.qml:65
679+#: qml/Wizard/Pages/passcode-set.qml:54
680+msgid "Choose passcode"
657681msgstr ""
658682
659−#: qml/Wizard/Pages/80-finished.qml:53
660−msgid "Finish"
661−msgstr "إنهاء"
683+#: qml/Wizard/Pages/passcode-desktop.qml:105
684+msgid "Passcode too short"
685+msgstr ""
662686
663−#: qml/Wizard/Pages/here-terms.qml:27
664−msgid "Terms & Conditions"
665−msgstr "الشروط والأحكام"
687+#: qml/Wizard/Pages/passcode-desktop.qml:107
688+msgid "Passcodes match"
689+msgstr ""
666690
667−#: qml/Wizard/Pages/passwd-confirm.qml:49
668−msgid "Confirm passphrase"
669−msgstr "تأكيد العبارة السرية"
691+#: qml/Wizard/Pages/passcode-desktop.qml:109
692+msgid "Passcodes do not match"
693+msgstr ""
670694
671−#: qml/Wizard/Pages/passwd-confirm.qml:50
672−msgid "Confirm passcode"
673−msgstr "تأكيد الرمز السري"
695+#: qml/Wizard/Pages/passcode-set.qml:62
696+msgid "Passcode must be 4 characters long"
697+msgstr ""
674698
675−#: qml/Wizard/Pages/passwd-confirm.qml:53
676−#: qml/Wizard/Pages/passwd-confirm.qml:54
677−msgid "Please try again."
678−msgstr "حاول مجددا."
699+#: qml/Wizard/Pages/password-set.qml:30
700+msgid "Lock Screen Password"
701+msgstr ""
679702
680−#: qml/Wizard/Pages/passwd-set.qml:61
681−msgid "Choose your passcode"
682−msgstr "اختر الرمز السري خاصتك"
703+#: qml/Wizard/Pages/password-set.qml:61
704+msgid "Enter at least 8 characters"
705+msgstr ""
683706
684−#: qml/Wizard/Pages/passwd-set.qml:68
685−msgid "Passphrase must be 4 characters long"
686−msgstr "يجب أن تحتوي العبارة السرية على 4 أحرف على الأقل"
707+#: qml/Wizard/Pages/password-set.qml:73
708+msgid "Choose password"
709+msgstr ""
687710
688−#. Translators: This is the arrow for "Back" buttons
689−#: qml/Wizard/StackButton.qml:39
690−#, qt-format
691−msgid "〈 %1"
711+#: qml/Wizard/Pages/password-set.qml:103
712+msgid "Confirm password"
692713msgstr ""
693714
694−#. Translators: This is the arrow for "Forward" buttons
695−#: qml/Wizard/StackButton.qml:42
696−#, qt-format
697−msgid "%1 〉"
715+#: qml/Wizard/Pages/sim.qml:27
716+msgid "No SIM card installed"
717+msgstr ""
718+
719+#: qml/Wizard/Pages/sim.qml:54
720+msgid "SIM card added"
721+msgstr ""
722+
723+#: qml/Wizard/Pages/sim.qml:55
724+msgid "You must restart the device to access the mobile network."
725+msgstr ""
726+
727+#: qml/Wizard/Pages/sim.qml:59
728+msgid "Restart"
729+msgstr ""
730+
731+#: qml/Wizard/Pages/sim.qml:78
732+msgid "You won’t be able to make calls or use text messaging without a SIM."
733+msgstr ""
734+
735+#: qml/Wizard/Pages/sim.qml:90
736+msgid "To proceed with no SIM tap Skip."
737+msgstr ""
738+
739+#: qml/Wizard/PasswordMeter.qml:87
740+msgid "Passwords match"
741+msgstr ""
742+
743+#: qml/Wizard/PasswordMeter.qml:89
744+msgid "Passwords do not match"
745+msgstr ""
746+
747+#: qml/Wizard/PasswordMeter.qml:93
748+msgid "Strong password"
749+msgstr ""
750+
751+#: qml/Wizard/PasswordMeter.qml:95
752+msgid "Fair password"
753+msgstr ""
754+
755+#: qml/Wizard/PasswordMeter.qml:97
756+msgid "Weak password"
757+msgstr ""
758+
759+#: qml/Wizard/PasswordMeter.qml:99
760+msgid "Very weak password"
698761msgstr ""
699762
700763#~ msgid "Confirm"
@@ -746,6 +809,9 @@ msgstr ""
746809#~ msgid "Well done"
747810#~ msgstr "أحسنت!"
748811
812+#~ msgid "See less"
813+#~ msgstr "شاهد أقل"
814+
749815#~ msgid ""
750816#~ "You have now mastered the edge gestures and can start using the "
751817#~ "phone<br><br>Tap on the screen to start"
@@ -783,14 +849,182 @@ msgstr ""
783849#~ msgid "Tomorrow %H:%M"
784850#~ msgstr "غدًا %H:%M"
785851
852+#~ msgid "Are you sure you want to shut down?"
853+#~ msgstr "هل أنت متأكد من رغبتك في إطفاء الجهاز؟"
854+
855+#~ msgctxt "Button: Shut down the system"
856+#~ msgid "Shut down"
857+#~ msgstr "إطفاء الجهاز"
858+
859+#~ msgctxt "Title: Reboot/Shut down dialog"
860+#~ msgid "Shut down"
861+#~ msgstr "إطفاء الجهاز"
862+
863+#~ msgctxt "Button: Reboot the system"
864+#~ msgid "Reboot"
865+#~ msgstr "إعادة التشغيل"
866+
867+#~ msgid "See all"
868+#~ msgstr "عرض الكل"
869+
786870#~ msgid "Please re-enter"
787871#~ msgstr "برجاء إعادة إدخالها"
788872
873+#~ msgid "This action does different things for different apps"
874+#~ msgstr "هذا الإجراء يقوم بأشياء مختلفة على التطبيقات المختلفة"
875+
876+#~ msgid "These are the shortcuts to favorite apps"
877+#~ msgstr "هذه اختصارات للتطبيقات المُفضلة"
878+
879+#~ msgid "Roaming"
880+#~ msgstr "التجوال"
881+
882+#~ msgid "Short swipe from the left edge."
883+#~ msgstr "اسحب سحبة قصيرة من الحافة اليسرى."
884+
885+#~ msgid "Tap here to continue."
886+#~ msgstr "انقر هنا للمتابعة."
887+
888+#~ msgid "Swipe up from the bottom edge."
889+#~ msgstr "اسحب لأعلى من الحافة السفلى."
890+
891+#~ msgid "Open special menus"
892+#~ msgstr "فتح قوائم خاصة"
893+
894+#~ msgid "Tap here to finish."
895+#~ msgstr "انقر هنا للإنهاء."
896+
897+#~ msgid "Long swipe from the right edge."
898+#~ msgstr "سحبة طويلة من الحافة اليمنى."
899+
900+#~ msgid "View all your running tasks."
901+#~ msgstr "عرض جميع المهام النشطة."
902+
903+#~ msgid "Confirm passphrase"
904+#~ msgstr "تأكيد العبارة السرية"
905+
906+#~ msgid "Try again."
907+#~ msgstr "حاول مجددًا."
908+
909+#~ msgid "Please try again."
910+#~ msgstr "حاول مجددا."
911+
912+#~ msgid "Lock security"
913+#~ msgstr "قِفل الأمان"
914+
915+#~ msgid "Without it, you won’t be able to make calls or use text messaging."
916+#~ msgstr ""
917+#~ "بدونها لن تتمكن من إجراء أي مكالمات هاتفية أو استخدام الرسائل النصية."
918+
919+#~ msgid "Add a SIM card and restart your device"
920+#~ msgstr "أدخِل شريحة SIM ثم أعِد تشغيل الجهاز"
921+
922+#~ msgid "Hi!"
923+#~ msgstr "أهلا!"
924+
789925#~ msgid "Welcome to your Ubuntu phone."
790926#~ msgstr "مرحبا بك في أوبونتو للهواتف."
791927
928+#~ msgid "Let’s get started."
929+#~ msgstr "هيا بنا نبدأ."
930+
931+#~ msgid "Continue"
932+#~ msgstr "متابعة"
933+
934+#~ msgid "Choose your passcode"
935+#~ msgstr "اختر الرمز السري خاصتك"
936+
937+#~ msgid "Passphrase must be 4 characters long"
938+#~ msgstr "يجب أن تحتوي العبارة السرية على 4 أحرف على الأقل"
939+
940+#~ msgid "Available networks…"
941+#~ msgstr "الشبكات المتاحة..."
942+
792943#~ msgid "Please select how you’d like to unlock your phone."
793944#~ msgstr "رجاءً اختر الطريقة التي ترغب بأن توصد هاتفك بها."
794945
946+#~ msgctxt "Label: Description of security method"
947+#~ msgid "No security"
948+#~ msgstr "بدون أمان"
949+
950+#~ msgctxt "Label: Type of security method"
951+#~ msgid "Swipe"
952+#~ msgstr "سحبة"
953+
954+#~ msgctxt "Label: Description of security method"
955+#~ msgid "4 digits only"
956+#~ msgstr "4 أرقام فقط"
957+
958+#~ msgctxt "Label: Type of security method"
959+#~ msgid "Passcode"
960+#~ msgstr "رمز سري"
961+
962+#~ msgid "No available networks."
963+#~ msgstr "لا توجد شبكات متاحة."
964+
965+#~ msgctxt "Label: Type of security method"
966+#~ msgid "Passphrase"
967+#~ msgstr "عبارة سرية"
968+
969+#~ msgctxt "Label: Description of security method"
970+#~ msgid "Numbers and letters"
971+#~ msgstr "أرقام وحروف"
972+
973+#~ msgid "Improving your experience"
974+#~ msgstr "تحسين تجربتك"
975+
976+#~ msgid "You can change your mind later in <b>System Settings</b>."
977+#~ msgstr "يمكنك تغيير رأيك في وقت لاحق عن طريق <b>إعدادات النظام</b>."
978+
979+#~ msgid "Location"
980+#~ msgstr "الموقع"
981+
982+#~ msgid "Let the phone detect your location:"
983+#~ msgstr "دع هاتفك يحدد موقعك:"
984+
985+#~ msgid "Using GPS only (less accurate)"
986+#~ msgstr "باستخدام نظام تحديد المواقع (GPS) فقط (أقل دقّة)"
987+
988+#~ msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
989+#~ msgstr ""
990+#~ "باستخدام نظام تحديد المواقع (GPS)، والواي فاي، وبيانات الشبكة الخلوية "
991+#~ "(مستحسن)"
992+
993+#~ msgid ""
994+#~ "This can be disabled in <b>System Settings</b> under <b>Security &amp; "
995+#~ "Privacy</b>"
996+#~ msgstr ""
997+#~ "يمكن تعطيل ذلك بالذهاب إلى <b>إعدادات النظام</b> من خلال <b>الأمان "
998+#~ "والخصوصية</b>"
999+
1000+#~ msgid "Nice work!"
1001+#~ msgstr "عمل جيد!"
1002+
1003+#~ msgid "All done"
1004+#~ msgstr "تم ذلك"
1005+
1006+#~ msgid "Finish"
1007+#~ msgstr "إنهاء"
1008+
7951009#~ msgid "Your phone is now ready to use."
7961010#~ msgstr "هاتفك جاهز الآن للاستخدام."
1011+
1012+#~ msgid "You almost got it!"
1013+#~ msgstr "انت حصلت على ذلك تقريبا!"
1014+
1015+#~ msgid ""
1016+#~ "Your phone is set up to automatically report errors to Canonical and its "
1017+#~ "partners, the makers of the operating system."
1018+#~ msgstr ""
1019+#~ "هاتفك مُعدّ لإرسال تقارير آلية بالأخطاء إلى كانونيكال وشركائها (صانعي نظام "
1020+#~ "التشغيل)."
1021+
1022+#~ msgid "Unlock SIM"
1023+#~ msgstr "فتح قفل بطاقة SIM"
1024+
1025+#~ msgid ""
1026+#~ "By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
1027+#~ "conditions</a>."
1028+#~ msgstr ""
1029+#~ "باختيارك لهذا الخيار فإنك توافق على <a href='#'>الشروط والأحكام</a> الخاصة "
1030+#~ "بـ Nokia HERE."
po/ast.po+509−263
@@ -7,31 +7,31 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-02-16 03:29+0000\n"
11−"PO-Revision-Date: 2016-02-19 19:39+0000\n"
10+"POT-Creation-Date: 2016-04-27 15:01+0000\n"
11+"PO-Revision-Date: 2016-04-17 16:57+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-23 06:03+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-04-30 05:36+0000\n"
19+"X-Generator: Launchpad (build 17995)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
2323msgstr "Contraseña: "
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 "Anclar atayu"
2929
30−#: plugins/Unity/Launcher/launcheritem.cpp:52
30+#: plugins/Unity/Launcher/launcheritem.cpp:53
3131msgid "Quit"
3232msgstr "Colar"
3333
34−#: plugins/Unity/Launcher/launcheritem.cpp:106
34+#: plugins/Unity/Launcher/launcheritem.cpp:107
3535msgid "Unpin shortcut"
3636msgstr "Desanclar atayu"
3737
@@ -74,53 +74,35 @@ msgctxt "Button: Log out from the system"
7474msgid "Log Out"
7575msgstr "Zarrar sesión"
7676
77−#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:194
78−#: qml/Components/Dialogs.qml:253
77+#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
78+#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
79+#: qml/Wizard/Pages/passcode-set.qml:32
7980msgid "Cancel"
8081msgstr "Encaboxar"
8182
8283#: qml/Components/Dialogs.qml:173
83−msgctxt "Title: Reboot/Shut down dialog"
84−msgid "Shut down"
85−msgstr "Apagáu"
86−
87−#: qml/Components/Dialogs.qml:174
88−msgid "Are you sure you want to shut down?"
89−msgstr "¿De xuru que quies apagar?"
90−
91−#: qml/Components/Dialogs.qml:176
92−msgctxt "Button: Reboot the system"
93−msgid "Reboot"
94−msgstr "Reaniciar"
95−
96−#: qml/Components/Dialogs.qml:185
97−msgctxt "Button: Shut down the system"
98−msgid "Shut down"
99−msgstr "Apagar"
100−
101−#: qml/Components/Dialogs.qml:207
10284msgctxt "Title: Reboot dialog"
10385msgid "Reboot"
10486msgstr "Reaniciu"
10587
106−#: qml/Components/Dialogs.qml:208
88+#: qml/Components/Dialogs.qml:174
10789msgid "Are you sure you want to reboot?"
10890msgstr "¿De xuru que quies reaniciar?"
10991
110−#: qml/Components/Dialogs.qml:210
92+#: qml/Components/Dialogs.qml:176
11193msgid "No"
11294msgstr "Non"
11395
114−#: qml/Components/Dialogs.qml:217
96+#: qml/Components/Dialogs.qml:182
11597msgid "Yes"
11698msgstr "Sí"
11799
118−#: qml/Components/Dialogs.qml:232
100+#: qml/Components/Dialogs.qml:197
119101msgctxt "Title: Power off/Restart dialog"
120102msgid "Power"
121103msgstr "Apagáu"
122104
123−#: qml/Components/Dialogs.qml:233
105+#: qml/Components/Dialogs.qml:198
124106msgid ""
125107"Are you sure you would like\n"
126108"to power off?"
@@ -128,25 +110,25 @@ msgstr ""
128110"¿De xuru que te prestaría\n"
129111"apagar?"
130112
131−#: qml/Components/Dialogs.qml:235
113+#: qml/Components/Dialogs.qml:200
132114msgctxt "Button: Power off the system"
133115msgid "Power off"
134116msgstr "Apagar"
135117
136−#: qml/Components/Dialogs.qml:244
118+#: qml/Components/Dialogs.qml:209
137119msgctxt "Button: Restart the system"
138120msgid "Restart"
139121msgstr "Reaniciar"
140122
141−#: qml/Components/Lockscreen.qml:245
123+#: qml/Components/Lockscreen.qml:231
142124msgid "Return to Call"
143125msgstr "Tornar a la llamada"
144126
145−#: qml/Components/Lockscreen.qml:245
127+#: qml/Components/Lockscreen.qml:231
146128msgid "Emergency Call"
147129msgstr "Llamada d'emerxencia"
148130
149−#: qml/Components/Lockscreen.qml:277
131+#: qml/Components/Lockscreen.qml:263
150132msgid "OK"
151133msgstr "Aceutar"
152134
@@ -155,10 +137,10 @@ msgid "Apps may have unsaved data:"
155137msgstr "Apps que pueden tener datos sin guardar:"
156138
157139#: qml/Components/ModeSwitchWarningDialog.qml:57
140+msgctxt ""
141+"Re-dock means connect the device again to an external screen/mouse/keyboard"
158142msgid "Re-dock, save your work and close these apps to continue."
159143msgstr ""
160−"Pa siguir coneuta nuevamente'l preséu, guarda'l trabayu y zarra estes "
161−"aplicaciones."
162144
163145#: qml/Components/ModeSwitchWarningDialog.qml:63
164146msgid "Or force close now (unsaved data will be lost)."
@@ -176,42 +158,58 @@ msgstr "Reconeutar agora."
176158msgid "Close all"
177159msgstr "Zarrar too"
178160
179−#: qml/Dash/DashPageHeader.qml:266
161+#: qml/Dash/DashPageHeader.qml:337
180162msgctxt "Button: Open the Ubuntu Store"
181163msgid "Store"
182164msgstr "Tienda"
183165
184−#: qml/Dash/DashPageHeader.qml:273
166+#: qml/Dash/DashPageHeader.qml:344
185167msgctxt "Button: Start a search in the current dash scope"
186168msgid "Search"
187169msgstr "Guetar"
188170
189−#: qml/Dash/DashPageHeader.qml:283
171+#: qml/Dash/DashPageHeader.qml:354
190172msgctxt "Button: Show the current dash scope settings"
191173msgid "Settings"
192174msgstr "Axustes"
193175
194−#: qml/Dash/DashPageHeader.qml:290
176+#: qml/Dash/DashPageHeader.qml:361
195177msgid "Remove from Favorites"
196178msgstr "Desaniciar de favoritos"
197179
198−#: qml/Dash/DashPageHeader.qml:290
180+#: qml/Dash/DashPageHeader.qml:361
199181msgid "Add to Favorites"
200182msgstr "Amestar a favoritos"
201183
202−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
203−msgid "See less"
204−msgstr "Ver menos"
184+#: qml/Dash/FiltersPopover.qml:60
185+msgid "Refine your results"
186+msgstr ""
187+
188+#: qml/Dash/FiltersPopover.qml:69
189+msgid "Reset"
190+msgstr "Reafitar"
191+
192+#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
193+msgid "Show less"
194+msgstr ""
205195
206−#: qml/Dash/GenericScopeView.qml:587
207−msgid "See all"
208−msgstr "Ver too"
196+#: qml/Dash/GenericScopeView.qml:570
197+msgid "Show all"
198+msgstr ""
209199
210−#: qml/Dash/GenericScopeView.qml:649
200+#: qml/Dash/GenericScopeView.qml:627
211201msgctxt "Label: Hint for dash search line edit"
212202msgid "Search"
213203msgstr "Guetar"
214204
205+#: qml/Dash/PageHeaderExtraPanel.qml:55
206+msgid "Recent Searches"
207+msgstr ""
208+
209+#: qml/Dash/PageHeaderExtraPanel.qml:66
210+msgid "Clear All"
211+msgstr "Llimpiar too"
212+
215213#: qml/Dash/Previews/PreviewActionCombo.qml:35
216214msgid "More..."
217215msgstr "Más…"
@@ -233,7 +231,7 @@ msgstr "Valorar esto"
233231msgid "Add a review"
234232msgstr "Amestar una reseña"
235233
236−#: qml/Dash/Previews/PreviewSharing.qml:50
234+#: qml/Dash/Previews/PreviewSharing.qml:66
237235msgid "Preview Share Item"
238236msgstr "Entever l'elementu compartíu"
239237
@@ -261,13 +259,13 @@ msgstr "Aniciu"
261259msgid "Also installed"
262260msgstr "Tamién instalaos"
263261
264−#: qml/DisabledScreenNotice.qml:87
262+#: qml/DisabledScreenNotice.qml:104
265263msgid ""
266264"Your device is now connected to an external display. Use this screen as a "
267−"touch pad to interact with the mouse."
265+"touch pad to interact with the pointer."
268266msgstr ""
269267
270−#: qml/Greeter/CoverPage.qml:107
268+#: qml/Greeter/CoverPage.qml:118
271269msgid "Unlock"
272270msgstr "Desbloquiar"
273271
@@ -279,11 +277,11 @@ msgstr "Reintentar"
279277msgid "Tap to unlock"
280278msgstr "Calca pa desbloquiar"
281279
282−#: qml/Greeter/NarrowView.qml:54 qml/Wizard/Pages/passwd-confirm.qml:53
280+#: qml/Greeter/NarrowView.qml:54
283281msgid "Sorry, incorrect passphrase."
284282msgstr "Perdón, fras de pasu incorreuta"
285283
286−#: qml/Greeter/NarrowView.qml:55 qml/Wizard/Pages/passwd-confirm.qml:54
284+#: qml/Greeter/NarrowView.qml:55
287285msgid "Sorry, incorrect passcode."
288286msgstr "Perdón, códigu de pasu incorreutu."
289287
@@ -312,7 +310,7 @@ msgstr ""
312310msgid "Enter %1"
313311msgstr "Introduz %1"
314312
315−#: qml/Greeter/NarrowView.qml:117 qml/Wizard/Pages/passwd-set.qml:60
313+#: qml/Greeter/NarrowView.qml:117
316314msgid "Enter passphrase"
317315msgstr "Introduz la fras de pasu"
318316
@@ -338,7 +336,7 @@ msgstr "Vuelve a escribila"
338336msgid "Sorry, incorrect passcode"
339337msgstr "Sentímoslo, códigu de pasu incorreutu"
340338
341−#: qml/Notifications/NotificationMenuItemFactory.qml:129
339+#: qml/Notifications/NotificationMenuItemFactory.qml:124
342340msgid "Show password"
343341msgstr "Amosar contraseña"
344342
@@ -350,62 +348,62 @@ msgstr "Toca pa tornar a la llamada..."
350348msgid "Conference"
351349msgstr "Conferencia"
352350
353−#: qml/Panel/Indicators/MenuItemFactory.qml:753
351+#: qml/Panel/Indicators/MenuItemFactory.qml:762
354352msgid "Nothing is playing"
355353msgstr "Nun ta reproduciéndose nada"
356354
357−#: qml/Panel/Indicators/MenuItemFactory.qml:882
355+#: qml/Panel/Indicators/MenuItemFactory.qml:891
358356#, qt-format
359357msgid "%1 hour"
360358msgid_plural "%1 hours"
361359msgstr[0] "%1 hora"
362360msgstr[1] "%1 hores"
363361
364−#: qml/Panel/Indicators/MenuItemFactory.qml:886
362+#: qml/Panel/Indicators/MenuItemFactory.qml:895
365363#, qt-format
366364msgid "%1 minute"
367365msgid_plural "%1 minutes"
368366msgstr[0] "%1 minutu"
369367msgstr[1] "%1 minutos"
370368
371−#: qml/Panel/Indicators/MenuItemFactory.qml:891
369+#: qml/Panel/Indicators/MenuItemFactory.qml:900
372370#, qt-format
373371msgid "%1 second"
374372msgid_plural "%1 seconds"
375373msgstr[0] "%1 segundu"
376374msgstr[1] "%1 segundos"
377375
378−#: qml/Panel/Indicators/MenuItemFactory.qml:894
376+#: qml/Panel/Indicators/MenuItemFactory.qml:903
379377msgid "0 seconds"
380378msgstr "0 segundos"
381379
382380#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
383−#: qml/Panel/Indicators/MenuItemFactory.qml:896
381+#: qml/Panel/Indicators/MenuItemFactory.qml:905
384382#, qt-format
385383msgid "%1 remaining"
386384msgstr "Queden %1"
387385
388−#: qml/Panel/Indicators/MenuItemFactory.qml:902
386+#: qml/Panel/Indicators/MenuItemFactory.qml:911
389387msgid "In queue…"
390388msgstr "Na cola..."
391389
392−#: qml/Panel/Indicators/MenuItemFactory.qml:906
390+#: qml/Panel/Indicators/MenuItemFactory.qml:915
393391msgid "Downloading"
394392msgstr "Baxando"
395393
396−#: qml/Panel/Indicators/MenuItemFactory.qml:908
394+#: qml/Panel/Indicators/MenuItemFactory.qml:917
397395msgid "Paused, tap to resume"
398396msgstr "Posáu, toca pa reanudar"
399397
400−#: qml/Panel/Indicators/MenuItemFactory.qml:910
398+#: qml/Panel/Indicators/MenuItemFactory.qml:919
401399msgid "Canceled"
402400msgstr "Encaboxáu"
403401
404−#: qml/Panel/Indicators/MenuItemFactory.qml:912
402+#: qml/Panel/Indicators/MenuItemFactory.qml:921
405403msgid "Finished"
406404msgstr "Finó"
407405
408−#: qml/Panel/Indicators/MenuItemFactory.qml:914
406+#: qml/Panel/Indicators/MenuItemFactory.qml:923
409407msgid "Failed, tap to retry"
410408msgstr "Falló, toca pa reintentar"
411409
@@ -425,259 +423,324 @@ msgctxt "Button: Call back on phone"
425423msgid "Call back"
426424msgstr "Devolver llamada"
427425
428−#: qml/Panel/Indicators/ModemInfoItem.qml:105
429−msgid "Unlock SIM"
430−msgstr "Desbloquiar SIM"
431−
432−#: qml/Panel/Indicators/RoamingIndication.qml:27
433−msgid "Roaming"
434−msgstr "Roaming"
435−
436−#: qml/Tutorial/TutorialBottom.qml:28
437−msgid "Open special menus"
438−msgstr "Abrir menús especiales"
439−
440−#: qml/Tutorial/TutorialBottom.qml:29
441−msgid "Swipe up from the bottom edge."
442−msgstr "Esliza dende'l berbesu d'embaxo."
426+#: qml/Stages/SideStage.qml:76
427+msgid "Drag using 3 fingers any application from one window to the other"
428+msgstr ""
443429
444−#: qml/Tutorial/TutorialBottomFinish.qml:24
445−msgid "This action does different things for different apps"
446−msgstr "Esta aición fai coses distintes p'aplicaciones estremaes"
430+#: qml/Tutorial/TutorialBottom.qml:78
431+msgid "Swipe up to add a contact"
432+msgstr ""
447433
448−#: qml/Tutorial/TutorialBottomFinish.qml:25
449−msgid "Tap here to finish."
450−msgstr "Toca equí pa finar."
434+#: qml/Tutorial/TutorialBottom.qml:80
435+msgid "Swipe up for favorite calculations"
436+msgstr ""
451437
452−#: qml/Tutorial/TutorialContent.qml:80 qml/Tutorial/TutorialLeftFinish.qml:25
453−#: qml/Tutorial/TutorialRight.qml:144
454−msgid "Tap here to continue."
455−msgstr "Toca equí pa siguir."
438+#: qml/Tutorial/TutorialBottom.qml:82
439+msgid "Swipe up for recent calls"
440+msgstr ""
456441
457−#: qml/Tutorial/TutorialLeft.qml:26
458−msgid "Open the launcher"
459−msgstr "Abrir el llanzador"
442+#: qml/Tutorial/TutorialBottom.qml:84
443+msgid "Swipe up to create a message"
444+msgstr ""
460445
461−#: qml/Tutorial/TutorialLeft.qml:27
462−msgid "Short swipe from the left edge."
463−msgstr "Esliza un poco dende'l berbesu esquierdu."
446+#: qml/Tutorial/TutorialBottom.qml:85
447+msgid "Swipe up to manage the app"
448+msgstr ""
464449
465−#: qml/Tutorial/TutorialLeftFinish.qml:24
466−msgid "These are the shortcuts to favorite apps"
467−msgstr "Estos son los atayos a les aplicaciones favorites"
450+#: qml/Tutorial/TutorialLeftLong.qml:47
451+msgid "Long swipe from the left edge to open the Today scope"
452+msgstr ""
468453
469−#: qml/Tutorial/TutorialPage.qml:178
470−msgid "You almost got it!"
471−msgstr "¡Yá cuasi finamos!"
454+#: qml/Tutorial/TutorialLeft.qml:47
455+msgid "Swipe from the left edge to open the launcher"
456+msgstr ""
472457
473−#: qml/Tutorial/TutorialPage.qml:195
474−msgid "Try again."
475−msgstr "Intentar de nueves"
458+#: qml/Tutorial/TutorialRight.qml:55
459+msgid "Push your mouse against the right edge to view your open apps"
460+msgstr ""
476461
477−#: qml/Tutorial/TutorialRight.qml:31
478−msgid "To view open apps"
479−msgstr "Pa ver aplicaciones abiertes"
462+#: qml/Tutorial/TutorialRight.qml:56
463+msgid "Short or long swipe from the right edge to view your open apps"
464+msgstr ""
480465
481−#: qml/Tutorial/TutorialRight.qml:32
482−msgid "Long swipe from the right edge."
483−msgstr "Eslizamientu llargu dende'l berbesu drechu."
466+#: qml/Tutorial/TutorialTop.qml:53
467+msgid "Swipe from the top right edge to open the notification bar"
468+msgstr ""
484469
485−#: qml/Tutorial/TutorialRight.qml:122
486−msgid "View all your running tasks."
487−msgstr "Mira toles tos aplicaciones n'execución."
470+#: qml/Tutorial/TutorialTop.qml:54
471+msgid "Swipe from the top edge to open the notification bar"
472+msgstr ""
488473
489−#: qml/Wizard/Page.qml:89
474+#: qml/Wizard/Page.qml:54
490475msgctxt "Button: Go back one page in the Wizard"
491476msgid "Back"
492477msgstr "Atrás"
493478
494479#: qml/Wizard/Pages/10-welcome.qml:27
495−msgid "Hi!"
496−msgstr "¡Hola!"
497−
498−#: qml/Wizard/Pages/10-welcome.qml:44
499−msgid "Welcome to your Ubuntu device."
500−msgstr ""
501−
502−#: qml/Wizard/Pages/10-welcome.qml:52
503−msgid "Let’s get started."
504−msgstr "Entamemos."
480+msgid "Language"
481+msgstr "Llingua"
482+
483+#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
484+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
485+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
486+#: qml/Wizard/Pages/75-report-check.qml:84
487+#: qml/Wizard/Pages/passcode-desktop.qml:124
488+#: qml/Wizard/Pages/password-set.qml:141
489+msgid "Next"
490+msgstr "Siguiente"
491+
492+#: qml/Wizard/Pages/30-wifi.qml:29
493+msgid "Connect to Wi‑Fi"
494+msgstr "Coneutase al WiFi"
505495
506−#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:133
507−#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
508−#: qml/Wizard/Pages/60-reporting.qml:60 qml/Wizard/Pages/passwd-confirm.qml:82
509−#: qml/Wizard/Pages/passwd-set.qml:90
510−msgid "Continue"
511−msgstr "Siguir"
496+#: qml/Wizard/Pages/30-wifi.qml:130
497+msgid "Connected"
498+msgstr "Coneutáu"
512499
513−#: qml/Wizard/Pages/20-sim.qml:25
514−msgid "Add a SIM card and restart your device"
515−msgstr "Amiesta una tarxeta SIM y reanicia'l to preséu"
500+#: qml/Wizard/Pages/30-wifi.qml:163
501+msgid "Available Wi-Fi networks"
502+msgstr "Redes Wi-Fi disponibles"
516503
517−#: qml/Wizard/Pages/20-sim.qml:59
518−msgid "Without it, you won’t be able to make calls or use text messaging."
519−msgstr "Ensin ella, nun vas poder facer llamaes nin unviar mensaxes."
504+#: qml/Wizard/Pages/30-wifi.qml:164
505+msgid "No available Wi-Fi networks"
506+msgstr "Nun hai redes Wi-Fi disponibles"
520507
521−#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
508+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
509+#: qml/Wizard/Pages/sim.qml:101
522510msgid "Skip"
523511msgstr "Saltar"
524512
525−#: qml/Wizard/Pages/30-passwd-type.qml:39
526−msgid "Lock security"
527−msgstr "Seguranza del bloquéu"
513+#: qml/Wizard/Pages/40-location.qml:27
514+msgid "Location Services"
515+msgstr ""
528516
529−#: qml/Wizard/Pages/30-passwd-type.qml:79
530−msgid "Please select how you’d like to unlock your device."
517+#: qml/Wizard/Pages/40-location.qml:83
518+msgid ""
519+"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
520+"(recommended)"
531521msgstr ""
532522
533−#: qml/Wizard/Pages/30-passwd-type.qml:102
534−msgctxt "Label: Type of security method"
535−msgid "Swipe"
536−msgstr "Eslizar"
523+#: qml/Wizard/Pages/40-location.qml:105
524+#, qt-format
525+msgid "By selecting this option you agree to the Nokia HERE %1."
526+msgstr ""
537527
538−#: qml/Wizard/Pages/30-passwd-type.qml:103
539−msgctxt "Label: Description of security method"
540−msgid "No security"
541−msgstr "Ensin seguranza"
528+#: qml/Wizard/Pages/40-location.qml:106
529+msgctxt "part of: Nokia HERE terms and conditions"
530+msgid "terms and conditions"
531+msgstr ""
532+
533+#: qml/Wizard/Pages/40-location.qml:160
534+msgid "GPS only"
535+msgstr ""
536+
537+#: qml/Wizard/Pages/40-location.qml:214
538+msgid "Don't use my location"
539+msgstr ""
540+
541+#: qml/Wizard/Pages/40-location.qml:260
542+msgid "You can change it later in System Settings."
543+msgstr ""
544+
545+#: qml/Wizard/Pages/50-timezone.qml:29
546+msgid "Time Zone"
547+msgstr "Estaya horaria"
548+
549+#: qml/Wizard/Pages/50-timezone.qml:178
550+msgid "Enter your city"
551+msgstr "Escribe la ciudá"
552+
553+#: qml/Wizard/Pages/60-account.qml:24
554+msgid "Personalize Your Device"
555+msgstr "Personaliza'l preséu"
556+
557+#: qml/Wizard/Pages/60-account.qml:48
558+msgid "Preferred Name"
559+msgstr "Nome preferíu"
560+
561+#: qml/Wizard/Pages/70-passwd-type.qml:39
562+msgid "Lock Screen"
563+msgstr "Bloquiar pantalla"
542564
543−#: qml/Wizard/Pages/30-passwd-type.qml:105
565+#: qml/Wizard/Pages/70-passwd-type.qml:101
544566msgctxt "Label: Type of security method"
545−msgid "Passcode"
546−msgstr "Códigu de pasu"
567+msgid "Create new password"
568+msgstr ""
547569
548−#: qml/Wizard/Pages/30-passwd-type.qml:106
549−msgctxt "Label: Description of security method"
550−msgid "4 digits only"
551−msgstr "Namái 4 díxitos"
570+#: qml/Wizard/Pages/70-passwd-type.qml:103
571+msgctxt "Label: Type of security method"
572+msgid "Create passcode (numbers only)"
573+msgstr ""
552574
553−#: qml/Wizard/Pages/30-passwd-type.qml:108
575+#: qml/Wizard/Pages/70-passwd-type.qml:105
554576msgctxt "Label: Type of security method"
555−msgid "Passphrase"
556−msgstr "Fras de pasu"
577+msgid "No lock code"
578+msgstr ""
557579
558−#: qml/Wizard/Pages/30-passwd-type.qml:109
559−msgctxt "Label: Description of security method"
560−msgid "Numbers and letters"
561−msgstr "Númberos y lletres"
580+#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
581+msgid "Privacy Policy"
582+msgstr ""
562583
563−#: qml/Wizard/Pages/40-wifi.qml:29
564−msgid "Connect to Wi‑Fi"
565−msgstr "Coneutase al WiFi"
584+#: qml/Wizard/Pages/75-report-check.qml:26
585+msgid "Help Us Improve"
586+msgstr ""
587+
588+#: qml/Wizard/Pages/75-report-check.qml:59
589+msgid "Improve system performance by sending us crashes and error reports."
590+msgstr ""
591+
592+#: qml/Wizard/Pages/75-report-check.qml:60
593+msgid "Privacy policy"
594+msgstr ""
566595
567−#: qml/Wizard/Pages/40-wifi.qml:168
568−msgid "Available networks…"
569−msgstr "Redes disponibles..."
596+#: qml/Wizard/Pages/80-finished.qml:89
597+msgid "Welcome to Ubuntu"
598+msgstr "Bienveníu/a a Ubuntu"
570599
571−#: qml/Wizard/Pages/40-wifi.qml:169
572−msgid "No available networks."
573−msgstr "Nun hai redes disponibles"
600+#: qml/Wizard/Pages/80-finished.qml:104
601+msgid "You are ready to use your device now"
602+msgstr ""
574603
575−#: qml/Wizard/Pages/50-location.qml:27
576−msgid "Location"
577−msgstr "Allugamientu"
604+#: qml/Wizard/Pages/80-finished.qml:124
605+msgid "Get Started"
606+msgstr "Primeros pasos"
578607
579−#: qml/Wizard/Pages/50-location.qml:62
580−msgid "Let the phone detect your location:"
581−msgstr "Dexar al teléfonu deteutar l'allugamientu:"
608+#: qml/Wizard/Pages/here-terms.qml:25
609+msgid "Terms & Conditions"
610+msgstr "Términos y condiciones"
582611
583−#: qml/Wizard/Pages/50-location.qml:69
584−msgid "Using GPS only (less accurate)"
585−msgstr "Namái usando GPS (menos precisión)"
612+#: qml/Wizard/Pages/here-terms.qml:69
613+msgid "Your device uses positioning technologies provided by HERE."
614+msgstr ""
586615
587−#: qml/Wizard/Pages/50-location.qml:86
588−msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
616+#: qml/Wizard/Pages/here-terms.qml:81
617+msgid ""
618+"To provide you with positioning services and to improve their quality, HERE "
619+"collects information about nearby cell towers and Wi-Fi hotspots around your "
620+"current location whenever your position is being found."
589621msgstr ""
590−"Usando GPS, Wi-fi anónimes ya información de redes móviles (aconseyao)"
591622
592−#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
593−#: qml/Wizard/Pages/50-location.qml:103
623+#: qml/Wizard/Pages/here-terms.qml:93
594624msgid ""
595−"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
596−"conditions</a>."
625+"The information collected is used to analyze the service and to improve the "
626+"use of service, but not to identify you personally."
597627msgstr ""
598−"Esbillando esta opción aceutes los <a href='#'>términos y condiciones</a> de "
599−"Nokia HERE."
600628
601−#: qml/Wizard/Pages/50-location.qml:112
602−msgid "Not at all"
603−msgstr "De nengún mou"
629+#: qml/Wizard/Pages/here-terms.qml:106
630+#, qt-format
631+msgid "By continuing, you agree to the HERE platform %1 and %2."
632+msgstr ""
604633
605−#: qml/Wizard/Pages/50-location.qml:124
606−msgid "You can change your mind later in <b>System Settings</b>."
607−msgstr "Pues cambialo dempués n'<b>Axustes del sistema</b>."
634+#: qml/Wizard/Pages/here-terms.qml:107
635+msgid "Service Terms"
636+msgstr ""
608637
609−#: qml/Wizard/Pages/60-reporting.qml:26
610−msgid "Improving your experience"
611−msgstr "Ameyorando la to esperiencia"
638+#: qml/Wizard/Pages/passcode-confirm.qml:43
639+#: qml/Wizard/Pages/passcode-desktop.qml:80
640+msgid "Confirm passcode"
641+msgstr "Confirmar códigu de pasu"
612642
613−#: qml/Wizard/Pages/60-reporting.qml:46
614−msgid ""
615−"Your phone is set up to automatically report errors to Canonical and its "
616−"partners, the makers of the operating system."
643+#: qml/Wizard/Pages/passcode-confirm.qml:45
644+msgid "Incorrect passcode."
617645msgstr ""
618−"El teléfonu ta configuráu pa informar automáticamente de los fallos a "
619−"Canonical y asociaos, los fabricantes del sistema operativu."
620646
621−#: qml/Wizard/Pages/60-reporting.qml:53
622−msgid ""
623−"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
624−"Privacy</b>"
647+#: qml/Wizard/Pages/passcode-confirm.qml:45
648+msgctxt "Enter the passcode again"
649+msgid "Please re-enter."
625650msgstr ""
626−"Esto pue deshabilitase nos <b>Axustes del sistema</b> en <b>Seguranza y "
627−"privacidá</b>"
628651
629−#: qml/Wizard/Pages/80-finished.qml:24
630−msgid "All done"
631−msgstr "Too fecho"
652+#: qml/Wizard/Pages/passcode-desktop.qml:30
653+msgid "Lock Screen Passcode"
654+msgstr ""
632655
633−#: qml/Wizard/Pages/80-finished.qml:39
634−msgid "Nice work!"
635−msgstr "¡Bon trabayu!"
656+#: qml/Wizard/Pages/passcode-desktop.qml:56
657+msgid "Enter 4 numbers to setup your passcode"
658+msgstr ""
636659
637−#: qml/Wizard/Pages/80-finished.qml:46
638−msgid "Your device is now ready to use."
660+#: qml/Wizard/Pages/passcode-desktop.qml:65
661+#: qml/Wizard/Pages/passcode-set.qml:54
662+msgid "Choose passcode"
639663msgstr ""
640664
641−#: qml/Wizard/Pages/80-finished.qml:53
642−msgid "Finish"
643−msgstr "Finar"
665+#: qml/Wizard/Pages/passcode-desktop.qml:105
666+msgid "Passcode too short"
667+msgstr ""
644668
645−#: qml/Wizard/Pages/here-terms.qml:27
646−msgid "Terms & Conditions"
647−msgstr "Términos y condiciones"
669+#: qml/Wizard/Pages/passcode-desktop.qml:107
670+msgid "Passcodes match"
671+msgstr ""
648672
649−#: qml/Wizard/Pages/passwd-confirm.qml:49
650−msgid "Confirm passphrase"
651−msgstr "Confirmar frase de pasu"
673+#: qml/Wizard/Pages/passcode-desktop.qml:109
674+msgid "Passcodes do not match"
675+msgstr ""
652676
653−#: qml/Wizard/Pages/passwd-confirm.qml:50
654−msgid "Confirm passcode"
655−msgstr "Confirmar códigu de pasu"
677+#: qml/Wizard/Pages/passcode-set.qml:62
678+msgid "Passcode must be 4 characters long"
679+msgstr ""
656680
657−#: qml/Wizard/Pages/passwd-confirm.qml:53
658−#: qml/Wizard/Pages/passwd-confirm.qml:54
659−msgid "Please try again."
660−msgstr "Por favor, vuelvi a intentalo."
681+#: qml/Wizard/Pages/password-set.qml:30
682+msgid "Lock Screen Password"
683+msgstr ""
661684
662−#: qml/Wizard/Pages/passwd-set.qml:61
663−msgid "Choose your passcode"
664−msgstr "Escueyi'l to códigu de pasu"
685+#: qml/Wizard/Pages/password-set.qml:61
686+msgid "Enter at least 8 characters"
687+msgstr ""
665688
666−#: qml/Wizard/Pages/passwd-set.qml:68
667−msgid "Passphrase must be 4 characters long"
668−msgstr "La fras de pasu tien de ser 4 caráuteres de llargor"
689+#: qml/Wizard/Pages/password-set.qml:73
690+msgid "Choose password"
691+msgstr ""
669692
670−#. Translators: This is the arrow for "Back" buttons
671−#: qml/Wizard/StackButton.qml:39
672−#, qt-format
673−msgid "〈 %1"
674−msgstr "〈 %1"
693+#: qml/Wizard/Pages/password-set.qml:103
694+msgid "Confirm password"
695+msgstr "Confirmar contraseña"
675696
676−#. Translators: This is the arrow for "Forward" buttons
677−#: qml/Wizard/StackButton.qml:42
678−#, qt-format
679−msgid "%1 〉"
680−msgstr "%1 〉"
697+#: qml/Wizard/Pages/sim.qml:27
698+msgid "No SIM card installed"
699+msgstr ""
700+
701+#: qml/Wizard/Pages/sim.qml:54
702+msgid "SIM card added"
703+msgstr ""
704+
705+#: qml/Wizard/Pages/sim.qml:55
706+msgid "You must restart the device to access the mobile network."
707+msgstr ""
708+
709+#: qml/Wizard/Pages/sim.qml:59
710+msgid "Restart"
711+msgstr "Reaniciar"
712+
713+#: qml/Wizard/Pages/sim.qml:78
714+msgid "You won’t be able to make calls or use text messaging without a SIM."
715+msgstr ""
716+
717+#: qml/Wizard/Pages/sim.qml:90
718+msgid "To proceed with no SIM tap Skip."
719+msgstr ""
720+
721+#: qml/Wizard/PasswordMeter.qml:87
722+msgid "Passwords match"
723+msgstr ""
724+
725+#: qml/Wizard/PasswordMeter.qml:89
726+msgid "Passwords do not match"
727+msgstr ""
728+
729+#: qml/Wizard/PasswordMeter.qml:93
730+msgid "Strong password"
731+msgstr "Contraseña fuerte"
732+
733+#: qml/Wizard/PasswordMeter.qml:95
734+msgid "Fair password"
735+msgstr "Contraseña aceutable"
736+
737+#: qml/Wizard/PasswordMeter.qml:97
738+msgid "Weak password"
739+msgstr "Contraseña feble"
740+
741+#: qml/Wizard/PasswordMeter.qml:99
742+msgid "Very weak password"
743+msgstr "Contraseña feble enforma"
681744
682745#~ msgid "Skip intro"
683746#~ msgstr "Omitir la intro"
@@ -729,6 +792,9 @@ msgstr "%1 〉"
729792#~ msgid "Search"
730793#~ msgstr "Guetar"
731794
795+#~ msgid "See less"
796+#~ msgstr "Ver menos"
797+
732798#~ msgid ""
733799#~ "You have now mastered the edge gestures and can start using the "
734800#~ "phone<br><br>Tap on the screen to start"
@@ -736,6 +802,9 @@ msgstr "%1 〉"
736802#~ "Agora yá domines los xestos de los berbesos y pues entamar a usar el "
737803#~ "teléfonu<br><br>Toca la pantalla pa comenzar"
738804
805+#~ msgid "See all"
806+#~ msgstr "Ver too"
807+
739808#~ msgid "Power"
740809#~ msgstr "Enerxía"
741810
@@ -763,27 +832,204 @@ msgstr "%1 〉"
763832#~ msgid "All"
764833#~ msgstr "Too"
765834
835+#~ msgid "Unlock SIM"
836+#~ msgstr "Desbloquiar SIM"
837+
766838#~ msgid "Store"
767839#~ msgstr "Tienda"
768840
769−#~ msgid "Restart"
770−#~ msgstr "Reaniciar"
841+#~ msgid "Roaming"
842+#~ msgstr "Roaming"
771843
772844#~ msgid "Manage Scopes"
773845#~ msgstr "Xestionar ámbitos"
774846
847+#~ msgid "Continue"
848+#~ msgstr "Siguir"
849+
850+#~ msgid "Without it, you won’t be able to make calls or use text messaging."
851+#~ msgstr "Ensin ella, nun vas poder facer llamaes nin unviar mensaxes."
852+
853+#~ msgid "You can change your mind later in <b>System Settings</b>."
854+#~ msgstr "Pues cambialo dempués n'<b>Axustes del sistema</b>."
855+
856+#~ msgid "Available networks…"
857+#~ msgstr "Redes disponibles..."
858+
859+#~ msgid "No available networks."
860+#~ msgstr "Nun hai redes disponibles"
861+
862+#~ msgid "Using GPS only (less accurate)"
863+#~ msgstr "Namái usando GPS (menos precisión)"
864+
865+#~ msgid ""
866+#~ "Your phone is set up to automatically report errors to Canonical and its "
867+#~ "partners, the makers of the operating system."
868+#~ msgstr ""
869+#~ "El teléfonu ta configuráu pa informar automáticamente de los fallos a "
870+#~ "Canonical y asociaos, los fabricantes del sistema operativu."
871+
872+#~ msgid "All done"
873+#~ msgstr "Too fecho"
874+
875+#~ msgid "Finish"
876+#~ msgstr "Finar"
877+
878+#~ msgid "Not at all"
879+#~ msgstr "De nengún mou"
880+
881+#, qt-format
882+#~ msgid "〈 %1"
883+#~ msgstr "〈 %1"
884+
885+#, qt-format
886+#~ msgid "%1 〉"
887+#~ msgstr "%1 〉"
888+
889+#~ msgid "Open the launcher"
890+#~ msgstr "Abrir el llanzador"
891+
892+#~ msgid "Tap here to continue."
893+#~ msgstr "Toca equí pa siguir."
894+
895+#~ msgid "Open special menus"
896+#~ msgstr "Abrir menús especiales"
897+
898+#~ msgid "Tap here to finish."
899+#~ msgstr "Toca equí pa finar."
900+
901+#~ msgctxt "Button: Shut down the system"
902+#~ msgid "Shut down"
903+#~ msgstr "Apagar"
904+
905+#~ msgctxt "Button: Reboot the system"
906+#~ msgid "Reboot"
907+#~ msgstr "Reaniciar"
908+
909+#~ msgid "These are the shortcuts to favorite apps"
910+#~ msgstr "Estos son los atayos a les aplicaciones favorites"
911+
912+#~ msgctxt "Label: Type of security method"
913+#~ msgid "Passcode"
914+#~ msgstr "Códigu de pasu"
915+
916+#~ msgid "To view open apps"
917+#~ msgstr "Pa ver aplicaciones abiertes"
918+
919+#~ msgid "Are you sure you want to shut down?"
920+#~ msgstr "¿De xuru que quies apagar?"
921+
922+#~ msgctxt "Title: Reboot/Shut down dialog"
923+#~ msgid "Shut down"
924+#~ msgstr "Apagáu"
925+
775926#~ msgid "Please re-enter"
776927#~ msgstr "Por favor, reintroduzla"
777928
929+#~ msgid "This action does different things for different apps"
930+#~ msgstr "Esta aición fai coses distintes p'aplicaciones estremaes"
931+
932+#~ msgid "Swipe up from the bottom edge."
933+#~ msgstr "Esliza dende'l berbesu d'embaxo."
934+
935+#~ msgid "Long swipe from the right edge."
936+#~ msgstr "Eslizamientu llargu dende'l berbesu drechu."
937+
938+#~ msgid "View all your running tasks."
939+#~ msgstr "Mira toles tos aplicaciones n'execución."
940+
941+#~ msgid "Try again."
942+#~ msgstr "Intentar de nueves"
943+
944+#~ msgid "You almost got it!"
945+#~ msgstr "¡Yá cuasi finamos!"
946+
947+#~ msgid "Short swipe from the left edge."
948+#~ msgstr "Esliza un poco dende'l berbesu esquierdu."
949+
950+#~ msgid "Hi!"
951+#~ msgstr "¡Hola!"
952+
953+#~ msgid "Lock security"
954+#~ msgstr "Seguranza del bloquéu"
955+
956+#~ msgid "Add a SIM card and restart your device"
957+#~ msgstr "Amiesta una tarxeta SIM y reanicia'l to preséu"
958+
778959#~ msgid "Please select how you’d like to unlock your phone."
779960#~ msgstr "Por favor, esbilla como te prestaría desbloquiar el teléfonu."
780961
962+#~ msgctxt "Label: Description of security method"
963+#~ msgid "No security"
964+#~ msgstr "Ensin seguranza"
965+
966+#~ msgctxt "Label: Type of security method"
967+#~ msgid "Swipe"
968+#~ msgstr "Eslizar"
969+
781970#~ msgid "Welcome to your Ubuntu phone."
782971#~ msgstr "Bienllegáu/ada al to teléfonu d'Ubuntu"
783972
973+#~ msgid "Let’s get started."
974+#~ msgstr "Entamemos."
975+
976+#~ msgctxt "Label: Description of security method"
977+#~ msgid "4 digits only"
978+#~ msgstr "Namái 4 díxitos"
979+
980+#~ msgid "Let the phone detect your location:"
981+#~ msgstr "Dexar al teléfonu deteutar l'allugamientu:"
982+
983+#~ msgid "Location"
984+#~ msgstr "Allugamientu"
985+
986+#~ msgctxt "Label: Type of security method"
987+#~ msgid "Passphrase"
988+#~ msgstr "Fras de pasu"
989+
990+#~ msgctxt "Label: Description of security method"
991+#~ msgid "Numbers and letters"
992+#~ msgstr "Númberos y lletres"
993+
994+#~ msgid "Improving your experience"
995+#~ msgstr "Ameyorando la to esperiencia"
996+
997+#~ msgid ""
998+#~ "This can be disabled in <b>System Settings</b> under <b>Security &amp; "
999+#~ "Privacy</b>"
1000+#~ msgstr ""
1001+#~ "Esto pue deshabilitase nos <b>Axustes del sistema</b> en <b>Seguranza y "
1002+#~ "privacidá</b>"
1003+
1004+#~ msgid "Nice work!"
1005+#~ msgstr "¡Bon trabayu!"
1006+
1007+#~ msgid ""
1008+#~ "By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
1009+#~ "conditions</a>."
1010+#~ msgstr ""
1011+#~ "Esbillando esta opción aceutes los <a href='#'>términos y condiciones</a> de "
1012+#~ "Nokia HERE."
1013+
1014+#~ msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
1015+#~ msgstr ""
1016+#~ "Usando GPS, Wi-fi anónimes ya información de redes móviles (aconseyao)"
1017+
7841018#~ msgid "Your phone is now ready to use."
7851019#~ msgstr "El teléfonu yá ta tresnáu pa usase."
7861020
1021+#~ msgid "Confirm passphrase"
1022+#~ msgstr "Confirmar frase de pasu"
1023+
1024+#~ msgid "Passphrase must be 4 characters long"
1025+#~ msgstr "La fras de pasu tien de ser 4 caráuteres de llargor"
1026+
1027+#~ msgid "Choose your passcode"
1028+#~ msgstr "Escueyi'l to códigu de pasu"
1029+
1030+#~ msgid "Please try again."
1031+#~ msgstr "Por favor, vuelvi a intentalo."
1032+
7871033#~ msgid "%a %H:%M"
7881034#~ msgstr "%a %H:%M"
7891035
po/az.po+291−204
@@ -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-16 03:29+0000\n"
10+"POT-Creation-Date: 2016-04-27 15:01+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,23 +15,23 @@ 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-23 06:03+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-04-30 05:36+0000\n"
19+"X-Generator: Launchpad (build 17995)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
2323msgstr "Şifrә: "
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 "Pin qısayolu"
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 "Açma qısayolu"
3737
@@ -73,77 +73,59 @@ msgctxt "Button: Log out from the system"
7373msgid "Log Out"
7474msgstr ""
7575
76−#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:194
77−#: qml/Components/Dialogs.qml:253
76+#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
77+#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
78+#: qml/Wizard/Pages/passcode-set.qml:32
7879msgid "Cancel"
7980msgstr "İmtina"
8081
8182#: qml/Components/Dialogs.qml:173
82−msgctxt "Title: Reboot/Shut down dialog"
83−msgid "Shut down"
84−msgstr ""
85−
86−#: qml/Components/Dialogs.qml:174
87−msgid "Are you sure you want to shut down?"
88−msgstr "Sistemi söndürmәk istәdiyinizә әminsiniz?"
89−
90−#: qml/Components/Dialogs.qml:176
91−msgctxt "Button: Reboot the system"
92−msgid "Reboot"
93−msgstr ""
94−
95−#: qml/Components/Dialogs.qml:185
96−msgctxt "Button: Shut down the system"
97−msgid "Shut down"
98−msgstr ""
99−
100−#: qml/Components/Dialogs.qml:207
10183msgctxt "Title: Reboot dialog"
10284msgid "Reboot"
10385msgstr ""
10486
105−#: qml/Components/Dialogs.qml:208
87+#: qml/Components/Dialogs.qml:174
10688msgid "Are you sure you want to reboot?"
10789msgstr "Yenidәn başlatmaq istәdiyinizә әminsiniz?"
10890
109−#: qml/Components/Dialogs.qml:210
91+#: qml/Components/Dialogs.qml:176
11092msgid "No"
11193msgstr "Yox"
11294
113−#: qml/Components/Dialogs.qml:217
95+#: qml/Components/Dialogs.qml:182
11496msgid "Yes"
11597msgstr "Hə"
11698
117−#: qml/Components/Dialogs.qml:232
99+#: qml/Components/Dialogs.qml:197
118100msgctxt "Title: Power off/Restart dialog"
119101msgid "Power"
120102msgstr ""
121103
122−#: qml/Components/Dialogs.qml:233
104+#: qml/Components/Dialogs.qml:198
123105msgid ""
124106"Are you sure you would like\n"
125107"to power off?"
126108msgstr ""
127109
128−#: qml/Components/Dialogs.qml:235
110+#: qml/Components/Dialogs.qml:200
129111msgctxt "Button: Power off the system"
130112msgid "Power off"
131113msgstr ""
132114
133−#: qml/Components/Dialogs.qml:244
115+#: qml/Components/Dialogs.qml:209
134116msgctxt "Button: Restart the system"
135117msgid "Restart"
136118msgstr ""
137119
138−#: qml/Components/Lockscreen.qml:245
120+#: qml/Components/Lockscreen.qml:231
139121msgid "Return to Call"
140122msgstr ""
141123
142−#: qml/Components/Lockscreen.qml:245
124+#: qml/Components/Lockscreen.qml:231
143125msgid "Emergency Call"
144126msgstr "Zərurət zəngi"
145127
146−#: qml/Components/Lockscreen.qml:277
128+#: qml/Components/Lockscreen.qml:263
147129msgid "OK"
148130msgstr "Oldu"
149131
@@ -152,6 +134,8 @@ msgid "Apps may have unsaved data:"
152134msgstr ""
153135
154136#: qml/Components/ModeSwitchWarningDialog.qml:57
137+msgctxt ""
138+"Re-dock means connect the device again to an external screen/mouse/keyboard"
155139msgid "Re-dock, save your work and close these apps to continue."
156140msgstr ""
157141
@@ -171,42 +155,58 @@ msgstr ""
171155msgid "Close all"
172156msgstr ""
173157
174−#: qml/Dash/DashPageHeader.qml:266
158+#: qml/Dash/DashPageHeader.qml:337
175159msgctxt "Button: Open the Ubuntu Store"
176160msgid "Store"
177161msgstr ""
178162
179−#: qml/Dash/DashPageHeader.qml:273
163+#: qml/Dash/DashPageHeader.qml:344
180164msgctxt "Button: Start a search in the current dash scope"
181165msgid "Search"
182166msgstr ""
183167
184−#: qml/Dash/DashPageHeader.qml:283
168+#: qml/Dash/DashPageHeader.qml:354
185169msgctxt "Button: Show the current dash scope settings"
186170msgid "Settings"
187171msgstr ""
188172
189−#: qml/Dash/DashPageHeader.qml:290
173+#: qml/Dash/DashPageHeader.qml:361
190174msgid "Remove from Favorites"
191175msgstr "Seçilmişlәrdәn çıxart"
192176
193−#: qml/Dash/DashPageHeader.qml:290
177+#: qml/Dash/DashPageHeader.qml:361
194178msgid "Add to Favorites"
195179msgstr "Seçilmişlәrә әlavә et"
196180
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
198−msgid "See less"
199−msgstr "Daha azını gör"
181+#: qml/Dash/FiltersPopover.qml:60
182+msgid "Refine your results"
183+msgstr ""
184+
185+#: qml/Dash/FiltersPopover.qml:69
186+msgid "Reset"
187+msgstr ""
200188
201−#: qml/Dash/GenericScopeView.qml:587
202−msgid "See all"
203−msgstr "Hamısını gör"
189+#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
190+msgid "Show less"
191+msgstr ""
192+
193+#: qml/Dash/GenericScopeView.qml:570
194+msgid "Show all"
195+msgstr ""
204196
205−#: qml/Dash/GenericScopeView.qml:649
197+#: qml/Dash/GenericScopeView.qml:627
206198msgctxt "Label: Hint for dash search line edit"
207199msgid "Search"
208200msgstr ""
209201
202+#: qml/Dash/PageHeaderExtraPanel.qml:55
203+msgid "Recent Searches"
204+msgstr ""
205+
206+#: qml/Dash/PageHeaderExtraPanel.qml:66
207+msgid "Clear All"
208+msgstr ""
209+
210210#: qml/Dash/Previews/PreviewActionCombo.qml:35
211211msgid "More..."
212212msgstr "Daha çox..."
@@ -228,7 +228,7 @@ msgstr "Qiymәtlәndir"
228228msgid "Add a review"
229229msgstr "Rəy yaz"
230230
231−#: qml/Dash/Previews/PreviewSharing.qml:50
231+#: qml/Dash/Previews/PreviewSharing.qml:66
232232msgid "Preview Share Item"
233233msgstr ""
234234
@@ -256,13 +256,13 @@ msgstr ""
256256msgid "Also installed"
257257msgstr ""
258258
259−#: qml/DisabledScreenNotice.qml:87
259+#: qml/DisabledScreenNotice.qml:104
260260msgid ""
261261"Your device is now connected to an external display. Use this screen as a "
262−"touch pad to interact with the mouse."
262+"touch pad to interact with the pointer."
263263msgstr ""
264264
265−#: qml/Greeter/CoverPage.qml:107
265+#: qml/Greeter/CoverPage.qml:118
266266msgid "Unlock"
267267msgstr ""
268268
@@ -274,11 +274,11 @@ msgstr ""
274274msgid "Tap to unlock"
275275msgstr ""
276276
277−#: qml/Greeter/NarrowView.qml:54 qml/Wizard/Pages/passwd-confirm.qml:53
277+#: qml/Greeter/NarrowView.qml:54
278278msgid "Sorry, incorrect passphrase."
279279msgstr "Bağışlayın, açar söz yanlışdır."
280280
281−#: qml/Greeter/NarrowView.qml:55 qml/Wizard/Pages/passwd-confirm.qml:54
281+#: qml/Greeter/NarrowView.qml:55
282282msgid "Sorry, incorrect passcode."
283283msgstr "Təəssüf ki, açar kod yanlışdır."
284284
@@ -307,7 +307,7 @@ msgstr ""
307307msgid "Enter %1"
308308msgstr ""
309309
310−#: qml/Greeter/NarrowView.qml:117 qml/Wizard/Pages/passwd-set.qml:60
310+#: qml/Greeter/NarrowView.qml:117
311311msgid "Enter passphrase"
312312msgstr ""
313313
@@ -333,7 +333,7 @@ msgstr ""
333333msgid "Sorry, incorrect passcode"
334334msgstr ""
335335
336−#: qml/Notifications/NotificationMenuItemFactory.qml:129
336+#: qml/Notifications/NotificationMenuItemFactory.qml:124
337337msgid "Show password"
338338msgstr "Şifrәni göstәr"
339339
@@ -345,62 +345,62 @@ msgstr "Zəngə qayıtmaq üçün toxunun..."
345345msgid "Conference"
346346msgstr "Konfrans"
347347
348−#: qml/Panel/Indicators/MenuItemFactory.qml:753
348+#: qml/Panel/Indicators/MenuItemFactory.qml:762
349349msgid "Nothing is playing"
350350msgstr ""
351351
352−#: qml/Panel/Indicators/MenuItemFactory.qml:882
352+#: qml/Panel/Indicators/MenuItemFactory.qml:891
353353#, qt-format
354354msgid "%1 hour"
355355msgid_plural "%1 hours"
356356msgstr[0] ""
357357msgstr[1] ""
358358
359−#: qml/Panel/Indicators/MenuItemFactory.qml:886
359+#: qml/Panel/Indicators/MenuItemFactory.qml:895
360360#, qt-format
361361msgid "%1 minute"
362362msgid_plural "%1 minutes"
363363msgstr[0] ""
364364msgstr[1] ""
365365
366−#: qml/Panel/Indicators/MenuItemFactory.qml:891
366+#: qml/Panel/Indicators/MenuItemFactory.qml:900
367367#, qt-format
368368msgid "%1 second"
369369msgid_plural "%1 seconds"
370370msgstr[0] ""
371371msgstr[1] ""
372372
373−#: qml/Panel/Indicators/MenuItemFactory.qml:894
373+#: qml/Panel/Indicators/MenuItemFactory.qml:903
374374msgid "0 seconds"
375375msgstr ""
376376
377377#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
378−#: qml/Panel/Indicators/MenuItemFactory.qml:896
378+#: qml/Panel/Indicators/MenuItemFactory.qml:905
379379#, qt-format
380380msgid "%1 remaining"
381381msgstr ""
382382
383−#: qml/Panel/Indicators/MenuItemFactory.qml:902
383+#: qml/Panel/Indicators/MenuItemFactory.qml:911
384384msgid "In queue…"
385385msgstr "Növbədədir..."
386386
387−#: qml/Panel/Indicators/MenuItemFactory.qml:906
387+#: qml/Panel/Indicators/MenuItemFactory.qml:915
388388msgid "Downloading"
389389msgstr "Endirilir"
390390
391−#: qml/Panel/Indicators/MenuItemFactory.qml:908
391+#: qml/Panel/Indicators/MenuItemFactory.qml:917
392392msgid "Paused, tap to resume"
393393msgstr "Dayandırıldı. Davam etmək üçün toxunun"
394394
395−#: qml/Panel/Indicators/MenuItemFactory.qml:910
395+#: qml/Panel/Indicators/MenuItemFactory.qml:919
396396msgid "Canceled"
397397msgstr "İmtina edildi"
398398
399−#: qml/Panel/Indicators/MenuItemFactory.qml:912
399+#: qml/Panel/Indicators/MenuItemFactory.qml:921
400400msgid "Finished"
401401msgstr "Bitdi"
402402
403−#: qml/Panel/Indicators/MenuItemFactory.qml:914
403+#: qml/Panel/Indicators/MenuItemFactory.qml:923
404404msgid "Failed, tap to retry"
405405msgstr "Alınmadı. Yenidәn cәhd etmək üçün toxunun"
406406
@@ -420,251 +420,323 @@ 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−
431−#: qml/Tutorial/TutorialBottom.qml:28
432−msgid "Open special menus"
433−msgstr ""
434−
435−#: qml/Tutorial/TutorialBottom.qml:29
436−msgid "Swipe up from the bottom edge."
423+#: qml/Stages/SideStage.qml:76
424+msgid "Drag using 3 fingers any application from one window to the other"
437425msgstr ""
438426
439−#: qml/Tutorial/TutorialBottomFinish.qml:24
440−msgid "This action does different things for different apps"
427+#: qml/Tutorial/TutorialBottom.qml:78
428+msgid "Swipe up to add a contact"
441429msgstr ""
442430
443−#: qml/Tutorial/TutorialBottomFinish.qml:25
444−msgid "Tap here to finish."
431+#: qml/Tutorial/TutorialBottom.qml:80
432+msgid "Swipe up for favorite calculations"
445433msgstr ""
446434
447−#: qml/Tutorial/TutorialContent.qml:80 qml/Tutorial/TutorialLeftFinish.qml:25
448−#: qml/Tutorial/TutorialRight.qml:144
449−msgid "Tap here to continue."
435+#: qml/Tutorial/TutorialBottom.qml:82
436+msgid "Swipe up for recent calls"
450437msgstr ""
451438
452−#: qml/Tutorial/TutorialLeft.qml:26
453−msgid "Open the launcher"
439+#: qml/Tutorial/TutorialBottom.qml:84
440+msgid "Swipe up to create a message"
454441msgstr ""
455442
456−#: qml/Tutorial/TutorialLeft.qml:27
457−msgid "Short swipe from the left edge."
443+#: qml/Tutorial/TutorialBottom.qml:85
444+msgid "Swipe up to manage the app"
458445msgstr ""
459446
460−#: qml/Tutorial/TutorialLeftFinish.qml:24
461−msgid "These are the shortcuts to favorite apps"
447+#: qml/Tutorial/TutorialLeftLong.qml:47
448+msgid "Long swipe from the left edge to open the Today scope"
462449msgstr ""
463450
464−#: qml/Tutorial/TutorialPage.qml:178
465−msgid "You almost got it!"
451+#: qml/Tutorial/TutorialLeft.qml:47
452+msgid "Swipe from the left edge to open the launcher"
466453msgstr ""
467454
468−#: qml/Tutorial/TutorialPage.qml:195
469−msgid "Try again."
455+#: qml/Tutorial/TutorialRight.qml:55
456+msgid "Push your mouse against the right edge to view your open apps"
470457msgstr ""
471458
472−#: qml/Tutorial/TutorialRight.qml:31
473−msgid "To view open apps"
459+#: qml/Tutorial/TutorialRight.qml:56
460+msgid "Short or long swipe from the right edge to view your open apps"
474461msgstr ""
475462
476−#: qml/Tutorial/TutorialRight.qml:32
477−msgid "Long swipe from the right edge."
463+#: qml/Tutorial/TutorialTop.qml:53
464+msgid "Swipe from the top right edge to open the notification bar"
478465msgstr ""
479466
480−#: qml/Tutorial/TutorialRight.qml:122
481−msgid "View all your running tasks."
467+#: qml/Tutorial/TutorialTop.qml:54
468+msgid "Swipe from the top edge to open the notification bar"
482469msgstr ""
483470
484−#: qml/Wizard/Page.qml:89
471+#: qml/Wizard/Page.qml:54
485472msgctxt "Button: Go back one page in the Wizard"
486473msgid "Back"
487474msgstr ""
488475
489476#: qml/Wizard/Pages/10-welcome.qml:27
490−msgid "Hi!"
477+msgid "Language"
491478msgstr ""
492479
493−#: qml/Wizard/Pages/10-welcome.qml:44
494−msgid "Welcome to your Ubuntu device."
480+#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
481+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
482+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
483+#: qml/Wizard/Pages/75-report-check.qml:84
484+#: qml/Wizard/Pages/passcode-desktop.qml:124
485+#: qml/Wizard/Pages/password-set.qml:141
486+msgid "Next"
495487msgstr ""
496488
497−#: qml/Wizard/Pages/10-welcome.qml:52
498−msgid "Let’s get started."
489+#: qml/Wizard/Pages/30-wifi.qml:29
490+msgid "Connect to Wi‑Fi"
499491msgstr ""
500492
501−#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:133
502−#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
503−#: qml/Wizard/Pages/60-reporting.qml:60 qml/Wizard/Pages/passwd-confirm.qml:82
504−#: qml/Wizard/Pages/passwd-set.qml:90
505−msgid "Continue"
493+#: qml/Wizard/Pages/30-wifi.qml:130
494+msgid "Connected"
506495msgstr ""
507496
508−#: qml/Wizard/Pages/20-sim.qml:25
509−msgid "Add a SIM card and restart your device"
497+#: qml/Wizard/Pages/30-wifi.qml:163
498+msgid "Available Wi-Fi networks"
510499msgstr ""
511500
512−#: qml/Wizard/Pages/20-sim.qml:59
513−msgid "Without it, you won’t be able to make calls or use text messaging."
501+#: qml/Wizard/Pages/30-wifi.qml:164
502+msgid "No available Wi-Fi networks"
514503msgstr ""
515504
516−#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
505+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
506+#: qml/Wizard/Pages/sim.qml:101
517507msgid "Skip"
518508msgstr ""
519509
520−#: qml/Wizard/Pages/30-passwd-type.qml:39
521−msgid "Lock security"
510+#: qml/Wizard/Pages/40-location.qml:27
511+msgid "Location Services"
522512msgstr ""
523513
524−#: qml/Wizard/Pages/30-passwd-type.qml:79
525−msgid "Please select how you’d like to unlock your device."
514+#: qml/Wizard/Pages/40-location.qml:83
515+msgid ""
516+"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
517+"(recommended)"
526518msgstr ""
527519
528−#: qml/Wizard/Pages/30-passwd-type.qml:102
529−msgctxt "Label: Type of security method"
530−msgid "Swipe"
520+#: qml/Wizard/Pages/40-location.qml:105
521+#, qt-format
522+msgid "By selecting this option you agree to the Nokia HERE %1."
523+msgstr ""
524+
525+#: qml/Wizard/Pages/40-location.qml:106
526+msgctxt "part of: Nokia HERE terms and conditions"
527+msgid "terms and conditions"
528+msgstr ""
529+
530+#: qml/Wizard/Pages/40-location.qml:160
531+msgid "GPS only"
532+msgstr ""
533+
534+#: qml/Wizard/Pages/40-location.qml:214
535+msgid "Don't use my location"
536+msgstr ""
537+
538+#: qml/Wizard/Pages/40-location.qml:260
539+msgid "You can change it later in System Settings."
540+msgstr ""
541+
542+#: qml/Wizard/Pages/50-timezone.qml:29
543+msgid "Time Zone"
544+msgstr ""
545+
546+#: qml/Wizard/Pages/50-timezone.qml:178
547+msgid "Enter your city"
548+msgstr ""
549+
550+#: qml/Wizard/Pages/60-account.qml:24
551+msgid "Personalize Your Device"
531552msgstr ""
532553
533−#: qml/Wizard/Pages/30-passwd-type.qml:103
534−msgctxt "Label: Description of security method"
535−msgid "No security"
554+#: qml/Wizard/Pages/60-account.qml:48
555+msgid "Preferred Name"
536556msgstr ""
537557
538−#: qml/Wizard/Pages/30-passwd-type.qml:105
558+#: qml/Wizard/Pages/70-passwd-type.qml:39
559+msgid "Lock Screen"
560+msgstr ""
561+
562+#: qml/Wizard/Pages/70-passwd-type.qml:101
539563msgctxt "Label: Type of security method"
540−msgid "Passcode"
564+msgid "Create new password"
541565msgstr ""
542566
543−#: qml/Wizard/Pages/30-passwd-type.qml:106
544−msgctxt "Label: Description of security method"
545−msgid "4 digits only"
567+#: qml/Wizard/Pages/70-passwd-type.qml:103
568+msgctxt "Label: Type of security method"
569+msgid "Create passcode (numbers only)"
546570msgstr ""
547571
548−#: qml/Wizard/Pages/30-passwd-type.qml:108
572+#: qml/Wizard/Pages/70-passwd-type.qml:105
549573msgctxt "Label: Type of security method"
550−msgid "Passphrase"
574+msgid "No lock code"
551575msgstr ""
552576
553−#: qml/Wizard/Pages/30-passwd-type.qml:109
554−msgctxt "Label: Description of security method"
555−msgid "Numbers and letters"
577+#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
578+msgid "Privacy Policy"
556579msgstr ""
557580
558−#: qml/Wizard/Pages/40-wifi.qml:29
559−msgid "Connect to Wi‑Fi"
581+#: qml/Wizard/Pages/75-report-check.qml:26
582+msgid "Help Us Improve"
583+msgstr ""
584+
585+#: qml/Wizard/Pages/75-report-check.qml:59
586+msgid "Improve system performance by sending us crashes and error reports."
560587msgstr ""
561588
562−#: qml/Wizard/Pages/40-wifi.qml:168
563−msgid "Available networks…"
589+#: qml/Wizard/Pages/75-report-check.qml:60
590+msgid "Privacy policy"
564591msgstr ""
565592
566−#: qml/Wizard/Pages/40-wifi.qml:169
567−msgid "No available networks."
593+#: qml/Wizard/Pages/80-finished.qml:89
594+msgid "Welcome to Ubuntu"
568595msgstr ""
569596
570−#: qml/Wizard/Pages/50-location.qml:27
571−msgid "Location"
597+#: qml/Wizard/Pages/80-finished.qml:104
598+msgid "You are ready to use your device now"
572599msgstr ""
573600
574−#: qml/Wizard/Pages/50-location.qml:62
575−msgid "Let the phone detect your location:"
601+#: qml/Wizard/Pages/80-finished.qml:124
602+msgid "Get Started"
576603msgstr ""
577604
578−#: qml/Wizard/Pages/50-location.qml:69
579−msgid "Using GPS only (less accurate)"
605+#: qml/Wizard/Pages/here-terms.qml:25
606+msgid "Terms & Conditions"
580607msgstr ""
581608
582−#: qml/Wizard/Pages/50-location.qml:86
583−msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
609+#: qml/Wizard/Pages/here-terms.qml:69
610+msgid "Your device uses positioning technologies provided by HERE."
584611msgstr ""
585612
586−#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
587−#: qml/Wizard/Pages/50-location.qml:103
613+#: qml/Wizard/Pages/here-terms.qml:81
588614msgid ""
589−"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
590−"conditions</a>."
615+"To provide you with positioning services and to improve their quality, HERE "
616+"collects information about nearby cell towers and Wi-Fi hotspots around your "
617+"current location whenever your position is being found."
591618msgstr ""
592619
593−#: qml/Wizard/Pages/50-location.qml:112
594−msgid "Not at all"
620+#: qml/Wizard/Pages/here-terms.qml:93
621+msgid ""
622+"The information collected is used to analyze the service and to improve the "
623+"use of service, but not to identify you personally."
595624msgstr ""
596625
597−#: qml/Wizard/Pages/50-location.qml:124
598−msgid "You can change your mind later in <b>System Settings</b>."
626+#: qml/Wizard/Pages/here-terms.qml:106
627+#, qt-format
628+msgid "By continuing, you agree to the HERE platform %1 and %2."
599629msgstr ""
600630
601−#: qml/Wizard/Pages/60-reporting.qml:26
602−msgid "Improving your experience"
631+#: qml/Wizard/Pages/here-terms.qml:107
632+msgid "Service Terms"
603633msgstr ""
604634
605−#: qml/Wizard/Pages/60-reporting.qml:46
606−msgid ""
607−"Your phone is set up to automatically report errors to Canonical and its "
608−"partners, the makers of the operating system."
635+#: qml/Wizard/Pages/passcode-confirm.qml:43
636+#: qml/Wizard/Pages/passcode-desktop.qml:80
637+msgid "Confirm passcode"
609638msgstr ""
610639
611−#: qml/Wizard/Pages/60-reporting.qml:53
612−msgid ""
613−"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
614−"Privacy</b>"
640+#: qml/Wizard/Pages/passcode-confirm.qml:45
641+msgid "Incorrect passcode."
615642msgstr ""
616643
617−#: qml/Wizard/Pages/80-finished.qml:24
618−msgid "All done"
644+#: qml/Wizard/Pages/passcode-confirm.qml:45
645+msgctxt "Enter the passcode again"
646+msgid "Please re-enter."
619647msgstr ""
620648
621−#: qml/Wizard/Pages/80-finished.qml:39
622−msgid "Nice work!"
649+#: qml/Wizard/Pages/passcode-desktop.qml:30
650+msgid "Lock Screen Passcode"
623651msgstr ""
624652
625−#: qml/Wizard/Pages/80-finished.qml:46
626−msgid "Your device is now ready to use."
653+#: qml/Wizard/Pages/passcode-desktop.qml:56
654+msgid "Enter 4 numbers to setup your passcode"
627655msgstr ""
628656
629−#: qml/Wizard/Pages/80-finished.qml:53
630−msgid "Finish"
657+#: qml/Wizard/Pages/passcode-desktop.qml:65
658+#: qml/Wizard/Pages/passcode-set.qml:54
659+msgid "Choose passcode"
631660msgstr ""
632661
633−#: qml/Wizard/Pages/here-terms.qml:27
634−msgid "Terms & Conditions"
662+#: qml/Wizard/Pages/passcode-desktop.qml:105
663+msgid "Passcode too short"
635664msgstr ""
636665
637−#: qml/Wizard/Pages/passwd-confirm.qml:49
638−msgid "Confirm passphrase"
666+#: qml/Wizard/Pages/passcode-desktop.qml:107
667+msgid "Passcodes match"
639668msgstr ""
640669
641−#: qml/Wizard/Pages/passwd-confirm.qml:50
642−msgid "Confirm passcode"
670+#: qml/Wizard/Pages/passcode-desktop.qml:109
671+msgid "Passcodes do not match"
643672msgstr ""
644673
645−#: qml/Wizard/Pages/passwd-confirm.qml:53
646−#: qml/Wizard/Pages/passwd-confirm.qml:54
647−msgid "Please try again."
674+#: qml/Wizard/Pages/passcode-set.qml:62
675+msgid "Passcode must be 4 characters long"
648676msgstr ""
649677
650−#: qml/Wizard/Pages/passwd-set.qml:61
651−msgid "Choose your passcode"
678+#: qml/Wizard/Pages/password-set.qml:30
679+msgid "Lock Screen Password"
652680msgstr ""
653681
654−#: qml/Wizard/Pages/passwd-set.qml:68
655−msgid "Passphrase must be 4 characters long"
682+#: qml/Wizard/Pages/password-set.qml:61
683+msgid "Enter at least 8 characters"
656684msgstr ""
657685
658−#. Translators: This is the arrow for "Back" buttons
659−#: qml/Wizard/StackButton.qml:39
660−#, qt-format
661−msgid "〈 %1"
686+#: qml/Wizard/Pages/password-set.qml:73
687+msgid "Choose password"
662688msgstr ""
663689
664−#. Translators: This is the arrow for "Forward" buttons
665−#: qml/Wizard/StackButton.qml:42
666−#, qt-format
667−msgid "%1 〉"
690+#: qml/Wizard/Pages/password-set.qml:103
691+msgid "Confirm password"
692+msgstr ""
693+
694+#: qml/Wizard/Pages/sim.qml:27
695+msgid "No SIM card installed"
696+msgstr ""
697+
698+#: qml/Wizard/Pages/sim.qml:54
699+msgid "SIM card added"
700+msgstr ""
701+
702+#: qml/Wizard/Pages/sim.qml:55
703+msgid "You must restart the device to access the mobile network."
704+msgstr ""
705+
706+#: qml/Wizard/Pages/sim.qml:59
707+msgid "Restart"
708+msgstr ""
709+
710+#: qml/Wizard/Pages/sim.qml:78
711+msgid "You won’t be able to make calls or use text messaging without a SIM."
712+msgstr ""
713+
714+#: qml/Wizard/Pages/sim.qml:90
715+msgid "To proceed with no SIM tap Skip."
716+msgstr ""
717+
718+#: qml/Wizard/PasswordMeter.qml:87
719+msgid "Passwords match"
720+msgstr ""
721+
722+#: qml/Wizard/PasswordMeter.qml:89
723+msgid "Passwords do not match"
724+msgstr ""
725+
726+#: qml/Wizard/PasswordMeter.qml:93
727+msgid "Strong password"
728+msgstr ""
729+
730+#: qml/Wizard/PasswordMeter.qml:95
731+msgid "Fair password"
732+msgstr ""
733+
734+#: qml/Wizard/PasswordMeter.qml:97
735+msgid "Weak password"
736+msgstr ""
737+
738+#: qml/Wizard/PasswordMeter.qml:99
739+msgid "Very weak password"
668740msgstr ""
669741
670742#~ msgid "Confirm"
@@ -704,6 +776,9 @@ msgstr ""
704776#~ msgid "Power off"
705777#~ msgstr "Söndür"
706778
779+#~ msgid "See all"
780+#~ msgstr "Hamısını gör"
781+
707782#~ msgid "All"
708783#~ msgstr "Hamısı"
709784
@@ -713,9 +788,18 @@ msgstr ""
713788#~ msgid "Done"
714789#~ msgstr "Başa çatdı"
715790
791+#~ msgid "Unlock SIM"
792+#~ msgstr "SIM kilidini aç"
793+
794+#~ msgid "Roaming"
795+#~ msgstr "Rominq"
796+
716797#~ msgid "Log out"
717798#~ msgstr "Çıxış"
718799
800+#~ msgid "Are you sure you want to shut down?"
801+#~ msgstr "Sistemi söndürmәk istәdiyinizә әminsiniz?"
802+
719803#~ msgid "Shut down"
720804#~ msgstr "Sistemi Söndür"
721805
@@ -744,5 +828,8 @@ msgstr ""
744828#~ msgid "Settings"
745829#~ msgstr "Tənzimləmələr"
746830
831+#~ msgid "See less"
832+#~ msgstr "Daha azını gör"
833+
747834#~ msgid "Type or say a command"
748835#~ msgstr "Bir әmr söyləyin və ya yazın"
po/be.po+506−258
@@ -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-16 03:29+0000\n"
10+"POT-Creation-Date: 2016-04-27 15:01+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,23 +16,23 @@ 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-23 06:03+0000\n"
20−"X-Generator: Launchpad (build 17925)\n"
19+"X-Launchpad-Export-Date: 2016-04-30 05:36+0000\n"
20+"X-Generator: Launchpad (build 17995)\n"
2121
2222#: plugins/IntegratedLightDM/Greeter.cpp:112
2323msgid "Password: "
2424msgstr "Пароль: "
2525
26−#: plugins/Unity/Launcher/launcheritem.cpp:47
27−#: plugins/Unity/Launcher/launcheritem.cpp:106
26+#: plugins/Unity/Launcher/launcheritem.cpp:48
27+#: plugins/Unity/Launcher/launcheritem.cpp:107
2828msgid "Pin shortcut"
2929msgstr "Замацаваць кнопку"
3030
31−#: plugins/Unity/Launcher/launcheritem.cpp:52
31+#: plugins/Unity/Launcher/launcheritem.cpp:53
3232msgid "Quit"
3333msgstr "Выйсці"
3434
35−#: plugins/Unity/Launcher/launcheritem.cpp:106
35+#: plugins/Unity/Launcher/launcheritem.cpp:107
3636msgid "Unpin shortcut"
3737msgstr "Адмацаваць кнопку"
3838
@@ -78,53 +78,35 @@ msgctxt "Button: Log out from the system"
7878msgid "Log Out"
7979msgstr "Выйсці"
8080
81−#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:194
82−#: qml/Components/Dialogs.qml:253
81+#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
82+#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
83+#: qml/Wizard/Pages/passcode-set.qml:32
8384msgid "Cancel"
8485msgstr "Скасаваць"
8586
8687#: qml/Components/Dialogs.qml:173
87−msgctxt "Title: Reboot/Shut down dialog"
88−msgid "Shut down"
89−msgstr "Выключыць"
90−
91−#: qml/Components/Dialogs.qml:174
92−msgid "Are you sure you want to shut down?"
93−msgstr "Вы ўпэўненыя, што жадаеце выключыць прыладу?"
94−
95−#: qml/Components/Dialogs.qml:176
96−msgctxt "Button: Reboot the system"
97−msgid "Reboot"
98−msgstr "Перазагрузіць"
99−
100−#: qml/Components/Dialogs.qml:185
101−msgctxt "Button: Shut down the system"
102−msgid "Shut down"
103−msgstr "Выключыць"
104−
105−#: qml/Components/Dialogs.qml:207
10688msgctxt "Title: Reboot dialog"
10789msgid "Reboot"
10890msgstr "Перазагрузіць"
10991
110−#: qml/Components/Dialogs.qml:208
92+#: qml/Components/Dialogs.qml:174
11193msgid "Are you sure you want to reboot?"
11294msgstr "Вы ўпэўнены, што жадаеце перазагрузіць?"
11395
114−#: qml/Components/Dialogs.qml:210
96+#: qml/Components/Dialogs.qml:176
11597msgid "No"
11698msgstr "Не"
11799
118−#: qml/Components/Dialogs.qml:217
100+#: qml/Components/Dialogs.qml:182
119101msgid "Yes"
120102msgstr "Так"
121103
122−#: qml/Components/Dialogs.qml:232
104+#: qml/Components/Dialogs.qml:197
123105msgctxt "Title: Power off/Restart dialog"
124106msgid "Power"
125107msgstr "Сілкаванне"
126108
127−#: qml/Components/Dialogs.qml:233
109+#: qml/Components/Dialogs.qml:198
128110msgid ""
129111"Are you sure you would like\n"
130112"to power off?"
@@ -132,25 +114,25 @@ msgstr ""
132114"Вы ўпэўнены, што хочаце\n"
133115"выключыць камп'ютэр?"
134116
135−#: qml/Components/Dialogs.qml:235
117+#: qml/Components/Dialogs.qml:200
136118msgctxt "Button: Power off the system"
137119msgid "Power off"
138120msgstr "Выключыць"
139121
140−#: qml/Components/Dialogs.qml:244
122+#: qml/Components/Dialogs.qml:209
141123msgctxt "Button: Restart the system"
142124msgid "Restart"
143125msgstr "Перазапуск"
144126
145−#: qml/Components/Lockscreen.qml:245
127+#: qml/Components/Lockscreen.qml:231
146128msgid "Return to Call"
147129msgstr "Вярнуцца да выкліку"
148130
149−#: qml/Components/Lockscreen.qml:245
131+#: qml/Components/Lockscreen.qml:231
150132msgid "Emergency Call"
151133msgstr "Терміновы выклік"
152134
153−#: qml/Components/Lockscreen.qml:277
135+#: qml/Components/Lockscreen.qml:263
154136msgid "OK"
155137msgstr "Добра"
156138
@@ -159,8 +141,10 @@ msgid "Apps may have unsaved data:"
159141msgstr "Прылады могуць мець незахованыя дадзеныя:"
160142
161143#: qml/Components/ModeSwitchWarningDialog.qml:57
144+msgctxt ""
145+"Re-dock means connect the device again to an external screen/mouse/keyboard"
162146msgid "Re-dock, save your work and close these apps to continue."
163−msgstr "Захавайце сваю працу і зачыніце прылады, каб працягнуць."
147+msgstr ""
164148
165149#: qml/Components/ModeSwitchWarningDialog.qml:63
166150msgid "Or force close now (unsaved data will be lost)."
@@ -178,42 +162,58 @@ msgstr "Перападлучыцца зараз!"
178162msgid "Close all"
179163msgstr "Зачыніць усё"
180164
181−#: qml/Dash/DashPageHeader.qml:266
165+#: qml/Dash/DashPageHeader.qml:337
182166msgctxt "Button: Open the Ubuntu Store"
183167msgid "Store"
184168msgstr "Крама"
185169
186−#: qml/Dash/DashPageHeader.qml:273
170+#: qml/Dash/DashPageHeader.qml:344
187171msgctxt "Button: Start a search in the current dash scope"
188172msgid "Search"
189173msgstr "Пошук"
190174
191−#: qml/Dash/DashPageHeader.qml:283
175+#: qml/Dash/DashPageHeader.qml:354
192176msgctxt "Button: Show the current dash scope settings"
193177msgid "Settings"
194178msgstr "Налады"
195179
196−#: qml/Dash/DashPageHeader.qml:290
180+#: qml/Dash/DashPageHeader.qml:361
197181msgid "Remove from Favorites"
198182msgstr "Выдаліць з абранага"
199183
200−#: qml/Dash/DashPageHeader.qml:290
184+#: qml/Dash/DashPageHeader.qml:361
201185msgid "Add to Favorites"
202186msgstr "Дадаць да абранага"
203187
204−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
205−msgid "See less"
206−msgstr "Карацей"
188+#: qml/Dash/FiltersPopover.qml:60
189+msgid "Refine your results"
190+msgstr ""
191+
192+#: qml/Dash/FiltersPopover.qml:69
193+msgid "Reset"
194+msgstr ""
207195
208−#: qml/Dash/GenericScopeView.qml:587
209−msgid "See all"
210−msgstr "Больш падрабязна"
196+#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
197+msgid "Show less"
198+msgstr ""
211199
212−#: qml/Dash/GenericScopeView.qml:649
200+#: qml/Dash/GenericScopeView.qml:570
201+msgid "Show all"
202+msgstr ""
203+
204+#: qml/Dash/GenericScopeView.qml:627
213205msgctxt "Label: Hint for dash search line edit"
214206msgid "Search"
215207msgstr "Пошук"
216208
209+#: qml/Dash/PageHeaderExtraPanel.qml:55
210+msgid "Recent Searches"
211+msgstr ""
212+
213+#: qml/Dash/PageHeaderExtraPanel.qml:66
214+msgid "Clear All"
215+msgstr ""
216+
217217#: qml/Dash/Previews/PreviewActionCombo.qml:35
218218msgid "More..."
219219msgstr "Болей…"
@@ -235,7 +235,7 @@ msgstr "Ацаніць"
235235msgid "Add a review"
236236msgstr "Дадаць рэцэнзію"
237237
238−#: qml/Dash/Previews/PreviewSharing.qml:50
238+#: qml/Dash/Previews/PreviewSharing.qml:66
239239msgid "Preview Share Item"
240240msgstr "Праглядзець элемент"
241241
@@ -263,13 +263,13 @@ msgstr "Хатняя папка"
263263msgid "Also installed"
264264msgstr "Таксама ўсталявана"
265265
266−#: qml/DisabledScreenNotice.qml:87
266+#: qml/DisabledScreenNotice.qml:104
267267msgid ""
268268"Your device is now connected to an external display. Use this screen as a "
269−"touch pad to interact with the mouse."
269+"touch pad to interact with the pointer."
270270msgstr ""
271271
272−#: qml/Greeter/CoverPage.qml:107
272+#: qml/Greeter/CoverPage.qml:118
273273msgid "Unlock"
274274msgstr "Разблакаваць"
275275
@@ -281,11 +281,11 @@ msgstr "Паспрабаваць зноў"
281281msgid "Tap to unlock"
282282msgstr "Націсніце, каб разблакаваць"
283283
284−#: qml/Greeter/NarrowView.qml:54 qml/Wizard/Pages/passwd-confirm.qml:53
284+#: qml/Greeter/NarrowView.qml:54
285285msgid "Sorry, incorrect passphrase."
286286msgstr "Даруйце, няслушны пароль."
287287
288−#: qml/Greeter/NarrowView.qml:55 qml/Wizard/Pages/passwd-confirm.qml:54
288+#: qml/Greeter/NarrowView.qml:55
289289msgid "Sorry, incorrect passcode."
290290msgstr "Даруйце, няслушны код."
291291
@@ -314,7 +314,7 @@ msgstr ""
314314msgid "Enter %1"
315315msgstr "Увядзіце %1"
316316
317−#: qml/Greeter/NarrowView.qml:117 qml/Wizard/Pages/passwd-set.qml:60
317+#: qml/Greeter/NarrowView.qml:117
318318msgid "Enter passphrase"
319319msgstr "Увядзіце пароль"
320320
@@ -340,7 +340,7 @@ msgstr "Калі ласка, паўтарыце ўвод"
340340msgid "Sorry, incorrect passcode"
341341msgstr "Даруйце, некарэктны код"
342342
343−#: qml/Notifications/NotificationMenuItemFactory.qml:129
343+#: qml/Notifications/NotificationMenuItemFactory.qml:124
344344msgid "Show password"
345345msgstr "Паказаць пароль"
346346
@@ -352,11 +352,11 @@ msgstr "Націсніце, каб вярнуцца да выкліку..."
352352msgid "Conference"
353353msgstr "Канферэнцыя"
354354
355−#: qml/Panel/Indicators/MenuItemFactory.qml:753
355+#: qml/Panel/Indicators/MenuItemFactory.qml:762
356356msgid "Nothing is playing"
357357msgstr "Нічога не грае"
358358
359−#: qml/Panel/Indicators/MenuItemFactory.qml:882
359+#: qml/Panel/Indicators/MenuItemFactory.qml:891
360360#, qt-format
361361msgid "%1 hour"
362362msgid_plural "%1 hours"
@@ -364,7 +364,7 @@ msgstr[0] "%1 гадзіна"
364364msgstr[1] "%1 гадзіны"
365365msgstr[2] "%1 гадзінаў"
366366
367−#: qml/Panel/Indicators/MenuItemFactory.qml:886
367+#: qml/Panel/Indicators/MenuItemFactory.qml:895
368368#, qt-format
369369msgid "%1 minute"
370370msgid_plural "%1 minutes"
@@ -372,7 +372,7 @@ msgstr[0] "%1 хвіліна"
372372msgstr[1] "%1 хвіліны"
373373msgstr[2] "%1 хвілінаў"
374374
375−#: qml/Panel/Indicators/MenuItemFactory.qml:891
375+#: qml/Panel/Indicators/MenuItemFactory.qml:900
376376#, qt-format
377377msgid "%1 second"
378378msgid_plural "%1 seconds"
@@ -380,37 +380,37 @@ msgstr[0] "%1 секунда"
380380msgstr[1] "%1 секунды"
381381msgstr[2] "%1 секундаў"
382382
383−#: qml/Panel/Indicators/MenuItemFactory.qml:894
383+#: qml/Panel/Indicators/MenuItemFactory.qml:903
384384msgid "0 seconds"
385385msgstr "0 секунд"
386386
387387#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
388−#: qml/Panel/Indicators/MenuItemFactory.qml:896
388+#: qml/Panel/Indicators/MenuItemFactory.qml:905
389389#, qt-format
390390msgid "%1 remaining"
391391msgstr "%1 засталося"
392392
393−#: qml/Panel/Indicators/MenuItemFactory.qml:902
393+#: qml/Panel/Indicators/MenuItemFactory.qml:911
394394msgid "In queue…"
395395msgstr "У чарзе..."
396396
397−#: qml/Panel/Indicators/MenuItemFactory.qml:906
397+#: qml/Panel/Indicators/MenuItemFactory.qml:915
398398msgid "Downloading"
399399msgstr "Запампоўка"
400400
401−#: qml/Panel/Indicators/MenuItemFactory.qml:908
401+#: qml/Panel/Indicators/MenuItemFactory.qml:917
402402msgid "Paused, tap to resume"
403403msgstr "Прыпынена, націсніце для працягу"
404404
405−#: qml/Panel/Indicators/MenuItemFactory.qml:910
405+#: qml/Panel/Indicators/MenuItemFactory.qml:919
406406msgid "Canceled"
407407msgstr "Скасавана"
408408
409−#: qml/Panel/Indicators/MenuItemFactory.qml:912
409+#: qml/Panel/Indicators/MenuItemFactory.qml:921
410410msgid "Finished"
411411msgstr "Скончана"
412412
413−#: qml/Panel/Indicators/MenuItemFactory.qml:914
413+#: qml/Panel/Indicators/MenuItemFactory.qml:923
414414msgid "Failed, tap to retry"
415415msgstr "Не атрымалася, націсніце, каб паўтарыць спробу"
416416
@@ -430,259 +430,324 @@ 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−
441−#: qml/Tutorial/TutorialBottom.qml:28
442−msgid "Open special menus"
443−msgstr "Адкрыць спецыяльныя меню"
444−
445−#: qml/Tutorial/TutorialBottom.qml:29
446−msgid "Swipe up from the bottom edge."
447−msgstr "Правесці уверх ад ніжняга краю."
433+#: qml/Stages/SideStage.qml:76
434+msgid "Drag using 3 fingers any application from one window to the other"
435+msgstr ""
448436
449−#: qml/Tutorial/TutorialBottomFinish.qml:24
450−msgid "This action does different things for different apps"
451−msgstr "Гэта дзеянне мае розныя наступствы для розных праграм"
437+#: qml/Tutorial/TutorialBottom.qml:78
438+msgid "Swipe up to add a contact"
439+msgstr ""
452440
453−#: qml/Tutorial/TutorialBottomFinish.qml:25
454−msgid "Tap here to finish."
455−msgstr "Націсніце тут, каб завяршыць."
441+#: qml/Tutorial/TutorialBottom.qml:80
442+msgid "Swipe up for favorite calculations"
443+msgstr ""
456444
457−#: qml/Tutorial/TutorialContent.qml:80 qml/Tutorial/TutorialLeftFinish.qml:25
458−#: qml/Tutorial/TutorialRight.qml:144
459−msgid "Tap here to continue."
460−msgstr "Націсніце тут, каб працягнуць."
445+#: qml/Tutorial/TutorialBottom.qml:82
446+msgid "Swipe up for recent calls"
447+msgstr ""
461448
462−#: qml/Tutorial/TutorialLeft.qml:26
463−msgid "Open the launcher"
464−msgstr "Адкрыць панэль запуску"
449+#: qml/Tutorial/TutorialBottom.qml:84
450+msgid "Swipe up to create a message"
451+msgstr ""
465452
466−#: qml/Tutorial/TutorialLeft.qml:27
467−msgid "Short swipe from the left edge."
468−msgstr "Кароткі рух з левага краю."
453+#: qml/Tutorial/TutorialBottom.qml:85
454+msgid "Swipe up to manage the app"
455+msgstr ""
469456
470−#: qml/Tutorial/TutorialLeftFinish.qml:24
471−msgid "These are the shortcuts to favorite apps"
472−msgstr "Гэта скарачэнні для абраных праграм"
457+#: qml/Tutorial/TutorialLeftLong.qml:47
458+msgid "Long swipe from the left edge to open the Today scope"
459+msgstr ""
473460
474−#: qml/Tutorial/TutorialPage.qml:178
475−msgid "You almost got it!"
476−msgstr "Амаль усё!"
461+#: qml/Tutorial/TutorialLeft.qml:47
462+msgid "Swipe from the left edge to open the launcher"
463+msgstr ""
477464
478−#: qml/Tutorial/TutorialPage.qml:195
479−msgid "Try again."
480−msgstr "Паспрабуйце яшчэ."
465+#: qml/Tutorial/TutorialRight.qml:55
466+msgid "Push your mouse against the right edge to view your open apps"
467+msgstr ""
481468
482−#: qml/Tutorial/TutorialRight.qml:31
483−msgid "To view open apps"
484−msgstr "Паглядзець адкрытыя праграмы"
469+#: qml/Tutorial/TutorialRight.qml:56
470+msgid "Short or long swipe from the right edge to view your open apps"
471+msgstr ""
485472
486−#: qml/Tutorial/TutorialRight.qml:32
487−msgid "Long swipe from the right edge."
488−msgstr "Доўгі рух ад правага краю."
473+#: qml/Tutorial/TutorialTop.qml:53
474+msgid "Swipe from the top right edge to open the notification bar"
475+msgstr ""
489476
490−#: qml/Tutorial/TutorialRight.qml:122
491−msgid "View all your running tasks."
492−msgstr "Паказаць усе запушчаныя задачы."
477+#: qml/Tutorial/TutorialTop.qml:54
478+msgid "Swipe from the top edge to open the notification bar"
479+msgstr ""
493480
494−#: qml/Wizard/Page.qml:89
481+#: qml/Wizard/Page.qml:54
495482msgctxt "Button: Go back one page in the Wizard"
496483msgid "Back"
497484msgstr "Вярнуцца"
498485
499486#: qml/Wizard/Pages/10-welcome.qml:27
500−msgid "Hi!"
501−msgstr "Вітай!"
487+msgid "Language"
488+msgstr ""
502489
503−#: qml/Wizard/Pages/10-welcome.qml:44
504−msgid "Welcome to your Ubuntu device."
490+#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
491+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
492+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
493+#: qml/Wizard/Pages/75-report-check.qml:84
494+#: qml/Wizard/Pages/passcode-desktop.qml:124
495+#: qml/Wizard/Pages/password-set.qml:141
496+msgid "Next"
505497msgstr ""
506498
507−#: qml/Wizard/Pages/10-welcome.qml:52
508−msgid "Let’s get started."
509−msgstr "Пачнем."
499+#: qml/Wizard/Pages/30-wifi.qml:29
500+msgid "Connect to Wi‑Fi"
501+msgstr "Злучыцца з Wi-Fi"
510502
511−#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:133
512−#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
513−#: qml/Wizard/Pages/60-reporting.qml:60 qml/Wizard/Pages/passwd-confirm.qml:82
514−#: qml/Wizard/Pages/passwd-set.qml:90
515−msgid "Continue"
516−msgstr "Працягнуць"
503+#: qml/Wizard/Pages/30-wifi.qml:130
504+msgid "Connected"
505+msgstr ""
517506
518−#: qml/Wizard/Pages/20-sim.qml:25
519−msgid "Add a SIM card and restart your device"
520−msgstr "Дадайце SIM-карту і перазагрузіце Вашую прыладу"
507+#: qml/Wizard/Pages/30-wifi.qml:163
508+msgid "Available Wi-Fi networks"
509+msgstr ""
521510
522−#: qml/Wizard/Pages/20-sim.qml:59
523−msgid "Without it, you won’t be able to make calls or use text messaging."
524−msgstr "Без яе Вы не зможаце тэлефанаваць ці адпраўляць паведамленні."
511+#: qml/Wizard/Pages/30-wifi.qml:164
512+msgid "No available Wi-Fi networks"
513+msgstr ""
525514
526−#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
515+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
516+#: qml/Wizard/Pages/sim.qml:101
527517msgid "Skip"
528518msgstr "Прапусціць"
529519
530−#: qml/Wizard/Pages/30-passwd-type.qml:39
531−msgid "Lock security"
532−msgstr "Блакіроўка"
520+#: qml/Wizard/Pages/40-location.qml:27
521+msgid "Location Services"
522+msgstr ""
533523
534−#: qml/Wizard/Pages/30-passwd-type.qml:79
535−msgid "Please select how you’d like to unlock your device."
524+#: qml/Wizard/Pages/40-location.qml:83
525+msgid ""
526+"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
527+"(recommended)"
536528msgstr ""
537529
538−#: qml/Wizard/Pages/30-passwd-type.qml:102
539−msgctxt "Label: Type of security method"
540−msgid "Swipe"
541−msgstr "Рух"
530+#: qml/Wizard/Pages/40-location.qml:105
531+#, qt-format
532+msgid "By selecting this option you agree to the Nokia HERE %1."
533+msgstr ""
542534
543−#: qml/Wizard/Pages/30-passwd-type.qml:103
544−msgctxt "Label: Description of security method"
545−msgid "No security"
546−msgstr "Без бяспекі"
535+#: qml/Wizard/Pages/40-location.qml:106
536+msgctxt "part of: Nokia HERE terms and conditions"
537+msgid "terms and conditions"
538+msgstr ""
539+
540+#: qml/Wizard/Pages/40-location.qml:160
541+msgid "GPS only"
542+msgstr ""
543+
544+#: qml/Wizard/Pages/40-location.qml:214
545+msgid "Don't use my location"
546+msgstr ""
547+
548+#: qml/Wizard/Pages/40-location.qml:260
549+msgid "You can change it later in System Settings."
550+msgstr ""
551+
552+#: qml/Wizard/Pages/50-timezone.qml:29
553+msgid "Time Zone"
554+msgstr ""
555+
556+#: qml/Wizard/Pages/50-timezone.qml:178
557+msgid "Enter your city"
558+msgstr ""
559+
560+#: qml/Wizard/Pages/60-account.qml:24
561+msgid "Personalize Your Device"
562+msgstr ""
547563
548−#: qml/Wizard/Pages/30-passwd-type.qml:105
564+#: qml/Wizard/Pages/60-account.qml:48
565+msgid "Preferred Name"
566+msgstr ""
567+
568+#: qml/Wizard/Pages/70-passwd-type.qml:39
569+msgid "Lock Screen"
570+msgstr ""
571+
572+#: qml/Wizard/Pages/70-passwd-type.qml:101
549573msgctxt "Label: Type of security method"
550−msgid "Passcode"
551−msgstr "Код-пароль"
574+msgid "Create new password"
575+msgstr ""
552576
553−#: qml/Wizard/Pages/30-passwd-type.qml:106
554−msgctxt "Label: Description of security method"
555−msgid "4 digits only"
556−msgstr "Толькі 4 лічбы"
577+#: qml/Wizard/Pages/70-passwd-type.qml:103
578+msgctxt "Label: Type of security method"
579+msgid "Create passcode (numbers only)"
580+msgstr ""
557581
558−#: qml/Wizard/Pages/30-passwd-type.qml:108
582+#: qml/Wizard/Pages/70-passwd-type.qml:105
559583msgctxt "Label: Type of security method"
560−msgid "Passphrase"
561−msgstr "Пароль"
584+msgid "No lock code"
585+msgstr ""
562586
563−#: qml/Wizard/Pages/30-passwd-type.qml:109
564−msgctxt "Label: Description of security method"
565−msgid "Numbers and letters"
566−msgstr "Літары і лічбы"
587+#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
588+msgid "Privacy Policy"
589+msgstr ""
567590
568−#: qml/Wizard/Pages/40-wifi.qml:29
569−msgid "Connect to Wi‑Fi"
570−msgstr "Злучыцца з Wi-Fi"
591+#: qml/Wizard/Pages/75-report-check.qml:26
592+msgid "Help Us Improve"
593+msgstr ""
571594
572−#: qml/Wizard/Pages/40-wifi.qml:168
573−msgid "Available networks…"
574−msgstr "Даступныя сеткі..."
595+#: qml/Wizard/Pages/75-report-check.qml:59
596+msgid "Improve system performance by sending us crashes and error reports."
597+msgstr ""
575598
576−#: qml/Wizard/Pages/40-wifi.qml:169
577−msgid "No available networks."
578−msgstr "Няма даступных сетак."
599+#: qml/Wizard/Pages/75-report-check.qml:60
600+msgid "Privacy policy"
601+msgstr ""
579602
580−#: qml/Wizard/Pages/50-location.qml:27
581−msgid "Location"
582−msgstr "Месца"
603+#: qml/Wizard/Pages/80-finished.qml:89
604+msgid "Welcome to Ubuntu"
605+msgstr ""
583606
584−#: qml/Wizard/Pages/50-location.qml:62
585−msgid "Let the phone detect your location:"
586−msgstr "Дазволіць тэлефону вызначаць месцазнаходжанне:"
607+#: qml/Wizard/Pages/80-finished.qml:104
608+msgid "You are ready to use your device now"
609+msgstr ""
587610
588−#: qml/Wizard/Pages/50-location.qml:69
589−msgid "Using GPS only (less accurate)"
590−msgstr "З дапамогай толькі GPS (найменш дакладна)"
611+#: qml/Wizard/Pages/80-finished.qml:124
612+msgid "Get Started"
613+msgstr ""
591614
592−#: qml/Wizard/Pages/50-location.qml:86
593−msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
615+#: qml/Wizard/Pages/here-terms.qml:25
616+msgid "Terms & Conditions"
617+msgstr "Умовы карыстання"
618+
619+#: qml/Wizard/Pages/here-terms.qml:69
620+msgid "Your device uses positioning technologies provided by HERE."
594621msgstr ""
595−"На аснове GPS, ананімізаванага Wi-Fi і дадзеных сотавай сеткі (рэкамендуецца)"
596622
597−#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
598−#: qml/Wizard/Pages/50-location.qml:103
623+#: qml/Wizard/Pages/here-terms.qml:81
599624msgid ""
600−"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
601−"conditions</a>."
625+"To provide you with positioning services and to improve their quality, HERE "
626+"collects information about nearby cell towers and Wi-Fi hotspots around your "
627+"current location whenever your position is being found."
602628msgstr ""
603−"Выбарам гэтага варыянту дзеянняў вы згаджаецеся з <a href='#'> умовамі "
604−"прадстаўлення паслуг Nokia HERE</a>."
605629
606−#: qml/Wizard/Pages/50-location.qml:112
607−msgid "Not at all"
608−msgstr "Не дазваляць"
630+#: qml/Wizard/Pages/here-terms.qml:93
631+msgid ""
632+"The information collected is used to analyze the service and to improve the "
633+"use of service, but not to identify you personally."
634+msgstr ""
609635
610−#: qml/Wizard/Pages/50-location.qml:124
611−msgid "You can change your mind later in <b>System Settings</b>."
612−msgstr "Пасля змяніць налады можна з дапамогай <b>Сістэмных наладкаў</b>."
636+#: qml/Wizard/Pages/here-terms.qml:106
637+#, qt-format
638+msgid "By continuing, you agree to the HERE platform %1 and %2."
639+msgstr ""
613640
614−#: qml/Wizard/Pages/60-reporting.qml:26
615−msgid "Improving your experience"
616−msgstr "Спрашчэнне вашай працы"
641+#: qml/Wizard/Pages/here-terms.qml:107
642+msgid "Service Terms"
643+msgstr ""
617644
618−#: qml/Wizard/Pages/60-reporting.qml:46
619−msgid ""
620−"Your phone is set up to automatically report errors to Canonical and its "
621−"partners, the makers of the operating system."
645+#: qml/Wizard/Pages/passcode-confirm.qml:43
646+#: qml/Wizard/Pages/passcode-desktop.qml:80
647+msgid "Confirm passcode"
648+msgstr "Пацвердзіце код-пароль"
649+
650+#: qml/Wizard/Pages/passcode-confirm.qml:45
651+msgid "Incorrect passcode."
622652msgstr ""
623−"Ваш тэлефон настроены на аўтаматычную адпраўку справаздач пра памылкі ў "
624−"Canonical і партнёрскія установы, вытворцам аперацыйнай сістэмы."
625653
626−#: qml/Wizard/Pages/60-reporting.qml:53
627−msgid ""
628−"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
629−"Privacy</b>"
654+#: qml/Wizard/Pages/passcode-confirm.qml:45
655+msgctxt "Enter the passcode again"
656+msgid "Please re-enter."
630657msgstr ""
631−"Гэтае можна адключыць у <b>Сістэмных наладках</b>, дзе <b>Бяспека &amp; "
632−"канфедэнцыйнасці</b>"
633658
634−#: qml/Wizard/Pages/80-finished.qml:24
635−msgid "All done"
636−msgstr "Зроблена"
659+#: qml/Wizard/Pages/passcode-desktop.qml:30
660+msgid "Lock Screen Passcode"
661+msgstr ""
637662
638−#: qml/Wizard/Pages/80-finished.qml:39
639−msgid "Nice work!"
640−msgstr "Выдатная праца!"
663+#: qml/Wizard/Pages/passcode-desktop.qml:56
664+msgid "Enter 4 numbers to setup your passcode"
665+msgstr ""
641666
642−#: qml/Wizard/Pages/80-finished.qml:46
643−msgid "Your device is now ready to use."
667+#: qml/Wizard/Pages/passcode-desktop.qml:65
668+#: qml/Wizard/Pages/passcode-set.qml:54
669+msgid "Choose passcode"
644670msgstr ""
645671
646−#: qml/Wizard/Pages/80-finished.qml:53
647−msgid "Finish"
648−msgstr "Скончыць"
672+#: qml/Wizard/Pages/passcode-desktop.qml:105
673+msgid "Passcode too short"
674+msgstr ""
649675
650−#: qml/Wizard/Pages/here-terms.qml:27
651−msgid "Terms & Conditions"
652−msgstr "Умовы карыстання"
676+#: qml/Wizard/Pages/passcode-desktop.qml:107
677+msgid "Passcodes match"
678+msgstr ""
653679
654−#: qml/Wizard/Pages/passwd-confirm.qml:49
655−msgid "Confirm passphrase"
656−msgstr "Пацвердзіце пароль"
680+#: qml/Wizard/Pages/passcode-desktop.qml:109
681+msgid "Passcodes do not match"
682+msgstr ""
657683
658−#: qml/Wizard/Pages/passwd-confirm.qml:50
659−msgid "Confirm passcode"
660−msgstr "Пацвердзіце код-пароль"
684+#: qml/Wizard/Pages/passcode-set.qml:62
685+msgid "Passcode must be 4 characters long"
686+msgstr ""
661687
662−#: qml/Wizard/Pages/passwd-confirm.qml:53
663−#: qml/Wizard/Pages/passwd-confirm.qml:54
664−msgid "Please try again."
665−msgstr "Калі ласка, паспрабуйце яшчэ раз."
688+#: qml/Wizard/Pages/password-set.qml:30
689+msgid "Lock Screen Password"
690+msgstr ""
666691
667−#: qml/Wizard/Pages/passwd-set.qml:61
668−msgid "Choose your passcode"
669−msgstr "Выберыце код"
692+#: qml/Wizard/Pages/password-set.qml:61
693+msgid "Enter at least 8 characters"
694+msgstr ""
670695
671−#: qml/Wizard/Pages/passwd-set.qml:68
672−msgid "Passphrase must be 4 characters long"
673−msgstr "Код мусіць складацца з 4 сімвалаў"
696+#: qml/Wizard/Pages/password-set.qml:73
697+msgid "Choose password"
698+msgstr ""
674699
675−#. Translators: This is the arrow for "Back" buttons
676−#: qml/Wizard/StackButton.qml:39
677−#, qt-format
678−msgid "〈 %1"
679−msgstr "〈 %1"
700+#: qml/Wizard/Pages/password-set.qml:103
701+msgid "Confirm password"
702+msgstr ""
680703
681−#. Translators: This is the arrow for "Forward" buttons
682−#: qml/Wizard/StackButton.qml:42
683−#, qt-format
684−msgid "%1 〉"
685−msgstr "%1 〉"
704+#: qml/Wizard/Pages/sim.qml:27
705+msgid "No SIM card installed"
706+msgstr ""
707+
708+#: qml/Wizard/Pages/sim.qml:54
709+msgid "SIM card added"
710+msgstr ""
711+
712+#: qml/Wizard/Pages/sim.qml:55
713+msgid "You must restart the device to access the mobile network."
714+msgstr ""
715+
716+#: qml/Wizard/Pages/sim.qml:59
717+msgid "Restart"
718+msgstr "Перазапусціць"
719+
720+#: qml/Wizard/Pages/sim.qml:78
721+msgid "You won’t be able to make calls or use text messaging without a SIM."
722+msgstr ""
723+
724+#: qml/Wizard/Pages/sim.qml:90
725+msgid "To proceed with no SIM tap Skip."
726+msgstr ""
727+
728+#: qml/Wizard/PasswordMeter.qml:87
729+msgid "Passwords match"
730+msgstr ""
731+
732+#: qml/Wizard/PasswordMeter.qml:89
733+msgid "Passwords do not match"
734+msgstr ""
735+
736+#: qml/Wizard/PasswordMeter.qml:93
737+msgid "Strong password"
738+msgstr ""
739+
740+#: qml/Wizard/PasswordMeter.qml:95
741+msgid "Fair password"
742+msgstr ""
743+
744+#: qml/Wizard/PasswordMeter.qml:97
745+msgid "Weak password"
746+msgstr ""
747+
748+#: qml/Wizard/PasswordMeter.qml:99
749+msgid "Very weak password"
750+msgstr ""
686751
687752#~ msgid "Reboot"
688753#~ msgstr "Перазагрузіць"
@@ -705,6 +770,12 @@ msgstr "%1 〉"
705770#~ msgid "Confirm"
706771#~ msgstr "Пацвердзіць"
707772
773+#~ msgid "Unlock SIM"
774+#~ msgstr "Разблакаваць SIM"
775+
776+#~ msgid "Roaming"
777+#~ msgstr "Роўмінг"
778+
708779#~ msgid "Try swiping from the right edge to unlock the phone"
709780#~ msgstr "Правядзіце пальцам з правага краю, каб разблакаваць тэлефон"
710781
@@ -723,6 +794,9 @@ msgstr "%1 〉"
723794#~ msgid "Log out"
724795#~ msgstr "Выйсці"
725796
797+#~ msgid "Are you sure you want to shut down?"
798+#~ msgstr "Вы ўпэўненыя, што жадаеце выключыць прыладу?"
799+
726800#~ msgid "Power"
727801#~ msgstr "Сілкаванне"
728802
@@ -743,20 +817,97 @@ msgstr "%1 〉"
743817#~ msgid "Skip intro"
744818#~ msgstr "Прапусціць уводзіны"
745819
820+#~ msgid "See all"
821+#~ msgstr "Больш падрабязна"
822+
823+#~ msgid "See less"
824+#~ msgstr "Карацей"
825+
746826#~ msgid "Store"
747827#~ msgstr "Крама"
748828
829+#~ msgid "Add a SIM card and restart your device"
830+#~ msgstr "Дадайце SIM-карту і перазагрузіце Вашую прыладу"
831+
832+#~ msgid "Hi!"
833+#~ msgstr "Вітай!"
834+
749835#~ msgid "Welcome to your Ubuntu phone."
750836#~ msgstr "Вітаем Вас у сістэме тэлефона Ubuntu."
751837
838+#~ msgid "Let’s get started."
839+#~ msgstr "Пачнем."
840+
841+#~ msgid "Continue"
842+#~ msgstr "Працягнуць"
843+
752844#~ msgid "Please select how you’d like to unlock your phone."
753845#~ msgstr "Калі ласка, абярыце спосаб разблакавання тэлефона."
754846
847+#~ msgid "Using GPS only (less accurate)"
848+#~ msgstr "З дапамогай толькі GPS (найменш дакладна)"
849+
850+#~ msgid "Available networks…"
851+#~ msgstr "Даступныя сеткі..."
852+
853+#~ msgid "No available networks."
854+#~ msgstr "Няма даступных сетак."
855+
856+#~ msgid "Location"
857+#~ msgstr "Месца"
858+
859+#~ msgid "Let the phone detect your location:"
860+#~ msgstr "Дазволіць тэлефону вызначаць месцазнаходжанне:"
861+
862+#~ msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
863+#~ msgstr ""
864+#~ "На аснове GPS, ананімізаванага Wi-Fi і дадзеных сотавай сеткі (рэкамендуецца)"
865+
866+#~ msgid "Improving your experience"
867+#~ msgstr "Спрашчэнне вашай працы"
868+
869+#~ msgid ""
870+#~ "Your phone is set up to automatically report errors to Canonical and its "
871+#~ "partners, the makers of the operating system."
872+#~ msgstr ""
873+#~ "Ваш тэлефон настроены на аўтаматычную адпраўку справаздач пра памылкі ў "
874+#~ "Canonical і партнёрскія установы, вытворцам аперацыйнай сістэмы."
875+
876+#~ msgid "Nice work!"
877+#~ msgstr "Выдатная праца!"
878+
879+#~ msgid "All done"
880+#~ msgstr "Зроблена"
881+
882+#~ msgid "Finish"
883+#~ msgstr "Скончыць"
884+
755885#~ msgid "Your phone is now ready to use."
756886#~ msgstr "Цяпер Вашым тэлефонам можна карыстацца."
757887
758−#~ msgid "Restart"
759−#~ msgstr "Перазапусціць"
888+#~ msgid ""
889+#~ "By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
890+#~ "conditions</a>."
891+#~ msgstr ""
892+#~ "Выбарам гэтага варыянту дзеянняў вы згаджаецеся з <a href='#'> умовамі "
893+#~ "прадстаўлення паслуг Nokia HERE</a>."
894+
895+#~ msgid "Not at all"
896+#~ msgstr "Не дазваляць"
897+
898+#, qt-format
899+#~ msgid "〈 %1"
900+#~ msgstr "〈 %1"
901+
902+#~ msgid "Confirm passphrase"
903+#~ msgstr "Пацвердзіце пароль"
904+
905+#, qt-format
906+#~ msgid "%1 〉"
907+#~ msgstr "%1 〉"
908+
909+#~ msgid "Please try again."
910+#~ msgstr "Калі ласка, паспрабуйце яшчэ раз."
760911
761912#~ msgid "Close"
762913#~ msgstr "Закрыць"
@@ -778,6 +929,103 @@ msgstr "%1 〉"
778929#~ msgid "Please re-enter"
779930#~ msgstr "Калі ласка, паўтарыце ўвод"
780931
932+#~ msgid "Lock security"
933+#~ msgstr "Блакіроўка"
934+
935+#~ msgid "You can change your mind later in <b>System Settings</b>."
936+#~ msgstr "Пасля змяніць налады можна з дапамогай <b>Сістэмных наладкаў</b>."
937+
938+#~ msgid ""
939+#~ "This can be disabled in <b>System Settings</b> under <b>Security &amp; "
940+#~ "Privacy</b>"
941+#~ msgstr ""
942+#~ "Гэтае можна адключыць у <b>Сістэмных наладках</b>, дзе <b>Бяспека &amp; "
943+#~ "канфедэнцыйнасці</b>"
944+
945+#~ msgid "Choose your passcode"
946+#~ msgstr "Выберыце код"
947+
948+#~ msgctxt "Button: Shut down the system"
949+#~ msgid "Shut down"
950+#~ msgstr "Выключыць"
951+
952+#~ msgctxt "Title: Reboot/Shut down dialog"
953+#~ msgid "Shut down"
954+#~ msgstr "Выключыць"
955+
956+#~ msgctxt "Button: Reboot the system"
957+#~ msgid "Reboot"
958+#~ msgstr "Перазагрузіць"
959+
960+#~ msgid "Swipe up from the bottom edge."
961+#~ msgstr "Правесці уверх ад ніжняга краю."
962+
963+#~ msgid "Open special menus"
964+#~ msgstr "Адкрыць спецыяльныя меню"
965+
966+#~ msgid "Tap here to finish."
967+#~ msgstr "Націсніце тут, каб завяршыць."
968+
969+#~ msgid "This action does different things for different apps"
970+#~ msgstr "Гэта дзеянне мае розныя наступствы для розных праграм"
971+
972+#~ msgid "To view open apps"
973+#~ msgstr "Паглядзець адкрытыя праграмы"
974+
975+#~ msgid "You almost got it!"
976+#~ msgstr "Амаль усё!"
977+
978+#~ msgid "Short swipe from the left edge."
979+#~ msgstr "Кароткі рух з левага краю."
980+
981+#~ msgid "Long swipe from the right edge."
982+#~ msgstr "Доўгі рух ад правага краю."
983+
984+#~ msgid "View all your running tasks."
985+#~ msgstr "Паказаць усе запушчаныя задачы."
986+
987+#~ msgid "Try again."
988+#~ msgstr "Паспрабуйце яшчэ."
989+
990+#~ msgid "Open the launcher"
991+#~ msgstr "Адкрыць панэль запуску"
992+
993+#~ msgid "Tap here to continue."
994+#~ msgstr "Націсніце тут, каб працягнуць."
995+
996+#~ msgid "These are the shortcuts to favorite apps"
997+#~ msgstr "Гэта скарачэнні для абраных праграм"
998+
999+#~ msgctxt "Label: Description of security method"
1000+#~ msgid "No security"
1001+#~ msgstr "Без бяспекі"
1002+
1003+#~ msgctxt "Label: Type of security method"
1004+#~ msgid "Swipe"
1005+#~ msgstr "Рух"
1006+
1007+#~ msgctxt "Label: Description of security method"
1008+#~ msgid "4 digits only"
1009+#~ msgstr "Толькі 4 лічбы"
1010+
1011+#~ msgctxt "Label: Type of security method"
1012+#~ msgid "Passphrase"
1013+#~ msgstr "Пароль"
1014+
1015+#~ msgctxt "Label: Description of security method"
1016+#~ msgid "Numbers and letters"
1017+#~ msgstr "Літары і лічбы"
1018+
1019+#~ msgid "Without it, you won’t be able to make calls or use text messaging."
1020+#~ msgstr "Без яе Вы не зможаце тэлефанаваць ці адпраўляць паведамленні."
1021+
1022+#~ msgid "Passphrase must be 4 characters long"
1023+#~ msgstr "Код мусіць складацца з 4 сімвалаў"
1024+
1025+#~ msgctxt "Label: Type of security method"
1026+#~ msgid "Passcode"
1027+#~ msgstr "Код-пароль"
1028+
7811029#~ msgid "%a %l:%M %p"
7821030#~ msgstr "%a a %H:%M"
7831031
po/bg.po+272−200
@@ -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-16 03:29+0000\n"
10+"POT-Creation-Date: 2016-04-27 15:01+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,23 +15,23 @@ 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-23 06:03+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-04-30 05:36+0000\n"
19+"X-Generator: Launchpad (build 17995)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
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
@@ -73,53 +73,35 @@ msgctxt "Button: Log out from the system"
7373msgid "Log Out"
7474msgstr ""
7575
76−#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:194
77−#: qml/Components/Dialogs.qml:253
76+#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
77+#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
78+#: qml/Wizard/Pages/passcode-set.qml:32
7879msgid "Cancel"
7980msgstr ""
8081
8182#: qml/Components/Dialogs.qml:173
82−msgctxt "Title: Reboot/Shut down dialog"
83−msgid "Shut down"
84−msgstr ""
85−
86−#: qml/Components/Dialogs.qml:174
87−msgid "Are you sure you want to shut down?"
88−msgstr ""
89−
90−#: qml/Components/Dialogs.qml:176
91−msgctxt "Button: Reboot the system"
92−msgid "Reboot"
93−msgstr ""
94−
95−#: qml/Components/Dialogs.qml:185
96−msgctxt "Button: Shut down the system"
97−msgid "Shut down"
98−msgstr ""
99−
100−#: qml/Components/Dialogs.qml:207
10183msgctxt "Title: Reboot dialog"
10284msgid "Reboot"
10385msgstr ""
10486
105−#: qml/Components/Dialogs.qml:208
87+#: qml/Components/Dialogs.qml:174
10688msgid "Are you sure you want to reboot?"
10789msgstr ""
10890
109−#: qml/Components/Dialogs.qml:210
91+#: qml/Components/Dialogs.qml:176
11092msgid "No"
11193msgstr ""
11294
113−#: qml/Components/Dialogs.qml:217
95+#: qml/Components/Dialogs.qml:182
11496msgid "Yes"
11597msgstr ""
11698
117−#: qml/Components/Dialogs.qml:232
99+#: qml/Components/Dialogs.qml:197
118100msgctxt "Title: Power off/Restart dialog"
119101msgid "Power"
120102msgstr ""
121103
122−#: qml/Components/Dialogs.qml:233
104+#: qml/Components/Dialogs.qml:198
123105msgid ""
124106"Are you sure you would like\n"
125107"to power off?"
@@ -127,25 +109,25 @@ msgstr ""
127109"Искате ли да \n"
128110"изключите захранването на устройството?"
129111
130−#: qml/Components/Dialogs.qml:235
112+#: qml/Components/Dialogs.qml:200
131113msgctxt "Button: Power off the system"
132114msgid "Power off"
133115msgstr ""
134116
135−#: qml/Components/Dialogs.qml:244
117+#: qml/Components/Dialogs.qml:209
136118msgctxt "Button: Restart the system"
137119msgid "Restart"
138120msgstr ""
139121
140−#: qml/Components/Lockscreen.qml:245
122+#: qml/Components/Lockscreen.qml:231
141123msgid "Return to Call"
142124msgstr ""
143125
144−#: qml/Components/Lockscreen.qml:245
126+#: qml/Components/Lockscreen.qml:231
145127msgid "Emergency Call"
146128msgstr "Спешно повикване"
147129
148−#: qml/Components/Lockscreen.qml:277
130+#: qml/Components/Lockscreen.qml:263
149131msgid "OK"
150132msgstr ""
151133
@@ -154,6 +136,8 @@ msgid "Apps may have unsaved data:"
154136msgstr ""
155137
156138#: qml/Components/ModeSwitchWarningDialog.qml:57
139+msgctxt ""
140+"Re-dock means connect the device again to an external screen/mouse/keyboard"
157141msgid "Re-dock, save your work and close these apps to continue."
158142msgstr ""
159143
@@ -173,42 +157,58 @@ msgstr ""
173157msgid "Close all"
174158msgstr ""
175159
176−#: qml/Dash/DashPageHeader.qml:266
160+#: qml/Dash/DashPageHeader.qml:337
177161msgctxt "Button: Open the Ubuntu Store"
178162msgid "Store"
179163msgstr ""
180164
181−#: qml/Dash/DashPageHeader.qml:273
165+#: qml/Dash/DashPageHeader.qml:344
182166msgctxt "Button: Start a search in the current dash scope"
183167msgid "Search"
184168msgstr ""
185169
186−#: qml/Dash/DashPageHeader.qml:283
170+#: qml/Dash/DashPageHeader.qml:354
187171msgctxt "Button: Show the current dash scope settings"
188172msgid "Settings"
189173msgstr ""
190174
191−#: qml/Dash/DashPageHeader.qml:290
175+#: qml/Dash/DashPageHeader.qml:361
192176msgid "Remove from Favorites"
193177msgstr ""
194178
195−#: qml/Dash/DashPageHeader.qml:290
179+#: qml/Dash/DashPageHeader.qml:361
196180msgid "Add to Favorites"
197181msgstr ""
198182
199−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
200−msgid "See less"
183+#: qml/Dash/FiltersPopover.qml:60
184+msgid "Refine your results"
185+msgstr ""
186+
187+#: qml/Dash/FiltersPopover.qml:69
188+msgid "Reset"
189+msgstr ""
190+
191+#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
192+msgid "Show less"
201193msgstr ""
202194
203−#: qml/Dash/GenericScopeView.qml:587
204−msgid "See all"
195+#: qml/Dash/GenericScopeView.qml:570
196+msgid "Show all"
205197msgstr ""
206198
207−#: qml/Dash/GenericScopeView.qml:649
199+#: qml/Dash/GenericScopeView.qml:627
208200msgctxt "Label: Hint for dash search line edit"
209201msgid "Search"
210202msgstr ""
211203
204+#: qml/Dash/PageHeaderExtraPanel.qml:55
205+msgid "Recent Searches"
206+msgstr ""
207+
208+#: qml/Dash/PageHeaderExtraPanel.qml:66
209+msgid "Clear All"
210+msgstr ""
211+
212212#: qml/Dash/Previews/PreviewActionCombo.qml:35
213213msgid "More..."
214214msgstr ""
@@ -230,7 +230,7 @@ msgstr "Оценете това"
230230msgid "Add a review"
231231msgstr "Добави отзив"
232232
233−#: qml/Dash/Previews/PreviewSharing.qml:50
233+#: qml/Dash/Previews/PreviewSharing.qml:66
234234msgid "Preview Share Item"
235235msgstr ""
236236
@@ -258,13 +258,13 @@ msgstr ""
258258msgid "Also installed"
259259msgstr ""
260260
261−#: qml/DisabledScreenNotice.qml:87
261+#: qml/DisabledScreenNotice.qml:104
262262msgid ""
263263"Your device is now connected to an external display. Use this screen as a "
264−"touch pad to interact with the mouse."
264+"touch pad to interact with the pointer."
265265msgstr ""
266266
267−#: qml/Greeter/CoverPage.qml:107
267+#: qml/Greeter/CoverPage.qml:118
268268msgid "Unlock"
269269msgstr ""
270270
@@ -276,11 +276,11 @@ msgstr ""
276276msgid "Tap to unlock"
277277msgstr ""
278278
279−#: qml/Greeter/NarrowView.qml:54 qml/Wizard/Pages/passwd-confirm.qml:53
279+#: qml/Greeter/NarrowView.qml:54
280280msgid "Sorry, incorrect passphrase."
281281msgstr ""
282282
283−#: qml/Greeter/NarrowView.qml:55 qml/Wizard/Pages/passwd-confirm.qml:54
283+#: qml/Greeter/NarrowView.qml:55
284284msgid "Sorry, incorrect passcode."
285285msgstr ""
286286
@@ -305,7 +305,7 @@ msgstr ""
305305msgid "Enter %1"
306306msgstr ""
307307
308−#: qml/Greeter/NarrowView.qml:117 qml/Wizard/Pages/passwd-set.qml:60
308+#: qml/Greeter/NarrowView.qml:117
309309msgid "Enter passphrase"
310310msgstr ""
311311
@@ -331,7 +331,7 @@ msgstr ""
331331msgid "Sorry, incorrect passcode"
332332msgstr ""
333333
334−#: qml/Notifications/NotificationMenuItemFactory.qml:129
334+#: qml/Notifications/NotificationMenuItemFactory.qml:124
335335msgid "Show password"
336336msgstr "Покажи паролата"
337337
@@ -343,62 +343,62 @@ msgstr ""
343343msgid "Conference"
344344msgstr ""
345345
346−#: qml/Panel/Indicators/MenuItemFactory.qml:753
346+#: qml/Panel/Indicators/MenuItemFactory.qml:762
347347msgid "Nothing is playing"
348348msgstr ""
349349
350−#: qml/Panel/Indicators/MenuItemFactory.qml:882
350+#: qml/Panel/Indicators/MenuItemFactory.qml:891
351351#, qt-format
352352msgid "%1 hour"
353353msgid_plural "%1 hours"
354354msgstr[0] ""
355355msgstr[1] ""
356356
357−#: qml/Panel/Indicators/MenuItemFactory.qml:886
357+#: qml/Panel/Indicators/MenuItemFactory.qml:895
358358#, qt-format
359359msgid "%1 minute"
360360msgid_plural "%1 minutes"
361361msgstr[0] ""
362362msgstr[1] ""
363363
364−#: qml/Panel/Indicators/MenuItemFactory.qml:891
364+#: qml/Panel/Indicators/MenuItemFactory.qml:900
365365#, qt-format
366366msgid "%1 second"
367367msgid_plural "%1 seconds"
368368msgstr[0] ""
369369msgstr[1] ""
370370
371−#: qml/Panel/Indicators/MenuItemFactory.qml:894
371+#: qml/Panel/Indicators/MenuItemFactory.qml:903
372372msgid "0 seconds"
373373msgstr ""
374374
375375#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
376−#: qml/Panel/Indicators/MenuItemFactory.qml:896
376+#: qml/Panel/Indicators/MenuItemFactory.qml:905
377377#, qt-format
378378msgid "%1 remaining"
379379msgstr ""
380380
381−#: qml/Panel/Indicators/MenuItemFactory.qml:902
381+#: qml/Panel/Indicators/MenuItemFactory.qml:911
382382msgid "In queue…"
383383msgstr ""
384384
385−#: qml/Panel/Indicators/MenuItemFactory.qml:906
385+#: qml/Panel/Indicators/MenuItemFactory.qml:915
386386msgid "Downloading"
387387msgstr ""
388388
389−#: qml/Panel/Indicators/MenuItemFactory.qml:908
389+#: qml/Panel/Indicators/MenuItemFactory.qml:917
390390msgid "Paused, tap to resume"
391391msgstr ""
392392
393−#: qml/Panel/Indicators/MenuItemFactory.qml:910
393+#: qml/Panel/Indicators/MenuItemFactory.qml:919
394394msgid "Canceled"
395395msgstr ""
396396
397−#: qml/Panel/Indicators/MenuItemFactory.qml:912
397+#: qml/Panel/Indicators/MenuItemFactory.qml:921
398398msgid "Finished"
399399msgstr ""
400400
401−#: qml/Panel/Indicators/MenuItemFactory.qml:914
401+#: qml/Panel/Indicators/MenuItemFactory.qml:923
402402msgid "Failed, tap to retry"
403403msgstr ""
404404
@@ -418,251 +418,323 @@ msgctxt "Button: Call back on phone"
418418msgid "Call back"
419419msgstr ""
420420
421−#: qml/Panel/Indicators/ModemInfoItem.qml:105
422−msgid "Unlock SIM"
421+#: qml/Stages/SideStage.qml:76
422+msgid "Drag using 3 fingers any application from one window to the other"
423423msgstr ""
424424
425−#: qml/Panel/Indicators/RoamingIndication.qml:27
426−msgid "Roaming"
425+#: qml/Tutorial/TutorialBottom.qml:78
426+msgid "Swipe up to add a contact"
427427msgstr ""
428428
429−#: qml/Tutorial/TutorialBottom.qml:28
430−msgid "Open special menus"
429+#: qml/Tutorial/TutorialBottom.qml:80
430+msgid "Swipe up for favorite calculations"
431431msgstr ""
432432
433−#: qml/Tutorial/TutorialBottom.qml:29
434−msgid "Swipe up from the bottom edge."
433+#: qml/Tutorial/TutorialBottom.qml:82
434+msgid "Swipe up for recent calls"
435435msgstr ""
436436
437−#: qml/Tutorial/TutorialBottomFinish.qml:24
438−msgid "This action does different things for different apps"
437+#: qml/Tutorial/TutorialBottom.qml:84
438+msgid "Swipe up to create a message"
439439msgstr ""
440440
441−#: qml/Tutorial/TutorialBottomFinish.qml:25
442−msgid "Tap here to finish."
441+#: qml/Tutorial/TutorialBottom.qml:85
442+msgid "Swipe up to manage the app"
443443msgstr ""
444444
445−#: qml/Tutorial/TutorialContent.qml:80 qml/Tutorial/TutorialLeftFinish.qml:25
446−#: qml/Tutorial/TutorialRight.qml:144
447−msgid "Tap here to continue."
445+#: qml/Tutorial/TutorialLeftLong.qml:47
446+msgid "Long swipe from the left edge to open the Today scope"
448447msgstr ""
449448
450−#: qml/Tutorial/TutorialLeft.qml:26
451−msgid "Open the launcher"
449+#: qml/Tutorial/TutorialLeft.qml:47
450+msgid "Swipe from the left edge to open the launcher"
452451msgstr ""
453452
454−#: qml/Tutorial/TutorialLeft.qml:27
455−msgid "Short swipe from the left edge."
453+#: qml/Tutorial/TutorialRight.qml:55
454+msgid "Push your mouse against the right edge to view your open apps"
456455msgstr ""
457456
458−#: qml/Tutorial/TutorialLeftFinish.qml:24
459−msgid "These are the shortcuts to favorite apps"
457+#: qml/Tutorial/TutorialRight.qml:56
458+msgid "Short or long swipe from the right edge to view your open apps"
460459msgstr ""
461460
462−#: qml/Tutorial/TutorialPage.qml:178
463−msgid "You almost got it!"
461+#: qml/Tutorial/TutorialTop.qml:53
462+msgid "Swipe from the top right edge to open the notification bar"
464463msgstr ""
465464
466−#: qml/Tutorial/TutorialPage.qml:195
467−msgid "Try again."
465+#: qml/Tutorial/TutorialTop.qml:54
466+msgid "Swipe from the top edge to open the notification bar"
468467msgstr ""
469468
470−#: qml/Tutorial/TutorialRight.qml:31
471−msgid "To view open apps"
469+#: qml/Wizard/Page.qml:54
470+msgctxt "Button: Go back one page in the Wizard"
471+msgid "Back"
472472msgstr ""
473473
474−#: qml/Tutorial/TutorialRight.qml:32
475−msgid "Long swipe from the right edge."
474+#: qml/Wizard/Pages/10-welcome.qml:27
475+msgid "Language"
476476msgstr ""
477477
478−#: qml/Tutorial/TutorialRight.qml:122
479−msgid "View all your running tasks."
478+#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
479+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
480+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
481+#: qml/Wizard/Pages/75-report-check.qml:84
482+#: qml/Wizard/Pages/passcode-desktop.qml:124
483+#: qml/Wizard/Pages/password-set.qml:141
484+msgid "Next"
480485msgstr ""
481486
482−#: qml/Wizard/Page.qml:89
483−msgctxt "Button: Go back one page in the Wizard"
484−msgid "Back"
487+#: qml/Wizard/Pages/30-wifi.qml:29
488+msgid "Connect to Wi‑Fi"
485489msgstr ""
486490
487−#: qml/Wizard/Pages/10-welcome.qml:27
488−msgid "Hi!"
491+#: qml/Wizard/Pages/30-wifi.qml:130
492+msgid "Connected"
489493msgstr ""
490494
491−#: qml/Wizard/Pages/10-welcome.qml:44
492−msgid "Welcome to your Ubuntu device."
495+#: qml/Wizard/Pages/30-wifi.qml:163
496+msgid "Available Wi-Fi networks"
493497msgstr ""
494498
495−#: qml/Wizard/Pages/10-welcome.qml:52
496−msgid "Let’s get started."
499+#: qml/Wizard/Pages/30-wifi.qml:164
500+msgid "No available Wi-Fi networks"
497501msgstr ""
498502
499−#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:133
500−#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
501−#: qml/Wizard/Pages/60-reporting.qml:60 qml/Wizard/Pages/passwd-confirm.qml:82
502−#: qml/Wizard/Pages/passwd-set.qml:90
503−msgid "Continue"
503+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
504+#: qml/Wizard/Pages/sim.qml:101
505+msgid "Skip"
504506msgstr ""
505507
506−#: qml/Wizard/Pages/20-sim.qml:25
507−msgid "Add a SIM card and restart your device"
508+#: qml/Wizard/Pages/40-location.qml:27
509+msgid "Location Services"
508510msgstr ""
509511
510−#: qml/Wizard/Pages/20-sim.qml:59
511−msgid "Without it, you won’t be able to make calls or use text messaging."
512+#: qml/Wizard/Pages/40-location.qml:83
513+msgid ""
514+"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
515+"(recommended)"
512516msgstr ""
513517
514−#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
515−msgid "Skip"
518+#: qml/Wizard/Pages/40-location.qml:105
519+#, qt-format
520+msgid "By selecting this option you agree to the Nokia HERE %1."
516521msgstr ""
517522
518−#: qml/Wizard/Pages/30-passwd-type.qml:39
519−msgid "Lock security"
523+#: qml/Wizard/Pages/40-location.qml:106
524+msgctxt "part of: Nokia HERE terms and conditions"
525+msgid "terms and conditions"
520526msgstr ""
521527
522−#: qml/Wizard/Pages/30-passwd-type.qml:79
523−msgid "Please select how you’d like to unlock your device."
528+#: qml/Wizard/Pages/40-location.qml:160
529+msgid "GPS only"
524530msgstr ""
525531
526−#: qml/Wizard/Pages/30-passwd-type.qml:102
527−msgctxt "Label: Type of security method"
528−msgid "Swipe"
532+#: qml/Wizard/Pages/40-location.qml:214
533+msgid "Don't use my location"
534+msgstr ""
535+
536+#: qml/Wizard/Pages/40-location.qml:260
537+msgid "You can change it later in System Settings."
538+msgstr ""
539+
540+#: qml/Wizard/Pages/50-timezone.qml:29
541+msgid "Time Zone"
542+msgstr ""
543+
544+#: qml/Wizard/Pages/50-timezone.qml:178
545+msgid "Enter your city"
546+msgstr ""
547+
548+#: qml/Wizard/Pages/60-account.qml:24
549+msgid "Personalize Your Device"
550+msgstr ""
551+
552+#: qml/Wizard/Pages/60-account.qml:48
553+msgid "Preferred Name"
529554msgstr ""
530555
531−#: qml/Wizard/Pages/30-passwd-type.qml:103
532−msgctxt "Label: Description of security method"
533−msgid "No security"
556+#: qml/Wizard/Pages/70-passwd-type.qml:39
557+msgid "Lock Screen"
534558msgstr ""
535559
536−#: qml/Wizard/Pages/30-passwd-type.qml:105
560+#: qml/Wizard/Pages/70-passwd-type.qml:101
537561msgctxt "Label: Type of security method"
538−msgid "Passcode"
562+msgid "Create new password"
539563msgstr ""
540564
541−#: qml/Wizard/Pages/30-passwd-type.qml:106
542−msgctxt "Label: Description of security method"
543−msgid "4 digits only"
565+#: qml/Wizard/Pages/70-passwd-type.qml:103
566+msgctxt "Label: Type of security method"
567+msgid "Create passcode (numbers only)"
544568msgstr ""
545569
546−#: qml/Wizard/Pages/30-passwd-type.qml:108
570+#: qml/Wizard/Pages/70-passwd-type.qml:105
547571msgctxt "Label: Type of security method"
548−msgid "Passphrase"
572+msgid "No lock code"
549573msgstr ""
550574
551−#: qml/Wizard/Pages/30-passwd-type.qml:109
552−msgctxt "Label: Description of security method"
553−msgid "Numbers and letters"
575+#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
576+msgid "Privacy Policy"
554577msgstr ""
555578
556−#: qml/Wizard/Pages/40-wifi.qml:29
557−msgid "Connect to Wi‑Fi"
579+#: qml/Wizard/Pages/75-report-check.qml:26
580+msgid "Help Us Improve"
558581msgstr ""
559582
560−#: qml/Wizard/Pages/40-wifi.qml:168
561−msgid "Available networks…"
583+#: qml/Wizard/Pages/75-report-check.qml:59
584+msgid "Improve system performance by sending us crashes and error reports."
562585msgstr ""
563586
564−#: qml/Wizard/Pages/40-wifi.qml:169
565−msgid "No available networks."
587+#: qml/Wizard/Pages/75-report-check.qml:60
588+msgid "Privacy policy"
566589msgstr ""
567590
568−#: qml/Wizard/Pages/50-location.qml:27
569−msgid "Location"
591+#: qml/Wizard/Pages/80-finished.qml:89
592+msgid "Welcome to Ubuntu"
570593msgstr ""
571594
572−#: qml/Wizard/Pages/50-location.qml:62
573−msgid "Let the phone detect your location:"
595+#: qml/Wizard/Pages/80-finished.qml:104
596+msgid "You are ready to use your device now"
574597msgstr ""
575598
576−#: qml/Wizard/Pages/50-location.qml:69
577−msgid "Using GPS only (less accurate)"
599+#: qml/Wizard/Pages/80-finished.qml:124
600+msgid "Get Started"
578601msgstr ""
579602
580−#: qml/Wizard/Pages/50-location.qml:86
581−msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
603+#: qml/Wizard/Pages/here-terms.qml:25
604+msgid "Terms & Conditions"
582605msgstr ""
583606
584−#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
585−#: qml/Wizard/Pages/50-location.qml:103
607+#: qml/Wizard/Pages/here-terms.qml:69
608+msgid "Your device uses positioning technologies provided by HERE."
609+msgstr ""
610+
611+#: qml/Wizard/Pages/here-terms.qml:81
586612msgid ""
587−"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
588−"conditions</a>."
613+"To provide you with positioning services and to improve their quality, HERE "
614+"collects information about nearby cell towers and Wi-Fi hotspots around your "
615+"current location whenever your position is being found."
589616msgstr ""
590617
591−#: qml/Wizard/Pages/50-location.qml:112
592−msgid "Not at all"
618+#: qml/Wizard/Pages/here-terms.qml:93
619+msgid ""
620+"The information collected is used to analyze the service and to improve the "
621+"use of service, but not to identify you personally."
593622msgstr ""
594623
595−#: qml/Wizard/Pages/50-location.qml:124
596−msgid "You can change your mind later in <b>System Settings</b>."
624+#: qml/Wizard/Pages/here-terms.qml:106
625+#, qt-format
626+msgid "By continuing, you agree to the HERE platform %1 and %2."
597627msgstr ""
598628
599−#: qml/Wizard/Pages/60-reporting.qml:26
600−msgid "Improving your experience"
629+#: qml/Wizard/Pages/here-terms.qml:107
630+msgid "Service Terms"
601631msgstr ""
602632
603−#: qml/Wizard/Pages/60-reporting.qml:46
604−msgid ""
605−"Your phone is set up to automatically report errors to Canonical and its "
606−"partners, the makers of the operating system."
633+#: qml/Wizard/Pages/passcode-confirm.qml:43
634+#: qml/Wizard/Pages/passcode-desktop.qml:80
635+msgid "Confirm passcode"
607636msgstr ""
608637
609−#: qml/Wizard/Pages/60-reporting.qml:53
610−msgid ""
611−"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
612−"Privacy</b>"
638+#: qml/Wizard/Pages/passcode-confirm.qml:45
639+msgid "Incorrect passcode."
613640msgstr ""
614641
615−#: qml/Wizard/Pages/80-finished.qml:24
616−msgid "All done"
642+#: qml/Wizard/Pages/passcode-confirm.qml:45
643+msgctxt "Enter the passcode again"
644+msgid "Please re-enter."
617645msgstr ""
618646
619−#: qml/Wizard/Pages/80-finished.qml:39
620−msgid "Nice work!"
647+#: qml/Wizard/Pages/passcode-desktop.qml:30
648+msgid "Lock Screen Passcode"
621649msgstr ""
622650
623−#: qml/Wizard/Pages/80-finished.qml:46
624−msgid "Your device is now ready to use."
651+#: qml/Wizard/Pages/passcode-desktop.qml:56
652+msgid "Enter 4 numbers to setup your passcode"
625653msgstr ""
626654
627−#: qml/Wizard/Pages/80-finished.qml:53
628−msgid "Finish"
655+#: qml/Wizard/Pages/passcode-desktop.qml:65
656+#: qml/Wizard/Pages/passcode-set.qml:54
657+msgid "Choose passcode"
629658msgstr ""
630659
631−#: qml/Wizard/Pages/here-terms.qml:27
632−msgid "Terms & Conditions"
660+#: qml/Wizard/Pages/passcode-desktop.qml:105
661+msgid "Passcode too short"
633662msgstr ""
634663
635−#: qml/Wizard/Pages/passwd-confirm.qml:49
636−msgid "Confirm passphrase"
664+#: qml/Wizard/Pages/passcode-desktop.qml:107
665+msgid "Passcodes match"
637666msgstr ""
638667
639−#: qml/Wizard/Pages/passwd-confirm.qml:50
640−msgid "Confirm passcode"
668+#: qml/Wizard/Pages/passcode-desktop.qml:109
669+msgid "Passcodes do not match"
641670msgstr ""
642671
643−#: qml/Wizard/Pages/passwd-confirm.qml:53
644−#: qml/Wizard/Pages/passwd-confirm.qml:54
645−msgid "Please try again."
672+#: qml/Wizard/Pages/passcode-set.qml:62
673+msgid "Passcode must be 4 characters long"
646674msgstr ""
647675
648−#: qml/Wizard/Pages/passwd-set.qml:61
649−msgid "Choose your passcode"
676+#: qml/Wizard/Pages/password-set.qml:30
677+msgid "Lock Screen Password"
650678msgstr ""
651679
652−#: qml/Wizard/Pages/passwd-set.qml:68
653−msgid "Passphrase must be 4 characters long"
680+#: qml/Wizard/Pages/password-set.qml:61
681+msgid "Enter at least 8 characters"
654682msgstr ""
655683
656−#. Translators: This is the arrow for "Back" buttons
657−#: qml/Wizard/StackButton.qml:39
658−#, qt-format
659−msgid "〈 %1"
684+#: qml/Wizard/Pages/password-set.qml:73
685+msgid "Choose password"
660686msgstr ""
661687
662−#. Translators: This is the arrow for "Forward" buttons
663−#: qml/Wizard/StackButton.qml:42
664−#, qt-format
665−msgid "%1 〉"
688+#: qml/Wizard/Pages/password-set.qml:103
689+msgid "Confirm password"
690+msgstr ""
691+
692+#: qml/Wizard/Pages/sim.qml:27
693+msgid "No SIM card installed"
694+msgstr ""
695+
696+#: qml/Wizard/Pages/sim.qml:54
697+msgid "SIM card added"
698+msgstr ""
699+
700+#: qml/Wizard/Pages/sim.qml:55
701+msgid "You must restart the device to access the mobile network."
702+msgstr ""
703+
704+#: qml/Wizard/Pages/sim.qml:59
705+msgid "Restart"
706+msgstr ""
707+
708+#: qml/Wizard/Pages/sim.qml:78
709+msgid "You won’t be able to make calls or use text messaging without a SIM."
710+msgstr ""
711+
712+#: qml/Wizard/Pages/sim.qml:90
713+msgid "To proceed with no SIM tap Skip."
714+msgstr ""
715+
716+#: qml/Wizard/PasswordMeter.qml:87
717+msgid "Passwords match"
718+msgstr ""
719+
720+#: qml/Wizard/PasswordMeter.qml:89
721+msgid "Passwords do not match"
722+msgstr ""
723+
724+#: qml/Wizard/PasswordMeter.qml:93
725+msgid "Strong password"
726+msgstr ""
727+
728+#: qml/Wizard/PasswordMeter.qml:95
729+msgid "Fair password"
730+msgstr ""
731+
732+#: qml/Wizard/PasswordMeter.qml:97
733+msgid "Weak password"
734+msgstr ""
735+
736+#: qml/Wizard/PasswordMeter.qml:99
737+msgid "Very weak password"
666738msgstr ""
667739
668740#~ msgid "Confirm"
po/bn.po+369−222
@@ -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-16 03:29+0000\n"
10+"POT-Creation-Date: 2016-04-27 15:01+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,23 +15,23 @@ 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-23 06:03+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-04-30 05:36+0000\n"
19+"X-Generator: Launchpad (build 17995)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
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
@@ -73,53 +73,35 @@ msgctxt "Button: Log out from the system"
7373msgid "Log Out"
7474msgstr ""
7575
76−#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:194
77−#: qml/Components/Dialogs.qml:253
76+#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
77+#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
78+#: qml/Wizard/Pages/passcode-set.qml:32
7879msgid "Cancel"
7980msgstr "বাতিল"
8081
8182#: qml/Components/Dialogs.qml:173
82−msgctxt "Title: Reboot/Shut down dialog"
83−msgid "Shut down"
84−msgstr "বন্ধ করুন"
85−
86−#: qml/Components/Dialogs.qml:174
87−msgid "Are you sure you want to shut down?"
88−msgstr "আপনি কি কম্পিউটার বন্ধ করতে চান?"
89−
90−#: qml/Components/Dialogs.qml:176
91−msgctxt "Button: Reboot the system"
92−msgid "Reboot"
93−msgstr "পুনরায় চালু করুন"
94−
95−#: qml/Components/Dialogs.qml:185
96−msgctxt "Button: Shut down the system"
97−msgid "Shut down"
98−msgstr "বন্ধ করুন"
99−
100−#: qml/Components/Dialogs.qml:207
10183msgctxt "Title: Reboot dialog"
10284msgid "Reboot"
10385msgstr "পুনরায় চালু"
10486
105−#: qml/Components/Dialogs.qml:208
87+#: qml/Components/Dialogs.qml:174
10688msgid "Are you sure you want to reboot?"
10789msgstr "আপনি কি পুনরায় চালু করতে চান?"
10890
109−#: qml/Components/Dialogs.qml:210
91+#: qml/Components/Dialogs.qml:176
11092msgid "No"
11193msgstr "না"
11294
113−#: qml/Components/Dialogs.qml:217
95+#: qml/Components/Dialogs.qml:182
11496msgid "Yes"
11597msgstr "হ্যাঁ"
11698
117−#: qml/Components/Dialogs.qml:232
99+#: qml/Components/Dialogs.qml:197
118100msgctxt "Title: Power off/Restart dialog"
119101msgid "Power"
120102msgstr ""
121103
122−#: qml/Components/Dialogs.qml:233
104+#: qml/Components/Dialogs.qml:198
123105msgid ""
124106"Are you sure you would like\n"
125107"to power off?"
@@ -127,25 +109,25 @@ msgstr ""
127109"আপনি নিশ্চিত যে আপনি\n"
128110"বন্ধ করতে চান?"
129111
130−#: qml/Components/Dialogs.qml:235
112+#: qml/Components/Dialogs.qml:200
131113msgctxt "Button: Power off the system"
132114msgid "Power off"
133115msgstr "বন্ধ করুন"
134116
135−#: qml/Components/Dialogs.qml:244
117+#: qml/Components/Dialogs.qml:209
136118msgctxt "Button: Restart the system"
137119msgid "Restart"
138120msgstr "পুনরায় চালু"
139121
140−#: qml/Components/Lockscreen.qml:245
122+#: qml/Components/Lockscreen.qml:231
141123msgid "Return to Call"
142124msgstr "কল এ ফিরে যান"
143125
144−#: qml/Components/Lockscreen.qml:245
126+#: qml/Components/Lockscreen.qml:231
145127msgid "Emergency Call"
146128msgstr "জরুরী কল"
147129
148−#: qml/Components/Lockscreen.qml:277
130+#: qml/Components/Lockscreen.qml:263
149131msgid "OK"
150132msgstr "ঠিক আছে"
151133
@@ -154,6 +136,8 @@ msgid "Apps may have unsaved data:"
154136msgstr ""
155137
156138#: qml/Components/ModeSwitchWarningDialog.qml:57
139+msgctxt ""
140+"Re-dock means connect the device again to an external screen/mouse/keyboard"
157141msgid "Re-dock, save your work and close these apps to continue."
158142msgstr ""
159143
@@ -173,42 +157,58 @@ msgstr ""
173157msgid "Close all"
174158msgstr ""
175159
176−#: qml/Dash/DashPageHeader.qml:266
160+#: qml/Dash/DashPageHeader.qml:337
177161msgctxt "Button: Open the Ubuntu Store"
178162msgid "Store"
179163msgstr "স্টোর"
180164
181−#: qml/Dash/DashPageHeader.qml:273
165+#: qml/Dash/DashPageHeader.qml:344
182166msgctxt "Button: Start a search in the current dash scope"
183167msgid "Search"
184168msgstr "খুঁজুন"
185169
186−#: qml/Dash/DashPageHeader.qml:283
170+#: qml/Dash/DashPageHeader.qml:354
187171msgctxt "Button: Show the current dash scope settings"
188172msgid "Settings"
189173msgstr "সেটিংস"
190174
191−#: qml/Dash/DashPageHeader.qml:290
175+#: qml/Dash/DashPageHeader.qml:361
192176msgid "Remove from Favorites"
193177msgstr "পছন্দ থেকে মুছে ফেলুন"
194178
195−#: qml/Dash/DashPageHeader.qml:290
179+#: qml/Dash/DashPageHeader.qml:361
196180msgid "Add to Favorites"
197181msgstr "পছন্দতে যোগ করুন"
198182
199−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
200−msgid "See less"
201−msgstr "কম দেখুন"
183+#: qml/Dash/FiltersPopover.qml:60
184+msgid "Refine your results"
185+msgstr ""
186+
187+#: qml/Dash/FiltersPopover.qml:69
188+msgid "Reset"
189+msgstr ""
190+
191+#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
192+msgid "Show less"
193+msgstr ""
202194
203−#: qml/Dash/GenericScopeView.qml:587
204−msgid "See all"
205−msgstr "সব দেখুন"
195+#: qml/Dash/GenericScopeView.qml:570
196+msgid "Show all"
197+msgstr ""
206198
207−#: qml/Dash/GenericScopeView.qml:649
199+#: qml/Dash/GenericScopeView.qml:627
208200msgctxt "Label: Hint for dash search line edit"
209201msgid "Search"
210202msgstr "খুঁজুন"
211203
204+#: qml/Dash/PageHeaderExtraPanel.qml:55
205+msgid "Recent Searches"
206+msgstr ""
207+
208+#: qml/Dash/PageHeaderExtraPanel.qml:66
209+msgid "Clear All"
210+msgstr ""
211+
212212#: qml/Dash/Previews/PreviewActionCombo.qml:35
213213msgid "More..."
214214msgstr "আরো..."
@@ -230,7 +230,7 @@ msgstr "রেটিং দিন"
230230msgid "Add a review"
231231msgstr "আপনার মতামত দিন"
232232
233−#: qml/Dash/Previews/PreviewSharing.qml:50
233+#: qml/Dash/Previews/PreviewSharing.qml:66
234234msgid "Preview Share Item"
235235msgstr ""
236236
@@ -258,13 +258,13 @@ msgstr ""
258258msgid "Also installed"
259259msgstr "আরও ইন্সটল করা রয়েছে..."
260260
261−#: qml/DisabledScreenNotice.qml:87
261+#: qml/DisabledScreenNotice.qml:104
262262msgid ""
263263"Your device is now connected to an external display. Use this screen as a "
264−"touch pad to interact with the mouse."
264+"touch pad to interact with the pointer."
265265msgstr ""
266266
267−#: qml/Greeter/CoverPage.qml:107
267+#: qml/Greeter/CoverPage.qml:118
268268msgid "Unlock"
269269msgstr "লক খুলুন"
270270
@@ -276,11 +276,11 @@ msgstr ""
276276msgid "Tap to unlock"
277277msgstr "লক খোলার জন্য চাপ দিন"
278278
279−#: qml/Greeter/NarrowView.qml:54 qml/Wizard/Pages/passwd-confirm.qml:53
279+#: qml/Greeter/NarrowView.qml:54
280280msgid "Sorry, incorrect passphrase."
281281msgstr "দুঃখিত, পাসওয়ার্ডটি ভুল হয়েছে।"
282282
283−#: qml/Greeter/NarrowView.qml:55 qml/Wizard/Pages/passwd-confirm.qml:54
283+#: qml/Greeter/NarrowView.qml:55
284284msgid "Sorry, incorrect passcode."
285285msgstr "দুঃখিত, পাসকোডটি ভুল হয়েছে।"
286286
@@ -306,7 +306,7 @@ msgstr "ভুল পাসকোড প্রদান করলে, আপন
306306msgid "Enter %1"
307307msgstr "%1 লিখুন"
308308
309−#: qml/Greeter/NarrowView.qml:117 qml/Wizard/Pages/passwd-set.qml:60
309+#: qml/Greeter/NarrowView.qml:117
310310msgid "Enter passphrase"
311311msgstr "পাসওয়ার্ড লিখুন"
312312
@@ -332,7 +332,7 @@ msgstr "অনুগ্রহ করে আবার লিখুন"
332332msgid "Sorry, incorrect passcode"
333333msgstr "দুঃখিত, পাসকোড ভুল হয়েছে"
334334
335−#: qml/Notifications/NotificationMenuItemFactory.qml:129
335+#: qml/Notifications/NotificationMenuItemFactory.qml:124
336336msgid "Show password"
337337msgstr "পাসওয়ার্ড দেখান"
338338
@@ -344,62 +344,62 @@ msgstr "কলে ফিরে যেতে চাপ দিন..."
344344msgid "Conference"
345345msgstr "কনফারেন্স"
346346
347−#: qml/Panel/Indicators/MenuItemFactory.qml:753
347+#: qml/Panel/Indicators/MenuItemFactory.qml:762
348348msgid "Nothing is playing"
349349msgstr "কোন কিছু বাজছে না।"
350350
351−#: qml/Panel/Indicators/MenuItemFactory.qml:882
351+#: qml/Panel/Indicators/MenuItemFactory.qml:891
352352#, qt-format
353353msgid "%1 hour"
354354msgid_plural "%1 hours"
355355msgstr[0] "%1 ঘণ্টা"
356356msgstr[1] "%1 ঘণ্টা"
357357
358−#: qml/Panel/Indicators/MenuItemFactory.qml:886
358+#: qml/Panel/Indicators/MenuItemFactory.qml:895
359359#, qt-format
360360msgid "%1 minute"
361361msgid_plural "%1 minutes"
362362msgstr[0] "%1 মিনিট"
363363msgstr[1] "%1 মিনিট"
364364
365−#: qml/Panel/Indicators/MenuItemFactory.qml:891
365+#: qml/Panel/Indicators/MenuItemFactory.qml:900
366366#, qt-format
367367msgid "%1 second"
368368msgid_plural "%1 seconds"
369369msgstr[0] "%1 সেকেন্ড"
370370msgstr[1] "%1 সেকেন্ড"
371371
372−#: qml/Panel/Indicators/MenuItemFactory.qml:894
372+#: qml/Panel/Indicators/MenuItemFactory.qml:903
373373msgid "0 seconds"
374374msgstr "0 সেকেন্ড"
375375
376376#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
377−#: qml/Panel/Indicators/MenuItemFactory.qml:896
377+#: qml/Panel/Indicators/MenuItemFactory.qml:905
378378#, qt-format
379379msgid "%1 remaining"
380380msgstr "%1 বাকি"
381381
382−#: qml/Panel/Indicators/MenuItemFactory.qml:902
382+#: qml/Panel/Indicators/MenuItemFactory.qml:911
383383msgid "In queue…"
384384msgstr "অপেক্ষায় রয়েছে..."
385385
386−#: qml/Panel/Indicators/MenuItemFactory.qml:906
386+#: qml/Panel/Indicators/MenuItemFactory.qml:915
387387msgid "Downloading"
388388msgstr "ডাউনলোড হচ্ছে"
389389
390−#: qml/Panel/Indicators/MenuItemFactory.qml:908
390+#: qml/Panel/Indicators/MenuItemFactory.qml:917
391391msgid "Paused, tap to resume"
392392msgstr "থামানো, শুরু করতে চাপ দিন"
393393
394−#: qml/Panel/Indicators/MenuItemFactory.qml:910
394+#: qml/Panel/Indicators/MenuItemFactory.qml:919
395395msgid "Canceled"
396396msgstr "বাতিল হয়েছে"
397397
398−#: qml/Panel/Indicators/MenuItemFactory.qml:912
398+#: qml/Panel/Indicators/MenuItemFactory.qml:921
399399msgid "Finished"
400400msgstr "শেষ"
401401
402−#: qml/Panel/Indicators/MenuItemFactory.qml:914
402+#: qml/Panel/Indicators/MenuItemFactory.qml:923
403403msgid "Failed, tap to retry"
404404msgstr "ব্যার্থ হয়েছে, পুনরায় চেষ্টা করতে চাপ দিন"
405405
@@ -419,259 +419,379 @@ 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−
430−#: qml/Tutorial/TutorialBottom.qml:28
431−msgid "Open special menus"
422+#: qml/Stages/SideStage.qml:76
423+msgid "Drag using 3 fingers any application from one window to the other"
432424msgstr ""
433425
434−#: qml/Tutorial/TutorialBottom.qml:29
435−msgid "Swipe up from the bottom edge."
436−msgstr "নিচের প্রান্ত হতে উপরের দিকে সোয়াইপ করুন।"
437−
438−#: qml/Tutorial/TutorialBottomFinish.qml:24
439−msgid "This action does different things for different apps"
440−msgstr "এই কাজটি বিভিন্ন অ্যাপের জন্য ভিন্ন ভিন্ন ভাবে কাজ করে।"
426+#: qml/Tutorial/TutorialBottom.qml:78
427+msgid "Swipe up to add a contact"
428+msgstr ""
441429
442−#: qml/Tutorial/TutorialBottomFinish.qml:25
443−msgid "Tap here to finish."
430+#: qml/Tutorial/TutorialBottom.qml:80
431+msgid "Swipe up for favorite calculations"
444432msgstr ""
445433
446−#: qml/Tutorial/TutorialContent.qml:80 qml/Tutorial/TutorialLeftFinish.qml:25
447−#: qml/Tutorial/TutorialRight.qml:144
448−msgid "Tap here to continue."
449−msgstr "অগ্রসর হওয়ার জন্য এখানে চাপ দিন।"
434+#: qml/Tutorial/TutorialBottom.qml:82
435+msgid "Swipe up for recent calls"
436+msgstr ""
450437
451−#: qml/Tutorial/TutorialLeft.qml:26
452−msgid "Open the launcher"
453−msgstr "লঞ্চার খুলুন"
438+#: qml/Tutorial/TutorialBottom.qml:84
439+msgid "Swipe up to create a message"
440+msgstr ""
454441
455−#: qml/Tutorial/TutorialLeft.qml:27
456−msgid "Short swipe from the left edge."
442+#: qml/Tutorial/TutorialBottom.qml:85
443+msgid "Swipe up to manage the app"
457444msgstr ""
458445
459−#: qml/Tutorial/TutorialLeftFinish.qml:24
460−msgid "These are the shortcuts to favorite apps"
461−msgstr "এগুলো আপনার প্রিয় অ্যাপেরর শর্টকাট"
446+#: qml/Tutorial/TutorialLeftLong.qml:47
447+msgid "Long swipe from the left edge to open the Today scope"
448+msgstr ""
462449
463−#: qml/Tutorial/TutorialPage.qml:178
464−msgid "You almost got it!"
465−msgstr "আপনি প্রায় পেরে গেছেন!"
450+#: qml/Tutorial/TutorialLeft.qml:47
451+msgid "Swipe from the left edge to open the launcher"
452+msgstr ""
466453
467−#: qml/Tutorial/TutorialPage.qml:195
468−msgid "Try again."
469−msgstr "আবার চেষ্টা করুন"
454+#: qml/Tutorial/TutorialRight.qml:55
455+msgid "Push your mouse against the right edge to view your open apps"
456+msgstr ""
470457
471−#: qml/Tutorial/TutorialRight.qml:31
472−msgid "To view open apps"
473−msgstr "সচল অ্যাপগুলো দেখার জন্য"
458+#: qml/Tutorial/TutorialRight.qml:56
459+msgid "Short or long swipe from the right edge to view your open apps"
460+msgstr ""
474461
475−#: qml/Tutorial/TutorialRight.qml:32
476−msgid "Long swipe from the right edge."
462+#: qml/Tutorial/TutorialTop.qml:53
463+msgid "Swipe from the top right edge to open the notification bar"
477464msgstr ""
478465
479−#: qml/Tutorial/TutorialRight.qml:122
480−msgid "View all your running tasks."
466+#: qml/Tutorial/TutorialTop.qml:54
467+msgid "Swipe from the top edge to open the notification bar"
481468msgstr ""
482469
483−#: qml/Wizard/Page.qml:89
470+#: qml/Wizard/Page.qml:54
484471msgctxt "Button: Go back one page in the Wizard"
485472msgid "Back"
486473msgstr ""
487474
488475#: qml/Wizard/Pages/10-welcome.qml:27
489−msgid "Hi!"
476+msgid "Language"
490477msgstr ""
491478
492−#: qml/Wizard/Pages/10-welcome.qml:44
493−msgid "Welcome to your Ubuntu device."
479+#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
480+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
481+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
482+#: qml/Wizard/Pages/75-report-check.qml:84
483+#: qml/Wizard/Pages/passcode-desktop.qml:124
484+#: qml/Wizard/Pages/password-set.qml:141
485+msgid "Next"
494486msgstr ""
495487
496−#: qml/Wizard/Pages/10-welcome.qml:52
497−msgid "Let’s get started."
498−msgstr "আসুন শুরু করা যাক।"
488+#: qml/Wizard/Pages/30-wifi.qml:29
489+msgid "Connect to Wi‑Fi"
490+msgstr ""
499491
500−#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:133
501−#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
502−#: qml/Wizard/Pages/60-reporting.qml:60 qml/Wizard/Pages/passwd-confirm.qml:82
503−#: qml/Wizard/Pages/passwd-set.qml:90
504−msgid "Continue"
505−msgstr "পরবর্তী"
492+#: qml/Wizard/Pages/30-wifi.qml:130
493+msgid "Connected"
494+msgstr ""
506495
507−#: qml/Wizard/Pages/20-sim.qml:25
508−msgid "Add a SIM card and restart your device"
509−msgstr "সিম কার্ড যোগ করুন এবং ফোন পুনরায় চালু করুন।"
496+#: qml/Wizard/Pages/30-wifi.qml:163
497+msgid "Available Wi-Fi networks"
498+msgstr ""
510499
511−#: qml/Wizard/Pages/20-sim.qml:59
512−msgid "Without it, you won’t be able to make calls or use text messaging."
513−msgstr "এটি ছাড়া, আপনি ফোন কল বা টেক্সট মেসেজ ব্যবহার করতে পারবেন না।"
500+#: qml/Wizard/Pages/30-wifi.qml:164
501+msgid "No available Wi-Fi networks"
502+msgstr ""
514503
515−#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
504+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
505+#: qml/Wizard/Pages/sim.qml:101
516506msgid "Skip"
517507msgstr "এড়িয়ে যান"
518508
519−#: qml/Wizard/Pages/30-passwd-type.qml:39
520−msgid "Lock security"
521−msgstr "নিরাপত্তা লক"
509+#: qml/Wizard/Pages/40-location.qml:27
510+msgid "Location Services"
511+msgstr ""
522512
523−#: qml/Wizard/Pages/30-passwd-type.qml:79
524−msgid "Please select how you’d like to unlock your device."
513+#: qml/Wizard/Pages/40-location.qml:83
514+msgid ""
515+"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
516+"(recommended)"
525517msgstr ""
526518
527−#: qml/Wizard/Pages/30-passwd-type.qml:102
528−msgctxt "Label: Type of security method"
529−msgid "Swipe"
519+#: qml/Wizard/Pages/40-location.qml:105
520+#, qt-format
521+msgid "By selecting this option you agree to the Nokia HERE %1."
530522msgstr ""
531523
532−#: qml/Wizard/Pages/30-passwd-type.qml:103
533−msgctxt "Label: Description of security method"
534−msgid "No security"
535−msgstr "কোন নিরাপত্তা নেই"
524+#: qml/Wizard/Pages/40-location.qml:106
525+msgctxt "part of: Nokia HERE terms and conditions"
526+msgid "terms and conditions"
527+msgstr ""
528+
529+#: qml/Wizard/Pages/40-location.qml:160
530+msgid "GPS only"
531+msgstr ""
532+
533+#: qml/Wizard/Pages/40-location.qml:214
534+msgid "Don't use my location"
535+msgstr ""
536+
537+#: qml/Wizard/Pages/40-location.qml:260
538+msgid "You can change it later in System Settings."
539+msgstr ""
536540
537−#: qml/Wizard/Pages/30-passwd-type.qml:105
541+#: qml/Wizard/Pages/50-timezone.qml:29
542+msgid "Time Zone"
543+msgstr ""
544+
545+#: qml/Wizard/Pages/50-timezone.qml:178
546+msgid "Enter your city"
547+msgstr ""
548+
549+#: qml/Wizard/Pages/60-account.qml:24
550+msgid "Personalize Your Device"
551+msgstr ""
552+
553+#: qml/Wizard/Pages/60-account.qml:48
554+msgid "Preferred Name"
555+msgstr ""
556+
557+#: qml/Wizard/Pages/70-passwd-type.qml:39
558+msgid "Lock Screen"
559+msgstr ""
560+
561+#: qml/Wizard/Pages/70-passwd-type.qml:101
538562msgctxt "Label: Type of security method"
539−msgid "Passcode"
540−msgstr "পাসকোড"
563+msgid "Create new password"
564+msgstr ""
541565
542−#: qml/Wizard/Pages/30-passwd-type.qml:106
543−msgctxt "Label: Description of security method"
544−msgid "4 digits only"
545−msgstr "কেবল মাত্র ৪টি সংখ্যা"
566+#: qml/Wizard/Pages/70-passwd-type.qml:103
567+msgctxt "Label: Type of security method"
568+msgid "Create passcode (numbers only)"
569+msgstr ""
546570
547−#: qml/Wizard/Pages/30-passwd-type.qml:108
571+#: qml/Wizard/Pages/70-passwd-type.qml:105
548572msgctxt "Label: Type of security method"
549−msgid "Passphrase"
573+msgid "No lock code"
550574msgstr ""
551575
552−#: qml/Wizard/Pages/30-passwd-type.qml:109
553−msgctxt "Label: Description of security method"
554−msgid "Numbers and letters"
576+#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
577+msgid "Privacy Policy"
555578msgstr ""
556579
557−#: qml/Wizard/Pages/40-wifi.qml:29
558−msgid "Connect to Wi‑Fi"
580+#: qml/Wizard/Pages/75-report-check.qml:26
581+msgid "Help Us Improve"
582+msgstr ""
583+
584+#: qml/Wizard/Pages/75-report-check.qml:59
585+msgid "Improve system performance by sending us crashes and error reports."
559586msgstr ""
560587
561−#: qml/Wizard/Pages/40-wifi.qml:168
562−msgid "Available networks…"
588+#: qml/Wizard/Pages/75-report-check.qml:60
589+msgid "Privacy policy"
563590msgstr ""
564591
565−#: qml/Wizard/Pages/40-wifi.qml:169
566−msgid "No available networks."
592+#: qml/Wizard/Pages/80-finished.qml:89
593+msgid "Welcome to Ubuntu"
567594msgstr ""
568595
569−#: qml/Wizard/Pages/50-location.qml:27
570−msgid "Location"
596+#: qml/Wizard/Pages/80-finished.qml:104
597+msgid "You are ready to use your device now"
571598msgstr ""
572599
573−#: qml/Wizard/Pages/50-location.qml:62
574−msgid "Let the phone detect your location:"
600+#: qml/Wizard/Pages/80-finished.qml:124
601+msgid "Get Started"
575602msgstr ""
576603
577−#: qml/Wizard/Pages/50-location.qml:69
578−msgid "Using GPS only (less accurate)"
604+#: qml/Wizard/Pages/here-terms.qml:25
605+msgid "Terms & Conditions"
579606msgstr ""
580607
581−#: qml/Wizard/Pages/50-location.qml:86
582−msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
608+#: qml/Wizard/Pages/here-terms.qml:69
609+msgid "Your device uses positioning technologies provided by HERE."
583610msgstr ""
584611
585−#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
586−#: qml/Wizard/Pages/50-location.qml:103
612+#: qml/Wizard/Pages/here-terms.qml:81
587613msgid ""
588−"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
589−"conditions</a>."
614+"To provide you with positioning services and to improve their quality, HERE "
615+"collects information about nearby cell towers and Wi-Fi hotspots around your "
616+"current location whenever your position is being found."
590617msgstr ""
591618
592−#: qml/Wizard/Pages/50-location.qml:112
593−msgid "Not at all"
619+#: qml/Wizard/Pages/here-terms.qml:93
620+msgid ""
621+"The information collected is used to analyze the service and to improve the "
622+"use of service, but not to identify you personally."
594623msgstr ""
595624
596−#: qml/Wizard/Pages/50-location.qml:124
597−msgid "You can change your mind later in <b>System Settings</b>."
625+#: qml/Wizard/Pages/here-terms.qml:106
626+#, qt-format
627+msgid "By continuing, you agree to the HERE platform %1 and %2."
598628msgstr ""
599629
600−#: qml/Wizard/Pages/60-reporting.qml:26
601−msgid "Improving your experience"
630+#: qml/Wizard/Pages/here-terms.qml:107
631+msgid "Service Terms"
602632msgstr ""
603633
604−#: qml/Wizard/Pages/60-reporting.qml:46
605−msgid ""
606−"Your phone is set up to automatically report errors to Canonical and its "
607−"partners, the makers of the operating system."
634+#: qml/Wizard/Pages/passcode-confirm.qml:43
635+#: qml/Wizard/Pages/passcode-desktop.qml:80
636+msgid "Confirm passcode"
608637msgstr ""
609638
610−#: qml/Wizard/Pages/60-reporting.qml:53
611−msgid ""
612−"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
613−"Privacy</b>"
639+#: qml/Wizard/Pages/passcode-confirm.qml:45
640+msgid "Incorrect passcode."
614641msgstr ""
615642
616−#: qml/Wizard/Pages/80-finished.qml:24
617−msgid "All done"
643+#: qml/Wizard/Pages/passcode-confirm.qml:45
644+msgctxt "Enter the passcode again"
645+msgid "Please re-enter."
618646msgstr ""
619647
620−#: qml/Wizard/Pages/80-finished.qml:39
621−msgid "Nice work!"
648+#: qml/Wizard/Pages/passcode-desktop.qml:30
649+msgid "Lock Screen Passcode"
622650msgstr ""
623651
624−#: qml/Wizard/Pages/80-finished.qml:46
625−msgid "Your device is now ready to use."
652+#: qml/Wizard/Pages/passcode-desktop.qml:56
653+msgid "Enter 4 numbers to setup your passcode"
626654msgstr ""
627655
628−#: qml/Wizard/Pages/80-finished.qml:53
629−msgid "Finish"
656+#: qml/Wizard/Pages/passcode-desktop.qml:65
657+#: qml/Wizard/Pages/passcode-set.qml:54
658+msgid "Choose passcode"
630659msgstr ""
631660
632−#: qml/Wizard/Pages/here-terms.qml:27
633−msgid "Terms & Conditions"
661+#: qml/Wizard/Pages/passcode-desktop.qml:105
662+msgid "Passcode too short"
634663msgstr ""
635664
636−#: qml/Wizard/Pages/passwd-confirm.qml:49
637−msgid "Confirm passphrase"
665+#: qml/Wizard/Pages/passcode-desktop.qml:107
666+msgid "Passcodes match"
638667msgstr ""
639668
640−#: qml/Wizard/Pages/passwd-confirm.qml:50
641−msgid "Confirm passcode"
669+#: qml/Wizard/Pages/passcode-desktop.qml:109
670+msgid "Passcodes do not match"
642671msgstr ""
643672
644−#: qml/Wizard/Pages/passwd-confirm.qml:53
645−#: qml/Wizard/Pages/passwd-confirm.qml:54
646−msgid "Please try again."
673+#: qml/Wizard/Pages/passcode-set.qml:62
674+msgid "Passcode must be 4 characters long"
647675msgstr ""
648676
649−#: qml/Wizard/Pages/passwd-set.qml:61
650−msgid "Choose your passcode"
677+#: qml/Wizard/Pages/password-set.qml:30
678+msgid "Lock Screen Password"
651679msgstr ""
652680
653−#: qml/Wizard/Pages/passwd-set.qml:68
654−msgid "Passphrase must be 4 characters long"
681+#: qml/Wizard/Pages/password-set.qml:61
682+msgid "Enter at least 8 characters"
655683msgstr ""
656684
657−#. Translators: This is the arrow for "Back" buttons
658−#: qml/Wizard/StackButton.qml:39
659−#, qt-format
660−msgid "〈 %1"
685+#: qml/Wizard/Pages/password-set.qml:73
686+msgid "Choose password"
661687msgstr ""
662688
663−#. Translators: This is the arrow for "Forward" buttons
664−#: qml/Wizard/StackButton.qml:42
665−#, qt-format
666−msgid "%1 〉"
689+#: qml/Wizard/Pages/password-set.qml:103
690+msgid "Confirm password"
667691msgstr ""
668692
693+#: qml/Wizard/Pages/sim.qml:27
694+msgid "No SIM card installed"
695+msgstr ""
696+
697+#: qml/Wizard/Pages/sim.qml:54
698+msgid "SIM card added"
699+msgstr ""
700+
701+#: qml/Wizard/Pages/sim.qml:55
702+msgid "You must restart the device to access the mobile network."
703+msgstr ""
704+
705+#: qml/Wizard/Pages/sim.qml:59
706+msgid "Restart"
707+msgstr "পুনরায় চালু"
708+
709+#: qml/Wizard/Pages/sim.qml:78
710+msgid "You won’t be able to make calls or use text messaging without a SIM."
711+msgstr ""
712+
713+#: qml/Wizard/Pages/sim.qml:90
714+msgid "To proceed with no SIM tap Skip."
715+msgstr ""
716+
717+#: qml/Wizard/PasswordMeter.qml:87
718+msgid "Passwords match"
719+msgstr ""
720+
721+#: qml/Wizard/PasswordMeter.qml:89
722+msgid "Passwords do not match"
723+msgstr ""
724+
725+#: qml/Wizard/PasswordMeter.qml:93
726+msgid "Strong password"
727+msgstr ""
728+
729+#: qml/Wizard/PasswordMeter.qml:95
730+msgid "Fair password"
731+msgstr ""
732+
733+#: qml/Wizard/PasswordMeter.qml:97
734+msgid "Weak password"
735+msgstr ""
736+
737+#: qml/Wizard/PasswordMeter.qml:99
738+msgid "Very weak password"
739+msgstr ""
740+
741+#~ msgctxt "Button: Reboot the system"
742+#~ msgid "Reboot"
743+#~ msgstr "পুনরায় চালু করুন"
744+
745+#~ msgid "See all"
746+#~ msgstr "সব দেখুন"
747+
748+#~ msgid "See less"
749+#~ msgstr "কম দেখুন"
750+
751+#~ msgid "This action does different things for different apps"
752+#~ msgstr "এই কাজটি বিভিন্ন অ্যাপের জন্য ভিন্ন ভিন্ন ভাবে কাজ করে।"
753+
754+#~ msgid "To view open apps"
755+#~ msgstr "সচল অ্যাপগুলো দেখার জন্য"
756+
669757#~ msgid "Welcome to your Ubuntu phone."
670758#~ msgstr "আপনার উবুন্টু ফোনে স্বাগতম।"
671759
760+#~ msgid "Try again."
761+#~ msgstr "আবার চেষ্টা করুন"
762+
763+#~ msgid "You almost got it!"
764+#~ msgstr "আপনি প্রায় পেরে গেছেন!"
765+
766+#~ msgid "Open the launcher"
767+#~ msgstr "লঞ্চার খুলুন"
768+
769+#~ msgctxt "Label: Type of security method"
770+#~ msgid "Passcode"
771+#~ msgstr "পাসকোড"
772+
773+#~ msgid "Add a SIM card and restart your device"
774+#~ msgstr "সিম কার্ড যোগ করুন এবং ফোন পুনরায় চালু করুন।"
775+
776+#~ msgid "Without it, you won’t be able to make calls or use text messaging."
777+#~ msgstr "এটি ছাড়া, আপনি ফোন কল বা টেক্সট মেসেজ ব্যবহার করতে পারবেন না।"
778+
779+#~ msgid "Tap here to continue."
780+#~ msgstr "অগ্রসর হওয়ার জন্য এখানে চাপ দিন।"
781+
782+#~ msgid "Swipe up from the bottom edge."
783+#~ msgstr "নিচের প্রান্ত হতে উপরের দিকে সোয়াইপ করুন।"
784+
785+#~ msgctxt "Label: Description of security method"
786+#~ msgid "No security"
787+#~ msgstr "কোন নিরাপত্তা নেই"
788+
672789#~ msgid "Log out"
673790#~ msgstr "লগ অাউট"
674791
792+#~ msgid "Are you sure you want to shut down?"
793+#~ msgstr "আপনি কি কম্পিউটার বন্ধ করতে চান?"
794+
675795#~ msgid "Reboot"
676796#~ msgstr "পুনরায় চালু করুন"
677797
@@ -681,9 +801,6 @@ msgstr ""
681801#~ msgid "Power off"
682802#~ msgstr "বন্ধ করুন"
683803
684−#~ msgid "Restart"
685−#~ msgstr "পুনরায় চালু"
686−
687804#~ msgid "Top edge"
688805#~ msgstr "উপরের প্রান্ত"
689806
@@ -726,8 +843,38 @@ msgstr ""
726843#~ msgid "Speak Now..."
727844#~ msgstr "এখন বলুন..."
728845
846+#~ msgid "Unlock SIM"
847+#~ msgstr "সিম লক খুলুন করুন"
848+
849+#~ msgid "Roaming"
850+#~ msgstr "রোমিং"
851+
729852#~ msgid "Please re-enter"
730853#~ msgstr "অনুগ্রহ করে আবার লিখুন"
731854
855+#~ msgctxt "Button: Shut down the system"
856+#~ msgid "Shut down"
857+#~ msgstr "বন্ধ করুন"
858+
859+#~ msgctxt "Title: Reboot/Shut down dialog"
860+#~ msgid "Shut down"
861+#~ msgstr "বন্ধ করুন"
862+
863+#~ msgid "Let’s get started."
864+#~ msgstr "আসুন শুরু করা যাক।"
865+
866+#~ msgid "These are the shortcuts to favorite apps"
867+#~ msgstr "এগুলো আপনার প্রিয় অ্যাপেরর শর্টকাট"
868+
869+#~ msgid "Lock security"
870+#~ msgstr "নিরাপত্তা লক"
871+
732872#~ msgid "Please select how you’d like to unlock your phone."
733873#~ msgstr "আপনি কিভাবে ফোনের লক খুলতে চান তা নির্ধারণ করুন।"
874+
875+#~ msgctxt "Label: Description of security method"
876+#~ msgid "4 digits only"
877+#~ msgstr "কেবল মাত্র ৪টি সংখ্যা"
878+
879+#~ msgid "Continue"
880+#~ msgstr "পরবর্তী"
po/br.po+515−268
@@ -7,31 +7,31 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-02-16 03:29+0000\n"
11−"PO-Revision-Date: 2016-02-22 12:29+0000\n"
10+"POT-Creation-Date: 2016-04-27 15:01+0000\n"
11+"PO-Revision-Date: 2016-04-27 12:20+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-23 06:03+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-04-30 05:36+0000\n"
19+"X-Generator: Launchpad (build 17995)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
2323msgstr "Ger-tremen : "
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 "Spilhennañ ar verradenn"
2929
30−#: plugins/Unity/Launcher/launcheritem.cpp:52
30+#: plugins/Unity/Launcher/launcheritem.cpp:53
3131msgid "Quit"
3232msgstr "Mont kuit"
3333
34−#: plugins/Unity/Launcher/launcheritem.cpp:106
34+#: plugins/Unity/Launcher/launcheritem.cpp:107
3535msgid "Unpin shortcut"
3636msgstr "Dispilhennañ ar verradenn"
3737
@@ -77,53 +77,35 @@ msgctxt "Button: Log out from the system"
7777msgid "Log Out"
7878msgstr "Digevreañ"
7979
80−#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:194
81−#: qml/Components/Dialogs.qml:253
80+#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
81+#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
82+#: qml/Wizard/Pages/passcode-set.qml:32
8283msgid "Cancel"
8384msgstr "Nullañ"
8485
8586#: qml/Components/Dialogs.qml:173
86−msgctxt "Title: Reboot/Shut down dialog"
87−msgid "Shut down"
88−msgstr "Lazhañ ar benveg"
89−
90−#: qml/Components/Dialogs.qml:174
91−msgid "Are you sure you want to shut down?"
92−msgstr "Ha sur oc'h e fell deoc'h lazhañ ar benveg ?"
93−
94−#: qml/Components/Dialogs.qml:176
95−msgctxt "Button: Reboot the system"
96−msgid "Reboot"
97−msgstr "Adloc'hañ"
98−
99−#: qml/Components/Dialogs.qml:185
100−msgctxt "Button: Shut down the system"
101−msgid "Shut down"
102−msgstr "Lazhañ ar benveg"
103−
104−#: qml/Components/Dialogs.qml:207
10587msgctxt "Title: Reboot dialog"
10688msgid "Reboot"
10789msgstr "Adloc'hañ"
10890
109−#: qml/Components/Dialogs.qml:208
91+#: qml/Components/Dialogs.qml:174
11092msgid "Are you sure you want to reboot?"
11193msgstr "Ha sur oc'h e fell deoc'h adloc'hañ ?"
11294
113−#: qml/Components/Dialogs.qml:210
95+#: qml/Components/Dialogs.qml:176
11496msgid "No"
11597msgstr "N'on ket"
11698
117−#: qml/Components/Dialogs.qml:217
99+#: qml/Components/Dialogs.qml:182
118100msgid "Yes"
119101msgstr "Ya"
120102
121−#: qml/Components/Dialogs.qml:232
103+#: qml/Components/Dialogs.qml:197
122104msgctxt "Title: Power off/Restart dialog"
123105msgid "Power"
124106msgstr "Enaouiñ"
125107
126−#: qml/Components/Dialogs.qml:233
108+#: qml/Components/Dialogs.qml:198
127109msgid ""
128110"Are you sure you would like\n"
129111"to power off?"
@@ -131,25 +113,25 @@ msgstr ""
131113"Ha sur oc'h e fell deoc'h\n"
132114"troc'hañ an tredan ?"
133115
134−#: qml/Components/Dialogs.qml:235
116+#: qml/Components/Dialogs.qml:200
135117msgctxt "Button: Power off the system"
136118msgid "Power off"
137119msgstr "Lazhañ"
138120
139−#: qml/Components/Dialogs.qml:244
121+#: qml/Components/Dialogs.qml:209
140122msgctxt "Button: Restart the system"
141123msgid "Restart"
142124msgstr "Adloc'hañ"
143125
144−#: qml/Components/Lockscreen.qml:245
126+#: qml/Components/Lockscreen.qml:231
145127msgid "Return to Call"
146128msgstr "Distreiñ d'ar bellgomzadenn"
147129
148−#: qml/Components/Lockscreen.qml:245
130+#: qml/Components/Lockscreen.qml:231
149131msgid "Emergency Call"
150132msgstr "Pellgomzadenn vallus"
151133
152−#: qml/Components/Lockscreen.qml:277
134+#: qml/Components/Lockscreen.qml:263
153135msgid "OK"
154136msgstr "Mat eo"
155137
@@ -158,9 +140,12 @@ msgid "Apps may have unsaved data:"
158140msgstr "Roadennoù ha n'int ket enrollet a c'hall bezañ gant an arloadoù :"
159141
160142#: qml/Components/ModeSwitchWarningDialog.qml:57
143+msgctxt ""
144+"Re-dock means connect the device again to an external screen/mouse/keyboard"
161145msgid "Re-dock, save your work and close these apps to continue."
162146msgstr ""
163−"Adlugit, enrollit ho labour ha serrit an arloadoù-mañ evit kenderc'hel."
147+"Adkevreit ouzh ar savlec'h degemer, enrollot ho labour ha serrit an arloadoù-"
148+"mañ evit kenderc'hel."
164149
165150#: qml/Components/ModeSwitchWarningDialog.qml:63
166151msgid "Or force close now (unsaved data will be lost)."
@@ -179,42 +164,58 @@ msgstr "Adkevreañ bremañ !"
179164msgid "Close all"
180165msgstr "Serriñ pep tra"
181166
182−#: qml/Dash/DashPageHeader.qml:266
167+#: qml/Dash/DashPageHeader.qml:337
183168msgctxt "Button: Open the Ubuntu Store"
184169msgid "Store"
185170msgstr "Stal"
186171
187−#: qml/Dash/DashPageHeader.qml:273
172+#: qml/Dash/DashPageHeader.qml:344
188173msgctxt "Button: Start a search in the current dash scope"
189174msgid "Search"
190175msgstr "Klask"
191176
192−#: qml/Dash/DashPageHeader.qml:283
177+#: qml/Dash/DashPageHeader.qml:354
193178msgctxt "Button: Show the current dash scope settings"
194179msgid "Settings"
195180msgstr "Arventennoù"
196181
197−#: qml/Dash/DashPageHeader.qml:290
182+#: qml/Dash/DashPageHeader.qml:361
198183msgid "Remove from Favorites"
199184msgstr "Lemel eus ar sinedoù"
200185
201−#: qml/Dash/DashPageHeader.qml:290
186+#: qml/Dash/DashPageHeader.qml:361
202187msgid "Add to Favorites"
203188msgstr "Ouzhpennañ d'ar sinedoù"
204189
205−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
206−msgid "See less"
207−msgstr "Gwelet nebeutoc'h"
190+#: qml/Dash/FiltersPopover.qml:60
191+msgid "Refine your results"
192+msgstr "Purañ ho tisoc'hoù"
208193
209−#: qml/Dash/GenericScopeView.qml:587
210−msgid "See all"
211−msgstr "Gwelet pep tra"
194+#: qml/Dash/FiltersPopover.qml:69
195+msgid "Reset"
196+msgstr "Adderaouekaat"
212197
213−#: qml/Dash/GenericScopeView.qml:649
198+#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
199+msgid "Show less"
200+msgstr ""
201+
202+#: qml/Dash/GenericScopeView.qml:570
203+msgid "Show all"
204+msgstr ""
205+
206+#: qml/Dash/GenericScopeView.qml:627
214207msgctxt "Label: Hint for dash search line edit"
215208msgid "Search"
216209msgstr "Klask"
217210
211+#: qml/Dash/PageHeaderExtraPanel.qml:55
212+msgid "Recent Searches"
213+msgstr "Enklaskoù graet nevez zo"
214+
215+#: qml/Dash/PageHeaderExtraPanel.qml:66
216+msgid "Clear All"
217+msgstr "Diverkañ pep tra"
218+
218219#: qml/Dash/Previews/PreviewActionCombo.qml:35
219220msgid "More..."
220221msgstr "Muioc'h..."
@@ -236,7 +237,7 @@ msgstr "Priziit an dra-mañ"
236237msgid "Add a review"
237238msgstr "Ouzhpennañ un ali"
238239
239−#: qml/Dash/Previews/PreviewSharing.qml:50
240+#: qml/Dash/Previews/PreviewSharing.qml:66
240241msgid "Preview Share Item"
241242msgstr "Rakwelet an elfenn lodet"
242243
@@ -264,15 +265,13 @@ msgstr "Er gêr"
264265msgid "Also installed"
265266msgstr "Staliet ivez"
266267
267−#: qml/DisabledScreenNotice.qml:87
268+#: qml/DisabledScreenNotice.qml:104
268269msgid ""
269270"Your device is now connected to an external display. Use this screen as a "
270−"touch pad to interact with the mouse."
271+"touch pad to interact with the pointer."
271272msgstr ""
272−"N'eo ket kevreet ho penveg ouzh un diskwel diavaez. Implijit ar skramm-mañ "
273−"da douch evit ober gant al logodenn."
274273
275−#: qml/Greeter/CoverPage.qml:107
274+#: qml/Greeter/CoverPage.qml:118
276275msgid "Unlock"
277276msgstr "Dibrennañ"
278277
@@ -284,11 +283,11 @@ msgstr "Esaeañ en-dro"
284283msgid "Tap to unlock"
285284msgstr "Pouezañ evit dibrennañ"
286285
287−#: qml/Greeter/NarrowView.qml:54 qml/Wizard/Pages/passwd-confirm.qml:53
286+#: qml/Greeter/NarrowView.qml:54
288287msgid "Sorry, incorrect passphrase."
289288msgstr "Siwazh, frazenn-dremen direizh"
290289
291−#: qml/Greeter/NarrowView.qml:55 qml/Wizard/Pages/passwd-confirm.qml:54
290+#: qml/Greeter/NarrowView.qml:55
292291msgid "Sorry, incorrect passcode."
293292msgstr "Siwazh, kod-tremen direizh"
294293
@@ -317,7 +316,7 @@ msgstr ""
317316msgid "Enter %1"
318317msgstr "Merkañ %1"
319318
320−#: qml/Greeter/NarrowView.qml:117 qml/Wizard/Pages/passwd-set.qml:60
319+#: qml/Greeter/NarrowView.qml:117
321320msgid "Enter passphrase"
322321msgstr "Merkañ ar frazenn-dremen"
323322
@@ -343,7 +342,7 @@ msgstr "Adverkañ, mar plij"
343342msgid "Sorry, incorrect passcode"
344343msgstr "Digarezit, kod-tremen direizh"
345344
346−#: qml/Notifications/NotificationMenuItemFactory.qml:129
345+#: qml/Notifications/NotificationMenuItemFactory.qml:124
347346msgid "Show password"
348347msgstr "Diskouez ar ger-tremen"
349348
@@ -355,62 +354,62 @@ msgstr "Touchit evit distreiñ d'ar bellgomzadenn..."
355354msgid "Conference"
356355msgstr "Kendiviz"
357356
358−#: qml/Panel/Indicators/MenuItemFactory.qml:753
357+#: qml/Panel/Indicators/MenuItemFactory.qml:762
359358msgid "Nothing is playing"
360359msgstr "Ne lenner netra bremañ"
361360
362−#: qml/Panel/Indicators/MenuItemFactory.qml:882
361+#: qml/Panel/Indicators/MenuItemFactory.qml:891
363362#, qt-format
364363msgid "%1 hour"
365364msgid_plural "%1 hours"
366365msgstr[0] "%1 eur"
367366msgstr[1] "%1 eur"
368367
369−#: qml/Panel/Indicators/MenuItemFactory.qml:886
368+#: qml/Panel/Indicators/MenuItemFactory.qml:895
370369#, qt-format
371370msgid "%1 minute"
372371msgid_plural "%1 minutes"
373372msgstr[0] "%1 vunutenn"
374373msgstr[1] "%1 vunutenn"
375374
376−#: qml/Panel/Indicators/MenuItemFactory.qml:891
375+#: qml/Panel/Indicators/MenuItemFactory.qml:900
377376#, qt-format
378377msgid "%1 second"
379378msgid_plural "%1 seconds"
380379msgstr[0] "%1 eilenn"
381380msgstr[1] "%1 eilenn"
382381
383−#: qml/Panel/Indicators/MenuItemFactory.qml:894
382+#: qml/Panel/Indicators/MenuItemFactory.qml:903
384383msgid "0 seconds"
385384msgstr "0 eilenn"
386385
387386#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
388−#: qml/Panel/Indicators/MenuItemFactory.qml:896
387+#: qml/Panel/Indicators/MenuItemFactory.qml:905
389388#, qt-format
390389msgid "%1 remaining"
391390msgstr "%1 o chom"
392391
393−#: qml/Panel/Indicators/MenuItemFactory.qml:902
392+#: qml/Panel/Indicators/MenuItemFactory.qml:911
394393msgid "In queue…"
395394msgstr "El lostennad..."
396395
397−#: qml/Panel/Indicators/MenuItemFactory.qml:906
396+#: qml/Panel/Indicators/MenuItemFactory.qml:915
398397msgid "Downloading"
399398msgstr "O pellgargañ"
400399
401−#: qml/Panel/Indicators/MenuItemFactory.qml:908
400+#: qml/Panel/Indicators/MenuItemFactory.qml:917
402401msgid "Paused, tap to resume"
403402msgstr "Ehanet, touchit evit adkregiñ"
404403
405−#: qml/Panel/Indicators/MenuItemFactory.qml:910
404+#: qml/Panel/Indicators/MenuItemFactory.qml:919
406405msgid "Canceled"
407406msgstr "Nullet"
408407
409−#: qml/Panel/Indicators/MenuItemFactory.qml:912
408+#: qml/Panel/Indicators/MenuItemFactory.qml:921
410409msgid "Finished"
411410msgstr "Echu"
412411
413−#: qml/Panel/Indicators/MenuItemFactory.qml:914
412+#: qml/Panel/Indicators/MenuItemFactory.qml:923
414413msgid "Failed, tap to retry"
415414msgstr "C'hwitet, touchit evit adkregiñ"
416415
@@ -430,259 +429,324 @@ msgctxt "Button: Call back on phone"
430429msgid "Call back"
431430msgstr "Gervel en-dro"
432431
433−#: qml/Panel/Indicators/ModemInfoItem.qml:105
434−msgid "Unlock SIM"
435−msgstr "Dibrennañ ar gartenn SIM"
436−
437−#: qml/Panel/Indicators/RoamingIndication.qml:27
438−msgid "Roaming"
439−msgstr "O kantren"
440−
441−#: qml/Tutorial/TutorialBottom.qml:28
442−msgid "Open special menus"
443−msgstr "Digeriñ al lañserioù ispisial"
444−
445−#: qml/Tutorial/TutorialBottom.qml:29
446−msgid "Swipe up from the bottom edge."
447−msgstr "Riklit war-du an nec'h adalek an traoñ"
432+#: qml/Stages/SideStage.qml:76
433+msgid "Drag using 3 fingers any application from one window to the other"
434+msgstr ""
448435
449−#: qml/Tutorial/TutorialBottomFinish.qml:24
450−msgid "This action does different things for different apps"
451−msgstr "An ober-mañ a ra meur a dra evit meur a arload"
436+#: qml/Tutorial/TutorialBottom.qml:78
437+msgid "Swipe up to add a contact"
438+msgstr "Riklit d'an nec'h evit ouzhpennañ un darempred"
452439
453−#: qml/Tutorial/TutorialBottomFinish.qml:25
454−msgid "Tap here to finish."
455−msgstr "Pouezañ amañ evit echuiñ."
440+#: qml/Tutorial/TutorialBottom.qml:80
441+msgid "Swipe up for favorite calculations"
442+msgstr ""
456443
457−#: qml/Tutorial/TutorialContent.qml:80 qml/Tutorial/TutorialLeftFinish.qml:25
458−#: qml/Tutorial/TutorialRight.qml:144
459−msgid "Tap here to continue."
460−msgstr "Pouzañ amañ evit kenderc'hel"
444+#: qml/Tutorial/TutorialBottom.qml:82
445+msgid "Swipe up for recent calls"
446+msgstr ""
461447
462−#: qml/Tutorial/TutorialLeft.qml:26
463−msgid "Open the launcher"
464−msgstr "Digeriñ al lañser"
448+#: qml/Tutorial/TutorialBottom.qml:84
449+msgid "Swipe up to create a message"
450+msgstr "Riklit d'an nec'h evit krouiñ ur gemennadenn"
465451
466−#: qml/Tutorial/TutorialLeft.qml:27
467−msgid "Short swipe from the left edge."
468−msgstr "Riklik dousik adalek ar bord kleiz."
452+#: qml/Tutorial/TutorialBottom.qml:85
453+msgid "Swipe up to manage the app"
454+msgstr ""
469455
470−#: qml/Tutorial/TutorialLeftFinish.qml:24
471−msgid "These are the shortcuts to favorite apps"
472−msgstr "Berradennoù war-du hoc'h arloadoù gwellañ-deuet eo ar re-mañ"
456+#: qml/Tutorial/TutorialLeftLong.qml:47
457+msgid "Long swipe from the left edge to open the Today scope"
458+msgstr ""
473459
474−#: qml/Tutorial/TutorialPage.qml:178
475−msgid "You almost got it!"
476−msgstr "Deuet eo ganeoc'h pe dost ?"
460+#: qml/Tutorial/TutorialLeft.qml:47
461+msgid "Swipe from the left edge to open the launcher"
462+msgstr ""
477463
478−#: qml/Tutorial/TutorialPage.qml:195
479−msgid "Try again."
480−msgstr "Esaeit en-dro."
464+#: qml/Tutorial/TutorialRight.qml:55
465+msgid "Push your mouse against the right edge to view your open apps"
466+msgstr ""
481467
482−#: qml/Tutorial/TutorialRight.qml:31
483−msgid "To view open apps"
484−msgstr "Evit gwelet an arloadoù digor"
468+#: qml/Tutorial/TutorialRight.qml:56
469+msgid "Short or long swipe from the right edge to view your open apps"
470+msgstr ""
485471
486−#: qml/Tutorial/TutorialRight.qml:32
487−msgid "Long swipe from the right edge."
488−msgstr "Riklit pell adalek ar bord dehoù."
472+#: qml/Tutorial/TutorialTop.qml:53
473+msgid "Swipe from the top right edge to open the notification bar"
474+msgstr ""
489475
490−#: qml/Tutorial/TutorialRight.qml:122
491−msgid "View all your running tasks."
492−msgstr "Gwelet an holl drevelloù a ya en-dro."
476+#: qml/Tutorial/TutorialTop.qml:54
477+msgid "Swipe from the top edge to open the notification bar"
478+msgstr ""
493479
494−#: qml/Wizard/Page.qml:89
480+#: qml/Wizard/Page.qml:54
495481msgctxt "Button: Go back one page in the Wizard"
496482msgid "Back"
497483msgstr "Distreiñ"
498484
499485#: qml/Wizard/Pages/10-welcome.qml:27
500−msgid "Hi!"
501−msgstr "Salud deoc'h !"
502−
503−#: qml/Wizard/Pages/10-welcome.qml:44
504−msgid "Welcome to your Ubuntu device."
505−msgstr "Donemat en ho penveg Ubuntu"
506−
507−#: qml/Wizard/Pages/10-welcome.qml:52
508−msgid "Let’s get started."
509−msgstr "Krogomp ganti."
486+msgid "Language"
487+msgstr "Yezh"
488+
489+#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
490+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
491+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
492+#: qml/Wizard/Pages/75-report-check.qml:84
493+#: qml/Wizard/Pages/passcode-desktop.qml:124
494+#: qml/Wizard/Pages/password-set.qml:141
495+msgid "Next"
496+msgstr "War-lerc'h"
497+
498+#: qml/Wizard/Pages/30-wifi.qml:29
499+msgid "Connect to Wi‑Fi"
500+msgstr "Kevreañ ouzh ar Wi-Fi"
510501
511−#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:133
512−#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
513−#: qml/Wizard/Pages/60-reporting.qml:60 qml/Wizard/Pages/passwd-confirm.qml:82
514−#: qml/Wizard/Pages/passwd-set.qml:90
515−msgid "Continue"
516−msgstr "Kenderc'hel"
502+#: qml/Wizard/Pages/30-wifi.qml:130
503+msgid "Connected"
504+msgstr "Kevreet"
517505
518−#: qml/Wizard/Pages/20-sim.qml:25
519−msgid "Add a SIM card and restart your device"
520−msgstr "Lakait ur gartenn SIM hag adloc'hit ho penveg"
506+#: qml/Wizard/Pages/30-wifi.qml:163
507+msgid "Available Wi-Fi networks"
508+msgstr "Rouedadoù Wi-Fi da gaout"
521509
522−#: qml/Wizard/Pages/20-sim.qml:59
523−msgid "Without it, you won’t be able to make calls or use text messaging."
524−msgstr "Ne vioc'h ket evit pellgomz pe kas kemennadennoù hepti."
510+#: qml/Wizard/Pages/30-wifi.qml:164
511+msgid "No available Wi-Fi networks"
512+msgstr "N'eus ket rouedadoù Wi-Fi da gaout"
525513
526−#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
514+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
515+#: qml/Wizard/Pages/sim.qml:101
527516msgid "Skip"
528517msgstr "Tremen hebiou"
529518
530−#: qml/Wizard/Pages/30-passwd-type.qml:39
531−msgid "Lock security"
532−msgstr "Surentez ar prennañ"
519+#: qml/Wizard/Pages/40-location.qml:27
520+msgid "Location Services"
521+msgstr "Servijoù lec'hiañ"
522+
523+#: qml/Wizard/Pages/40-location.qml:83
524+msgid ""
525+"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
526+"(recommended)"
527+msgstr ""
533528
534−#: qml/Wizard/Pages/30-passwd-type.qml:79
535−msgid "Please select how you’d like to unlock your device."
536−msgstr "Diuzit penaos e fell deoc'h dibrennañ ho penveg, mar plij."
529+#: qml/Wizard/Pages/40-location.qml:105
530+#, qt-format
531+msgid "By selecting this option you agree to the Nokia HERE %1."
532+msgstr ""
537533
538−#: qml/Wizard/Pages/30-passwd-type.qml:102
539−msgctxt "Label: Type of security method"
540−msgid "Swipe"
541−msgstr "Riklañ"
534+#: qml/Wizard/Pages/40-location.qml:106
535+msgctxt "part of: Nokia HERE terms and conditions"
536+msgid "terms and conditions"
537+msgstr "penndivizoù implij"
542538
543−#: qml/Wizard/Pages/30-passwd-type.qml:103
544−msgctxt "Label: Description of security method"
545−msgid "No security"
546−msgstr "Tamm surentez ebet"
539+#: qml/Wizard/Pages/40-location.qml:160
540+msgid "GPS only"
541+msgstr "GPS hepken"
547542
548−#: qml/Wizard/Pages/30-passwd-type.qml:105
543+#: qml/Wizard/Pages/40-location.qml:214
544+msgid "Don't use my location"
545+msgstr "Arabat implijout ma lec'h"
546+
547+#: qml/Wizard/Pages/40-location.qml:260
548+msgid "You can change it later in System Settings."
549+msgstr ""
550+
551+#: qml/Wizard/Pages/50-timezone.qml:29
552+msgid "Time Zone"
553+msgstr "Gwerzhid-eur"
554+
555+#: qml/Wizard/Pages/50-timezone.qml:178
556+msgid "Enter your city"
557+msgstr "Skrivit ho kêr"
558+
559+#: qml/Wizard/Pages/60-account.qml:24
560+msgid "Personalize Your Device"
561+msgstr "Personelaat ho penveg"
562+
563+#: qml/Wizard/Pages/60-account.qml:48
564+msgid "Preferred Name"
565+msgstr ""
566+
567+#: qml/Wizard/Pages/70-passwd-type.qml:39
568+msgid "Lock Screen"
569+msgstr "Prennañ ar skramm"
570+
571+#: qml/Wizard/Pages/70-passwd-type.qml:101
549572msgctxt "Label: Type of security method"
550−msgid "Passcode"
551−msgstr "Kod-tremen"
573+msgid "Create new password"
574+msgstr "Krouiñ ur ger-tremen nevez"
552575
553−#: qml/Wizard/Pages/30-passwd-type.qml:106
554−msgctxt "Label: Description of security method"
555−msgid "4 digits only"
556−msgstr "4 sifr hepken"
576+#: qml/Wizard/Pages/70-passwd-type.qml:103
577+msgctxt "Label: Type of security method"
578+msgid "Create passcode (numbers only)"
579+msgstr "Krouiñ ur c'hod (difroù hepken)"
557580
558−#: qml/Wizard/Pages/30-passwd-type.qml:108
581+#: qml/Wizard/Pages/70-passwd-type.qml:105
559582msgctxt "Label: Type of security method"
560−msgid "Passphrase"
561−msgstr "Frazenn-dremen"
583+msgid "No lock code"
584+msgstr "N'eus kod prennañ ebet"
562585
563−#: qml/Wizard/Pages/30-passwd-type.qml:109
564−msgctxt "Label: Description of security method"
565−msgid "Numbers and letters"
566−msgstr "Sifroù ha lizherennoù"
586+#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
587+msgid "Privacy Policy"
588+msgstr "Reolennoù prevezded"
567589
568−#: qml/Wizard/Pages/40-wifi.qml:29
569−msgid "Connect to Wi‑Fi"
570−msgstr "Kevreañ ouzh ar Wi-Fi"
590+#: qml/Wizard/Pages/75-report-check.qml:26
591+msgid "Help Us Improve"
592+msgstr "Sikourit ac'hanomp da wellaat"
571593
572−#: qml/Wizard/Pages/40-wifi.qml:168
573−msgid "Available networks…"
574−msgstr "Rouedadoù a c'haller kaout..."
594+#: qml/Wizard/Pages/75-report-check.qml:59
595+msgid "Improve system performance by sending us crashes and error reports."
596+msgstr ""
575597
576−#: qml/Wizard/Pages/40-wifi.qml:169
577−msgid "No available networks."
578−msgstr "N'eus rouedad ebet da gaout."
598+#: qml/Wizard/Pages/75-report-check.qml:60
599+msgid "Privacy policy"
600+msgstr "Reolennoù buhez prevez"
579601
580−#: qml/Wizard/Pages/50-location.qml:27
581−msgid "Location"
582−msgstr "Lec'h"
602+#: qml/Wizard/Pages/80-finished.qml:89
603+msgid "Welcome to Ubuntu"
604+msgstr "Donemat en Ubuntu"
583605
584−#: qml/Wizard/Pages/50-location.qml:62
585−msgid "Let the phone detect your location:"
586−msgstr "Lezel ar pellgomzer da gavout pelec'h emaoc'h :"
606+#: qml/Wizard/Pages/80-finished.qml:104
607+msgid "You are ready to use your device now"
608+msgstr "Bremañ oc'h prest da implijout ho penveg"
587609
588−#: qml/Wizard/Pages/50-location.qml:69
589−msgid "Using GPS only (less accurate)"
590−msgstr "Implijout ar GPS hepken (n'eo ket ken resis)"
610+#: qml/Wizard/Pages/80-finished.qml:124
611+msgid "Get Started"
612+msgstr "Kregiñ ganti"
613+
614+#: qml/Wizard/Pages/here-terms.qml:25
615+msgid "Terms & Conditions"
616+msgstr "Penndivizoù implij"
591617
592−#: qml/Wizard/Pages/50-location.qml:86
593−msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
618+#: qml/Wizard/Pages/here-terms.qml:69
619+msgid "Your device uses positioning technologies provided by HERE."
594620msgstr ""
595−"Implijout ar GPS, Wi-Fi dizanv pe titouroù ar rouedad kelligel (aliet)"
596621
597−#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
598−#: qml/Wizard/Pages/50-location.qml:103
622+#: qml/Wizard/Pages/here-terms.qml:81
599623msgid ""
600−"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
601−"conditions</a>."
624+"To provide you with positioning services and to improve their quality, HERE "
625+"collects information about nearby cell towers and Wi-Fi hotspots around your "
626+"current location whenever your position is being found."
602627msgstr ""
603−"Pa ziuzit an dibarzh-mañ ez asantit da <a href='#'>zivizoù implij</a> Nokia."
604628
605−#: qml/Wizard/Pages/50-location.qml:112
606−msgid "Not at all"
607−msgstr "Tamm ebet"
629+#: qml/Wizard/Pages/here-terms.qml:93
630+msgid ""
631+"The information collected is used to analyze the service and to improve the "
632+"use of service, but not to identify you personally."
633+msgstr ""
608634
609−#: qml/Wizard/Pages/50-location.qml:124
610−msgid "You can change your mind later in <b>System Settings</b>."
635+#: qml/Wizard/Pages/here-terms.qml:106
636+#, qt-format
637+msgid "By continuing, you agree to the HERE platform %1 and %2."
611638msgstr ""
612−"Gallout a rit cheñch soñj diwezhatoc'h en <b>Arventennoù ar reizhad</b>."
613639
614−#: qml/Wizard/Pages/60-reporting.qml:26
615−msgid "Improving your experience"
616−msgstr "Gwellaat ho skiant-prenet"
640+#: qml/Wizard/Pages/here-terms.qml:107
641+msgid "Service Terms"
642+msgstr "Divizoù servij"
617643
618−#: qml/Wizard/Pages/60-reporting.qml:46
619−msgid ""
620−"Your phone is set up to automatically report errors to Canonical and its "
621−"partners, the makers of the operating system."
622−msgstr ""
623−"Arventennet eo ho pellgomzer evit titourañ ent emgefre ar fazioù da "
624−"gCanonical ha d'e gevelerien, ar re o deus savet ar reizhiad korvoiñ."
644+#: qml/Wizard/Pages/passcode-confirm.qml:43
645+#: qml/Wizard/Pages/passcode-desktop.qml:80
646+msgid "Confirm passcode"
647+msgstr "Kadarnaat ar c'hod-tremen"
625648
626−#: qml/Wizard/Pages/60-reporting.qml:53
627−msgid ""
628−"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
629−"Privacy</b>"
630−msgstr ""
631−"Gallout a ra bezañ diweredekaet e-barzh <b>Arventennoù ar reizhiad</b> "
632−"dindan <b>Surentez &amp; Prevezded</b>"
649+#: qml/Wizard/Pages/passcode-confirm.qml:45
650+msgid "Incorrect passcode."
651+msgstr "Kod direizh"
633652
634−#: qml/Wizard/Pages/80-finished.qml:24
635−msgid "All done"
636−msgstr "Echu penn-da-benn"
653+#: qml/Wizard/Pages/passcode-confirm.qml:45
654+msgctxt "Enter the passcode again"
655+msgid "Please re-enter."
656+msgstr "Skrivit adarre, mar plij."
637657
638−#: qml/Wizard/Pages/80-finished.qml:39
639−msgid "Nice work!"
640−msgstr "Gwellat labour !"
658+#: qml/Wizard/Pages/passcode-desktop.qml:30
659+msgid "Lock Screen Passcode"
660+msgstr "Kod da brennañ ar skramm"
641661
642−#: qml/Wizard/Pages/80-finished.qml:46
643−msgid "Your device is now ready to use."
644−msgstr "Prest eo ho penveg da vezañ implijet bremañ."
662+#: qml/Wizard/Pages/passcode-desktop.qml:56
663+msgid "Enter 4 numbers to setup your passcode"
664+msgstr "Skrivit 4 sifr evit lakaat ho kod"
645665
646−#: qml/Wizard/Pages/80-finished.qml:53
647−msgid "Finish"
648−msgstr "Echuiñ"
666+#: qml/Wizard/Pages/passcode-desktop.qml:65
667+#: qml/Wizard/Pages/passcode-set.qml:54
668+msgid "Choose passcode"
669+msgstr "Choaz ur c'hod"
649670
650−#: qml/Wizard/Pages/here-terms.qml:27
651−msgid "Terms & Conditions"
652−msgstr "Penndivizoù implij"
671+#: qml/Wizard/Pages/passcode-desktop.qml:105
672+msgid "Passcode too short"
673+msgstr "Kod re verr"
653674
654−#: qml/Wizard/Pages/passwd-confirm.qml:49
655−msgid "Confirm passphrase"
656−msgstr "Kadarnaat ar frazenn-dremen"
675+#: qml/Wizard/Pages/passcode-desktop.qml:107
676+msgid "Passcodes match"
677+msgstr "klotañ a ra ar c'hodoù an eil gant egile"
657678
658−#: qml/Wizard/Pages/passwd-confirm.qml:50
659−msgid "Confirm passcode"
660−msgstr "Kadarnaat ar c'hod-tremen"
679+#: qml/Wizard/Pages/passcode-desktop.qml:109
680+msgid "Passcodes do not match"
681+msgstr "Ne glot ket ar c'hodoù an eil gant egile"
661682
662−#: qml/Wizard/Pages/passwd-confirm.qml:53
663−#: qml/Wizard/Pages/passwd-confirm.qml:54
664−msgid "Please try again."
665−msgstr "Esaeit en-dro, mar plij."
683+#: qml/Wizard/Pages/passcode-set.qml:62
684+msgid "Passcode must be 4 characters long"
685+msgstr "4 arouezenn a rank bezañ ar c'hod"
666686
667−#: qml/Wizard/Pages/passwd-set.qml:61
668−msgid "Choose your passcode"
669−msgstr "Choaz ho kod-tremen"
687+#: qml/Wizard/Pages/password-set.qml:30
688+msgid "Lock Screen Password"
689+msgstr "Ger-tremen da brennañ ar skramm"
670690
671−#: qml/Wizard/Pages/passwd-set.qml:68
672−msgid "Passphrase must be 4 characters long"
673−msgstr "4 arouezenn a rank bezañ er frazenn-dremen"
691+#: qml/Wizard/Pages/password-set.qml:61
692+msgid "Enter at least 8 characters"
693+msgstr "Skrivit 8 arouezenn da vihanañ"
674694
675−#. Translators: This is the arrow for "Back" buttons
676−#: qml/Wizard/StackButton.qml:39
677−#, qt-format
678−msgid "〈 %1"
679−msgstr "〈 %1"
695+#: qml/Wizard/Pages/password-set.qml:73
696+msgid "Choose password"
697+msgstr "Choaz ur ger-tremen"
680698
681−#. Translators: This is the arrow for "Forward" buttons
682−#: qml/Wizard/StackButton.qml:42
683−#, qt-format
684−msgid "%1 〉"
685−msgstr "%1 〉"
699+#: qml/Wizard/Pages/password-set.qml:103
700+msgid "Confirm password"
701+msgstr "Kadarnaat ar ger-tremen"
702+
703+#: qml/Wizard/Pages/sim.qml:27
704+msgid "No SIM card installed"
705+msgstr "N'eus kartenn SIM ebet"
706+
707+#: qml/Wizard/Pages/sim.qml:54
708+msgid "SIM card added"
709+msgstr "Lakaet ez eus bet ur gartenn SIM"
710+
711+#: qml/Wizard/Pages/sim.qml:55
712+msgid "You must restart the device to access the mobile network."
713+msgstr ""
714+
715+#: qml/Wizard/Pages/sim.qml:59
716+msgid "Restart"
717+msgstr "Adloc'hañ"
718+
719+#: qml/Wizard/Pages/sim.qml:78
720+msgid "You won’t be able to make calls or use text messaging without a SIM."
721+msgstr ""
722+
723+#: qml/Wizard/Pages/sim.qml:90
724+msgid "To proceed with no SIM tap Skip."
725+msgstr ""
726+
727+#: qml/Wizard/PasswordMeter.qml:87
728+msgid "Passwords match"
729+msgstr "Klotañ a ra ar gerioù-tremen an eil gant egile"
730+
731+#: qml/Wizard/PasswordMeter.qml:89
732+msgid "Passwords do not match"
733+msgstr "Ne glot ket ar gerioù-tremen"
734+
735+#: qml/Wizard/PasswordMeter.qml:93
736+msgid "Strong password"
737+msgstr "Ger-tremen sur"
738+
739+#: qml/Wizard/PasswordMeter.qml:95
740+msgid "Fair password"
741+msgstr "Ger-tremen reizh"
742+
743+#: qml/Wizard/PasswordMeter.qml:97
744+msgid "Weak password"
745+msgstr "Ger-tremen diasur"
746+
747+#: qml/Wizard/PasswordMeter.qml:99
748+msgid "Very weak password"
749+msgstr "Ger-tremen diasur-kenañ"
686750
687751#~ msgid "Close"
688752#~ msgstr "Serriñ"
@@ -699,6 +763,9 @@ msgstr "%1 〉"
699763#~ msgid "Right edge"
700764#~ msgstr "Bord dehoù"
701765
766+#~ msgid "See less"
767+#~ msgstr "Gwelet nebeutoc'h"
768+
702769#~ msgid ""
703770#~ "You have now mastered the edge gestures and can start using the "
704771#~ "phone<br><br>Tap on the screen to start"
@@ -744,6 +811,9 @@ msgstr "%1 〉"
744811#~ msgid "Type or say a command"
745812#~ msgstr "Skrivit pe lavarit un urzhiad"
746813
814+#~ msgid "See all"
815+#~ msgstr "Gwelet pep tra"
816+
747817#~ msgid "Store"
748818#~ msgstr "Enrollañ"
749819
@@ -756,6 +826,12 @@ msgstr "%1 〉"
756826#~ msgid "All"
757827#~ msgstr "An holl anezho"
758828
829+#~ msgid "Unlock SIM"
830+#~ msgstr "Dibrennañ ar gartenn SIM"
831+
832+#~ msgid "Roaming"
833+#~ msgstr "O kantren"
834+
759835#~ msgid "Favorites"
760836#~ msgstr "Gwellañ deuet"
761837
@@ -765,6 +841,9 @@ msgstr "%1 〉"
765841#~ msgid "Log out"
766842#~ msgstr "Digevreañ"
767843
844+#~ msgid "Are you sure you want to shut down?"
845+#~ msgstr "Ha sur oc'h e fell deoc'h lazhañ ar benveg ?"
846+
768847#~ msgid "Reboot"
769848#~ msgstr "Adloc'hañ"
770849
@@ -774,25 +853,193 @@ msgstr "%1 〉"
774853#~ msgid "Settings"
775854#~ msgstr "Arventennoù"
776855
777−#~ msgid "Restart"
778−#~ msgstr "Adloc'hañ"
779−
780856#~ msgid "Manage Scopes"
781857#~ msgstr "Merañ ar c'hefluskerioù enklask"
782858
783859#~ msgid "Please re-enter"
784860#~ msgstr "Adverkañ, mar plij"
785861
862+#~ msgid "Lock security"
863+#~ msgstr "Surentez ar prennañ"
864+
865+#~ msgid "Without it, you won’t be able to make calls or use text messaging."
866+#~ msgstr "Ne vioc'h ket evit pellgomz pe kas kemennadennoù hepti."
867+
868+#~ msgid "Add a SIM card and restart your device"
869+#~ msgstr "Lakait ur gartenn SIM hag adloc'hit ho penveg"
870+
786871#~ msgid "Please select how you’d like to unlock your phone."
787872#~ msgstr ""
788873#~ "Diuzit e peseurt mod e fell deoc'h dibrennañ ho pellgomzer, mar plij."
789874
875+#~ msgid "Hi!"
876+#~ msgstr "Salud deoc'h !"
877+
878+#~ msgid "Let’s get started."
879+#~ msgstr "Krogomp ganti."
880+
881+#~ msgid "Continue"
882+#~ msgstr "Kenderc'hel"
883+
790884#~ msgid "Welcome to your Ubuntu phone."
791885#~ msgstr "Deuet-mat oc'h en ho pellgomzer Ubuntu."
792886
887+#~ msgid "Available networks…"
888+#~ msgstr "Rouedadoù a c'haller kaout..."
889+
890+#~ msgid "No available networks."
891+#~ msgstr "N'eus rouedad ebet da gaout."
892+
893+#~ msgid "Location"
894+#~ msgstr "Lec'h"
895+
896+#~ msgid "You can change your mind later in <b>System Settings</b>."
897+#~ msgstr ""
898+#~ "Gallout a rit cheñch soñj diwezhatoc'h en <b>Arventennoù ar reizhad</b>."
899+
900+#~ msgid ""
901+#~ "This can be disabled in <b>System Settings</b> under <b>Security &amp; "
902+#~ "Privacy</b>"
903+#~ msgstr ""
904+#~ "Gallout a ra bezañ diweredekaet e-barzh <b>Arventennoù ar reizhiad</b> "
905+#~ "dindan <b>Surentez &amp; Prevezded</b>"
906+
907+#~ msgid ""
908+#~ "Your phone is set up to automatically report errors to Canonical and its "
909+#~ "partners, the makers of the operating system."
910+#~ msgstr ""
911+#~ "Arventennet eo ho pellgomzer evit titourañ ent emgefre ar fazioù da "
912+#~ "gCanonical ha d'e gevelerien, ar re o deus savet ar reizhiad korvoiñ."
913+
914+#~ msgid "All done"
915+#~ msgstr "Echu penn-da-benn"
916+
917+#~ msgid "Improving your experience"
918+#~ msgstr "Gwellaat ho skiant-prenet"
919+
920+#~ msgid ""
921+#~ "By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
922+#~ "conditions</a>."
923+#~ msgstr ""
924+#~ "Pa ziuzit an dibarzh-mañ ez asantit da <a href='#'>zivizoù implij</a> Nokia."
925+
926+#~ msgid "Not at all"
927+#~ msgstr "Tamm ebet"
928+
929+#~ msgid "Let the phone detect your location:"
930+#~ msgstr "Lezel ar pellgomzer da gavout pelec'h emaoc'h :"
931+
932+#~ msgid "Using GPS only (less accurate)"
933+#~ msgstr "Implijout ar GPS hepken (n'eo ket ken resis)"
934+
935+#~ msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
936+#~ msgstr ""
937+#~ "Implijout ar GPS, Wi-Fi dizanv pe titouroù ar rouedad kelligel (aliet)"
938+
939+#~ msgid "Nice work!"
940+#~ msgstr "Gwellat labour !"
941+
942+#~ msgid "Finish"
943+#~ msgstr "Echuiñ"
944+
945+#~ msgid "Confirm passphrase"
946+#~ msgstr "Kadarnaat ar frazenn-dremen"
947+
948+#, qt-format
949+#~ msgid "〈 %1"
950+#~ msgstr "〈 %1"
951+
952+#~ msgid "Choose your passcode"
953+#~ msgstr "Choaz ho kod-tremen"
954+
955+#~ msgid "Passphrase must be 4 characters long"
956+#~ msgstr "4 arouezenn a rank bezañ er frazenn-dremen"
957+
958+#~ msgid "Please try again."
959+#~ msgstr "Esaeit en-dro, mar plij."
960+
793961#~ msgid "Your phone is now ready to use."
794962#~ msgstr "Prest eo ho pellgomzer da vezañ implijet bremañ."
795963
964+#, qt-format
965+#~ msgid "%1 〉"
966+#~ msgstr "%1 〉"
967+
968+#~ msgid "This action does different things for different apps"
969+#~ msgstr "An ober-mañ a ra meur a dra evit meur a arload"
970+
971+#~ msgid "Open special menus"
972+#~ msgstr "Digeriñ al lañserioù ispisial"
973+
974+#~ msgid "Tap here to finish."
975+#~ msgstr "Pouezañ amañ evit echuiñ."
976+
977+#~ msgid "To view open apps"
978+#~ msgstr "Evit gwelet an arloadoù digor"
979+
980+#~ msgid "Long swipe from the right edge."
981+#~ msgstr "Riklit pell adalek ar bord dehoù."
982+
983+#~ msgid "View all your running tasks."
984+#~ msgstr "Gwelet an holl drevelloù a ya en-dro."
985+
986+#~ msgid "Try again."
987+#~ msgstr "Esaeit en-dro."
988+
989+#~ msgid "You almost got it!"
990+#~ msgstr "Deuet eo ganeoc'h pe dost ?"
991+
992+#~ msgid "Short swipe from the left edge."
993+#~ msgstr "Riklik dousik adalek ar bord kleiz."
994+
995+#~ msgid "Open the launcher"
996+#~ msgstr "Digeriñ al lañser"
997+
998+#~ msgid "Tap here to continue."
999+#~ msgstr "Pouzañ amañ evit kenderc'hel"
1000+
1001+#~ msgid "These are the shortcuts to favorite apps"
1002+#~ msgstr "Berradennoù war-du hoc'h arloadoù gwellañ-deuet eo ar re-mañ"
1003+
1004+#~ msgid "Swipe up from the bottom edge."
1005+#~ msgstr "Riklit war-du an nec'h adalek an traoñ"
1006+
1007+#~ msgctxt "Button: Shut down the system"
1008+#~ msgid "Shut down"
1009+#~ msgstr "Lazhañ ar benveg"
1010+
1011+#~ msgctxt "Title: Reboot/Shut down dialog"
1012+#~ msgid "Shut down"
1013+#~ msgstr "Lazhañ ar benveg"
1014+
1015+#~ msgctxt "Button: Reboot the system"
1016+#~ msgid "Reboot"
1017+#~ msgstr "Adloc'hañ"
1018+
1019+#~ msgctxt "Label: Type of security method"
1020+#~ msgid "Passcode"
1021+#~ msgstr "Kod-tremen"
1022+
1023+#~ msgctxt "Label: Description of security method"
1024+#~ msgid "No security"
1025+#~ msgstr "Tamm surentez ebet"
1026+
1027+#~ msgctxt "Label: Type of security method"
1028+#~ msgid "Swipe"
1029+#~ msgstr "Riklañ"
1030+
1031+#~ msgctxt "Label: Description of security method"
1032+#~ msgid "4 digits only"
1033+#~ msgstr "4 sifr hepken"
1034+
1035+#~ msgctxt "Label: Type of security method"
1036+#~ msgid "Passphrase"
1037+#~ msgstr "Frazenn-dremen"
1038+
1039+#~ msgctxt "Label: Description of security method"
1040+#~ msgid "Numbers and letters"
1041+#~ msgstr "Sifroù ha lizherennoù"
1042+
7961043#~ msgid "%a %d %b %H:%M"
7971044#~ msgstr "%a %b %d %H:%M"
7981045
po/bs.po+508−257
@@ -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-16 03:29+0000\n"
10+"POT-Creation-Date: 2016-04-27 15:01+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,23 +16,23 @@ 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-23 06:03+0000\n"
20−"X-Generator: Launchpad (build 17925)\n"
19+"X-Launchpad-Export-Date: 2016-04-30 05:36+0000\n"
20+"X-Generator: Launchpad (build 17995)\n"
2121
2222#: plugins/IntegratedLightDM/Greeter.cpp:112
2323msgid "Password: "
2424msgstr "Šifra: "
2525
26−#: plugins/Unity/Launcher/launcheritem.cpp:47
27−#: plugins/Unity/Launcher/launcheritem.cpp:106
26+#: plugins/Unity/Launcher/launcheritem.cpp:48
27+#: plugins/Unity/Launcher/launcheritem.cpp:107
2828msgid "Pin shortcut"
2929msgstr "Prikačite prečicu"
3030
31−#: plugins/Unity/Launcher/launcheritem.cpp:52
31+#: plugins/Unity/Launcher/launcheritem.cpp:53
3232msgid "Quit"
3333msgstr "Napusti"
3434
35−#: plugins/Unity/Launcher/launcheritem.cpp:106
35+#: plugins/Unity/Launcher/launcheritem.cpp:107
3636msgid "Unpin shortcut"
3737msgstr "Otkačite prečicu"
3838
@@ -75,53 +75,35 @@ msgctxt "Button: Log out from the system"
7575msgid "Log Out"
7676msgstr "Odjavi se"
7777
78−#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:194
79−#: qml/Components/Dialogs.qml:253
78+#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
79+#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
80+#: qml/Wizard/Pages/passcode-set.qml:32
8081msgid "Cancel"
8182msgstr "Otkaži"
8283
8384#: qml/Components/Dialogs.qml:173
84−msgctxt "Title: Reboot/Shut down dialog"
85−msgid "Shut down"
86−msgstr "Ugasi"
87−
88−#: qml/Components/Dialogs.qml:174
89−msgid "Are you sure you want to shut down?"
90−msgstr "Da li ste sigurni da želite ugasiti?"
91−
92−#: qml/Components/Dialogs.qml:176
93−msgctxt "Button: Reboot the system"
94−msgid "Reboot"
95−msgstr "Ponovo pokreni"
96−
97−#: qml/Components/Dialogs.qml:185
98−msgctxt "Button: Shut down the system"
99−msgid "Shut down"
100−msgstr "Gašenje sistema"
101−
102−#: qml/Components/Dialogs.qml:207
10385msgctxt "Title: Reboot dialog"
10486msgid "Reboot"
10587msgstr "Ponovo pokreni"
10688
107−#: qml/Components/Dialogs.qml:208
89+#: qml/Components/Dialogs.qml:174
10890msgid "Are you sure you want to reboot?"
10991msgstr "Da li ste sigurni da želite ponovo pokrenuti?"
11092
111−#: qml/Components/Dialogs.qml:210
93+#: qml/Components/Dialogs.qml:176
11294msgid "No"
11395msgstr "Ne"
11496
115−#: qml/Components/Dialogs.qml:217
97+#: qml/Components/Dialogs.qml:182
11698msgid "Yes"
11799msgstr "Da"
118100
119−#: qml/Components/Dialogs.qml:232
101+#: qml/Components/Dialogs.qml:197
120102msgctxt "Title: Power off/Restart dialog"
121103msgid "Power"
122104msgstr "Napajanje"
123105
124−#: qml/Components/Dialogs.qml:233
106+#: qml/Components/Dialogs.qml:198
125107msgid ""
126108"Are you sure you would like\n"
127109"to power off?"
@@ -129,25 +111,25 @@ msgstr ""
129111"Da li ste sigurni da želite\n"
130112"isključiti?"
131113
132−#: qml/Components/Dialogs.qml:235
114+#: qml/Components/Dialogs.qml:200
133115msgctxt "Button: Power off the system"
134116msgid "Power off"
135117msgstr "Isključi"
136118
137−#: qml/Components/Dialogs.qml:244
119+#: qml/Components/Dialogs.qml:209
138120msgctxt "Button: Restart the system"
139121msgid "Restart"
140122msgstr "Restartuj"
141123
142−#: qml/Components/Lockscreen.qml:245
124+#: qml/Components/Lockscreen.qml:231
143125msgid "Return to Call"
144126msgstr "Povratak na Poziv"
145127
146−#: qml/Components/Lockscreen.qml:245
128+#: qml/Components/Lockscreen.qml:231
147129msgid "Emergency Call"
148130msgstr "Hitan Poziv"
149131
150−#: qml/Components/Lockscreen.qml:277
132+#: qml/Components/Lockscreen.qml:263
151133msgid "OK"
152134msgstr "U redu"
153135
@@ -156,8 +138,10 @@ msgid "Apps may have unsaved data:"
156138msgstr "Aplikacije možda imaju podataka koji nisu sačuvani:"
157139
158140#: qml/Components/ModeSwitchWarningDialog.qml:57
141+msgctxt ""
142+"Re-dock means connect the device again to an external screen/mouse/keyboard"
159143msgid "Re-dock, save your work and close these apps to continue."
160−msgstr "Postavi opet, snimi svoj rad i zatvori ove aplikacije za nastavak."
144+msgstr ""
161145
162146#: qml/Components/ModeSwitchWarningDialog.qml:63
163147msgid "Or force close now (unsaved data will be lost)."
@@ -177,42 +161,58 @@ msgstr "Ponovo poveži sada"
177161msgid "Close all"
178162msgstr "Zatvori sve"
179163
180−#: qml/Dash/DashPageHeader.qml:266
164+#: qml/Dash/DashPageHeader.qml:337
181165msgctxt "Button: Open the Ubuntu Store"
182166msgid "Store"
183167msgstr "Trgovina"
184168
185−#: qml/Dash/DashPageHeader.qml:273
169+#: qml/Dash/DashPageHeader.qml:344
186170msgctxt "Button: Start a search in the current dash scope"
187171msgid "Search"
188172msgstr "Pretraživanje"
189173
190−#: qml/Dash/DashPageHeader.qml:283
174+#: qml/Dash/DashPageHeader.qml:354
191175msgctxt "Button: Show the current dash scope settings"
192176msgid "Settings"
193177msgstr "Podešavanja"
194178
195−#: qml/Dash/DashPageHeader.qml:290
179+#: qml/Dash/DashPageHeader.qml:361
196180msgid "Remove from Favorites"
197181msgstr "Ukloni iz Omiljenih"
198182
199−#: qml/Dash/DashPageHeader.qml:290
183+#: qml/Dash/DashPageHeader.qml:361
200184msgid "Add to Favorites"
201185msgstr "Dodaj u Omiljene"
202186
203−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
204−msgid "See less"
205−msgstr "Pogledati manje"
187+#: qml/Dash/FiltersPopover.qml:60
188+msgid "Refine your results"
189+msgstr ""
190+
191+#: qml/Dash/FiltersPopover.qml:69
192+msgid "Reset"
193+msgstr ""
194+
195+#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
196+msgid "Show less"
197+msgstr ""
206198
207−#: qml/Dash/GenericScopeView.qml:587
208−msgid "See all"
209−msgstr "Pogledati sve"
199+#: qml/Dash/GenericScopeView.qml:570
200+msgid "Show all"
201+msgstr ""
210202
211−#: qml/Dash/GenericScopeView.qml:649
203+#: qml/Dash/GenericScopeView.qml:627
212204msgctxt "Label: Hint for dash search line edit"
213205msgid "Search"
214206msgstr "Pretraži"
215207
208+#: qml/Dash/PageHeaderExtraPanel.qml:55
209+msgid "Recent Searches"
210+msgstr ""
211+
212+#: qml/Dash/PageHeaderExtraPanel.qml:66
213+msgid "Clear All"
214+msgstr ""
215+
216216#: qml/Dash/Previews/PreviewActionCombo.qml:35
217217msgid "More..."
218218msgstr "Više..."
@@ -234,7 +234,7 @@ msgstr "Ocijeni ovo"
234234msgid "Add a review"
235235msgstr "Dodaj recenziju"
236236
237−#: qml/Dash/Previews/PreviewSharing.qml:50
237+#: qml/Dash/Previews/PreviewSharing.qml:66
238238msgid "Preview Share Item"
239239msgstr "Pogledaj stavku koja se dijeli"
240240
@@ -262,13 +262,13 @@ msgstr "Početna"
262262msgid "Also installed"
263263msgstr "Također instalirano"
264264
265−#: qml/DisabledScreenNotice.qml:87
265+#: qml/DisabledScreenNotice.qml:104
266266msgid ""
267267"Your device is now connected to an external display. Use this screen as a "
268−"touch pad to interact with the mouse."
268+"touch pad to interact with the pointer."
269269msgstr ""
270270
271−#: qml/Greeter/CoverPage.qml:107
271+#: qml/Greeter/CoverPage.qml:118
272272msgid "Unlock"
273273msgstr "Otključaj"
274274
@@ -280,11 +280,11 @@ msgstr "Ponovi"
280280msgid "Tap to unlock"
281281msgstr "Kucnite za otključavanje"
282282
283−#: qml/Greeter/NarrowView.qml:54 qml/Wizard/Pages/passwd-confirm.qml:53
283+#: qml/Greeter/NarrowView.qml:54
284284msgid "Sorry, incorrect passphrase."
285285msgstr "Izvinite, pogrešna pristupna fraza."
286286
287−#: qml/Greeter/NarrowView.qml:55 qml/Wizard/Pages/passwd-confirm.qml:54
287+#: qml/Greeter/NarrowView.qml:55
288288msgid "Sorry, incorrect passcode."
289289msgstr "Izvinite, pogrešan pristupni kod."
290290
@@ -313,7 +313,7 @@ msgstr ""
313313msgid "Enter %1"
314314msgstr "Unesite %1"
315315
316−#: qml/Greeter/NarrowView.qml:117 qml/Wizard/Pages/passwd-set.qml:60
316+#: qml/Greeter/NarrowView.qml:117
317317msgid "Enter passphrase"
318318msgstr "Unesite propusnu frazu"
319319
@@ -339,7 +339,7 @@ msgstr "Molim ponovo unesite"
339339msgid "Sorry, incorrect passcode"
340340msgstr "Izvinite, netačan pristupni kod"
341341
342−#: qml/Notifications/NotificationMenuItemFactory.qml:129
342+#: qml/Notifications/NotificationMenuItemFactory.qml:124
343343msgid "Show password"
344344msgstr "Prikaži šifru"
345345
@@ -351,11 +351,11 @@ msgstr "Kucnite da uzvratite poziv..."
351351msgid "Conference"
352352msgstr "Savjetovanje"
353353
354−#: qml/Panel/Indicators/MenuItemFactory.qml:753
354+#: qml/Panel/Indicators/MenuItemFactory.qml:762
355355msgid "Nothing is playing"
356356msgstr "Ništa nije pokrenuto"
357357
358−#: qml/Panel/Indicators/MenuItemFactory.qml:882
358+#: qml/Panel/Indicators/MenuItemFactory.qml:891
359359#, qt-format
360360msgid "%1 hour"
361361msgid_plural "%1 hours"
@@ -363,7 +363,7 @@ msgstr[0] "%1 sat"
363363msgstr[1] "%1 sata"
364364msgstr[2] "%1 sati"
365365
366−#: qml/Panel/Indicators/MenuItemFactory.qml:886
366+#: qml/Panel/Indicators/MenuItemFactory.qml:895
367367#, qt-format
368368msgid "%1 minute"
369369msgid_plural "%1 minutes"
@@ -371,7 +371,7 @@ msgstr[0] "%1 minut"
371371msgstr[1] "%1 minuta"
372372msgstr[2] "%1 minuta"
373373
374−#: qml/Panel/Indicators/MenuItemFactory.qml:891
374+#: qml/Panel/Indicators/MenuItemFactory.qml:900
375375#, qt-format
376376msgid "%1 second"
377377msgid_plural "%1 seconds"
@@ -379,37 +379,37 @@ msgstr[0] "%1 sekunda"
379379msgstr[1] "%1 sekunde"
380380msgstr[2] "%1 sekundi"
381381
382−#: qml/Panel/Indicators/MenuItemFactory.qml:894
382+#: qml/Panel/Indicators/MenuItemFactory.qml:903
383383msgid "0 seconds"
384384msgstr "0 sekundi"
385385
386386#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
387−#: qml/Panel/Indicators/MenuItemFactory.qml:896
387+#: qml/Panel/Indicators/MenuItemFactory.qml:905
388388#, qt-format
389389msgid "%1 remaining"
390390msgstr "%1 preostalo"
391391
392−#: qml/Panel/Indicators/MenuItemFactory.qml:902
392+#: qml/Panel/Indicators/MenuItemFactory.qml:911
393393msgid "In queue…"
394394msgstr "U red..."
395395
396−#: qml/Panel/Indicators/MenuItemFactory.qml:906
396+#: qml/Panel/Indicators/MenuItemFactory.qml:915
397397msgid "Downloading"
398398msgstr "Preuzimanje"
399399
400−#: qml/Panel/Indicators/MenuItemFactory.qml:908
400+#: qml/Panel/Indicators/MenuItemFactory.qml:917
401401msgid "Paused, tap to resume"
402402msgstr "Pauzirano, kucnuti za nastavak"
403403
404−#: qml/Panel/Indicators/MenuItemFactory.qml:910
404+#: qml/Panel/Indicators/MenuItemFactory.qml:919
405405msgid "Canceled"
406406msgstr "Otkazano"
407407
408−#: qml/Panel/Indicators/MenuItemFactory.qml:912
408+#: qml/Panel/Indicators/MenuItemFactory.qml:921
409409msgid "Finished"
410410msgstr "Završeno"
411411
412−#: qml/Panel/Indicators/MenuItemFactory.qml:914
412+#: qml/Panel/Indicators/MenuItemFactory.qml:923
413413msgid "Failed, tap to retry"
414414msgstr "Neuspjelo, kucnuti za ponavljanje"
415415
@@ -429,260 +429,324 @@ 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−
440−#: qml/Tutorial/TutorialBottom.qml:28
441−msgid "Open special menus"
442−msgstr "Otvorite posebne menije"
443−
444−#: qml/Tutorial/TutorialBottom.qml:29
445−msgid "Swipe up from the bottom edge."
446−msgstr "Prevucite od donje ivice."
432+#: qml/Stages/SideStage.qml:76
433+msgid "Drag using 3 fingers any application from one window to the other"
434+msgstr ""
447435
448−#: qml/Tutorial/TutorialBottomFinish.qml:24
449−msgid "This action does different things for different apps"
450−msgstr "Ova radnja čini različite stvari za različite aplikacije"
436+#: qml/Tutorial/TutorialBottom.qml:78
437+msgid "Swipe up to add a contact"
438+msgstr ""
451439
452−#: qml/Tutorial/TutorialBottomFinish.qml:25
453−msgid "Tap here to finish."
454−msgstr "Kucnite ovdje za kraj."
440+#: qml/Tutorial/TutorialBottom.qml:80
441+msgid "Swipe up for favorite calculations"
442+msgstr ""
455443
456−#: qml/Tutorial/TutorialContent.qml:80 qml/Tutorial/TutorialLeftFinish.qml:25
457−#: qml/Tutorial/TutorialRight.qml:144
458−msgid "Tap here to continue."
459−msgstr "Kucnite ovdje za nastavak."
444+#: qml/Tutorial/TutorialBottom.qml:82
445+msgid "Swipe up for recent calls"
446+msgstr ""
460447
461−#: qml/Tutorial/TutorialLeft.qml:26
462−msgid "Open the launcher"
463−msgstr "Otvorite pokretač"
448+#: qml/Tutorial/TutorialBottom.qml:84
449+msgid "Swipe up to create a message"
450+msgstr ""
464451
465−#: qml/Tutorial/TutorialLeft.qml:27
466−msgid "Short swipe from the left edge."
467−msgstr "Kratko prevlačenje od lijeve ivice."
452+#: qml/Tutorial/TutorialBottom.qml:85
453+msgid "Swipe up to manage the app"
454+msgstr ""
468455
469−#: qml/Tutorial/TutorialLeftFinish.qml:24
470−msgid "These are the shortcuts to favorite apps"
471−msgstr "Ovo su kratice za omiljene aplikacije"
456+#: qml/Tutorial/TutorialLeftLong.qml:47
457+msgid "Long swipe from the left edge to open the Today scope"
458+msgstr ""
472459
473−#: qml/Tutorial/TutorialPage.qml:178
474−msgid "You almost got it!"
475−msgstr "Skoro ste uspjeli!"
460+#: qml/Tutorial/TutorialLeft.qml:47
461+msgid "Swipe from the left edge to open the launcher"
462+msgstr ""
476463
477−#: qml/Tutorial/TutorialPage.qml:195
478−msgid "Try again."
479−msgstr "Pokušajte ponovo."
464+#: qml/Tutorial/TutorialRight.qml:55
465+msgid "Push your mouse against the right edge to view your open apps"
466+msgstr ""
480467
481−#: qml/Tutorial/TutorialRight.qml:31
482−msgid "To view open apps"
483−msgstr "Za pregled pokrenutih aplikacija"
468+#: qml/Tutorial/TutorialRight.qml:56
469+msgid "Short or long swipe from the right edge to view your open apps"
470+msgstr ""
484471
485−#: qml/Tutorial/TutorialRight.qml:32
486−msgid "Long swipe from the right edge."
487−msgstr "Dugo prevlačenje od desne ivice."
472+#: qml/Tutorial/TutorialTop.qml:53
473+msgid "Swipe from the top right edge to open the notification bar"
474+msgstr ""
488475
489−#: qml/Tutorial/TutorialRight.qml:122
490−msgid "View all your running tasks."
491−msgstr "Pogledajte sve pokrenute zadatke."
476+#: qml/Tutorial/TutorialTop.qml:54
477+msgid "Swipe from the top edge to open the notification bar"
478+msgstr ""
492479
493−#: qml/Wizard/Page.qml:89
480+#: qml/Wizard/Page.qml:54
494481msgctxt "Button: Go back one page in the Wizard"
495482msgid "Back"
496483msgstr "Nazad"
497484
498485#: qml/Wizard/Pages/10-welcome.qml:27
499−msgid "Hi!"
500−msgstr "Ćao!"
486+msgid "Language"
487+msgstr ""
501488
502−#: qml/Wizard/Pages/10-welcome.qml:44
503−msgid "Welcome to your Ubuntu device."
489+#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
490+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
491+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
492+#: qml/Wizard/Pages/75-report-check.qml:84
493+#: qml/Wizard/Pages/passcode-desktop.qml:124
494+#: qml/Wizard/Pages/password-set.qml:141
495+msgid "Next"
504496msgstr ""
505497
506−#: qml/Wizard/Pages/10-welcome.qml:52
507−msgid "Let’s get started."
508−msgstr "Započnimo"
498+#: qml/Wizard/Pages/30-wifi.qml:29
499+msgid "Connect to Wi‑Fi"
500+msgstr "Povezati na Wi-Fi"
509501
510−#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:133
511−#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
512−#: qml/Wizard/Pages/60-reporting.qml:60 qml/Wizard/Pages/passwd-confirm.qml:82
513−#: qml/Wizard/Pages/passwd-set.qml:90
514−msgid "Continue"
515−msgstr "Nastavite"
502+#: qml/Wizard/Pages/30-wifi.qml:130
503+msgid "Connected"
504+msgstr ""
516505
517−#: qml/Wizard/Pages/20-sim.qml:25
518−msgid "Add a SIM card and restart your device"
519−msgstr "Dodajte SIM karticu i restartujte vaš uređaj"
506+#: qml/Wizard/Pages/30-wifi.qml:163
507+msgid "Available Wi-Fi networks"
508+msgstr ""
520509
521−#: qml/Wizard/Pages/20-sim.qml:59
522−msgid "Without it, you won’t be able to make calls or use text messaging."
510+#: qml/Wizard/Pages/30-wifi.qml:164
511+msgid "No available Wi-Fi networks"
523512msgstr ""
524−"Bez nje, nećete biti u mogućnosti da uspostavite pozive ili koristite "
525−"tekstualne poruke."
526513
527−#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
514+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
515+#: qml/Wizard/Pages/sim.qml:101
528516msgid "Skip"
529517msgstr "Preskočite"
530518
531−#: qml/Wizard/Pages/30-passwd-type.qml:39
532−msgid "Lock security"
533−msgstr "Sigurnost zaključavanja"
519+#: qml/Wizard/Pages/40-location.qml:27
520+msgid "Location Services"
521+msgstr ""
534522
535−#: qml/Wizard/Pages/30-passwd-type.qml:79
536−msgid "Please select how you’d like to unlock your device."
523+#: qml/Wizard/Pages/40-location.qml:83
524+msgid ""
525+"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
526+"(recommended)"
537527msgstr ""
538528
539−#: qml/Wizard/Pages/30-passwd-type.qml:102
540−msgctxt "Label: Type of security method"
541−msgid "Swipe"
542−msgstr "Prevlačenje"
529+#: qml/Wizard/Pages/40-location.qml:105
530+#, qt-format
531+msgid "By selecting this option you agree to the Nokia HERE %1."
532+msgstr ""
533+
534+#: qml/Wizard/Pages/40-location.qml:106
535+msgctxt "part of: Nokia HERE terms and conditions"
536+msgid "terms and conditions"
537+msgstr ""
538+
539+#: qml/Wizard/Pages/40-location.qml:160
540+msgid "GPS only"
541+msgstr ""
542+
543+#: qml/Wizard/Pages/40-location.qml:214
544+msgid "Don't use my location"
545+msgstr ""
546+
547+#: qml/Wizard/Pages/40-location.qml:260
548+msgid "You can change it later in System Settings."
549+msgstr ""
550+
551+#: qml/Wizard/Pages/50-timezone.qml:29
552+msgid "Time Zone"
553+msgstr ""
554+
555+#: qml/Wizard/Pages/50-timezone.qml:178
556+msgid "Enter your city"
557+msgstr ""
558+
559+#: qml/Wizard/Pages/60-account.qml:24
560+msgid "Personalize Your Device"
561+msgstr ""
543562
544−#: qml/Wizard/Pages/30-passwd-type.qml:103
545−msgctxt "Label: Description of security method"
546−msgid "No security"
547−msgstr "Bez sigurnosti"
563+#: qml/Wizard/Pages/60-account.qml:48
564+msgid "Preferred Name"
565+msgstr ""
566+
567+#: qml/Wizard/Pages/70-passwd-type.qml:39
568+msgid "Lock Screen"
569+msgstr ""
548570
549−#: qml/Wizard/Pages/30-passwd-type.qml:105
571+#: qml/Wizard/Pages/70-passwd-type.qml:101
550572msgctxt "Label: Type of security method"
551−msgid "Passcode"
552−msgstr "Pristupni kod"
573+msgid "Create new password"
574+msgstr ""
553575
554−#: qml/Wizard/Pages/30-passwd-type.qml:106
555−msgctxt "Label: Description of security method"
556−msgid "4 digits only"
557−msgstr "samo 4 cifre"
576+#: qml/Wizard/Pages/70-passwd-type.qml:103
577+msgctxt "Label: Type of security method"
578+msgid "Create passcode (numbers only)"
579+msgstr ""
558580
559−#: qml/Wizard/Pages/30-passwd-type.qml:108
581+#: qml/Wizard/Pages/70-passwd-type.qml:105
560582msgctxt "Label: Type of security method"
561−msgid "Passphrase"
562−msgstr "Pristupna fraza"
583+msgid "No lock code"
584+msgstr ""
563585
564−#: qml/Wizard/Pages/30-passwd-type.qml:109
565−msgctxt "Label: Description of security method"
566−msgid "Numbers and letters"
567−msgstr "Brojevi i slova"
586+#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
587+msgid "Privacy Policy"
588+msgstr ""
568589
569−#: qml/Wizard/Pages/40-wifi.qml:29
570−msgid "Connect to Wi‑Fi"
571−msgstr "Povezati na Wi-Fi"
590+#: qml/Wizard/Pages/75-report-check.qml:26
591+msgid "Help Us Improve"
592+msgstr ""
593+
594+#: qml/Wizard/Pages/75-report-check.qml:59
595+msgid "Improve system performance by sending us crashes and error reports."
596+msgstr ""
572597
573−#: qml/Wizard/Pages/40-wifi.qml:168
574−msgid "Available networks…"
575−msgstr "Dostupne mreže..."
598+#: qml/Wizard/Pages/75-report-check.qml:60
599+msgid "Privacy policy"
600+msgstr ""
576601
577−#: qml/Wizard/Pages/40-wifi.qml:169
578−msgid "No available networks."
579−msgstr "Nema dostupnih mreža."
602+#: qml/Wizard/Pages/80-finished.qml:89
603+msgid "Welcome to Ubuntu"
604+msgstr ""
580605
581−#: qml/Wizard/Pages/50-location.qml:27
582−msgid "Location"
583−msgstr "Lokacija"
606+#: qml/Wizard/Pages/80-finished.qml:104
607+msgid "You are ready to use your device now"
608+msgstr ""
584609
585−#: qml/Wizard/Pages/50-location.qml:62
586−msgid "Let the phone detect your location:"
587−msgstr "Dopustite da telefon otkrije Vašu lokaciju:"
610+#: qml/Wizard/Pages/80-finished.qml:124
611+msgid "Get Started"
612+msgstr ""
588613
589−#: qml/Wizard/Pages/50-location.qml:69
590−msgid "Using GPS only (less accurate)"
591−msgstr "Samo pomoću GPS (manje precizno)"
614+#: qml/Wizard/Pages/here-terms.qml:25
615+msgid "Terms & Conditions"
616+msgstr "Uslovi i odredbe"
592617
593−#: qml/Wizard/Pages/50-location.qml:86
594−msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
595−msgstr "Pomoću GPS, anonimnog Wi-Fi i podataka mobilne mreže (preporučeno)"
618+#: qml/Wizard/Pages/here-terms.qml:69
619+msgid "Your device uses positioning technologies provided by HERE."
620+msgstr ""
596621
597−#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
598−#: qml/Wizard/Pages/50-location.qml:103
622+#: qml/Wizard/Pages/here-terms.qml:81
599623msgid ""
600−"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
601−"conditions</a>."
624+"To provide you with positioning services and to improve their quality, HERE "
625+"collects information about nearby cell towers and Wi-Fi hotspots around your "
626+"current location whenever your position is being found."
602627msgstr ""
603−"Birajući ovu opciju prihvatate za Nokia OVDJE <a href='#'>terms and "
604−"conditions</a>."
605628
606−#: qml/Wizard/Pages/50-location.qml:112
607−msgid "Not at all"
608−msgstr "Nipošto"
629+#: qml/Wizard/Pages/here-terms.qml:93
630+msgid ""
631+"The information collected is used to analyze the service and to improve the "
632+"use of service, but not to identify you personally."
633+msgstr ""
609634
610−#: qml/Wizard/Pages/50-location.qml:124
611−msgid "You can change your mind later in <b>System Settings</b>."
612−msgstr "Možete se predomisliti kasnije u <b>System Settings</b>."
635+#: qml/Wizard/Pages/here-terms.qml:106
636+#, qt-format
637+msgid "By continuing, you agree to the HERE platform %1 and %2."
638+msgstr ""
613639
614−#: qml/Wizard/Pages/60-reporting.qml:26
615−msgid "Improving your experience"
616−msgstr "Poboljšavajući vaše iskustvo"
640+#: qml/Wizard/Pages/here-terms.qml:107
641+msgid "Service Terms"
642+msgstr ""
617643
618−#: qml/Wizard/Pages/60-reporting.qml:46
619−msgid ""
620−"Your phone is set up to automatically report errors to Canonical and its "
621−"partners, the makers of the operating system."
644+#: qml/Wizard/Pages/passcode-confirm.qml:43
645+#: qml/Wizard/Pages/passcode-desktop.qml:80
646+msgid "Confirm passcode"
647+msgstr "Potvrdi pristupni kod"
648+
649+#: qml/Wizard/Pages/passcode-confirm.qml:45
650+msgid "Incorrect passcode."
622651msgstr ""
623−"Vaš telefon je podešen da automatski prijavljuje greške Canonical i "
624−"njegovim partnerima, tvorcima operativnog sistema."
625652
626−#: qml/Wizard/Pages/60-reporting.qml:53
627−msgid ""
628−"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
629−"Privacy</b>"
653+#: qml/Wizard/Pages/passcode-confirm.qml:45
654+msgctxt "Enter the passcode again"
655+msgid "Please re-enter."
656+msgstr ""
657+
658+#: qml/Wizard/Pages/passcode-desktop.qml:30
659+msgid "Lock Screen Passcode"
630660msgstr ""
631−"Ovo može biti isključeno u <b>System Settings</b> under <b>Security &amp; "
632−"Privacy</b>"
633661
634−#: qml/Wizard/Pages/80-finished.qml:24
635−msgid "All done"
636−msgstr "Sve urađeno"
662+#: qml/Wizard/Pages/passcode-desktop.qml:56
663+msgid "Enter 4 numbers to setup your passcode"
664+msgstr ""
637665
638−#: qml/Wizard/Pages/80-finished.qml:39
639−msgid "Nice work!"
640−msgstr "Dobro urađeno!"
666+#: qml/Wizard/Pages/passcode-desktop.qml:65
667+#: qml/Wizard/Pages/passcode-set.qml:54
668+msgid "Choose passcode"
669+msgstr ""
641670
642−#: qml/Wizard/Pages/80-finished.qml:46
643−msgid "Your device is now ready to use."
671+#: qml/Wizard/Pages/passcode-desktop.qml:105
672+msgid "Passcode too short"
644673msgstr ""
645674
646−#: qml/Wizard/Pages/80-finished.qml:53
647−msgid "Finish"
648−msgstr "Završiti"
675+#: qml/Wizard/Pages/passcode-desktop.qml:107
676+msgid "Passcodes match"
677+msgstr ""
649678
650−#: qml/Wizard/Pages/here-terms.qml:27
651−msgid "Terms & Conditions"
652−msgstr "Uslovi i odredbe"
679+#: qml/Wizard/Pages/passcode-desktop.qml:109
680+msgid "Passcodes do not match"
681+msgstr ""
653682
654−#: qml/Wizard/Pages/passwd-confirm.qml:49
655−msgid "Confirm passphrase"
656−msgstr "Potvrditi pristupnu rečenicu"
683+#: qml/Wizard/Pages/passcode-set.qml:62
684+msgid "Passcode must be 4 characters long"
685+msgstr ""
657686
658−#: qml/Wizard/Pages/passwd-confirm.qml:50
659−msgid "Confirm passcode"
660−msgstr "Potvrdi pristupni kod"
687+#: qml/Wizard/Pages/password-set.qml:30
688+msgid "Lock Screen Password"
689+msgstr ""
690+
691+#: qml/Wizard/Pages/password-set.qml:61
692+msgid "Enter at least 8 characters"
693+msgstr ""
661694
662−#: qml/Wizard/Pages/passwd-confirm.qml:53
663−#: qml/Wizard/Pages/passwd-confirm.qml:54
664−msgid "Please try again."
665−msgstr "Molimo pokušajte ponovo."
695+#: qml/Wizard/Pages/password-set.qml:73
696+msgid "Choose password"
697+msgstr ""
666698
667−#: qml/Wizard/Pages/passwd-set.qml:61
668−msgid "Choose your passcode"
669−msgstr "Izaberite vaš pristupni kod"
699+#: qml/Wizard/Pages/password-set.qml:103
700+msgid "Confirm password"
701+msgstr ""
670702
671−#: qml/Wizard/Pages/passwd-set.qml:68
672−msgid "Passphrase must be 4 characters long"
673−msgstr "Pristupna fraza mora sadržavati 4 slova"
703+#: qml/Wizard/Pages/sim.qml:27
704+msgid "No SIM card installed"
705+msgstr ""
674706
675−#. Translators: This is the arrow for "Back" buttons
676−#: qml/Wizard/StackButton.qml:39
677−#, qt-format
678−msgid "〈 %1"
679−msgstr "〈 %1"
707+#: qml/Wizard/Pages/sim.qml:54
708+msgid "SIM card added"
709+msgstr ""
680710
681−#. Translators: This is the arrow for "Forward" buttons
682−#: qml/Wizard/StackButton.qml:42
683−#, qt-format
684−msgid "%1 〉"
685−msgstr "%1 〉"
711+#: qml/Wizard/Pages/sim.qml:55
712+msgid "You must restart the device to access the mobile network."
713+msgstr ""
714+
715+#: qml/Wizard/Pages/sim.qml:59
716+msgid "Restart"
717+msgstr ""
718+
719+#: qml/Wizard/Pages/sim.qml:78
720+msgid "You won’t be able to make calls or use text messaging without a SIM."
721+msgstr ""
722+
723+#: qml/Wizard/Pages/sim.qml:90
724+msgid "To proceed with no SIM tap Skip."
725+msgstr ""
726+
727+#: qml/Wizard/PasswordMeter.qml:87
728+msgid "Passwords match"
729+msgstr ""
730+
731+#: qml/Wizard/PasswordMeter.qml:89
732+msgid "Passwords do not match"
733+msgstr ""
734+
735+#: qml/Wizard/PasswordMeter.qml:93
736+msgid "Strong password"
737+msgstr ""
738+
739+#: qml/Wizard/PasswordMeter.qml:95
740+msgid "Fair password"
741+msgstr ""
742+
743+#: qml/Wizard/PasswordMeter.qml:97
744+msgid "Weak password"
745+msgstr ""
746+
747+#: qml/Wizard/PasswordMeter.qml:99
748+msgid "Very weak password"
749+msgstr ""
686750
687751#~ msgid "Top edge"
688752#~ msgstr "Gornja ivica"
@@ -696,14 +760,201 @@ msgstr "%1 〉"
696760#~ msgid "Right edge"
697761#~ msgstr "Desna ivica"
698762
763+#~ msgid "Are you sure you want to shut down?"
764+#~ msgstr "Da li ste sigurni da želite ugasiti?"
765+
766+#~ msgctxt "Button: Shut down the system"
767+#~ msgid "Shut down"
768+#~ msgstr "Gašenje sistema"
769+
770+#~ msgid "See all"
771+#~ msgstr "Pogledati sve"
772+
773+#~ msgid "See less"
774+#~ msgstr "Pogledati manje"
775+
699776#~ msgid "Please re-enter"
700777#~ msgstr "Molimo ponovo unesite"
701778
779+#~ msgid "This action does different things for different apps"
780+#~ msgstr "Ova radnja čini različite stvari za različite aplikacije"
781+
782+#~ msgid "Unlock SIM"
783+#~ msgstr "Otključajte SIM"
784+
785+#~ msgid "Roaming"
786+#~ msgstr "Roaming"
787+
788+#~ msgid "Tap here to continue."
789+#~ msgstr "Kucnite ovdje za nastavak."
790+
791+#~ msgid "These are the shortcuts to favorite apps"
792+#~ msgstr "Ovo su kratice za omiljene aplikacije"
793+
794+#~ msgid "Swipe up from the bottom edge."
795+#~ msgstr "Prevucite od donje ivice."
796+
797+#~ msgid "Open special menus"
798+#~ msgstr "Otvorite posebne menije"
799+
800+#~ msgid "Tap here to finish."
801+#~ msgstr "Kucnite ovdje za kraj."
802+
803+#~ msgid "Long swipe from the right edge."
804+#~ msgstr "Dugo prevlačenje od desne ivice."
805+
806+#~ msgid "View all your running tasks."
807+#~ msgstr "Pogledajte sve pokrenute zadatke."
808+
809+#~ msgid "Hi!"
810+#~ msgstr "Ćao!"
811+
702812#~ msgid "Welcome to your Ubuntu phone."
703813#~ msgstr "Dobrodošli u vaš Ubuntu telefon."
704814
815+#~ msgid "To view open apps"
816+#~ msgstr "Za pregled pokrenutih aplikacija"
817+
818+#~ msgid "Try again."
819+#~ msgstr "Pokušajte ponovo."
820+
821+#~ msgid "You almost got it!"
822+#~ msgstr "Skoro ste uspjeli!"
823+
824+#~ msgid "Short swipe from the left edge."
825+#~ msgstr "Kratko prevlačenje od lijeve ivice."
826+
827+#~ msgid "Open the launcher"
828+#~ msgstr "Otvorite pokretač"
829+
830+#~ msgid "Lock security"
831+#~ msgstr "Sigurnost zaključavanja"
832+
833+#~ msgid "Without it, you won’t be able to make calls or use text messaging."
834+#~ msgstr ""
835+#~ "Bez nje, nećete biti u mogućnosti da uspostavite pozive ili koristite "
836+#~ "tekstualne poruke."
837+
838+#~ msgid "Add a SIM card and restart your device"
839+#~ msgstr "Dodajte SIM karticu i restartujte vaš uređaj"
840+
705841#~ msgid "Please select how you’d like to unlock your phone."
706842#~ msgstr "Molimo izaberite kako biste željeli da otključavate vaš telefon."
707843
844+#~ msgctxt "Label: Description of security method"
845+#~ msgid "No security"
846+#~ msgstr "Bez sigurnosti"
847+
848+#~ msgctxt "Label: Type of security method"
849+#~ msgid "Swipe"
850+#~ msgstr "Prevlačenje"
851+
852+#~ msgctxt "Label: Type of security method"
853+#~ msgid "Passcode"
854+#~ msgstr "Pristupni kod"
855+
856+#~ msgid "Let’s get started."
857+#~ msgstr "Započnimo"
858+
859+#~ msgid "Continue"
860+#~ msgstr "Nastavite"
861+
862+#~ msgctxt "Label: Description of security method"
863+#~ msgid "4 digits only"
864+#~ msgstr "samo 4 cifre"
865+
866+#~ msgid "Let the phone detect your location:"
867+#~ msgstr "Dopustite da telefon otkrije Vašu lokaciju:"
868+
869+#~ msgid "Available networks…"
870+#~ msgstr "Dostupne mreže..."
871+
872+#~ msgid "No available networks."
873+#~ msgstr "Nema dostupnih mreža."
874+
875+#~ msgid "Location"
876+#~ msgstr "Lokacija"
877+
878+#~ msgid "Using GPS only (less accurate)"
879+#~ msgstr "Samo pomoću GPS (manje precizno)"
880+
881+#~ msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
882+#~ msgstr "Pomoću GPS, anonimnog Wi-Fi i podataka mobilne mreže (preporučeno)"
883+
884+#~ msgctxt "Label: Description of security method"
885+#~ msgid "Numbers and letters"
886+#~ msgstr "Brojevi i slova"
887+
888+#~ msgid "Improving your experience"
889+#~ msgstr "Poboljšavajući vaše iskustvo"
890+
891+#~ msgid "You can change your mind later in <b>System Settings</b>."
892+#~ msgstr "Možete se predomisliti kasnije u <b>System Settings</b>."
893+
894+#~ msgid ""
895+#~ "This can be disabled in <b>System Settings</b> under <b>Security &amp; "
896+#~ "Privacy</b>"
897+#~ msgstr ""
898+#~ "Ovo može biti isključeno u <b>System Settings</b> under <b>Security &amp; "
899+#~ "Privacy</b>"
900+
901+#~ msgid ""
902+#~ "Your phone is set up to automatically report errors to Canonical and its "
903+#~ "partners, the makers of the operating system."
904+#~ msgstr ""
905+#~ "Vaš telefon je podešen da automatski prijavljuje greške Canonical i "
906+#~ "njegovim partnerima, tvorcima operativnog sistema."
907+
908+#~ msgid "Nice work!"
909+#~ msgstr "Dobro urađeno!"
910+
911+#~ msgid "All done"
912+#~ msgstr "Sve urađeno"
913+
914+#~ msgid "Finish"
915+#~ msgstr "Završiti"
916+
917+#~ msgid ""
918+#~ "By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
919+#~ "conditions</a>."
920+#~ msgstr ""
921+#~ "Birajući ovu opciju prihvatate za Nokia OVDJE <a href='#'>terms and "
922+#~ "conditions</a>."
923+
924+#~ msgid "Not at all"
925+#~ msgstr "Nipošto"
926+
708927#~ msgid "Your phone is now ready to use."
709928#~ msgstr "Vaš telefon je sada spreman za upotrebu."
929+
930+#~ msgid "Confirm passphrase"
931+#~ msgstr "Potvrditi pristupnu rečenicu"
932+
933+#, qt-format
934+#~ msgid "〈 %1"
935+#~ msgstr "〈 %1"
936+
937+#, qt-format
938+#~ msgid "%1 〉"
939+#~ msgstr "%1 〉"
940+
941+#~ msgid "Choose your passcode"
942+#~ msgstr "Izaberite vaš pristupni kod"
943+
944+#~ msgid "Please try again."
945+#~ msgstr "Molimo pokušajte ponovo."
946+
947+#~ msgid "Passphrase must be 4 characters long"
948+#~ msgstr "Pristupna fraza mora sadržavati 4 slova"
949+
950+#~ msgctxt "Label: Type of security method"
951+#~ msgid "Passphrase"
952+#~ msgstr "Pristupna fraza"
953+
954+#~ msgctxt "Title: Reboot/Shut down dialog"
955+#~ msgid "Shut down"
956+#~ msgstr "Ugasi"
957+
958+#~ msgctxt "Button: Reboot the system"
959+#~ msgid "Reboot"
960+#~ msgstr "Ponovo pokreni"
po/ca.po+507−261
@@ -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-16 03:29+0000\n"
10+"POT-Creation-Date: 2016-04-27 15:01+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,23 +15,23 @@ 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-23 06:03+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-04-30 05:36+0000\n"
19+"X-Generator: Launchpad (build 17995)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
2323msgstr "Contrasenya: "
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 "Enganxa la drecera"
2929
30−#: plugins/Unity/Launcher/launcheritem.cpp:52
30+#: plugins/Unity/Launcher/launcheritem.cpp:53
3131msgid "Quit"
3232msgstr "Surt"
3333
34−#: plugins/Unity/Launcher/launcheritem.cpp:106
34+#: plugins/Unity/Launcher/launcheritem.cpp:107
3535msgid "Unpin shortcut"
3636msgstr "Desenganxa la drecera"
3737
@@ -77,53 +77,35 @@ msgctxt "Button: Log out from the system"
7777msgid "Log Out"
7878msgstr "Surt"
7979
80−#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:194
81−#: qml/Components/Dialogs.qml:253
80+#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
81+#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
82+#: qml/Wizard/Pages/passcode-set.qml:32
8283msgid "Cancel"
8384msgstr "Cancel·la"
8485
8586#: qml/Components/Dialogs.qml:173
86−msgctxt "Title: Reboot/Shut down dialog"
87−msgid "Shut down"
88−msgstr "Apaga"
89−
90−#: qml/Components/Dialogs.qml:174
91−msgid "Are you sure you want to shut down?"
92−msgstr "Segur que voleu apagar?"
93−
94−#: qml/Components/Dialogs.qml:176
95−msgctxt "Button: Reboot the system"
96−msgid "Reboot"
97−msgstr "Reinicia"
98−
99−#: qml/Components/Dialogs.qml:185
100−msgctxt "Button: Shut down the system"
101−msgid "Shut down"
102−msgstr "Apaga"
103−
104−#: qml/Components/Dialogs.qml:207
10587msgctxt "Title: Reboot dialog"
10688msgid "Reboot"
10789msgstr "Reinicia"
10890
109−#: qml/Components/Dialogs.qml:208
91+#: qml/Components/Dialogs.qml:174
11092msgid "Are you sure you want to reboot?"
11193msgstr "Segur que voleu reiniciar?"
11294
113−#: qml/Components/Dialogs.qml:210
95+#: qml/Components/Dialogs.qml:176
11496msgid "No"
11597msgstr "No"
11698
117−#: qml/Components/Dialogs.qml:217
99+#: qml/Components/Dialogs.qml:182
118100msgid "Yes"
119101msgstr "Sí"
120102
121−#: qml/Components/Dialogs.qml:232
103+#: qml/Components/Dialogs.qml:197
122104msgctxt "Title: Power off/Restart dialog"
123105msgid "Power"
124106msgstr "Energia"
125107
126−#: qml/Components/Dialogs.qml:233
108+#: qml/Components/Dialogs.qml:198
127109msgid ""
128110"Are you sure you would like\n"
129111"to power off?"
@@ -131,25 +113,25 @@ msgstr ""
131113"Segur que voleu\n"
132114"apagar?"
133115
134−#: qml/Components/Dialogs.qml:235
116+#: qml/Components/Dialogs.qml:200
135117msgctxt "Button: Power off the system"
136118msgid "Power off"
137119msgstr "Apaga"
138120
139−#: qml/Components/Dialogs.qml:244
121+#: qml/Components/Dialogs.qml:209
140122msgctxt "Button: Restart the system"
141123msgid "Restart"
142124msgstr "Reinicia"
143125
144−#: qml/Components/Lockscreen.qml:245
126+#: qml/Components/Lockscreen.qml:231
145127msgid "Return to Call"
146128msgstr "Torna a la trucada"
147129
148−#: qml/Components/Lockscreen.qml:245
130+#: qml/Components/Lockscreen.qml:231
149131msgid "Emergency Call"
150132msgstr "Trucada d'emergència"
151133
152−#: qml/Components/Lockscreen.qml:277
134+#: qml/Components/Lockscreen.qml:263
153135msgid "OK"
154136msgstr "D'acord"
155137
@@ -158,10 +140,10 @@ msgid "Apps may have unsaved data:"
158140msgstr "Pot ser que aquestes aplicacions no hagin desat les dades:"
159141
160142#: qml/Components/ModeSwitchWarningDialog.qml:57
143+msgctxt ""
144+"Re-dock means connect the device again to an external screen/mouse/keyboard"
161145msgid "Re-dock, save your work and close these apps to continue."
162146msgstr ""
163−"Torneu a connectar, deseu la feina i tanqueu aquestes aplicacions per "
164−"continuar."
165147
166148#: qml/Components/ModeSwitchWarningDialog.qml:63
167149msgid "Or force close now (unsaved data will be lost)."
@@ -179,42 +161,58 @@ msgstr "Torna a connectar"
179161msgid "Close all"
180162msgstr "Tanca-ho tot"
181163
182−#: qml/Dash/DashPageHeader.qml:266
164+#: qml/Dash/DashPageHeader.qml:337
183165msgctxt "Button: Open the Ubuntu Store"
184166msgid "Store"
185167msgstr "Botiga"
186168
187−#: qml/Dash/DashPageHeader.qml:273
169+#: qml/Dash/DashPageHeader.qml:344
188170msgctxt "Button: Start a search in the current dash scope"
189171msgid "Search"
190172msgstr "Cerca"
191173
192−#: qml/Dash/DashPageHeader.qml:283
174+#: qml/Dash/DashPageHeader.qml:354
193175msgctxt "Button: Show the current dash scope settings"
194176msgid "Settings"
195177msgstr "Paràmetres"
196178
197−#: qml/Dash/DashPageHeader.qml:290
179+#: qml/Dash/DashPageHeader.qml:361
198180msgid "Remove from Favorites"
199181msgstr "Suprimeix dels preferits"
200182
201−#: qml/Dash/DashPageHeader.qml:290
183+#: qml/Dash/DashPageHeader.qml:361
202184msgid "Add to Favorites"
203185msgstr "Afegeix als preferits"
204186
205−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
206−msgid "See less"
207−msgstr "Mostra'n menys"
187+#: qml/Dash/FiltersPopover.qml:60
188+msgid "Refine your results"
189+msgstr ""
190+
191+#: qml/Dash/FiltersPopover.qml:69
192+msgid "Reset"
193+msgstr ""
208194
209−#: qml/Dash/GenericScopeView.qml:587
210−msgid "See all"
211−msgstr "Mostra-ho tot"
195+#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
196+msgid "Show less"
197+msgstr ""
212198
213−#: qml/Dash/GenericScopeView.qml:649
199+#: qml/Dash/GenericScopeView.qml:570
200+msgid "Show all"
201+msgstr ""
202+
203+#: qml/Dash/GenericScopeView.qml:627
214204msgctxt "Label: Hint for dash search line edit"
215205msgid "Search"
216206msgstr "Cerca"
217207
208+#: qml/Dash/PageHeaderExtraPanel.qml:55
209+msgid "Recent Searches"
210+msgstr "Cerques recents"
211+
212+#: qml/Dash/PageHeaderExtraPanel.qml:66
213+msgid "Clear All"
214+msgstr "Neteja-ho tot"
215+
218216#: qml/Dash/Previews/PreviewActionCombo.qml:35
219217msgid "More..."
220218msgstr "Més..."
@@ -236,7 +234,7 @@ msgstr "Puntueu-ho"
236234msgid "Add a review"
237235msgstr "Afegiu una ressenya"
238236
239−#: qml/Dash/Previews/PreviewSharing.qml:50
237+#: qml/Dash/Previews/PreviewSharing.qml:66
240238msgid "Preview Share Item"
241239msgstr ""
242240
@@ -264,13 +262,13 @@ msgstr "Inici"
264262msgid "Also installed"
265263msgstr "També instal·lat"
266264
267−#: qml/DisabledScreenNotice.qml:87
265+#: qml/DisabledScreenNotice.qml:104
268266msgid ""
269267"Your device is now connected to an external display. Use this screen as a "
270−"touch pad to interact with the mouse."
268+"touch pad to interact with the pointer."
271269msgstr ""
272270
273−#: qml/Greeter/CoverPage.qml:107
271+#: qml/Greeter/CoverPage.qml:118
274272msgid "Unlock"
275273msgstr "Desbloca"
276274
@@ -282,11 +280,11 @@ msgstr "Torna-ho a provar"
282280msgid "Tap to unlock"
283281msgstr "Feu un toc per desblocar"
284282
285−#: qml/Greeter/NarrowView.qml:54 qml/Wizard/Pages/passwd-confirm.qml:53
283+#: qml/Greeter/NarrowView.qml:54
286284msgid "Sorry, incorrect passphrase."
287285msgstr "La contrasenya és incorrecta"
288286
289−#: qml/Greeter/NarrowView.qml:55 qml/Wizard/Pages/passwd-confirm.qml:54
287+#: qml/Greeter/NarrowView.qml:55
290288msgid "Sorry, incorrect passcode."
291289msgstr "El codi d'accés no és correcte"
292290
@@ -317,7 +315,7 @@ msgstr ""
317315msgid "Enter %1"
318316msgstr "Introduïu: %1"
319317
320−#: qml/Greeter/NarrowView.qml:117 qml/Wizard/Pages/passwd-set.qml:60
318+#: qml/Greeter/NarrowView.qml:117
321319msgid "Enter passphrase"
322320msgstr "Introduïu la contrasenya"
323321
@@ -343,7 +341,7 @@ msgstr "Torneu-ho a introduir"
343341msgid "Sorry, incorrect passcode"
344342msgstr "El codi d'accés no és correcte"
345343
346−#: qml/Notifications/NotificationMenuItemFactory.qml:129
344+#: qml/Notifications/NotificationMenuItemFactory.qml:124
347345msgid "Show password"
348346msgstr "Mostra la contrasenya"
349347
@@ -355,62 +353,62 @@ msgstr "Feu un toc per tornar a la trucada..."
355353msgid "Conference"
356354msgstr "Conferència"
357355
358−#: qml/Panel/Indicators/MenuItemFactory.qml:753
356+#: qml/Panel/Indicators/MenuItemFactory.qml:762
359357msgid "Nothing is playing"
360358msgstr "No s'està reproduint res"
361359
362−#: qml/Panel/Indicators/MenuItemFactory.qml:882
360+#: qml/Panel/Indicators/MenuItemFactory.qml:891
363361#, qt-format
364362msgid "%1 hour"
365363msgid_plural "%1 hours"
366364msgstr[0] "%1 hora"
367365msgstr[1] "%1 hores"
368366
369−#: qml/Panel/Indicators/MenuItemFactory.qml:886
367+#: qml/Panel/Indicators/MenuItemFactory.qml:895
370368#, qt-format
371369msgid "%1 minute"
372370msgid_plural "%1 minutes"
373371msgstr[0] "%1 minut"
374372msgstr[1] "%1 minuts"
375373
376−#: qml/Panel/Indicators/MenuItemFactory.qml:891
374+#: qml/Panel/Indicators/MenuItemFactory.qml:900
377375#, qt-format
378376msgid "%1 second"
379377msgid_plural "%1 seconds"
380378msgstr[0] "%1 segon"
381379msgstr[1] "%1 segons"
382380
383−#: qml/Panel/Indicators/MenuItemFactory.qml:894
381+#: qml/Panel/Indicators/MenuItemFactory.qml:903
384382msgid "0 seconds"
385383msgstr "0 segons"
386384
387385#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
388−#: qml/Panel/Indicators/MenuItemFactory.qml:896
386+#: qml/Panel/Indicators/MenuItemFactory.qml:905
389387#, qt-format
390388msgid "%1 remaining"
391389msgstr "Resta %1"
392390
393−#: qml/Panel/Indicators/MenuItemFactory.qml:902
391+#: qml/Panel/Indicators/MenuItemFactory.qml:911
394392msgid "In queue…"
395393msgstr "A la cua..."
396394
397−#: qml/Panel/Indicators/MenuItemFactory.qml:906
395+#: qml/Panel/Indicators/MenuItemFactory.qml:915
398396msgid "Downloading"
399397msgstr "S'està baixant"
400398
401−#: qml/Panel/Indicators/MenuItemFactory.qml:908
399+#: qml/Panel/Indicators/MenuItemFactory.qml:917
402400msgid "Paused, tap to resume"
403401msgstr "En pausa, feu un toc per continuar"
404402
405−#: qml/Panel/Indicators/MenuItemFactory.qml:910
403+#: qml/Panel/Indicators/MenuItemFactory.qml:919
406404msgid "Canceled"
407405msgstr "S'ha cancel·lat"
408406
409−#: qml/Panel/Indicators/MenuItemFactory.qml:912
407+#: qml/Panel/Indicators/MenuItemFactory.qml:921
410408msgid "Finished"
411409msgstr "S'ha finalitzat"
412410
413−#: qml/Panel/Indicators/MenuItemFactory.qml:914
411+#: qml/Panel/Indicators/MenuItemFactory.qml:923
414412msgid "Failed, tap to retry"
415413msgstr "Ha fallat, feu un toc per tornar-ho a intentar"
416414
@@ -430,261 +428,324 @@ msgctxt "Button: Call back on phone"
430428msgid "Call back"
431429msgstr "Retorna la trucada"
432430
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−
441−#: qml/Tutorial/TutorialBottom.qml:28
442−msgid "Open special menus"
443−msgstr "Obre els menús especials"
444−
445−#: qml/Tutorial/TutorialBottom.qml:29
446−msgid "Swipe up from the bottom edge."
447−msgstr "Llisqueu el dit des de la vora inferior."
431+#: qml/Stages/SideStage.qml:76
432+msgid "Drag using 3 fingers any application from one window to the other"
433+msgstr ""
448434
449−#: qml/Tutorial/TutorialBottomFinish.qml:24
450−msgid "This action does different things for different apps"
451−msgstr "Aquesta acció fa coses diferents depenent de l'aplicació"
435+#: qml/Tutorial/TutorialBottom.qml:78
436+msgid "Swipe up to add a contact"
437+msgstr ""
452438
453−#: qml/Tutorial/TutorialBottomFinish.qml:25
454−msgid "Tap here to finish."
455−msgstr "Feu un toc per finalitzar."
439+#: qml/Tutorial/TutorialBottom.qml:80
440+msgid "Swipe up for favorite calculations"
441+msgstr ""
456442
457−#: qml/Tutorial/TutorialContent.qml:80 qml/Tutorial/TutorialLeftFinish.qml:25
458−#: qml/Tutorial/TutorialRight.qml:144
459−msgid "Tap here to continue."
460−msgstr "Feu un toc per continuar."
443+#: qml/Tutorial/TutorialBottom.qml:82
444+msgid "Swipe up for recent calls"
445+msgstr ""
461446
462−#: qml/Tutorial/TutorialLeft.qml:26
463−msgid "Open the launcher"
464−msgstr "Obre el llançador"
447+#: qml/Tutorial/TutorialBottom.qml:84
448+msgid "Swipe up to create a message"
449+msgstr ""
465450
466−#: qml/Tutorial/TutorialLeft.qml:27
467−msgid "Short swipe from the left edge."
468−msgstr "Lliscament curt des de la vora esquerra."
451+#: qml/Tutorial/TutorialBottom.qml:85
452+msgid "Swipe up to manage the app"
453+msgstr ""
469454
470−#: qml/Tutorial/TutorialLeftFinish.qml:24
471−msgid "These are the shortcuts to favorite apps"
472−msgstr "Aquestes són les dreceres a les aplicacions preferides"
455+#: qml/Tutorial/TutorialLeftLong.qml:47
456+msgid "Long swipe from the left edge to open the Today scope"
457+msgstr ""
473458
474−#: qml/Tutorial/TutorialPage.qml:178
475−msgid "You almost got it!"
476−msgstr "Ja gairebé ho teniu!"
459+#: qml/Tutorial/TutorialLeft.qml:47
460+msgid "Swipe from the left edge to open the launcher"
461+msgstr ""
477462
478−#: qml/Tutorial/TutorialPage.qml:195
479−msgid "Try again."
480−msgstr "Torneu-ho a provar."
463+#: qml/Tutorial/TutorialRight.qml:55
464+msgid "Push your mouse against the right edge to view your open apps"
465+msgstr ""
481466
482−#: qml/Tutorial/TutorialRight.qml:31
483−msgid "To view open apps"
484−msgstr "Per veure les aplicacions obertes"
467+#: qml/Tutorial/TutorialRight.qml:56
468+msgid "Short or long swipe from the right edge to view your open apps"
469+msgstr ""
485470
486−#: qml/Tutorial/TutorialRight.qml:32
487−msgid "Long swipe from the right edge."
488−msgstr "Lliscament llarg des de la vora dreta."
471+#: qml/Tutorial/TutorialTop.qml:53
472+msgid "Swipe from the top right edge to open the notification bar"
473+msgstr ""
489474
490−#: qml/Tutorial/TutorialRight.qml:122
491−msgid "View all your running tasks."
492−msgstr "Mostra totes les tasques en execució."
475+#: qml/Tutorial/TutorialTop.qml:54
476+msgid "Swipe from the top edge to open the notification bar"
477+msgstr ""
493478
494−#: qml/Wizard/Page.qml:89
479+#: qml/Wizard/Page.qml:54
495480msgctxt "Button: Go back one page in the Wizard"
496481msgid "Back"
497482msgstr "Enrere"
498483
499484#: qml/Wizard/Pages/10-welcome.qml:27
500−msgid "Hi!"
501−msgstr "Hola!"
485+msgid "Language"
486+msgstr ""
502487
503−#: qml/Wizard/Pages/10-welcome.qml:44
504−msgid "Welcome to your Ubuntu device."
488+#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
489+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
490+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
491+#: qml/Wizard/Pages/75-report-check.qml:84
492+#: qml/Wizard/Pages/passcode-desktop.qml:124
493+#: qml/Wizard/Pages/password-set.qml:141
494+msgid "Next"
505495msgstr ""
506496
507−#: qml/Wizard/Pages/10-welcome.qml:52
508−msgid "Let’s get started."
509−msgstr "Comencem."
497+#: qml/Wizard/Pages/30-wifi.qml:29
498+msgid "Connect to Wi‑Fi"
499+msgstr "Connecta't a la Wi-Fi"
510500
511−#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:133
512−#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
513−#: qml/Wizard/Pages/60-reporting.qml:60 qml/Wizard/Pages/passwd-confirm.qml:82
514−#: qml/Wizard/Pages/passwd-set.qml:90
515−msgid "Continue"
516−msgstr "Continua"
501+#: qml/Wizard/Pages/30-wifi.qml:130
502+msgid "Connected"
503+msgstr ""
517504
518−#: qml/Wizard/Pages/20-sim.qml:25
519−msgid "Add a SIM card and restart your device"
520−msgstr "Afegiu una targeta SIM i reinicieu el dispositiu"
505+#: qml/Wizard/Pages/30-wifi.qml:163
506+msgid "Available Wi-Fi networks"
507+msgstr ""
521508
522−#: qml/Wizard/Pages/20-sim.qml:59
523−msgid "Without it, you won’t be able to make calls or use text messaging."
524−msgstr "Sense ella, no podreu fer trucades o enviar missatges de text."
509+#: qml/Wizard/Pages/30-wifi.qml:164
510+msgid "No available Wi-Fi networks"
511+msgstr ""
525512
526−#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
513+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
514+#: qml/Wizard/Pages/sim.qml:101
527515msgid "Skip"
528516msgstr "Omet"
529517
530−#: qml/Wizard/Pages/30-passwd-type.qml:39
531−msgid "Lock security"
532−msgstr "Seguretat del bloqueig"
518+#: qml/Wizard/Pages/40-location.qml:27
519+msgid "Location Services"
520+msgstr ""
521+
522+#: qml/Wizard/Pages/40-location.qml:83
523+msgid ""
524+"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
525+"(recommended)"
526+msgstr ""
527+
528+#: qml/Wizard/Pages/40-location.qml:105
529+#, qt-format
530+msgid "By selecting this option you agree to the Nokia HERE %1."
531+msgstr ""
533532
534−#: qml/Wizard/Pages/30-passwd-type.qml:79
535−msgid "Please select how you’d like to unlock your device."
533+#: qml/Wizard/Pages/40-location.qml:106
534+msgctxt "part of: Nokia HERE terms and conditions"
535+msgid "terms and conditions"
536536msgstr ""
537537
538−#: qml/Wizard/Pages/30-passwd-type.qml:102
539−msgctxt "Label: Type of security method"
540−msgid "Swipe"
541−msgstr "Lliscament amb el dit"
538+#: qml/Wizard/Pages/40-location.qml:160
539+msgid "GPS only"
540+msgstr ""
541+
542+#: qml/Wizard/Pages/40-location.qml:214
543+msgid "Don't use my location"
544+msgstr ""
545+
546+#: qml/Wizard/Pages/40-location.qml:260
547+msgid "You can change it later in System Settings."
548+msgstr ""
549+
550+#: qml/Wizard/Pages/50-timezone.qml:29
551+msgid "Time Zone"
552+msgstr ""
553+
554+#: qml/Wizard/Pages/50-timezone.qml:178
555+msgid "Enter your city"
556+msgstr ""
557+
558+#: qml/Wizard/Pages/60-account.qml:24
559+msgid "Personalize Your Device"
560+msgstr ""
561+
562+#: qml/Wizard/Pages/60-account.qml:48
563+msgid "Preferred Name"
564+msgstr ""
542565
543−#: qml/Wizard/Pages/30-passwd-type.qml:103
544−msgctxt "Label: Description of security method"
545−msgid "No security"
546−msgstr "Sense seguretat"
566+#: qml/Wizard/Pages/70-passwd-type.qml:39
567+msgid "Lock Screen"
568+msgstr ""
547569
548−#: qml/Wizard/Pages/30-passwd-type.qml:105
570+#: qml/Wizard/Pages/70-passwd-type.qml:101
549571msgctxt "Label: Type of security method"
550−msgid "Passcode"
551−msgstr "Codi d'accés"
572+msgid "Create new password"
573+msgstr ""
552574
553−#: qml/Wizard/Pages/30-passwd-type.qml:106
554−msgctxt "Label: Description of security method"
555−msgid "4 digits only"
556−msgstr "Només 4 dígits"
575+#: qml/Wizard/Pages/70-passwd-type.qml:103
576+msgctxt "Label: Type of security method"
577+msgid "Create passcode (numbers only)"
578+msgstr ""
557579
558−#: qml/Wizard/Pages/30-passwd-type.qml:108
580+#: qml/Wizard/Pages/70-passwd-type.qml:105
559581msgctxt "Label: Type of security method"
560−msgid "Passphrase"
561−msgstr "Contrasenya"
582+msgid "No lock code"
583+msgstr ""
562584
563−#: qml/Wizard/Pages/30-passwd-type.qml:109
564−msgctxt "Label: Description of security method"
565−msgid "Numbers and letters"
566−msgstr "Números i lletres"
585+#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
586+msgid "Privacy Policy"
587+msgstr ""
567588
568−#: qml/Wizard/Pages/40-wifi.qml:29
569−msgid "Connect to Wi‑Fi"
570−msgstr "Connecta't a la Wi-Fi"
589+#: qml/Wizard/Pages/75-report-check.qml:26
590+msgid "Help Us Improve"
591+msgstr ""
571592
572−#: qml/Wizard/Pages/40-wifi.qml:168
573−msgid "Available networks…"
574−msgstr "Xarxes disponibles..."
593+#: qml/Wizard/Pages/75-report-check.qml:59
594+msgid "Improve system performance by sending us crashes and error reports."
595+msgstr ""
575596
576−#: qml/Wizard/Pages/40-wifi.qml:169
577−msgid "No available networks."
578−msgstr "No hi ha xarxes disponibles"
597+#: qml/Wizard/Pages/75-report-check.qml:60
598+msgid "Privacy policy"
599+msgstr ""
579600
580−#: qml/Wizard/Pages/50-location.qml:27
581−msgid "Location"
582−msgstr "Ubicació"
601+#: qml/Wizard/Pages/80-finished.qml:89
602+msgid "Welcome to Ubuntu"
603+msgstr ""
583604
584−#: qml/Wizard/Pages/50-location.qml:62
585−msgid "Let the phone detect your location:"
586−msgstr "Fes que el telèfon detecti la meva ubicació:"
605+#: qml/Wizard/Pages/80-finished.qml:104
606+msgid "You are ready to use your device now"
607+msgstr ""
587608
588−#: qml/Wizard/Pages/50-location.qml:69
589−msgid "Using GPS only (less accurate)"
590−msgstr "Utilitza només el GPS (menys precís)"
609+#: qml/Wizard/Pages/80-finished.qml:124
610+msgid "Get Started"
611+msgstr ""
612+
613+#: qml/Wizard/Pages/here-terms.qml:25
614+msgid "Terms & Conditions"
615+msgstr "Condicions generals"
591616
592−#: qml/Wizard/Pages/50-location.qml:86
593−msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
617+#: qml/Wizard/Pages/here-terms.qml:69
618+msgid "Your device uses positioning technologies provided by HERE."
594619msgstr ""
595−"Utilitza GPS, Wi-Fi anonimitzada i informació de la xarxa telefònica "
596−"(recomanat)"
597620
598−#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
599−#: qml/Wizard/Pages/50-location.qml:103
621+#: qml/Wizard/Pages/here-terms.qml:81
600622msgid ""
601−"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
602−"conditions</a>."
623+"To provide you with positioning services and to improve their quality, HERE "
624+"collects information about nearby cell towers and Wi-Fi hotspots around your "
625+"current location whenever your position is being found."
603626msgstr ""
604−"Si seleccioneu aquesta opció, accepteu <a href='#'>les condicions generals "
605−"del servei Nokia HERE</a>."
606627
607−#: qml/Wizard/Pages/50-location.qml:112
608−msgid "Not at all"
609−msgstr "No"
628+#: qml/Wizard/Pages/here-terms.qml:93
629+msgid ""
630+"The information collected is used to analyze the service and to improve the "
631+"use of service, but not to identify you personally."
632+msgstr ""
610633
611−#: qml/Wizard/Pages/50-location.qml:124
612−msgid "You can change your mind later in <b>System Settings</b>."
634+#: qml/Wizard/Pages/here-terms.qml:106
635+#, qt-format
636+msgid "By continuing, you agree to the HERE platform %1 and %2."
613637msgstr ""
614−"Podeu canviar-ho més endavant a l'aplicació <b>Paràmetres del sistema</b>"
615638
616−#: qml/Wizard/Pages/60-reporting.qml:26
617−msgid "Improving your experience"
618−msgstr "Millora de l'experiència"
639+#: qml/Wizard/Pages/here-terms.qml:107
640+msgid "Service Terms"
641+msgstr ""
619642
620−#: qml/Wizard/Pages/60-reporting.qml:46
621−msgid ""
622−"Your phone is set up to automatically report errors to Canonical and its "
623−"partners, the makers of the operating system."
643+#: qml/Wizard/Pages/passcode-confirm.qml:43
644+#: qml/Wizard/Pages/passcode-desktop.qml:80
645+msgid "Confirm passcode"
646+msgstr "Confirmeu el codi d'accés"
647+
648+#: qml/Wizard/Pages/passcode-confirm.qml:45
649+msgid "Incorrect passcode."
624650msgstr ""
625−"Aquest telèfon està configurat per enviar errors de manera automàtica a "
626−"Canonical i associats, els creadors del sistema operatiu."
627651
628−#: qml/Wizard/Pages/60-reporting.qml:53
629−msgid ""
630−"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
631−"Privacy</b>"
652+#: qml/Wizard/Pages/passcode-confirm.qml:45
653+msgctxt "Enter the passcode again"
654+msgid "Please re-enter."
632655msgstr ""
633−"Podeu inhabilitar-ho a <b>Configuració del sistema</b>, a la secció "
634−"<b>Seguretat i privadesa</b>"
635656
636−#: qml/Wizard/Pages/80-finished.qml:24
637−msgid "All done"
638−msgstr "Tot fet"
657+#: qml/Wizard/Pages/passcode-desktop.qml:30
658+msgid "Lock Screen Passcode"
659+msgstr ""
639660
640−#: qml/Wizard/Pages/80-finished.qml:39
641−msgid "Nice work!"
642−msgstr "Bona feina!"
661+#: qml/Wizard/Pages/passcode-desktop.qml:56
662+msgid "Enter 4 numbers to setup your passcode"
663+msgstr ""
643664
644−#: qml/Wizard/Pages/80-finished.qml:46
645−msgid "Your device is now ready to use."
665+#: qml/Wizard/Pages/passcode-desktop.qml:65
666+#: qml/Wizard/Pages/passcode-set.qml:54
667+msgid "Choose passcode"
646668msgstr ""
647669
648−#: qml/Wizard/Pages/80-finished.qml:53
649−msgid "Finish"
650−msgstr "Finalitza"
670+#: qml/Wizard/Pages/passcode-desktop.qml:105
671+msgid "Passcode too short"
672+msgstr ""
651673
652−#: qml/Wizard/Pages/here-terms.qml:27
653−msgid "Terms & Conditions"
654−msgstr "Condicions generals"
674+#: qml/Wizard/Pages/passcode-desktop.qml:107
675+msgid "Passcodes match"
676+msgstr ""
655677
656−#: qml/Wizard/Pages/passwd-confirm.qml:49
657−msgid "Confirm passphrase"
658−msgstr "Confirmeu la contrasenya"
678+#: qml/Wizard/Pages/passcode-desktop.qml:109
679+msgid "Passcodes do not match"
680+msgstr ""
659681
660−#: qml/Wizard/Pages/passwd-confirm.qml:50
661−msgid "Confirm passcode"
662−msgstr "Confirmeu el codi d'accés"
682+#: qml/Wizard/Pages/passcode-set.qml:62
683+msgid "Passcode must be 4 characters long"
684+msgstr ""
663685
664−#: qml/Wizard/Pages/passwd-confirm.qml:53
665−#: qml/Wizard/Pages/passwd-confirm.qml:54
666−msgid "Please try again."
667−msgstr "Torneu-ho a intentar."
686+#: qml/Wizard/Pages/password-set.qml:30
687+msgid "Lock Screen Password"
688+msgstr ""
668689
669−#: qml/Wizard/Pages/passwd-set.qml:61
670−msgid "Choose your passcode"
671−msgstr "Trieu el codi d'accés"
690+#: qml/Wizard/Pages/password-set.qml:61
691+msgid "Enter at least 8 characters"
692+msgstr ""
672693
673−#: qml/Wizard/Pages/passwd-set.qml:68
674−msgid "Passphrase must be 4 characters long"
675−msgstr "La contrasenya ha de tenir 4 caràcters com a mínim"
694+#: qml/Wizard/Pages/password-set.qml:73
695+msgid "Choose password"
696+msgstr ""
676697
677−#. Translators: This is the arrow for "Back" buttons
678−#: qml/Wizard/StackButton.qml:39
679−#, qt-format
680−msgid "〈 %1"
681−msgstr "〈 %1"
698+#: qml/Wizard/Pages/password-set.qml:103
699+msgid "Confirm password"
700+msgstr ""
682701
683−#. Translators: This is the arrow for "Forward" buttons
684−#: qml/Wizard/StackButton.qml:42
685−#, qt-format
686−msgid "%1 〉"
687−msgstr "%1 〉"
702+#: qml/Wizard/Pages/sim.qml:27
703+msgid "No SIM card installed"
704+msgstr ""
705+
706+#: qml/Wizard/Pages/sim.qml:54
707+msgid "SIM card added"
708+msgstr ""
709+
710+#: qml/Wizard/Pages/sim.qml:55
711+msgid "You must restart the device to access the mobile network."
712+msgstr ""
713+
714+#: qml/Wizard/Pages/sim.qml:59
715+msgid "Restart"
716+msgstr "Reinicia"
717+
718+#: qml/Wizard/Pages/sim.qml:78
719+msgid "You won’t be able to make calls or use text messaging without a SIM."
720+msgstr ""
721+
722+#: qml/Wizard/Pages/sim.qml:90
723+msgid "To proceed with no SIM tap Skip."
724+msgstr ""
725+
726+#: qml/Wizard/PasswordMeter.qml:87
727+msgid "Passwords match"
728+msgstr ""
729+
730+#: qml/Wizard/PasswordMeter.qml:89
731+msgid "Passwords do not match"
732+msgstr ""
733+
734+#: qml/Wizard/PasswordMeter.qml:93
735+msgid "Strong password"
736+msgstr ""
737+
738+#: qml/Wizard/PasswordMeter.qml:95
739+msgid "Fair password"
740+msgstr ""
741+
742+#: qml/Wizard/PasswordMeter.qml:97
743+msgid "Weak password"
744+msgstr ""
745+
746+#: qml/Wizard/PasswordMeter.qml:99
747+msgid "Very weak password"
748+msgstr ""
688749
689750#~ msgid "Confirm"
690751#~ msgstr "Confirma"
@@ -740,6 +801,9 @@ msgstr "%1 〉"
740801#~ msgstr ""
741802#~ "Proveu de lliscar el dit des de la vora dreta per desblocar el telèfon"
742803
804+#~ msgid "See less"
805+#~ msgstr "Mostra'n menys"
806+
743807#~ msgid ""
744808#~ "You have now mastered the edge gestures and can start using the "
745809#~ "phone<br><br>Tap on the screen to start"
@@ -747,12 +811,21 @@ msgstr "%1 〉"
747811#~ "Ja heu après com utilitzar els gestos de les vores per fer servir el "
748812#~ "telèfon<br><br>Feu un toc a la pantalla per començar"
749813
814+#~ msgid "See all"
815+#~ msgstr "Mostra-ho tot"
816+
817+#~ msgid "Unlock SIM"
818+#~ msgstr "Desbloca la SIM"
819+
750820#~ msgid "Store"
751821#~ msgstr "Botiga"
752822
753823#~ msgid "Done"
754824#~ msgstr "Fet"
755825
826+#~ msgid "Roaming"
827+#~ msgstr "Itinerància"
828+
756829#~ msgid "Favorites"
757830#~ msgstr "Preferides"
758831
@@ -774,27 +847,200 @@ msgstr "%1 〉"
774847#~ msgid "Power off"
775848#~ msgstr "Apaga"
776849
850+#~ msgid "Are you sure you want to shut down?"
851+#~ msgstr "Segur que voleu apagar?"
852+
777853#~ msgid "Shut down"
778854#~ msgstr "Apaga"
779855
780−#~ msgid "Restart"
781−#~ msgstr "Reinicia"
782−
783856#~ msgid "Please re-enter"
784857#~ msgstr "Torneu-ho a introduir"
785858
786859#~ msgid "Manage Scopes"
787860#~ msgstr "Gestioneu les lents"
788861
862+#~ msgid "Add a SIM card and restart your device"
863+#~ msgstr "Afegiu una targeta SIM i reinicieu el dispositiu"
864+
865+#~ msgid "Without it, you won’t be able to make calls or use text messaging."
866+#~ msgstr "Sense ella, no podreu fer trucades o enviar missatges de text."
867+
868+#~ msgid "Hi!"
869+#~ msgstr "Hola!"
870+
789871#~ msgid "Welcome to your Ubuntu phone."
790872#~ msgstr "Us donem la benvinguda al vostre telèfon Ubuntu."
791873
874+#~ msgid "Let’s get started."
875+#~ msgstr "Comencem."
876+
877+#~ msgid "Continue"
878+#~ msgstr "Continua"
879+
880+#~ msgid "Lock security"
881+#~ msgstr "Seguretat del bloqueig"
882+
792883#~ msgid "Please select how you’d like to unlock your phone."
793884#~ msgstr "Seleccioneu com voleu desblocar el telèfon."
794885
886+#~ msgid "Improving your experience"
887+#~ msgstr "Millora de l'experiència"
888+
889+#~ msgid "Available networks…"
890+#~ msgstr "Xarxes disponibles..."
891+
892+#~ msgid "No available networks."
893+#~ msgstr "No hi ha xarxes disponibles"
894+
895+#~ msgid "Location"
896+#~ msgstr "Ubicació"
897+
898+#~ msgid ""
899+#~ "This can be disabled in <b>System Settings</b> under <b>Security &amp; "
900+#~ "Privacy</b>"
901+#~ msgstr ""
902+#~ "Podeu inhabilitar-ho a <b>Configuració del sistema</b>, a la secció "
903+#~ "<b>Seguretat i privadesa</b>"
904+
905+#~ msgid ""
906+#~ "Your phone is set up to automatically report errors to Canonical and its "
907+#~ "partners, the makers of the operating system."
908+#~ msgstr ""
909+#~ "Aquest telèfon està configurat per enviar errors de manera automàtica a "
910+#~ "Canonical i associats, els creadors del sistema operatiu."
911+
912+#~ msgid "Finish"
913+#~ msgstr "Finalitza"
914+
795915#~ msgid "Your phone is now ready to use."
796916#~ msgstr "Ja podeu utilitzar el vostre telèfon."
797917
918+#~ msgid "Confirm passphrase"
919+#~ msgstr "Confirmeu la contrasenya"
920+
921+#~ msgid "Please try again."
922+#~ msgstr "Torneu-ho a intentar."
923+
924+#~ msgid "Nice work!"
925+#~ msgstr "Bona feina!"
926+
927+#~ msgid "All done"
928+#~ msgstr "Tot fet"
929+
930+#~ msgid "Choose your passcode"
931+#~ msgstr "Trieu el codi d'accés"
932+
933+#, qt-format
934+#~ msgid "%1 〉"
935+#~ msgstr "%1 〉"
936+
937+#~ msgid "Passphrase must be 4 characters long"
938+#~ msgstr "La contrasenya ha de tenir 4 caràcters com a mínim"
939+
940+#, qt-format
941+#~ msgid "〈 %1"
942+#~ msgstr "〈 %1"
943+
944+#~ msgid "Let the phone detect your location:"
945+#~ msgstr "Fes que el telèfon detecti la meva ubicació:"
946+
947+#~ msgid "Using GPS only (less accurate)"
948+#~ msgstr "Utilitza només el GPS (menys precís)"
949+
950+#~ msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
951+#~ msgstr ""
952+#~ "Utilitza GPS, Wi-Fi anonimitzada i informació de la xarxa telefònica "
953+#~ "(recomanat)"
954+
955+#~ msgid "You can change your mind later in <b>System Settings</b>."
956+#~ msgstr ""
957+#~ "Podeu canviar-ho més endavant a l'aplicació <b>Paràmetres del sistema</b>"
958+
959+#~ msgid ""
960+#~ "By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
961+#~ "conditions</a>."
962+#~ msgstr ""
963+#~ "Si seleccioneu aquesta opció, accepteu <a href='#'>les condicions generals "
964+#~ "del servei Nokia HERE</a>."
965+
966+#~ msgid "Not at all"
967+#~ msgstr "No"
968+
969+#~ msgid "You almost got it!"
970+#~ msgstr "Ja gairebé ho teniu!"
971+
972+#~ msgid "Open the launcher"
973+#~ msgstr "Obre el llançador"
974+
975+#~ msgid "Tap here to continue."
976+#~ msgstr "Feu un toc per continuar."
977+
978+#~ msgid "Open special menus"
979+#~ msgstr "Obre els menús especials"
980+
981+#~ msgid "To view open apps"
982+#~ msgstr "Per veure les aplicacions obertes"
983+
984+#~ msgid "Long swipe from the right edge."
985+#~ msgstr "Lliscament llarg des de la vora dreta."
986+
987+#~ msgid "View all your running tasks."
988+#~ msgstr "Mostra totes les tasques en execució."
989+
990+#~ msgid "This action does different things for different apps"
991+#~ msgstr "Aquesta acció fa coses diferents depenent de l'aplicació"
992+
993+#~ msgid "Try again."
994+#~ msgstr "Torneu-ho a provar."
995+
996+#~ msgid "Short swipe from the left edge."
997+#~ msgstr "Lliscament curt des de la vora esquerra."
998+
999+#~ msgid "These are the shortcuts to favorite apps"
1000+#~ msgstr "Aquestes són les dreceres a les aplicacions preferides"
1001+
1002+#~ msgid "Swipe up from the bottom edge."
1003+#~ msgstr "Llisqueu el dit des de la vora inferior."
1004+
1005+#~ msgid "Tap here to finish."
1006+#~ msgstr "Feu un toc per finalitzar."
1007+
1008+#~ msgctxt "Label: Description of security method"
1009+#~ msgid "4 digits only"
1010+#~ msgstr "Només 4 dígits"
1011+
1012+#~ msgctxt "Button: Shut down the system"
1013+#~ msgid "Shut down"
1014+#~ msgstr "Apaga"
1015+
1016+#~ msgctxt "Title: Reboot/Shut down dialog"
1017+#~ msgid "Shut down"
1018+#~ msgstr "Apaga"
1019+
1020+#~ msgctxt "Button: Reboot the system"
1021+#~ msgid "Reboot"
1022+#~ msgstr "Reinicia"
1023+
1024+#~ msgctxt "Label: Type of security method"
1025+#~ msgid "Swipe"
1026+#~ msgstr "Lliscament amb el dit"
1027+
1028+#~ msgctxt "Label: Type of security method"
1029+#~ msgid "Passcode"
1030+#~ msgstr "Codi d'accés"
1031+
1032+#~ msgctxt "Label: Description of security method"
1033+#~ msgid "No security"
1034+#~ msgstr "Sense seguretat"
1035+
1036+#~ msgctxt "Label: Type of security method"
1037+#~ msgid "Passphrase"
1038+#~ msgstr "Contrasenya"
1039+
1040+#~ msgctxt "Label: Description of security method"
1041+#~ msgid "Numbers and letters"
1042+#~ msgstr "Números i lletres"
1043+
7981044#~ msgid "Yesterday %l:%M %p"
7991045#~ msgstr "Ahir %l.%M %p"
8001046
po/ca@valencia.po+414−241
@@ -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-16 03:29+0000\n"
10+"POT-Creation-Date: 2016-04-27 15:01+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,23 +15,23 @@ 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-23 06:04+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-04-30 05:37+0000\n"
19+"X-Generator: Launchpad (build 17995)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
2222msgid "Password: "
2323msgstr "Contrasenya: "
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 "Apega la drecera"
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 "Desenganxa la drecera"
3737
@@ -77,53 +77,35 @@ msgctxt "Button: Log out from the system"
7777msgid "Log Out"
7878msgstr ""
7979
80−#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:194
81−#: qml/Components/Dialogs.qml:253
80+#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
81+#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
82+#: qml/Wizard/Pages/passcode-set.qml:32
8283msgid "Cancel"
8384msgstr "Cancel·la"
8485
8586#: qml/Components/Dialogs.qml:173
86−msgctxt "Title: Reboot/Shut down dialog"
87−msgid "Shut down"
88−msgstr ""
89−
90−#: qml/Components/Dialogs.qml:174
91−msgid "Are you sure you want to shut down?"
92−msgstr "Segur que voleu apagar?"
93−
94−#: qml/Components/Dialogs.qml:176
95−msgctxt "Button: Reboot the system"
96−msgid "Reboot"
97−msgstr ""
98−
99−#: qml/Components/Dialogs.qml:185
100−msgctxt "Button: Shut down the system"
101−msgid "Shut down"
102−msgstr ""
103−
104−#: qml/Components/Dialogs.qml:207
10587msgctxt "Title: Reboot dialog"
10688msgid "Reboot"
10789msgstr ""
10890
109−#: qml/Components/Dialogs.qml:208
91+#: qml/Components/Dialogs.qml:174
11092msgid "Are you sure you want to reboot?"
11193msgstr "Segur que voleu reiniciar?"
11294
113−#: qml/Components/Dialogs.qml:210
95+#: qml/Components/Dialogs.qml:176
11496msgid "No"
11597msgstr "No"
11698
117−#: qml/Components/Dialogs.qml:217
99+#: qml/Components/Dialogs.qml:182
118100msgid "Yes"
119101msgstr "Sí"
120102
121−#: qml/Components/Dialogs.qml:232
103+#: qml/Components/Dialogs.qml:197
122104msgctxt "Title: Power off/Restart dialog"
123105msgid "Power"
124106msgstr ""
125107
126−#: qml/Components/Dialogs.qml:233
108+#: qml/Components/Dialogs.qml:198
127109msgid ""
128110"Are you sure you would like\n"
129111"to power off?"
@@ -131,25 +113,25 @@ msgstr ""
131113"Segur que voleu\n"
132114"apagar?"
133115
134−#: qml/Components/Dialogs.qml:235
116+#: qml/Components/Dialogs.qml:200
135117msgctxt "Button: Power off the system"
136118msgid "Power off"
137119msgstr ""
138120
139−#: qml/Components/Dialogs.qml:244
121+#: qml/Components/Dialogs.qml:209
140122msgctxt "Button: Restart the system"
141123msgid "Restart"
142124msgstr ""
143125
144−#: qml/Components/Lockscreen.qml:245
126+#: qml/Components/Lockscreen.qml:231
145127msgid "Return to Call"
146128msgstr "Torna a la cridada"
147129
148−#: qml/Components/Lockscreen.qml:245
130+#: qml/Components/Lockscreen.qml:231
149131msgid "Emergency Call"
150132msgstr "Cridada d'emergència"
151133
152−#: qml/Components/Lockscreen.qml:277
134+#: qml/Components/Lockscreen.qml:263
153135msgid "OK"
154136msgstr "D'acord"
155137
@@ -158,6 +140,8 @@ msgid "Apps may have unsaved data:"
158140msgstr ""
159141
160142#: qml/Components/ModeSwitchWarningDialog.qml:57
143+msgctxt ""
144+"Re-dock means connect the device again to an external screen/mouse/keyboard"
161145msgid "Re-dock, save your work and close these apps to continue."
162146msgstr ""
163147
@@ -177,42 +161,58 @@ msgstr ""
177161msgid "Close all"
178162msgstr ""
179163
180−#: qml/Dash/DashPageHeader.qml:266
164+#: qml/Dash/DashPageHeader.qml:337
181165msgctxt "Button: Open the Ubuntu Store"
182166msgid "Store"
183167msgstr ""
184168
185−#: qml/Dash/DashPageHeader.qml:273
169+#: qml/Dash/DashPageHeader.qml:344
186170msgctxt "Button: Start a search in the current dash scope"
187171msgid "Search"
188172msgstr ""
189173
190−#: qml/Dash/DashPageHeader.qml:283
174+#: qml/Dash/DashPageHeader.qml:354
191175msgctxt "Button: Show the current dash scope settings"
192176msgid "Settings"
193177msgstr ""
194178
195−#: qml/Dash/DashPageHeader.qml:290
179+#: qml/Dash/DashPageHeader.qml:361
196180msgid "Remove from Favorites"
197181msgstr "Suprimeix dels preferits"
198182
199−#: qml/Dash/DashPageHeader.qml:290
183+#: qml/Dash/DashPageHeader.qml:361
200184msgid "Add to Favorites"
201185msgstr "Afig als preferits"
202186
203−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
204−msgid "See less"
205−msgstr "Mostra'n menys"
187+#: qml/Dash/FiltersPopover.qml:60
188+msgid "Refine your results"
189+msgstr ""
190+
191+#: qml/Dash/FiltersPopover.qml:69
192+msgid "Reset"
193+msgstr ""
194+
195+#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
196+msgid "Show less"
197+msgstr ""
206198
207−#: qml/Dash/GenericScopeView.qml:587
208−msgid "See all"
209−msgstr "Mostra-ho tot"
199+#: qml/Dash/GenericScopeView.qml:570
200+msgid "Show all"
201+msgstr ""
210202
211−#: qml/Dash/GenericScopeView.qml:649
203+#: qml/Dash/GenericScopeView.qml:627
212204msgctxt "Label: Hint for dash search line edit"
213205msgid "Search"
214206msgstr ""
215207
208+#: qml/Dash/PageHeaderExtraPanel.qml:55
209+msgid "Recent Searches"
210+msgstr ""
211+
212+#: qml/Dash/PageHeaderExtraPanel.qml:66
213+msgid "Clear All"
214+msgstr ""
215+
216216#: qml/Dash/Previews/PreviewActionCombo.qml:35
217217msgid "More..."
218218msgstr "Més..."
@@ -234,7 +234,7 @@ msgstr "Puntueu-ho"
234234msgid "Add a review"
235235msgstr "Afegiu una ressenya"
236236
237−#: qml/Dash/Previews/PreviewSharing.qml:50
237+#: qml/Dash/Previews/PreviewSharing.qml:66
238238msgid "Preview Share Item"
239239msgstr ""
240240
@@ -262,13 +262,13 @@ msgstr "Inici"
262262msgid "Also installed"
263263msgstr "També instal·lat"
264264
265−#: qml/DisabledScreenNotice.qml:87
265+#: qml/DisabledScreenNotice.qml:104
266266msgid ""
267267"Your device is now connected to an external display. Use this screen as a "
268−"touch pad to interact with the mouse."
268+"touch pad to interact with the pointer."
269269msgstr ""
270270
271−#: qml/Greeter/CoverPage.qml:107
271+#: qml/Greeter/CoverPage.qml:118
272272msgid "Unlock"
273273msgstr "Desbloca"
274274
@@ -280,11 +280,11 @@ msgstr ""
280280msgid "Tap to unlock"
281281msgstr ""
282282
283−#: qml/Greeter/NarrowView.qml:54 qml/Wizard/Pages/passwd-confirm.qml:53
283+#: qml/Greeter/NarrowView.qml:54
284284msgid "Sorry, incorrect passphrase."
285285msgstr "La contrasenya és incorrecta"
286286
287−#: qml/Greeter/NarrowView.qml:55 qml/Wizard/Pages/passwd-confirm.qml:54
287+#: qml/Greeter/NarrowView.qml:55
288288msgid "Sorry, incorrect passcode."
289289msgstr "El codi d'accés no és correcte"
290290
@@ -315,7 +315,7 @@ msgstr ""
315315msgid "Enter %1"
316316msgstr "Introduïu: %1"
317317
318−#: qml/Greeter/NarrowView.qml:117 qml/Wizard/Pages/passwd-set.qml:60
318+#: qml/Greeter/NarrowView.qml:117
319319msgid "Enter passphrase"
320320msgstr "Introduïu la contrasenya"
321321
@@ -341,7 +341,7 @@ msgstr ""
341341msgid "Sorry, incorrect passcode"
342342msgstr "El codi d'accés no és correcte"
343343
344−#: qml/Notifications/NotificationMenuItemFactory.qml:129
344+#: qml/Notifications/NotificationMenuItemFactory.qml:124
345345msgid "Show password"
346346msgstr "Mostra la contrasenya"
347347
@@ -353,62 +353,62 @@ msgstr "Feu un toc per tornar a la cridada..."
353353msgid "Conference"
354354msgstr "Conferència"
355355
356−#: qml/Panel/Indicators/MenuItemFactory.qml:753
356+#: qml/Panel/Indicators/MenuItemFactory.qml:762
357357msgid "Nothing is playing"
358358msgstr "No s'està reproduint res"
359359
360−#: qml/Panel/Indicators/MenuItemFactory.qml:882
360+#: qml/Panel/Indicators/MenuItemFactory.qml:891
361361#, qt-format
362362msgid "%1 hour"
363363msgid_plural "%1 hours"
364364msgstr[0] ""
365365msgstr[1] ""
366366
367−#: qml/Panel/Indicators/MenuItemFactory.qml:886
367+#: qml/Panel/Indicators/MenuItemFactory.qml:895
368368#, qt-format
369369msgid "%1 minute"
370370msgid_plural "%1 minutes"
371371msgstr[0] ""
372372msgstr[1] ""
373373
374−#: qml/Panel/Indicators/MenuItemFactory.qml:891
374+#: qml/Panel/Indicators/MenuItemFactory.qml:900
375375#, qt-format
376376msgid "%1 second"
377377msgid_plural "%1 seconds"
378378msgstr[0] ""
379379msgstr[1] ""
380380
381−#: qml/Panel/Indicators/MenuItemFactory.qml:894
381+#: qml/Panel/Indicators/MenuItemFactory.qml:903
382382msgid "0 seconds"
383383msgstr ""
384384
385385#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
386−#: qml/Panel/Indicators/MenuItemFactory.qml:896
386+#: qml/Panel/Indicators/MenuItemFactory.qml:905
387387#, qt-format
388388msgid "%1 remaining"
389389msgstr ""
390390
391−#: qml/Panel/Indicators/MenuItemFactory.qml:902
391+#: qml/Panel/Indicators/MenuItemFactory.qml:911
392392msgid "In queue…"
393393msgstr "A la cua..."
394394
395−#: qml/Panel/Indicators/MenuItemFactory.qml:906
395+#: qml/Panel/Indicators/MenuItemFactory.qml:915
396396msgid "Downloading"
397397msgstr "S'està baixant"
398398
399−#: qml/Panel/Indicators/MenuItemFactory.qml:908
399+#: qml/Panel/Indicators/MenuItemFactory.qml:917
400400msgid "Paused, tap to resume"
401401msgstr "En pausa, feu un toc per continuar"
402402
403−#: qml/Panel/Indicators/MenuItemFactory.qml:910
403+#: qml/Panel/Indicators/MenuItemFactory.qml:919
404404msgid "Canceled"
405405msgstr "S'ha cancel·lat"
406406
407−#: qml/Panel/Indicators/MenuItemFactory.qml:912
407+#: qml/Panel/Indicators/MenuItemFactory.qml:921
408408msgid "Finished"
409409msgstr "S'ha finalitzat"
410410
411−#: qml/Panel/Indicators/MenuItemFactory.qml:914
411+#: qml/Panel/Indicators/MenuItemFactory.qml:923
412412msgid "Failed, tap to retry"
413413msgstr "Ha fallat, feu un toc per tornar-ho a intentar"
414414
@@ -428,261 +428,324 @@ 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−
439−#: qml/Tutorial/TutorialBottom.qml:28
440−msgid "Open special menus"
441−msgstr ""
442−
443−#: qml/Tutorial/TutorialBottom.qml:29
444−msgid "Swipe up from the bottom edge."
431+#: qml/Stages/SideStage.qml:76
432+msgid "Drag using 3 fingers any application from one window to the other"
445433msgstr ""
446434
447−#: qml/Tutorial/TutorialBottomFinish.qml:24
448−msgid "This action does different things for different apps"
435+#: qml/Tutorial/TutorialBottom.qml:78
436+msgid "Swipe up to add a contact"
449437msgstr ""
450438
451−#: qml/Tutorial/TutorialBottomFinish.qml:25
452−msgid "Tap here to finish."
439+#: qml/Tutorial/TutorialBottom.qml:80
440+msgid "Swipe up for favorite calculations"
453441msgstr ""
454442
455−#: qml/Tutorial/TutorialContent.qml:80 qml/Tutorial/TutorialLeftFinish.qml:25
456−#: qml/Tutorial/TutorialRight.qml:144
457−msgid "Tap here to continue."
443+#: qml/Tutorial/TutorialBottom.qml:82
444+msgid "Swipe up for recent calls"
458445msgstr ""
459446
460−#: qml/Tutorial/TutorialLeft.qml:26
461−msgid "Open the launcher"
447+#: qml/Tutorial/TutorialBottom.qml:84
448+msgid "Swipe up to create a message"
462449msgstr ""
463450
464−#: qml/Tutorial/TutorialLeft.qml:27
465−msgid "Short swipe from the left edge."
451+#: qml/Tutorial/TutorialBottom.qml:85
452+msgid "Swipe up to manage the app"
466453msgstr ""
467454
468−#: qml/Tutorial/TutorialLeftFinish.qml:24
469−msgid "These are the shortcuts to favorite apps"
455+#: qml/Tutorial/TutorialLeftLong.qml:47
456+msgid "Long swipe from the left edge to open the Today scope"
470457msgstr ""
471458
472−#: qml/Tutorial/TutorialPage.qml:178
473−msgid "You almost got it!"
459+#: qml/Tutorial/TutorialLeft.qml:47
460+msgid "Swipe from the left edge to open the launcher"
474461msgstr ""
475462
476−#: qml/Tutorial/TutorialPage.qml:195
477−msgid "Try again."
463+#: qml/Tutorial/TutorialRight.qml:55
464+msgid "Push your mouse against the right edge to view your open apps"
478465msgstr ""
479466
480−#: qml/Tutorial/TutorialRight.qml:31
481−msgid "To view open apps"
467+#: qml/Tutorial/TutorialRight.qml:56
468+msgid "Short or long swipe from the right edge to view your open apps"
482469msgstr ""
483470
484−#: qml/Tutorial/TutorialRight.qml:32
485−msgid "Long swipe from the right edge."
471+#: qml/Tutorial/TutorialTop.qml:53
472+msgid "Swipe from the top right edge to open the notification bar"
486473msgstr ""
487474
488−#: qml/Tutorial/TutorialRight.qml:122
489−msgid "View all your running tasks."
475+#: qml/Tutorial/TutorialTop.qml:54
476+msgid "Swipe from the top edge to open the notification bar"
490477msgstr ""
491478
492−#: qml/Wizard/Page.qml:89
479+#: qml/Wizard/Page.qml:54
493480msgctxt "Button: Go back one page in the Wizard"
494481msgid "Back"
495482msgstr ""
496483
497484#: qml/Wizard/Pages/10-welcome.qml:27
498−msgid "Hi!"
499−msgstr "Hola!"
485+msgid "Language"
486+msgstr ""
500487
501−#: qml/Wizard/Pages/10-welcome.qml:44
502−msgid "Welcome to your Ubuntu device."
488+#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
489+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
490+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
491+#: qml/Wizard/Pages/75-report-check.qml:84
492+#: qml/Wizard/Pages/passcode-desktop.qml:124
493+#: qml/Wizard/Pages/password-set.qml:141
494+msgid "Next"
503495msgstr ""
504496
505−#: qml/Wizard/Pages/10-welcome.qml:52
506−msgid "Let’s get started."
507−msgstr "Comencem."
497+#: qml/Wizard/Pages/30-wifi.qml:29
498+msgid "Connect to Wi‑Fi"
499+msgstr "Connecta't a la Wi-Fi"
508500
509−#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:133
510−#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
511−#: qml/Wizard/Pages/60-reporting.qml:60 qml/Wizard/Pages/passwd-confirm.qml:82
512−#: qml/Wizard/Pages/passwd-set.qml:90
513−msgid "Continue"
514−msgstr "Continua"
501+#: qml/Wizard/Pages/30-wifi.qml:130
502+msgid "Connected"
503+msgstr ""
515504
516−#: qml/Wizard/Pages/20-sim.qml:25
517−msgid "Add a SIM card and restart your device"
518−msgstr "Afegiu una targeta SIM i reinicieu el dispositiu"
505+#: qml/Wizard/Pages/30-wifi.qml:163
506+msgid "Available Wi-Fi networks"
507+msgstr ""
519508
520−#: qml/Wizard/Pages/20-sim.qml:59
521−msgid "Without it, you won’t be able to make calls or use text messaging."
522−msgstr "Sense ella, no podreu fer cridades o enviar missatges de text."
509+#: qml/Wizard/Pages/30-wifi.qml:164
510+msgid "No available Wi-Fi networks"
511+msgstr ""
523512
524−#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
513+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
514+#: qml/Wizard/Pages/sim.qml:101
525515msgid "Skip"
526516msgstr "Omet"
527517
528−#: qml/Wizard/Pages/30-passwd-type.qml:39
529−msgid "Lock security"
530−msgstr "Seguretat del bloqueig"
518+#: qml/Wizard/Pages/40-location.qml:27
519+msgid "Location Services"
520+msgstr ""
521+
522+#: qml/Wizard/Pages/40-location.qml:83
523+msgid ""
524+"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
525+"(recommended)"
526+msgstr ""
531527
532−#: qml/Wizard/Pages/30-passwd-type.qml:79
533−msgid "Please select how you’d like to unlock your device."
528+#: qml/Wizard/Pages/40-location.qml:105
529+#, qt-format
530+msgid "By selecting this option you agree to the Nokia HERE %1."
534531msgstr ""
535532
536−#: qml/Wizard/Pages/30-passwd-type.qml:102
537−msgctxt "Label: Type of security method"
538−msgid "Swipe"
533+#: qml/Wizard/Pages/40-location.qml:106
534+msgctxt "part of: Nokia HERE terms and conditions"
535+msgid "terms and conditions"
539536msgstr ""
540537
541−#: qml/Wizard/Pages/30-passwd-type.qml:103
542−msgctxt "Label: Description of security method"
543−msgid "No security"
538+#: qml/Wizard/Pages/40-location.qml:160
539+msgid "GPS only"
544540msgstr ""
545541
546−#: qml/Wizard/Pages/30-passwd-type.qml:105
542+#: qml/Wizard/Pages/40-location.qml:214
543+msgid "Don't use my location"
544+msgstr ""
545+
546+#: qml/Wizard/Pages/40-location.qml:260
547+msgid "You can change it later in System Settings."
548+msgstr ""
549+
550+#: qml/Wizard/Pages/50-timezone.qml:29
551+msgid "Time Zone"
552+msgstr ""
553+
554+#: qml/Wizard/Pages/50-timezone.qml:178
555+msgid "Enter your city"
556+msgstr ""
557+
558+#: qml/Wizard/Pages/60-account.qml:24
559+msgid "Personalize Your Device"
560+msgstr ""
561+
562+#: qml/Wizard/Pages/60-account.qml:48
563+msgid "Preferred Name"
564+msgstr ""
565+
566+#: qml/Wizard/Pages/70-passwd-type.qml:39
567+msgid "Lock Screen"
568+msgstr ""
569+
570+#: qml/Wizard/Pages/70-passwd-type.qml:101
547571msgctxt "Label: Type of security method"
548−msgid "Passcode"
572+msgid "Create new password"
549573msgstr ""
550574
551−#: qml/Wizard/Pages/30-passwd-type.qml:106
552−msgctxt "Label: Description of security method"
553−msgid "4 digits only"
575+#: qml/Wizard/Pages/70-passwd-type.qml:103
576+msgctxt "Label: Type of security method"
577+msgid "Create passcode (numbers only)"
554578msgstr ""
555579
556−#: qml/Wizard/Pages/30-passwd-type.qml:108
580+#: qml/Wizard/Pages/70-passwd-type.qml:105
557581msgctxt "Label: Type of security method"
558−msgid "Passphrase"
582+msgid "No lock code"
559583msgstr ""
560584
561−#: qml/Wizard/Pages/30-passwd-type.qml:109
562−msgctxt "Label: Description of security method"
563−msgid "Numbers and letters"
585+#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
586+msgid "Privacy Policy"
564587msgstr ""
565588
566−#: qml/Wizard/Pages/40-wifi.qml:29
567−msgid "Connect to Wi‑Fi"
568−msgstr "Connecta't a la Wi-Fi"
589+#: qml/Wizard/Pages/75-report-check.qml:26
590+msgid "Help Us Improve"
591+msgstr ""
592+
593+#: qml/Wizard/Pages/75-report-check.qml:59
594+msgid "Improve system performance by sending us crashes and error reports."
595+msgstr ""
569596
570−#: qml/Wizard/Pages/40-wifi.qml:168
571−msgid "Available networks…"
572−msgstr "Xarxes disponibles..."
597+#: qml/Wizard/Pages/75-report-check.qml:60
598+msgid "Privacy policy"
599+msgstr ""
573600
574−#: qml/Wizard/Pages/40-wifi.qml:169
575−msgid "No available networks."
576−msgstr "No hi ha xarxes disponibles"
601+#: qml/Wizard/Pages/80-finished.qml:89
602+msgid "Welcome to Ubuntu"
603+msgstr ""
577604
578−#: qml/Wizard/Pages/50-location.qml:27
579−msgid "Location"
580−msgstr "Ubicació"
605+#: qml/Wizard/Pages/80-finished.qml:104
606+msgid "You are ready to use your device now"
607+msgstr ""
608+
609+#: qml/Wizard/Pages/80-finished.qml:124
610+msgid "Get Started"
611+msgstr ""
581612
582−#: qml/Wizard/Pages/50-location.qml:62
583−msgid "Let the phone detect your location:"
584−msgstr "Fes que el telèfon detecti la meua ubicació:"
613+#: qml/Wizard/Pages/here-terms.qml:25
614+msgid "Terms & Conditions"
615+msgstr "Condicions generals"
585616
586−#: qml/Wizard/Pages/50-location.qml:69
587−msgid "Using GPS only (less accurate)"
588−msgstr "Utilitza només el GPS (menys precís)"
617+#: qml/Wizard/Pages/here-terms.qml:69
618+msgid "Your device uses positioning technologies provided by HERE."
619+msgstr ""
589620
590−#: qml/Wizard/Pages/50-location.qml:86
591−msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
621+#: qml/Wizard/Pages/here-terms.qml:81
622+msgid ""
623+"To provide you with positioning services and to improve their quality, HERE "
624+"collects information about nearby cell towers and Wi-Fi hotspots around your "
625+"current location whenever your position is being found."
592626msgstr ""
593−"Utilitza GPS, Wi-Fi anonimitzada i informació de la xarxa telefònica "
594−"(recomanat)"
595627
596−#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
597−#: qml/Wizard/Pages/50-location.qml:103
628+#: qml/Wizard/Pages/here-terms.qml:93
598629msgid ""
599−"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
600−"conditions</a>."
630+"The information collected is used to analyze the service and to improve the "
631+"use of service, but not to identify you personally."
601632msgstr ""
602−"Si seleccioneu esta opció, accepteu <a href='#'>les condicions generals del "
603−"servei Nokia HERE</a>."
604633
605−#: qml/Wizard/Pages/50-location.qml:112
606−msgid "Not at all"
607−msgstr "No"
634+#: qml/Wizard/Pages/here-terms.qml:106
635+#, qt-format
636+msgid "By continuing, you agree to the HERE platform %1 and %2."
637+msgstr ""
608638
609−#: qml/Wizard/Pages/50-location.qml:124
610−msgid "You can change your mind later in <b>System Settings</b>."
639+#: qml/Wizard/Pages/here-terms.qml:107
640+msgid "Service Terms"
611641msgstr ""
612−"Podeu canviar-ho més avant a l'aplicació <b>Paràmetres del sistema</b>"
613642
614−#: qml/Wizard/Pages/60-reporting.qml:26
615−msgid "Improving your experience"
616−msgstr "Millora de l'experiència"
643+#: qml/Wizard/Pages/passcode-confirm.qml:43
644+#: qml/Wizard/Pages/passcode-desktop.qml:80
645+msgid "Confirm passcode"
646+msgstr "Confirmeu el codi d'accés"
617647
618−#: qml/Wizard/Pages/60-reporting.qml:46
619−msgid ""
620−"Your phone is set up to automatically report errors to Canonical and its "
621−"partners, the makers of the operating system."
648+#: qml/Wizard/Pages/passcode-confirm.qml:45
649+msgid "Incorrect passcode."
622650msgstr ""
623−"Este telèfon està configurat per enviar errors de manera automàtica a "
624−"Canonical i associats, els creadors del sistema operatiu."
625651
626−#: qml/Wizard/Pages/60-reporting.qml:53
627−msgid ""
628−"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
629−"Privacy</b>"
652+#: qml/Wizard/Pages/passcode-confirm.qml:45
653+msgctxt "Enter the passcode again"
654+msgid "Please re-enter."
630655msgstr ""
631−"Podeu inhabilitar-ho a <b>Configuració del sistema</b>, a la secció "
632−"<b>Seguretat i privadesa</b>"
633656
634−#: qml/Wizard/Pages/80-finished.qml:24
635−msgid "All done"
636−msgstr "Tot fet"
657+#: qml/Wizard/Pages/passcode-desktop.qml:30
658+msgid "Lock Screen Passcode"
659+msgstr ""
637660
638−#: qml/Wizard/Pages/80-finished.qml:39
639−msgid "Nice work!"
640−msgstr "Bona faena!"
661+#: qml/Wizard/Pages/passcode-desktop.qml:56
662+msgid "Enter 4 numbers to setup your passcode"
663+msgstr ""
641664
642−#: qml/Wizard/Pages/80-finished.qml:46
643−msgid "Your device is now ready to use."
665+#: qml/Wizard/Pages/passcode-desktop.qml:65
666+#: qml/Wizard/Pages/passcode-set.qml:54
667+msgid "Choose passcode"
644668msgstr ""
645669
646−#: qml/Wizard/Pages/80-finished.qml:53
647−msgid "Finish"
648−msgstr "Finalitza"
670+#: qml/Wizard/Pages/passcode-desktop.qml:105
671+msgid "Passcode too short"
672+msgstr ""
649673
650−#: qml/Wizard/Pages/here-terms.qml:27
651−msgid "Terms & Conditions"
652−msgstr "Condicions generals"
674+#: qml/Wizard/Pages/passcode-desktop.qml:107
675+msgid "Passcodes match"
676+msgstr ""
653677
654−#: qml/Wizard/Pages/passwd-confirm.qml:49
655−msgid "Confirm passphrase"
656−msgstr "Confirmeu la contrasenya"
678+#: qml/Wizard/Pages/passcode-desktop.qml:109
679+msgid "Passcodes do not match"
680+msgstr ""
657681
658−#: qml/Wizard/Pages/passwd-confirm.qml:50
659−msgid "Confirm passcode"
660−msgstr "Confirmeu el codi d'accés"
682+#: qml/Wizard/Pages/passcode-set.qml:62
683+msgid "Passcode must be 4 characters long"
684+msgstr ""
661685
662−#: qml/Wizard/Pages/passwd-confirm.qml:53
663−#: qml/Wizard/Pages/passwd-confirm.qml:54
664−msgid "Please try again."
665−msgstr "Torneu-ho a intentar."
686+#: qml/Wizard/Pages/password-set.qml:30
687+msgid "Lock Screen Password"
688+msgstr ""
666689
667−#: qml/Wizard/Pages/passwd-set.qml:61
668−msgid "Choose your passcode"
669−msgstr "Trieu el codi d'accés"
690+#: qml/Wizard/Pages/password-set.qml:61
691+msgid "Enter at least 8 characters"
692+msgstr ""
670693
671−#: qml/Wizard/Pages/passwd-set.qml:68
672−msgid "Passphrase must be 4 characters long"
673−msgstr "La contrasenya ha de tindre 4 caràcters com a mínim"
694+#: qml/Wizard/Pages/password-set.qml:73
695+msgid "Choose password"
696+msgstr ""
674697
675−#. Translators: This is the arrow for "Back" buttons
676−#: qml/Wizard/StackButton.qml:39
677−#, qt-format
678−msgid "〈 %1"
679−msgstr "〈 %1"
698+#: qml/Wizard/Pages/password-set.qml:103
699+msgid "Confirm password"
700+msgstr ""
680701
681−#. Translators: This is the arrow for "Forward" buttons
682−#: qml/Wizard/StackButton.qml:42
683−#, qt-format
684−msgid "%1 〉"
685−msgstr "%1 〉"
702+#: qml/Wizard/Pages/sim.qml:27
703+msgid "No SIM card installed"
704+msgstr ""
705+
706+#: qml/Wizard/Pages/sim.qml:54
707+msgid "SIM card added"
708+msgstr ""
709+
710+#: qml/Wizard/Pages/sim.qml:55
711+msgid "You must restart the device to access the mobile network."
712+msgstr ""
713+
714+#: qml/Wizard/Pages/sim.qml:59
715+msgid "Restart"
716+msgstr "Reinicia"
717+
718+#: qml/Wizard/Pages/sim.qml:78
719+msgid "You won’t be able to make calls or use text messaging without a SIM."
720+msgstr ""
721+
722+#: qml/Wizard/Pages/sim.qml:90
723+msgid "To proceed with no SIM tap Skip."
724+msgstr ""
725+
726+#: qml/Wizard/PasswordMeter.qml:87
727+msgid "Passwords match"
728+msgstr ""
729+
730+#: qml/Wizard/PasswordMeter.qml:89
731+msgid "Passwords do not match"
732+msgstr ""
733+
734+#: qml/Wizard/PasswordMeter.qml:93
735+msgid "Strong password"
736+msgstr ""
737+
738+#: qml/Wizard/PasswordMeter.qml:95
739+msgid "Fair password"
740+msgstr ""
741+
742+#: qml/Wizard/PasswordMeter.qml:97
743+msgid "Weak password"
744+msgstr ""
745+
746+#: qml/Wizard/PasswordMeter.qml:99
747+msgid "Very weak password"
748+msgstr ""
686749
687750#~ msgid "Log out"
688751#~ msgstr "Ix"
@@ -690,6 +753,9 @@ msgstr "%1 〉"
690753#~ msgid "Shut down"
691754#~ msgstr "Apaga"
692755
756+#~ msgid "Are you sure you want to shut down?"
757+#~ msgstr "Segur que voleu apagar?"
758+
693759#~ msgid "Reboot"
694760#~ msgstr "Reinicia"
695761
@@ -699,9 +765,6 @@ msgstr "%1 〉"
699765#~ msgid "Power off"
700766#~ msgstr "Apaga"
701767
702−#~ msgid "Restart"
703−#~ msgstr "Reinicia"
704−
705768#~ msgid "Skip intro"
706769#~ msgstr "Omet la introducció"
707770
@@ -738,6 +801,12 @@ msgstr "%1 〉"
738801#~ msgid "Well done"
739802#~ msgstr "Enhorabona!"
740803
804+#~ msgid "See less"
805+#~ msgstr "Mostra'n menys"
806+
807+#~ msgid "See all"
808+#~ msgstr "Mostra-ho tot"
809+
741810#~ msgid "Search"
742811#~ msgstr "Cerca"
743812
@@ -771,18 +840,122 @@ msgstr "%1 〉"
771840#~ msgid "Speaking..."
772841#~ msgstr "S'està parlant..."
773842
843+#~ msgid "Unlock SIM"
844+#~ msgstr "Desbloca la SIM"
845+
846+#~ msgid "Roaming"
847+#~ msgstr "Itinerància"
848+
774849#~ msgid "Please re-enter"
775850#~ msgstr "Torneu-ho a introduir"
776851
852+#~ msgid "Hi!"
853+#~ msgstr "Hola!"
854+
777855#~ msgid "Welcome to your Ubuntu phone."
778856#~ msgstr "Vos donem la benvinguda al vostre telèfon Ubuntu."
779857
858+#~ msgid "Let’s get started."
859+#~ msgstr "Comencem."
860+
861+#~ msgid "Continue"
862+#~ msgstr "Continua"
863+
864+#~ msgid "Add a SIM card and restart your device"
865+#~ msgstr "Afegiu una targeta SIM i reinicieu el dispositiu"
866+
867+#~ msgid "Without it, you won’t be able to make calls or use text messaging."
868+#~ msgstr "Sense ella, no podreu fer cridades o enviar missatges de text."
869+
870+#~ msgid "Lock security"
871+#~ msgstr "Seguretat del bloqueig"
872+
780873#~ msgid "Please select how you’d like to unlock your phone."
781874#~ msgstr "Seleccioneu com voleu desblocar el telèfon."
782875
876+#~ msgid "Available networks…"
877+#~ msgstr "Xarxes disponibles..."
878+
879+#~ msgid "No available networks."
880+#~ msgstr "No hi ha xarxes disponibles"
881+
882+#~ msgid "Location"
883+#~ msgstr "Ubicació"
884+
885+#~ msgid "Let the phone detect your location:"
886+#~ msgstr "Fes que el telèfon detecti la meua ubicació:"
887+
888+#~ msgid "Using GPS only (less accurate)"
889+#~ msgstr "Utilitza només el GPS (menys precís)"
890+
891+#~ msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
892+#~ msgstr ""
893+#~ "Utilitza GPS, Wi-Fi anonimitzada i informació de la xarxa telefònica "
894+#~ "(recomanat)"
895+
896+#~ msgid ""
897+#~ "By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
898+#~ "conditions</a>."
899+#~ msgstr ""
900+#~ "Si seleccioneu esta opció, accepteu <a href='#'>les condicions generals del "
901+#~ "servei Nokia HERE</a>."
902+
903+#~ msgid "Not at all"
904+#~ msgstr "No"
905+
906+#~ msgid "You can change your mind later in <b>System Settings</b>."
907+#~ msgstr ""
908+#~ "Podeu canviar-ho més avant a l'aplicació <b>Paràmetres del sistema</b>"
909+
910+#~ msgid "Improving your experience"
911+#~ msgstr "Millora de l'experiència"
912+
913+#~ msgid ""
914+#~ "Your phone is set up to automatically report errors to Canonical and its "
915+#~ "partners, the makers of the operating system."
916+#~ msgstr ""
917+#~ "Este telèfon està configurat per enviar errors de manera automàtica a "
918+#~ "Canonical i associats, els creadors del sistema operatiu."
919+
920+#~ msgid ""
921+#~ "This can be disabled in <b>System Settings</b> under <b>Security &amp; "
922+#~ "Privacy</b>"
923+#~ msgstr ""
924+#~ "Podeu inhabilitar-ho a <b>Configuració del sistema</b>, a la secció "
925+#~ "<b>Seguretat i privadesa</b>"
926+
927+#~ msgid "All done"
928+#~ msgstr "Tot fet"
929+
930+#~ msgid "Nice work!"
931+#~ msgstr "Bona faena!"
932+
783933#~ msgid "Your phone is now ready to use."
784934#~ msgstr "Ja podeu utilitzar el vostre telèfon."
785935
936+#~ msgid "Finish"
937+#~ msgstr "Finalitza"
938+
939+#~ msgid "Confirm passphrase"
940+#~ msgstr "Confirmeu la contrasenya"
941+
942+#~ msgid "Please try again."
943+#~ msgstr "Torneu-ho a intentar."
944+
945+#~ msgid "Choose your passcode"
946+#~ msgstr "Trieu el codi d'accés"
947+
948+#~ msgid "Passphrase must be 4 characters long"
949+#~ msgstr "La contrasenya ha de tindre 4 caràcters com a mínim"
950+
951+#, qt-format
952+#~ msgid "〈 %1"
953+#~ msgstr "〈 %1"
954+
955+#, qt-format
956+#~ msgid "%1 〉"
957+#~ msgstr "%1 〉"
958+
786959#~ msgid "Type or say a command"
787960#~ msgstr "Escriviu o pronuncieu una ordre"
788961
po/ce.po+272−200
@@ -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-16 03:29+0000\n"
10+"POT-Creation-Date: 2016-04-27 15:01+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,23 +15,23 @@ 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-23 06:03+0000\n"
19−"X-Generator: Launchpad (build 17925)\n"
18+"X-Launchpad-Export-Date: 2016-04-30 05:36+0000\n"
19+"X-Generator: Launchpad (build 17995)\n"
2020
2121#: plugins/IntegratedLightDM/Greeter.cpp:112
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
@@ -73,77 +73,59 @@ msgctxt "Button: Log out from the system"
7373msgid "Log Out"
7474msgstr ""
7575
76−#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:194
77−#: qml/Components/Dialogs.qml:253
76+#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
77+#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
78+#: qml/Wizard/Pages/passcode-set.qml:32
7879msgid "Cancel"
7980msgstr ""
8081
8182#: qml/Components/Dialogs.qml:173
82−msgctxt "Title: Reboot/Shut down dialog"
83−msgid "Shut down"
84−msgstr ""
85−
86−#: qml/Components/Dialogs.qml:174
87−msgid "Are you sure you want to shut down?"
88−msgstr ""
89−
90−#: qml/Components/Dialogs.qml:176
91−msgctxt "Button: Reboot the system"
92−msgid "Reboot"
93−msgstr ""
94−
95−#: qml/Components/Dialogs.qml:185
96−msgctxt "Button: Shut down the system"
97−msgid "Shut down"
98−msgstr ""
99−
100−#: qml/Components/Dialogs.qml:207
10183msgctxt "Title: Reboot dialog"
10284msgid "Reboot"
10385msgstr ""
10486
105−#: qml/Components/Dialogs.qml:208
87+#: qml/Components/Dialogs.qml:174
10688msgid "Are you sure you want to reboot?"
10789msgstr ""
10890
109−#: qml/Components/Dialogs.qml:210
91+#: qml/Components/Dialogs.qml:176
11092msgid "No"
11193msgstr ""
11294
113−#: qml/Components/Dialogs.qml:217
95+#: qml/Components/Dialogs.qml:182
11496msgid "Yes"
11597msgstr ""
11698
117−#: qml/Components/Dialogs.qml:232
99+#: qml/Components/Dialogs.qml:197
118100msgctxt "Title: Power off/Restart dialog"
119101msgid "Power"
120102msgstr ""
121103
122−#: qml/Components/Dialogs.qml:233
104+#: qml/Components/Dialogs.qml:198
123105msgid ""
124106"Are you sure you would like\n"
125107"to power off?"
126108msgstr ""
127109
128−#: qml/Components/Dialogs.qml:235
110+#: qml/Components/Dialogs.qml:200
129111msgctxt "Button: Power off the system"
130112msgid "Power off"
131113msgstr ""
132114
133−#: qml/Components/Dialogs.qml:244
115+#: qml/Components/Dialogs.qml:209
134116msgctxt "Button: Restart the system"
135117msgid "Restart"
136118msgstr ""
137119
138−#: qml/Components/Lockscreen.qml:245
120+#: qml/Components/Lockscreen.qml:231
139121msgid "Return to Call"
140122msgstr ""
141123
142−#: qml/Components/Lockscreen.qml:245
124+#: qml/Components/Lockscreen.qml:231
143125msgid "Emergency Call"
144126msgstr ""
145127
146−#: qml/Components/Lockscreen.qml:277
128+#: qml/Components/Lockscreen.qml:263
147129msgid "OK"
148130msgstr ""
149131
@@ -152,6 +134,8 @@ msgid "Apps may have unsaved data:"
152134msgstr ""
153135
154136#: qml/Components/ModeSwitchWarningDialog.qml:57
137+msgctxt ""
138+"Re-dock means connect the device again to an external screen/mouse/keyboard"
155139msgid "Re-dock, save your work and close these apps to continue."
156140msgstr ""
157141
@@ -171,42 +155,58 @@ msgstr ""
171155msgid "Close all"
172156msgstr ""
173157
174−#: qml/Dash/DashPageHeader.qml:266
158+#: qml/Dash/DashPageHeader.qml:337
175159msgctxt "Button: Open the Ubuntu Store"
176160msgid "Store"
177161msgstr ""
178162
179−#: qml/Dash/DashPageHeader.qml:273
163+#: qml/Dash/DashPageHeader.qml:344
180164msgctxt "Button: Start a search in the current dash scope"
181165msgid "Search"
182166msgstr ""
183167
184−#: qml/Dash/DashPageHeader.qml:283
168+#: qml/Dash/DashPageHeader.qml:354
185169msgctxt "Button: Show the current dash scope settings"
186170msgid "Settings"
187171msgstr ""
188172
189−#: qml/Dash/DashPageHeader.qml:290
173+#: qml/Dash/DashPageHeader.qml:361
190174msgid "Remove from Favorites"
191175msgstr ""
192176
193−#: qml/Dash/DashPageHeader.qml:290
177+#: qml/Dash/DashPageHeader.qml:361
194178msgid "Add to Favorites"
195179msgstr ""
196180
197−#: qml/Dash/GenericScopeView.qml:587 qml/Dash/GenericScopeView.qml:745
198−msgid "See less"
181+#: qml/Dash/FiltersPopover.qml:60
182+msgid "Refine your results"
183+msgstr ""
184+
185+#: qml/Dash/FiltersPopover.qml:69
186+msgid "Reset"
187+msgstr ""
188+
189+#: qml/Dash/GenericScopeView.qml:570 qml/Dash/GenericScopeView.qml:755
190+msgid "Show less"
199191msgstr ""
200192
201−#: qml/Dash/GenericScopeView.qml:587
202−msgid "See all"
193+#: qml/Dash/GenericScopeView.qml:570
194+msgid "Show all"
203195msgstr ""
204196
205−#: qml/Dash/GenericScopeView.qml:649
197+#: qml/Dash/GenericScopeView.qml:627
206198msgctxt "Label: Hint for dash search line edit"
207199msgid "Search"
208200msgstr ""
209201
202+#: qml/Dash/PageHeaderExtraPanel.qml:55
203+msgid "Recent Searches"
204+msgstr ""
205+
206+#: qml/Dash/PageHeaderExtraPanel.qml:66
207+msgid "Clear All"
208+msgstr ""
209+
210210#: qml/Dash/Previews/PreviewActionCombo.qml:35
211211msgid "More..."
212212msgstr ""
@@ -228,7 +228,7 @@ msgstr ""
228228msgid "Add a review"
229229msgstr ""
230230
231−#: qml/Dash/Previews/PreviewSharing.qml:50
231+#: qml/Dash/Previews/PreviewSharing.qml:66
232232msgid "Preview Share Item"
233233msgstr ""
234234
@@ -256,13 +256,13 @@ msgstr ""
256256msgid "Also installed"
257257msgstr ""
258258
259−#: qml/DisabledScreenNotice.qml:87
259+#: qml/DisabledScreenNotice.qml:104
260260msgid ""
261261"Your device is now connected to an external display. Use this screen as a "
262−"touch pad to interact with the mouse."
262+"touch pad to interact with the pointer."
263263msgstr ""
264264
265−#: qml/Greeter/CoverPage.qml:107
265+#: qml/Greeter/CoverPage.qml:118
266266msgid "Unlock"
267267msgstr ""
268268
@@ -274,11 +274,11 @@ msgstr ""
274274msgid "Tap to unlock"
275275msgstr ""
276276
277−#: qml/Greeter/NarrowView.qml:54 qml/Wizard/Pages/passwd-confirm.qml:53
277+#: qml/Greeter/NarrowView.qml:54
278278msgid "Sorry, incorrect passphrase."
279279msgstr ""
280280
281−#: qml/Greeter/NarrowView.qml:55 qml/Wizard/Pages/passwd-confirm.qml:54
281+#: qml/Greeter/NarrowView.qml:55
282282msgid "Sorry, incorrect passcode."
283283msgstr ""
284284
@@ -303,7 +303,7 @@ msgstr ""
303303msgid "Enter %1"
304304msgstr ""
305305
306−#: qml/Greeter/NarrowView.qml:117 qml/Wizard/Pages/passwd-set.qml:60
306+#: qml/Greeter/NarrowView.qml:117
307307msgid "Enter passphrase"
308308msgstr ""
309309
@@ -329,7 +329,7 @@ msgstr ""
329329msgid "Sorry, incorrect passcode"
330330msgstr ""
331331
332−#: qml/Notifications/NotificationMenuItemFactory.qml:129
332+#: qml/Notifications/NotificationMenuItemFactory.qml:124
333333msgid "Show password"
334334msgstr ""
335335
@@ -341,62 +341,62 @@ msgstr ""
341341msgid "Conference"
342342msgstr ""
343343
344−#: qml/Panel/Indicators/MenuItemFactory.qml:753
344+#: qml/Panel/Indicators/MenuItemFactory.qml:762
345345msgid "Nothing is playing"
346346msgstr ""
347347
348−#: qml/Panel/Indicators/MenuItemFactory.qml:882
348+#: qml/Panel/Indicators/MenuItemFactory.qml:891
349349#, qt-format
350350msgid "%1 hour"
351351msgid_plural "%1 hours"
352352msgstr[0] ""
353353msgstr[1] ""
354354
355−#: qml/Panel/Indicators/MenuItemFactory.qml:886
355+#: qml/Panel/Indicators/MenuItemFactory.qml:895
356356#, qt-format
357357msgid "%1 minute"
358358msgid_plural "%1 minutes"
359359msgstr[0] ""
360360msgstr[1] ""
361361
362−#: qml/Panel/Indicators/MenuItemFactory.qml:891
362+#: qml/Panel/Indicators/MenuItemFactory.qml:900
363363#, qt-format
364364msgid "%1 second"
365365msgid_plural "%1 seconds"
366366msgstr[0] ""
367367msgstr[1] ""
368368
369−#: qml/Panel/Indicators/MenuItemFactory.qml:894
369+#: qml/Panel/Indicators/MenuItemFactory.qml:903
370370msgid "0 seconds"
371371msgstr ""
372372
373373#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
374−#: qml/Panel/Indicators/MenuItemFactory.qml:896
374+#: qml/Panel/Indicators/MenuItemFactory.qml:905
375375#, qt-format
376376msgid "%1 remaining"
377377msgstr ""
378378
379−#: qml/Panel/Indicators/MenuItemFactory.qml:902
379+#: qml/Panel/Indicators/MenuItemFactory.qml:911
380380msgid "In queue…"
381381msgstr ""
382382
383−#: qml/Panel/Indicators/MenuItemFactory.qml:906
383+#: qml/Panel/Indicators/MenuItemFactory.qml:915
384384msgid "Downloading"
385385msgstr ""
386386
387−#: qml/Panel/Indicators/MenuItemFactory.qml:908
387+#: qml/Panel/Indicators/MenuItemFactory.qml:917
388388msgid "Paused, tap to resume"
389389msgstr ""
390390
391−#: qml/Panel/Indicators/MenuItemFactory.qml:910
391+#: qml/Panel/Indicators/MenuItemFactory.qml:919
392392msgid "Canceled"
393393msgstr ""
394394
395−#: qml/Panel/Indicators/MenuItemFactory.qml:912
395+#: qml/Panel/Indicators/MenuItemFactory.qml:921
396396msgid "Finished"
397397msgstr ""
398398
399−#: qml/Panel/Indicators/MenuItemFactory.qml:914
399+#: qml/Panel/Indicators/MenuItemFactory.qml:923
400400msgid "Failed, tap to retry"
401401msgstr ""
402402
@@ -416,249 +416,321 @@ msgctxt "Button: Call back on phone"
416416msgid "Call back"
417417msgstr ""
418418
419−#: qml/Panel/Indicators/ModemInfoItem.qml:105
420−msgid "Unlock SIM"
419+#: qml/Stages/SideStage.qml:76
420+msgid "Drag using 3 fingers any application from one window to the other"
421421msgstr ""
422422
423−#: qml/Panel/Indicators/RoamingIndication.qml:27
424−msgid "Roaming"
423+#: qml/Tutorial/TutorialBottom.qml:78
424+msgid "Swipe up to add a contact"
425425msgstr ""
426426
427−#: qml/Tutorial/TutorialBottom.qml:28
428−msgid "Open special menus"
427+#: qml/Tutorial/TutorialBottom.qml:80
428+msgid "Swipe up for favorite calculations"
429429msgstr ""
430430
431−#: qml/Tutorial/TutorialBottom.qml:29
432−msgid "Swipe up from the bottom edge."
431+#: qml/Tutorial/TutorialBottom.qml:82
432+msgid "Swipe up for recent calls"
433433msgstr ""
434434
435−#: qml/Tutorial/TutorialBottomFinish.qml:24
436−msgid "This action does different things for different apps"
435+#: qml/Tutorial/TutorialBottom.qml:84
436+msgid "Swipe up to create a message"
437437msgstr ""
438438
439−#: qml/Tutorial/TutorialBottomFinish.qml:25
440−msgid "Tap here to finish."
439+#: qml/Tutorial/TutorialBottom.qml:85
440+msgid "Swipe up to manage the app"
441441msgstr ""
442442
443−#: qml/Tutorial/TutorialContent.qml:80 qml/Tutorial/TutorialLeftFinish.qml:25
444−#: qml/Tutorial/TutorialRight.qml:144
445−msgid "Tap here to continue."
443+#: qml/Tutorial/TutorialLeftLong.qml:47
444+msgid "Long swipe from the left edge to open the Today scope"
446445msgstr ""
447446
448−#: qml/Tutorial/TutorialLeft.qml:26
449−msgid "Open the launcher"
447+#: qml/Tutorial/TutorialLeft.qml:47
448+msgid "Swipe from the left edge to open the launcher"
450449msgstr ""
451450
452−#: qml/Tutorial/TutorialLeft.qml:27
453−msgid "Short swipe from the left edge."
451+#: qml/Tutorial/TutorialRight.qml:55
452+msgid "Push your mouse against the right edge to view your open apps"
454453msgstr ""
455454
456−#: qml/Tutorial/TutorialLeftFinish.qml:24
457−msgid "These are the shortcuts to favorite apps"
455+#: qml/Tutorial/TutorialRight.qml:56
456+msgid "Short or long swipe from the right edge to view your open apps"
458457msgstr ""
459458
460−#: qml/Tutorial/TutorialPage.qml:178
461−msgid "You almost got it!"
459+#: qml/Tutorial/TutorialTop.qml:53
460+msgid "Swipe from the top right edge to open the notification bar"
462461msgstr ""
463462
464−#: qml/Tutorial/TutorialPage.qml:195
465−msgid "Try again."
463+#: qml/Tutorial/TutorialTop.qml:54
464+msgid "Swipe from the top edge to open the notification bar"
466465msgstr ""
467466
468−#: qml/Tutorial/TutorialRight.qml:31
469−msgid "To view open apps"
467+#: qml/Wizard/Page.qml:54
468+msgctxt "Button: Go back one page in the Wizard"
469+msgid "Back"
470470msgstr ""
471471
472−#: qml/Tutorial/TutorialRight.qml:32
473−msgid "Long swipe from the right edge."
472+#: qml/Wizard/Pages/10-welcome.qml:27
473+msgid "Language"
474474msgstr ""
475475
476−#: qml/Tutorial/TutorialRight.qml:122
477−msgid "View all your running tasks."
476+#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
477+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
478+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
479+#: qml/Wizard/Pages/75-report-check.qml:84
480+#: qml/Wizard/Pages/passcode-desktop.qml:124
481+#: qml/Wizard/Pages/password-set.qml:141
482+msgid "Next"
478483msgstr ""
479484
480−#: qml/Wizard/Page.qml:89
481−msgctxt "Button: Go back one page in the Wizard"
482−msgid "Back"
485+#: qml/Wizard/Pages/30-wifi.qml:29
486+msgid "Connect to Wi‑Fi"
483487msgstr ""
484488
485−#: qml/Wizard/Pages/10-welcome.qml:27
486−msgid "Hi!"
489+#: qml/Wizard/Pages/30-wifi.qml:130
490+msgid "Connected"
487491msgstr ""
488492
489−#: qml/Wizard/Pages/10-welcome.qml:44
490−msgid "Welcome to your Ubuntu device."
493+#: qml/Wizard/Pages/30-wifi.qml:163
494+msgid "Available Wi-Fi networks"
491495msgstr ""
492496
493−#: qml/Wizard/Pages/10-welcome.qml:52
494−msgid "Let’s get started."
497+#: qml/Wizard/Pages/30-wifi.qml:164
498+msgid "No available Wi-Fi networks"
495499msgstr ""
496500
497−#: qml/Wizard/Pages/10-welcome.qml:88 qml/Wizard/Pages/30-passwd-type.qml:133
498−#: qml/Wizard/Pages/40-wifi.qml:215 qml/Wizard/Pages/50-location.qml:131
499−#: qml/Wizard/Pages/60-reporting.qml:60 qml/Wizard/Pages/passwd-confirm.qml:82
500−#: qml/Wizard/Pages/passwd-set.qml:90
501−msgid "Continue"
501+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
502+#: qml/Wizard/Pages/sim.qml:101
503+msgid "Skip"
502504msgstr ""
503505
504−#: qml/Wizard/Pages/20-sim.qml:25
505−msgid "Add a SIM card and restart your device"
506+#: qml/Wizard/Pages/40-location.qml:27
507+msgid "Location Services"
506508msgstr ""
507509
508−#: qml/Wizard/Pages/20-sim.qml:59
509−msgid "Without it, you won’t be able to make calls or use text messaging."
510+#: qml/Wizard/Pages/40-location.qml:83
511+msgid ""
512+"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
513+"(recommended)"
510514msgstr ""
511515
512−#: qml/Wizard/Pages/20-sim.qml:73 qml/Wizard/Pages/40-wifi.qml:215
513−msgid "Skip"
516+#: qml/Wizard/Pages/40-location.qml:105
517+#, qt-format
518+msgid "By selecting this option you agree to the Nokia HERE %1."
514519msgstr ""
515520
516−#: qml/Wizard/Pages/30-passwd-type.qml:39
517−msgid "Lock security"
521+#: qml/Wizard/Pages/40-location.qml:106
522+msgctxt "part of: Nokia HERE terms and conditions"
523+msgid "terms and conditions"
518524msgstr ""
519525
520−#: qml/Wizard/Pages/30-passwd-type.qml:79
521−msgid "Please select how you’d like to unlock your device."
526+#: qml/Wizard/Pages/40-location.qml:160
527+msgid "GPS only"
522528msgstr ""
523529
524−#: qml/Wizard/Pages/30-passwd-type.qml:102
525−msgctxt "Label: Type of security method"
526−msgid "Swipe"
530+#: qml/Wizard/Pages/40-location.qml:214
531+msgid "Don't use my location"
532+msgstr ""
533+
534+#: qml/Wizard/Pages/40-location.qml:260
535+msgid "You can change it later in System Settings."
536+msgstr ""
537+
538+#: qml/Wizard/Pages/50-timezone.qml:29
539+msgid "Time Zone"
540+msgstr ""
541+
542+#: qml/Wizard/Pages/50-timezone.qml:178
543+msgid "Enter your city"
544+msgstr ""
545+
546+#: qml/Wizard/Pages/60-account.qml:24
547+msgid "Personalize Your Device"
548+msgstr ""
549+
550+#: qml/Wizard/Pages/60-account.qml:48
551+msgid "Preferred Name"
527552msgstr ""
528553
529−#: qml/Wizard/Pages/30-passwd-type.qml:103
530−msgctxt "Label: Description of security method"
531−msgid "No security"
554+#: qml/Wizard/Pages/70-passwd-type.qml:39
555+msgid "Lock Screen"
532556msgstr ""
533557
534−#: qml/Wizard/Pages/30-passwd-type.qml:105
558+#: qml/Wizard/Pages/70-passwd-type.qml:101
535559msgctxt "Label: Type of security method"
536−msgid "Passcode"
560+msgid "Create new password"
537561msgstr ""
538562
539−#: qml/Wizard/Pages/30-passwd-type.qml:106
540−msgctxt "Label: Description of security method"
541−msgid "4 digits only"
563+#: qml/Wizard/Pages/70-passwd-type.qml:103
564+msgctxt "Label: Type of security method"
565+msgid "Create passcode (numbers only)"
542566msgstr ""
543567
544−#: qml/Wizard/Pages/30-passwd-type.qml:108
568+#: qml/Wizard/Pages/70-passwd-type.qml:105
545569msgctxt "Label: Type of security method"
546−msgid "Passphrase"
570+msgid "No lock code"
547571msgstr ""
548572
549−#: qml/Wizard/Pages/30-passwd-type.qml:109
550−msgctxt "Label: Description of security method"
551−msgid "Numbers and letters"
573+#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
574+msgid "Privacy Policy"
552575msgstr ""
553576
554−#: qml/Wizard/Pages/40-wifi.qml:29
555−msgid "Connect to Wi‑Fi"
577+#: qml/Wizard/Pages/75-report-check.qml:26
578+msgid "Help Us Improve"
556579msgstr ""
557580
558−#: qml/Wizard/Pages/40-wifi.qml:168
559−msgid "Available networks…"
581+#: qml/Wizard/Pages/75-report-check.qml:59
582+msgid "Improve system performance by sending us crashes and error reports."
560583msgstr ""
561584
562−#: qml/Wizard/Pages/40-wifi.qml:169
563−msgid "No available networks."
585+#: qml/Wizard/Pages/75-report-check.qml:60
586+msgid "Privacy policy"
564587msgstr ""
565588
566−#: qml/Wizard/Pages/50-location.qml:27
567−msgid "Location"
589+#: qml/Wizard/Pages/80-finished.qml:89
590+msgid "Welcome to Ubuntu"
568591msgstr ""
569592
570−#: qml/Wizard/Pages/50-location.qml:62
571−msgid "Let the phone detect your location:"
593+#: qml/Wizard/Pages/80-finished.qml:104
594+msgid "You are ready to use your device now"
572595msgstr ""
573596
574−#: qml/Wizard/Pages/50-location.qml:69
575−msgid "Using GPS only (less accurate)"
597+#: qml/Wizard/Pages/80-finished.qml:124
598+msgid "Get Started"
576599msgstr ""
577600
578−#: qml/Wizard/Pages/50-location.qml:86
579−msgid "Using GPS, anonymized Wi-Fi and cellular network info (recommended)"
601+#: qml/Wizard/Pages/here-terms.qml:25
602+msgid "Terms & Conditions"
580603msgstr ""
581604
582−#. Translators: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
583−#: qml/Wizard/Pages/50-location.qml:103
605+#: qml/Wizard/Pages/here-terms.qml:69
606+msgid "Your device uses positioning technologies provided by HERE."
607+msgstr ""
608+
609+#: qml/Wizard/Pages/here-terms.qml:81
584610msgid ""
585−"By selecting this option you agree to the Nokia HERE <a href='#'>terms and "
586−"conditions</a>."
611+"To provide you with positioning services and to improve their quality, HERE "
612+"collects information about nearby cell towers and Wi-Fi hotspots around your "
613+"current location whenever your position is being found."
587614msgstr ""
588615
589−#: qml/Wizard/Pages/50-location.qml:112
590−msgid "Not at all"
616+#: qml/Wizard/Pages/here-terms.qml:93
617+msgid ""
618+"The information collected is used to analyze the service and to improve the "
619+"use of service, but not to identify you personally."
591620msgstr ""
592621
593−#: qml/Wizard/Pages/50-location.qml:124
594−msgid "You can change your mind later in <b>System Settings</b>."
622+#: qml/Wizard/Pages/here-terms.qml:106
623+#, qt-format
624+msgid "By continuing, you agree to the HERE platform %1 and %2."
595625msgstr ""
596626
597−#: qml/Wizard/Pages/60-reporting.qml:26
598−msgid "Improving your experience"
627+#: qml/Wizard/Pages/here-terms.qml:107
628+msgid "Service Terms"
599629msgstr ""
600630
601−#: qml/Wizard/Pages/60-reporting.qml:46
602−msgid ""
603−"Your phone is set up to automatically report errors to Canonical and its "
604−"partners, the makers of the operating system."
631+#: qml/Wizard/Pages/passcode-confirm.qml:43
632+#: qml/Wizard/Pages/passcode-desktop.qml:80
633+msgid "Confirm passcode"
605634msgstr ""
606635
607−#: qml/Wizard/Pages/60-reporting.qml:53
608−msgid ""
609−"This can be disabled in <b>System Settings</b> under <b>Security &amp; "
610−"Privacy</b>"
636+#: qml/Wizard/Pages/passcode-confirm.qml:45
637+msgid "Incorrect passcode."
611638msgstr ""
612639
613−#: qml/Wizard/Pages/80-finished.qml:24
614−msgid "All done"
640+#: qml/Wizard/Pages/passcode-confirm.qml:45
641+msgctxt "Enter the passcode again"
642+msgid "Please re-enter."
615643msgstr ""
616644
617−#: qml/Wizard/Pages/80-finished.qml:39
618−msgid "Nice work!"
645+#: qml/Wizard/Pages/passcode-desktop.qml:30
646+msgid "Lock Screen Passcode"
619647msgstr ""
620648
621−#: qml/Wizard/Pages/80-finished.qml:46
622−msgid "Your device is now ready to use."
649+#: qml/Wizard/Pages/passcode-desktop.qml:56
650+msgid "Enter 4 numbers to setup your passcode"
623651msgstr ""
624652
625−#: qml/Wizard/Pages/80-finished.qml:53
626−msgid "Finish"
653+#: qml/Wizard/Pages/passcode-desktop.qml:65
654+#: qml/Wizard/Pages/passcode-set.qml:54
655+msgid "Choose passcode"
627656msgstr ""
628657
629−#: qml/Wizard/Pages/here-terms.qml:27
630−msgid "Terms & Conditions"
658+#: qml/Wizard/Pages/passcode-desktop.qml:105
659+msgid "Passcode too short"
631660msgstr ""
632661
633−#: qml/Wizard/Pages/passwd-confirm.qml:49
634−msgid "Confirm passphrase"
662+#: qml/Wizard/Pages/passcode-desktop.qml:107
663+msgid "Passcodes match"
635664msgstr ""
636665
637−#: qml/Wizard/Pages/passwd-confirm.qml:50
638−msgid "Confirm passcode"
666+#: qml/Wizard/Pages/passcode-desktop.qml:109
667+msgid "Passcodes do not match"
639668msgstr ""
640669
641−#: qml/Wizard/Pages/passwd-confirm.qml:53
642−#: qml/Wizard/Pages/passwd-confirm.qml:54
643−msgid "Please try again."
670+#: qml/Wizard/Pages/passcode-set.qml:62
671+msgid "Passcode must be 4 characters long"
644672msgstr ""
645673
646−#: qml/Wizard/Pages/passwd-set.qml:61
647−msgid "Choose your passcode"
674+#: qml/Wizard/Pages/password-set.qml:30
675+msgid "Lock Screen Password"
648676msgstr ""
649677
650−#: qml/Wizard/Pages/passwd-set.qml:68
651−msgid "Passphrase must be 4 characters long"
678+#: qml/Wizard/Pages/password-set.qml:61
679+msgid "Enter at least 8 characters"
652680msgstr ""
653681
654−#. Translators: This is the arrow for "Back" buttons
655−#: qml/Wizard/StackButton.qml:39
656−#, qt-format
657−msgid "〈 %1"
682+#: qml/Wizard/Pages/password-set.qml:73
683+msgid "Choose password"
658684msgstr ""
659685
660−#. Translators: This is the arrow for "Forward" buttons
661−#: qml/Wizard/StackButton.qml:42
662−#, qt-format
663−msgid "%1 〉"
686+#: qml/Wizard/Pages/password-set.qml:103
687+msgid "Confirm password"
688+msgstr ""
689+
690+#: qml/Wizard/Pages/sim.qml:27
691+msgid "No SIM card installed"
692+msgstr ""
693+
694+#: qml/Wizard/Pages/sim.qml:54
695+msgid "SIM card added"
696+msgstr ""
697+
698+#: qml/Wizard/Pages/sim.qml:55
699+msgid "You must restart the device to access the mobile network."
700+msgstr ""
701+
702+#: qml/Wizard/Pages/sim.qml:59
703+msgid "Restart"
704+msgstr ""
705+
706+#: qml/Wizard/Pages/sim.qml:78
707+msgid "You won’t be able to make calls or use text messaging without a SIM."
708+msgstr ""
709+
710+#: qml/Wizard/Pages/sim.qml:90
711+msgid "To proceed with no SIM tap Skip."
712+msgstr ""
713+
714+#: qml/Wizard/PasswordMeter.qml:87
715+msgid "Passwords match"
716+msgstr ""
717+
718+#: qml/Wizard/PasswordMeter.qml:89
719+msgid "Passwords do not match"
720+msgstr ""
721+
722+#: qml/Wizard/PasswordMeter.qml:93
723+msgid "Strong password"
724+msgstr ""
725+
726+#: qml/Wizard/PasswordMeter.qml:95
727+msgid "Fair password"
728+msgstr ""
729+
730+#: qml/Wizard/PasswordMeter.qml:97
731+msgid "Weak password"
732+msgstr ""
733+
734+#: qml/Wizard/PasswordMeter.qml:99
735+msgid "Very weak password"
664736msgstr ""
po/ckb.po+272−200

This diff is too big to show here.

po/cs.po+531−255

This diff is too big to show here.

po/cy.po+506−255

This diff is too big to show here.

po/da.po+507−256

This diff is too big to show here.

po/de.po+538−269

This diff is too big to show here.

po/el.po+536−275

This diff is too big to show here.

po/en_AU.po+524−266

This diff is too big to show here.

po/en_GB.po+525−267

This diff is too big to show here.

po/eo.po+355−216

This diff is too big to show here.

po/es.po+535−271

This diff is too big to show here.

po/eu.po+506−258

This diff is too big to show here.

po/fa.po+530−267

This diff is too big to show here.

po/fi.po+533−270

This diff is too big to show here.

po/fo.po+272−200

This diff is too big to show here.

po/fr.po+549−271

This diff is too big to show here.

po/ga.po+492−254

This diff is too big to show here.

po/gd.po+550−271

This diff is too big to show here.

po/gl.po+532−270

This diff is too big to show here.

po/gv.po+283−205

This diff is too big to show here.

po/he.po+431−236

This diff is too big to show here.

po/hi.po+272−200

This diff is too big to show here.

po/hr.po+536−266

This diff is too big to show here.

po/hu.po+538−272

This diff is too big to show here.

po/hy.po+287−206

This diff is too big to show here.

po/ia.po+535−269

This diff is too big to show here.

po/id.po+291−207

This diff is too big to show here.

po/is.po+291−207

This diff is too big to show here.

po/it.po+538−271

This diff is too big to show here.

po/ja.po+303−207

This diff is too big to show here.

po/km.po+375−236

This diff is too big to show here.

po/kn.po+272−200

This diff is too big to show here.

po/ko.po+505−257

This diff is too big to show here.

po/ku.po+291−204

This diff is too big to show here.

po/ky.po+272−200

This diff is too big to show here.

po/lo.po+272−200

This diff is too big to show here.

po/lt.po+272−200

This diff is too big to show here.

po/lv.po+504−256

This diff is too big to show here.

po/ml.po+272−200

This diff is too big to show here.

po/mr.po+272−200

This diff is too big to show here.

po/ms.po+507−259

This diff is too big to show here.

po/my.po+285−203

This diff is too big to show here.

po/nb.po+528−267

This diff is too big to show here.

po/ne.po+272−200

This diff is too big to show here.

po/nl.po+523−266

This diff is too big to show here.

po/nn.po+272−200

This diff is too big to show here.

po/oc.po+599−278

This diff is too big to show here.

po/or.po+272−200

This diff is too big to show here.

po/pa.po+506−258

This diff is too big to show here.

po/pl.po+540−273

This diff is too big to show here.

po/pt.po+541−280

This diff is too big to show here.

po/pt_BR.po+517−269

This diff is too big to show here.

po/ro.po+508−260

This diff is too big to show here.

po/ru.po+513−261

This diff is too big to show here.

po/shn.po+272−200

This diff is too big to show here.

po/si.po+275−203

This diff is too big to show here.

po/sk.po+620−331

This diff is too big to show here.

po/sl.po+529−268

This diff is too big to show here.

po/sq.po+431−239

This diff is too big to show here.

po/sr.po+558−299

This diff is too big to show here.

po/sv.po+529−268

This diff is too big to show here.

po/sw.po+439−238

This diff is too big to show here.

po/ta.po+272−200

This diff is too big to show here.

po/te.po+272−200

This diff is too big to show here.

po/th.po+272−200

This diff is too big to show here.

po/tr.po+506−258

This diff is too big to show here.

po/ug.po+487−253

This diff is too big to show here.

po/uk.po+538−271

This diff is too big to show here.

po/unity8.pot+271−199

This diff is too big to show here.

po/ur.po+272−200

This diff is too big to show here.

po/uz.po+272−200

This diff is too big to show here.

po/vi.po+272−200

This diff is too big to show here.

po/wo.po+506−258

This diff is too big to show here.

po/xh.po+272−200

This diff is too big to show here.

po/zh_CN.po+515−261

This diff is too big to show here.

po/zh_HK.po+280−202

This diff is too big to show here.

po/zh_TW.po+508−260

This diff is too big to show here.

qml/Components/Dialogs.qml+8−52

This diff is too big to show here.

qml/Components/EdgeBarrier.qml+1−1

This diff is too big to show here.

qml/Components/Header.qml+1

This diff is too big to show here.

qml/Components/InputMethod.qml+5−10

This diff is too big to show here.

qml/Components/KeymapSwitcher.qmlnew file+65

This diff is too big to show here.

qml/Components/Lockscreen.qml+82−96

This diff is too big to show here.

qml/Components/ModeSwitchWarningDialog.qml+1−1

This diff is too big to show here.

qml/Components/NotificationAudio.qml+4−7

This diff is too big to show here.

qml/Components/PanelState/PanelState.qml+2−1

This diff is too big to show here.

qml/Components/PassphraseLockscreen.qml+5−4

This diff is too big to show here.

qml/Components/PhysicalKeysMapper.qml+24

This diff is too big to show here.

qml/Components/PinLockscreen.qml+24−2

This diff is too big to show here.

qml/Components/PinPadButton.qml+17−2

This diff is too big to show here.

qml/Components/ShellDialog.qml+10

This diff is too big to show here.

qml/Components/Showable.qml+10

This diff is too big to show here.

qml/Components/UbuntuShapeForItem.qml+1

This diff is too big to show here.

qml/Components/Unity8Settings.qmldeleted−50

This diff is too big to show here.

qml/Components/WindowControlButtons.qml+8−6

This diff is too big to show here.

qml/Dash/CardCarousel.qml−1

This diff is too big to show here.

qml/Dash/CardGrid.qml−1

This diff is too big to show here.

qml/Dash/CardHorizontalList.qml−1

This diff is too big to show here.

qml/Dash/CardTool.qml+2−26

This diff is too big to show here.

qml/Dash/CardVerticalJournal.qml−1

This diff is too big to show here.

qml/Dash/Dash.qml+19−19

This diff is too big to show here.

qml/Dash/DashContent.qml+2−2

This diff is too big to show here.

qml/Dash/DashNavigation.qml+159−78

This diff is too big to show here.

qml/Dash/DashNavigationButton.qmldeleted−233

This diff is too big to show here.

qml/Dash/DashNavigationHeader.qmlnew file+73

This diff is too big to show here.

qml/Dash/DashNavigationList.qml+33−85

This diff is too big to show here.

qml/Dash/DashPageHeader.qml+144−131

This diff is too big to show here.

qml/Dash/Filters/FilterOptionSelector.qmlnew file+91

This diff is too big to show here.

qml/Dash/Filters/FilterRangeInput.qmlnew file+136

This diff is too big to show here.

qml/Dash/Filters/FilterValueSlider.qmlnew file+87

This diff is too big to show here.

qml/Dash/Filters/FilterWidget.qmlnew file+29

This diff is too big to show here.

qml/Dash/Filters/FilterWidgetFactory.qmlnew file+80

This diff is too big to show here.

qml/Dash/FiltersPopover.qmlnew file+105

This diff is too big to show here.

qml/Dash/GenericScopeView.qml+95−91

This diff is too big to show here.

qml/Dash/PageHeaderExtraPanel.qmlnew file+176

This diff is too big to show here.

qml/Dash/PreviewListView.qmldeleted−140

This diff is too big to show here.

qml/Dash/PreviewView.qmlnew file+76

This diff is too big to show here.

qml/Dash/Previews/Preview.qml+4−5

This diff is too big to show here.

qml/Dash/Previews/PreviewExpandable.qml−1

This diff is too big to show here.

qml/Dash/Previews/PreviewHeader.qml+37−9

This diff is too big to show here.

qml/Dash/Previews/PreviewOverlay.qml+1−1

This diff is too big to show here.

qml/Dash/Previews/PreviewPayments.qml+1−3

This diff is too big to show here.

qml/Dash/Previews/PreviewRatingDisplay.qml−1

This diff is too big to show here.

qml/Dash/Previews/PreviewRatingEdit.qml−1

This diff is too big to show here.

qml/Dash/Previews/PreviewSharing.qml+17−7

This diff is too big to show here.

qml/Dash/Previews/PreviewWidget.qml−3

This diff is too big to show here.

qml/Dash/Previews/PreviewWidgetFactory.qml−4

This diff is too big to show here.

qml/Dash/ScopesList.qml+1−1

This diff is too big to show here.

qml/Dash/ScopesListCategoryItem.qml+8−4

This diff is too big to show here.

qml/DeviceConfiguration.qml+54−16

This diff is too big to show here.

qml/DisabledScreenNotice.qml+44−20

This diff is too big to show here.

qml/Greeter/CoverPage.qml+13−2

This diff is too big to show here.

qml/Greeter/Greeter.qml+22−11

This diff is too big to show here.

qml/Greeter/Infographics.qml+2−1

This diff is too big to show here.

qml/Greeter/NarrowView.qml+14−1

This diff is too big to show here.

qml/Launcher/Launcher.qml+143−12

This diff is too big to show here.

qml/Launcher/LauncherDelegate.qml+58−25

This diff is too big to show here.

qml/Launcher/LauncherPanel.qml+168−80

This diff is too big to show here.

qml/Launcher/graphics/launcher-app-focus-ring.svgnew file+12

This diff is too big to show here.

qml/Launcher/graphics/quicklist_tooltip@30.png

Binary file not shown.

qml/Notifications/Notification.qml+134−126

This diff is too big to show here.

qml/Notifications/NotificationButton.qmlnew file+72

This diff is too big to show here.

qml/Notifications/NotificationMenuItemFactory.qml+5−11

This diff is too big to show here.

qml/Notifications/Notifications.qml+4−3

This diff is too big to show here.

qml/Notifications/OptionToggle.qml+12−10

This diff is too big to show here.

qml/Notifications/ShapedIcon.qml+1

This diff is too big to show here.

qml/Notifications/SwipeToAct.qml+16−20

This diff is too big to show here.

qml/Notifications/grip-large.svgdeleted−150

This diff is too big to show here.

qml/OrientedShell.qml+71−21

This diff is too big to show here.

qml/Panel/Handle.qml+2−2

This diff is too big to show here.

qml/Panel/IndicatorItem.qml+3−10

This diff is too big to show here.

qml/Panel/IndicatorItemRow.qml+5−2

This diff is too big to show here.

qml/Panel/Indicators/MenuItemFactory.qml+26−8

This diff is too big to show here.

qml/Panel/Indicators/ModemInfoItem.qmldeleted−111

This diff is too big to show here.

qml/Panel/Indicators/RoamingIndication.qmldeleted−40

This diff is too big to show here.

qml/Panel/Indicators/client/IndicatorsClient.qml+2−2

This diff is too big to show here.

qml/Panel/IndicatorsMenu.qml+2−4

This diff is too big to show here.

qml/Panel/MenuContent.qml+1−1

This diff is too big to show here.

qml/Panel/Panel.qml+8−3

This diff is too big to show here.

qml/ScopeTool.qml−8

This diff is too big to show here.

qml/Shell.qml+162−114

This diff is too big to show here.

qml/Stages/AbstractStage.qml+15−3

This diff is too big to show here.

qml/Stages/Animations/BaseSessionAnimation.qmldeleted−96

This diff is too big to show here.

qml/Stages/Animations/SwipeFromBottomAnimation.qmldeleted−53

This diff is too big to show here.

qml/Stages/ApplicationWindow.qml+116−76

This diff is too big to show here.

qml/Stages/DecoratedWindow.qml+6−6

This diff is too big to show here.

qml/Stages/DesktopSpread.qml+86−35

This diff is too big to show here.

qml/Stages/DesktopSpreadDelegate.qml+19−4

This diff is too big to show here.

qml/Stages/DesktopStage.qml+264−134

This diff is too big to show here.

qml/Stages/PhoneStage.qml+242−98

This diff is too big to show here.

qml/Stages/PromptSurfaceAnimations.qmlnew file+81

This diff is too big to show here.

qml/Stages/SessionContainer.qmldeleted−180

This diff is too big to show here.

qml/Stages/SideStage.qmlnew file+118

This diff is too big to show here.

qml/Stages/Splash.qml+4−2

This diff is too big to show here.

qml/Stages/SpreadDelegate.qml+34−4

This diff is too big to show here.

qml/Stages/StagedFullscreenPolicy.qmlnew file+56

This diff is too big to show here.

qml/Stages/SurfaceContainer.qml+97−39

This diff is too big to show here.

qml/Stages/TabletSideStageTouchGesture.qmlnew file+154

This diff is too big to show here.

qml/Stages/TabletStage.qml+663−289

This diff is too big to show here.

qml/Stages/TopLevelSurfaceRepeater.qmlnew file+52

This diff is too big to show here.

qml/Stages/TransformedSpreadDelegate.qml+4−4

This diff is too big to show here.

qml/Stages/TransformedTabletSpreadDelegate.qml+94−60

This diff is too big to show here.

qml/Stages/WindowDecoration.qml+4−3

This diff is too big to show here.

qml/Stages/WindowResizeArea.qml+10−7

This diff is too big to show here.

qml/Stages/WindowedFullscreenPolicy.qmlnew file+39

This diff is too big to show here.

qml/Stages/graphics/sidestage_drag.svgnew file+207

This diff is too big to show here.

qml/Stages/graphics/sidestage_open.svgnew file+181

This diff is too big to show here.

qml/Tutorial/Arrow.qmldeleted−56

This diff is too big to show here.

qml/Tutorial/InactivityTimer.qmlnew file+62

This diff is too big to show here.

qml/Tutorial/Slider.qmldeleted−123

This diff is too big to show here.

qml/Tutorial/Tutorial.qml+39−14

This diff is too big to show here.

qml/Tutorial/TutorialBottom.qml+86−66

This diff is too big to show here.

qml/Tutorial/TutorialBottomFinish.qmldeleted−41

This diff is too big to show here.

qml/Tutorial/TutorialContent.qml+227−55

This diff is too big to show here.

qml/Tutorial/TutorialLeft.qml+21−68

This diff is too big to show here.

qml/Tutorial/TutorialLeftLong.qmlnew file+54

This diff is too big to show here.

qml/Tutorial/TutorialPage.qml+62−186

This diff is too big to show here.

qml/Tutorial/TutorialRight.qml+31−192

This diff is too big to show here.

qml/Tutorial/TutorialTop.qmlnew file+61

This diff is too big to show here.

qml/Tutorial/graphics/arrow.svgnew file+19

This diff is too big to show here.

qml/Tutorial/graphics/background1.pngnew file

Binary file not shown.

qml/Tutorial/graphics/background2.pngnew file

Binary file not shown.

qml/Tutorial/graphics/camera.pngdeleted

Binary file not shown.

qml/Tutorial/graphics/chevron.pngdeleted

Binary file not shown.

qml/Tutorial/graphics/dialer.pngdeleted

Binary file not shown.

qml/Tutorial/graphics/facebook.pngdeleted

Binary file not shown.

qml/Tutorial/graphics/gallery.pngdeleted

Binary file not shown.

qml/Tutorial/graphics/tick.pngdeleted

Binary file not shown.

qml/Wizard/CheckableSetting.qml+11−3

This diff is too big to show here.

qml/Wizard/Page.qml+261−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+128−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+290

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+71−66

This diff is too big to show here.

qml/Wizard/Pages/passwd-confirm.qml → qml/Wizard/Pages/passcode-confirm.qmlrenamed+13−30

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+13−29

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+7−12

This diff is too big to show here.

qml/Wizard/Wizard.qml−9

This diff is too big to show here.

qml/Tutorial/TutorialLeftFinish.qml → qml/Wizard/WizardTextField.qmlrenamed+5−21

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/Dash/main.cpp+5

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.

src/ShellView.cpp+6−2

This diff is too big to show here.

src/main.cpp+5

This diff is too big to show here.

src/qmldebuggerutils.hnew file+33

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/settings_wizard/__init__.pydeleted−555

This diff is too big to show here.

tests/autopilot/unity8/settings_wizard/fixture_setup.pydeleted−58

This diff is too big to show here.

tests/autopilot/unity8/settings_wizard/ofono_helper.pydeleted−116

This diff is too big to show here.

tests/autopilot/unity8/settings_wizard/tests/__init__.pydeleted

No changes to the content.

tests/autopilot/unity8/settings_wizard/tests/test_settings_wizard.pydeleted−99

This diff is too big to show here.

tests/autopilot/unity8/shell/emulators.py−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/autopilot/unity8/shell/tests/test_tutorial.pydeleted−57

This diff is too big to show here.

tests/autopilot/unity8/tutorial.pydeleted−73

This diff is too big to show here.

tests/libs/UbuntuGestures/tst_TouchRegistry.cpp+60−1

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/AccountsService/AccountsService.qmltypes+5

This diff is too big to show here.

tests/mocks/GSettings.1.0/fake_gsettings.cpp+178−26

This diff is too big to show here.

tests/mocks/GSettings.1.0/fake_gsettings.h+61−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/QMenuModel/QDBusActionGroup.qml+5−5

This diff is too big to show here.

tests/mocks/QtMultimedia/audio.cpp+13

This diff is too big to show here.

tests/mocks/QtMultimedia/audio.h+5

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.

qml/Tutorial/Tick.qml → tests/mocks/Ubuntu/SystemSettings/Diagnostics/MockDiagnostics.qmlrenamed+4−9

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/MockKeyboardPlugin.qmlnew file+21

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/LanguagePlugin/qmldir+1

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/ApplicationInfo.cpp+191−100

This diff is too big to show here.

tests/mocks/Unity/Application/ApplicationInfo.h+44−25

This diff is too big to show here.

tests/mocks/Unity/Application/ApplicationManager.cpp+119−97

This diff is too big to show here.

tests/mocks/Unity/Application/ApplicationManager.h+12−22

This diff is too big to show here.

tests/mocks/Unity/Application/ApplicationScreenshotProvider.cppdeleted−79

This diff is too big to show here.

tests/mocks/Unity/Application/ApplicationScreenshotProvider.hdeleted−34

This diff is too big to show here.

tests/mocks/Unity/Application/ApplicationTestInterface.cppdeleted−117

This diff is too big to show here.

tests/mocks/Unity/Application/ApplicationTestInterface.hdeleted−45

This diff is too big to show here.

tests/mocks/Unity/Application/CMakeLists.txt+3−5

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurface.cpp+205−8

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurface.h+61−9

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurfaceItem.cpp+41−12

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurfaceListModel.cppnew file+121

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurfaceListModel.hnew file+56

This diff is too big to show here.

tests/mocks/Unity/Application/ObjectListModel.h+2

This diff is too big to show here.

tests/mocks/Unity/Application/Session.cppdeleted−184

This diff is too big to show here.

tests/mocks/Unity/Application/Session.hdeleted−97

This diff is too big to show here.

tests/mocks/Unity/Application/SessionManager.cppdeleted−55

This diff is too big to show here.

tests/mocks/Unity/Application/SessionModel.hdeleted−35

This diff is too big to show here.

tests/mocks/Unity/Application/SurfaceManager.cpp+23−17

This diff is too big to show here.

tests/mocks/Unity/Application/SurfaceManager.h+8−5

This diff is too big to show here.

tests/mocks/Unity/Application/UbuntuKeyboardInfo.cpp−2

This diff is too big to show here.

tests/mocks/Unity/Application/UbuntuKeyboardInfo.h−9

This diff is too big to show here.

tests/mocks/Unity/Application/plugin.cpp+35−39

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+14−3

This diff is too big to show here.

tests/mocks/Unity/Indicators/ModelActionRootState.qml+26−4

This diff is too big to show here.

tests/mocks/Unity/InputInfo/qinputdeviceinfo_mock.cpp+1−1

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/Notifications/MockNotificationModel.cpp+6−11

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_filters.cppnew file+125

This diff is too big to show here.

tests/mocks/Unity/fake_filters.hnew file+46

This diff is too big to show here.

tests/mocks/Unity/fake_navigation.cpp+9−10

This diff is too big to show here.

tests/mocks/Unity/fake_optionselectorfilter.cppnew file+65

This diff is too big to show here.

tests/mocks/Unity/fake_optionselectorfilter.hnew file+52

This diff is too big to show here.

tests/mocks/Unity/fake_optionselectoroptions.cppnew file+77

This diff is too big to show here.

tests/mocks/Unity/fake_optionselectoroptions.hnew file+47

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_rangeinputfilter.cppnew file+167

This diff is too big to show here.

tests/mocks/Unity/fake_rangeinputfilter.hnew file+79

This diff is too big to show here.

tests/mocks/Unity/fake_scope.cpp+59−29

This diff is too big to show here.

tests/mocks/Unity/fake_scope.h+23−9

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Unity/fake_valuesliderfilter.cppnew file+84

This diff is too big to show here.

tests/mocks/Unity/fake_valuesliderfilter.hnew file+55

This diff is too big to show here.

tests/mocks/Unity/fake_valueslidervalues.cppnew file+51

This diff is too big to show here.

tests/mocks/Unity/Application/SessionManager.h → tests/mocks/Unity/fake_valueslidervalues.hrenamed+11−19

This diff is too big to show here.

tests/mocks/Utils/CMakeLists.txt+8−2

This diff is too big to show here.

tests/mocks/Utils/Utils.qmltypes+2−2

This diff is too big to show here.

tests/mocks/Utils/plugin.cpp+17−3

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+12−1

This diff is too big to show here.

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

This diff is too big to show here.

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

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+168−13

This diff is too big to show here.

tests/plugins/AccountsService/interfaces.xml+29

This diff is too big to show here.

tests/plugins/AccountsService/server.cpp+12

This diff is too big to show here.

tests/plugins/AccountsService/types.hnew file+25

This diff is too big to show here.

tests/plugins/Dash/cardcreator/1.res+8−17

This diff is too big to show here.

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

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+8−17

This diff is too big to show here.

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

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+6−15

This diff is too big to show here.

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

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+8−17

This diff is too big to show here.

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

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/Dash/listviewwithpageheadersectiontest.cpp+15

This diff is too big to show here.

tests/plugins/Dash/listviewwithpageheadertest.cpp+15

This diff is too big to show here.

tests/plugins/Dash/listviewwithpageheadertestsection.qml+1−1

This diff is too big to show here.

tests/plugins/Dash/tst_ScopeStyle.qml+1−1

This diff is too big to show here.

tests/plugins/IntegratedLightDM/CMakeLists.txt+26

This diff is too big to show here.

tests/plugins/IntegratedLightDM/dbus.cpp+3−5

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/IntegratedLightDM/pam.cpp+3−1

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_FloatingFlickable.cpp+2

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/CMakeLists.txt+2

This diff is too big to show here.

tests/plugins/Unity/Launcher/launchermodeltest.cpp+8−6

This diff is too big to show here.

tests/plugins/Unity/Session/CMakeLists.txt+2

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+6−2

This diff is too big to show here.

tests/qmltests/Components/tst_Dialogs.qml+4−2

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/Components/tst_PhysicalKeysMapper.qml+3−3

This diff is too big to show here.

tests/qmltests/Dash/Filters/tst_FilterOptionSelector.qmlnew file+96

This diff is too big to show here.

tests/qmltests/Dash/Filters/tst_FilterRangeInput.qmlnew file+247

This diff is too big to show here.

tests/qmltests/Dash/Filters/tst_FilterValueSlider.qmlnew file+101

This diff is too big to show here.

tests/qmltests/Dash/Filters/tst_FilterWidgetFactory.qmlnew file+58

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_Preview.qml+1

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_PreviewImageGallery.qml+3−2

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_Card.qml+10−10

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_DashContent.qml+165−152

This diff is too big to show here.

tests/qmltests/Dash/tst_DashPageHeader.qml+24−15

This diff is too big to show here.

tests/qmltests/Dash/tst_DashShell.qml+6−2

This diff is too big to show here.

tests/qmltests/Dash/tst_GenericScopeView.qml+3−31

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_Greeter.qml+10−3

This diff is too big to show here.

tests/qmltests/Greeter/tst_NarrowView.qml+12−1

This diff is too big to show here.

tests/qmltests/Launcher/tst_Launcher.qml+259−20

This diff is too big to show here.

tests/qmltests/Notifications/tst_Notifications.qml+53−52

This diff is too big to show here.

tests/qmltests/Notifications/tst_OptionToggle.qml+11−2

This diff is too big to show here.

tests/qmltests/Notifications/tst_SwipeToAct.qml+11−1

This diff is too big to show here.

tests/qmltests/Notifications/tst_VisualSnapDecisionsQueue.qml+16−6

This diff is too big to show here.

tests/qmltests/Panel/IndicatorTest.qml+2−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_ActiveCallHint.qml+3−2

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/Panel/tst_IndicatorItemRow.qml+1−2

This diff is too big to show here.

tests/qmltests/Panel/tst_IndicatorsMenu.qml−1

This diff is too big to show here.

tests/qmltests/Panel/tst_Panel.qml+4−2

This diff is too big to show here.

tests/qmltests/Stages/ApplicationCheckBox.qml+103−58

This diff is too big to show here.

tests/qmltests/Stages/RecursingChildSessionControl.qml+10−61

This diff is too big to show here.

tests/qmltests/Stages/SurfaceManagerControls.qml+6−7

This diff is too big to show here.

tests/qmltests/Stages/tst_ApplicationWindow.qml+73−59

This diff is too big to show here.

tests/qmltests/Stages/tst_DesktopStage.qml+257−168

This diff is too big to show here.

tests/qmltests/Stages/tst_PhoneStage.qml+282−79

This diff is too big to show here.

tests/qmltests/Stages/tst_SessionContainer.qmldeleted−331

This diff is too big to show here.

tests/qmltests/Stages/tst_SpreadDelegate.qml+10−2

This diff is too big to show here.

tests/qmltests/Stages/tst_SurfaceContainer.qml+242−46

This diff is too big to show here.

tests/qmltests/Stages/tst_TabletStage.qml+409−85

This diff is too big to show here.

tests/qmltests/Stages/tst_WindowResizeArea.qml+7

This diff is too big to show here.

tests/qmltests/Tutorial/tst_Tutorial.qml+628−198

This diff is too big to show here.

tests/qmltests/Wizard/tst_Wizard.qml+127−214

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+242−96

This diff is too big to show here.

tests/qmltests/tst_Shell.qml+595−198

This diff is too big to show here.

tests/qmltests/tst_ShellWithPin.qml+9−35

This diff is too big to show here.

tests/utils/modules/Unity/Test/UnityTestCase.qml+165−14

This diff is too big to show here.