on xenial help sign in
Merge trunk
commit0a3dad456b2abae9dd88df20fb389db925efa45b authorMichał Sawicz <michal.sawicz@canonical.com> dateFri 15 Jul 2016, 11:51 (10 years ago) parent568dd1e65b1efb
780 files changed+37268−22903
CMakeLists.txt+14−2 build.sh+3−3 data/51-unity8-greeter.conf+2 data/CMakeLists.txt+11 data/unity8-dash.png data/unity8-greeter-init.conf+12 data/unity8-greeter-wrapper+98 data/unity8-greeter.desktop.in+7 data/unity8-greeter.pkla+44 data/unity8.conf+25−2 debian/changelog+273 debian/control+26−9 debian/rules+5−1 debian/unity8-greeter.install+5 debian/unity8-private.install+1−2 debian/unity8.install+1 debian/usr.bin.unity8-dash+21 libs/CMakeLists.txt−1 libs/UbuntuGestures/CMakeLists.txt−41 libs/UbuntuGestures/CandidateInactivityTimer.cpp−46 libs/UbuntuGestures/CandidateInactivityTimer.h−51 libs/UbuntuGestures/DebugHelpers.cpp−95 libs/UbuntuGestures/DebugHelpers.h−31 libs/UbuntuGestures/Pool.h−124 libs/UbuntuGestures/TimeSource.cpp−49 libs/UbuntuGestures/TimeSource.h−64 libs/UbuntuGestures/Timer.cpp−152 libs/UbuntuGestures/Timer.h−122 libs/UbuntuGestures/TouchOwnershipEvent.h−50 libs/UbuntuGestures/TouchRegistry.cpp−553 libs/UbuntuGestures/TouchRegistry.h−201 libs/UbuntuGestures/UnownedTouchEvent.h−45 plugins/AccountsService/AccountsService.cpp+21−1 plugins/AccountsService/AccountsService.h+13−1 plugins/AccountsService/AccountsService.qmltypes−41 plugins/AccountsService/com.canonical.unity.AccountsService.xml+4 plugins/CMakeLists.txt+1−1 plugins/Cursor/CMakeLists.txt+6−1 plugins/Cursor/Cursor.qml+37−6 plugins/Cursor/Cursor.qmltypes−78 plugins/Cursor/CursorImageInfo.cpp+96 plugins/Cursor/CursorImageInfo.h+72 plugins/Cursor/CursorImageProvider.cpp+51−22 plugins/Cursor/CursorImageProvider.h+12−4 plugins/Cursor/MousePointer.cpp+42−32 plugins/Cursor/MousePointer.h+9−7 plugins/Cursor/plugin.cpp+4−2 plugins/Cursor/qmldir+1−1 plugins/Dash/AudioProgressBar.qml+1−1 plugins/Dash/CMakeLists.txt+4 plugins/Dash/CardCreator.js+127−76 plugins/Dash/CardCreatorCache.qml+3−3 plugins/Dash/Dash.qmltypes−100 plugins/Dash/ScopeStyle.qml+1−1 plugins/Dash/abstractdashview.h+1−3 plugins/Dash/graphics/music_progress_bg.png plugins/Dash/horizontaljournal.cpp+1−4 plugins/Dash/listviewwithpageheader.cpp+28−25 plugins/Dash/organicgrid.cpp−3 plugins/Dash/verticaljournal.cpp−3 plugins/GlobalShortcut/GlobalShortcut.qmltypes−31 plugins/Greeter/Unity/Launcher/CMakeLists.txt+1−1 plugins/Greeter/Unity/Launcher/Launcher.qmltypes−182 plugins/Greeter/Unity/Launcher/launcheritem.cpp+14 plugins/Greeter/Unity/Launcher/launcheritem.h+3−1 plugins/Greeter/Unity/Launcher/launchermodelas.cpp+2−7 plugins/Greeter/Unity/Launcher/launchermodelas.h−1 plugins/IntegratedLightDM/CMakeLists.txt−40 plugins/LightDM/CMakeLists.txt+26 plugins/IntegratedLightDM/DBusGreeter.cpp → plugins/LightDM/DBusGreeter.cpp+5−4 plugins/IntegratedLightDM/DBusGreeter.h → plugins/LightDM/DBusGreeter.h plugins/IntegratedLightDM/DBusGreeterList.cpp → plugins/LightDM/DBusGreeterList.cpp plugins/IntegratedLightDM/DBusGreeterList.h → plugins/LightDM/DBusGreeterList.h plugins/LightDM/FullLightDM/CMakeLists.txt+28 plugins/LightDM/FullLightDM/qmldir+3 plugins/IntegratedLightDM/Greeter.cpp → plugins/LightDM/Greeter.cpp+13−2 plugins/IntegratedLightDM/Greeter.h → plugins/LightDM/Greeter.h+5−2 plugins/IntegratedLightDM/GreeterPrivate.h → plugins/LightDM/GreeterPrivate.h plugins/IntegratedLightDM/IntegratedLightDM.qmltypes → plugins/LightDM/IntegratedLightDM.qmltypes plugins/LightDM/IntegratedLightDM/CMakeLists.txt+33 plugins/LightDM/IntegratedLightDM/QLightDM/Greeter+17 plugins/LightDM/IntegratedLightDM/QLightDM/SessionsModel+17 plugins/LightDM/IntegratedLightDM/QLightDM/UsersModel+17 plugins/IntegratedLightDM/liblightdm/CMakeLists.txt → plugins/LightDM/IntegratedLightDM/liblightdm/CMakeLists.txt+4−2 plugins/IntegratedLightDM/liblightdm/Greeter.cpp → plugins/LightDM/IntegratedLightDM/liblightdm/Greeter.cpp plugins/IntegratedLightDM/liblightdm/Greeter.h → plugins/LightDM/IntegratedLightDM/liblightdm/Greeter.h plugins/IntegratedLightDM/liblightdm/GreeterPrivate.cpp → plugins/LightDM/IntegratedLightDM/liblightdm/GreeterPrivate.cpp+1−2 plugins/IntegratedLightDM/liblightdm/GreeterPrivate.h → plugins/LightDM/IntegratedLightDM/liblightdm/GreeterPrivate.h plugins/LightDM/IntegratedLightDM/liblightdm/SessionsModel.cpp+88 plugins/LightDM/IntegratedLightDM/liblightdm/SessionsModel.h+72 plugins/LightDM/IntegratedLightDM/liblightdm/SessionsModelPrivate.cpp+36 plugins/LightDM/IntegratedLightDM/liblightdm/SessionsModelPrivate.h+54 plugins/IntegratedLightDM/liblightdm/UsersModel.cpp → plugins/LightDM/IntegratedLightDM/liblightdm/UsersModel.cpp+4−1 plugins/IntegratedLightDM/liblightdm/UsersModel.h → plugins/LightDM/IntegratedLightDM/liblightdm/UsersModel.h+2−1 plugins/IntegratedLightDM/liblightdm/UsersModelPrivate.cpp → plugins/LightDM/IntegratedLightDM/liblightdm/UsersModelPrivate.cpp+5−3 plugins/IntegratedLightDM/liblightdm/UsersModelPrivate.h → plugins/LightDM/IntegratedLightDM/liblightdm/UsersModelPrivate.h+2−1 plugins/LightDM/IntegratedLightDM/qmldir+3 plugins/LightDM/SessionsModel.cpp+122 plugins/LightDM/SessionsModel.h+68 plugins/IntegratedLightDM/UsersModel.cpp → plugins/LightDM/UsersModel.cpp plugins/IntegratedLightDM/UsersModel.h → plugins/LightDM/UsersModel.h plugins/IntegratedLightDM/plugin.cpp → plugins/LightDM/plugin.cpp+26−4 plugins/IntegratedLightDM/plugin.h → plugins/LightDM/plugin.h+5−5 plugins/IntegratedLightDM/qmldir → plugins/LightDM/qmldir plugins/Lights/CMakeLists.txt+1 plugins/Lights/Lights.qmltypes−45 plugins/Lights/android-hardware.h−4 plugins/Powerd/Powerd.qmltypes−39 plugins/SessionBroadcast/SessionBroadcast.qmltypes−19 plugins/UInput/UInput.qmltypes−44 plugins/Ubuntu/DownloadDaemonListener/CMakeLists.txt−1 plugins/Ubuntu/DownloadDaemonListener/DownloadDaemonListener.qmltypes−60 plugins/Ubuntu/Gestures/AxisVelocityCalculator.h+1−1 plugins/Ubuntu/Gestures/CMakeLists.txt+9−5 plugins/Ubuntu/Gestures/Damper.h−89 plugins/Ubuntu/Gestures/Direction.h+1 plugins/Ubuntu/Gestures/DirectionalDragArea.cpp−932 plugins/Ubuntu/Gestures/DirectionalDragArea.h−143 plugins/Ubuntu/Gestures/DirectionalDragArea_p.h−169 plugins/Ubuntu/Gestures/FloatingFlickable.cpp−150 plugins/Ubuntu/Gestures/FloatingFlickable.h−86 plugins/Ubuntu/Gestures/Gestures.qmltypes−209 plugins/Ubuntu/Gestures/MouseEventGenerator.cpp+64 plugins/Ubuntu/Gestures/MouseEventGenerator.h+48 plugins/Ubuntu/Gestures/PressedOutsideNotifier.h+1−1 plugins/Ubuntu/Gestures/TouchDispatcher.cpp+1−5 plugins/Ubuntu/Gestures/TouchGate.cpp+2−2 plugins/Ubuntu/Gestures/TouchGestureArea.cpp+16−15 plugins/Ubuntu/Gestures/TouchGestureArea.h+9−10 plugins/Ubuntu/Gestures/plugin.cpp+3−5 plugins/Ubuntu/Payments/Payments.qmltypes−43 plugins/Ubuntu/SystemImage/SystemImage.qmltypes−19 plugins/Unity/Connectivity/Connectivity.qmltypes−19 plugins/Unity/DashCommunicator/DashCommunicator.qmltypes−47 plugins/Unity/Indicators/CMakeLists.txt+4 plugins/Unity/Indicators/Indicators.qmltypes−264 plugins/Unity/Indicators/indicatorsmanager.cpp+1−1 plugins/Unity/InputInfo/InputInfo.qmltypes−71 plugins/Unity/InputInfo/linux/qinputdeviceinfo_linux.cpp+7−2 plugins/Unity/InputInfo/linux/qinputdeviceinfo_linux_p.h−2 plugins/Unity/InputInfo/plugin.h+1−1 plugins/Unity/InputInfo/qdeclarativeinputdevicemodel_p.h+3−3 plugins/Unity/Launcher/CMakeLists.txt+3−1 plugins/Unity/Launcher/Launcher.qmltypes−182 plugins/Unity/Launcher/launcheritem.cpp+14−9 plugins/Unity/Launcher/launcheritem.h+3 plugins/Unity/Launcher/launchermodel.cpp+58−26 plugins/Unity/Launcher/launchermodel.h+1−1 plugins/Unity/Platform/Platform.qmltypes−20 plugins/Unity/Session/CMakeLists.txt+2 plugins/Unity/Session/Session.qmltypes−85 plugins/Unity/Session/dbusunitysessionservice.cpp+57−18 plugins/Unity/Session/dbusunitysessionservice.h+7 plugins/Utils/CMakeLists.txt+5 plugins/Utils/Utils.qmltypes−175 plugins/Utils/WindowInputMonitor.cpp+8−8 plugins/Utils/WindowInputMonitor.h+8−2 plugins/Utils/globalfunctions.cpp+1−4 plugins/Utils/windowstatestorage.cpp+2−2 plugins/Utils/windowstatestorage.h+14−4 plugins/WindowManager/CMakeLists.txt+1 plugins/Wizard/Wizard.qmltypes−33 po/aa.po+262−100 po/am.po+300−108 po/ar.po+266−101 po/ast.po+296−104 po/az.po+262−100 po/be.po+266−101 po/bg.po+262−100 po/bn.po+266−101 po/br.po+272−101 po/bs.po+266−101 po/ca.po+367−153 po/ca@valencia.po+262−100 po/ce.po+262−100 po/ckb.po+262−100 po/co.po+964 po/cs.po+266−101 po/cy.po+266−101 po/da.po+266−101 po/de.po+303−109 po/el.po+266−101 po/en_AU.po+296−104 po/en_GB.po+297−105 po/eo.po+262−100 po/es.po+300−106 po/eu.po+266−101 po/fa.po+301−108 po/fi.po+301−107 po/fo.po+346−180 po/fr.po+306−111 po/ga.po+266−101 po/gd.po+299−107 po/gl.po+298−104 po/gv.po+262−100 po/he.po+266−101 po/hi.po+262−100 po/hr.po+297−105 po/hu.po+299−106 po/hy.po+262−100 po/ia.po+299−105 po/id.po+262−100 po/is.po+262−100 po/it.po+297−105 po/ja.po+262−100 po/km.po+262−100 po/kn.po+262−100 po/ko.po+266−101 po/ku.po+262−100 po/ky.po+262−100 po/lo.po+262−100 po/lt.po+262−100 po/lv.po+266−101 po/ml.po+262−100 po/mr.po+262−100 po/ms.po+302−105 po/my.po+262−100 po/nb.po+299−107 po/ne.po+262−100 po/nl.po+292−103 po/nn.po+262−100 po/oc.po+275−101 po/or.po+262−100 po/pa.po+266−101 po/pl.po+300−108 po/pt.po+302−108 po/pt_BR.po+266−101 po/ro.po+266−101 po/ru.po+326−137 po/shn.po+262−100 po/si.po+262−100 po/sk.po+298−106 po/sl.po+296−104 po/sq.po+266−101 po/sr.po+296−104 po/sv.po+302−109 po/sw.po+266−101 po/ta.po+262−100 po/te.po+262−100 po/th.po+262−100 po/tr.po+266−101 po/ug.po+287−122 po/uk.po+297−105 po/unity8.pot+260−98 po/ur.po+262−100 po/uz.po+262−100 po/vi.po+262−100 po/wo.po+266−101 po/xh.po+262−100 po/zh_CN.po+305−113 po/zh_HK.po+262−100 po/zh_TW.po+277−112 qml/Components/DelayedLockscreen.qml+1 qml/Components/Dialogs.qml+8−8 qml/Components/DragHandle.qml+43−25 qml/Components/FadingLabel.qml+42 qml/Components/FloatingFlickable.qml+59 qml/Components/InputMethod.qml+2−2 qml/Components/KeyboardShortcutsOverlay.qml+334 qml/Components/LazyImage.qml+3−1 qml/Components/ListItems/graphics/ListItemDividerHorizontal@18.png qml/Components/Lockscreen.qml+8 qml/Components/MediaServices/MediaServices.qml+386 qml/Components/MediaServices/MediaServicesControls.qml+192 qml/Components/MediaServices/MediaServicesHeader.qml+71 qml/Components/MediaServices/VideoPlayer.qml+155 qml/Components/MediaServices/VideoPlayerControls.qml+158 qml/Components/ModeSwitchWarningDialog.qml+1−1 qml/Components/PanelState/PanelState.qml+4−3 qml/Components/PassphraseLockscreen.qml+4 qml/Components/PhysicalKeysMapper.qml+2−22 qml/Components/PinLockscreen.qml+4 qml/Components/Rating.qml+1 qml/Components/RatingStyle.qml+3 qml/Dash/Previews/PreviewSharing.qml → qml/Components/SharingPicker.qml+2−14 qml/Components/WindowControlButtons.qml+41−34 qml/Components/graphics/close@20.png qml/Components/graphics/icon_star_empty@20.png qml/Components/graphics/icon_star_full@20.png qml/Components/graphics/icon_star_half@20.png qml/Components/graphics/icon_star_off@20.png qml/Components/graphics/icon_star_on@20.png qml/Components/graphics/non-selected@18.png qml/Components/graphics/window-close.svg+164−14 qml/Components/graphics/window-maximize.svg+164−12 qml/Components/graphics/window-minimize.svg+164−13 qml/Components/graphics/window-window.svg+41 qml/Dash/CardCarousel.qml+1−1 qml/Dash/CardGrid.qml−2 qml/Dash/CardTool.qml+8−3 qml/Dash/Dash.qml+3−3 qml/Dash/DashApplication.qml+15−7 qml/Dash/DashCategoryBase.qml+3−11 qml/Dash/DashPageHeader.qml+31−36 qml/Dash/Filters/FilterOptionSelector.qml+4 qml/Dash/Filters/FilterWidgetFactory.qml+8 qml/Dash/GenericScopeView.qml+20−9 qml/Dash/PageHeaderExtraPanel.qml+34−10 qml/Dash/Previews/Preview.qml+17 qml/Dash/Previews/PreviewActions.qml+1−1 qml/Dash/Previews/PreviewImageGallery.qml+3 qml/Dash/Previews/PreviewInlineVideo.qml+65 qml/Dash/Previews/PreviewMediaToolbar.qml+25−5 qml/Dash/Previews/PreviewPayments.qml+1−1 qml/Dash/Previews/PreviewRatingEdit.qml+4−1 qml/Dash/Previews/PreviewRatingInput.qml+41−42 qml/Dash/Previews/PreviewWidget.qml+3 qml/Dash/Previews/PreviewWidgetFactory.qml+11−1 qml/Dash/Previews/PreviewZoomableImage.qml+1 qml/Dash/ScopesList.qml+2−13 qml/Dash/graphics/dash_divider_top_darkgrad@27.png qml/Dash/graphics/dash_divider_top_lightgrad@27.png qml/Dash/graphics/header_handlearrow2@27.png qml/Dash/graphics/header_handlearrow@27.png qml/Dash/graphics/icon_clear@20.png qml/Dash/graphics/icon_search_active@20.png qml/Dash/graphics/icon_search_inactive@20.png qml/Dash/graphics/navigation_shadow@18.png qml/Dash/graphics/navigation_shadow_light@18.png qml/Dash/graphics/overview_hint@27.png qml/Dash/graphics/pagination_dot_off@30.png qml/Dash/graphics/pagination_dot_on@30.png qml/Dash/graphics/paper.png qml/Dash/graphics/pixel.png qml/Dash/graphics/play_button@18.png qml/Dash/graphics/play_button_active@18.png qml/Dash/graphics/play_button_active_big@20.png qml/Dash/graphics/play_button_big@20.png qml/Dash/graphics/tabbarchevron@27.png qml/Dash/graphics/tablet/icon_close_preview@20.png qml/Dash/graphics/tooltip_arrow@27.png qml/DisabledScreenNotice.qml+7 qml/Greeter/CoverPage.qml+23−1 qml/Components/Header.qml → qml/Greeter/FullLightDMImpl.qml+10−10 qml/Greeter/Greeter.qml+184−68 qml/Greeter/GreeterPrompt.qml+197 qml/Greeter/IntegratedLightDMImpl.qml+1−1 qml/Greeter/LightDM.qml → qml/Greeter/LightDMService.qml+14−3 qml/Greeter/LoginList.qml+77−81 qml/Greeter/NarrowView.qml+20−3 qml/Greeter/WideView.qml+11−4 qml/Greeter/graphics/dot_empty.png qml/Greeter/graphics/dot_filled.png qml/Greeter/graphics/dot_pointer.png qml/Greeter/graphics/icon_arrow.png qml/Greeter/graphics/infographic_circle_back.png qml/Greeter/qmldir+1 qml/Launcher/Launcher.qml+17−24 qml/Launcher/LauncherDelegate.qml+6−10 qml/Launcher/LauncherPanel.qml+5−1 qml/Launcher/graphics/divider-line.png qml/Launcher/graphics/focused_app_arrow@30.png qml/Launcher/graphics/home@18.png qml/Launcher/graphics/quicklist_tooltip@30.png qml/Notifications/Notification.qml+36−5 qml/Notifications/NotificationMenuItemFactory.qml+4 qml/Notifications/Notifications.qml+19−9 qml/Panel/Indicators/MenuItemFactory.qml+2−2 qml/Panel/Indicators/MessageMenuItemFactory.qml+1−5 qml/Panel/Indicators/client/IndicatorsClient.qml+7−1 qml/Panel/Indicators/client/IndicatorsList.qml+7 qml/Panel/IndicatorsMenu.qml+20−14 qml/Panel/Panel.qml+26−22 qml/Panel/graphics/rectangular_dropshadow@30.png qml/Rotation/HalfLoopRotationAnimation.qml+1−1 qml/Rotation/ImmediateRotationAction.qml+1−1 qml/Rotation/NinetyRotationAnimation.qml+1−1 qml/Rotation/UpdateShellTransformations.qml+4−4 qml/Shell.qml+79−23 qml/Stages/AbstractStage.qml+1 qml/Stages/ApplicationWindow.qml+25−9 qml/Stages/DecoratedWindow.qml+51−20 qml/Stages/DesktopSpread.qml+3−1 qml/Stages/DesktopSpreadDelegate.qml+1−1 qml/Stages/DesktopStage.qml+131−57 qml/Stages/OrientationChangeAnimation.qml+30−6 qml/Stages/PhoneStage.qml+4−4 qml/Stages/ShimStage.qml → qml/Stages/ResizeGrip.qml+22−19 qml/Stages/SideStage.qml+1−2 qml/Stages/Splash.qml+6−17 qml/Stages/SpreadDelegate.qml+8−12 qml/Stages/SurfaceContainer.qml+3 qml/Stages/TabletSideStageTouchGesture.qml+3 qml/Stages/TabletStage.qml+24−16 qml/Stages/WindowControlsOverlay.qml+219 qml/Stages/WindowDecoration.qml+39−13 qml/Stages/WindowResizeArea.qml+40−20 qml/Stages/graphics/PageHeaderBaseDividerBottom@18.png qml/Stages/graphics/PageHeaderBaseDividerLight@18.png qml/Stages/graphics/arrows-centre.png qml/Stages/graphics/arrows.png qml/Stages/graphics/dropshadow2gu@30.png qml/Stages/graphics/sidestage_handle@20.png qml/Tutorial/InactivityTimer.qml+26−10 qml/Tutorial/Tutorial.qml+7−6 qml/Tutorial/TutorialBottom.qml−124 qml/Tutorial/TutorialContent.qml+51−134 qml/Tutorial/TutorialLeft.qml+2−2 qml/Tutorial/TutorialLeftLong.qml+3−1 qml/Tutorial/TutorialPage.qml+2−2 qml/Tutorial/TutorialRight.qml+2−2 qml/Tutorial/TutorialTop.qml+2−3 qml/Tutorial/graphics/background1.png qml/Tutorial/graphics/background2.png qml/Wizard/Pages/10-welcome.qml+17−4 qml/Wizard/Pages/50-timezone.qml+5−2 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/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/passcode-desktop.qml+27−10 qml/Wizard/PasswordMeter.qml+3−1 qml/Wizard/Wizard.qml+6−2 qml/graphics/dropshadow_left@20.png qml/graphics/dropshadow_right@20.png src/CMakeLists.txt+2−4 src/Dash/CMakeLists.txt+1 src/Dash/main.cpp+29−21 src/ShellApplication.cpp+11−1 tools/unix-signal-handler.cpp → src/UnixSignalHandler.cpp+4−6 tools/unix-signal-handler.h → src/UnixSignalHandler.h src/main.cpp+8 tests/CMakeLists.txt+7−2 tests/autopilot/unity8/dash.py+2−3 tests/autopilot/unity8/fixture_setup.py+1−1 tests/autopilot/unity8/greeter/tests/test_args.py−5 tests/autopilot/unity8/shell/tests/__init__.py+1−1 tests/data/unity/backgrounds/blue.png tests/data/unity/backgrounds/red.png tests/graphics/applicationIcons/browser@18.png tests/graphics/applicationIcons/calendar@18.png tests/graphics/applicationIcons/camera@18.png tests/graphics/applicationIcons/contacts-app@18.png tests/graphics/applicationIcons/dash.png tests/graphics/applicationIcons/dialer-app@18.png tests/graphics/applicationIcons/evernote@18.png tests/graphics/applicationIcons/facebook@18.png tests/graphics/applicationIcons/gallery@18.png tests/graphics/applicationIcons/gmail@18.png tests/graphics/applicationIcons/libreoffice@18.png tests/graphics/applicationIcons/map@18.png tests/graphics/applicationIcons/messages-app@18.png tests/graphics/applicationIcons/notepad@18.png tests/graphics/applicationIcons/pinterest@18.png tests/graphics/applicationIcons/soundcloud@18.png tests/graphics/applicationIcons/system-settings@18.png tests/graphics/applicationIcons/twitter@18.png tests/graphics/applicationIcons/weather@18.png tests/graphics/applicationIcons/wikipedia@18.png tests/graphics/applicationIcons/youtube@18.png tests/graphics/avatars/amanda@12.png tests/graphics/avatars/anna_olsson@12.png tests/graphics/avatars/funky@12.png tests/graphics/clock@18.png tests/libs/CMakeLists.txt−1 tests/libs/UbuntuGestures/CMakeLists.txt−16 tests/libs/UbuntuGestures/tst_TouchRegistry.cpp−974 tests/mocks/AccountsService/AccountsService.cpp+24 tests/mocks/AccountsService/AccountsService.h+16 tests/mocks/AccountsService/AccountsService.qmltypes−41 tests/mocks/Biometryd/CMakeLists.txt+14 libs/UbuntuGestures/TouchOwnershipEvent.cpp → tests/mocks/Biometryd/MockBiometryd.cpp+20−12 tests/mocks/Biometryd/MockBiometryd.h+50 tests/mocks/Biometryd/MockDevice.cpp+29 tests/mocks/Biometryd/MockDevice.h+40 tests/mocks/Biometryd/MockIdentifier.cpp+28 tests/mocks/Biometryd/MockIdentifier.h+36 libs/UbuntuGestures/UbuntuGesturesGlobal.h → tests/mocks/Biometryd/MockObserver.cpp+6−7 tests/plugins/Ubuntu/Gestures/tst_Damper.cpp → tests/mocks/Biometryd/MockObserver.h+15−18 tests/mocks/Biometryd/MockOperation.cpp+56 tests/mocks/Biometryd/MockOperation.h+48 libs/UbuntuGestures/UnownedTouchEvent.cpp → tests/mocks/Biometryd/plugin.cpp+16−14 tests/mocks/Biometryd/plugin.h+31 tests/mocks/Biometryd/qmldir+3 tests/mocks/CMakeLists.txt+2−1 tests/mocks/Cursor/qmldir+1−1 tests/mocks/GSettings.1.0/GSettings.qmltypes−42 tests/mocks/GSettings.1.0/fake_gsettings.cpp+1 tests/mocks/GSettings.1.0/fake_gsettings.h+2−2 tests/mocks/IntegratedLightDM/qmldir−3 tests/mocks/LightDM/CMakeLists.txt+1 tests/mocks/IntegratedLightDM/IntegratedLightDM.qmltypes → tests/mocks/LightDM/IntegratedLightDM.qmltypes tests/mocks/IntegratedLightDM/CMakeLists.txt → tests/mocks/LightDM/IntegratedLightDM/CMakeLists.txt+9−7 tests/mocks/IntegratedLightDM/MockGreeter.cpp → tests/mocks/LightDM/IntegratedLightDM/MockGreeter.cpp+16 tests/mocks/IntegratedLightDM/MockGreeter.h → tests/mocks/LightDM/IntegratedLightDM/MockGreeter.h+5 tests/mocks/LightDM/IntegratedLightDM/MockSessionsModel.cpp+37 tests/mocks/LightDM/IntegratedLightDM/MockSessionsModel.h+34 tests/mocks/IntegratedLightDM/MockUsersModel.cpp → tests/mocks/LightDM/IntegratedLightDM/MockUsersModel.cpp tests/mocks/IntegratedLightDM/MockUsersModel.h → tests/mocks/LightDM/IntegratedLightDM/MockUsersModel.h tests/mocks/IntegratedLightDM/QLightDM/Greeter → tests/mocks/LightDM/IntegratedLightDM/QLightDM/Greeter plugins/Ubuntu/Gestures/Damper.cpp → tests/mocks/LightDM/IntegratedLightDM/QLightDM/SessionsModel+1−8 tests/mocks/IntegratedLightDM/QLightDM/UsersModel → tests/mocks/LightDM/IntegratedLightDM/QLightDM/UsersModel tests/mocks/IntegratedLightDM/liblightdm/CMakeLists.txt → tests/mocks/LightDM/IntegratedLightDM/liblightdm/CMakeLists.txt+4−2 tests/mocks/IntegratedLightDM/liblightdm/Greeter.cpp → tests/mocks/LightDM/IntegratedLightDM/liblightdm/Greeter.cpp+9−2 tests/mocks/IntegratedLightDM/liblightdm/Greeter.h → tests/mocks/LightDM/IntegratedLightDM/liblightdm/Greeter.h+1 tests/mocks/IntegratedLightDM/liblightdm/GreeterPrivate.cpp → tests/mocks/LightDM/IntegratedLightDM/liblightdm/GreeterPrivate.cpp tests/mocks/IntegratedLightDM/liblightdm/GreeterPrivate.h → tests/mocks/LightDM/IntegratedLightDM/liblightdm/GreeterPrivate.h+1−1 tests/mocks/LightDM/IntegratedLightDM/liblightdm/SessionsModel.cpp+99 tests/mocks/LightDM/IntegratedLightDM/liblightdm/SessionsModel.h+72 tests/mocks/LightDM/IntegratedLightDM/liblightdm/SessionsModelPrivate.cpp+73 tests/mocks/LightDM/IntegratedLightDM/liblightdm/SessionsModelPrivate.h+59 tests/mocks/IntegratedLightDM/liblightdm/UsersModel.cpp → tests/mocks/LightDM/IntegratedLightDM/liblightdm/UsersModel.cpp+4−1 tests/mocks/IntegratedLightDM/liblightdm/UsersModel.h → tests/mocks/LightDM/IntegratedLightDM/liblightdm/UsersModel.h+2−1 tests/mocks/IntegratedLightDM/liblightdm/UsersModelPrivate.cpp → tests/mocks/LightDM/IntegratedLightDM/liblightdm/UsersModelPrivate.cpp+29−23 tests/mocks/IntegratedLightDM/liblightdm/UsersModelPrivate.h → tests/mocks/LightDM/IntegratedLightDM/liblightdm/UsersModelPrivate.h+2−1 tests/mocks/IntegratedLightDM/plugin.cpp → tests/mocks/LightDM/IntegratedLightDM/plugin.cpp+15−4 tests/mocks/IntegratedLightDM/plugin.h → tests/mocks/LightDM/IntegratedLightDM/plugin.h+1−1 tests/mocks/LightDM/IntegratedLightDM/qmldir+2 tests/mocks/Lights/Lights.qmltypes−45 tests/mocks/MeeGo/QOfono/QOfono.qmltypes−30 tests/mocks/Powerd/Powerd.qmltypes−39 tests/mocks/QMenuModel/QMenuModel.qmltypes−111 tests/mocks/QtMultimedia/CMakeLists.txt+8−2 tests/mocks/QtMultimedia/QtMultimedia.qmltypes−62 tests/mocks/QtMultimedia/VideoSurface.qml+111 tests/mocks/QtMultimedia/audio.cpp−132 tests/mocks/QtMultimedia/audio.h−97 tests/mocks/QtMultimedia/mediaplayer.cpp+318 tests/mocks/QtMultimedia/mediaplayer.h+223 tests/mocks/QtMultimedia/plugin.cpp+7−3 tests/mocks/QtMultimedia/videooutput.cpp+127 tests/mocks/QtMultimedia/videooutput.h+52 tests/mocks/Ubuntu/DownloadDaemonListener/DownloadDaemonListener.qmltypes−60 tests/mocks/Ubuntu/Payments/MockPayments.cpp+1 tests/mocks/Ubuntu/Payments/Payments.qmltypes−44 tests/mocks/Ubuntu/SystemImage/SystemImage.qmltypes−20 tests/mocks/Ubuntu/SystemSettings/LanguagePlugin/LanguagePlugin.qmltypes−10 tests/mocks/Ubuntu/SystemSettings/LanguagePlugin/MockLanguagePlugin.qml+3−2 tests/mocks/Ubuntu/SystemSettings/SecurityPrivacy/SecurityPrivacy.qmltypes−39 tests/mocks/Ubuntu/SystemSettings/TimeDate/CMakeLists.txt+1−1 tests/mocks/Ubuntu/SystemSettings/TimeDate/MockTimeDate.qml+15−3 tests/mocks/Ubuntu/SystemSettings/TimeDate/qmldir+1−1 tests/mocks/Ubuntu/Telephony/Telephony.qmltypes−58 tests/mocks/Ubuntu/Thumbnailer/Thumbnailer.qmltypes−17 tests/mocks/Unity/Application/Application.qmltypes−517 tests/mocks/Unity/Application/ApplicationInfo.cpp+29−27 tests/mocks/Unity/Application/ApplicationInfo.h+6−5 tests/mocks/Unity/Application/ApplicationManager.cpp+18−1 tests/mocks/Unity/Application/MirSurface.h+2−2 tests/mocks/Unity/Application/MirSurfaceItem.cpp+17−7 tests/mocks/Unity/Application/MirSurfaceItem.h+1−1 tests/mocks/Unity/Application/MirSurfaceListModel.cpp+13−3 tests/mocks/Unity/Application/MirSurfaceListModel.h+1 tests/mocks/Unity/Application/UbuntuKeyboardInfo.cpp+1−1 tests/mocks/Unity/Application/resources/screenshots/browser@12.png tests/mocks/Unity/Application/resources/screenshots/camera@12.png tests/mocks/Unity/Application/resources/screenshots/dialer@12.png tests/mocks/Unity/Application/resources/screenshots/facebook@12.png tests/mocks/Unity/Application/resources/screenshots/gallery@12.png tests/mocks/Unity/Application/resources/screenshots/libreoffice@12.png tests/mocks/Unity/Application/resources/screenshots/map@12.png tests/mocks/Unity/Application/resources/screenshots/music@12.png tests/mocks/Unity/Application/resources/screenshots/twitter@12.png tests/mocks/Unity/Application/resources/screenshots/unity8-dash@12.png tests/mocks/Unity/Application/resources/screenshots/vkb_portrait.png tests/mocks/Unity/Application/resources/vkb_portrait.png tests/mocks/Unity/Connectivity/Connectivity.qmltypes−20 tests/mocks/Unity/DashCommunicator/DashCommunicator.qmltypes−46 tests/mocks/Unity/Indicators/Indicators.qmltypes−232 tests/mocks/Unity/InputInfo/plugin.h+1−1 tests/mocks/Unity/Launcher/CMakeLists.txt+1−1 tests/mocks/Unity/Launcher/Launcher.qmltypes−187 tests/mocks/Unity/Launcher/MockLauncherItem.cpp+14 tests/mocks/Unity/Launcher/MockLauncherItem.h+3 tests/mocks/Unity/Launcher/MockLauncherModel.cpp+8 tests/mocks/Unity/Launcher/MockLauncherModel.h+1−1 tests/mocks/Unity/Notifications/Notifications.qmltypes−149 tests/mocks/Unity/Screens/plugin.h+1−1 tests/mocks/Unity/Unity.qmltypes−469 tests/mocks/Unity/fake_optionselectorfilter.cpp+5 tests/mocks/Unity/fake_optionselectorfilter.h+2 tests/mocks/Unity/fake_optionselectoroptions.cpp+13 tests/mocks/Unity/fake_optionselectoroptions.h+2 tests/mocks/Unity/fake_previewmodel.cpp+1−1 tests/mocks/Unity/fake_scope.cpp+17−5 tests/mocks/Unity/fake_scope.h+2−1 tests/mocks/Unity/fake_scopes.cpp+12 tests/mocks/Unity/fake_scopesoverview.cpp+1−1 tests/mocks/Utils/CMakeLists.txt+5−1 tests/mocks/Utils/Utils.qmltypes−178 tests/mocks/Utils/plugin.h+1−1 tests/mocks/Utils/windowstatestorage.cpp+3−2 tests/mocks/Utils/windowstatestorage.h+18−4 tests/mocks/Wizard/Wizard.qmltypes−37 tests/mocks/libusermetrics/UserMetrics.cpp+1−1 tests/mocks/libusermetrics/libusermetricsoutput/ColorTheme.h−1 tests/mocks/libusermetrics/libusermetricsoutput/UserMetrics.h−1 tests/plugins/AccountsService/CMakeLists.txt−5 tests/plugins/CMakeLists.txt+3−2 tests/plugins/Cursor/CMakeLists.txt+8 tests/plugins/Cursor/TextEntry.qml+34 tests/plugins/Cursor/tst_Cursor.qml+144 tests/plugins/Dash/CMakeLists.txt+4 tests/plugins/Dash/cardcreator/1.res+17−46 tests/plugins/Dash/cardcreator/1.res.cardcreator+13−43 tests/plugins/Dash/cardcreator/1.tst+1 tests/plugins/Dash/cardcreator/10.res+4−13 tests/plugins/Dash/cardcreator/10.res.cardcreator−10 tests/plugins/Dash/cardcreator/10.tst+1 tests/plugins/Dash/cardcreator/11.res+20−49 tests/plugins/Dash/cardcreator/11.res.cardcreator+15−45 tests/plugins/Dash/cardcreator/11.tst+1 tests/plugins/Dash/cardcreator/12.res+17−46 tests/plugins/Dash/cardcreator/12.res.cardcreator+15−45 tests/plugins/Dash/cardcreator/12.tst+1 tests/plugins/Dash/cardcreator/2.res+4−13 tests/plugins/Dash/cardcreator/2.res.cardcreator−10 tests/plugins/Dash/cardcreator/2.tst+1 tests/plugins/Dash/cardcreator/3.res+16−54 tests/plugins/Dash/cardcreator/3.res.cardcreator+12−51 tests/plugins/Dash/cardcreator/3.tst+1 tests/plugins/Dash/cardcreator/4.res+5−6 tests/plugins/Dash/cardcreator/4.res.cardcreator+1−3 tests/plugins/Dash/cardcreator/4.tst+1 tests/plugins/Dash/cardcreator/5.res+11−55 tests/plugins/Dash/cardcreator/5.res.cardcreator+7−52 tests/plugins/Dash/cardcreator/5.tst+1 tests/plugins/Dash/cardcreator/6.res+3−4 tests/plugins/Dash/cardcreator/6.res.cardcreator+1−3 tests/plugins/Dash/cardcreator/6.tst+1 tests/plugins/Dash/cardcreator/7.res+4−13 tests/plugins/Dash/cardcreator/7.res.cardcreator−10 tests/plugins/Dash/cardcreator/7.tst+1 tests/plugins/Dash/cardcreator/8.res+5−6 tests/plugins/Dash/cardcreator/8.res.cardcreator+1−3 tests/plugins/Dash/cardcreator/8.tst+1 tests/plugins/Dash/cardcreator/9.res+5−6 tests/plugins/Dash/cardcreator/9.res.cardcreator+1−3 tests/plugins/Dash/cardcreator/9.tst+1 tests/plugins/Dash/cardcreatortest.cpp+9−6 tests/plugins/Dash/cardcreatortest.qml+4−4 tests/plugins/Dash/horizontaljournaltest.cpp+1−4 tests/plugins/Dash/listviewwithpageheadersectionexternalmodeltest.cpp+3−6 tests/plugins/Dash/listviewwithpageheadersectiontest.cpp+9−6 tests/plugins/Dash/listviewwithpageheadertest.cpp+6−4 tests/plugins/Dash/listviewwithpageheadertestsection.qml+15−3 tests/plugins/Dash/listviewwithpageheadertestsectionexternalmodel.qml+2−1 tests/plugins/Dash/organicgridtest.cpp+1−4 tests/plugins/Dash/tst_ListViewWithPageHeaderQML.qml+4−2 tests/plugins/Dash/tst_ScopeStyle.qml+1−1 tests/plugins/Dash/verticaljournaltest.cpp+1−4 tests/plugins/LightDM/CMakeLists.txt+1 tests/plugins/IntegratedLightDM/CMakeLists.txt → tests/plugins/LightDM/IntegratedLightDM/CMakeLists.txt+36−13 tests/plugins/IntegratedLightDM/dbus.cpp → tests/plugins/LightDM/IntegratedLightDM/dbus.cpp tests/plugins/IntegratedLightDM/greeter.qml → tests/plugins/LightDM/IntegratedLightDM/greeter.qml+1−1 tests/plugins/IntegratedLightDM/integrated.cpp → tests/plugins/LightDM/IntegratedLightDM/integrated.cpp tests/plugins/IntegratedLightDM/pam.cpp → tests/plugins/LightDM/IntegratedLightDM/pam.cpp tests/plugins/LightDM/IntegratedLightDM/sessionsmodel.cpp+96 tests/plugins/IntegratedLightDM/usersmodel.cpp → tests/plugins/LightDM/IntegratedLightDM/usersmodel.cpp tests/plugins/Ubuntu/Gestures/CMakeLists.txt+6−5 tests/plugins/Ubuntu/Gestures/DownwardsLauncher.qml−72 tests/plugins/Ubuntu/Gestures/GestureTest.cpp+2−2 tests/plugins/Ubuntu/Gestures/LeftwardsLauncher.qml−76 tests/plugins/Ubuntu/Gestures/RightwardsLauncher.qml−76 tests/plugins/Ubuntu/Gestures/UpwardsLauncher.qml−76 tests/plugins/Ubuntu/Gestures/tst_DirectionalDragArea.cpp−1250 tests/plugins/Ubuntu/Gestures/tst_DirectionalDragArea.qml−76 tests/plugins/Ubuntu/Gestures/tst_FloatingFlickable.cpp+25−18 tests/plugins/Ubuntu/Gestures/tst_FloatingFlickable.qml+1 tests/plugins/Ubuntu/Gestures/tst_TouchGate.cpp+1−1 tests/plugins/Unity/Indicators/MenuContentActivatorTest.cpp+1 tests/plugins/Unity/Launcher/CMakeLists.txt+1−1 tests/plugins/Unity/Launcher/launchermodeltest.cpp+43−2 tests/plugins/Unity/Session/CMakeLists.txt+29−1 tests/plugins/Unity/Session/LightDMServer.cpp+29 tests/plugins/Unity/Session/LightDMServer.h+38 tests/plugins/Unity/Session/LogindServer.cpp+33 tests/plugins/Unity/Session/LogindServer.h+43 tests/plugins/Unity/Session/interfaces.xml+17 tests/plugins/Unity/Session/server.cpp+50 tests/plugins/Unity/Session/sessionbackendtest.cpp+15−16 tests/plugins/Utils/WindowInputMonitorTest.cpp+52−11 tests/qmltests/CMakeLists.txt+3−1 tests/qmltests/Components/CMakeLists.txt+10−3 tests/qmltests/Components/tst_DragHandle.cpp+28−24 tests/qmltests/Components/tst_DragHandle.qml+22−4 tests/qmltests/Components/tst_DragHandle/BottomEdgeShowable.qml+108 tests/qmltests/Components/tst_DragHandle/HorizontalShowable.qml → tests/qmltests/Components/tst_DragHandle/LeftEdgeShowable.qml tests/qmltests/Components/tst_DragHandle/RightEdgeShowable.qml+108 tests/qmltests/Components/tst_DragHandle/VerticalShowable.qml → tests/qmltests/Components/tst_DragHandle/TopEdgeShowable.qml+7−7 tests/qmltests/Components/tst_EdgeDragEvaluator.cpp+1−1 tests/qmltests/Components/tst_LazyImage/portrait.png tests/qmltests/Components/tst_LazyImage/square.png tests/qmltests/Components/tst_LazyImage/wide.png tests/qmltests/Components/tst_Lockscreen.qml+20−1 tests/qmltests/Components/tst_MediaServices.qml+230 tests/qmltests/Components/tst_PhysicalKeysMapper.qml+12−21 tests/qmltests/Dash/Previews/tst_PreviewSharing.qml → tests/qmltests/Components/tst_SharingPicker.qml+8−8 tests/qmltests/Dash/Previews/tst_Preview.qml−1 tests/qmltests/Dash/Previews/tst_PreviewExpandable.qml+23−4 tests/qmltests/Dash/Previews/tst_PreviewInlineVideo.qml+114 tests/qmltests/Dash/Previews/tst_PreviewMediaToolbar.qml+3−3 tests/qmltests/Dash/Previews/tst_PreviewRatingDisplayCreationRanges.qml+51−15 tests/qmltests/Dash/Previews/tst_PreviewRatingEdit.qml+8−1 tests/qmltests/Dash/Previews/tst_PreviewRatingInput.qml+18−6 tests/qmltests/Dash/Previews/tst_PreviewWidgetFactory.qml+18−17 tests/qmltests/Dash/artwork/avatar@12.png tests/qmltests/Dash/artwork/background.png tests/qmltests/Dash/artwork/checkers.png tests/qmltests/Dash/artwork/emblem.png tests/qmltests/Dash/artwork/music-player-design.png tests/qmltests/Dash/tst_Card.qml+23−11 tests/qmltests/Dash/tst_CardTool.qml+1−1 tests/qmltests/Dash/tst_Dash.qml+150−125 tests/qmltests/Dash/tst_DashContent.qml+70−5 tests/qmltests/Dash/tst_DashPageHeader.qml−24 tests/qmltests/Dash/tst_DashShell.qml+7−1 tests/qmltests/Dash/tst_GenericScopeView.qml+37−2 tests/qmltests/Dash/tst_PreviewView.qml+3−3 tests/qmltests/Greeter/TestView.qml+10−3 tests/qmltests/Greeter/tst_Greeter.qml+203−24 tests/qmltests/Greeter/tst_Infographics.qml+1−1 tests/qmltests/Greeter/tst_NarrowView.qml+24−3 tests/qmltests/Greeter/tst_WideView.qml+108−35 tests/qmltests/Launcher/tst_Launcher.qml+76−13 tests/qmltests/Notifications/tst_Notifications.qml+89 tests/qmltests/Panel/Indicators/tst_MessageMenuItemFactory.qml+1 tests/qmltests/Panel/tst_IndicatorsMenu.qml+29−1 tests/qmltests/Stages/ApplicationCheckBox.qml+1−1 tests/qmltests/Stages/SurfaceManagerControls.qml+1−1 tests/qmltests/Stages/tst_ApplicationWindow.qml+39−11 tests/qmltests/Stages/tst_DesktopStage.qml+191−1 tests/qmltests/Stages/tst_PhoneStage.qml+1−1 tests/qmltests/Stages/tst_TabletStage.qml+222−31 tests/qmltests/Stages/tst_WindowResizeArea.qml+52−39 tests/qmltests/Tutorial/tst_Tutorial.qml+177−211 tests/qmltests/UnityLogo.png tests/qmltests/Wizard/tst_Wizard.qml+7−15 tests/qmltests/tst_OrientedShell.qml+71−49 tests/qmltests/tst_Shell.qml+115−36 tests/qmltests/tst_ShellWithPin.qml+9−7 tests/qmltests/utils/Unity/Test/tst_UnityTest.qml+31 tests/uqmlscene/main.cpp−1 tests/utils/modules/Unity/Test/CMakeLists.txt+9−3 tests/utils/modules/Unity/Test/Test.qmltypes−60 tests/utils/modules/Unity/Test/UnityTestCase.qml+31−12 tests/utils/modules/Unity/Test/testutil.cpp+19−2 tests/utils/modules/Unity/Test/testutil.h+1 tools/CMakeLists.txt+1−1 tools/scopetool.cpp+1−1
CMakeLists.txt+14−2
@@ -57,12 +57,24 @@ 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=16)
60+pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=18)
6161pkg_check_modules(GEONAMES REQUIRED geonames>=0.2)
6262pkg_check_modules(GIO REQUIRED gio-2.0>=2.32)
6363pkg_check_modules(GLIB REQUIRED glib-2.0>=2.32)
6464pkg_check_modules(QMENUMODEL REQUIRED qmenumodel)
6565
66+pkg_check_modules(UBUNTUGESTURES REQUIRED UbuntuGestures)
67+
68+### Check UbuntuGestures private headers. No pkg-config (.pc) file is provided for them
69+find_path(UBUNTUGESTUREPRIV
70+ NAMES UbuntuGestures/private/damper_p.h UbuntuGestures/private/ucswipearea_p.h UbuntuGestures/private/ucswipearea_p_p.h
71+ PATHS ${UBUNTUGESTURES_INCLUDEDIR}/UbuntuGestures/${UBUNTUGESTURES_VERSION}
72+ NO_DEFAULT_PATH)
73+if (${UBUNTUGESTUREPRIV} STREQUAL UBUNTUGESTUREPRIV-NOTFOUND)
74+ message(FATAL_ERROR "UbuntuGestures private headers not found.")
75+endif()
76+# end of UbuntuGesture private headers check
77+
6678# Standard install paths
6779include(GNUInstallDirs)
6880
@@ -116,6 +128,7 @@ set(SHELL_APP unity8)
116128set(DASH_APP unity8-dash)
117129set(SCOPE_TOOL unity-scope-tool)
118130set(INDICATORS_CLIENT_APP indicators-client)
131+set(GREETER_APP unity8-greeter)
119132set(MOCK_INDICATOR_SERVICE_APP unity-mock-indicator-service)
120133
121134include_directories(
@@ -144,7 +157,6 @@ endif()
144157
145158# add subdirectories to build
146159add_subdirectory(include)
147−add_subdirectory(libs)
148160add_subdirectory(src)
149161add_subdirectory(tools)
150162add_subdirectory(qml)
build.sh+3−3
@@ -46,12 +46,12 @@ install_dependencies() {
4646 qmenumodel-qml \
4747 qml-module-qtquick-layouts \
4848 qml-module-qtquick-xmllistmodel \
49+ qml-module-ubuntu-components \
50+ qml-module-ubuntu-thumbnailer0.1 \
51+ qml-module-ubuntu-web \
4952 qtdeclarative5-gsettings1.0 \
50− qtdeclarative5-ubuntu-ui-toolkit-plugin \
5153 qtdeclarative5-ubuntu-settings-components \
5254 qtdeclarative5-ubuntu-telephony0.1 \
53− qtdeclarative5-ubuntu-thumbnailer0.1 \
54− qtdeclarative5-ubuntu-web-plugin \
5555 qtdeclarative5-unity-notifications-plugin \
5656 qml-module-ubuntu-connectivity \
5757 ubuntu-mobile-icons \
data/51-unity8-greeter.confnew file+2
@@ -0,0 +1,2 @@
1+[Seat:*]
2+greeter-session=unity8-greeter
data/CMakeLists.txt+11
@@ -2,6 +2,7 @@
22configure_file(${SHELL_APP}.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/${SHELL_APP}.desktop @ONLY)
33configure_file(${DASH_APP}.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/${DASH_APP}.desktop @ONLY)
44configure_file(${INDICATORS_CLIENT_APP}.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/${INDICATORS_CLIENT_APP}.desktop @ONLY)
5+configure_file(${GREETER_APP}.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/${GREETER_APP}.desktop @ONLY)
56
67# install desktop files
78install(FILES
@@ -11,6 +12,16 @@ install(FILES
1112 DESTINATION ${CMAKE_INSTALL_DATADIR}/applications
1213 )
1314
15+install(FILES
16+ ${CMAKE_CURRENT_BINARY_DIR}/${GREETER_APP}.desktop
17+ DESTINATION ${CMAKE_INSTALL_DATADIR}/lightdm/greeters
18+ )
19+
20+install(FILES
21+ 51-unity8-greeter.conf
22+ DESTINATION ${CMAKE_INSTALL_DATADIR}/lightdm/lightdm.conf.d
23+ )
24+
1425# install dash icon
1526install(FILES
1627 ${CMAKE_CURRENT_SOURCE_DIR}/${DASH_APP}.png
data/unity8-dash.png

Binary file not shown.

data/unity8-greeter-init.confnew file+12
@@ -0,0 +1,12 @@
1+description "Unity 8 Greeter initialization"
2+author "Michael Terry <mterry@ubuntu.com>"
3+
4+start on unity8-greeter-started
5+task
6+emits indicator-services-start
7+
8+script
9+ start --no-wait ofono-setup || true
10+ initctl emit --no-wait indicator-services-start || true
11+ start --no-wait maliit-server || true
12+end script
data/unity8-greeter-wrappernew file+98
@@ -0,0 +1,98 @@
1+#!/bin/sh
2+# -*- Mode: sh; indent-tabs-mode: nil; tab-width: 4 -*-
3+#
4+# Copyright (C) 2011,2013 Canonical Ltd
5+# Author: Michael Terry <michael.terry@canonical.com>
6+#
7+# This program is free software: you can redistribute it and/or modify it under
8+# the terms of the GNU General Public License as published by the Free Software
9+# Foundation, version 3 of the License.
10+#
11+# See http://www.gnu.org/copyleft/gpl.html the full text of the license.
12+
13+# This wrapper merely ensures that init and friends live only as long as this
14+# script does. Otherwise, it's very easy for some processes to not notice that
15+# the session died. We could try to do this in-process, but we want to do this
16+# cleanup even if the greeter aborts.
17+
18+trap cleanup TERM EXIT
19+
20+cleanup()
21+{
22+ trap - TERM EXIT
23+ # Kill upstart and indicators
24+ if [ -n "$INIT_PID" ]; then
25+ kill "$INIT_PID"
26+ fi
27+ if [ -n "$CMD_PID" ]; then
28+ kill "$CMD_PID"
29+ fi
30+ exit 0
31+}
32+
33+set_greeter_var()
34+{
35+ export "$1=$2"
36+ gdbus call --session --dest org.freedesktop.DBus --object-path /org/freedesktop/DBus --method org.freedesktop.DBus.UpdateActivationEnvironment "{'$1': '$2'}"
37+ if [ -n "$INIT_PID" ]; then
38+ initctl set-env --global "$1=$2"
39+ fi
40+}
41+
42+SUB_SOCKET=$XDG_RUNTIME_DIR/mir_socket
43+rm -f $SUB_SOCKET # clear socket in case we were hard shut down
44+
45+# If touch session script (which sets up grid units and mir variables) is available, use it
46+TOUCH_WRAPPER=
47+if [ -x /usr/bin/ubuntu-touch-session ]; then
48+ TOUCH_WRAPPER=/usr/bin/ubuntu-touch-session
49+fi
50+
51+# Pretend that we're in an ubuntu-touch session, so that indicator-network
52+# will start.
53+export DESKTOP_SESSION=ubuntu-touch
54+
55+# We disable ofono using pulse. It causes problems with racing with the user's
56+# pulse. We need to come up with a better long-term fix for this, because we
57+# eventually need the greeter to play ringtones for users that aren't logged in.
58+set_greeter_var PA_DISABLED 1
59+
60+# Normal unity8 sessions are entirely driven by Upstart. But greeters
61+# are special. They need access to the file descriptors that lightdm
62+# creates for them and don't want to start all the services that a normal
63+# session would. So it's inconvenient to live within an upstart session.
64+# But... we still want to use Upstart for some services. So launch here.
65+MIR_SOCKET=$SUB_SOCKET $TOUCH_WRAPPER /sbin/upstart --user --no-startup-event &
66+INIT_PID=$!
67+while [ ! -e "$XDG_RUNTIME_DIR/upstart/sessions/$INIT_PID.session" ]; do sleep 0.1; done
68+export UPSTART_SESSION=$(/sbin/initctl list-sessions | grep "^$INIT_PID " | cut -d' ' -f2)
69+
70+# Start any pre-greeter tasks if needed (like wizard)
71+/sbin/initctl emit unity8-greeter-starting
72+
73+# Define language here for phone if available. When phone user switches their
74+# language, they expect that to affect the greeter too. But the user doesn't
75+# have permission to switch system language, only their own. So we notice if
76+# the phablet user exists and use their language if so. TODO: talk to design
77+# about whether we should switch language on fly as users are selected (this
78+# is very hard to do technically).
79+#
80+# Do this after unity8-greeter-starting, in case a customization upstart job
81+# changes language.
82+if [ "$(id -u phablet 2>/dev/null)" = "32011" ]; then
83+ USER_LANG=$(gdbus call --system --dest org.freedesktop.Accounts --object-path /org/freedesktop/Accounts/User32011 --method org.freedesktop.DBus.Properties.Get org.freedesktop.Accounts.User Language | cut -d\' -f2)
84+ if [ -n "$USER_LANG" ]; then
85+ set_greeter_var LANGUAGE "$USER_LANG"
86+ fi
87+ USER_LOCALE=$(gdbus call --system --dest org.freedesktop.Accounts --object-path /org/freedesktop/Accounts/User32011 --method org.freedesktop.DBus.Properties.Get org.freedesktop.Accounts.User FormatsLocale | cut -d\' -f2)
88+ if [ -n "$USER_LOCALE" ]; then
89+ set_greeter_var LANG "$USER_LOCALE"
90+ set_greeter_var LC_ALL "$USER_LOCALE"
91+ fi
92+fi
93+
94+# And finally actually start the greeter
95+exec env QT_QPA_PLATFORM=ubuntumirclient MIR_SERVER_FILE=$SUB_SOCKET $TOUCH_WRAPPER $@ &
96+CMD_PID=$!
97+wait $CMD_PID
98+CMD_PID=
data/unity8-greeter.desktop.innew file+7
@@ -0,0 +1,7 @@
1+[Desktop Entry]
2+Type=Application
3+Name=Unity 8 Greeter
4+Comment=The converged Unity shell's Greeter
5+Exec=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@/unity8-greeter-wrapper @CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@/unity8 --mode=greeter
6+X-LightDM-Session-Type=mir
7+X-Ubuntu-Touch=true
data/unity8-greeter.pklanew file+44
@@ -0,0 +1,44 @@
1+# DO NOT EDIT THIS FILE, it will be overwritten on update
2+# Place your local configurations under /etc/polkit-1/localauthority/
3+
4+[Disable Controlling of Network Devices]
5+Identity=unix-user:lightdm
6+Action=org.freedesktop.NetworkManager.enable-disable-network;org.freedesktop.NetworkManager.enable-disable-wifi;org.freedesktop.NetworkManager.enable-disable-wwan;org.freedesktop.NetworkManager.enable-disable-wimax;
7+ResultActive=no
8+ResultInactive=no
9+ResultsAny=no
10+
11+[Disable Sleep and Wake]
12+Identity=unix-user:lightdm
13+Action=org.freedesktop.NetworkManager.sleep-wake
14+ResultActive=no
15+ResultInactive=no
16+ResultsAny=no
17+
18+[Disable WiFi Sharing]
19+Identity=unix-user:lightdm
20+Action=org.freedesktop.NetworkManager.wifi.share.protected;org.freedesktop.NetworkManager.wifi.share.open
21+ResultActive=no
22+ResultInactive=no
23+ResultsAny=no
24+
25+[Disable Settings Modifications]
26+Identity=unix-user:lightdm
27+Action=org.freedesktop.NetworkManager.settings.modify.own;org.freedesktop.NetworkManager.settings.modify.system;org.freedesktop.NetworkManager.settings.modify.hostname
28+ResultActive=no
29+ResultInactive=no
30+ResultsAny=no
31+
32+[Disable User Connections]
33+Identity=unix-user:lightdm
34+Action=org.freedesktop.NetworkManager.use-user-connections
35+ResultActive=no
36+ResultInactive=no
37+ResultsAny=no
38+
39+[Enable Controlling of Network Connections]
40+Identity=unix-user:lightdm
41+Action=org.freedesktop.NetworkManager.network-control
42+ResultActive=yes
43+ResultInactive=no
44+ResultsAny=no
data/unity8.conf+25−2
@@ -3,7 +3,7 @@ author "Ricardo Mendoza <ricmm@ubuntu.com>"
33
44emits indicator-services-start
55
6−start on ((xsession SESSION=ubuntu-touch) or (xsession SESSION=unity8-mir)) and started dbus
6+start on ((xsession SESSION=ubuntu-touch) or (xsession SESSION=unity8-mir) or (xsession SESSION=unity8)) and started dbus
77stop on desktop-end
88
99kill timeout 120
@@ -50,11 +50,34 @@ pre-start script
5050 # the lag seen in the indicator panel pull-down (LP: #1488327) and also
5151 # reduces lag seen in apps:
5252 initctl set-env --global QML_NO_TOUCH_COMPRESSION=1
53+
54+ if [ "$XDG_SESSION_DESKTOP" = "ubuntu-touch" ]; then
55+ # On Ubuntu Touch, we currently use a trick where we auto-login the
56+ # user without a LightDM greeter at all. In this case, we want to
57+ # start with the lockscreen visible. Once we switch to using a
58+ # proper greeter for the first login, we can remove this code path.
59+ initctl set-env MODE=full-greeter
60+ else
61+ initctl set-env MODE=full-shell
62+ fi
5363end script
5464
55−exec ${BINARY:-unity8} $ARGS
65+exec ${BINARY:-unity8} --mode=$MODE $ARGS
5666
5767post-start script
68+ # If no MIR_SOCKET was defined on launch, we try to set one here
69+ if [ -z "$(initctl get-env --global UNITY_MIR_SOCKET)" ]; then
70+ if [ -S "$XDG_RUNTIME_DIR/mir_socket" ]; then
71+ mir_socket=$XDG_RUNTIME_DIR/mir_socket
72+ elif [ -S "/tmp/mir_socket" ]; then
73+ mir_socket=/tmp/mir_socket
74+ fi
75+
76+ if [ -n "$mir_socket" ]; then
77+ initctl set-env --global MIR_SOCKET="$mir_socket"
78+ fi
79+ fi
80+
5881 initctl emit --no-wait indicator-services-start
5982end script
6083
debian/changelog+273
@@ -1,3 +1,276 @@
1+unity8 (8.12+16.10.20160711-0ubuntu1) yakkety; urgency=medium
2+
3+ [ Josh Arenson ]
4+ * Add a SessionsModel to lightdm to support the greeter's session
5+ chooser
6+ * Add unity8-greeter package which contains a basic, but usable
7+ LightDM greeter. (LP: #1324602)
8+
9+ [ Michael Terry ]
10+ * Make sure indicators and launcher hide when power button is pressed
11+ on greeter. (LP: #1595569)
12+ * Fix tablet greeter focus to be always-on, no longer hiding the OSK
13+ or forcing a mouse click to type a password. (LP: #1435923)
14+
15+ -- Michael Terry <michael.terry@canonical.com> Mon, 11 Jul 2016 17:24:20 +0000
16+
17+unity8 (8.12+16.10.20160707-0ubuntu1) yakkety; urgency=medium
18+
19+ [ Michael Zanetti ]
20+ * emit the correct role changed signal on count visible changed (LP:
21+ #1599925)
22+
23+ -- Michał Sawicz <michal.sawicz@canonical.com> Thu, 07 Jul 2016 16:49:32 +0000
24+
25+unity8 (8.12+16.10.20160705-0ubuntu1) yakkety; urgency=medium
26+
27+ [ Michael Zanetti ]
28+ * don't displace windows if the OSK is on another screen (LP:
29+ #1598917)
30+
31+ -- Michał Sawicz <michal.sawicz@canonical.com> Tue, 05 Jul 2016 10:00:57 +0000
32+
33+unity8 (8.12+16.10.20160627.5-0ubuntu1) yakkety; urgency=medium
34+
35+ [ Albert Astals Cid ]
36+ * Stop watching the old header item height once it's not our header
37+ anymore
38+ * LVWPH: cull the header item when not on view to save some painting
39+ * Adapt test to new mock behaviour
40+ * Don't let the mouse go outside the parentItem (LP: #1525350)
41+ * Use non deprecated package names
42+ * Mark system includes as such
43+ * Fix initialization order warning
44+ * Do not rely on deleteLater not crashing on null pointers
45+ * Add more headers of classes we use for automoc to be run
46+ * CardTool: Fix the fallback value to be a size and not an integer
47+ * CardTool: Include Ubuntu Components since we're using units.gu
48+ * Rework tst_PreviewRatingDisplayCreationRanges
49+
50+ [ Daniel d'Andrada ]
51+ * Cursor: Let AnimatedSprite run only on animated cursors and while
52+ the display is on (LP: #1588873, #1594358)
53+ * Fix missing screenshot when orientation changes while shell rotation
54+ ongoing (LP: #1587796)
55+
56+ [ Josh Arenson ]
57+ * Make PreviewRatingSingleDisplay visible again after editing a
58+ review. (LP: #1587097)
59+ * Correct errors in all png images to prevent libpng warnings.
60+
61+ [ Lukáš Tinkl ]
62+ * Fix some smaller issues with OOBE wizard password pages (LP:
63+ #1590467)
64+ * Prevent mouse wheel events from going through shell elements (LP:
65+ #1536268)
66+ * Do not let mouse and wheel events pass thru the titlebar (LP:
67+ #1588424)
68+ * Hide the maximize window button based on size restrictions (LP:
69+ #1541982)
70+
71+ [ Marco Trevisan (Treviño) ]
72+ * Unity8.conf: ensure MIR_SOCKET is set for future customers (such as
73+ the dash)
74+ * ClientIndicator: be more informative about loading failures for
75+ dynamically created objects
76+
77+ [ Michael Terry ]
78+ * Stop unity8 from getting in a "switch-to-greeter" loop when locking
79+ on a desktop. (LP: #1593718)
80+
81+ [ Michael Zanetti ]
82+ * set minimum window sizes on dash
83+ * displace application windows when the OSK would cover them
84+
85+ [ Nick Dedekind ]
86+ * Force dash to always stay in the main stage. (lp:#1592404) (LP:
87+ #1592404)
88+ * Save the last surface stage on stage drop. (LP: #1579003)
89+ * Default portrait only apps to the side stage. (LP: #1573153)
90+
91+ [ Albert Astals Cid, Andrea Cimitan, Michał Sawicz, Nick Dedekind ]
92+ * Added live video playback in dash previews
93+
94+ -- Michael Zanetti <michael.zanetti@canonical.com> Mon, 27 Jun 2016 18:48:59 +0000
95+
96+unity8 (8.12+16.10.20160620.3-0ubuntu1) yakkety; urgency=medium
97+
98+ [ Michael Terry, Michał Sawicz ]
99+ * Support unlocking via fingerprint, if one is registered.
100+
101+ -- Michael Terry <michael.terry@canonical.com> Mon, 20 Jun 2016 20:25:25 +0000
102+
103+unity8 (8.12+16.10.20160617-0ubuntu1) yakkety; urgency=medium
104+
105+ [ Michael Terry ]
106+ * Do not create Label/Icon if we don't need it
107+ * Fix Z-ordering of prompt surfaces (LP: #1586219)
108+ * Drop bottom edge tutorials completely and small fixes for other
109+ edges. (LP: #1565103)
110+ * Redo visuals for greeter prompt box. (LP: #1435923)
111+ * Make tutorial qmltests more robust. (LP: #1590810)
112+ * Stop showing an extra lockscreen in desktop unity8 sessions. (LP:
113+ #1582987)
114+
115+ [ Albert Astals Cid ]
116+ * Improve dash plugin mock
117+ * Stabilize PreviewExpandableTest::test_all_widgets_height
118+ * Workaround QTBUG-53460
119+ * Split artShape code for cardTool card and regular card
120+ * Simplify the code since fixedArtSize code is mandatory for regular
121+ cards
122+ * Desktop stage: Support rotatesWindowContents (LP: #1547481)
123+ * Turn if if else into if elseif else
124+ * Fix leaks in QInputDeviceManagerPrivate::addDevice
125+ * Do not call |= on uninitialized sigterm.sa_flags
126+ * initialize udevMonitor
127+ * Make notifier and notifierFd function local variables
128+ * Fix crash if a component that is not an Item is given to
129+ sectionDelegate
130+ * Tests: Do not use dynamic_cast if we're not going to test it anyway
131+ * Minor coverity fixes
132+ * Fix warning about anchors.fill in ProportionalShape (LP: #1590963)
133+ * Make wait in cleanup() wait for snapTo animation to have finished
134+
135+ [ Alexandros Frantzis ]
136+ * Improve the way notifications interact with power management (LP:
137+ #1570922)
138+
139+ [ Andrea Cimitan ]
140+ * Correctly refresh cardcreator cache on artshapestyle changes (LP:
141+ #1588335)
142+ * Same tweaks we have for click scope now for libertine
143+ * add a timer to pull to refresh to work on small windows (LP:
144+ #1589060)
145+
146+ [ Daniel d'Andrada ]
147+ * Clean up debug leftovers
148+ * Ensure mouse and window movement are pixel-aligned (LP: #1510382)
149+ * Fix SpreadDelegate rotation animations
150+ * No point in version-controlling files that are automatically
151+ generated
152+ * Center cursor on screen when it's first shown
153+ * Custom cursor name just have to start with "custom"
154+ * Work around AnimatedSprite infinite loop bug (LP: #1588929)
155+
156+ [ Josh Arenson ]
157+ * Disable showDash when it is already shown. (LP: #1506708)
158+ * Add a timestamp to the dash log (LP: #1580074)
159+ * Add timestamp to unity8 log (LP: #1498169)
160+
161+ [ Lukáš Tinkl ]
162+ * Implement keyboard shortcuts info panel
163+ * Implement window controls overlay activatable with 3 fingers tap
164+ (LP: #1489020)
165+ * Select correct Chinese input method for OSK in the wizard (LP:
166+ #1588633)
167+
168+ [ Michael Zanetti ]
169+ * Add support for the launcher surface pips displaying the correct
170+ number of surfaces
171+ * Add support for the persistent alert state. (LP: #1575147, #1584348,
172+ #1586621)
173+ * send a Alt-release event on alt+tab instead of delaying it
174+ completely and invoking it later (LP: #1565236)
175+
176+ [ Stephen M. Webb ]
177+ * added a new upstart $SESSION for unity8-desktop-session (LP:
178+ #1376715)
179+
180+ -- Michael Terry <michael.terry@canonical.com> Fri, 17 Jun 2016 01:22:57 +0000
181+
182+unity8 (8.12+16.10.20160601.1-0ubuntu1) yakkety; urgency=medium
183+
184+ [ Pawel Stolowski ]
185+ * Added apparmor profile for unity8-dash.
186+
187+ -- Michał Sawicz <michal.sawicz@canonical.com> Wed, 01 Jun 2016 20:59:03 +0000
188+
189+unity8 (8.12+16.10.20160527-0ubuntu1) yakkety; urgency=medium
190+
191+ [ Albert Astals Cid ]
192+ * Activate on click for SimpleMessages (LP: #1421696)
193+ * Add override
194+ * Change the art back to the cardData value if it changes from broken
195+ to valid image (LP: #1533577)
196+ * Concierge mode generated code optimization
197+ * Don't use context properties but properties of the delegates
198+ * Listen to contentItem::widthChanged instead of
199+ Flickable::contentWidthChanged (LP: #1565763)
200+ * Make some AP code faster
201+ * Make tests a bit more stable
202+ * Make unity8 and unity8-dash handle termination signals
203+ * Remove workaround not needed anymore (LP: #1475643)
204+ * Resolve cardArtStyle on compile time
205+ * Set the theme earlier (LP: #1574048)
206+
207+ [ Albert Astals Cid, Daniel d'Andrada ]
208+ * Remove DirectionalDragArea and libs/UbuntuGestures and port to SDK
209+ equivalents
210+
211+ [ Andrea Cimitan ]
212+ * Hide the preview review input field when a rating is required (LP:
213+ #1541971)
214+
215+ [ CI Train Bot ]
216+ * Resync trunk.
217+
218+ [ Daniel d'Andrada ]
219+ * Fix DragHandle so it works in all directions
220+ * Support animated cursors
221+ * WindowInputMonitor - also map Qt::Key_HomePage to our home key
222+ * plugins/Cursor: properly register to the screen's QPlatformCursor
223+ when screen changes (LP: #1579742)
224+
225+ [ Josh Arenson ]
226+ * Close the PageHeaderExtraPanel when a filter option is selected (LP:
227+ #1569498)
228+ * Wrap primaryFilter in a flickable to make it behave nicely. (LP:
229+ #1569492)
230+
231+ [ Lukáš Tinkl ]
232+ * First snap decision should always be expanded, unless user decides
233+ otherwise (LP: #1580090, #1575045)
234+ * Fullscreen notification bug fixes (LP: #1583944, #1581498, #1422711)
235+ * Implement maximizing windows horizontally/vertically
236+ * Lock the session when putting the laptop into sleep (LP: #1581063)
237+
238+ [ Lukáš Tinkl, Michael Terry ]
239+ * With a maximized window, "dragging" the panel down should restore it
240+
241+ [ Michael Terry ]
242+ * Change some dash button colors from orange to green. (LP: #1581047)
243+ * Use PageHeader instead Ambiance's PageHeadStyle
244+ * Use new setTimeZone method to set user-friendly timezone name in the
245+ wizard. (LP: #1566295)
246+
247+ [ Michael Zanetti ]
248+ * Remove the background dimming when the launcher is revealed by a
249+ drag (LP: #1575137)
250+ * reenable or drop disabled tests
251+
252+ -- Michael Terry <michael.terry@canonical.com> Fri, 27 May 2016 13:54:44 +0000
253+
254+unity8 (8.12+16.10.20160520.1-0ubuntu1) yakkety; urgency=medium
255+
256+ [ Lukáš Tinkl ]
257+ * Don't dim screen when the indicators are open (LP: #1564342)
258+ * Fix upcoming alarms ETA labels (LP: #1576741)
259+ * Stabilize flaky wizard tests (LP: #1582994)
260+
261+ [ Michael Zanetti ]
262+ * fix the SIM PIN darkening after it got removed accidentally (LP:
263+ #1577147)
264+
265+ [ Michał Sawicz, Nick Dedekind ]
266+ * Fixed saving current stage and loss of surface focus when switching
267+ stages
268+
269+ [ Nick Dedekind ]
270+ * Fixed incorrect osk surface item resizing the surface.
271+
272+ -- Michał Sawicz <michal.sawicz@canonical.com> Fri, 20 May 2016 08:44:19 +0000
273+
1274unity8 (8.12+16.04.20160518.1-0ubuntu1) xenial; urgency=medium
2275
3276 [ CI Train Bot ]
debian/control+26−9
@@ -5,6 +5,7 @@ Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
55Build-Depends: cmake,
66 dbus-test-runner,
77 debhelper (>= 9),
8+ dh-apparmor,
89 doxyqml,
910# To allow cross-compiling to work, we also must append :native
1011# to g++ so we don't try to run arm g++
@@ -22,6 +23,7 @@ Build-Depends: cmake,
2223 libglib2.0-dev,
2324 libgsettings-qt-dev,
2425 libhardware-dev,
26+ liblightdm-qt5-3-dev,
2527 libpam0g-dev,
2628 libpay2-dev,
2729 libpulse-dev,
@@ -29,8 +31,10 @@ Build-Depends: cmake,
2931 libqt5svg5-dev,
3032 libqt5xmlpatterns5-dev,
3133 libsystemsettings-dev,
34+ libubuntugestures5-dev,
35+ libubuntugestures5-private-dev,
3236 libudev-dev,
33− libunity-api-dev (>= 7.112),
37+ libunity-api-dev (>= 7.115),
3438 libusermetricsoutput1-dev,
3539# Need those X11 libs touch emulation from mouse events in manual QML tests on a X11 desktop
3640 libx11-dev[!arm64 !armhf],
@@ -41,11 +45,13 @@ Build-Depends: cmake,
4145 python3-all:any,
4246 python3-setuptools,
4347 qml-module-qt-labs-folderlistmodel,
48+ qml-module-qtmultimedia (>= 5.4.1-1ubuntu19~overlay2),
4449 qml-module-qtquick-layouts,
4550 qml-module-qtquick-xmllistmodel,
4651 qml-module-qtquick2,
4752 qml-module-qtsysteminfo,
4853 qml-module-qttest,
54+ qml-module-ubuntu-components (>= 1.3.1845) | qml-module-ubuntu-components-gles (>= 1.3.1845),
4955 qt5-default,
5056 qtbase5-dev (>= 5.4),
5157 qtbase5-dev-tools,
@@ -53,10 +59,8 @@ Build-Depends: cmake,
5359 qtdeclarative5-dev (>= 5.4),
5460 qtdeclarative5-dev-tools,
5561 qtdeclarative5-private-dev (>= 5.4),
56− qtdeclarative5-qtmultimedia-plugin (>= 5.4.1-1ubuntu19~overlay2),
5762 qtdeclarative5-ubuntu-content1,
5863 qtdeclarative5-ubuntu-settings-components (>= 0.7),
59− qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 1.3.1845) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 1.3.1845),
6064 ttf-ubuntu-font-family,
6165Standards-Version: 3.9.4
6266Homepage: http://launchpad.net/unity
@@ -71,13 +75,24 @@ X-Ubuntu-Use-Langpack: yes
7175Package: indicators-client
7276Architecture: any
7377Depends: qmenumodel-qml (>= 0.2.9),
74− qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 1.3.1845) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 1.3.1845),
78+ qml-module-ubuntu-components (>= 1.3.1845) | qml-module-ubuntu-components-gles (>= 1.3.1845),
7579 unity8 (= ${binary:Version}),
7680 ${misc:Depends},
7781 ${shlibs:Depends},
7882Description: Indicators client test application
7983 This package contains the client application for indicators used by autopilot
8084
85+Package: unity8-greeter
86+Architecture: any
87+Depends: unity8 (= ${binary:Version}),
88+ unity-system-compositor,
89+ ${misc:Depends},
90+ ${shlibs:Depends}
91+Recommends: lightdm
92+Provides: lightdm-greeter
93+Description: The Unity8 Greeter
94+ The Unity 8 greeter is the primary login greeter for Ubuntu devices.
95+
8196Package: unity-scope-tool
8297Architecture: any
8398Depends: unity8-common (= ${source:Version}),
@@ -99,13 +114,15 @@ Depends: dmz-cursor-theme,
99114 libcap2-bin,
100115 libglib2.0-bin,
101116 qmenumodel-qml (>= 0.2.9),
117+ qml-module-biometryd,
102118 qml-module-qt-labs-folderlistmodel,
103119 qml-module-qtquick-xmllistmodel,
104120 qml-module-qtsysteminfo,
121+ qml-module-ubuntu-web,
105122 qtdeclarative5-qtmir-plugin (>= 0.4.8),
106123 qtdeclarative5-ubuntu-telephony0.1,
107124 qtdeclarative5-ubuntu-web-plugin,
108− ubuntu-system-settings,
125+ ubuntu-system-settings (>= 0.4),
109126 unity-launcher-impl-7,
110127 unity8-common (= ${source:Version}),
111128 unity8-private (= ${binary:Version}),
@@ -127,12 +144,12 @@ Description: Unity 8 shell
127144Package: unity8-common
128145Architecture: all
129146Depends: qml-module-qtquick-layouts,
147+ qml-module-ubuntu-components (>= 1.3.1845) | qml-module-ubuntu-components-gles (>= 1.3.1845),
148+ qml-module-ubuntu-thumbnailer0.1 | ubuntu-thumbnailer-impl,
130149 qtdeclarative5-ubuntu-settings-components (>= 0.7),
131− qtdeclarative5-ubuntu-thumbnailer0.1 | ubuntu-thumbnailer-impl,
132− qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 1.3.1845) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 1.3.1845),
133150 qtdeclarative5-unity-notifications-plugin (>= 0.1.2) | unity-notifications-impl,
134151 ubuntu-thumbnailer-impl-0,
135− unity-application-impl-16,
152+ unity-application-impl-17,
136153 unity-notifications-impl-3,
137154 unity-plugin-scopes | unity-scopes-impl,
138155 unity-scopes-impl-12,
@@ -188,7 +205,7 @@ Package: unity8-private
188205Architecture: any
189206Multi-Arch: same
190207Pre-Depends: ${misc:Pre-Depends},
191−Depends: accountsservice-ubuntu-schemas (>= 0.0.5),
208+Depends: accountsservice-ubuntu-schemas (>= 0.0.7),
192209 gsettings-ubuntu-schemas (>= 0.0.2+14.10.20140815),
193210 libhardware2,
194211 pay-service,
debian/rules+5−1
@@ -29,10 +29,14 @@ override_dh_install:
2929 cd $(CURDIR)
3030 dh_install -X'*.pyc' --fail-missing
3131
32+override_dh_installdeb:
33+ dh_apparmor --profile-name=usr.bin.unity8-dash -punity8-dash
34+ dh_installdeb
35+
3236# use private lib directories
3337override_dh_makeshlibs:
3438 dh_makeshlibs -Nunity8-private -Nunity8-fake-env
3539
36−# libMockLightDM-qml.so links against liblightdm-qt5-2.so which doesn't exist
40+# libMockLightDM-qml.so links against liblightdm-qt5-3.so which doesn't exist
3741override_dh_shlibdeps:
3842 dh_shlibdeps -XlibMockLightDM-qml.so
debian/unity8-greeter.installnew file+5
@@ -0,0 +1,5 @@
1+data/unity8-greeter-wrapper usr/bin/
2+data/unity8-greeter-init.conf usr/share/upstart/sessions/
3+data/unity8-greeter.pkla /var/lib/polkit-1/localauthority/10-vendor.d/
4+usr/share/lightdm/greeters/unity8-greeter.desktop
5+usr/share/lightdm/lightdm.conf.d/51-unity8-greeter.conf
debian/unity8-private.install+1−2
@@ -1,11 +1,10 @@
11usr/lib/*/libunity8-private.*
2−usr/lib/*/unity8/libUbuntuGestures*
32usr/lib/*/unity8/qml/AccountsService
43usr/lib/*/unity8/qml/Cursor
54usr/lib/*/unity8/qml/Dash
65usr/lib/*/unity8/qml/GlobalShortcut
76usr/lib/*/unity8/qml/Greeter
8−usr/lib/*/unity8/qml/IntegratedLightDM
7+usr/lib/*/unity8/qml/LightDM
98usr/lib/*/unity8/qml/Lights
109usr/lib/*/unity8/qml/Powerd
1110usr/lib/*/unity8/qml/ScreenshotDirectory
debian/unity8.install+1
@@ -1,3 +1,4 @@
1+debian/usr.bin.unity8-dash etc/apparmor.d
12var/lib/unity8/version
23data/unity8-dash.conf usr/share/upstart/sessions/
34data/unity8-filewatcher.conf usr/share/upstart/sessions/
debian/usr.bin.unity8-dashnew file+21
@@ -0,0 +1,21 @@
1+# vim:syntax=apparmor
2+
3+#include <tunables/global>
4+
5+# v2 compatible wildly permissive profile
6+profile unity8-dash /usr/bin/unity8-dash (attach_disconnected) {
7+ capability,
8+ network,
9+ / rwkl,
10+ /** rwlkm,
11+ /** pix,
12+
13+ mount,
14+ remount,
15+ umount,
16+ pivot_root,
17+ dbus,
18+ signal,
19+ ptrace,
20+ unix,
21+}
libs/CMakeLists.txtdeleted−1
@@ -1 +0,0 @@
1−add_subdirectory(UbuntuGestures)
libs/UbuntuGestures/CMakeLists.txtdeleted−41
@@ -1,41 +0,0 @@
1−# in order to include Qt's private headers
2−remove_definitions(-DQT_NO_KEYWORDS)
3−
4−set(UbuntuGestures_SOURCES
5− CandidateInactivityTimer.cpp
6− DebugHelpers.cpp
7− Timer.cpp
8− TimeSource.cpp
9− TouchOwnershipEvent.cpp
10− TouchRegistry.cpp
11− UnownedTouchEvent.cpp
12−)
13−
14−add_definitions(-DUBUNTUGESTURES_LIBRARY)
15−
16−add_library(UbuntuGestures SHARED ${UbuntuGestures_SOURCES})
17−
18−qt5_use_modules(UbuntuGestures Core Quick)
19−
20−# So that Foo.cpp can #include "Foo.moc"
21−include_directories(${CMAKE_CURRENT_BINARY_DIR})
22−
23−install(TARGETS UbuntuGestures
24− DESTINATION ${SHELL_PRIVATE_LIBDIR})
25−
26−
27−# There's no cmake var for v8 include path :-/ so create one
28−LIST(GET Qt5Core_INCLUDE_DIRS 0 QtCoreDir0)
29−if(${Qt5Core_VERSION_STRING} VERSION_LESS "5.1.0")
30− SET(Qt5V8_PRIVATE_INCLUDE_DIR ${QtCoreDir0}/../QtV8/${Qt5Core_VERSION_STRING}/QtV8)
31−else()
32− SET(Qt5V8_PRIVATE_INCLUDE_DIR ${QtCoreDir0}/QtV8/${Qt5Core_VERSION_STRING}/QtV8)
33−endif()
34−
35−# DANGER! DANGER! Using Qt's private API!
36−include_directories(
37− ${Qt5Qml_PRIVATE_INCLUDE_DIRS}
38− ${Qt5Quick_INCLUDE_DIRS}
39− ${Qt5Quick_PRIVATE_INCLUDE_DIRS}
40− ${Qt5V8_PRIVATE_INCLUDE_DIR}
41−)
libs/UbuntuGestures/CandidateInactivityTimer.cppdeleted−46
@@ -1,46 +0,0 @@
1−/*
2− * Copyright (C) 2014 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 "CandidateInactivityTimer.h"
18−
19−namespace UbuntuGestures {
20−
21−CandidateInactivityTimer::CandidateInactivityTimer(int touchId, QQuickItem *candidate,
22− AbstractTimer *timer, QObject *parent)
23− : QObject(parent)
24− , m_timer(timer)
25− , m_touchId(touchId)
26− , m_candidate(candidate)
27−{
28− connect(m_timer, &AbstractTimer::timeout,
29− this, &CandidateInactivityTimer::onTimeout);
30− m_timer->setInterval(durationMs);
31− m_timer->setSingleShot(true);
32− m_timer->start();
33−}
34−
35−CandidateInactivityTimer::~CandidateInactivityTimer()
36−{
37− delete m_timer;
38−}
39−
40−void CandidateInactivityTimer::onTimeout()
41−{
42− qWarning("[TouchRegistry] Candidate for touch %d defaulted!", m_touchId);
43− Q_EMIT candidateDefaulted(m_touchId, m_candidate);
44−}
45−
46−} // namespace UbuntuGestures
libs/UbuntuGestures/CandidateInactivityTimer.hdeleted−51
@@ -1,51 +0,0 @@
1−/*
2− * Copyright (C) 2014 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 UBUNTUGESTURES_CANDIDATE_INACTIVITY_TIMER_H
18−#define UBUNTUGESTURES_CANDIDATE_INACTIVITY_TIMER_H
19−
20−#include <QObject>
21−
22−class QQuickItem;
23−
24−#include "Timer.h"
25−
26−namespace UbuntuGestures {
27−
28−class UBUNTUGESTURES_EXPORT CandidateInactivityTimer : public QObject {
29− Q_OBJECT
30−public:
31− CandidateInactivityTimer(int touchId, QQuickItem *candidate,
32− AbstractTimer *timer,
33− QObject *parent = nullptr);
34−
35− virtual ~CandidateInactivityTimer();
36−
37− const int durationMs = 1000;
38−
39−Q_SIGNALS:
40− void candidateDefaulted(int touchId, QQuickItem *candidate);
41−private Q_SLOTS:
42− void onTimeout();
43−private:
44− AbstractTimer *m_timer;
45− int m_touchId;
46− QQuickItem *m_candidate;
47−};
48−
49−} // namespace UbuntuGestures
50−
51−#endif // UBUNTUGESTURES_CANDIDATE_INACTIVITY_TIMER_H
libs/UbuntuGestures/DebugHelpers.cppdeleted−95
@@ -1,95 +0,0 @@
1−/*
2− * Copyright (C) 2014 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 "DebugHelpers.h"
18−#include <QTouchEvent>
19−#include <QMouseEvent>
20−
21−QString touchPointStateToString(Qt::TouchPointState state)
22−{
23− switch (state) {
24− case Qt::TouchPointPressed:
25− return QStringLiteral("pressed");
26− case Qt::TouchPointMoved:
27− return QStringLiteral("moved");
28− case Qt::TouchPointStationary:
29− return QStringLiteral("stationary");
30− case Qt::TouchPointReleased:
31− return QStringLiteral("released");
32− default:
33− return QStringLiteral("INVALID_STATE");
34− }
35−}
36−
37−QString touchEventToString(const QTouchEvent *ev)
38−{
39− QString message;
40−
41− switch (ev->type()) {
42− case QEvent::TouchBegin:
43− message.append("TouchBegin ");
44− break;
45− case QEvent::TouchUpdate:
46− message.append("TouchUpdate ");
47− break;
48− case QEvent::TouchEnd:
49− message.append("TouchEnd ");
50− break;
51− case QEvent::TouchCancel:
52− message.append("TouchCancel ");
53− break;
54− default:
55− message.append("INVALID_TOUCH_EVENT_TYPE ");
56− }
57−
58− foreach(const QTouchEvent::TouchPoint& touchPoint, ev->touchPoints()) {
59− message.append(
60− QStringLiteral("(id:%1, state:%2, scenePos:(%3,%4)) ")
61− .arg(touchPoint.id())
62− .arg(touchPointStateToString(touchPoint.state()))
63− .arg(touchPoint.scenePos().x())
64− .arg(touchPoint.scenePos().y())
65− );
66− }
67−
68− return message;
69−}
70−
71−QString mouseEventToString(const QMouseEvent *ev)
72−{
73− QString message;
74−
75− switch (ev->type()) {
76− case QEvent::MouseButtonPress:
77− message.append("MouseButtonPress ");
78− break;
79− case QEvent::MouseButtonRelease:
80− message.append("MouseButtonRelease ");
81− break;
82− case QEvent::MouseButtonDblClick:
83− message.append("MouseButtonDblClick ");
84− break;
85− case QEvent::MouseMove:
86− message.append("MouseMove ");
87− break;
88− default:
89− message.append("INVALID_MOUSE_EVENT_TYPE ");
90− }
91−
92− message.append(QStringLiteral("pos(%1, %2)").arg(ev->x()).arg(ev->y()));
93−
94− return message;
95−}
libs/UbuntuGestures/DebugHelpers.hdeleted−31
@@ -1,31 +0,0 @@
1−/*
2− * Copyright (C) 2014 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 UBUNTUGESTURES_DEBUG_HELPER_H
18−#define UBUNTUGESTURES_DEBUG_HELPER_H
19−
20−#include <QString>
21−
22−#include "UbuntuGesturesGlobal.h"
23−
24−class QMouseEvent;
25−class QTouchEvent;
26−
27−UBUNTUGESTURES_EXPORT QString touchPointStateToString(Qt::TouchPointState state);
28−UBUNTUGESTURES_EXPORT QString touchEventToString(const QTouchEvent *ev);
29−UBUNTUGESTURES_EXPORT QString mouseEventToString(const QMouseEvent *ev);
30−
31−#endif // UBUNTUGESTURES_DEBUG_HELPER_H
libs/UbuntuGestures/Pool.hdeleted−124
@@ -1,124 +0,0 @@
1−/*
2− * Copyright (C) 2014 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 UBUNTUGESTURES_POOL_H
18−#define UBUNTUGESTURES_POOL_H
19−
20−#include <QVector>
21−
22−#include "UbuntuGesturesGlobal.h"
23−
24−/*
25− An object pool.
26− Avoids unnecessary creations/initializations and deletions/destructions of items. Useful
27− in a scenario where items are created and destroyed very frequently but the total number
28− of items at any given time remains small. They're stored in a unordered fashion.
29−
30− To be used in Pool, ItemType needs to have the following methods:
31−
32− - ItemType();
33−
34− A constructor that takes no parameters. An object contructed with it must return false if
35− isValid() is called.
36−
37− - bool isValid() const;
38−
39− Returns wheter the object holds a valid , "filled" state or is empty.
40− Used by Pool to check if the slot occupied by this object is actually available.
41−
42− - void reset();
43−
44− Resets the object to its initial, empty, state. After calling this method, isValid() must
45− return false.
46− */
47−template <class ItemType> class Pool
48−{
49−public:
50− Pool() : m_lastUsedIndex(-1) {
51− }
52−
53− class Iterator {
54− public:
55− Iterator() : index(-1), item(nullptr) {}
56− Iterator(int index, ItemType *item)
57− : index(index), item(item) {}
58−
59− ItemType *operator->() const { return item; }
60− ItemType &operator*() const { return *item; }
61− ItemType &value() const { return *item; }
62−
63− operator bool() const { return item != nullptr; }
64−
65− int index;
66− ItemType *item;
67− };
68−
69− ItemType &getEmptySlot() {
70− Q_ASSERT(m_lastUsedIndex < m_slots.size());
71−
72− // Look for an in-between vacancy first
73− for (int i = 0; i < m_lastUsedIndex; ++i) {
74− ItemType &item = m_slots[i];
75− if (!item.isValid()) {
76− return item;
77− }
78− }
79−
80− ++m_lastUsedIndex;
81− if (m_lastUsedIndex >= m_slots.size()) {
82− m_slots.resize(m_lastUsedIndex + 1);
83− }
84−
85− return m_slots[m_lastUsedIndex];
86− }
87−
88− void freeSlot(Iterator &iterator) {
89− m_slots[iterator.index].reset();
90− if (iterator.index == m_lastUsedIndex) {
91− do {
92− --m_lastUsedIndex;
93− } while (m_lastUsedIndex >= 0 && !m_slots.at(m_lastUsedIndex).isValid());
94− }
95− }
96−
97− // Iterates through all valid items (i.e. the occupied slots)
98− // calling the given function, with the option of ending the loop early.
99− //
100− // bool Func(Iterator& item)
101− //
102− // Returning true means it wants to continue the "for" loop, false
103− // terminates the loop.
104− template<typename Func> void forEach(Func func) {
105− Iterator it;
106− for (it.index = 0; it.index <= m_lastUsedIndex; ++it.index) {
107− it.item = &m_slots[it.index];
108− if (!it.item->isValid())
109− continue;
110−
111− if (!func(it))
112− break;
113− }
114− }
115−
116− bool isEmpty() const { return m_lastUsedIndex == -1; }
117−
118−
119−private:
120− QVector<ItemType> m_slots;
121− int m_lastUsedIndex;
122−};
123−
124−#endif // UBUNTUGESTURES_POOL_H
libs/UbuntuGestures/TimeSource.cppdeleted−49
@@ -1,49 +0,0 @@
1−/*
2− * Copyright (C) 2013 - Canonical Ltd.
3− *
4− * This program is free software: you can redistribute it and/or modify it
5− * under the terms of the GNU Lesser General Public License, as
6− * published by the Free Software Foundation; either version 2.1 or 3.0
7− * of the License.
8− *
9− * This program is distributed in the hope that it will be useful, but
10− * WITHOUT ANY WARRANTY; without even the implied warranties of
11− * MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
12− * PURPOSE. See the applicable version of the GNU Lesser General Public
13− * License for more details.
14− *
15− * You should have received a copy of both the GNU Lesser General Public
16− * License along with this program. If not, see <http://www.gnu.org/licenses/>
17− *
18− * Authored by: Daniel d'Andrada <daniel.dandrada@canonical.com>
19− */
20−
21−#include "TimeSource.h"
22−
23−#include <QElapsedTimer>
24−
25−namespace UbuntuGestures {
26−class RealTimeSourcePrivate {
27−public:
28− QElapsedTimer timer;
29−};
30−}
31−
32−using namespace UbuntuGestures;
33−
34−RealTimeSource::RealTimeSource()
35− : UbuntuGestures::TimeSource()
36− , d(new RealTimeSourcePrivate)
37−{
38− d->timer.start();
39−}
40−
41−RealTimeSource::~RealTimeSource()
42−{
43− delete d;
44−}
45−
46−qint64 RealTimeSource::msecsSinceReference()
47−{
48− return d->timer.elapsed();
49−}
libs/UbuntuGestures/TimeSource.hdeleted−64
@@ -1,64 +0,0 @@
1−/*
2− * Copyright (C) 2013,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 Lesser General Public License, as
6− * published by the Free Software Foundation; either version 2.1 or 3.0
7− * of the License.
8− *
9− * This program is distributed in the hope that it will be useful, but
10− * WITHOUT ANY WARRANTY; without even the implied warranties of
11− * MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
12− * PURPOSE. See the applicable version of the GNU Lesser General Public
13− * License for more details.
14− *
15− * You should have received a copy of both the GNU Lesser General Public
16− * License along with this program. If not, see <http://www.gnu.org/licenses/>
17− *
18− * Authored by: Daniel d'Andrada <daniel.dandrada@canonical.com>
19− */
20−
21−#ifndef UBUNTUGESTURES_TIMESOURCE_H
22−#define UBUNTUGESTURES_TIMESOURCE_H
23−
24−#include "UbuntuGesturesGlobal.h"
25−#include <QSharedPointer>
26−
27−namespace UbuntuGestures {
28−/*
29− Interface for a time source.
30− */
31−class UBUNTUGESTURES_EXPORT TimeSource {
32−public:
33− virtual ~TimeSource() {}
34− /* Returns the current time in milliseconds since some reference time in the past. */
35− virtual qint64 msecsSinceReference() = 0;
36−};
37−typedef QSharedPointer<TimeSource> SharedTimeSource;
38−
39−/*
40− Implementation of a time source
41− */
42−class RealTimeSourcePrivate;
43−class UBUNTUGESTURES_EXPORT RealTimeSource : public TimeSource {
44−public:
45− RealTimeSource();
46− virtual ~RealTimeSource();
47− qint64 msecsSinceReference() override;
48−private:
49− RealTimeSourcePrivate *d;
50−};
51−
52−/*
53− A fake time source, useful for tests
54− */
55−class FakeTimeSource : public TimeSource {
56−public:
57− FakeTimeSource() { m_msecsSinceReference = 0; }
58− qint64 msecsSinceReference() override { return m_msecsSinceReference; }
59− qint64 m_msecsSinceReference;
60−};
61−
62−} // namespace UbuntuGestures
63−
64−#endif // UBUNTUGESTURES_TIMESOURCE_H
libs/UbuntuGestures/Timer.cppdeleted−152
@@ -1,152 +0,0 @@
1−/*
2− * Copyright (C) 2014-2015 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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 "Timer.h"
18−
19−namespace UbuntuGestures {
20−
21−Timer::Timer(QObject *parent) : AbstractTimer(parent)
22−{
23− m_timer.setSingleShot(false);
24− connect(&m_timer, &QTimer::timeout, this, &AbstractTimer::timeout);
25−}
26−
27−int Timer::interval() const
28−{
29− return m_timer.interval();
30−}
31−
32−void Timer::setInterval(int msecs)
33−{
34− m_timer.setInterval(msecs);
35−}
36−
37−void Timer::start()
38−{
39− m_timer.start();
40− AbstractTimer::start();
41−}
42−
43−void Timer::stop()
44−{
45− m_timer.stop();
46− AbstractTimer::stop();
47−}
48−
49−bool Timer::isSingleShot() const
50−{
51− return m_timer.isSingleShot();
52−}
53−
54−void Timer::setSingleShot(bool value)
55−{
56− m_timer.setSingleShot(value);
57−}
58−
59−/////////////////////////////////// FakeTimer //////////////////////////////////
60−
61−FakeTimer::FakeTimer(const SharedTimeSource &timeSource, QObject *parent)
62− : UbuntuGestures::AbstractTimer(parent)
63− , m_interval(0)
64− , m_singleShot(false)
65− , m_timeSource(timeSource)
66−{
67−}
68−
69−void FakeTimer::update()
70−{
71− if (!isRunning()) {
72− return;
73− }
74−
75− if (m_nextTimeoutTime <= m_timeSource->msecsSinceReference()) {
76− if (isSingleShot()) {
77− stop();
78− } else {
79− m_nextTimeoutTime += interval();
80− }
81− Q_EMIT timeout();
82− }
83−}
84−
85−void FakeTimer::start()
86−{
87− AbstractTimer::start();
88− m_nextTimeoutTime = m_timeSource->msecsSinceReference() + (qint64)interval();
89−}
90−
91−int FakeTimer::interval() const
92−{
93− return m_interval;
94−}
95−
96−void FakeTimer::setInterval(int msecs)
97−{
98− m_interval = msecs;
99−}
100−
101−bool FakeTimer::isSingleShot() const
102−{
103− return m_singleShot;
104−}
105−
106−void FakeTimer::setSingleShot(bool value)
107−{
108− m_singleShot = value;
109−}
110−
111−/////////////////////////////////// FakeTimerFactory //////////////////////////////////
112−
113−FakeTimerFactory::FakeTimerFactory()
114−{
115− m_timeSource.reset(new FakeTimeSource);
116−}
117−
118−void FakeTimerFactory::updateTime(qint64 targetTime)
119−{
120− qint64 minTimeoutTime = targetTime;
121−
122− for (int i = 0; i < timers.count(); ++i) {
123− FakeTimer *timer = timers[i].data();
124− if (timer && timer->isRunning() && timer->nextTimeoutTime() < minTimeoutTime) {
125− minTimeoutTime = timer->nextTimeoutTime();
126− }
127− }
128−
129− m_timeSource->m_msecsSinceReference = minTimeoutTime;
130−
131− for (int i = 0; i < timers.count(); ++i) {
132− FakeTimer *timer = timers[i].data();
133− if (timer) {
134− timer->update();
135− }
136− }
137−
138− if (m_timeSource->msecsSinceReference() < targetTime) {
139− updateTime(targetTime);
140− }
141−}
142−
143−AbstractTimer *FakeTimerFactory::createTimer(QObject *parent)
144−{
145− FakeTimer *fakeTimer = new FakeTimer(m_timeSource, parent);
146−
147− timers.append(fakeTimer);
148−
149− return fakeTimer;
150−}
151−
152−} // namespace UbuntuGestures
libs/UbuntuGestures/Timer.hdeleted−122
@@ -1,122 +0,0 @@
1−/*
2− * Copyright (C) 2014 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 UBUNTUGESTURES_TIMER_H
18−#define UBUNTUGESTURES_TIMER_H
19−
20−#include "UbuntuGesturesGlobal.h"
21−#include "TimeSource.h"
22−
23−#include <QObject>
24−#include <QPointer>
25−#include <QTimer>
26−
27−namespace UbuntuGestures {
28−
29−/* Defines an interface for a Timer. Useful for tests. */
30−class UBUNTUGESTURES_EXPORT AbstractTimer : public QObject
31−{
32− Q_OBJECT
33−public:
34− AbstractTimer(QObject *parent) : QObject(parent), m_isRunning(false) {}
35− virtual int interval() const = 0;
36− virtual void setInterval(int msecs) = 0;
37− virtual void start() { m_isRunning = true; }
38− virtual void start(int msecs)
39− {
40− setInterval(msecs);
41− start();
42− }
43− virtual void stop() { m_isRunning = false; }
44− bool isRunning() const { return m_isRunning; }
45− virtual bool isSingleShot() const = 0;
46− virtual void setSingleShot(bool value) = 0;
47−Q_SIGNALS:
48− void timeout();
49−private:
50− bool m_isRunning;
51−};
52−
53−/* Essentially a QTimer wrapper */
54−class UBUNTUGESTURES_EXPORT Timer : public AbstractTimer
55−{
56− Q_OBJECT
57−public:
58− Timer(QObject *parent = nullptr);
59−
60− int interval() const override;
61− void setInterval(int msecs) override;
62− void start() override;
63− void stop() override;
64− bool isSingleShot() const override;
65− void setSingleShot(bool value) override;
66−private:
67− QTimer m_timer;
68−};
69−
70−/* For tests */
71−class UBUNTUGESTURES_EXPORT FakeTimer : public AbstractTimer
72−{
73− Q_OBJECT
74−public:
75− FakeTimer(const SharedTimeSource &timeSource, QObject *parent = nullptr);
76−
77− void update();
78− qint64 nextTimeoutTime() const { return m_nextTimeoutTime; }
79−
80− int interval() const override;
81− void setInterval(int msecs) override;
82− void start() override;
83− bool isSingleShot() const override;
84− void setSingleShot(bool value) override;
85−private:
86− int m_interval;
87− bool m_singleShot;
88− SharedTimeSource m_timeSource;
89− qint64 m_nextTimeoutTime;
90−};
91−
92−class UBUNTUGESTURES_EXPORT AbstractTimerFactory
93−{
94−public:
95− virtual ~AbstractTimerFactory() {}
96− virtual AbstractTimer *createTimer(QObject *parent = nullptr) = 0;
97−};
98−
99−class UBUNTUGESTURES_EXPORT TimerFactory : public AbstractTimerFactory
100−{
101−public:
102− AbstractTimer *createTimer(QObject *parent = nullptr) override { return new Timer(parent); }
103−};
104−
105−class UBUNTUGESTURES_EXPORT FakeTimerFactory : public AbstractTimerFactory
106−{
107−public:
108− FakeTimerFactory();
109− virtual ~FakeTimerFactory() {}
110−
111− void updateTime(qint64 msecsSinceReference);
112− QSharedPointer<TimeSource> timeSource() { return m_timeSource; }
113−
114− AbstractTimer *createTimer(QObject *parent = nullptr) override;
115− QList<QPointer<FakeTimer>> timers;
116−private:
117− QSharedPointer<FakeTimeSource> m_timeSource;
118−};
119−
120−} // namespace UbuntuGestures
121−
122−#endif // UBUNTUGESTURES_TIMER_H
libs/UbuntuGestures/TouchOwnershipEvent.hdeleted−50
@@ -1,50 +0,0 @@
1−/*
2− * Copyright (C) 2014 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 UBUNTU_TOUCHOWNERSHIPEVENT_H
18−#define UBUNTU_TOUCHOWNERSHIPEVENT_H
19−
20−#include <QEvent>
21−#include "UbuntuGesturesGlobal.h"
22−
23−/*
24− When an item get an ownership event for a touch it can grab/steal that touch
25− with a clean conscience.
26− */
27−class UBUNTUGESTURES_EXPORT TouchOwnershipEvent : public QEvent
28−{
29−public:
30− TouchOwnershipEvent(int touchId, bool gained);
31−
32− static Type touchOwnershipEventType();
33−
34− /*
35− Whether ownership was gained (true) or lost (false)
36− */
37− bool gained() const { return m_gained; }
38−
39− /*
40− Id of the touch whose ownership was granted.
41− */
42− int touchId() const { return m_touchId; }
43−
44−private:
45− static Type m_touchOwnershipType;
46− int m_touchId;
47− bool m_gained;
48−};
49−
50−#endif // UBUNTU_TOUCHOWNERSHIPEVENT_H
libs/UbuntuGestures/TouchRegistry.cppdeleted−553
@@ -1,553 +0,0 @@
1−/*
2− * Copyright (C) 2014-2015 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU 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 "TouchRegistry.h"
18−
19−#include <QCoreApplication>
20−#include <QDebug>
21−
22−#pragma GCC diagnostic push
23−#pragma GCC diagnostic ignored "-pedantic"
24−#include <private/qquickitem_p.h>
25−#pragma GCC diagnostic pop
26−
27−#include "CandidateInactivityTimer.h"
28−#include "Timer.h"
29−#include "TouchOwnershipEvent.h"
30−#include "UnownedTouchEvent.h"
31−
32−#define TOUCHREGISTRY_DEBUG 0
33−
34−#if TOUCHREGISTRY_DEBUG
35− #include "DebugHelpers.h"
36− #define UG_DEBUG qDebug() << "[TouchRegistry]"
37−#endif // TOUCHREGISTRY_DEBUG
38−
39−using namespace UbuntuGestures;
40−
41−TouchRegistry *TouchRegistry::m_instance = nullptr;
42−
43−TouchRegistry::TouchRegistry(QObject *parent)
44− : QObject(parent)
45− , m_inDispatchLoop(false)
46− , m_timerFactory(new TimerFactory)
47−{
48−}
49−
50−TouchRegistry::~TouchRegistry()
51−{
52− Q_ASSERT(m_instance != nullptr);
53− m_instance = nullptr;
54− delete m_timerFactory;
55−}
56−
57−TouchRegistry *TouchRegistry::instance()
58−{
59− if (m_instance == nullptr) {
60− m_instance = new TouchRegistry;
61− }
62− return m_instance;
63−}
64−
65−void TouchRegistry::setTimerFactory(AbstractTimerFactory *timerFactory)
66−{
67− delete m_timerFactory;
68− m_timerFactory = timerFactory;
69−}
70−
71−void TouchRegistry::update(const QTouchEvent *event)
72−{
73− #if TOUCHREGISTRY_DEBUG
74− UG_DEBUG << "got" << qPrintable(touchEventToString(event));
75− #endif
76−
77− const QList<QTouchEvent::TouchPoint> &touchPoints = event->touchPoints();
78− for (int i = 0; i < touchPoints.count(); ++i) {
79− const QTouchEvent::TouchPoint &touchPoint = touchPoints.at(i);
80− if (touchPoint.state() == Qt::TouchPointPressed) {
81− TouchInfo &touchInfo = m_touchInfoPool.getEmptySlot();
82− touchInfo.init(touchPoint.id());
83− } else if (touchPoint.state() == Qt::TouchPointReleased) {
84− Pool<TouchInfo>::Iterator touchInfo = findTouchInfo(touchPoint.id());
85−
86− touchInfo->physicallyEnded = true;
87− }
88− }
89−
90− deliverTouchUpdatesToUndecidedCandidatesAndWatchers(event);
91−
92− freeEndedTouchInfos();
93−}
94−
95−void TouchRegistry::deliverTouchUpdatesToUndecidedCandidatesAndWatchers(const QTouchEvent *event)
96−{
97− // TODO: Look into how we could optimize this whole thing.
98− // Although it's not really a problem as we should have at most two candidates
99− // for each point and there should not be many active points at any given moment.
100− // But having three nested for-loops does scare.
101−
102− const QList<QTouchEvent::TouchPoint> &updatedTouchPoints = event->touchPoints();
103−
104− // Maps an item to the touches in this event he should be informed about.
105− // E.g.: a QTouchEvent might have three touches but a given item might be interested in only
106− // one of them. So he will get a UnownedTouchEvent from this QTouchEvent containing only that
107− // touch point.
108− QHash<QQuickItem*, QList<int>> touchIdsForItems;
109−
110− // Build touchIdsForItems
111− m_touchInfoPool.forEach([&](Pool<TouchInfo>::Iterator &touchInfo) {
112− if (touchInfo->isOwned() && touchInfo->watchers.isEmpty())
113− return true;
114−
115− for (int j = 0; j < updatedTouchPoints.count(); ++j) {
116− if (updatedTouchPoints[j].id() == touchInfo->id) {
117− if (!touchInfo->isOwned()) {
118− for (int i = 0; i < touchInfo->candidates.count(); ++i) {
119− CandidateInfo &candidate = touchInfo->candidates[i];
120− Q_ASSERT(!candidate.item.isNull());
121− if (candidate.state != CandidateInfo::InterimOwner) {
122− touchIdsForItems[candidate.item.data()].append(touchInfo->id);
123− }
124− }
125− }
126−
127− const QList<QPointer<QQuickItem>> &watchers = touchInfo->watchers;
128− for (int i = 0; i < watchers.count(); ++i) {
129− if (!watchers[i].isNull()) {
130− touchIdsForItems[watchers[i].data()].append(touchInfo->id);
131− }
132− }
133−
134− return true;
135− }
136− }
137−
138− return true;
139− });
140−
141− // TODO: Consider what happens if an item calls any of TouchRegistry's public methods
142− // from the event handler callback.
143− m_inDispatchLoop = true;
144− auto it = touchIdsForItems.constBegin();
145− while (it != touchIdsForItems.constEnd()) {
146− QQuickItem *item = it.key();
147− const QList<int> &touchIds = it.value();
148− dispatchPointsToItem(event, touchIds, item);
149− ++it;
150− };
151− m_inDispatchLoop = false;
152−}
153−
154−void TouchRegistry::freeEndedTouchInfos()
155−{
156− m_touchInfoPool.forEach([&](Pool<TouchInfo>::Iterator &touchInfo) {
157− if (touchInfo->ended()) {
158− m_touchInfoPool.freeSlot(touchInfo);
159− }
160− return true;
161− });
162−}
163−
164−/*
165− Extracts the touches with the given touchIds from event and send them in a
166− UnownedTouchEvent to the given item
167− */
168−void TouchRegistry::dispatchPointsToItem(const QTouchEvent *event, const QList<int> &touchIds,
169− QQuickItem *item)
170−{
171− Qt::TouchPointStates touchPointStates = 0;
172− QList<QTouchEvent::TouchPoint> touchPoints;
173−
174− const QList<QTouchEvent::TouchPoint> &allTouchPoints = event->touchPoints();
175−
176− QTransform windowToCandidateTransform = QQuickItemPrivate::get(item)->windowToItemTransform();
177− QMatrix4x4 windowToCandidateMatrix(windowToCandidateTransform);
178−
179− for (int i = 0; i < allTouchPoints.count(); ++i) {
180− const QTouchEvent::TouchPoint &originalTouchPoint = allTouchPoints[i];
181− if (touchIds.contains(originalTouchPoint.id())) {
182− QTouchEvent::TouchPoint touchPoint = originalTouchPoint;
183−
184− translateTouchPointFromScreenToWindowCoords(touchPoint);
185−
186− // Set the point's local coordinates to that of the item
187− touchPoint.setRect(windowToCandidateTransform.mapRect(touchPoint.sceneRect()));
188− touchPoint.setStartPos(windowToCandidateTransform.map(touchPoint.startScenePos()));
189− touchPoint.setLastPos(windowToCandidateTransform.map(touchPoint.lastScenePos()));
190− touchPoint.setVelocity(windowToCandidateMatrix.mapVector(touchPoint.velocity()).toVector2D());
191−
192− touchPoints.append(touchPoint);
193− touchPointStates |= touchPoint.state();
194− }
195− }
196−
197− QTouchEvent *eventForItem = new QTouchEvent(event->type(),
198− event->device(),
199− event->modifiers(),
200− touchPointStates,
201− touchPoints);
202− eventForItem->setWindow(event->window());
203− eventForItem->setTimestamp(event->timestamp());
204− eventForItem->setTarget(event->target());
205−
206− UnownedTouchEvent unownedTouchEvent(eventForItem);
207−
208− #if TOUCHREGISTRY_DEBUG
209− UG_DEBUG << "Sending unowned" << qPrintable(touchEventToString(eventForItem))
210− << "to" << item;
211− #endif
212−
213− QCoreApplication::sendEvent(item, &unownedTouchEvent);
214−}
215−
216−void TouchRegistry::translateTouchPointFromScreenToWindowCoords(QTouchEvent::TouchPoint &touchPoint)
217−{
218− touchPoint.setScreenRect(touchPoint.sceneRect());
219− touchPoint.setStartScreenPos(touchPoint.startScenePos());
220− touchPoint.setLastScreenPos(touchPoint.lastScenePos());
221−
222− touchPoint.setSceneRect(touchPoint.rect());
223− touchPoint.setStartScenePos(touchPoint.startPos());
224− touchPoint.setLastScenePos(touchPoint.lastPos());
225−}
226−
227−bool TouchRegistry::eventFilter(QObject *watched, QEvent *event)
228−{
229− Q_UNUSED(watched);
230−
231− switch (event->type()) {
232− case QEvent::TouchBegin:
233− case QEvent::TouchUpdate:
234− case QEvent::TouchEnd:
235− case QEvent::TouchCancel:
236− update(static_cast<QTouchEvent*>(event));
237− break;
238− default:
239− // do nothing
240− break;
241− }
242−
243− // Do not filter out the event. i.e., let it be handled further as
244− // we're just monitoring events
245− return false;
246−}
247−
248−void TouchRegistry::addCandidateOwnerForTouch(int id, QQuickItem *candidate)
249−{
250− #if TOUCHREGISTRY_DEBUG
251− UG_DEBUG << "addCandidateOwnerForTouch id" << id << "candidate" << candidate;
252− #endif
253−
254− Pool<TouchInfo>::Iterator touchInfo = findTouchInfo(id);
255− if (!touchInfo) { qFatal("TouchRegistry: Failed to find TouchInfo"); }
256−
257− if (touchInfo->isOwned()) {
258− qWarning("TouchRegistry: trying to add candidate owner for a touch that's already owned");
259− return;
260− }
261−
262− // TODO: Check if candidate already exists
263−
264− CandidateInfo candidateInfo;
265− candidateInfo.state = CandidateInfo::Undecided;
266− candidateInfo.item = candidate;
267− candidateInfo.inactivityTimer = new CandidateInactivityTimer(id, candidate,
268− m_timerFactory->createTimer(),
269− this);
270− connect(candidateInfo.inactivityTimer, &CandidateInactivityTimer::candidateDefaulted,
271− this, &TouchRegistry::rejectCandidateOwnerForTouch);
272−
273− touchInfo->candidates.append(candidateInfo);
274−
275− connect(candidate, &QObject::destroyed, this, [=](){ pruneNullCandidatesForTouch(id); });
276−}
277−
278−void TouchRegistry::addTouchWatcher(int touchId, QQuickItem *watcher)
279−{
280− #if TOUCHREGISTRY_DEBUG
281− UG_DEBUG << "addTouchWatcher id" << touchId << "watcher" << watcher;
282− #endif
283−
284− Pool<TouchInfo>::Iterator touchInfo = findTouchInfo(touchId);
285− if (!touchInfo) { qFatal("TouchRegistry: Failed to find TouchInfo"); }
286−
287− // TODO: Check if watcher already exists
288−
289− touchInfo->watchers.append(watcher);
290−}
291−
292−void TouchRegistry::removeCandidateOwnerForTouch(int id, QQuickItem *candidate)
293−{
294− #if TOUCHREGISTRY_DEBUG
295− UG_DEBUG << "removeCandidateOwnerForTouch id" << id << "candidate" << candidate;
296− #endif
297−
298− Pool<TouchInfo>::Iterator touchInfo = findTouchInfo(id);
299− if (!touchInfo) { qFatal("TouchRegistry: Failed to find TouchInfo"); }
300−
301−
302− // TODO: check if the candidate is in fact the owner of the touch
303−
304− bool removed = false;
305− for (int i = 0; i < touchInfo->candidates.count() && !removed; ++i) {
306− if (touchInfo->candidates[i].item == candidate) {
307− removeCandidateOwnerForTouchByIndex(touchInfo, i);
308− removed = true;
309− }
310− }
311−}
312−
313−void TouchRegistry::pruneNullCandidatesForTouch(int touchId)
314−{
315− #if TOUCHREGISTRY_DEBUG
316− UG_DEBUG << "pruneNullCandidatesForTouch touchId" << touchId;
317− #endif
318−
319− Pool<TouchInfo>::Iterator touchInfo = findTouchInfo(touchId);
320− if (!touchInfo) {
321− // doesn't matter as touch is already gone.
322− return;
323− }
324−
325− int i = 0;
326− while (i < touchInfo->candidates.count()) {
327− if (touchInfo->candidates[i].item.isNull()) {
328− removeCandidateOwnerForTouchByIndex(touchInfo, i);
329− } else {
330− ++i;
331− }
332− }
333−}
334−
335−void TouchRegistry::removeCandidateOwnerForTouchByIndex(Pool<TouchRegistry::TouchInfo>::Iterator &touchInfo,
336− int candidateIndex)
337−{
338− // TODO: check if the candidate is in fact the owner of the touch
339−
340− Q_ASSERT(candidateIndex < touchInfo->candidates.count());
341−
342− if (candidateIndex == 0 && touchInfo->candidates[candidateIndex].state != CandidateInfo::Undecided) {
343− qCritical("TouchRegistry: touch owner is being removed.");
344− }
345− removeCandidateHelper(touchInfo, candidateIndex);
346−
347− if (candidateIndex == 0) {
348− // the top candidate has been removed. if the new top candidate
349− // wants the touch let him know he's now the owner.
350− if (touchInfo->isOwned()) {
351− touchInfo->notifyCandidatesOfOwnershipResolution();
352− }
353− }
354−
355− if (!m_inDispatchLoop && touchInfo->ended()) {
356− m_touchInfoPool.freeSlot(touchInfo);
357− }
358−}
359−
360−void TouchRegistry::requestTouchOwnership(int id, QQuickItem *candidate)
361−{
362− Pool<TouchInfo>::Iterator touchInfo = findTouchInfo(id);
363− if (!touchInfo) { qFatal("TouchRegistry: Failed to find TouchInfo"); }
364−
365− Q_ASSERT(!touchInfo->isOwned());
366−
367− int candidateIndex = -1;
368− for (int i = 0; i < touchInfo->candidates.count(); ++i) {
369− CandidateInfo &candidateInfo = touchInfo->candidates[i];
370− if (candidateInfo.item == candidate) {
371− candidateInfo.state = CandidateInfo::Requested;
372− delete candidateInfo.inactivityTimer;
373− candidateInfo.inactivityTimer = nullptr;
374− candidateIndex = i;
375− break;
376− }
377− }
378− #if TOUCHREGISTRY_DEBUG
379− UG_DEBUG << "requestTouchOwnership id " << id << "candidate" << candidate << "index: " << candidateIndex;
380− #endif
381−
382− // add it as a candidate if not present yet
383− if (candidateIndex < 0) {
384− CandidateInfo candidateInfo;
385− candidateInfo.state = CandidateInfo::InterimOwner;
386− candidateInfo.item = candidate;
387− candidateInfo.inactivityTimer = nullptr;
388− touchInfo->candidates.append(candidateInfo);
389− // it's the last one
390− candidateIndex = touchInfo->candidates.count() - 1;
391− connect(candidate, &QObject::destroyed, this, [=](){ pruneNullCandidatesForTouch(id); });
392− }
393−
394− // If it's the top candidate it means it's now the owner. Let
395− // it know about it.
396− if (candidateIndex == 0) {
397− touchInfo->notifyCandidatesOfOwnershipResolution();
398− }
399−}
400−
401−Pool<TouchRegistry::TouchInfo>::Iterator TouchRegistry::findTouchInfo(int id)
402−{
403− Pool<TouchInfo>::Iterator touchInfo;
404−
405− m_touchInfoPool.forEach([&](Pool<TouchInfo>::Iterator &someTouchInfo) -> bool {
406− if (someTouchInfo->id == id) {
407− touchInfo = someTouchInfo;
408− return false;
409− } else {
410− return true;
411− }
412− });
413−
414− return touchInfo;
415−}
416−
417−
418−void TouchRegistry::rejectCandidateOwnerForTouch(int id, QQuickItem *candidate)
419−{
420− // NB: It's technically possible that candidate is a dangling pointer at this point.
421− // Although that would most likely be due to a bug in our code.
422− // In any case, only dereference it after it's confirmed that it indeed exists.
423−
424− #if TOUCHREGISTRY_DEBUG
425− UG_DEBUG << "rejectCandidateOwnerForTouch id" << id << "candidate" << (void*)candidate;
426− #endif
427−
428− Pool<TouchInfo>::Iterator touchInfo = findTouchInfo(id);
429− if (!touchInfo) {
430− #if TOUCHREGISTRY_DEBUG
431− UG_DEBUG << "Failed to find TouchInfo for id" << id;
432− #endif
433− return;
434− }
435−
436− int rejectedCandidateIndex = -1;
437−
438− // Check if the given candidate is valid and still undecided
439− for (int i = 0; i < touchInfo->candidates.count() && rejectedCandidateIndex == -1; ++i) {
440− CandidateInfo &candidateInfo = touchInfo->candidates[i];
441− if (candidateInfo.item == candidate) {
442− Q_ASSERT(i > 0 || candidateInfo.state == CandidateInfo::Undecided);
443− if (i == 0 && candidateInfo.state != CandidateInfo::Undecided) {
444− qCritical() << "TouchRegistry: Can't reject item (" << (void*)candidate
445− << ") as it already owns touch" << id;
446− return;
447− } else {
448− // we found the guy and it's all fine.
449− rejectedCandidateIndex = i;
450− }
451− }
452− }
453−
454− // If we reached this point it's because the given candidate exists and is indeed undecided.
455−
456− Q_ASSERT(rejectedCandidateIndex >= 0 && rejectedCandidateIndex < touchInfo->candidates.size());
457−
458− {
459− TouchOwnershipEvent lostOwnershipEvent(id, false /*gained*/);
460− QCoreApplication::sendEvent(candidate, &lostOwnershipEvent);
461− }
462−
463− removeCandidateHelper(touchInfo, rejectedCandidateIndex);
464−
465− if (rejectedCandidateIndex == 0) {
466− // the top candidate has been removed. if the new top candidate
467− // wants the touch let him know he's now the owner.
468− if (touchInfo->isOwned()) {
469− touchInfo->notifyCandidatesOfOwnershipResolution();
470− }
471− }
472−}
473−
474−void TouchRegistry::removeCandidateHelper(Pool<TouchInfo>::Iterator &touchInfo, int candidateIndex)
475−{
476− {
477− CandidateInfo &candidateInfo = touchInfo->candidates[candidateIndex];
478−
479− delete candidateInfo.inactivityTimer;
480− candidateInfo.inactivityTimer = nullptr;
481−
482− if (candidateInfo.item) {
483− disconnect(candidateInfo.item.data(), nullptr, this, nullptr);
484− }
485− }
486− touchInfo->candidates.removeAt(candidateIndex);
487−}
488−
489−////////////////////////////////////// TouchRegistry::TouchInfo ////////////////////////////////////
490−
491−TouchRegistry::TouchInfo::TouchInfo(int id)
492−{
493− init(id);
494−}
495−
496−void TouchRegistry::TouchInfo::reset()
497−{
498− id = -1;
499−
500− for (int i = 0; i < candidates.count(); ++i) {
501− CandidateInfo &candidate = candidates[i];
502− delete candidate.inactivityTimer;
503− candidate.inactivityTimer.clear(); // shoundn't be needed but anyway...
504− }
505−}
506−
507−void TouchRegistry::TouchInfo::init(int id)
508−{
509− this->id = id;
510− physicallyEnded = false;
511− candidates.clear();
512− watchers.clear();
513−}
514−
515−bool TouchRegistry::TouchInfo::isOwned() const
516−{
517− return !candidates.isEmpty() && candidates.first().state != CandidateInfo::Undecided;
518−}
519−
520−bool TouchRegistry::TouchInfo::ended() const
521−{
522− Q_ASSERT(isValid());
523− return physicallyEnded && (isOwned() || candidates.isEmpty());
524−}
525−
526−void TouchRegistry::TouchInfo::notifyCandidatesOfOwnershipResolution()
527−{
528− Q_ASSERT(isOwned());
529−
530− #if TOUCHREGISTRY_DEBUG
531− UG_DEBUG << "sending TouchOwnershipEvent(id =" << id
532− << " gained) to candidate" << candidates[0].item;
533− #endif
534−
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− }
541−
542− TouchOwnershipEvent gainedOwnershipEvent(id, true /*gained*/);
543− QCoreApplication::sendEvent(items[0], &gainedOwnershipEvent);
544−
545− TouchOwnershipEvent lostOwnershipEvent(id, false /*gained*/);
546− for (int i = 1; i < items.count(); ++i) {
547− #if TOUCHREGISTRY_DEBUG
548− UG_DEBUG << "sending TouchOwnershipEvent(id =" << id << " lost) to candidate"
549− << items[i];
550− #endif
551− QCoreApplication::sendEvent(items[i], &lostOwnershipEvent);
552− }
553−}
libs/UbuntuGestures/TouchRegistry.hdeleted−201
@@ -1,201 +0,0 @@
1−/*
2− * Copyright (C) 2014 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−#ifndef UNITY_TOUCHREGISTRY_H
18−#define UNITY_TOUCHREGISTRY_H
19−
20−#include <QQuickItem>
21−#include <QObject>
22−#include <QPointer>
23−#include <QTouchEvent>
24−#include <QVector>
25−
26−#include "UbuntuGesturesGlobal.h"
27−#include "CandidateInactivityTimer.h"
28−#include "Timer.h"
29−#include "Pool.h"
30−
31−namespace UbuntuGestures {
32− class AbstractTimerFactory;
33−}
34−
35−/*
36− Where the ownership of touches is registered.
37−
38− Singleton used for adding a touch point ownership model analogous to the one
39− described in the XInput 2.2 protocol[1] on top of the existing input dispatch logic in QQuickWindow.
40−
41− It provides a much more flexible and powerful way of dealing with pointer ownership than the existing
42− mechanisms in Qt. Namely QQuickItem::grabTouchPoints, QuickItem::keepTouchGrab,
43− QQuickItem::setFiltersChildMouseEvents, QQuickItem::ungrabTouchPoints and QQuickItem::touchUngrabEvent.
44−
45− Usage:
46−
47− 1- An item receives a a new touch point. If he's not sure whether he wants it yet, he calls:
48− TouchRegistry::instance()->addCandidateOwnerForTouch(touchId, this);
49− touchEvent->ignore();
50− Ignoring the event is crucial so that it can be seen by other interested parties, which will
51− behave similarly.
52−
53− 2- That item will then start receiving UnownedTouchEvents for that touch from step 1. Once he's
54− made a decision he calls either:
55− TouchRegistry::instance()->requestTouchOwnership(touchId, this);
56− If he wants the touch point or:
57− TouchRegistry::instance()->removeCandidateOwnerForTouch(touchId, this);
58−  if he does not want it.
59−
60− Candidates are put in a priority queue. The first one to call addCandidateOwnerForTouch() will
61− take precedence over the others for receiving ownership over the touch point (from now on called
62− simply top-candidate).
63−
64− If the top-candidate calls requestTouchOwnership() he will immediately receive a
65− TouchOwnershipEvent(gained=true) for that touch point. He can then safely call
66− QQuickItem::grabTouchPoints to actually get the owned touch points. The other candidates
67− will receive TouchOwnershipEvent(gained=false) and will no longer receive UnownedTouchEvents
68− for that touch point. They will have to undo whatever action they were performing with that
69− touch point.
70−
71− But if the top-candidate calls removeCandidateOwnerForTouch() instead, he's popped from the
72− candidacy queue and ownership is given to the new top-most candidate if he has already
73− made his decision, that is.
74−
75− The TouchRegistry cannot enforce the results of this pointer ownership negotiation (i.e.,
76− who gets to grab the touch points) as that would clash with QQuickWindow's input event
77− dispatching logic. The candidates have to respect the decision and grab the touch points
78− themselves.
79−
80− If an item wants ownership over touches as soon as he receives the TouchBegin for them, his step 1
81− would be instead:
82− TouchRegistry::instance()->requestTouchOwnership(touchId, this);
83− touchEvent->accept();
84− He won't get any UnownedTouchEvent for that touch as he is already the interim owner (ie, QQuickWindow
85− will keep sending touch updates to him already). Eventually he will be notified once ownership has
86− been granted to him (from TouchRegistry perspective), from which point onwards he could safely assume
87− other TouchRegistry users wouldn't snatch this touch away from him.
88−
89− Items oblivious to TouchRegistry will lose their touch points without warning, just like in plain Qt.
90−
91− [1] - http://www.x.org/releases/X11R7.7/doc/inputproto/XI2proto.txt (see multitouch-ownership)
92− */
93−class UBUNTUGESTURES_EXPORT TouchRegistry : public QObject
94−{
95− Q_OBJECT
96−public:
97− virtual ~TouchRegistry();
98−
99− // Returns a pointer to the application's TouchRegistry instance.
100− static TouchRegistry *instance();
101−
102− void update(const QTouchEvent *event);
103−
104− // Calls update() if the given event is a QTouchEvent
105− bool eventFilter(QObject *watched, QEvent *event) override;
106−
107− // An item that might later request ownership over the given touch point.
108− // He will be kept informed about that touch point through UnownedTouchEvents
109− // All candidates must eventually decide whether they want to own the touch point
110− // or not. That decision is informed through requestTouchOwnership() or
111− // removeCandidateOwnerForTouch()
112− void addCandidateOwnerForTouch(int id, QQuickItem *candidate);
113−
114− // The same as rejecting ownership of a touch
115− void removeCandidateOwnerForTouch(int id, QQuickItem *candidate);
116−
117− // The candidate object wants to be the owner of the touch with the given id.
118− // If he's currently the oldest/top-most candidate, he will get an ownership
119− // event immediately. If not, he will get ownership if (or once) he becomes the
120− // top-most candidate.
121− void requestTouchOwnership(int id, QQuickItem *candidate);
122−
123− // An item that has no interest (effective or potential) in owning a touch point
124− // but would nonetheless like to be kept up-to-date on its state.
125− void addTouchWatcher(int touchId, QQuickItem *watcherItem);
126−
127− // Useful for tests, where you should use fake timers
128− void setTimerFactory(UbuntuGestures::AbstractTimerFactory *timerFactory);
129−
130−private Q_SLOTS:
131− void rejectCandidateOwnerForTouch(int id, QQuickItem *candidate);
132−
133−private:
134− // Only instance() can cronstruct one
135− TouchRegistry(QObject *parent = nullptr);
136−
137− class CandidateInfo {
138− public:
139− enum {
140− // A candidate owner that doesn't yet know for sure whether he wants the touch point
141− // (gesture recognition is stilll going on)
142− Undecided = 0,
143− // A candidate owner that wants the touch but hasn't been granted it yet,
144− // most likely because there's an undecided candidate with higher priority
145− Requested = 1,
146− // An item that is the interim owner of the touch, receiving QTouchEvents of it
147− // from QQuickWindow. Ie, it's the actual touch owner from Qt's point of view.
148− // It wants to keep its touch ownership but hasn't been granted it by TouchRegistry
149− // yet because of undecided candidates higher up.
150− InterimOwner = 2
151− } state;
152− QPointer<QQuickItem> item;
153− QPointer<UbuntuGestures::CandidateInactivityTimer> inactivityTimer;
154− };
155−
156− class TouchInfo {
157− public:
158− TouchInfo() : id(-1) {}
159− TouchInfo(int id);
160− bool isValid() const { return id >= 0; }
161− void reset();
162− void init(int id);
163− int id;
164− bool physicallyEnded;
165− bool isOwned() const;
166− bool ended() const;
167− void notifyCandidatesOfOwnershipResolution();
168−
169− // TODO optimize storage (s/QList/Pool)
170− QList<CandidateInfo> candidates;
171− QList<QPointer<QQuickItem>> watchers;
172− };
173−
174− void pruneNullCandidatesForTouch(int touchId);
175− void removeCandidateOwnerForTouchByIndex(Pool<TouchInfo>::Iterator &touchInfo, int candidateIndex);
176− void removeCandidateHelper(Pool<TouchInfo>::Iterator &touchInfo, int candidateIndex);
177−
178− Pool<TouchInfo>::Iterator findTouchInfo(int id);
179−
180− void deliverTouchUpdatesToUndecidedCandidatesAndWatchers(const QTouchEvent *event);
181−
182− static void translateTouchPointFromScreenToWindowCoords(QTouchEvent::TouchPoint &touchPoint);
183−
184− static void dispatchPointsToItem(const QTouchEvent *event, const QList<int> &touchIds,
185− QQuickItem *item);
186− void freeEndedTouchInfos();
187−
188− Pool<TouchInfo> m_touchInfoPool;
189−
190− // the singleton instance
191− static TouchRegistry *m_instance;
192−
193− bool m_inDispatchLoop;
194−
195− UbuntuGestures::AbstractTimerFactory *m_timerFactory;
196−
197− friend class tst_TouchRegistry;
198− friend class tst_DirectionalDragArea;
199−};
200−
201−#endif // UNITY_TOUCHREGISTRY_H
libs/UbuntuGestures/UnownedTouchEvent.hdeleted−45
@@ -1,45 +0,0 @@
1−/*
2− * Copyright (C) 2014 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 UBUNTU_UNOWNEDTOUCHEVENT_H
18−#define UBUNTU_UNOWNEDTOUCHEVENT_H
19−
20−#include <QTouchEvent>
21−#include <QScopedPointer>
22−#include "UbuntuGesturesGlobal.h"
23−
24−/*
25− A touch event with touch points that do not belong the item receiving it.
26−
27− See TouchRegistry::addCandidateOwnerForTouch and TouchRegistry::addTouchWatcher
28− */
29−class UBUNTUGESTURES_EXPORT UnownedTouchEvent : public QEvent
30−{
31−public:
32− UnownedTouchEvent(QTouchEvent *touchEvent);
33− static Type unownedTouchEventType();
34−
35− // TODO: It might be cleaner to store the information directly in UnownedTouchEvent
36− // instead of carrying around a synthesized QTouchEvent. But the latter option
37− // is very convenient.
38− QTouchEvent *touchEvent();
39−
40−private:
41− static Type m_unownedTouchEventType;
42− QScopedPointer<QTouchEvent> m_touchEvent;
43−};
44−
45−#endif // UBUNTU_UNOWNEDTOUCHEVENT_H
plugins/AccountsService/AccountsService.cpp+21−1
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013, 2015 Canonical, Ltd.
2+ * Copyright (C) 2013-2016 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -36,8 +36,10 @@
3636#define PROP_DEMO_EDGES QStringLiteral("demo-edges")
3737#define PROP_DEMO_EDGES_COMPLETED QStringLiteral("DemoEdgesCompleted")
3838#define PROP_EMAIL QStringLiteral("Email")
39+#define PROP_ENABLE_FINGERPRINT_IDENTIFICATION QStringLiteral("EnableFingerprintIdentification")
3940#define PROP_ENABLE_INDICATORS_WHILE_LOCKED QStringLiteral("EnableIndicatorsWhileLocked")
4041#define PROP_ENABLE_LAUNCHER_WHILE_LOCKED QStringLiteral("EnableLauncherWhileLocked")
42+#define PROP_FAILED_FINGERPRINT_LOGINS QStringLiteral("FailedFingerprintLogins")
4143#define PROP_FAILED_LOGINS QStringLiteral("FailedLogins")
4244#define PROP_INPUT_SOURCES QStringLiteral("InputSources")
4345#define PROP_LICENSE_ACCEPTED QStringLiteral("LicenseAccepted")
@@ -93,12 +95,14 @@ AccountsService::AccountsService(QObject* parent, const QString &user)
9395 registerProperty(IFACE_ACCOUNTS_USER, PROP_INPUT_SOURCES, QStringLiteral("keymapsChanged"));
9496 registerProperty(IFACE_LOCATION_HERE, PROP_LICENSE_ACCEPTED, QStringLiteral("hereEnabledChanged"));
9597 registerProperty(IFACE_LOCATION_HERE, PROP_LICENSE_BASE_PATH, QStringLiteral("hereLicensePathChanged"));
98+ registerProperty(IFACE_UBUNTU_SECURITY, PROP_ENABLE_FINGERPRINT_IDENTIFICATION, QStringLiteral("enableFingerprintIdentificationChanged"));
9699 registerProperty(IFACE_UBUNTU_SECURITY, PROP_ENABLE_LAUNCHER_WHILE_LOCKED, QStringLiteral("enableLauncherWhileLockedChanged"));
97100 registerProperty(IFACE_UBUNTU_SECURITY, PROP_ENABLE_INDICATORS_WHILE_LOCKED, QStringLiteral("enableIndicatorsWhileLockedChanged"));
98101 registerProperty(IFACE_UBUNTU_SECURITY, PROP_PASSWORD_DISPLAY_HINT, QStringLiteral("passwordDisplayHintChanged"));
99102 registerProperty(IFACE_UBUNTU_SECURITY_OLD, PROP_STATS_WELCOME_SCREEN, QStringLiteral("statsWelcomeScreenChanged"));
100103 registerProperty(IFACE_UNITY, PROP_DEMO_EDGES, QStringLiteral("demoEdgesChanged"));
101104 registerProperty(IFACE_UNITY, PROP_DEMO_EDGES_COMPLETED, QStringLiteral("demoEdgesCompletedChanged"));
105+ registerProperty(IFACE_UNITY_PRIVATE, PROP_FAILED_FINGERPRINT_LOGINS, QStringLiteral("failedFingerprintLoginsChanged"));
102106 registerProperty(IFACE_UNITY_PRIVATE, PROP_FAILED_LOGINS, QStringLiteral("failedLoginsChanged"));
103107
104108 registerProxy(IFACE_UBUNTU_INPUT, PROP_MOUSE_CURSOR_SPEED,
@@ -176,6 +180,12 @@ void AccountsService::markDemoEdgeCompleted(const QString &edge)
176180 }
177181}
178182
183+bool AccountsService::enableFingerprintIdentification() const
184+{
185+ auto value = getProperty(IFACE_UBUNTU_SECURITY, PROP_ENABLE_FINGERPRINT_IDENTIFICATION);
186+ return value.toBool();
187+}
188+
179189bool AccountsService::enableLauncherWhileLocked() const
180190{
181191 auto value = getProperty(IFACE_UBUNTU_SECURITY, PROP_ENABLE_LAUNCHER_WHILE_LOCKED);
@@ -274,6 +284,16 @@ QStringList AccountsService::keymaps() const
274284 return {QStringLiteral("us")};
275285}
276286
287+uint AccountsService::failedFingerprintLogins() const
288+{
289+ return getProperty(IFACE_UNITY_PRIVATE, PROP_FAILED_FINGERPRINT_LOGINS).toUInt();
290+}
291+
292+void AccountsService::setFailedFingerprintLogins(uint failedFingerprintLogins)
293+{
294+ setProperty(IFACE_UNITY_PRIVATE, PROP_FAILED_FINGERPRINT_LOGINS, failedFingerprintLogins);
295+}
296+
277297uint AccountsService::failedLogins() const
278298{
279299 return getProperty(IFACE_UNITY_PRIVATE, PROP_FAILED_LOGINS).toUInt();
plugins/AccountsService/AccountsService.h+13−1
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013, 2015 Canonical, Ltd.
2+ * Copyright (C) 2013-2016 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -41,6 +41,9 @@ class AccountsService: public QObject
4141 Q_PROPERTY (QStringList demoEdgesCompleted
4242 READ demoEdgesCompleted
4343 NOTIFY demoEdgesCompletedChanged)
44+ Q_PROPERTY (bool enableFingerprintIdentification
45+ READ enableFingerprintIdentification
46+ NOTIFY enableFingerprintIdentificationChanged)
4447 Q_PROPERTY (bool enableLauncherWhileLocked
4548 READ enableLauncherWhileLocked
4649 NOTIFY enableLauncherWhileLockedChanged)
@@ -60,6 +63,10 @@ class AccountsService: public QObject
6063 READ failedLogins
6164 WRITE setFailedLogins
6265 NOTIFY failedLoginsChanged)
66+ Q_PROPERTY (uint failedFingerprintLogins
67+ READ failedFingerprintLogins
68+ WRITE setFailedFingerprintLogins
69+ NOTIFY failedFingerprintLoginsChanged)
6370 Q_PROPERTY(bool hereEnabled
6471 READ hereEnabled
6572 WRITE setHereEnabled
@@ -91,6 +98,7 @@ public:
9198 void setDemoEdges(bool demoEdges);
9299 QStringList demoEdgesCompleted() const;
93100 Q_INVOKABLE void markDemoEdgeCompleted(const QString &edge);
101+ bool enableFingerprintIdentification() const;
94102 bool enableLauncherWhileLocked() const;
95103 bool enableIndicatorsWhileLocked() const;
96104 QString backgroundFile() const;
@@ -98,6 +106,8 @@ public:
98106 PasswordDisplayHint passwordDisplayHint() const;
99107 uint failedLogins() const;
100108 void setFailedLogins(uint failedLogins);
109+ uint failedFingerprintLogins() const;
110+ void setFailedFingerprintLogins(uint failedFingerprintLogins);
101111 bool hereEnabled() const;
102112 void setHereEnabled(bool enabled);
103113 QString hereLicensePath() const;
@@ -112,12 +122,14 @@ Q_SIGNALS:
112122 void userChanged();
113123 void demoEdgesChanged();
114124 void demoEdgesCompletedChanged();
125+ void enableFingerprintIdentificationChanged();
115126 void enableLauncherWhileLockedChanged();
116127 void enableIndicatorsWhileLockedChanged();
117128 void backgroundFileChanged();
118129 void statsWelcomeScreenChanged();
119130 void passwordDisplayHintChanged();
120131 void failedLoginsChanged();
132+ void failedFingerprintLoginsChanged();
121133 void hereEnabledChanged();
122134 void hereLicensePathChanged();
123135 void realNameChanged();
plugins/AccountsService/AccountsService.qmltypesdeleted−41
@@ -1,41 +0,0 @@
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 AccountsService 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "AccountsService"
12− prototype: "QObject"
13− exports: ["AccountsService/AccountsService 0.1"]
14− isCreatable: false
15− isSingleton: true
16− exportMetaObjectRevisions: [0]
17− Enum {
18− name: "PasswordDisplayHint"
19− values: {
20− "Keyboard": 0,
21− "Numeric": 1
22− }
23− }
24− Property { name: "user"; type: "string" }
25− Property { name: "demoEdges"; type: "bool" }
26− Property { name: "demoEdgesCompleted"; type: "QStringList"; isReadonly: true }
27− Property { name: "enableLauncherWhileLocked"; type: "bool"; isReadonly: true }
28− Property { name: "enableIndicatorsWhileLocked"; type: "bool"; isReadonly: true }
29− Property { name: "backgroundFile"; type: "string"; isReadonly: true }
30− Property { name: "statsWelcomeScreen"; type: "bool"; isReadonly: true }
31− Property { name: "passwordDisplayHint"; type: "PasswordDisplayHint"; isReadonly: true }
32− Property { name: "failedLogins"; type: "uint" }
33− Property { name: "hereEnabled"; type: "bool" }
34− Property { name: "hereLicensePath"; type: "string"; isReadonly: true }
35− Property { name: "hereLicensePathValid"; type: "bool"; isReadonly: true }
36− Method {
37− name: "markDemoEdgeCompleted"
38− Parameter { name: "edge"; type: "string" }
39− }
40− }
41−}
plugins/AccountsService/com.canonical.unity.AccountsService.xml+4
@@ -47,5 +47,9 @@
4747 <annotation name="org.freedesktop.Accounts.DefaultValue" value="0"/>
4848 </property>
4949
50+ <property name="FailedFingerprintLogins" type="u" access="readwrite">
51+ <annotation name="org.freedesktop.Accounts.DefaultValue" value="0"/>
52+ </property>
53+
5054 </interface>
5155</node>
plugins/CMakeLists.txt+1−1
@@ -15,7 +15,7 @@ add_subdirectory(AccountsService)
1515add_subdirectory(Cursor)
1616add_subdirectory(GlobalShortcut)
1717add_subdirectory(Greeter)
18−add_subdirectory(IntegratedLightDM)
18+add_subdirectory(LightDM)
1919add_subdirectory(Lights)
2020add_subdirectory(Dash)
2121add_subdirectory(Powerd)
plugins/Cursor/CMakeLists.txt+6−1
@@ -3,13 +3,18 @@ add_subdirectory(3rd_party)
33include_directories(
44 ${CMAKE_CURRENT_SOURCE_DIR}
55 ${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/xcursor
6+)
7+
8+include_directories(
9+ SYSTEM
610 ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
711)
812
913set(QMLPLUGIN_SRC
1014 plugin.cpp
11− MousePointer.cpp
15+ CursorImageInfo.cpp
1216 CursorImageProvider.cpp
17+ MousePointer.cpp
1318 # We need to run moc on this header
1419 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirMousePointerInterface.h
1520 )
plugins/Cursor/Cursor.qml+37−6
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2015 Canonical, Ltd.
2+ * Copyright (C) 2015-2016 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -15,14 +15,45 @@
1515 */
1616
1717import QtQuick 2.4
18−import Cursor 1.0 // For MousePointer
18+import Cursor 1.1
19+import Powerd 0.1
1920
2021MousePointer {
2122 id: mousePointer
2223
23− Image {
24− x: -mousePointer.hotspotX
25− y: -mousePointer.hotspotY
26− source: "image://cursor/" + mousePointer.themeName + "/" + mousePointer.cursorName
24+ CursorImageInfo {
25+ id: imageInfo
26+ themeName: mousePointer.themeName
27+ cursorName: mousePointer.cursorName
28+ }
29+
30+ Loader {
31+ active: mousePointer.visible && imageInfo.frameCount > 1
32+ sourceComponent: AnimatedSprite {
33+ x: -imageInfo.hotspot.x
34+ y: -imageInfo.hotspot.y
35+ source: "image://cursor/" + mousePointer.themeName + "/" + mousePointer.cursorName
36+
37+ interpolate: false
38+
39+ width: imageInfo.frameWidth
40+ height: imageInfo.frameHeight
41+
42+ frameCount: imageInfo.frameCount
43+ frameDuration: imageInfo.frameDuration
44+ frameWidth: imageInfo.frameWidth
45+ frameHeight: imageInfo.frameHeight
46+
47+ running: Powerd.status === Powerd.On
48+ }
49+ }
50+
51+ Loader {
52+ active: mousePointer.visible && imageInfo.frameCount === 1
53+ sourceComponent: Image {
54+ x: -imageInfo.hotspot.x
55+ y: -imageInfo.hotspot.y
56+ source: "image://cursor/" + mousePointer.themeName + "/" + mousePointer.cursorName
57+ }
2758 }
2859}
plugins/Cursor/Cursor.qmltypesdeleted−78
@@ -1,78 +0,0 @@
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/Cursor/CursorImageInfo.cppnew file+96
@@ -0,0 +1,96 @@
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 "CursorImageInfo.h"
18+
19+CursorImageInfo::CursorImageInfo(QObject *parent)
20+ : QObject(parent)
21+{
22+}
23+
24+void CursorImageInfo::setCursorName(const QString &cursorName)
25+{
26+ if (cursorName != m_cursorName) {
27+ m_cursorName = cursorName;
28+ update();
29+ Q_EMIT cursorNameChanged();
30+ }
31+}
32+
33+void CursorImageInfo::setThemeName(const QString &themeName)
34+{
35+ if (m_themeName != themeName) {
36+ m_themeName = themeName;
37+ update();
38+ Q_EMIT themeNameChanged();
39+ }
40+}
41+
42+void CursorImageInfo::update()
43+{
44+ m_cursorImage = CursorImageProvider::instance()->fetchCursor(m_themeName, m_cursorName);
45+
46+ Q_EMIT hotspotChanged();
47+ Q_EMIT frameWidthChanged();
48+ Q_EMIT frameHeightChanged();
49+ Q_EMIT frameCountChanged();
50+ Q_EMIT frameDurationChanged();
51+}
52+
53+QPoint CursorImageInfo::hotspot() const
54+{
55+ if (m_cursorImage) {
56+ return m_cursorImage->hotspot;
57+ } else {
58+ return QPoint();
59+ }
60+}
61+
62+qreal CursorImageInfo::frameWidth() const
63+{
64+ if (m_cursorImage) {
65+ return m_cursorImage->frameWidth;
66+ } else {
67+ return 0;
68+ }
69+}
70+
71+qreal CursorImageInfo::frameHeight() const
72+{
73+ if (m_cursorImage) {
74+ return m_cursorImage->frameHeight;
75+ } else {
76+ return 0;
77+ }
78+}
79+
80+int CursorImageInfo::frameCount() const
81+{
82+ if (m_cursorImage) {
83+ return m_cursorImage->frameCount;
84+ } else {
85+ return 0;
86+ }
87+}
88+
89+int CursorImageInfo::frameDuration() const
90+{
91+ if (m_cursorImage) {
92+ return m_cursorImage->frameDuration;
93+ } else {
94+ return 0;
95+ }
96+}
plugins/Cursor/CursorImageInfo.hnew file+72
@@ -0,0 +1,72 @@
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 CURSOR_IMAGE_INFO_H
18+#define CURSOR_IMAGE_INFO_H
19+
20+#include "CursorImageProvider.h"
21+
22+#include <QObject>
23+#include <QString>
24+
25+class CursorImageInfo : public QObject
26+{
27+ Q_OBJECT
28+
29+ Q_PROPERTY(QString themeName READ themeName WRITE setThemeName NOTIFY themeNameChanged)
30+ Q_PROPERTY(QString cursorName READ cursorName WRITE setCursorName NOTIFY cursorNameChanged)
31+
32+ Q_PROPERTY(QPoint hotspot READ hotspot NOTIFY hotspotChanged)
33+ Q_PROPERTY(qreal frameWidth READ frameWidth NOTIFY frameWidthChanged)
34+ Q_PROPERTY(qreal frameHeight READ frameHeight NOTIFY frameHeightChanged)
35+ Q_PROPERTY(int frameCount READ frameCount NOTIFY frameCountChanged)
36+ Q_PROPERTY(int frameDuration READ frameDuration NOTIFY frameDurationChanged)
37+
38+public:
39+ CursorImageInfo(QObject *parent = nullptr);
40+
41+ QString themeName() const { return m_themeName; }
42+ void setThemeName(const QString &);
43+
44+ QString cursorName() const { return m_cursorName; }
45+ void setCursorName(const QString &);
46+
47+ QPoint hotspot() const;
48+ qreal frameWidth() const;
49+ qreal frameHeight() const;
50+ int frameCount() const;
51+ int frameDuration() const;
52+
53+Q_SIGNALS:
54+ void themeNameChanged();
55+ void cursorNameChanged();
56+ void hotspotChanged();
57+ void frameWidthChanged();
58+ void frameHeightChanged();
59+ void frameCountChanged();
60+ void frameDurationChanged();
61+
62+private Q_SLOTS:
63+ void update();
64+
65+private:
66+ QString m_themeName;
67+ QString m_cursorName;
68+
69+ CursorImage *m_cursorImage{nullptr};
70+};
71+
72+#endif // CURSOR_IMAGE_INFO_H
plugins/Cursor/CursorImageProvider.cpp+51−22
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2015 Canonical, Ltd.
2+ * Copyright (C) 2015-2016 Canonical, Ltd.
33 *
44 * This program is free software: you can redistribute it and/or modify it under
55 * the terms of the GNU Lesser General Public License version 3, as published by
@@ -46,6 +46,9 @@ BuiltInCursorImage::BuiltInCursorImage()
4646 qimage.fill(Qt::transparent);
4747 QPainter imagePainter(&qimage);
4848
49+ frameWidth = qimage.width();
50+ frameHeight = qimage.height();
51+
4952 QSvgRenderer *svgRenderer = new QSvgRenderer(QByteArray(svgString));
5053 svgRenderer->render(&imagePainter);
5154 delete svgRenderer;
@@ -59,6 +62,8 @@ BlankCursorImage::BlankCursorImage()
5962{
6063 qimage = QImage(1, 1, QImage::Format_ARGB32);
6164 qimage.fill(Qt::transparent);
65+ frameWidth = qimage.width();
66+ frameHeight = qimage.height();
6267}
6368
6469/////
@@ -69,40 +74,74 @@ CustomCursorImage::CustomCursorImage(const QCursor &cursor)
6974{
7075 qimage = cursor.pixmap().toImage();
7176 hotspot = cursor.hotSpot();
77+ frameWidth = qimage.width();
78+ frameHeight = qimage.height();
7279}
7380
7481/////
7582// XCursorImage
7683
7784XCursorImage::XCursorImage(const QString &theme, const QString &file)
78− : xcursorImages(nullptr)
7985{
8086 // TODO: Consider grid unit value
8187 // Hardcoding to a medium size for now
8288 int preferredCursorHeightPx = 32;
8389
84− xcursorImages = XcursorLibraryLoadImages(QFile::encodeName(file), QFile::encodeName(theme),
90+ XcursorImages *xcursorImages = XcursorLibraryLoadImages(QFile::encodeName(file), QFile::encodeName(theme),
8591 preferredCursorHeightPx);
86− if (!xcursorImages) {
92+ if (!xcursorImages || xcursorImages->nimage == 0) {
8793 return;
8894 }
8995
90− // Just take the first one. It will have multiple images in case of an animated cursor.
91− // TODO: Support animated cursors
92− if ( xcursorImages->nimage > 0) {
93− XcursorImage *xcursorImage = xcursorImages->images[0];
96+ frameCount = xcursorImages->nimage;
9497
95− qimage = QImage((uchar*)xcursorImage->pixels,
96− xcursorImage->width, xcursorImage->height, QImage::Format_ARGB32);
98+ for (int i = 0; i < xcursorImages->nimage; ++i) {
99+ XcursorImage *xcursorImage = xcursorImages->images[0];
100+ if (frameWidth < (int)xcursorImage->width) {
101+ frameWidth = xcursorImage->width;
102+ }
103+ if (frameHeight < (int)xcursorImage->height) {
104+ frameHeight = xcursorImage->height;
105+ }
106+ if (i == 0) {
107+ frameDuration = (int)xcursorImage->delay;
108+ } else {
109+ if (frameDuration != (int)xcursorImage->delay) {
110+ qWarning().nospace() << "CursorImageProvider: XCursorImage("<<theme<<","<<file<<") has"
111+ " varying delays in its animation. Animation won't look right.";
112+ }
113+ }
114+ }
97115
116+ {
117+ // Assume that the hotspot position does not animate
118+ XcursorImage *xcursorImage = xcursorImages->images[0];
98119 hotspot.setX(xcursorImage->xhot);
99120 hotspot.setY(xcursorImage->yhot);
100121 }
122+
123+ // Build the sprite as a single row of frames
124+ qimage = QImage(frameWidth*frameCount, frameHeight, QImage::Format_ARGB32);
125+ qimage.fill(Qt::transparent);
126+
127+ {
128+ QPainter painter(&qimage);
129+
130+ for (int i = 0; i < xcursorImages->nimage; ++i) {
131+ XcursorImage *xcursorImage = xcursorImages->images[i];
132+
133+ auto frameImage = QImage((uchar*)xcursorImage->pixels,
134+ xcursorImage->width, xcursorImage->height, QImage::Format_ARGB32);
135+
136+ painter.drawImage(QPoint(i*frameWidth, 0), frameImage);
137+ }
138+ }
139+
140+ XcursorImagesDestroy(xcursorImages);
101141}
102142
103143XCursorImage::~XCursorImage()
104144{
105− XcursorImagesDestroy(xcursorImages);
106145}
107146
108147/////
@@ -205,16 +244,6 @@ QImage CursorImageProvider::requestImage(const QString &cursorThemeAndName, QSiz
205244 return cursorImage->qimage;
206245}
207246
208−QPoint CursorImageProvider::hotspot(const QString &themeName, const QString &cursorName)
209−{
210− CursorImage *cursorImage = fetchCursor(themeName, cursorName);
211− if (cursorImage) {
212− return cursorImage->hotspot;
213− } else {
214− return QPoint(0,0);
215− }
216−}
217−
218247CursorImage *CursorImageProvider::fetchCursor(const QString &cursorThemeAndName)
219248{
220249 QString themeName;
@@ -271,7 +300,7 @@ CursorImage *CursorImageProvider::fetchCursorHelper(const QString &themeName, co
271300{
272301 if (cursorName == QLatin1String("blank")) {
273302 return &m_blankCursorImage;
274− } else if (cursorName == QLatin1String("custom")) {
303+ } else if (cursorName.startsWith(QLatin1String("custom"))) {
275304 return m_customCursorImage.data();
276305 } else {
277306 QMap<QString, CursorImage*> &themeCursors = m_cursors[themeName];
plugins/Cursor/CursorImageProvider.h+12−4
@@ -31,15 +31,23 @@ public:
3131 virtual ~CursorImage() {}
3232
3333 QImage qimage;
34+
35+ // TODO: consider if there's a need to animate the hotspot
36+ // ie, if there's a need to make it an array of points, one for each frame.
37+ // Maybe no single xcursor (or at least the ones we know of or use)
38+ // vary its hotspot position through its animation.
3439 QPoint hotspot;
40+
41+ int frameWidth{0};
42+ int frameHeight{0};
43+ int frameCount{1};
44+ int frameDuration{40};
3545};
3646
3747class XCursorImage : public CursorImage {
3848public:
3949 XCursorImage(const QString &theme, const QString &file);
4050 virtual ~XCursorImage();
41−
42− XcursorImages *xcursorImages;
4351};
4452
4553class BuiltInCursorImage : public CursorImage {
@@ -68,16 +76,16 @@ public:
6876
6977 QImage requestImage(const QString &cursorName, QSize *size, const QSize &requestedSize) override;
7078
71− QPoint hotspot(const QString &themeName, const QString &cursorName);
79+ CursorImage *fetchCursor(const QString &themeName, const QString &cursorName);
7280
7381 void setCustomCursor(const QCursor &customCursor);
7482
7583private:
7684 CursorImage *fetchCursor(const QString &cursorThemeAndName);
77− CursorImage *fetchCursor(const QString &themeName, const QString &cursorName);
7885 CursorImage *fetchCursorHelper(const QString &themeName, const QString &cursorName);
7986
8087 // themeName -> (cursorName -> cursorImage)
88+ // TODO: discard old, unused, cursors
8189 QMap<QString, QMap<QString, CursorImage*> > m_cursors;
8290
8391 QScopedPointer<CursorImage> m_builtInCursorImage;
plugins/Cursor/MousePointer.cpp+42−32
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2015 Canonical, Ltd.
2+ * Copyright (C) 2015-2016 Canonical, Ltd.
33 *
44 * This program is free software: you can redistribute it and/or modify it under
55 * the terms of the GNU Lesser General Public License version 3, as published by
@@ -29,10 +29,7 @@ MousePointer::MousePointer(QQuickItem *parent)
2929 : MirMousePointerInterface(parent)
3030 , m_cursorName(QStringLiteral("left_ptr"))
3131 , m_themeName(QStringLiteral("default"))
32− , m_hotspotX(0)
33− , m_hotspotY(0)
3432{
35− updateHotspot();
3633}
3734
3835void MousePointer::handleMouseEvent(ulong timestamp, QPointF movement, Qt::MouseButtons buttons,
@@ -46,21 +43,26 @@ void MousePointer::handleMouseEvent(ulong timestamp, QPointF movement, Qt::Mouse
4643 Q_EMIT mouseMoved();
4744 }
4845
49− qreal newX = x() + movement.x();
46+ m_accumulatedMovement += movement;
47+ // don't apply the fractional part
48+ QPointF appliedMovement(int(m_accumulatedMovement.x()), int(m_accumulatedMovement.y()));
49+ m_accumulatedMovement -= appliedMovement;
50+
51+ qreal newX = x() + appliedMovement.x();
5052 if (newX < 0) {
5153 Q_EMIT pushedLeftBoundary(qAbs(newX), buttons);
5254 newX = 0;
53− } else if (newX > parentItem()->width()) {
54− Q_EMIT pushedRightBoundary(newX - parentItem()->width(), buttons);
55− newX = parentItem()->width();
55+ } else if (newX >= parentItem()->width()) {
56+ Q_EMIT pushedRightBoundary(newX - (parentItem()->width() - 1), buttons);
57+ newX = parentItem()->width() - 1;
5658 }
5759 setX(newX);
5860
59− qreal newY = y() + movement.y();
61+ qreal newY = y() + appliedMovement.y();
6062 if (newY < 0) {
6163 newY = 0;
62− } else if (newY > parentItem()->height()) {
63− newY = parentItem()->height();
64+ } else if (newY >= parentItem()->height()) {
65+ newY = parentItem()->height() - 1;
6466 }
6567 setY(newY);
6668
@@ -89,8 +91,32 @@ void MousePointer::itemChange(ItemChange change, const ItemChangeData &value)
8991
9092void MousePointer::registerWindow(QWindow *window)
9193{
92− if (m_registeredWindow && window != m_registeredWindow) {
93− auto previousCursor = dynamic_cast<MirPlatformCursor*>(m_registeredWindow->screen()->handle()->cursor());
94+ if (window == m_registeredWindow) {
95+ return;
96+ }
97+
98+ if (m_registeredWindow) {
99+ m_registeredWindow->disconnect(this);
100+ }
101+
102+ m_registeredWindow = window;
103+
104+ if (m_registeredWindow) {
105+ connect(window, &QWindow::screenChanged, this, &MousePointer::registerScreen);
106+ registerScreen(window->screen());
107+ } else {
108+ registerScreen(nullptr);
109+ }
110+}
111+
112+void MousePointer::registerScreen(QScreen *screen)
113+{
114+ if (m_registeredScreen == screen) {
115+ return;
116+ }
117+
118+ if (m_registeredScreen) {
119+ auto previousCursor = dynamic_cast<MirPlatformCursor*>(m_registeredScreen->handle()->cursor());
94120 if (previousCursor) {
95121 previousCursor->setMousePointer(nullptr);
96122 } else {
@@ -98,10 +124,10 @@ void MousePointer::registerWindow(QWindow *window)
98124 }
99125 }
100126
101− m_registeredWindow = window;
127+ m_registeredScreen = screen;
102128
103− if (m_registeredWindow) {
104− auto cursor = dynamic_cast<MirPlatformCursor*>(window->screen()->handle()->cursor());
129+ if (m_registeredScreen) {
130+ auto cursor = dynamic_cast<MirPlatformCursor*>(m_registeredScreen->handle()->cursor());
105131 if (cursor) {
106132 cursor->setMousePointer(this);
107133 } else {
@@ -115,22 +141,6 @@ void MousePointer::setCursorName(const QString &cursorName)
115141 if (cursorName != m_cursorName) {
116142 m_cursorName = cursorName;
117143 Q_EMIT cursorNameChanged(m_cursorName);
118− updateHotspot();
119− }
120−}
121−
122−void MousePointer::updateHotspot()
123−{
124− QPoint newHotspot = CursorImageProvider::instance()->hotspot(m_themeName, m_cursorName);
125−
126− if (m_hotspotX != newHotspot.x()) {
127− m_hotspotX = newHotspot.x();
128− Q_EMIT hotspotXChanged(m_hotspotX);
129− }
130−
131− if (m_hotspotY != newHotspot.y()) {
132− m_hotspotY = newHotspot.y();
133− Q_EMIT hotspotYChanged(m_hotspotY);
134144 }
135145}
136146
plugins/Cursor/MousePointer.h+9−7
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2015 Canonical, Ltd.
2+ * Copyright (C) 2015-2016 Canonical, Ltd.
33 *
44 * This program is free software: you can redistribute it and/or modify it under
55 * the terms of the GNU Lesser General Public License version 3, as published by
@@ -20,6 +20,7 @@
2020// Qt
2121#include <QPointer>
2222#include <QWindow>
23+#include <QScreen>
2324
2425// Unity API
2526#include <unity/shell/application/MirMousePointerInterface.h>
@@ -35,9 +36,6 @@ public:
3536 void setThemeName(const QString &themeName) override;
3637 QString themeName() const override { return m_themeName; }
3738
38− qreal hotspotX() const override { return m_hotspotX; }
39− qreal hotspotY() const override { return m_hotspotY; }
40−
4139 void setCustomCursor(const QCursor &) override;
4240
4341public Q_SLOTS:
@@ -53,15 +51,19 @@ Q_SIGNALS:
5351protected:
5452 void itemChange(ItemChange change, const ItemChangeData &value) override;
5553
54+private Q_SLOTS:
55+ void registerScreen(QScreen *screen);
56+
5657private:
5758 void registerWindow(QWindow *window);
58− void updateHotspot();
5959
6060 QPointer<QWindow> m_registeredWindow;
61+ QPointer<QScreen> m_registeredScreen;
6162 QString m_cursorName;
6263 QString m_themeName;
63− int m_hotspotX;
64− int m_hotspotY;
64+
65+ // Accumulated, unapplied, mouse movement.
66+ QPointF m_accumulatedMovement;
6567};
6668
6769#endif // MOUSEPOINTER_H
plugins/Cursor/plugin.cpp+4−2
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2015 Canonical, Ltd.
2+ * Copyright (C) 2015-2016 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -22,13 +22,15 @@
2222#include "plugin.h"
2323
2424// local
25+#include "CursorImageInfo.h"
2526#include "CursorImageProvider.h"
2627#include "MousePointer.h"
2728
2829void CursorPlugin::registerTypes(const char *uri)
2930{
3031 Q_ASSERT(uri == QLatin1String("Cursor"));
31− qmlRegisterType<MousePointer>(uri, 1, 0, "MousePointer");
32+ qmlRegisterType<CursorImageInfo>(uri, 1, 1, "CursorImageInfo");
33+ qmlRegisterType<MousePointer>(uri, 1, 1, "MousePointer");
3234}
3335
3436void CursorPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
plugins/Cursor/qmldir+1−1
@@ -1,3 +1,3 @@
11module Cursor
22plugin Cursor-qml
3−Cursor 1.0 Cursor.qml
3+Cursor 1.1 Cursor.qml
plugins/Dash/AudioProgressBar.qml+1−1
@@ -49,6 +49,6 @@ Item {
4949 rightMargin: maxWidth - (maxWidth * root.progress)
5050 }
5151 height: units.dp(2)
52− backgroundColor: UbuntuColors.orange
52+ backgroundColor: theme.palette.normal.activity
5353 }
5454}
plugins/Dash/CMakeLists.txt+4
@@ -10,6 +10,10 @@ endif()
1010include_directories(
1111 ${CMAKE_CURRENT_SOURCE_DIR}
1212 ${CMAKE_CURRENT_BINARY_DIR}
13+)
14+
15+include_directories(
16+ SYSTEM
1317 ${Qt5Qml_PRIVATE_INCLUDE_DIRS}
1418 ${Qt5Quick_PRIVATE_INCLUDE_DIRS}
1519 ${Qt5V8_PRIVATE_INCLUDE_DIR}
plugins/Dash/CardCreator.js+127−76
@@ -59,75 +59,100 @@ var kBackgroundLoaderCode = 'Loader {\n\
5959 } \n\
6060 }\n';
6161
62+// %1 is the aspect of the UbuntuShape
63+var kArtUbuntuShapeCode = 'UbuntuShape { \n\
64+ anchors.fill: parent; \n\
65+ source: artImage; \n\
66+ sourceFillMode: UbuntuShape.PreserveAspectCrop; \n\
67+ radius: "medium"; \n\
68+ aspect: %1; \n\
69+ }';
70+
71+var kArtProportionalShapeCode = 'ProportionalShape { \n\
72+ anchors.left: parent.left; \n\
73+ anchors.right: parent.right; \n\
74+ source: artImage; \n\
75+ aspect: UbuntuShape.DropShadow; \n\
76+ }';
77+
6278// %1 is used as anchors of artShapeHolder
6379// %2 is used as image width
6480// %3 is used as image height
65−// %4 is whether the image or the Loader with the UbuntuShape/ProportionalShape should be visible
66−// %5 is used as aspect ratio fallback
67−// %6 is whether the loader should be asynchronous or not
81+// %4 is whether the image should be visible
82+// %5 is whether the loader should be asynchronous or not
83+// %6 is the shape code we want to use
6884// %7 is injected as code to artImage
6985// %8 is used as image fallback
7086var kArtShapeHolderCode = 'Item { \n\
7187 id: artShapeHolder; \n\
72− height: root.fixedArtShapeSize.height > 0 ? root.fixedArtShapeSize.height : artShapeLoader.height; \n\
73− width: root.fixedArtShapeSize.width > 0 ? root.fixedArtShapeSize.width : artShapeLoader.width; \n\
88+ height: root.fixedArtShapeSize.height; \n\
89+ width: root.fixedArtShapeSize.width; \n\
7490 anchors { %1 } \n\
7591 Loader { \n\
7692 id: artShapeLoader; \n\
7793 objectName: "artShapeLoader"; \n\
7894 readonly property string cardArt: cardData && cardData["art"] || %8; \n\
95+ onCardArtChanged: { if (item) { item.image.source = cardArt; } } \n\
7996 active: cardArt != ""; \n\
80− asynchronous: %6; \n\
97+ asynchronous: %5; \n\
8198 visible: status == Loader.Ready; \n\
8299 sourceComponent: Item { \n\
83100 id: artShape; \n\
84101 objectName: "artShape"; \n\
85102 visible: image.status == Image.Ready; \n\
86103 readonly property alias image: artImage; \n\
87− Loader { \n\
88− anchors.fill: parent; \n\
104+ %6 \n\
105+ width: root.fixedArtShapeSize.width; \n\
106+ height: root.fixedArtShapeSize.height; \n\
107+ CroppedImageMinimumSourceSize { \n\
108+ id: artImage; \n\
109+ objectName: "artImage"; \n\
110+ source: artShapeLoader.cardArt; \n\
111+ asynchronous: %5; \n\
89112 visible: %4; \n\
90− sourceComponent: root.artShapeStyle === "icon" ? artShapeIconComponent : artShapeShapeComponent; \n\
91− Component { \n\
92− id: artShapeShapeComponent; \n\
93− UbuntuShape { \n\
94− source: artImage; \n\
95− sourceFillMode: UbuntuShape.PreserveAspectCrop; \n\
96− radius: "medium"; \n\
97− aspect: { \n\
98− switch (root.artShapeStyle) { \n\
99− case "inset": return UbuntuShape.Inset; \n\
100− case "shadow": return UbuntuShape.DropShadow; \n\
101− default: \n\
102− case "flat": return UbuntuShape.Flat; \n\
103− } \n\
104− } \n\
105− } \n\
106− } \n\
107− Component { \n\
108− id: artShapeIconComponent; \n\
109− ProportionalShape { source: artImage; aspect: UbuntuShape.DropShadow; } \n\
110− } \n\
111− } \n\
112− readonly property real fixedArtShapeSizeAspect: (root.fixedArtShapeSize.height > 0 && root.fixedArtShapeSize.width > 0) ? root.fixedArtShapeSize.width / root.fixedArtShapeSize.height : -1; \n\
113− readonly property real aspect: fixedArtShapeSizeAspect > 0 ? fixedArtShapeSizeAspect : %5; \n\
114− Component.onCompleted: { updateWidthHeightBindings(); } \n\
115− Connections { target: root; onFixedArtShapeSizeChanged: updateWidthHeightBindings(); } \n\
116− function updateWidthHeightBindings() { \n\
117− if (root.fixedArtShapeSize.height > 0 && root.fixedArtShapeSize.width > 0) { \n\
118− width = root.fixedArtShapeSize.width; \n\
119− height = root.fixedArtShapeSize.height; \n\
120− } else { \n\
121− width = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.width }); \n\
122− height = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.height }); \n\
123− } \n\
113+ width: %2; \n\
114+ height: %3; \n\
115+ %7 \n\
124116 } \n\
117+ } \n\
118+ } \n\
119+ }\n';
120+
121+// %1 is used as anchors of artShapeHolder
122+// %2 is used as image width
123+// %3 is used as image height
124+// %4 is whether the image should be visible
125+// %5 is whether the loader should be asynchronous or not
126+// %6 is the shape code we want to use
127+// %7 is injected as code to artImage
128+// %8 is used as image fallback
129+var kArtShapeHolderCodeCardToolCard = 'Item { \n\
130+ id: artShapeHolder; \n\
131+ height: artShapeLoader.height; \n\
132+ width: artShapeLoader.width; \n\
133+ anchors { %1 } \n\
134+ Loader { \n\
135+ id: artShapeLoader; \n\
136+ objectName: "artShapeLoader"; \n\
137+ readonly property string cardArt: cardData && cardData["art"] || %8; \n\
138+ onCardArtChanged: { if (item) { item.image.source = cardArt; } } \n\
139+ active: cardArt != ""; \n\
140+ asynchronous: %5; \n\
141+ visible: status == Loader.Ready; \n\
142+ sourceComponent: Item { \n\
143+ id: artShape; \n\
144+ objectName: "artShape"; \n\
145+ visible: image.status == Image.Ready; \n\
146+ readonly property alias image: artImage; \n\
147+ %6 \n\
148+ width: image.status !== Image.Ready ? 0 : image.width; \n\
149+ height: image.status !== Image.Ready ? 0 : image.height; \n\
125150 CroppedImageMinimumSourceSize { \n\
126151 id: artImage; \n\
127152 objectName: "artImage"; \n\
128153 source: artShapeLoader.cardArt; \n\
129− asynchronous: %6; \n\
130− visible: !%4; \n\
154+ asynchronous: %5; \n\
155+ visible: %4; \n\
131156 width: %2; \n\
132157 height: %3; \n\
133158 %7 \n\
@@ -318,7 +343,7 @@ var kTouchdownCode = 'UbuntuShape { \n\
318343 id: touchdown; \n\
319344 objectName: "touchdown"; \n\
320345 anchors { %1 } \n\
321− visible: root.artShapeStyle != "shadow" && root.artShapeStyle != "icon" && root.pressed; \n\
346+ visible: root.pressed; \n\
322347 radius: "medium"; \n\
323348 borderSource: "radius_pressed.sci" \n\
324349 }\n';
@@ -412,7 +437,7 @@ function sanitizeColor(colorString) {
412437 return colorString;
413438}
414439
415−function cardString(template, components, isCardTool) {
440+function cardString(template, components, isCardTool, artShapeStyle) {
416441 var code;
417442
418443 var templateInteractive = (template == null ? true : (template["non-interactive"] !== undefined ? !template["non-interactive"] : true)) ? "true" : "false";
@@ -420,19 +445,19 @@ function cardString(template, components, isCardTool) {
420445 code = 'AbstractButton { \n\
421446 id: root; \n\
422447 property var cardData; \n\
423− property string artShapeStyle: "inset"; \n\
424448 property string backgroundShapeStyle: "inset"; \n\
425449 property real fontScale: 1.0; \n\
426450 property var scopeStyle: null; \n\
427− %2\
428− property size fixedArtShapeSize: Qt.size(-1, -1); \n\
429451 readonly property string title: cardData && cardData["title"] || ""; \n\
430452 property bool showHeader: true; \n\
431453 implicitWidth: childrenRect.width; \n\
432454 enabled: %1; \n\
433455 \n'.arg(templateInteractive);
434456
435− code = code.arg(isCardTool ? "" : "property int fixedHeaderHeight: -1; \n");
457+ if (!isCardTool) {
458+ code += "property int fixedHeaderHeight: -1; \n\
459+ property size fixedArtShapeSize: Qt.size(-1, -1); \n";
460+ }
436461
437462 var hasArt = components["art"] && components["art"]["field"] || false;
438463 var hasSummary = components["summary"] || false;
@@ -491,47 +516,71 @@ function cardString(template, components, isCardTool) {
491516 if (hasArt) {
492517 code += 'readonly property size artShapeSize: artShapeLoader.item ? Qt.size(artShapeLoader.item.width, artShapeLoader.item.height) : Qt.size(-1, -1);\n';
493518
519+ var artShapeAspect;
520+ if (isCardTool) {
521+ var artShapeAspect = components["art"] && components["art"]["aspect-ratio"] || 1;
522+ if (isNaN(artShapeAspect)) {
523+ artShapeAspect = 1;
524+ }
525+ } else {
526+ artShapeAspect = "(root.fixedArtShapeSize.width / root.fixedArtShapeSize.height)";
527+ }
528+
494529 var widthCode, heightCode;
495530 var artAnchors;
496531 if (isHorizontal) {
497532 artAnchors = 'left: parent.left';
498533 if (hasMascot || hasTitle) {
499− widthCode = 'height * artShape.aspect'
534+ widthCode = 'height * ' + artShapeAspect;
500535 heightCode = 'headerHeight + 2 * units.gu(1)';
501536 } else {
502537 // This side of the else is a bit silly, who wants an horizontal layout without mascot and title?
503538 // So we define a "random" height of the image height + 2 gu for the margins
504− widthCode = 'height * artShape.aspect'
539+ widthCode = 'height * ' + artShapeAspect
505540 heightCode = 'units.gu(7.625)';
506541 }
507542 } else {
508543 artAnchors = 'horizontalCenter: parent.horizontalCenter;';
509544 widthCode = 'root.width'
510− heightCode = 'width / artShape.aspect';
545+ heightCode = 'width / ' + artShapeAspect;
511546 }
512547
513− var aspectRatio = components["art"] && components["art"]["aspect-ratio"] || 1;
514− if (isNaN(aspectRatio)) {
515− aspectRatio = 1;
516− }
517548 var fallback = !isCardTool && components["art"] && components["art"]["fallback"] || "";
518549 fallback = encodeURI(fallback);
519550 var fallbackStatusCode = "";
520551 var fallbackURICode = '""';
521552 if (fallback !== "") {
522− // fallbackStatusCode has %6 in it because we want to substitute it for fallbackURICode
553+ // fallbackStatusCode has %8 in it because we want to substitute it for fallbackURICode
523554 // which in kArtShapeHolderCode is %8
524555 fallbackStatusCode += 'onStatusChanged: if (status === Image.Error) source = %8;';
525556 fallbackURICode = 'decodeURI("%1")'.arg(fallback);
526557 }
527− code += kArtShapeHolderCode.arg(artAnchors)
528− .arg(widthCode)
529− .arg(heightCode)
530− .arg(isConciergeMode ? "false" : "true")
531− .arg(aspectRatio)
532− .arg(asynchronous)
533− .arg(fallbackStatusCode)
534− .arg(fallbackURICode);
558+ var artShapeHolderShapeCode;
559+ if (!isConciergeMode) {
560+ if (artShapeStyle === "icon") {
561+ artShapeHolderShapeCode = kArtProportionalShapeCode;
562+ } else {
563+ var artShapeHolderShapeAspect;
564+ switch (artShapeStyle) {
565+ case "inset": artShapeHolderShapeAspect = "UbuntuShape.Inset"; break;
566+ case "shadow": artShapeHolderShapeAspect = "UbuntuShape.DropShadow"; break;
567+ default:
568+ case "flat": artShapeHolderShapeAspect = "UbuntuShape.Flat"; break;
569+ }
570+ artShapeHolderShapeCode = kArtUbuntuShapeCode.arg(artShapeHolderShapeAspect);
571+ }
572+ } else {
573+ artShapeHolderShapeCode = "";
574+ }
575+ var artShapeHolderCode = isCardTool ? kArtShapeHolderCodeCardToolCard : kArtShapeHolderCode;
576+ code += artShapeHolderCode.arg(artAnchors)
577+ .arg(widthCode)
578+ .arg(heightCode)
579+ .arg(isConciergeMode ? "true" : "false")
580+ .arg(asynchronous)
581+ .arg(artShapeHolderShapeCode)
582+ .arg(fallbackStatusCode)
583+ .arg(fallbackURICode);
535584 } else {
536585 code += 'readonly property size artShapeSize: Qt.size(-1, -1);\n'
537586 }
@@ -882,15 +931,17 @@ function cardString(template, components, isCardTool) {
882931 code += kSocialActionsRowCode.arg(socialAnchors).arg(socialColor);
883932 }
884933
885− var touchdownAnchors;
886− if (hasBackground) {
887− touchdownAnchors = 'fill: backgroundLoader';
888− } else if (touchdownOnArtShape) {
889− touchdownAnchors = 'fill: artShapeHolder';
890− } else {
891− touchdownAnchors = 'fill: root'
934+ if (artShapeStyle != "shadow" && artShapeStyle != "icon") {
935+ var touchdownAnchors;
936+ if (hasBackground) {
937+ touchdownAnchors = 'fill: backgroundLoader';
938+ } else if (touchdownOnArtShape) {
939+ touchdownAnchors = 'fill: artShapeHolder';
940+ } else {
941+ touchdownAnchors = 'fill: root'
942+ }
943+ code += kTouchdownCode.arg(touchdownAnchors);
892944 }
893− code += kTouchdownCode.arg(touchdownAnchors);
894945
895946 var implicitHeight = 'implicitHeight: ';
896947 if (hasSocialActions) {
@@ -925,13 +976,13 @@ function cardString(template, components, isCardTool) {
925976 return code;
926977}
927978
928−function createCardComponent(parent, template, components, isCardTool, identifier) {
979+function createCardComponent(parent, template, components, isCardTool, artShapeStyle, identifier) {
929980 var imports = 'import QtQuick 2.4; \n\
930981 import Ubuntu.Components 1.3; \n\
931982 import Ubuntu.Settings.Components 0.1; \n\
932983 import Dash 0.1;\n\
933984 import Utils 0.1;\n';
934− var card = cardString(template, components, isCardTool);
985+ var card = cardString(template, components, isCardTool, artShapeStyle);
935986 var code = imports + 'Component {\n' + card + '}\n';
936987
937988 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, isCardTool) {
26+ function getCardComponent(template, components, isCardTool, artShapeStyle) {
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 + isCardTool;
32+ var allString = tString + cString + isCardTool + artShapeStyle;
3333 var component = cache[allString];
3434 if (component === undefined) {
35− component = CardCreator.createCardComponent(root, template, components, isCardTool, allString);
35+ component = CardCreator.createCardComponent(root, template, components, isCardTool, artShapeStyle, allString);
3636 cache[allString] = component;
3737 }
3838 return component;
plugins/Dash/Dash.qmltypesdeleted−100
@@ -1,100 +0,0 @@
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 Dash 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "AbstractDashView"
12− defaultProperty: "data"
13− prototype: "QQuickItem"
14− Property { name: "model"; type: "QAbstractItemModel"; isPointer: true }
15− Property { name: "delegate"; type: "QQmlComponent"; isPointer: true }
16− Property { name: "columnSpacing"; type: "double" }
17− Property { name: "rowSpacing"; type: "double" }
18− Property { name: "cacheBuffer"; type: "int" }
19− Property { name: "displayMarginBeginning"; type: "double" }
20− Property { name: "displayMarginEnd"; type: "double" }
21− }
22− Component {
23− name: "HorizontalJournal"
24− defaultProperty: "data"
25− prototype: "AbstractDashView"
26− exports: ["Dash/HorizontalJournal 0.1"]
27− exportMetaObjectRevisions: [0]
28− Property { name: "rowHeight"; type: "double" }
29− }
30− Component {
31− name: "ListViewWithPageHeader"
32− defaultProperty: "flickableData"
33− prototype: "QQuickFlickable"
34− exports: ["Dash/ListViewWithPageHeader 0.1"]
35− exportMetaObjectRevisions: [0]
36− Property { name: "model"; type: "QAbstractItemModel"; isPointer: true }
37− Property { name: "delegate"; type: "QQmlComponent"; isPointer: true }
38− Property { name: "pageHeader"; type: "QQuickItem"; isPointer: true }
39− Property { name: "sectionDelegate"; type: "QQmlComponent"; isPointer: true }
40− Property { name: "sectionProperty"; type: "string" }
41− Property { name: "forceNoClip"; type: "bool" }
42− Property { name: "stickyHeaderHeight"; type: "int"; isReadonly: true }
43− Property { name: "headerItemShownHeight"; type: "double"; isReadonly: true }
44− Property { name: "cacheBuffer"; type: "int" }
45− Signal { name: "headerChanged" }
46− Method { name: "positionAtBeginning" }
47− Method { name: "showHeader" }
48− Method { name: "firstCreatedIndex"; type: "int" }
49− Method { name: "createdItemCount"; type: "int" }
50− Method {
51− name: "item"
52− type: "QQuickItem*"
53− Parameter { name: "modelIndex"; type: "int" }
54− }
55− Method {
56− name: "maximizeVisibleArea"
57− type: "bool"
58− Parameter { name: "modelIndex"; type: "int" }
59− }
60− Method {
61− name: "maximizeVisibleArea"
62− type: "bool"
63− Parameter { name: "modelIndex"; type: "int" }
64− Parameter { name: "itemHeight"; type: "int" }
65− }
66− }
67− Component {
68− name: "OrganicGrid"
69− defaultProperty: "data"
70− prototype: "AbstractDashView"
71− exports: ["Dash/OrganicGrid 0.1"]
72− exportMetaObjectRevisions: [0]
73− Property { name: "smallDelegateSize"; type: "QSizeF" }
74− Property { name: "bigDelegateSize"; type: "QSizeF" }
75− }
76− Component {
77− name: "VerticalJournal"
78− defaultProperty: "data"
79− prototype: "AbstractDashView"
80− exports: ["Dash/VerticalJournal 0.1"]
81− exportMetaObjectRevisions: [0]
82− Property { name: "columnWidth"; type: "double" }
83− }
84− Component {
85− prototype: "QObject"
86− name: "CardCreatorCache"
87− exports: ["CardCreatorCache -1.-1"]
88− exportMetaObjectRevisions: [-1]
89− isComposite: true
90− isCreatable: false
91− isSingleton: true
92− Property { name: "cache"; type: "QVariant" }
93− Method {
94− name: "getCardComponent"
95− type: "QVariant"
96− Parameter { name: "template"; type: "QVariant" }
97− Parameter { name: "components"; type: "QVariant" }
98− }
99− }
100−}
plugins/Dash/ScopeStyle.qml+1−1
@@ -70,7 +70,7 @@ QtObject {
7070 readonly property url navigationBackground: "navigation-background" in d.headerStyle ? d.headerStyle["navigation-background"] : "color:///#f5f5f5"
7171
7272 /// Color of the primary preview button
73− readonly property color previewButtonColor: "preview-button-color" in style ? style["preview-button-color"] : UbuntuColors.orange
73+ readonly property color previewButtonColor: "preview-button-color" in style ? style["preview-button-color"] : theme.palette.normal.positive
7474
7575 //! @cond
7676 property var d: QtObject {
plugins/Dash/abstractdashview.h+1−3
@@ -21,11 +21,9 @@
2121
2222class QAbstractItemModel;
2323class QQmlComponent;
24−#pragma GCC diagnostic push
25−#pragma GCC diagnostic ignored "-pedantic"
24+
2625#include <private/qqmldelegatemodel_p.h>
2726#include <qqmlinfo.h>
28−#pragma GCC diagnostic pop
2927
3028class AbstractDashView : public QQuickItem
3129{
plugins/Dash/graphics/music_progress_bg.png

Binary file not shown.

plugins/Dash/horizontaljournal.cpp+1−4
@@ -26,12 +26,9 @@
2626#include "horizontaljournal.h"
2727
2828#include <qqmlengine.h>
29−#pragma GCC diagnostic push
30−#pragma GCC diagnostic ignored "-pedantic"
31−#include <private/qqmldelegatemodel_p.h>
3229#include <qqmlinfo.h>
30+#include <private/qqmldelegatemodel_p.h>
3331#include <private/qquickitem_p.h>
34−#pragma GCC diagnostic pop
3532
3633HorizontalJournal::HorizontalJournal()
3734 : m_firstVisibleIndex(-1)
plugins/Dash/listviewwithpageheader.cpp+28−25
@@ -95,13 +95,11 @@
9595#include <QDebug>
9696#include <qqmlinfo.h>
9797#include <qqmlengine.h>
98−#pragma GCC diagnostic push
99−#pragma GCC diagnostic ignored "-pedantic"
98+#include <private/qqmlcontext_p.h>
10099#include <private/qqmldelegatemodel_p.h>
101100#include <private/qqmlglobal_p.h>
102101#include <private/qquickitem_p.h>
103102#include <private/qquickanimation_p.h>
104−#pragma GCC diagnostic pop
105103// #include <private/qquickrectangle_p.h>
106104
107105qreal ListViewWithPageHeader::ListItem::height() const
@@ -168,7 +166,7 @@ ListViewWithPageHeader::ListViewWithPageHeader()
168166 m_contentYAnimation->setDuration(200);
169167 m_contentYAnimation->setTargetObject(this);
170168
171− connect(this, &ListViewWithPageHeader::contentWidthChanged, this, &ListViewWithPageHeader::onContentWidthChanged);
169+ connect(contentItem(), &QQuickItem::widthChanged, this, &ListViewWithPageHeader::onContentWidthChanged);
172170 connect(this, &ListViewWithPageHeader::contentHeightChanged, this, &ListViewWithPageHeader::onContentHeightChanged);
173171 connect(this, &ListViewWithPageHeader::heightChanged, this, &ListViewWithPageHeader::onHeightChanged);
174172 connect(m_contentYAnimation, &QQuickNumberAnimation::runningChanged, this, &ListViewWithPageHeader::contentYAnimationRunningChanged);
@@ -255,6 +253,7 @@ void ListViewWithPageHeader::setHeader(QQuickItem *headerItem)
255253 oldHeaderHeight = m_headerItem->height();
256254 oldHeaderY = m_headerItem->y();
257255 m_headerItem->setParentItem(nullptr);
256+ QQuickItemPrivate::get(m_headerItem)->removeItemChangeListener(this, QQuickItemPrivate::ImplicitHeight);
258257 }
259258 m_headerItem = headerItem;
260259 if (m_headerItem) {
@@ -286,9 +285,11 @@ void ListViewWithPageHeader::setSectionDelegate(QQmlComponent *delegate)
286285 m_sectionDelegate = delegate;
287286
288287 m_topSectionItem = getSectionItem(QString(), false /*watchGeometry*/);
289− m_topSectionItem->setZ(3);
290− QQuickItemPrivate::get(m_topSectionItem)->setCulled(true);
291− connect(m_topSectionItem, &QQuickItem::heightChanged, this, &ListViewWithPageHeader::stickyHeaderHeightChanged);
288+ if (m_topSectionItem) {
289+ m_topSectionItem->setZ(3);
290+ QQuickItemPrivate::get(m_topSectionItem)->setCulled(true);
291+ connect(m_topSectionItem, &QQuickItem::heightChanged, this, &ListViewWithPageHeader::stickyHeaderHeightChanged);
292+ }
292293
293294 // TODO create sections for existing items
294295
@@ -699,7 +700,9 @@ void ListViewWithPageHeader::reallyReleaseItem(ListItem *listItem)
699700 if (flags & QQmlDelegateModel::Destroyed) {
700701 item->setParentItem(nullptr);
701702 }
702− listItem->sectionItem()->deleteLater();
703+ if (listItem->sectionItem()) {
704+ listItem->sectionItem()->deleteLater();
705+ }
703706 delete listItem;
704707}
705708
@@ -757,8 +760,6 @@ QQuickItem *ListViewWithPageHeader::getSectionItem(const QString &sectionText, b
757760
758761 QQmlContext *creationContext = m_sectionDelegate->creationContext();
759762 QQmlContext *context = new QQmlContext(creationContext ? creationContext : qmlContext(this));
760− context->setContextProperty(QStringLiteral("section"), sectionText);
761− context->setContextProperty(QStringLiteral("delegateIndex"), -1);
762763 QObject *nobj = m_sectionDelegate->beginCreate(context);
763764 if (nobj) {
764765 QQml_setParent_noEvent(context, nobj);
@@ -766,6 +767,8 @@ QQuickItem *ListViewWithPageHeader::getSectionItem(const QString &sectionText, b
766767 if (!sectionItem) {
767768 delete nobj;
768769 } else {
770+ sectionItem->setProperty("text", sectionText);
771+ sectionItem->setProperty("delegateIndex", -1);
769772 sectionItem->setZ(2);
770773 QQml_setParent_noEvent(sectionItem, m_clipItem);
771774 sectionItem->setParentItem(m_clipItem);
@@ -775,7 +778,7 @@ QQuickItem *ListViewWithPageHeader::getSectionItem(const QString &sectionText, b
775778 }
776779 m_sectionDelegate->completeCreate();
777780
778− if (watchGeometry) {
781+ if (watchGeometry && sectionItem) {
779782 QQuickItemPrivate::get(sectionItem)->addItemChangeListener(this, QQuickItemPrivate::Geometry);
780783 }
781784
@@ -801,8 +804,7 @@ void ListViewWithPageHeader::updateSectionItem(int modelIndex)
801804 if (!item->sectionItem()) {
802805 item->setSectionItem(getSectionItem(sectionText));
803806 } else {
804− QQmlContext *context = QQmlEngine::contextForObject(item->sectionItem())->parentContext();
805− context->setContextProperty(QStringLiteral("section"), sectionText);
807+ item->sectionItem()->setProperty("text", sectionText);
806808 }
807809 } else {
808810 if (item->sectionItem()) {
@@ -923,8 +925,7 @@ ListViewWithPageHeader::ListItem *ListViewWithPageHeader::createItem(int modelIn
923925 polish();
924926 }
925927 if (listItem->sectionItem()) {
926− QQmlContext *context = QQmlEngine::contextForObject(listItem->sectionItem())->parentContext();
927− context->setContextProperty(QStringLiteral("delegateIndex"), modelIndex);
928+ listItem->sectionItem()->setProperty("delegateIndex", modelIndex);
928929 }
929930 adjustMinYExtent();
930931 m_contentHeightDirty = true;
@@ -948,9 +949,10 @@ void ListViewWithPageHeader::itemCreated(int modelIndex, QObject *object)
948949 return;
949950
950951 item->setParentItem(m_clipItem);
952+ // FIXME Why do we need the refreshExpressions call?
951953 QQmlContext *context = QQmlEngine::contextForObject(item)->parentContext();
952− context->setContextProperty(QStringLiteral("ListViewWithPageHeader"), this);
953− context->setContextProperty(QStringLiteral("heightToClip"), QVariant::fromValue<int>(0));
954+ QQmlContextPrivate::get(context)->data->refreshExpressions();
955+ item->setProperty("heightToClip", QVariant::fromValue<int>(0));
954956 if (modelIndex == m_asyncRequestedIndex) {
955957 createItem(modelIndex, false);
956958 refill();
@@ -1116,8 +1118,7 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
11161118 for (int i = 0; i < m_visibleItems.count(); ++i) {
11171119 ListItem *item = m_visibleItems[i];
11181120 if (item->sectionItem()) {
1119− QQmlContext *context = QQmlEngine::contextForObject(item->sectionItem())->parentContext();
1120− context->setContextProperty(QStringLiteral("delegateIndex"), m_firstVisibleIndex + i);
1121+ item->sectionItem()->setProperty("delegateIndex", m_firstVisibleIndex + i);
11211122 }
11221123 }
11231124
@@ -1287,8 +1288,7 @@ void ListViewWithPageHeader::layout()
12871288 } else {
12881289 // Update the top sticky section header
12891290 const QString section = m_delegateModel->stringValue(modelIndex, m_sectionProperty);
1290− QQmlContext *context = QQmlEngine::contextForObject(m_topSectionItem)->parentContext();
1291− context->setContextProperty(QStringLiteral("section"), section);
1291+ m_topSectionItem->setProperty("text", section);
12921292
12931293 QQuickItemPrivate::get(m_topSectionItem)->setCulled(false);
12941294 m_topSectionItem->setY(topSectionStickPos);
@@ -1300,19 +1300,18 @@ void ListViewWithPageHeader::layout()
13001300 break;
13011301 delegateIndex--;
13021302 }
1303− context->setContextProperty(QStringLiteral("delegateIndex"), delegateIndex);
1303+ m_topSectionItem->setProperty("delegateIndex", delegateIndex);
13041304 if (item->sectionItem()) {
13051305 QQuickItemPrivate::get(item->sectionItem())->setCulled(true);
13061306 }
13071307 }
13081308 }
13091309 }
1310− QQmlContext *context = QQmlEngine::contextForObject(item->m_item)->parentContext();
13111310 const qreal clipFrom = visibleFrom + (!item->sectionItem() && m_topSectionItem && !QQuickItemPrivate::get(m_topSectionItem)->culled ? m_topSectionItem->height() : 0);
13121311 if (!cull && pos < clipFrom) {
1313− context->setContextProperty(QStringLiteral("heightToClip"), clipFrom - pos);
1312+ item->m_item->setProperty("heightToClip", clipFrom - pos);
13141313 } else {
1315− context->setContextProperty(QStringLiteral("heightToClip"), QVariant::fromValue<int>(0));
1314+ item->m_item->setProperty("heightToClip", QVariant::fromValue<int>(0));
13161315 }
13171316// qDebug() << "ListViewWithPageHeader::layout" << item->m_item;
13181317 pos += item->height();
@@ -1335,6 +1334,10 @@ void ListViewWithPageHeader::layout()
13351334 }
13361335 }
13371336 }
1337+ if (m_headerItem) {
1338+ const bool cullHeader = m_headerItem->y() + m_headerItem->height() < contentY();
1339+ QQuickItemPrivate::get(m_headerItem)->setCulled(cullHeader);
1340+ }
13381341 m_inLayout = false;
13391342}
13401343
plugins/Dash/organicgrid.cpp−3
@@ -16,10 +16,7 @@
1616
1717#include "organicgrid.h"
1818
19−#pragma GCC diagnostic push
20−#pragma GCC diagnostic ignored "-pedantic"
2119#include <private/qquickitem_p.h>
22−#pragma GCC diagnostic pop
2320
2421OrganicGrid::OrganicGrid()
2522 : m_firstVisibleIndex(-1)
plugins/Dash/verticaljournal.cpp−3
@@ -27,10 +27,7 @@
2727 */
2828#include "verticaljournal.h"
2929
30−#pragma GCC diagnostic push
31−#pragma GCC diagnostic ignored "-pedantic"
3230#include <private/qquickitem_p.h>
33−#pragma GCC diagnostic pop
3431
3532VerticalJournal::VerticalJournal()
3633 : m_columnWidth(0)
plugins/GlobalShortcut/GlobalShortcut.qmltypesdeleted−31
@@ -1,31 +0,0 @@
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/Greeter/Unity/Launcher/CMakeLists.txt+1−1
@@ -1,4 +1,4 @@
1−pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=7)
1+pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=9)
22pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
33
44add_definitions(-DSM_BUSNAME=systemBus)
plugins/Greeter/Unity/Launcher/Launcher.qmltypesdeleted−182
@@ -1,182 +0,0 @@
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.Launcher 0.1 plugins/Greeter'
8−
9−Module {
10− Component {
11− name: "LauncherItem"
12− prototype: "unity::shell::launcher::LauncherItemInterface"
13− exports: ["Unity.Launcher/LauncherItem 0.1"]
14− isCreatable: false
15− exportMetaObjectRevisions: [0]
16− }
17− Component {
18− name: "LauncherModel"
19− prototype: "unity::shell::launcher::LauncherModelInterface"
20− exports: ["Unity.Launcher/LauncherModel 0.1"]
21− isCreatable: false
22− isSingleton: true
23− exportMetaObjectRevisions: [0]
24− Method {
25− name: "requestRemove"
26− Parameter { name: "appId"; type: "string" }
27− }
28− Method { name: "refresh" }
29− Method {
30− name: "get"
31− type: "unity::shell::launcher::LauncherItemInterface*"
32− Parameter { name: "index"; type: "int" }
33− }
34− Method {
35− name: "move"
36− Parameter { name: "oldIndex"; type: "int" }
37− Parameter { name: "newIndex"; type: "int" }
38− }
39− Method {
40− name: "pin"
41− Parameter { name: "appId"; type: "string" }
42− Parameter { name: "index"; type: "int" }
43− }
44− Method {
45− name: "pin"
46− Parameter { name: "appId"; type: "string" }
47− }
48− Method {
49− name: "quickListActionInvoked"
50− Parameter { name: "appId"; type: "string" }
51− Parameter { name: "actionIndex"; type: "int" }
52− }
53− Method {
54− name: "setUser"
55− Parameter { name: "username"; type: "string" }
56− }
57− Method {
58− name: "getUrlForAppId"
59− type: "string"
60− Parameter { name: "appId"; type: "string" }
61− }
62− }
63− Component {
64− name: "QuickListModel"
65− prototype: "unity::shell::launcher::QuickListModelInterface"
66− exports: ["Unity.Launcher/QuickListModel 0.1"]
67− isCreatable: false
68− exportMetaObjectRevisions: [0]
69− }
70− Component {
71− name: "unity::shell::launcher::LauncherItemInterface"
72− prototype: "QObject"
73− exports: ["Unity.Launcher/LauncherItemInterface 0.1"]
74− isCreatable: false
75− exportMetaObjectRevisions: [0]
76− Property { name: "appId"; type: "string"; isReadonly: true }
77− Property { name: "name"; type: "string"; isReadonly: true }
78− Property { name: "icon"; type: "string"; isReadonly: true }
79− Property { name: "pinned"; type: "bool"; isReadonly: true }
80− Property { name: "running"; type: "bool"; isReadonly: true }
81− Property { name: "recent"; type: "bool"; isReadonly: true }
82− Property { name: "progress"; type: "int"; isReadonly: true }
83− Property { name: "count"; type: "int"; isReadonly: true }
84− Property { name: "countVisible"; type: "bool"; isReadonly: true }
85− Property { name: "focused"; type: "bool"; isReadonly: true }
86− Property {
87− name: "quickList"
88− type: "unity::shell::launcher::QuickListModelInterface"
89− isReadonly: true
90− isPointer: true
91− }
92− Signal {
93− name: "nameChanged"
94− Parameter { name: "name"; type: "string" }
95− }
96− Signal {
97− name: "iconChanged"
98− Parameter { name: "icon"; type: "string" }
99− }
100− Signal {
101− name: "pinnedChanged"
102− Parameter { name: "pinned"; type: "bool" }
103− }
104− Signal {
105− name: "runningChanged"
106− Parameter { name: "running"; type: "bool" }
107− }
108− Signal {
109− name: "recentChanged"
110− Parameter { name: "running"; type: "bool" }
111− }
112− Signal {
113− name: "progressChanged"
114− Parameter { name: "progress"; type: "int" }
115− }
116− Signal {
117− name: "countChanged"
118− Parameter { name: "count"; type: "int" }
119− }
120− Signal {
121− name: "countVisibleChanged"
122− Parameter { name: "countVisible"; type: "bool" }
123− }
124− Signal {
125− name: "focusedChanged"
126− Parameter { name: "focused"; type: "bool" }
127− }
128− }
129− Component {
130− name: "unity::shell::launcher::LauncherModelInterface"
131− prototype: "QAbstractListModel"
132− exports: ["Unity.Launcher/LauncherModelInterface 0.1"]
133− isCreatable: false
134− exportMetaObjectRevisions: [0]
135− Property {
136− name: "applicationManager"
137− type: "unity::shell::application::ApplicationManagerInterface"
138− isPointer: true
139− }
140− Property { name: "onlyPinned"; type: "bool" }
141− Signal { name: "hint" }
142− Method {
143− name: "move"
144− Parameter { name: "oldIndex"; type: "int" }
145− Parameter { name: "newIndex"; type: "int" }
146− }
147− Method {
148− name: "get"
149− type: "unity::shell::launcher::LauncherItemInterface*"
150− Parameter { name: "index"; type: "int" }
151− }
152− Method {
153− name: "pin"
154− Parameter { name: "appId"; type: "string" }
155− Parameter { name: "index"; type: "int" }
156− }
157− Method {
158− name: "pin"
159− Parameter { name: "appId"; type: "string" }
160− }
161− Method {
162− name: "requestRemove"
163− Parameter { name: "appId"; type: "string" }
164− }
165− Method {
166− name: "quickListActionInvoked"
167− Parameter { name: "appId"; type: "string" }
168− Parameter { name: "actionIndex"; type: "int" }
169− }
170− Method {
171− name: "setUser"
172− Parameter { name: "username"; type: "string" }
173− }
174− }
175− Component {
176− name: "unity::shell::launcher::QuickListModelInterface"
177− prototype: "QAbstractListModel"
178− exports: ["Unity.Launcher/QuickListInterface 0.1"]
179− isCreatable: false
180− exportMetaObjectRevisions: [0]
181− }
182−}
plugins/Greeter/Unity/Launcher/launcheritem.cpp+14
@@ -32,6 +32,7 @@ LauncherItem::LauncherItem(const QString &appId, const QString &name, const QStr
3232 m_countVisible(false),
3333 m_focused(false),
3434 m_alerting(false),
35+ m_surfaceCount(0),
3536 m_quickList(new QuickListModel(this))
3637{
3738 QuickListEntry nameAction;
@@ -179,6 +180,19 @@ void LauncherItem::setAlerting(bool alerting)
179180 }
180181}
181182
183+int LauncherItem::surfaceCount() const
184+{
185+ return m_surfaceCount;
186+}
187+
188+void LauncherItem::setSurfaceCount(int surfaceCount)
189+{
190+ if (m_surfaceCount != surfaceCount) {
191+ m_surfaceCount = surfaceCount;
192+ Q_EMIT surfaceCountChanged(surfaceCount);
193+ }
194+}
195+
182196unity::shell::launcher::QuickListModelInterface *LauncherItem::quickList() const
183197{
184198 return m_quickList;
plugins/Greeter/Unity/Launcher/launcheritem.h+3−1
@@ -42,6 +42,7 @@ public:
4242 bool countVisible() const override;
4343 bool focused() const override;
4444 bool alerting() const override;
45+ int surfaceCount() const override;
4546
4647 unity::shell::launcher::QuickListModelInterface *quickList() const override;
4748
@@ -56,7 +57,7 @@ private:
5657 void setCountVisible(bool countVisible);
5758 void setFocused(bool focused);
5859 void setAlerting(bool alerting);
59−
60+ void setSurfaceCount(int surfaceCount);
6061
6162private:
6263 QString m_appId;
@@ -70,6 +71,7 @@ private:
7071 bool m_countVisible;
7172 bool m_focused;
7273 bool m_alerting;
74+ int m_surfaceCount;
7375 QuickListModel *m_quickList;
7476
7577 friend class LauncherModel;
plugins/Greeter/Unity/Launcher/launchermodelas.cpp+2−7
@@ -69,18 +69,13 @@ QVariant LauncherModel::data(const QModelIndex &index, int role) const
6969 return item->focused();
7070 case RoleRunning:
7171 return item->running();
72+ case RoleSurfaceCount:
73+ return item->surfaceCount();
7274 }
7375
7476 return QVariant();
7577}
7678
77−void LauncherModel::setAlerting(const QString &appId, bool alerting)
78−{
79− Q_UNUSED(appId)
80− Q_UNUSED(alerting)
81− qWarning() << "This is a read only implementation. Cannot set alert-state of items.";
82−}
83−
8479unity::shell::launcher::LauncherItemInterface *LauncherModel::get(int index) const
8580{
8681 if (index < 0 || index >= m_list.count()) {
plugins/Greeter/Unity/Launcher/launchermodelas.h−1
@@ -41,7 +41,6 @@ public:
4141
4242 QVariant data(const QModelIndex &index, int role) const override;
4343
44− Q_INVOKABLE void setAlerting(const QString &appId, bool alerting) override;
4544 Q_INVOKABLE unity::shell::launcher::LauncherItemInterface* get(int index) const override;
4645 Q_INVOKABLE void move(int oldIndex, int newIndex) override;
4746 Q_INVOKABLE void pin(const QString &appId, int index = -1) override;
plugins/IntegratedLightDM/CMakeLists.txtdeleted−40
@@ -1,40 +0,0 @@
1−pkg_check_modules(LIBUSERMETRICSOUTPUT REQUIRED libusermetricsoutput-1)
2−# TODO: Once we split out a separate greeter process, uncomment these lines
3−#pkg_check_modules(LIBLIGHTDM REQUIRED liblightdm-qt5-2)
4−
5−add_subdirectory(liblightdm)
6−
7−include_directories(
8− ${CMAKE_CURRENT_SOURCE_DIR}
9− ${CMAKE_CURRENT_BINARY_DIR}
10− ${CMAKE_SOURCE_DIR}/plugins/Utils
11− ${CMAKE_SOURCE_DIR}/tests/mocks/IntegratedLightDM
12− #${LIBLIGHTDM_INCLUDE_DIRS}
13− ${libunity8-private_SOURCE_DIR}
14− ${LIBUSERMETRICSOUTPUT_INCLUDE_DIRS}
15−)
16−
17−set(QMLPLUGIN_SRC
18− ../Utils/unitysortfilterproxymodelqml.cpp # FIXME evaluate a more generic approach for using other plugins
19− DBusGreeter.cpp
20− DBusGreeterList.cpp
21− Greeter.cpp
22− plugin.cpp
23− UsersModel.cpp
24− )
25−
26−add_library(IntegratedLightDM-qml MODULE
27− ${QMLPLUGIN_SRC}
28− )
29−
30−target_link_libraries(IntegratedLightDM-qml
31− integratedLightDM
32− unity8-private
33−# TODO: Once we split out a separate greeter process, uncomment these lines
34−# ${LIBLIGHTDM_LDFLAGS}
35− ${LIBUSERMETRICSOUTPUT_LDFLAGS}
36− )
37−
38−qt5_use_modules(IntegratedLightDM-qml DBus Gui Qml)
39−
40−add_unity8_plugin(IntegratedLightDM 0.1 IntegratedLightDM TARGETS IntegratedLightDM-qml)
plugins/LightDM/CMakeLists.txtnew file+26
@@ -0,0 +1,26 @@
1+pkg_check_modules(LIBUSERMETRICSOUTPUT REQUIRED libusermetricsoutput-1)
2+
3+find_package(Qt5Core REQUIRED)
4+find_package(Qt5Quick REQUIRED)
5+
6+include_directories(
7+ ${CMAKE_CURRENT_SOURCE_DIR}
8+ ${CMAKE_CURRENT_BINARY_DIR}
9+ ${CMAKE_SOURCE_DIR}/plugins/Utils
10+ ${CMAKE_BINARY_DIR}/tests/mocks/LightDM/IntegratedLightDM
11+ ${libunity8-private_SOURCE_DIR}
12+ ${LIBUSERMETRICSOUTPUT_INCLUDE_DIRS}
13+)
14+
15+set(QMLPLUGIN_SRC
16+ ../Utils/unitysortfilterproxymodelqml.cpp
17+ DBusGreeter.cpp
18+ DBusGreeterList.cpp
19+ Greeter.cpp
20+ plugin.cpp
21+ SessionsModel.cpp
22+ UsersModel.cpp
23+ )
24+
25+add_subdirectory(FullLightDM)
26+add_subdirectory(IntegratedLightDM)
plugins/IntegratedLightDM/DBusGreeter.cpp → plugins/LightDM/DBusGreeter.cpprenamed+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
55 * it under the terms of the GNU General Public License as published by
@@ -24,7 +24,8 @@ DBusGreeter::DBusGreeter(Greeter *greeter, const QString &path)
2424 : UnityDBusObject(path, QStringLiteral("com.canonical.UnityGreeter"), true, greeter),
2525 m_greeter(greeter)
2626{
27− connect(m_greeter, &Greeter::isActiveChanged, this, &DBusGreeter::isActiveChangedHandler);
27+ connect(m_greeter, &Greeter::isActiveChanged,
28+ this, &DBusGreeter::isActiveChangedHandler);
2829}
2930
3031bool DBusGreeter::isActive() const
@@ -34,12 +35,12 @@ bool DBusGreeter::isActive() const
3435
3536void DBusGreeter::ShowGreeter()
3637{
37− return Q_EMIT m_greeter->showGreeter();
38+ Q_EMIT m_greeter->showGreeter();
3839}
3940
4041void DBusGreeter::HideGreeter()
4142{
42− return Q_EMIT m_greeter->hideGreeter();
43+ Q_EMIT m_greeter->hideGreeter();
4344}
4445
4546void DBusGreeter::isActiveChangedHandler()
plugins/IntegratedLightDM/DBusGreeter.h → plugins/LightDM/DBusGreeter.hrenamed

The content is the same.

plugins/IntegratedLightDM/DBusGreeterList.cpp → plugins/LightDM/DBusGreeterList.cpprenamed

The content is the same.

plugins/IntegratedLightDM/DBusGreeterList.h → plugins/LightDM/DBusGreeterList.hrenamed

The content is the same.

plugins/LightDM/FullLightDM/CMakeLists.txtnew file+28
@@ -0,0 +1,28 @@
1+pkg_check_modules(LIBLIGHTDM REQUIRED liblightdm-qt5-3)
2+
3+set(PLUGIN_CLASSNAME "FullLightDM")
4+
5+add_definitions(-DFULL_LIGHTDM)
6+
7+include_directories(
8+ ../
9+ ${LIBLIGHTDM_INCLUDE_DIRS}
10+ ${CMAKE_CURRENT_BINARY_DIR}
11+ )
12+
13+foreach(source_file ${QMLPLUGIN_SRC})
14+ list(APPEND RELATIVE_QMLPLUGIN_SRC ../${source_file})
15+endforeach()
16+
17+add_library(FullLightDM-qml MODULE
18+ ${RELATIVE_QMLPLUGIN_SRC}
19+ )
20+
21+target_link_libraries(FullLightDM-qml
22+ unity8-private
23+ ${LIBLIGHTDM_LDFLAGS}
24+ ${LIBUSERMETRICSOUTPUT_LDFLAGS}
25+ )
26+
27+qt5_use_modules(FullLightDM-qml DBus Gui Qml)
28+add_unity8_plugin(FullLightDM 0.1 LightDM/FullLightDM TARGETS FullLightDM-qml)
plugins/LightDM/FullLightDM/qmldirnew file+3
@@ -0,0 +1,3 @@
1+module LightDM.FullLightDM
2+plugin FullLightDM-qml
3+typeinfo FullLightDM.qmltypes
plugins/IntegratedLightDM/Greeter.cpp → plugins/LightDM/Greeter.cpprenamed+13−2
@@ -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
@@ -13,7 +13,6 @@
1313 * You should have received a copy of the GNU General Public License
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1515 *
16− * Author: Michael Terry <michael.terry@canonical.com>
1716 */
1817
1918#include "Greeter.h"
@@ -72,12 +71,24 @@ QString Greeter::authenticationUser() const
7271 return d->m_greeter->authenticationUser();
7372}
7473
74+QString Greeter::defaultSessionHint() const
75+{
76+ Q_D(const Greeter);
77+ return d->m_greeter->defaultSessionHint();
78+}
79+
7580bool Greeter::promptless() const
7681{
7782 Q_D(const Greeter);
7883 return d->promptless;
7984}
8085
86+QString Greeter::selectUser() const
87+{
88+ Q_D(const Greeter);
89+ return d->m_greeter->selectUserHint();
90+}
91+
8192void Greeter::authenticate(const QString &username)
8293{
8394 Q_D(Greeter);
plugins/IntegratedLightDM/Greeter.h → plugins/LightDM/Greeter.hrenamed+5−2
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2012,2013 Canonical, Ltd.
2+ * Copyright (C) 2012,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
@@ -13,7 +13,6 @@
1313 * You should have received a copy of the GNU General Public License
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1515 *
16− * Authors: Michael Terry <michael.terry@canonical.com>
1716 */
1817
1918/* This class is a really tiny filter around QLightDM::Greeter. There are some
@@ -37,7 +36,9 @@ class Greeter : public QObject
3736 Q_PROPERTY(bool active READ isActive WRITE setIsActive NOTIFY isActiveChanged)
3837 Q_PROPERTY(bool authenticated READ isAuthenticated NOTIFY isAuthenticatedChanged)
3938 Q_PROPERTY(QString authenticationUser READ authenticationUser NOTIFY authenticationUserChanged)
39+ Q_PROPERTY(QString defaultSession READ defaultSessionHint CONSTANT)
4040 Q_PROPERTY(bool promptless READ promptless NOTIFY promptlessChanged)
41+ Q_PROPERTY(QString selectUser READ selectUser CONSTANT)
4142
4243public:
4344 explicit Greeter(QObject* parent=0);
@@ -45,7 +46,9 @@ public:
4546 bool isActive() const;
4647 bool isAuthenticated() const;
4748 QString authenticationUser() const;
49+ QString defaultSessionHint() const;
4850 bool promptless() const;
51+ QString selectUser() const;
4952
5053public Q_SLOTS:
5154 void authenticate(const QString &username=QString());
plugins/IntegratedLightDM/GreeterPrivate.h → plugins/LightDM/GreeterPrivate.hrenamed

The content is the same.

plugins/IntegratedLightDM/IntegratedLightDM.qmltypes → plugins/LightDM/IntegratedLightDM.qmltypesrenamed

The content is the same.

plugins/LightDM/IntegratedLightDM/CMakeLists.txtnew file+33
@@ -0,0 +1,33 @@
1+set(PLUGIN_CLASSNAME "IntegratedLightDM")
2+
3+add_definitions(-DINTEGRATED_LIGHTDM)
4+
5+foreach(include_directory ${QMLPLUGIN_INCLUDES})
6+ list(APPEND RELATIVE_QMLPLUGIN_INCLUDES ../${include_directory})
7+endforeach()
8+
9+include_directories(
10+ . #QLightDM
11+ ${QMLPLUGIN_INCLUDES}
12+ ${libunity8-private_SOURCE_DIR}
13+ ${CMAKE_CURRENT_BINARY_DIR}
14+)
15+
16+foreach(source_file ${QMLPLUGIN_SRC})
17+ list(APPEND RELATIVE_QMLPLUGIN_SRC ../${source_file})
18+endforeach()
19+
20+add_library(IntegratedLightDM-qml MODULE
21+ ${RELATIVE_QMLPLUGIN_SRC}
22+ )
23+
24+target_link_libraries(IntegratedLightDM-qml
25+ integratedLightDM
26+ unity8-private
27+ ${LIBUSERMETRICSOUTPUT_LDFLAGS}
28+ )
29+
30+qt5_use_modules(IntegratedLightDM-qml DBus Gui Qml)
31+add_unity8_plugin(IntegratedLightDM 0.1 LightDM/IntegratedLightDM TARGETS IntegratedLightDM-qml)
32+
33+add_subdirectory(liblightdm)
plugins/LightDM/IntegratedLightDM/QLightDM/Greeternew file+17
@@ -0,0 +1,17 @@
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 "../liblightdm/Greeter.h"
plugins/LightDM/IntegratedLightDM/QLightDM/SessionsModelnew file+17
@@ -0,0 +1,17 @@
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 "../liblightdm/SessionsModel.h"
plugins/LightDM/IntegratedLightDM/QLightDM/UsersModelnew file+17
@@ -0,0 +1,17 @@
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 "../liblightdm/UsersModel.h"
plugins/IntegratedLightDM/liblightdm/CMakeLists.txt → plugins/LightDM/IntegratedLightDM/liblightdm/CMakeLists.txtrenamed+4−2
@@ -2,8 +2,10 @@ pkg_check_modules(LIBUSERMETRICSOUTPUT REQUIRED libusermetricsoutput-1)
22
33set(LibLightDM_SOURCES
44 Greeter.cpp
5+ SessionsModel.cpp
56 UsersModel.cpp
67 GreeterPrivate.cpp
8+ SessionsModelPrivate.cpp
79 UsersModelPrivate.cpp
810 ${CMAKE_SOURCE_DIR}/plugins/AccountsService/AccountsServiceDBusAdaptor.cpp
911 ${CMAKE_SOURCE_DIR}/plugins/Utils/qvariantlistmodel.cpp
@@ -46,8 +48,8 @@ set_target_properties(integratedLightDMSession PROPERTIES
4648 COMPILE_FLAGS "-DSM_BUSNAME=sessionBus -fPIC")
4749set_target_properties(MockLightDM-demo-shared PROPERTIES
4850 COMPILE_FLAGS "-DSM_BUSNAME=systemBus"
49− OUTPUT_NAME lightdm-qt5-2)
51+ OUTPUT_NAME lightdm-qt5-3)
5052
5153install(TARGETS MockLightDM-demo-shared
52− DESTINATION ${SHELL_INSTALL_QML}/mocks/IntegratedLightDM/demo
54+ DESTINATION ${SHELL_INSTALL_QML}/mocks/LightDM/IntegratedLightDM/demo
5355 )
plugins/IntegratedLightDM/liblightdm/Greeter.cpp → plugins/LightDM/IntegratedLightDM/liblightdm/Greeter.cpprenamed

The content is the same.

plugins/IntegratedLightDM/liblightdm/Greeter.h → plugins/LightDM/IntegratedLightDM/liblightdm/Greeter.hrenamed

The content is the same.

plugins/IntegratedLightDM/liblightdm/GreeterPrivate.cpp → plugins/LightDM/IntegratedLightDM/liblightdm/GreeterPrivate.cpprenamed+1−2
@@ -50,8 +50,7 @@ public:
5050 {
5151 qRegisterMetaType<QLightDM::GreeterImpl::ResponseFuture>("QLightDM::GreeterImpl::ResponseFuture");
5252
53− connect(&futureWatcher, &QFutureWatcher<int>::finished,
54− this, &GreeterImpl::finishPam);
53+ connect(&futureWatcher, &QFutureWatcher<int>::finished, this, &GreeterImpl::finishPam);
5554 connect(this, SIGNAL(showMessage(pam_handle *, QString, QLightDM::Greeter::MessageType)),
5655 this, SLOT(handleMessage(pam_handle *, QString, QLightDM::Greeter::MessageType)));
5756 // This next connect is how we pass ResponseFutures between threads
plugins/IntegratedLightDM/liblightdm/GreeterPrivate.h → plugins/LightDM/IntegratedLightDM/liblightdm/GreeterPrivate.hrenamed

The content is the same.

plugins/LightDM/IntegratedLightDM/liblightdm/SessionsModel.cppnew file+88
@@ -0,0 +1,88 @@
1+/*
2+ * Copyright (C) 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 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+
18+
19+/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
20+ * CHANGES MADE HERE MUST BE REFLECTED ON THE MOCK LIB
21+ * COUNTERPART IN tests/mocks/LightDM/IntegratedLightDM/liblightdm
22+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
23+
24+// LightDM currently is Qt4 compatible, and so doesn't define setRoleNames.
25+// To use the same method of setting role name that it does, we
26+// set our compatibility to Qt4 here too.
27+#define QT_DISABLE_DEPRECATED_BEFORE QT_VERSION_CHECK(4, 0, 0)
28+
29+#include "SessionsModel.h"
30+#include "SessionsModelPrivate.h"
31+#include <QtCore/QDir>
32+#include <QtCore/QString>
33+
34+namespace QLightDM
35+{
36+
37+SessionsModel::SessionsModel(QObject* parent) :
38+ QAbstractListModel(parent),
39+ d_ptr(new SessionsModelPrivate(this))
40+{
41+ Q_D(SessionsModel);
42+ m_roleNames = QAbstractListModel::roleNames();
43+ m_roleNames[KeyRole] = "key";
44+ m_roleNames[TypeRole] = "type";
45+}
46+
47+SessionsModel::~SessionsModel()
48+{
49+ delete d_ptr;
50+}
51+
52+QVariant SessionsModel::data(const QModelIndex& index, int role) const
53+{
54+ Q_D(const SessionsModel);
55+
56+ if(!index.isValid()) {
57+ return QVariant();
58+ }
59+
60+ int row = index.row();
61+
62+ switch (role) {
63+ case QLightDM::SessionsModel::KeyRole:
64+ return d->sessionItems[row].key;
65+ case Qt::DisplayRole:
66+ return d->sessionItems[row].name;
67+ default:
68+ return QVariant();
69+ }
70+}
71+
72+QHash<int, QByteArray> SessionsModel::roleNames() const
73+{
74+ return m_roleNames;
75+}
76+
77+int SessionsModel::rowCount(const QModelIndex& parent) const
78+{
79+ Q_D(const SessionsModel);
80+
81+ if (parent.isValid()) {
82+ return 0;
83+ } else { // parent is root
84+ return d->sessionItems.size();
85+ }
86+}
87+
88+} // namespace QLightDM
plugins/LightDM/IntegratedLightDM/liblightdm/SessionsModel.hnew file+72
@@ -0,0 +1,72 @@
1+/*
2+ * Copyright (C) 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 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+
18+#ifndef UNITY_INTEGRATED_SESSIONSMODEL_H
19+#define UNITY_INTEGRATED_SESSIONSMODEL_H
20+
21+#include <QtCore/QAbstractListModel>
22+#include <QtCore/QString>
23+
24+/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
25+ * CHANGES MADE HERE MUST BE REFLECTED ON THE MOCK LIB
26+ * COUNTERPART IN tests/mocks/LightDM/IntegratedLightDM/liblightdm
27+ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
28+
29+// This is taken from liblightdm and modified to confirm to our syle conventions
30+namespace QLightDM
31+{
32+class SessionsModelPrivate;
33+
34+class Q_DECL_EXPORT SessionsModel : public QAbstractListModel
35+ {
36+ Q_OBJECT
37+
38+ Q_ENUMS(SessionModelRoles SessionType)
39+
40+ public:
41+
42+ enum SessionModelRoles {
43+ //name is exposed as Qt::DisplayRole
44+ //comment is exposed as Qt::TooltipRole
45+ KeyRole = Qt::UserRole,
46+ IdRole = KeyRole, /** Deprecated */
47+ TypeRole
48+ };
49+
50+ enum SessionType {
51+ LocalSessions,
52+ RemoteSessions
53+ };
54+
55+ explicit SessionsModel(QObject* parent=0); /** Deprecated. Loads local sessions*/
56+ explicit SessionsModel(SessionsModel::SessionType, QObject* parent=0);
57+ virtual ~SessionsModel();
58+
59+ QHash<int, QByteArray> roleNames() const override;
60+ int rowCount(const QModelIndex& parent) const override;
61+ QVariant data(const QModelIndex& index, int role) const override;
62+
63+ protected:
64+ SessionsModelPrivate* const d_ptr;
65+
66+ private:
67+ QHash<int, QByteArray> m_roleNames;
68+ Q_DECLARE_PRIVATE(SessionsModel)
69+ };
70+}
71+
72+#endif // UNITY_INTEGRATED_SESSIONSMODEL_H
plugins/LightDM/IntegratedLightDM/liblightdm/SessionsModelPrivate.cppnew file+36
@@ -0,0 +1,36 @@
1+/*
2+ * Copyright (C) 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 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+
18+#include "SessionsModelPrivate.h"
19+
20+#include <QDir>
21+#include <QSettings>
22+#include <QStringList>
23+
24+namespace QLightDM
25+{
26+
27+SessionsModelPrivate::SessionsModelPrivate(SessionsModel* parent)
28+ : q_ptr(parent)
29+{
30+ // Since this model is never visible, as there is only 1 session,
31+ // just use the session name as the key
32+ QString sessionName = qgetenv("XDG_SESSION_DESKTOP");
33+ sessionItems.append({sessionName, "", sessionName, ""});
34+}
35+
36+} // namespace QLightDM
plugins/LightDM/IntegratedLightDM/liblightdm/SessionsModelPrivate.hnew file+54
@@ -0,0 +1,54 @@
1+/*
2+ * Copyright (C) 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 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+
18+#ifndef UNITY_INTEGRATED_SESSIONSMODEL_PRIVATE_H
19+#define UNITY_INTEGRATED_SESSIONSMODEL_PRIVATE_H
20+
21+#include <QtCore/QList>
22+#include <QtCore/QString>
23+
24+namespace QLightDM
25+{
26+class SessionsModel;
27+
28+class SessionItem
29+{
30+public:
31+ QString key;
32+ QString type; // unused
33+ QString name;
34+ QString comment; // unused
35+};
36+
37+class SessionsModelPrivate
38+{
39+public:
40+ explicit SessionsModelPrivate(SessionsModel* parent=0);
41+ virtual ~SessionsModelPrivate() = default;
42+
43+ QList<SessionItem> sessionItems;
44+
45+protected:
46+ SessionsModel* const q_ptr;
47+
48+private:
49+ Q_DECLARE_PUBLIC(SessionsModel)
50+};
51+
52+} // namespace QLightDM
53+
54+#endif // UNITY_INTEGRATED_SESSIONSMODEL_PRIVATE_H
plugins/IntegratedLightDM/liblightdm/UsersModel.cpp → plugins/LightDM/IntegratedLightDM/liblightdm/UsersModel.cpprenamed+4−1
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013-2016 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -52,6 +52,7 @@ UsersModel::UsersModel(QObject *parent) :
5252 roles[SessionRole] = "session";
5353 roles[HasMessagesRole] = "hasMessages";
5454 roles[ImagePathRole] = "imagePath";
55+ roles[UidRole] = "uid";
5556 setRoleNames(roles);
5657
5758 connect(d_ptr, &UsersModelPrivate::dataChanged, this, [this](int i) {
@@ -101,6 +102,8 @@ QVariant UsersModel::data(const QModelIndex &index, int role) const
101102 return d->entries[row].has_messages;
102103 case UsersModel::ImagePathRole:
103104 return "";
105+ case UsersModel::UidRole:
106+ return d->entries[row].uid;
104107 default:
105108 return QVariant();
106109 }
plugins/IntegratedLightDM/liblightdm/UsersModel.h → plugins/LightDM/IntegratedLightDM/liblightdm/UsersModel.hrenamed+2−1
@@ -50,7 +50,8 @@ public:
5050 SessionRole,
5151 HasMessagesRole,
5252 ImagePathRole,
53− BackgroundPathRole
53+ BackgroundPathRole,
54+ UidRole
5455 };
5556
5657 int rowCount(const QModelIndex &parent) const override;
plugins/IntegratedLightDM/liblightdm/UsersModelPrivate.cpp → plugins/LightDM/IntegratedLightDM/liblightdm/UsersModelPrivate.cpprenamed+5−3
@@ -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
@@ -26,6 +26,7 @@
2626#include <QDir>
2727#include <QSettings>
2828#include <QStringList>
29+#include <unistd.h>
2930
3031namespace QLightDM
3132{
@@ -37,6 +38,7 @@ UsersModelPrivate::UsersModelPrivate(UsersModel* parent)
3738{
3839 QFileInfo demoFile(QDir::homePath() + "/.unity8-greeter-demo");
3940 QString currentUser = g_get_user_name();
41+ uid_t currentUid = getuid();
4042
4143 if (demoFile.exists()) {
4244 QSettings settings(demoFile.filePath(), QSettings::NativeFormat);
@@ -46,10 +48,10 @@ UsersModelPrivate::UsersModelPrivate(UsersModel* parent)
4648 Q_FOREACH(const QString &user, users)
4749 {
4850 QString name = settings.value(user + "/name", user).toString();
49− entries.append({user, name, 0, 0, false, false, 0, 0});
51+ entries.append({user, name, 0, 0, false, false, 0, 0, currentUid++});
5052 }
5153 } else {
52− entries.append({currentUser, 0, 0, 0, false, false, 0, 0});
54+ entries.append({currentUser, 0, 0, 0, false, false, 0, 0, currentUid});
5355
5456 connect(m_service, &AccountsServiceDBusAdaptor::maybeChanged,
5557 this, [this](const QString &user) {
plugins/IntegratedLightDM/liblightdm/UsersModelPrivate.h → plugins/LightDM/IntegratedLightDM/liblightdm/UsersModelPrivate.hrenamed+2−1
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013-2016 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -40,6 +40,7 @@ public:
4040 bool has_messages;
4141 QString session;
4242 QString infographic;
43+ uid_t uid;
4344};
4445
4546class UsersModelPrivate : public QObject
plugins/LightDM/IntegratedLightDM/qmldirnew file+3
@@ -0,0 +1,3 @@
1+module LightDM.IntegratedLightDM
2+plugin IntegratedLightDM-qml
3+typeinfo IntegratedLightDM.qmltypes
plugins/LightDM/SessionsModel.cppnew file+122
@@ -0,0 +1,122 @@
1+/*
2+ * Copyright (C) 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 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+
18+#include "SessionsModel.h"
19+#include <QtCore/QFile>
20+#include <QtCore/QSortFilterProxyModel>
21+
22+QHash<int, QByteArray> SessionsModel::roleNames() const
23+{
24+ return m_roleNames;
25+}
26+
27+int SessionsModel::rowCount(const QModelIndex& parent) const
28+{
29+ return m_model->rowCount(parent);
30+}
31+
32+QList<QUrl> SessionsModel::iconSearchDirectories() const
33+{
34+ return m_iconSearchDirectories;
35+}
36+
37+void SessionsModel::setIconSearchDirectories(const QList<QUrl> searchDirectories)
38+{
39+ // QML gives us a url with file:// prepended which breaks QFile::exists()
40+ // so convert the url to a local file
41+ QList<QUrl> localList = {};
42+ Q_FOREACH(const QUrl& searchDirectory, searchDirectories)
43+ {
44+ localList.append(searchDirectory.toLocalFile());
45+ }
46+ m_iconSearchDirectories = localList;
47+ Q_EMIT iconSearchDirectoriesChanged();
48+}
49+
50+QUrl SessionsModel::iconUrl(const QString sessionName) const
51+{
52+ Q_FOREACH(const QUrl& searchDirectory, m_iconSearchDirectories)
53+ {
54+ // This is an established icon naming convention
55+ QString customIconUrl = searchDirectory.toString(QUrl::StripTrailingSlash) +
56+ "/custom_" + sessionName + "_badge.png";
57+ QString iconUrl = searchDirectory.toString(QUrl::StripTrailingSlash) +
58+ "/" + sessionName + "_badge.png";
59+
60+ QFile customIconFile(customIconUrl);
61+ QFile iconFile(iconUrl);
62+ if (customIconFile.exists()) {
63+ return QUrl(customIconUrl);
64+ } else if (iconFile.exists()) {
65+ return QUrl(iconUrl);
66+ } else{
67+ // Search the legacy way
68+ QString path = searchDirectory.toString(QUrl::StripTrailingSlash) + "/";
69+ if (sessionName == "ubuntu" || sessionName == "ubuntu-2d") {
70+ path += "ubuntu_badge.png";
71+ } else if(
72+ sessionName == "gnome-classic" ||
73+ sessionName == "gnome-flashback-compiz" ||
74+ sessionName == "gnome-flashback-metacity" ||
75+ sessionName == "gnome-shell" ||
76+ sessionName == "gnome-wayland" ||
77+ sessionName == "gnome"
78+ ){
79+ path += "gnome_badge.png";
80+ } else if (sessionName == "plasma") {
81+ path += "kde_badge.png";
82+ } else if (sessionName == "xterm") {
83+ path += "recovery_console_badge.png";
84+ } else if (sessionName == "remote-login") {
85+ path += "remote_login_help.png";
86+ }
87+
88+ if (QFile(path).exists()) {
89+ return path;
90+ }
91+ }
92+ }
93+
94+ // FIXME make this smarter
95+ return QUrl("./graphics/session_icons/unknown_badge.png");
96+}
97+
98+QVariant SessionsModel::data(const QModelIndex& index, int role) const
99+{
100+ switch (role) {
101+ case SessionsModel::IconRole:
102+ return iconUrl(m_model->data(index, Qt::DisplayRole).toString());
103+ default:
104+ return m_model->data(index, role);
105+ }
106+}
107+
108+SessionsModel::SessionsModel(QObject* parent)
109+ : UnitySortFilterProxyModelQML(parent)
110+{
111+ // Add a custom IconRole that isn't in either of the lightdm implementations
112+ m_model = new QLightDM::SessionsModel(this);
113+ m_roleNames = m_model->roleNames();
114+ m_roleNames[IconRole] = "icon_url";
115+
116+ setModel(m_model);
117+ setSourceModel(m_model);
118+ setSortCaseSensitivity(Qt::CaseInsensitive);
119+ setSortLocaleAware(true);
120+ setSortRole(Qt::DisplayRole);
121+ sort(0);
122+}
plugins/LightDM/SessionsModel.hnew file+68
@@ -0,0 +1,68 @@
1+/*
2+ * Copyright (C) 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 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+
18+#ifndef UNITY_SESSIONSMODEL_H
19+#define UNITY_SESSIONSMODEL_H
20+
21+#include <unitysortfilterproxymodelqml.h>
22+#include <QLightDM/SessionsModel>
23+#include <QtCore/QHash>
24+#include <QtCore/QObject>
25+#include <QtCore/QUrl>
26+
27+class SessionsModel : public UnitySortFilterProxyModelQML
28+{
29+ Q_OBJECT
30+
31+ Q_ENUMS(SessionModelRoles)
32+
33+ Q_PROPERTY(QList<QUrl> iconSearchDirectories READ iconSearchDirectories
34+ WRITE setIconSearchDirectories NOTIFY iconSearchDirectoriesChanged)
35+Q_SIGNALS:
36+ void iconSearchDirectoriesChanged();
37+
38+public:
39+ enum SessionModelRoles {
40+ /* This is tricky / ugly. Since we are ultimately chaining 3 enums together,
41+ * the _first_ value of this enum MUST be the _last_ value of
42+ * QLightDM::SessionsModel::SessionModelRoles and consquently, this must
43+ * also match the last value in the corresponding enum of the integrated lib
44+ */
45+ TypeRole = QLightDM::SessionsModel::SessionModelRoles::TypeRole,
46+ IconRole
47+ };
48+
49+ explicit SessionsModel(QObject* parent=nullptr);
50+
51+ QHash<int, QByteArray> roleNames() const override;
52+ int rowCount(const QModelIndex& parent) const override;
53+ QVariant data(const QModelIndex& index, int role) const override;
54+ QList<QUrl> iconSearchDirectories() const;
55+ Q_INVOKABLE QUrl iconUrl(const QString sessionName) const;
56+
57+ void setIconSearchDirectories(const QList<QUrl> searchDirectories);
58+private:
59+ QLightDM::SessionsModel* m_model;
60+ QHash<int, QByteArray> m_roleNames;
61+ QList<QUrl> m_iconSearchDirectories{
62+ QUrl("/usr/share/unity8/Greeter/graphics/session_icons"),
63+ QUrl("/usr/local/share/unity-greeter"),
64+ QUrl("/usr/share/unity-greeter/")};
65+
66+};
67+
68+#endif // UNITY_SESSIONSMODEL_H
plugins/IntegratedLightDM/UsersModel.cpp → plugins/LightDM/UsersModel.cpprenamed

The content is the same.

plugins/IntegratedLightDM/UsersModel.h → plugins/LightDM/UsersModel.hrenamed

The content is the same.

plugins/IntegratedLightDM/plugin.cpp → plugins/LightDM/plugin.cpprenamed+26−4
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2012,2013, 2015 Canonical, Ltd.
2+ * Copyright (C) 2012,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
@@ -19,9 +19,11 @@
1919#include "DBusGreeter.h"
2020#include "DBusGreeterList.h"
2121#include "Greeter.h"
22+#include "SessionsModel.h"
2223#include "UsersModel.h"
2324#include <libusermetricsoutput/ColorTheme.h>
2425#include <libusermetricsoutput/UserMetrics.h>
26+#include <QLightDM/SessionsModel>
2527#include <QLightDM/UsersModel>
2628
2729#include <QAbstractItemModel>
@@ -40,6 +42,13 @@ static QObject *greeter_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
4042 return greeter;
4143}
4244
45+static QObject *sessions_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
46+{
47+ Q_UNUSED(engine)
48+ Q_UNUSED(scriptEngine)
49+ return new SessionsModel();
50+}
51+
4352static QObject *users_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
4453{
4554 Q_UNUSED(engine)
@@ -54,16 +63,29 @@ static QObject *infographic_provider(QQmlEngine *engine, QJSEngine *scriptEngine
5463 return UserMetricsOutput::UserMetrics::getInstance();
5564}
5665
57−void IntegratedLightDMPlugin::registerTypes(const char *uri)
66+void PLUGIN_CLASSNAME::registerTypes(const char *uri)
5867{
5968 qmlRegisterType<QAbstractItemModel>();
6069 qmlRegisterType<UserMetricsOutput::ColorTheme>();
6170
62− Q_ASSERT(uri == QLatin1String("IntegratedLightDM"));
71+#if defined INTEGRATED_LIGHTDM
72+ Q_ASSERT(uri == QLatin1String("LightDM.IntegratedLightDM"));
73+ qmlRegisterSingletonType<Greeter>(uri, 0, 1, "Greeter", greeter_provider);
74+#elif defined FULL_LIGHTDM
75+ Q_ASSERT(uri == QLatin1String("LightDM.FullLightDM"));
76+ qmlRegisterSingletonType<QLightDM::Greeter>(uri, 0, 1, "Greeter", greeter_provider);
77+#else
78+ #error No library defined in LightDM plugin
79+#endif
80+
6381 qRegisterMetaType<QLightDM::Greeter::MessageType>("QLightDM::Greeter::MessageType");
6482 qRegisterMetaType<QLightDM::Greeter::PromptType>("QLightDM::Greeter::PromptType");
65− qmlRegisterSingletonType<Greeter>(uri, 0, 1, "Greeter", greeter_provider);
83+
84+ qmlRegisterSingletonType<SessionsModel>(uri, 0, 1, "Sessions", sessions_provider);
85+ qmlRegisterUncreatableType<SessionsModel>(uri, 0, 1, "SessionRoles", QStringLiteral("Type is not instantiable"));
86+
6687 qmlRegisterSingletonType<UsersModel>(uri, 0, 1, "Users", users_provider);
6788 qmlRegisterUncreatableType<QLightDM::UsersModel>(uri, 0, 1, "UserRoles", QStringLiteral("Type is not instantiable"));
89+
6890 qmlRegisterSingletonType<UserMetricsOutput::UserMetrics>(uri, 0, 1, "Infographic", infographic_provider);
6991}
plugins/IntegratedLightDM/plugin.h → plugins/LightDM/plugin.hrenamed+5−5
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2012,2013, 2015 Canonical, Ltd.
2+ * Copyright (C) 2012,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
@@ -15,13 +15,13 @@
1515 *
1616 */
1717
18−#ifndef INTEGRATED_LIGHTDM_PLUGIN_H
19−#define INTEGRATED_LIGHTDM_PLUGIN_H
18+#ifndef LIGHTDM_PLUGIN_H
19+#define LIGHTDM_PLUGIN_H
2020
2121#include <QtQml/QQmlEngine>
2222#include <QtQml/QQmlExtensionPlugin>
2323
24−class IntegratedLightDMPlugin : public QQmlExtensionPlugin
24+class PLUGIN_CLASSNAME : public QQmlExtensionPlugin
2525{
2626 Q_OBJECT
2727 Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
@@ -30,4 +30,4 @@ public:
3030 void registerTypes(const char *uri) override;
3131};
3232
33−#endif /* INTEGRATED_LIGHTDM_PLUGIN_H */
33+#endif /* LIGHTDM_PLUGIN_H */
plugins/IntegratedLightDM/qmldir → plugins/LightDM/qmldirrenamed

The content is the same.

plugins/Lights/CMakeLists.txt+1
@@ -2,6 +2,7 @@ pkg_check_modules(ANDROID_HEADERS REQUIRED android-headers)
22pkg_check_modules(ANDROID_HARDWARE REQUIRED libhardware)
33
44include_directories(
5+ SYSTEM
56 ${ANDROID_HEADERS_INCLUDE_DIRS}
67)
78
plugins/Lights/Lights.qmltypesdeleted−45
@@ -1,45 +0,0 @@
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 Lights 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "Lights"
12− prototype: "QObject"
13− exports: ["Lights/Lights 0.1"]
14− isCreatable: false
15− isSingleton: true
16− exportMetaObjectRevisions: [0]
17− Enum {
18− name: "State"
19− values: {
20− "Off": 0,
21− "On": 1
22− }
23− }
24− Property { name: "state"; type: "State" }
25− Property { name: "color"; type: "QColor" }
26− Property { name: "onMillisec"; type: "int" }
27− Property { name: "offMillisec"; type: "int" }
28− Signal {
29− name: "stateChanged"
30− Parameter { name: "newState"; type: "State" }
31− }
32− Signal {
33− name: "colorChanged"
34− Parameter { name: "color"; type: "QColor" }
35− }
36− Signal {
37− name: "onMillisecChanged"
38− Parameter { name: "onMs"; type: "int" }
39− }
40− Signal {
41− name: "offMillisecChanged"
42− Parameter { name: "offMs"; type: "int" }
43− }
44− }
45−}
plugins/Lights/android-hardware.h−4
@@ -15,9 +15,5 @@
1515 *
1616 */
1717
18−// The purpose of this header wrapper is just to avoid having warnings being reported on
19−// code from external header files, as we can't do anything about them.
20−#pragma GCC system_header
21−
2218#include <hardware/hardware.h>
2319#include <hardware/lights.h>
plugins/Powerd/Powerd.qmltypesdeleted−39
@@ -1,39 +0,0 @@
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 Powerd 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "Powerd"
12− prototype: "QObject"
13− exports: ["Powerd/Powerd 0.1"]
14− isCreatable: false
15− isSingleton: true
16− exportMetaObjectRevisions: [0]
17− Enum {
18− name: "DisplayStateChangeReason"
19− values: {
20− "Unknown": 0,
21− "Inactivity": 1,
22− "PowerKey": 2,
23− "Proximity": 3
24− }
25− }
26− Enum {
27− name: "Status"
28− values: {
29− "Off": 0,
30− "On": 1
31− }
32− }
33− Property { name: "status"; type: "Status"; isReadonly: true }
34− Signal {
35− name: "statusChanged"
36− Parameter { name: "reason"; type: "DisplayStateChangeReason" }
37− }
38− }
39−}
plugins/SessionBroadcast/SessionBroadcast.qmltypesdeleted−19
@@ -1,19 +0,0 @@
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 SessionBroadcast 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "SessionBroadcast"
12− prototype: "QObject"
13− exports: ["SessionBroadcast/SessionBroadcast 0.1"]
14− isCreatable: false
15− isSingleton: true
16− exportMetaObjectRevisions: [0]
17− Signal { name: "showHome" }
18− }
19−}
plugins/UInput/UInput.qmltypesdeleted−44
@@ -1,44 +0,0 @@
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 UInput 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "UInput"
12− prototype: "QObject"
13− exports: ["UInput/UInput 0.1"]
14− exportMetaObjectRevisions: [0]
15− Enum {
16− name: "Button"
17− values: {
18− "ButtonLeft": 0,
19− "ButtonRight": 1,
20− "ButtonMiddle": 2
21− }
22− }
23− Method { name: "createMouse" }
24− Method { name: "removeMouse" }
25− Method {
26− name: "moveMouse"
27− Parameter { name: "dx"; type: "int" }
28− Parameter { name: "dy"; type: "int" }
29− }
30− Method {
31− name: "pressMouse"
32− Parameter { name: "button"; type: "Button" }
33− }
34− Method {
35− name: "releaseMouse"
36− Parameter { name: "button"; type: "Button" }
37− }
38− Method {
39− name: "scrollMouse"
40− Parameter { name: "dh"; type: "int" }
41− Parameter { name: "dv"; type: "int" }
42− }
43− }
44−}
plugins/Ubuntu/DownloadDaemonListener/CMakeLists.txt−1
@@ -1,7 +1,6 @@
11include_directories(
22 ${CMAKE_CURRENT_SOURCE_DIR}
33 ${CMAKE_CURRENT_BINARY_DIR}
4− ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
54)
65
76set(DOWNLOADDAEMONLISTENER_SOURCES
plugins/Ubuntu/DownloadDaemonListener/DownloadDaemonListener.qmltypesdeleted−60
@@ -1,60 +0,0 @@
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 Ubuntu.DownloadDaemonListener 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "DownloadTracker"
12− prototype: "QObject"
13− exports: ["Ubuntu.DownloadDaemonListener/DownloadTracker 0.1"]
14− exportMetaObjectRevisions: [0]
15− Property { name: "service"; type: "string" }
16− Property { name: "dbusPath"; type: "string" }
17− Property { name: "serviceReady"; type: "bool"; isReadonly: true }
18− Signal {
19− name: "serviceChanged"
20− Parameter { name: "service"; type: "string" }
21− }
22− Signal {
23− name: "dbusPathChanged"
24− Parameter { name: "dbusPath"; type: "string" }
25− }
26− Signal {
27− name: "serviceReadyChanged"
28− Parameter { name: "serviceReady"; type: "bool" }
29− }
30− Signal {
31− name: "canceled"
32− Parameter { name: "success"; type: "bool" }
33− }
34− Signal {
35− name: "error"
36− Parameter { name: "error"; type: "string" }
37− }
38− Signal {
39− name: "finished"
40− Parameter { name: "path"; type: "string" }
41− }
42− Signal {
43− name: "paused"
44− Parameter { name: "success"; type: "bool" }
45− }
46− Signal {
47− name: "progress"
48− Parameter { name: "received"; type: "qulonglong" }
49− Parameter { name: "total"; type: "qulonglong" }
50− }
51− Signal {
52− name: "resumed"
53− Parameter { name: "success"; type: "bool" }
54− }
55− Signal {
56− name: "started"
57− Parameter { name: "success"; type: "bool" }
58− }
59− }
60−}
plugins/Ubuntu/Gestures/AxisVelocityCalculator.h+1−1
@@ -24,7 +24,7 @@
2424#include "UbuntuGesturesQmlGlobal.h"
2525#include <stdint.h>
2626#include <QtCore/QObject>
27−#include "TimeSource.h"
27+#include <TimeSource>
2828
2929/*
3030 Estimates the current velocity of a finger based on recent movement along an axis
plugins/Ubuntu/Gestures/CMakeLists.txt+9−5
@@ -4,27 +4,30 @@ remove_definitions(-DQT_NO_KEYWORDS)
44set(UbuntuGesturesQml_SOURCES
55 plugin.cpp
66 AxisVelocityCalculator.cpp
7− Damper.cpp
87 Direction.cpp
9− DirectionalDragArea.cpp
10− FloatingFlickable.cpp
8+ MouseEventGenerator.cpp
119 PressedOutsideNotifier.cpp
1210 TouchDispatcher.cpp
1311 TouchGate.cpp
1412 TouchGestureArea.cpp
1513)
1614
15+pkg_check_modules(UBUNTUGESTURES REQUIRED UbuntuGestures)
16+
1717add_definitions(-DUBUNTUGESTURESQML_LIBRARY)
1818
1919add_library(UbuntuGesturesQml MODULE ${UbuntuGesturesQml_SOURCES})
20−target_link_libraries(UbuntuGesturesQml UbuntuGestures)
20+target_link_libraries(UbuntuGesturesQml ${UBUNTUGESTURES_LIBRARIES})
2121
2222qt5_use_modules(UbuntuGesturesQml Core Quick)
2323
2424# So that Foo.cpp can #include "Foo.moc"
2525include_directories(${CMAKE_CURRENT_BINARY_DIR})
2626
27−include_directories(${CMAKE_SOURCE_DIR}/libs/UbuntuGestures)
27+include_directories(
28+ SYSTEM
29+ ${UBUNTUGESTURES_INCLUDE_DIRS}
30+)
2831
2932# There's no cmake var for v8 include path :-/ so create one
3033LIST(GET Qt5Core_INCLUDE_DIRS 0 QtCoreDir0)
@@ -32,6 +35,7 @@ SET(Qt5V8_PRIVATE_INCLUDE_DIR ${QtCoreDir0}/QtV8/${Qt5Core_VERSION_STRING}/QtV8)
3235
3336# DANGER! DANGER! Using Qt's private API!
3437include_directories(
38+ SYSTEM
3539 ${Qt5Qml_PRIVATE_INCLUDE_DIRS}
3640 ${Qt5Quick_INCLUDE_DIRS}
3741 ${Qt5Quick_PRIVATE_INCLUDE_DIRS}
plugins/Ubuntu/Gestures/Damper.hdeleted−89
@@ -1,89 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−#ifndef UBUNTU_GESTURES_DAMPER_H
18−#define UBUNTU_GESTURES_DAMPER_H
19−
20−#include <QtCore/QPointF>
21−
22−/*
23− Decreases the oscillations of a value along an axis.
24− */
25−template <class Type> class Damper {
26−public:
27− Damper() : m_value(0), m_maxDelta(0) { }
28−
29− // Maximum delta between the raw value and its dampened counterpart.
30− void setMaxDelta(Type maxDelta) {
31− if (maxDelta < 0) qFatal("Damper::maxDelta must be a positive number.");
32− m_maxDelta = maxDelta;
33− }
34− Type maxDelta() const { return m_maxDelta; }
35−
36− void reset(Type value) {
37− m_value = value;
38− }
39−
40− Type update(Type value) {
41− Type delta = value - m_value;
42− if (delta > 0 && delta > m_maxDelta) {
43− m_value += delta - m_maxDelta;
44− } else if (delta < 0 && delta < -m_maxDelta) {
45− m_value += delta + m_maxDelta;
46− }
47−
48− return m_value;
49− }
50−
51− Type value() const { return m_value; }
52−
53−private:
54− Type m_value;
55− Type m_maxDelta;
56−};
57−
58−/*
59− A point that has its movement dampened.
60− */
61−class DampedPointF {
62−public:
63− void setMaxDelta(qreal maxDelta) {
64− m_x.setMaxDelta(maxDelta);
65− m_y.setMaxDelta(maxDelta);
66− }
67−
68− qreal maxDelta() const { return m_x.maxDelta(); }
69−
70− void reset(const QPointF point) {
71− m_x.reset(point.x());
72− m_y.reset(point.y());
73− }
74−
75− void update(const QPointF point) {
76− m_x.update(point.x());
77− m_y.update(point.y());
78− }
79−
80− qreal x() const { return m_x.value(); }
81− qreal y() const { return m_y.value(); }
82−private:
83− Damper<qreal> m_x;
84− Damper<qreal> m_y;
85−};
86−
87−QDebug operator<<(QDebug dbg, const DampedPointF &p);
88−
89−#endif // UBUNTU_GESTURES_DAMPER_H
plugins/Ubuntu/Gestures/Direction.h+1
@@ -29,6 +29,7 @@ class UBUNTUGESTURESQML_EXPORT Direction : public QObject {
2929 Q_ENUMS(Type)
3030
3131public:
32+ // Make sure it is kept synchronized with SDK UCSwipeArea::Direction
3233 enum Type {
3334 Rightwards, // Along the positive direction of the X axis
3435 Leftwards, // Along the negative direction of the X axis
plugins/Ubuntu/Gestures/DirectionalDragArea.cppdeleted−932
@@ -1,932 +0,0 @@
1−/*
2− * Copyright (C) 2013-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 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−#define ACTIVETOUCHESINFO_DEBUG 0
18−#define DIRECTIONALDRAGAREA_DEBUG 0
19−
20−#include "DirectionalDragArea.h"
21−
22−#include <QQuickWindow>
23−#include <QtCore/qmath.h>
24−#include <QScreen>
25−#include <QDebug>
26−
27−#pragma GCC diagnostic push
28−#pragma GCC diagnostic ignored "-pedantic"
29−#include <private/qquickwindow_p.h>
30−#pragma GCC diagnostic pop
31−
32−// local
33−#include "TouchOwnershipEvent.h"
34−#include "TouchRegistry.h"
35−#include "UnownedTouchEvent.h"
36−
37−#include "DirectionalDragArea_p.h"
38−
39−using namespace UbuntuGestures;
40−
41−#if DIRECTIONALDRAGAREA_DEBUG
42−#define ddaDebug(params) qDebug().nospace() << "[DDA(" << qPrintable(objectName()) << ")] " << params
43−#include "DebugHelpers.h"
44−
45−namespace {
46−const char *statusToString(DirectionalDragAreaPrivate::Status status)
47−{
48− if (status == DirectionalDragAreaPrivate::WaitingForTouch) {
49− return "WaitingForTouch";
50− } else if (status == DirectionalDragAreaPrivate::Undecided) {
51− return "Undecided";
52− } else {
53− return "Recognized";
54− }
55−}
56−
57−} // namespace {
58−#else // DIRECTIONALDRAGAREA_DEBUG
59−#define ddaDebug(params) ((void)0)
60−#endif // DIRECTIONALDRAGAREA_DEBUG
61−
62−DirectionalDragArea::DirectionalDragArea(QQuickItem *parent)
63− : QQuickItem(parent)
64− , d(new DirectionalDragAreaPrivate(this))
65−{
66− d->setRecognitionTimer(new Timer(this));
67− d->recognitionTimer->setInterval(d->maxTime);
68− d->recognitionTimer->setSingleShot(true);
69−
70− connect(this, &QQuickItem::enabledChanged, d, &DirectionalDragAreaPrivate::giveUpIfDisabledOrInvisible);
71− connect(this, &QQuickItem::visibleChanged, d, &DirectionalDragAreaPrivate::giveUpIfDisabledOrInvisible);
72−}
73−
74−Direction::Type DirectionalDragArea::direction() const
75−{
76− return d->direction;
77−}
78−
79−void DirectionalDragArea::setDirection(Direction::Type direction)
80−{
81− if (direction != d->direction) {
82− d->direction = direction;
83− Q_EMIT directionChanged(d->direction);
84− }
85−}
86−
87−void DirectionalDragAreaPrivate::setDistanceThreshold(qreal value)
88−{
89− if (distanceThreshold != value) {
90− distanceThreshold = value;
91− distanceThresholdSquared = distanceThreshold * distanceThreshold;
92− }
93−}
94−
95−void DirectionalDragAreaPrivate::setMaxTime(int value)
96−{
97− if (maxTime != value) {
98− maxTime = value;
99− recognitionTimer->setInterval(maxTime);
100− }
101−}
102−
103−void DirectionalDragAreaPrivate::setRecognitionTimer(UbuntuGestures::AbstractTimer *timer)
104−{
105− int interval = 0;
106− bool timerWasRunning = false;
107− bool wasSingleShot = false;
108−
109− // can be null when called from the constructor
110− if (recognitionTimer) {
111− interval = recognitionTimer->interval();
112− timerWasRunning = recognitionTimer->isRunning();
113− if (recognitionTimer->parent() == this) {
114− delete recognitionTimer;
115− }
116− }
117−
118− recognitionTimer = timer;
119− timer->setInterval(interval);
120− timer->setSingleShot(wasSingleShot);
121− connect(timer, &UbuntuGestures::AbstractTimer::timeout,
122− this, &DirectionalDragAreaPrivate::rejectGesture);
123− if (timerWasRunning) {
124− recognitionTimer->start();
125− }
126−}
127−
128−void DirectionalDragAreaPrivate::setTimeSource(const SharedTimeSource &timeSource)
129−{
130− this->timeSource = timeSource;
131− activeTouches.m_timeSource = timeSource;
132−}
133−
134−qreal DirectionalDragArea::distance() const
135−{
136− if (Direction::isHorizontal(d->direction)) {
137− return d->publicPos.x() - d->startPos.x();
138− } else {
139− return d->publicPos.y() - d->startPos.y();
140− }
141−}
142−
143−void DirectionalDragAreaPrivate::updateSceneDistance()
144−{
145− QPointF totalMovement = publicScenePos - startScenePos;
146− sceneDistance = projectOntoDirectionVector(totalMovement);
147−}
148−
149−qreal DirectionalDragArea::sceneDistance() const
150−{
151− return d->sceneDistance;
152−}
153−
154−qreal DirectionalDragArea::touchX() const
155−{
156− return d->publicPos.x();
157−}
158−
159−qreal DirectionalDragArea::touchY() const
160−{
161− return d->publicPos.y();
162−}
163−
164−qreal DirectionalDragArea::touchSceneX() const
165−{
166− return d->publicScenePos.x();
167−}
168−
169−qreal DirectionalDragArea::touchSceneY() const
170−{
171− return d->publicScenePos.y();
172−}
173−
174−bool DirectionalDragArea::dragging() const
175−{
176− return d->status == DirectionalDragAreaPrivate::Recognized;
177−}
178−
179−bool DirectionalDragArea::pressed() const
180−{
181− return d->status != DirectionalDragAreaPrivate::WaitingForTouch;
182−}
183−
184−bool DirectionalDragArea::immediateRecognition() const
185−{
186− return d->immediateRecognition;
187−}
188−
189−void DirectionalDragArea::setImmediateRecognition(bool enabled)
190−{
191− if (d->immediateRecognition != enabled) {
192− d->immediateRecognition = enabled;
193− Q_EMIT immediateRecognitionChanged(enabled);
194− }
195−}
196−
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−
217−void DirectionalDragArea::removeTimeConstraints()
218−{
219− d->setMaxTime(60 * 60 * 1000);
220− d->compositionTime = 0;
221− ddaDebug("removed time constraints");
222−}
223−
224−bool DirectionalDragArea::event(QEvent *event)
225−{
226− if (event->type() == TouchOwnershipEvent::touchOwnershipEventType()) {
227− d->touchOwnershipEvent(static_cast<TouchOwnershipEvent *>(event));
228− return true;
229− } else if (event->type() == UnownedTouchEvent::unownedTouchEventType()) {
230− d->unownedTouchEvent(static_cast<UnownedTouchEvent *>(event));
231− return true;
232− } else {
233− return QQuickItem::event(event);
234− }
235−}
236−
237−void DirectionalDragAreaPrivate::touchOwnershipEvent(TouchOwnershipEvent *event)
238−{
239− if (event->gained()) {
240− QVector<int> ids;
241− ids.append(event->touchId());
242− ddaDebug("grabbing touch");
243− q->grabTouchPoints(ids);
244−
245− // Work around for Qt bug. If we grab a touch that is being used for mouse pointer
246− // emulation it will cause the emulation logic to go nuts.
247− // Thus we have to also grab the mouse in this case.
248− //
249− // The fix for this bug has landed in Qt 5.4 (https://codereview.qt-project.org/96887)
250− // TODO: Remove this workaround once we start using Qt 5.4
251− if (q->window()) {
252− QQuickWindowPrivate *windowPrivate = QQuickWindowPrivate::get(q->window());
253− if (windowPrivate->touchMouseId == event->touchId() && q->window()->mouseGrabberItem()) {
254− ddaDebug("removing mouse grabber");
255− q->window()->mouseGrabberItem()->ungrabMouse();
256− }
257− }
258− } else {
259− // We still wanna know when it ends for keeping the composition time window up-to-date
260− TouchRegistry::instance()->addTouchWatcher(touchId, q);
261−
262− setStatus(WaitingForTouch);
263− }
264−}
265−
266−void DirectionalDragAreaPrivate::unownedTouchEvent(UnownedTouchEvent *unownedTouchEvent)
267−{
268− QTouchEvent *event = unownedTouchEvent->touchEvent();
269−
270− Q_ASSERT(!event->touchPointStates().testFlag(Qt::TouchPointPressed));
271−
272− ddaDebug("Unowned " << timeSource->msecsSinceReference() << " " << qPrintable(touchEventToString(event)));
273−
274− switch (status) {
275− case WaitingForTouch:
276− // do nothing
277− break;
278− case Undecided:
279− Q_ASSERT(q->isEnabled() && q->isVisible());
280− unownedTouchEvent_undecided(unownedTouchEvent);
281− break;
282− default: // Recognized:
283− if (monitorOnly) {
284− // Treat unowned event as if we owned it, but we are really just watching it
285− touchEvent_recognized(event);
286− }
287− break;
288− }
289−
290− activeTouches.update(event);
291−}
292−
293−void DirectionalDragAreaPrivate::unownedTouchEvent_undecided(UnownedTouchEvent *unownedTouchEvent)
294−{
295− const QTouchEvent::TouchPoint *touchPoint = fetchTargetTouchPoint(unownedTouchEvent->touchEvent());
296− if (!touchPoint) {
297− qCritical() << "DirectionalDragArea[status=Undecided]: touch " << touchId
298− << "missing from UnownedTouchEvent without first reaching state Qt::TouchPointReleased. "
299− "Considering it as released.";
300−
301− TouchRegistry::instance()->removeCandidateOwnerForTouch(touchId, q);
302− setStatus(WaitingForTouch);
303− return;
304− }
305−
306− const QPointF &touchScenePos = touchPoint->scenePos();
307−
308− if (touchPoint->state() == Qt::TouchPointReleased) {
309− // touch has ended before recognition concluded
310− ddaDebug("Touch has ended before recognition concluded");
311− TouchRegistry::instance()->removeCandidateOwnerForTouch(touchId, q);
312− setStatus(WaitingForTouch);
313− return;
314− }
315−
316− previousDampedScenePos.setX(dampedScenePos.x());
317− previousDampedScenePos.setY(dampedScenePos.y());
318− dampedScenePos.update(touchScenePos);
319−
320− if (!movingInRightDirection()) {
321− ddaDebug("Rejecting gesture because touch point is moving in the wrong direction.");
322− TouchRegistry::instance()->removeCandidateOwnerForTouch(touchId, q);
323− // We still wanna know when it ends for keeping the composition time window up-to-date
324− TouchRegistry::instance()->addTouchWatcher(touchId, q);
325− setStatus(WaitingForTouch);
326− return;
327− }
328−
329− if (isWithinTouchCompositionWindow()) {
330− // There's still time for some new touch to appear and ruin our party as it would be combined
331− // with our touchId one and therefore deny the possibility of a single-finger gesture.
332− ddaDebug("Sill within composition window. Let's wait more.");
333− return;
334− }
335−
336− if (movedFarEnoughAlongGestureAxis()) {
337− if (!monitorOnly) {
338− TouchRegistry::instance()->requestTouchOwnership(touchId, q);
339− }
340− setStatus(Recognized);
341− setPublicPos(touchPoint->pos());
342− setPublicScenePos(touchScenePos);
343− } else if (isPastMaxDistance()) {
344− ddaDebug("Rejecting gesture because it went farther than maxDistance without getting recognized.");
345− TouchRegistry::instance()->removeCandidateOwnerForTouch(touchId, q);
346− // We still wanna know when it ends for keeping the composition time window up-to-date
347− TouchRegistry::instance()->addTouchWatcher(touchId, q);
348− setStatus(WaitingForTouch);
349− } else {
350− ddaDebug("Didn't move far enough yet. Let's wait more.");
351− }
352−}
353−
354−void DirectionalDragArea::touchEvent(QTouchEvent *event)
355−{
356− // TODO: Consider when more than one touch starts in the same event (although it's not possible
357− // with Mir's android-input). Have to track them all. Consider it a plus/bonus.
358−
359− ddaDebug(d->timeSource->msecsSinceReference() << " " << qPrintable(touchEventToString(event)));
360−
361− if (!isEnabled() || !isVisible()) {
362− QQuickItem::touchEvent(event);
363− return;
364− }
365−
366− switch (d->status) {
367− case DirectionalDragAreaPrivate::WaitingForTouch:
368− d->touchEvent_absent(event);
369− break;
370− case DirectionalDragAreaPrivate::Undecided:
371− d->touchEvent_undecided(event);
372− break;
373− default: // Recognized:
374− d->touchEvent_recognized(event);
375− break;
376− }
377−
378− d->activeTouches.update(event);
379−}
380−
381−void DirectionalDragAreaPrivate::touchEvent_absent(QTouchEvent *event)
382−{
383− // TODO: accept/reject is for the whole event, not per touch id. See how that affects us.
384−
385− if (!event->touchPointStates().testFlag(Qt::TouchPointPressed)) {
386− // Nothing to see here. No touch starting in this event.
387− return;
388− }
389−
390− // to be proven wrong, if that's the case
391− bool allGood = true;
392−
393− if (isWithinTouchCompositionWindow()) {
394− // too close to the last touch start. So we consider them as starting roughly at the same time.
395− // Can't be a single-touch gesture.
396− ddaDebug("A new touch point came in but we're still within time composition window. Ignoring it.");
397− allGood = false;
398− }
399−
400− const QList<QTouchEvent::TouchPoint> &touchPoints = event->touchPoints();
401−
402− const QTouchEvent::TouchPoint *newTouchPoint = nullptr;
403− for (int i = 0; i < touchPoints.count() && allGood; ++i) {
404− const QTouchEvent::TouchPoint &touchPoint = touchPoints.at(i);
405− if (touchPoint.state() == Qt::TouchPointPressed) {
406− if (newTouchPoint) {
407− // more than one touch starting in this QTouchEvent. Can't be a single-touch gesture
408− allGood = false;
409− } else {
410− // that's our candidate
411− newTouchPoint = &touchPoint;
412− }
413− }
414− }
415−
416− if (allGood) {
417− allGood = sanityCheckRecognitionProperties();
418− if (!allGood) {
419− qWarning("DirectionalDragArea: recognition properties are wrongly set. Gesture recognition"
420− " is impossible");
421− }
422− }
423−
424− if (allGood) {
425− Q_ASSERT(newTouchPoint);
426−
427− startPos = newTouchPoint->pos();
428− startScenePos = newTouchPoint->scenePos();
429− touchId = newTouchPoint->id();
430− dampedScenePos.reset(startScenePos);
431− setPublicPos(startPos);
432−
433− setPublicScenePos(startScenePos);
434− updateSceneDirectionVector();
435−
436− if (recognitionIsDisabled()) {
437− // Behave like a dumb TouchArea
438− ddaDebug("Gesture recognition is disabled. Requesting touch ownership immediately.");
439− setStatus(Recognized);
440− if (monitorOnly) {
441− watchPressedTouchPoints(touchPoints);
442− event->ignore();
443− } else {
444− TouchRegistry::instance()->requestTouchOwnership(touchId, q);
445− event->accept();
446− }
447− } else {
448− // just monitor the touch points for now.
449− if (monitorOnly) {
450− watchPressedTouchPoints(touchPoints);
451− } else {
452− TouchRegistry::instance()->addCandidateOwnerForTouch(touchId, q);
453− }
454−
455− setStatus(Undecided);
456− // Let the item below have it. We will monitor it and grab it later if a gesture
457− // gets recognized.
458− event->ignore();
459− }
460− } else {
461− watchPressedTouchPoints(touchPoints);
462− event->ignore();
463− }
464−}
465−
466−void DirectionalDragAreaPrivate::touchEvent_undecided(QTouchEvent *event)
467−{
468− Q_ASSERT(fetchTargetTouchPoint(event) == nullptr);
469−
470− // We're not interested in new touch points. We already have our candidate (touchId).
471− // But we do want to know when those new touches end for keeping the composition time
472− // window up-to-date
473− event->ignore();
474− watchPressedTouchPoints(event->touchPoints());
475−
476− if (event->touchPointStates().testFlag(Qt::TouchPointPressed) && isWithinTouchCompositionWindow()) {
477− // multi-finger drags are not accepted
478− ddaDebug("Multi-finger drags are not accepted");
479−
480− TouchRegistry::instance()->removeCandidateOwnerForTouch(touchId, q);
481− // We still wanna know when it ends for keeping the composition time window up-to-date
482− TouchRegistry::instance()->addTouchWatcher(touchId, q);
483−
484− setStatus(WaitingForTouch);
485− }
486−}
487−
488−void DirectionalDragAreaPrivate::touchEvent_recognized(QTouchEvent *event)
489−{
490− const QTouchEvent::TouchPoint *touchPoint = fetchTargetTouchPoint(event);
491−
492− if (!touchPoint) {
493− qCritical() << "DirectionalDragArea[status=Recognized]: touch " << touchId
494− << "missing from QTouchEvent without first reaching state Qt::TouchPointReleased. "
495− "Considering it as released.";
496− setStatus(WaitingForTouch);
497− } else {
498− setPublicPos(touchPoint->pos());
499− setPublicScenePos(touchPoint->scenePos());
500−
501− if (touchPoint->state() == Qt::TouchPointReleased) {
502− setStatus(WaitingForTouch);
503− }
504− }
505−}
506−
507−void DirectionalDragAreaPrivate::watchPressedTouchPoints(const QList<QTouchEvent::TouchPoint> &touchPoints)
508−{
509− for (int i = 0; i < touchPoints.count(); ++i) {
510− const QTouchEvent::TouchPoint &touchPoint = touchPoints.at(i);
511− if (touchPoint.state() == Qt::TouchPointPressed) {
512− TouchRegistry::instance()->addTouchWatcher(touchPoint.id(), q);
513− }
514− }
515−}
516−
517−bool DirectionalDragAreaPrivate::recognitionIsDisabled() const
518−{
519− return immediateRecognition || (distanceThreshold <= 0 && compositionTime <= 0);
520−}
521−
522−bool DirectionalDragAreaPrivate::sanityCheckRecognitionProperties()
523−{
524− return recognitionIsDisabled()
525− || (distanceThreshold < maxDistance && compositionTime < maxTime);
526−}
527−
528−const QTouchEvent::TouchPoint *DirectionalDragAreaPrivate::fetchTargetTouchPoint(QTouchEvent *event)
529−{
530− const QList<QTouchEvent::TouchPoint> &touchPoints = event->touchPoints();
531− const QTouchEvent::TouchPoint *touchPoint = 0;
532− for (int i = 0; i < touchPoints.size(); ++i) {
533− if (touchPoints.at(i).id() == touchId) {
534− touchPoint = &touchPoints.at(i);
535− break;
536− }
537− }
538− return touchPoint;
539−}
540−
541−bool DirectionalDragAreaPrivate::movingInRightDirection() const
542−{
543− if (direction == Direction::Horizontal || direction == Direction::Vertical) {
544− return true;
545− } else {
546− QPointF movementVector(dampedScenePos.x() - previousDampedScenePos.x(),
547− dampedScenePos.y() - previousDampedScenePos.y());
548−
549− qreal scalarProjection = projectOntoDirectionVector(movementVector);
550−
551− return scalarProjection >= 0.;
552− }
553−}
554−
555−bool DirectionalDragAreaPrivate::movedFarEnoughAlongGestureAxis() const
556−{
557− if (distanceThreshold <= 0.) {
558− // distance threshold check is disabled
559− return true;
560− } else {
561− QPointF totalMovement(dampedScenePos.x() - startScenePos.x(),
562− dampedScenePos.y() - startScenePos.y());
563−
564− qreal scalarProjection = projectOntoDirectionVector(totalMovement);
565−
566− ddaDebug(" movedFarEnoughAlongGestureAxis: scalarProjection=" << scalarProjection
567− << ", distanceThreshold=" << distanceThreshold);
568−
569− if (direction == Direction::Horizontal || direction == Direction::Vertical) {
570− return qAbs(scalarProjection) > distanceThreshold;
571− } else {
572− return scalarProjection > distanceThreshold;
573− }
574− }
575−}
576−
577−bool DirectionalDragAreaPrivate::isPastMaxDistance() const
578−{
579− QPointF totalMovement(dampedScenePos.x() - startScenePos.x(),
580− dampedScenePos.y() - startScenePos.y());
581−
582− qreal squaredDistance = totalMovement.x()*totalMovement.x() + totalMovement.y()*totalMovement.y();
583− return squaredDistance > maxDistance*maxDistance;
584−}
585−
586−void DirectionalDragAreaPrivate::giveUpIfDisabledOrInvisible()
587−{
588− if (!q->isEnabled() || !q->isVisible()) {
589− if (status == Undecided) {
590− TouchRegistry::instance()->removeCandidateOwnerForTouch(touchId, q);
591− // We still wanna know when it ends for keeping the composition time window up-to-date
592− TouchRegistry::instance()->addTouchWatcher(touchId, q);
593− }
594−
595− if (status != WaitingForTouch) {
596− ddaDebug("Resetting status because got disabled or made invisible");
597− setStatus(WaitingForTouch);
598− }
599− }
600−}
601−
602−void DirectionalDragAreaPrivate::rejectGesture()
603−{
604− if (status == Undecided) {
605− ddaDebug("Rejecting gesture because it's taking too long to drag beyond the threshold.");
606−
607− TouchRegistry::instance()->removeCandidateOwnerForTouch(touchId, q);
608− // We still wanna know when it ends for keeping the composition time window up-to-date
609− TouchRegistry::instance()->addTouchWatcher(touchId, q);
610−
611− setStatus(WaitingForTouch);
612− }
613−}
614−
615−void DirectionalDragAreaPrivate::setStatus(Status newStatus)
616−{
617− if (newStatus == status)
618− return;
619−
620− Status oldStatus = status;
621−
622− if (oldStatus == Undecided) {
623− recognitionTimer->stop();
624− }
625−
626− status = newStatus;
627− Q_EMIT statusChanged(status);
628−
629− ddaDebug(statusToString(oldStatus) << " -> " << statusToString(newStatus));
630−
631− switch (newStatus) {
632− case WaitingForTouch:
633− if (oldStatus == Recognized) {
634− Q_EMIT q->draggingChanged(false);
635− }
636− Q_EMIT q->pressedChanged(false);
637− break;
638− case Undecided:
639− recognitionTimer->start();
640− Q_EMIT q->pressedChanged(true);
641− break;
642− case Recognized:
643− if (oldStatus == WaitingForTouch) { // for immediate recognition
644− Q_EMIT q->pressedChanged(true);
645− }
646− Q_EMIT q->draggingChanged(true);
647− break;
648− default:
649− // no-op
650− break;
651− }
652−}
653−
654−void DirectionalDragAreaPrivate::setPublicPos(const QPointF point)
655−{
656− bool xChanged = publicPos.x() != point.x();
657− bool yChanged = publicPos.y() != point.y();
658−
659− // Public position should not get updated while the gesture is still being recognized
660− // (ie, Undecided status).
661− Q_ASSERT(status == WaitingForTouch || status == Recognized);
662−
663− if (status == Recognized && !recognitionIsDisabled()) {
664− // When the gesture finally gets recognized, the finger will likely be
665− // reasonably far from the edge. If we made the contentX immediately
666− // follow the finger position it would be visually unpleasant as it
667− // would appear right next to the user's finger out of nowhere (ie,
668− // it would jump). Instead, we make contentX go towards the user's
669− // finger in several steps. ie., in an animated way.
670− QPointF delta = point - publicPos;
671− // the trick is not to go all the way (1.0) as it would cause a sudden jump
672− publicPos.rx() += 0.4 * delta.x();
673− publicPos.ry() += 0.4 * delta.y();
674− } else {
675− // no smoothing when initializing or if gesture recognition was immediate as there will
676− // be no jump.
677− publicPos = point;
678− }
679−
680− if (xChanged) {
681− Q_EMIT q->touchXChanged(publicPos.x());
682− if (Direction::isHorizontal(direction))
683− Q_EMIT q->distanceChanged(q->distance());
684− }
685−
686− if (yChanged) {
687− Q_EMIT q->touchYChanged(publicPos.y());
688− if (Direction::isVertical(direction))
689− Q_EMIT q->distanceChanged(q->distance());
690− }
691−}
692−
693−void DirectionalDragAreaPrivate::setPublicScenePos(const QPointF point)
694−{
695− bool xChanged = publicScenePos.x() != point.x();
696− bool yChanged = publicScenePos.y() != point.y();
697−
698− if (!xChanged && !yChanged)
699− return;
700−
701− // Public position should not get updated while the gesture is still being recognized
702− // (ie, Undecided status).
703− Q_ASSERT(status == WaitingForTouch || status == Recognized);
704−
705− qreal oldSceneDistance = sceneDistance;
706−
707− if (status == Recognized && !recognitionIsDisabled()) {
708− // When the gesture finally gets recognized, the finger will likely be
709− // reasonably far from the edge. If we made the contentX immediately
710− // follow the finger position it would be visually unpleasant as it
711− // would appear right next to the user's finger out of nowhere (ie,
712− // it would jump). Instead, we make contentX go towards the user's
713− // finger in several steps. ie., in an animated way.
714− QPointF delta = point - publicScenePos;
715− // the trick is not to go all the way (1.0) as it would cause a sudden jump
716− publicScenePos.rx() += 0.4 * delta.x();
717− publicScenePos.ry() += 0.4 * delta.y();
718− } else {
719− // no smoothing when initializing or if gesture recognition was immediate as there will
720− // be no jump.
721− publicScenePos = point;
722− }
723−
724− updateSceneDistance();
725−
726− if (oldSceneDistance != sceneDistance) {
727− Q_EMIT q->sceneDistanceChanged(sceneDistance);
728− }
729−
730− if (xChanged) {
731− Q_EMIT q->touchSceneXChanged(publicScenePos.x());
732− }
733−
734− if (yChanged) {
735− Q_EMIT q->touchSceneYChanged(publicScenePos.y());
736− }
737−}
738−
739−bool DirectionalDragAreaPrivate::isWithinTouchCompositionWindow()
740−{
741− return
742− compositionTime > 0 &&
743− !activeTouches.isEmpty() &&
744− timeSource->msecsSinceReference() <=
745− activeTouches.mostRecentStartTime() + (qint64)compositionTime;
746−}
747−
748−void DirectionalDragArea::itemChange(ItemChange change, const ItemChangeData &value)
749−{
750− if (change == QQuickItem::ItemSceneChange) {
751− if (value.window != nullptr) {
752− value.window->installEventFilter(TouchRegistry::instance());
753−
754− // TODO: Handle window->screen() changes (ie window changing screens)
755−
756− qreal pixelsPerInch = value.window->screen()->physicalDotsPerInch();
757− if (pixelsPerInch < 0) {
758− // It can return garbage when run in a XVFB server (Virtual Framebuffer 'fake' X server)
759− pixelsPerInch = 72;
760− }
761−
762− d->setPixelsPerMm(pixelsPerInch / 25.4);
763− }
764− }
765−}
766−
767−void DirectionalDragAreaPrivate::setPixelsPerMm(qreal pixelsPerMm)
768−{
769− dampedScenePos.setMaxDelta(1. * pixelsPerMm);
770− setDistanceThreshold(4. * pixelsPerMm);
771− maxDistance = 10. * pixelsPerMm;
772−}
773−
774−//************************** ActiveTouchesInfo **************************
775−
776−ActiveTouchesInfo::ActiveTouchesInfo(const SharedTimeSource &timeSource)
777− : m_timeSource(timeSource)
778−{
779−}
780−
781−void ActiveTouchesInfo::update(QTouchEvent *event)
782−{
783− if (!(event->touchPointStates() & (Qt::TouchPointPressed | Qt::TouchPointReleased))) {
784− // nothing to update
785− #if ACTIVETOUCHESINFO_DEBUG
786− qDebug("[DDA::ActiveTouchesInfo] Nothing to Update");
787− #endif
788− return;
789− }
790−
791− const QList<QTouchEvent::TouchPoint> &touchPoints = event->touchPoints();
792− for (int i = 0; i < touchPoints.count(); ++i) {
793− const QTouchEvent::TouchPoint &touchPoint = touchPoints.at(i);
794− if (touchPoint.state() == Qt::TouchPointPressed) {
795− addTouchPoint(touchPoint.id());
796− } else if (touchPoint.state() == Qt::TouchPointReleased) {
797− removeTouchPoint(touchPoint.id());
798− }
799− }
800−}
801−
802−#if ACTIVETOUCHESINFO_DEBUG
803−QString ActiveTouchesInfo::toString()
804−{
805− QString string = "(";
806−
807− {
808− QTextStream stream(&string);
809− m_touchInfoPool.forEach([&](Pool<ActiveTouchInfo>::Iterator &touchInfo) {
810− stream << "(id=" << touchInfo->id << ",startTime=" << touchInfo->startTime << ")";
811− return true;
812− });
813− }
814−
815− string.append(")");
816−
817− return string;
818−}
819−#endif // ACTIVETOUCHESINFO_DEBUG
820−
821−void ActiveTouchesInfo::addTouchPoint(int touchId)
822−{
823− ActiveTouchInfo &activeTouchInfo = m_touchInfoPool.getEmptySlot();
824− activeTouchInfo.id = touchId;
825− activeTouchInfo.startTime = m_timeSource->msecsSinceReference();
826−
827− #if ACTIVETOUCHESINFO_DEBUG
828− qDebug() << "[DDA::ActiveTouchesInfo]" << qPrintable(toString());
829− #endif
830−}
831−
832−qint64 ActiveTouchesInfo::touchStartTime(int touchId)
833−{
834− qint64 result = -1;
835−
836− m_touchInfoPool.forEach([&](Pool<ActiveTouchInfo>::Iterator &touchInfo) {
837− if (touchId == touchInfo->id) {
838− result = touchInfo->startTime;
839− return false;
840− } else {
841− return true;
842− }
843− });
844−
845− Q_ASSERT(result != -1);
846− return result;
847−}
848−
849−void ActiveTouchesInfo::removeTouchPoint(int touchId)
850−{
851− m_touchInfoPool.forEach([&](Pool<ActiveTouchInfo>::Iterator &touchInfo) {
852− if (touchId == touchInfo->id) {
853− m_touchInfoPool.freeSlot(touchInfo);
854− return false;
855− } else {
856− return true;
857− }
858− });
859−
860− #if ACTIVETOUCHESINFO_DEBUG
861− qDebug() << "[DDA::ActiveTouchesInfo]" << qPrintable(toString());
862− #endif
863−}
864−
865−qint64 ActiveTouchesInfo::mostRecentStartTime()
866−{
867− Q_ASSERT(!m_touchInfoPool.isEmpty());
868−
869− qint64 highestStartTime = -1;
870−
871− m_touchInfoPool.forEach([&](Pool<ActiveTouchInfo>::Iterator &activeTouchInfo) {
872− if (activeTouchInfo->startTime > highestStartTime) {
873− highestStartTime = activeTouchInfo->startTime;
874− }
875− return true;
876− });
877−
878− return highestStartTime;
879−}
880−
881−void DirectionalDragAreaPrivate::updateSceneDirectionVector()
882−{
883− QPointF localOrigin(0., 0.);
884− QPointF localDirection;
885− switch (direction) {
886− case Direction::Upwards:
887− localDirection.rx() = 0.;
888− localDirection.ry() = -1.;
889− break;
890− case Direction::Downwards:
891− case Direction::Vertical:
892− localDirection.rx() = 0.;
893− localDirection.ry() = 1;
894− break;
895− case Direction::Leftwards:
896− localDirection.rx() = -1.;
897− localDirection.ry() = 0.;
898− break;
899− default: // Direction::Rightwards || Direction.Horizontal
900− localDirection.rx() = 1.;
901− localDirection.ry() = 0.;
902− break;
903− }
904− QPointF sceneOrigin = q->mapToScene(localOrigin);
905− QPointF sceneDirection = q->mapToScene(localDirection);
906− sceneDirectionVector = sceneDirection - sceneOrigin;
907−}
908−
909−qreal DirectionalDragAreaPrivate::projectOntoDirectionVector(const QPointF sceneVector) const
910−{
911− // same as dot product as sceneDirectionVector is a unit vector
912− return sceneVector.x() * sceneDirectionVector.x() +
913− sceneVector.y() * sceneDirectionVector.y();
914−}
915−
916−DirectionalDragAreaPrivate::DirectionalDragAreaPrivate(DirectionalDragArea *q)
917− : q(q)
918− , status(WaitingForTouch)
919− , sceneDistance(0)
920− , touchId(-1)
921− , direction(Direction::Rightwards)
922− , distanceThreshold(0)
923− , distanceThresholdSquared(0.)
924− , maxTime(400)
925− , compositionTime(60)
926− , immediateRecognition(false)
927− , recognitionTimer(nullptr)
928− , timeSource(new RealTimeSource)
929− , activeTouches(timeSource)
930− , monitorOnly(false)
931−{
932−}
plugins/Ubuntu/Gestures/DirectionalDragArea.hdeleted−143
@@ -1,143 +0,0 @@
1−/*
2− * Copyright (C) 2013,2014 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 DIRECTIONAL_DRAG_AREA_H
18−#define DIRECTIONAL_DRAG_AREA_H
19−
20−#include <QtQuick/QQuickItem>
21−#include "UbuntuGesturesQmlGlobal.h"
22−#include "Damper.h"
23−#include "Direction.h"
24−
25−// lib UbuntuGestures
26−#include <Pool.h>
27−#include <Timer.h>
28−
29−class TouchOwnershipEvent;
30−class UnownedTouchEvent;
31−class DirectionalDragAreaPrivate;
32−
33−/*
34− An area that detects axis-aligned single-finger drag gestures
35−
36− If a drag deviates too much from the components' direction recognition will
37− fail. It will also fail if the drag or flick is too short. E.g. a noisy or
38− fidgety click
39−
40− See doc/DirectionalDragArea.svg
41− */
42−class UBUNTUGESTURESQML_EXPORT DirectionalDragArea : public QQuickItem {
43− Q_OBJECT
44−
45− // The direction in which the gesture should move in order to be recognized.
46− Q_PROPERTY(Direction::Type direction READ direction WRITE setDirection NOTIFY directionChanged)
47−
48− // The distance travelled by the finger along the axis specified by
49− // DirectionalDragArea's direction.
50− Q_PROPERTY(qreal distance READ distance NOTIFY distanceChanged)
51−
52− // The distance travelled by the finger along the axis specified by
53− // DirectionalDragArea's direction in scene coordinates
54− Q_PROPERTY(qreal sceneDistance READ sceneDistance NOTIFY sceneDistanceChanged)
55−
56− // Position of the touch point performing the drag relative to this item.
57− Q_PROPERTY(qreal touchX READ touchX NOTIFY touchXChanged)
58− Q_PROPERTY(qreal touchY READ touchY NOTIFY touchYChanged)
59−
60− // Position of the touch point performing the drag, in scene's coordinate system
61− Q_PROPERTY(qreal touchSceneX READ touchSceneX NOTIFY touchSceneXChanged)
62− Q_PROPERTY(qreal touchSceneY READ touchSceneY NOTIFY touchSceneYChanged)
63−
64− // Whether a drag gesture is taking place
65− Q_PROPERTY(bool dragging READ dragging NOTIFY draggingChanged)
66−
67− // Whether the drag area is pressed.
68− Q_PROPERTY(bool pressed READ pressed NOTIFY pressedChanged)
69−
70− // Whether a gesture should be Recognized as soon a touch lands on the area.
71− // With this property enabled it will work pretty much like a MultiPointTouchArea,
72− // just with a different API.
73− //
74− // It's false by default. In most cases you will not want that enabled.
75− Q_PROPERTY(bool immediateRecognition
76− READ immediateRecognition
77− WRITE setImmediateRecognition
78− NOTIFY immediateRecognitionChanged)
79−
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−
84− Q_ENUMS(Direction)
85−public:
86− DirectionalDragArea(QQuickItem *parent = 0);
87−
88− Direction::Type direction() const;
89− void setDirection(Direction::Type);
90−
91− qreal distance() const;
92− qreal sceneDistance() const;
93−
94− qreal touchX() const;
95− qreal touchY() const;
96−
97− qreal touchSceneX() const;
98− qreal touchSceneY() const;
99−
100− bool dragging() const;
101−
102− bool pressed() const;
103−
104− bool immediateRecognition() const;
105− void setImmediateRecognition(bool enabled);
106−
107− bool monitorOnly() const;
108− void setMonitorOnly(bool monitorOnly);
109−
110− bool event(QEvent *e) override;
111−
112− /*
113− In qmltests, sequences of touch events are sent all at once, unlike in "real life".
114− Also qmltests might run really slowly, e.g. when run from inside virtual machines.
115− Thus to remove a variable that qmltests cannot really control, namely time, this
116− function removes all constraints that are sensible to elapsed time.
117−
118− This effectively makes the DirectionalDragArea easier to fool.
119− */
120− Q_INVOKABLE void removeTimeConstraints();
121−
122−Q_SIGNALS:
123− void directionChanged(Direction::Type direction);
124− void draggingChanged(bool value);
125− void pressedChanged(bool value);
126− void distanceChanged(qreal value);
127− void sceneDistanceChanged(qreal value);
128− void touchXChanged(qreal value);
129− void touchYChanged(qreal value);
130− void touchSceneXChanged(qreal value);
131− void touchSceneYChanged(qreal value);
132− void immediateRecognitionChanged(bool value);
133− void monitorOnlyChanged(bool value);
134−
135−protected:
136− void touchEvent(QTouchEvent *event) override;
137− void itemChange(ItemChange change, const ItemChangeData &value) override;
138−
139−public: // so tests can access it
140− DirectionalDragAreaPrivate *d;
141−};
142−
143−#endif // DIRECTIONAL_DRAG_AREA_H
plugins/Ubuntu/Gestures/DirectionalDragArea_p.hdeleted−169
@@ -1,169 +0,0 @@
1−/*
2− * Copyright (C) 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 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 DIRECTIONAL_DRAG_AREA_PRIV_H
18−#define DIRECTIONAL_DRAG_AREA_PRIV_H
19−
20−// Information about an active touch point
21−struct UBUNTUGESTURESQML_EXPORT ActiveTouchInfo {
22− ActiveTouchInfo() : id(-1), startTime(-1) {}
23− bool isValid() const { return id != -1; }
24− void reset() { id = -1; }
25− int id;
26− qint64 startTime;
27−};
28−class UBUNTUGESTURESQML_EXPORT ActiveTouchesInfo {
29−public:
30− ActiveTouchesInfo(const UbuntuGestures::SharedTimeSource &timeSource);
31− void update(QTouchEvent *event);
32− qint64 touchStartTime(int id);
33− bool isEmpty() const { return m_touchInfoPool.isEmpty(); }
34− qint64 mostRecentStartTime();
35− UbuntuGestures::SharedTimeSource m_timeSource;
36−private:
37− void addTouchPoint(int touchId);
38− void removeTouchPoint(int touchId);
39− #if ACTIVETOUCHESINFO_DEBUG
40− QString toString();
41− #endif
42−
43− Pool<ActiveTouchInfo> m_touchInfoPool;
44−};
45−
46−class UBUNTUGESTURESQML_EXPORT DirectionalDragAreaPrivate : public QObject {
47− Q_OBJECT
48−
49− Q_ENUMS(Status)
50−public:
51− DirectionalDragAreaPrivate(DirectionalDragArea *q);
52−
53−public Q_SLOTS:
54− void giveUpIfDisabledOrInvisible();
55− void rejectGesture();
56−
57−public:
58− // Describes the state of the directional drag gesture.
59− enum Status {
60− // Waiting for a new touch point to land on this area. No gesture is being processed
61− // or tracked.
62− WaitingForTouch,
63−
64− // A touch point has landed on this area but it's not know yet whether it is
65− // performing a drag in the correct direction.
66− // If it's decided that the touch point is not performing a directional drag gesture,
67− // it will be rejected/ignored and status will return to WaitingForTouch.
68− Undecided, //Recognizing,
69−
70− // There's a touch point in this area and it performed a drag in the correct
71− // direction.
72− //
73− // Once recognized, the gesture state will move back to WaitingForTouch only once
74− // that touch point ends. The gesture will remain in the Recognized state even if
75− // the touch point starts moving in other directions or halts.
76− Recognized,
77− };
78−
79− void touchEvent_absent(QTouchEvent *event);
80− void touchEvent_undecided(QTouchEvent *event);
81− void touchEvent_recognized(QTouchEvent *event);
82− bool movingInRightDirection() const;
83− bool movedFarEnoughAlongGestureAxis() const;
84− bool isPastMaxDistance() const;
85− const QTouchEvent::TouchPoint *fetchTargetTouchPoint(QTouchEvent *event);
86− void setStatus(Status newStatus);
87− void setPublicPos(const QPointF point);
88− void setPublicScenePos(const QPointF point);
89− bool isWithinTouchCompositionWindow();
90− void updateSceneDirectionVector();
91− // returns the scalar projection between the given vector (in scene coordinates)
92− // and m_sceneDirectionVector
93− qreal projectOntoDirectionVector(const QPointF sceneVector) const;
94− void touchOwnershipEvent(TouchOwnershipEvent *event);
95− void unownedTouchEvent(UnownedTouchEvent *event);
96− void unownedTouchEvent_undecided(UnownedTouchEvent *unownedTouchEvent);
97− void watchPressedTouchPoints(const QList<QTouchEvent::TouchPoint> &touchPoints);
98− bool recognitionIsDisabled() const;
99− bool sanityCheckRecognitionProperties();
100− void updateSceneDistance();
101− void setMaxTime(int value);
102− void setDistanceThreshold(qreal value);
103− void setPixelsPerMm(qreal pixelsPerMm);
104− QString objectName() const { return q->objectName(); }
105−
106− // Replaces the existing Timer with the given one.
107− //
108− // Useful for providing a fake timer when testing.
109− void setRecognitionTimer(UbuntuGestures::AbstractTimer *timer);
110−
111− // Useful for testing, where a fake time source can be supplied
112− void setTimeSource(const UbuntuGestures::SharedTimeSource &timeSource);
113−
114− DirectionalDragArea *q;
115−
116− // The current status of the directional drag gesture area.
117− Status status;
118−
119− QPointF startPos;
120− QPointF startScenePos;
121− qreal sceneDistance;
122− int touchId;
123−
124− // The touch position exposed in the public API.
125− // It only starts to move once the gesture gets recognized.
126− QPointF publicPos;
127− QPointF publicScenePos;
128−
129− // A movement damper is used in some of the gesture recognition calculations
130− // to get rid of noise or small oscillations in the touch position.
131− DampedPointF dampedScenePos;
132− QPointF previousDampedScenePos;
133−
134− // Unit vector in scene coordinates describing the direction of the gesture recognition
135− QPointF sceneDirectionVector;
136−
137− Direction::Type direction;
138−
139− // How far a touch point has to move from its initial position along the gesture axis in order
140− // for it to be recognized as a directional drag.
141− qreal distanceThreshold;
142− qreal distanceThresholdSquared; // it's pow(distanceThreshold, 2)
143−
144− // Maximum time (in milliseconds) the gesture can take to go beyond the distance threshold
145− int maxTime;
146−
147− // Maximum distance the gesture can go without crossing the axis-aligned distance threshold
148− qreal maxDistance;
149−
150− // Maximum time (in milliseconds) after the start of a given touch point where
151− // subsequent touch starts are grouped with the first one into an N-touches gesture
152− // (e.g. a two-fingers tap or drag).
153− int compositionTime;
154−
155− bool immediateRecognition;
156−
157− UbuntuGestures::AbstractTimer *recognitionTimer;
158−
159− UbuntuGestures::SharedTimeSource timeSource;
160−
161− ActiveTouchesInfo activeTouches;
162−
163− bool monitorOnly;
164−
165−Q_SIGNALS:
166− void statusChanged(Status value);
167−};
168−
169−#endif // DIRECTIONAL_DRAG_AREA_PRIV_H
plugins/Ubuntu/Gestures/FloatingFlickable.cppdeleted−150
@@ -1,150 +0,0 @@
1−/*
2− * Copyright (C) 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 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 "FloatingFlickable.h"
18−
19−#include <private/qquickflickable_p.h>
20−#include "DirectionalDragArea.h"
21−
22−#include <QDebug>
23−
24−FloatingFlickable::FloatingFlickable(QQuickItem *parent)
25− : QQuickItem(parent)
26− , m_mousePressed(false)
27−{
28− m_dragArea = new DirectionalDragArea(this);
29− m_dragArea->setWidth(width());
30− m_dragArea->setHeight(height());
31− m_dragArea->setDirection(Direction::Horizontal);
32− connect(m_dragArea, &DirectionalDragArea::touchXChanged,
33− this, &FloatingFlickable::onDragAreaTouchPosChanged);
34− connect(m_dragArea, &DirectionalDragArea::touchYChanged,
35− this, &FloatingFlickable::onDragAreaTouchPosChanged);
36− connect(m_dragArea, &DirectionalDragArea::draggingChanged,
37− this, &FloatingFlickable::onDragAreaDraggingChanged);
38− connect(m_dragArea, &DirectionalDragArea::directionChanged, this, &FloatingFlickable::directionChanged);
39−
40− m_flickable = new QQuickFlickable(this);
41− m_flickable->setEnabled(false);
42− m_flickable->setWidth(width());
43− m_flickable->setHeight(height());
44− connect(m_flickable, &QQuickFlickable::contentWidthChanged, this, &FloatingFlickable::contentWidthChanged);
45− connect(m_flickable, &QQuickFlickable::contentHeightChanged, this, &FloatingFlickable::contentHeightChanged);
46− connect(m_flickable, &QQuickFlickable::contentXChanged, this, &FloatingFlickable::contentXChanged);
47− connect(m_flickable, &QQuickFlickable::contentYChanged, this, &FloatingFlickable::contentYChanged);
48−
49− connect(this, &QQuickItem::widthChanged, this, &FloatingFlickable::updateChildrenWidth);
50− connect(this, &QQuickItem::heightChanged, this, &FloatingFlickable::updateChildrenHeight);
51−}
52−
53−qreal FloatingFlickable::contentWidth() const
54−{
55− return m_flickable->contentWidth();
56−}
57−
58−void FloatingFlickable::setContentWidth(qreal contentWidth)
59−{
60− m_flickable->setContentWidth(contentWidth);
61−}
62−
63−qreal FloatingFlickable::contentHeight() const
64−{
65− return m_flickable->contentHeight();
66−}
67−
68−void FloatingFlickable::setContentHeight(qreal contentHeight)
69−{
70− m_flickable->setContentHeight(contentHeight);
71−}
72−
73−qreal FloatingFlickable::contentX() const
74−{
75− return m_flickable->contentX();
76−}
77−
78−void FloatingFlickable::setContentX(qreal contentX)
79−{
80− m_flickable->setContentX(contentX);
81−}
82−
83−qreal FloatingFlickable::contentY() const
84−{
85− return m_flickable->contentY();
86−}
87−
88−void FloatingFlickable::setContentY(qreal contentY)
89−{
90− m_flickable->setContentY(contentY);
91−}
92−
93−Direction::Type FloatingFlickable::direction() const
94−{
95− return m_dragArea->direction();
96−}
97−
98−void FloatingFlickable::setDirection(Direction::Type direction)
99−{
100− m_dragArea->setDirection(direction);
101− if (Direction::isHorizontal(direction)) {
102− m_flickable->setFlickableDirection(QQuickFlickable::HorizontalFlick);
103− } else {
104− m_flickable->setFlickableDirection(QQuickFlickable::VerticalFlick);
105− }
106−}
107−
108−void FloatingFlickable::updateChildrenWidth()
109−{
110− m_dragArea->setWidth(width());
111− m_flickable->setWidth(width());
112−}
113−
114−void FloatingFlickable::updateChildrenHeight()
115−{
116− m_dragArea->setHeight(height());
117− m_flickable->setHeight(height());
118−}
119−
120−void FloatingFlickable::onDragAreaTouchPosChanged(qreal)
121−{
122− if (m_mousePressed) {
123− QMouseEvent mouseEvent(QEvent::MouseMove,
124− QPointF(m_dragArea->touchX(),m_dragArea->touchY()),
125− Qt::NoButton, Qt::LeftButton, Qt::NoModifier);
126−
127− QCoreApplication::sendEvent(m_flickable, &mouseEvent);
128−
129− }
130−}
131−
132−void FloatingFlickable::onDragAreaDraggingChanged(bool dragging)
133−{
134− if (dragging && !m_mousePressed) {
135− QMouseEvent mouseEvent(QEvent::MouseButtonPress,
136− QPointF(m_dragArea->touchX(),m_dragArea->touchY()),
137− Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
138−
139− QCoreApplication::sendEvent(m_flickable, &mouseEvent);
140− m_mousePressed = true;
141−
142− } else if (!dragging && m_mousePressed) {
143− QMouseEvent mouseEvent(QEvent::MouseButtonRelease,
144− QPointF(m_dragArea->touchX(),m_dragArea->touchY()),
145− Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
146−
147− QCoreApplication::sendEvent(m_flickable, &mouseEvent);
148− m_mousePressed = false;
149− }
150−}
plugins/Ubuntu/Gestures/FloatingFlickable.hdeleted−86
@@ -1,86 +0,0 @@
1−/*
2− * Copyright (C) 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 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 FLOATING_FLICKABLE_H
18−#define FLOATING_FLICKABLE_H
19−
20−#include <QQuickItem>
21−#include "UbuntuGesturesQmlGlobal.h"
22−#include "Direction.h"
23−
24−class DirectionalDragArea;
25−class QQuickFlickable;
26−
27−/*
28− A Flickable that can be put in front of the item to be flicked and
29− still have the item-to-be-flicked receive input events that are not flicks.
30−
31− Ie, it's a Flickable that, input-wise, is transparent to non-flick gestures.
32−
33− With a regular Flickable you would have to make the item-to-be-flicked a child
34− of Flicakble to achieve the same result. FloatingFlickable has no such requirement
35− or limitation.
36− */
37−class UBUNTUGESTURESQML_EXPORT FloatingFlickable : public QQuickItem {
38− Q_OBJECT
39−
40− Q_PROPERTY(qreal contentWidth READ contentWidth WRITE setContentWidth NOTIFY contentWidthChanged)
41− Q_PROPERTY(qreal contentHeight READ contentHeight WRITE setContentHeight NOTIFY contentHeightChanged)
42− Q_PROPERTY(qreal contentX READ contentX WRITE setContentX NOTIFY contentXChanged)
43− Q_PROPERTY(qreal contentY READ contentY WRITE setContentY NOTIFY contentYChanged)
44−
45− Q_PROPERTY(Direction::Type direction READ direction WRITE setDirection NOTIFY directionChanged)
46−
47−Q_SIGNALS:
48− void contentWidthChanged();
49− void contentHeightChanged();
50− void contentXChanged();
51− void contentYChanged();
52− void directionChanged();
53−
54−public:
55− FloatingFlickable(QQuickItem *parent = nullptr);
56−
57− qreal contentWidth() const;
58− void setContentWidth(qreal contentWidth);
59−
60− qreal contentHeight() const;
61− void setContentHeight(qreal contentHeight);
62−
63− qreal contentX() const;
64− void setContentX(qreal contentX);
65−
66− qreal contentY() const;
67− void setContentY(qreal contentY);
68−
69− Direction::Type direction() const;
70− void setDirection(Direction::Type);
71−
72−private Q_SLOTS:
73− void updateChildrenWidth();
74− void updateChildrenHeight();
75− void onDragAreaTouchPosChanged(qreal);
76− void onDragAreaDraggingChanged(bool value);
77−
78−private:
79− DirectionalDragArea *m_dragArea;
80− QQuickFlickable *m_flickable;
81− bool m_mousePressed;
82−
83− friend class tst_FloatingFlickable;
84−};
85−
86−#endif // FLOATING_FLICKABLE_H
plugins/Ubuntu/Gestures/Gestures.qmltypesdeleted−209
@@ -1,209 +0,0 @@
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 Ubuntu.Gestures 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "AxisVelocityCalculator"
12− prototype: "QObject"
13− exports: ["Ubuntu.Gestures/AxisVelocityCalculator 0.1"]
14− exportMetaObjectRevisions: [0]
15− Property { name: "trackedPosition"; type: "double" }
16− Signal {
17− name: "trackedPositionChanged"
18− Parameter { name: "value"; type: "double" }
19− }
20− Method { name: "calculate"; type: "double" }
21− Method { name: "reset" }
22− }
23− Component {
24− name: "Direction"
25− prototype: "QObject"
26− exports: ["Ubuntu.Gestures/Direction 0.1"]
27− isCreatable: false
28− isSingleton: true
29− exportMetaObjectRevisions: [0]
30− Enum {
31− name: "Type"
32− values: {
33− "Rightwards": 0,
34− "Leftwards": 1,
35− "Downwards": 2,
36− "Upwards": 3,
37− "Horizontal": 4,
38− "Vertical": 5
39− }
40− }
41− Method {
42− name: "isHorizontal"
43− type: "bool"
44− Parameter { name: "type"; type: "Direction::Type" }
45− }
46− Method {
47− name: "isVertical"
48− type: "bool"
49− Parameter { name: "type"; type: "Direction::Type" }
50− }
51− Method {
52− name: "isPositive"
53− type: "bool"
54− Parameter { name: "type"; type: "Direction::Type" }
55− }
56− }
57− Component {
58− name: "DirectionalDragArea"
59− defaultProperty: "data"
60− prototype: "QQuickItem"
61− exports: ["Ubuntu.Gestures/DirectionalDragArea 0.1"]
62− exportMetaObjectRevisions: [0]
63− Property { name: "direction"; type: "Direction::Type" }
64− Property { name: "distance"; type: "double"; isReadonly: true }
65− Property { name: "sceneDistance"; type: "double"; isReadonly: true }
66− Property { name: "touchX"; type: "double"; isReadonly: true }
67− Property { name: "touchY"; type: "double"; isReadonly: true }
68− Property { name: "touchSceneX"; type: "double"; isReadonly: true }
69− Property { name: "touchSceneY"; type: "double"; isReadonly: true }
70− Property { name: "dragging"; type: "bool"; isReadonly: true }
71− Property { name: "pressed"; type: "bool"; isReadonly: true }
72− Property { name: "immediateRecognition"; type: "bool" }
73− Signal {
74− name: "directionChanged"
75− Parameter { name: "direction"; type: "Direction::Type" }
76− }
77− Signal {
78− name: "draggingChanged"
79− Parameter { name: "value"; type: "bool" }
80− }
81− Signal {
82− name: "pressedChanged"
83− Parameter { name: "value"; type: "bool" }
84− }
85− Signal {
86− name: "distanceChanged"
87− Parameter { name: "value"; type: "double" }
88− }
89− Signal {
90− name: "sceneDistanceChanged"
91− Parameter { name: "value"; type: "double" }
92− }
93− Signal {
94− name: "touchXChanged"
95− Parameter { name: "value"; type: "double" }
96− }
97− Signal {
98− name: "touchYChanged"
99− Parameter { name: "value"; type: "double" }
100− }
101− Signal {
102− name: "touchSceneXChanged"
103− Parameter { name: "value"; type: "double" }
104− }
105− Signal {
106− name: "touchSceneYChanged"
107− Parameter { name: "value"; type: "double" }
108− }
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 }
138− }
139− Component {
140− name: "PressedOutsideNotifier"
141− defaultProperty: "data"
142− prototype: "QQuickItem"
143− exports: ["Ubuntu.Gestures/PressedOutsideNotifier 0.1"]
144− exportMetaObjectRevisions: [0]
145− Signal { name: "pressedOutside" }
146− }
147− Component {
148− name: "TouchGate"
149− defaultProperty: "data"
150− prototype: "QQuickItem"
151− exports: ["Ubuntu.Gestures/TouchGate 0.1"]
152− exportMetaObjectRevisions: [0]
153− Property { name: "targetItem"; type: "QQuickItem"; isPointer: true }
154− Signal {
155− name: "targetItemChanged"
156− Parameter { name: "item"; type: "QQuickItem"; isPointer: true }
157− }
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" }
208− }
209−}
plugins/Ubuntu/Gestures/MouseEventGenerator.cppnew file+64
@@ -0,0 +1,64 @@
1+/*
2+ * Copyright (C) 2015-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 "MouseEventGenerator.h"
18+
19+#include <QCoreApplication>
20+#include <QMouseEvent>
21+#include <QQuickItem>
22+
23+MouseEventGenerator::MouseEventGenerator(QObject *parent)
24+ : QObject(parent)
25+{
26+}
27+
28+void MouseEventGenerator::move(const QPointF position)
29+{
30+ if (!m_mousePressed || !m_targetItem) {
31+ return;
32+ }
33+
34+ QMouseEvent mouseEvent(QEvent::MouseMove,
35+ QPointF(position.x(), position.y()), Qt::NoButton, Qt::LeftButton, Qt::NoModifier);
36+
37+ QCoreApplication::sendEvent(m_targetItem, &mouseEvent);
38+}
39+
40+void MouseEventGenerator::press(const QPointF position)
41+{
42+ if (m_mousePressed || !m_targetItem) {
43+ return;
44+ }
45+
46+ QMouseEvent mouseEvent(QEvent::MouseButtonPress,
47+ QPointF(position.x(), position.y()), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
48+
49+ QCoreApplication::sendEvent(m_targetItem, &mouseEvent);
50+ m_mousePressed = true;
51+}
52+
53+void MouseEventGenerator::release(const QPointF position)
54+{
55+ if (!m_mousePressed || !m_targetItem) {
56+ return;
57+ }
58+
59+ QMouseEvent mouseEvent(QEvent::MouseButtonRelease,
60+ QPointF(position.x(), position.y()), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
61+
62+ QCoreApplication::sendEvent(m_targetItem, &mouseEvent);
63+ m_mousePressed = false;
64+}
plugins/Ubuntu/Gestures/MouseEventGenerator.hnew file+48
@@ -0,0 +1,48 @@
1+/*
2+ * Copyright (C) 2015-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 MOUSEEVENTGENERATOR_H
18+#define MOUSEEVENTGENERATOR_H
19+
20+#include <QObject>
21+#include <QPointF>
22+
23+#include "UbuntuGesturesQmlGlobal.h"
24+
25+class QQuickItem;
26+
27+class UBUNTUGESTURESQML_EXPORT MouseEventGenerator : public QObject {
28+ Q_OBJECT
29+ Q_PROPERTY(QQuickItem* targetItem MEMBER m_targetItem NOTIFY targetItemChanged)
30+
31+public:
32+ MouseEventGenerator(QObject *parent = nullptr);
33+
34+ Q_INVOKABLE void move(const QPointF position);
35+ Q_INVOKABLE void press(const QPointF position);
36+ Q_INVOKABLE void release(const QPointF position);
37+
38+Q_SIGNALS:
39+ void targetItemChanged(QQuickItem *);
40+
41+private:
42+ bool m_mousePressed {false};
43+ QQuickItem *m_targetItem {nullptr};
44+
45+ friend class tst_FloatingFlickable;
46+};
47+
48+#endif // MOUSEEVENTGENERATOR_H
plugins/Ubuntu/Gestures/PressedOutsideNotifier.h+1−1
@@ -23,7 +23,7 @@
2323#include <QPointer>
2424#include <QTimer>
2525
26−#include "UbuntuGesturesGlobal.h"
26+#include <ubuntugesturesglobal.h>
2727
2828/*
2929 Notifies when a point, mouse or touch, is pressed outside its area.
plugins/Ubuntu/Gestures/TouchDispatcher.cpp+1−5
@@ -19,11 +19,7 @@
1919#include <QGuiApplication>
2020#include <QScopedPointer>
2121#include <QStyleHints>
22−
23−#pragma GCC diagnostic push
24−#pragma GCC diagnostic ignored "-pedantic"
2522#include <private/qquickitem_p.h>
26−#pragma GCC diagnostic pop
2723
2824#define TOUCHDISPATCHER_DEBUG 0
2925
@@ -225,7 +221,7 @@ void TouchDispatcher::dispatchAsMouse(
225221 QEvent::Type eventType;
226222 if (touchMouse->state() == Qt::TouchPointPressed) {
227223 eventType = QEvent::MouseButtonPress;
228− } if (touchMouse->state() == Qt::TouchPointReleased) {
224+ } else if (touchMouse->state() == Qt::TouchPointReleased) {
229225 eventType = QEvent::MouseButtonRelease;
230226 m_touchMouseId = -1;
231227 } else {
plugins/Ubuntu/Gestures/TouchGate.cpp+2−2
@@ -20,8 +20,8 @@
2020#include <QDebug>
2121#include <QQuickWindow>
2222
23−#include <TouchOwnershipEvent.h>
24−#include <TouchRegistry.h>
23+#include <TouchOwnershipEvent>
24+#include <TouchRegistry>
2525
2626#if TOUCHGATE_DEBUG
2727#define ugDebug(params) qDebug().nospace() << "[TouchGate(" << (void*)this << ")] " << params
plugins/Ubuntu/Gestures/TouchGestureArea.cpp+16−15
@@ -16,10 +16,11 @@
1616
1717#include "TouchGestureArea.h"
1818
19−// local
20−#include "TouchOwnershipEvent.h"
21−#include "TouchRegistry.h"
22−#include "UnownedTouchEvent.h"
19+#include <UbuntuGestures/TouchOwnershipEvent>
20+#include <UbuntuGestures/TouchRegistry>
21+#include <UbuntuGestures/UnownedTouchEvent>
22+// #include "TouchRegistry.h"
23+// #include "UnownedTouchEvent.h"
2324
2425#include <QGuiApplication>
2526#include <QStyleHints>
@@ -374,7 +375,7 @@ void TouchGestureArea::unownedTouchEvent_waitingForMoreTouches(QTouchEvent *even
374375 }
375376 }
376377
377− if (m_candidateTouches.count() == 0) {
378+ if (m_candidateTouches.isEmpty()) {
378379 setInternalStatus(InternalStatus::WaitingForTouch);
379380 }
380381}
@@ -438,7 +439,7 @@ void TouchGestureArea::unownedTouchEvent_rejected(QTouchEvent *event)
438439 }
439440 }
440441
441− if (m_watchedTouches.count() == 0) {
442+ if (m_watchedTouches.isEmpty()) {
442443 setInternalStatus(InternalStatus::WaitingForTouch);
443444 }
444445}
@@ -526,7 +527,7 @@ void TouchGestureArea::updateTouchPoints(QTouchEvent *touchEvent)
526527 if (updateable) {
527528 if (!dragging() && m_status == InternalStatus::Recognized) {
528529 bool allWantDrag = !m_liveTouchPoints.isEmpty();
529− Q_FOREACH(auto point, m_liveTouchPoints) {
530+ Q_FOREACH(const auto &point, m_liveTouchPoints) {
530531 allWantDrag &= point->dragging();
531532 }
532533 // only dragging if all points are dragging.
@@ -588,13 +589,15 @@ void TouchGestureArea::setInternalStatus(uint newStatus)
588589 resyncCachedTouchPoints();
589590 break;
590591 case InternalStatus::WaitingForMoreTouches:
591− m_recognitionTimer->start(m_recognitionPeriod);
592+ m_recognitionTimer->setInterval(m_recognitionPeriod);
593+ m_recognitionTimer->start();
592594 break;
593595 case InternalStatus::Recognized:
594596 resyncCachedTouchPoints();
595597 break;
596598 case InternalStatus::WaitingForRejection:
597− m_recognitionTimer->start(m_releaseRejectPeriod);
599+ m_recognitionTimer->setInterval(m_releaseRejectPeriod);
600+ m_recognitionTimer->start();
598601 break;
599602 case InternalStatus::Rejected:
600603 resyncCachedTouchPoints();
@@ -643,11 +646,9 @@ bool TouchGestureArea::dragging() const
643646QQmlListProperty<GestureTouchPoint> TouchGestureArea::touchPoints()
644647{
645648 return QQmlListProperty<GestureTouchPoint>(this,
646− 0,
647− nullptr,
648− TouchGestureArea::touchPoint_count,
649− TouchGestureArea::touchPoint_at,
650− 0);
649+ nullptr,
650+ TouchGestureArea::touchPoint_count,
651+ TouchGestureArea::touchPoint_at);
651652}
652653
653654int TouchGestureArea::minimumTouchPoints() const
@@ -718,7 +719,7 @@ void TouchGestureArea::rejectGesture()
718719 }
719720 m_candidateTouches.clear();
720721
721− if (m_watchedTouches.count() == 0) {
722+ if (m_watchedTouches.isEmpty()) {
722723 setInternalStatus(InternalStatus::WaitingForTouch);
723724 } else {
724725 setInternalStatus(InternalStatus::Rejected);
plugins/Ubuntu/Gestures/TouchGestureArea.h+9−10
@@ -21,8 +21,7 @@
2121
2222#include <QQuickItem>
2323
24−// lib UbuntuGestures
25−#include <Timer.h>
24+#include <UbuntuGestures/Timer>
2625
2726class TouchOwnershipEvent;
2827class UnownedTouchEvent;
@@ -106,8 +105,8 @@ private:
106105/*
107106 An area that detects multi-finger gestures.
108107
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.
108+ We can use this to detect gestures constrained by a minimum and/or maximum number of touch points.
109+ This component uses the touch registry to apply for ownership of touch points.
111110 This way we can use the component in conjuntion with the directional drag area to compete for ownwership
112111 or gestures; unlike the MultiPointTouchArea.
113112 */
@@ -137,7 +136,7 @@ public:
137136 Recognized,
138137 Rejected
139138 };
140− TouchGestureArea(QQuickItem* parent = NULL);
139+ TouchGestureArea(QQuickItem* parent = nullptr);
141140 ~TouchGestureArea();
142141
143142 bool event(QEvent *e) override;
@@ -165,10 +164,10 @@ Q_SIGNALS:
165164
166165 void touchPointsUpdated();
167166 void draggingChanged(bool dragging);
168− void minimumTouchPointsChanged(bool value);
169− void maximumTouchPointsChanged(bool value);
170− void recognitionPeriodChanged(bool value);
171− void releaseRejectPeriodChanged(bool value);
167+ void minimumTouchPointsChanged(int value);
168+ void maximumTouchPointsChanged(int value);
169+ void recognitionPeriodChanged(int value);
170+ void releaseRejectPeriodChanged(int value);
172171
173172 void pressed(const QList<QObject*>& points);
174173 void released(const QList<QObject*>& points);
@@ -176,7 +175,7 @@ Q_SIGNALS:
176175 void clicked();
177176
178177protected:
179− void itemChange(ItemChange change, const ItemChangeData &value);
178+ void itemChange(ItemChange change, const ItemChangeData &value) override;
180179
181180private Q_SLOTS:
182181 void rejectGesture();
plugins/Ubuntu/Gestures/plugin.cpp+3−5
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013,2015 Canonical, Ltd.
2+ * Copyright (C) 2013,2015,2016 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -17,8 +17,7 @@
1717#include "plugin.h"
1818#include "AxisVelocityCalculator.h"
1919#include "Direction.h"
20−#include "DirectionalDragArea.h"
21−#include "FloatingFlickable.h"
20+#include "MouseEventGenerator.h"
2221#include "PressedOutsideNotifier.h"
2322#include "TouchGate.h"
2423#include "TouchGestureArea.h"
@@ -34,9 +33,8 @@ static QObject* directionSingleton(QQmlEngine* engine, QJSEngine* scriptEngine)
3433void UbuntuGesturesQmlPlugin::registerTypes(const char *uri)
3534{
3635 qmlRegisterSingletonType<Direction>(uri, 0, 1, "Direction", directionSingleton);
37− qmlRegisterType<DirectionalDragArea>(uri, 0, 1, "DirectionalDragArea");
3836 qmlRegisterType<AxisVelocityCalculator>(uri, 0, 1, "AxisVelocityCalculator");
39− qmlRegisterType<FloatingFlickable>(uri, 0, 1, "FloatingFlickable");
37+ qmlRegisterType<MouseEventGenerator>(uri, 0, 1, "MouseEventGenerator");
4038 qmlRegisterType<PressedOutsideNotifier>(uri, 0, 1, "PressedOutsideNotifier");
4139 qmlRegisterType<TouchGate>(uri, 0, 1, "TouchGate");
4240 qmlRegisterType<TouchGestureArea>(uri, 0, 1, "TouchGestureArea");
plugins/Ubuntu/Payments/Payments.qmltypesdeleted−43
@@ -1,43 +0,0 @@
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 Ubuntu.Payments 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "Payments"
12− prototype: "QObject"
13− exports: ["Ubuntu.Payments/Payments 0.1"]
14− exportMetaObjectRevisions: [0]
15− Property { name: "currency"; type: "string" }
16− Property { name: "price"; type: "double" }
17− Property { name: "storeItemId"; type: "string" }
18− Property { name: "formattedPrice"; type: "string"; isReadonly: true }
19− Signal {
20− name: "currencyChanged"
21− Parameter { name: "currency"; type: "string" }
22− }
23− Signal {
24− name: "priceChanged"
25− Parameter { name: "price"; type: "double" }
26− }
27− Signal {
28− name: "storeItemIdChanged"
29− Parameter { name: "store_item_id"; type: "string" }
30− }
31− Signal {
32− name: "formattedPriceChanged"
33− Parameter { name: "formatted_price"; type: "string" }
34− }
35− Signal {
36− name: "purchaseError"
37− Parameter { name: "error"; type: "string" }
38− }
39− Signal { name: "purchaseCompleted" }
40− Signal { name: "purchaseCancelled" }
41− Method { name: "start" }
42− }
43−}
plugins/Ubuntu/SystemImage/SystemImage.qmltypesdeleted−19
@@ -1,19 +0,0 @@
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 Ubuntu.SystemImage 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "SystemImage"
12− prototype: "QObject"
13− exports: ["Ubuntu.SystemImage/SystemImage 0.1"]
14− isCreatable: false
15− isSingleton: true
16− exportMetaObjectRevisions: [0]
17− Method { name: "factoryReset" }
18− }
19−}
plugins/Unity/Connectivity/Connectivity.qmltypesdeleted−19
@@ -1,19 +0,0 @@
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.Connectivity 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "Connectivity"
12− prototype: "QObject"
13− exports: ["Unity.Connectivity/Connectivity 0.1"]
14− isCreatable: false
15− isSingleton: true
16− exportMetaObjectRevisions: [0]
17− Method { name: "unlockAllModems" }
18− }
19−}
plugins/Unity/DashCommunicator/DashCommunicator.qmltypesdeleted−47
@@ -1,47 +0,0 @@
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.DashCommunicator 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "DashCommunicator"
12− prototype: "QThread"
13− exports: ["Unity.DashCommunicator/DashCommunicator 0.1"]
14− exportMetaObjectRevisions: [0]
15− Method {
16− name: "setCurrentScope"
17− Parameter { name: "index"; type: "int" }
18− Parameter { name: "animate"; type: "bool" }
19− Parameter { name: "isSwipe"; type: "bool" }
20− }
21− }
22− Component {
23− name: "DashCommunicatorService"
24− prototype: "QObject"
25− exports: ["Unity.DashCommunicator/DashCommunicatorService 0.1"]
26− exportMetaObjectRevisions: [0]
27− Signal {
28− name: "setCurrentScopeRequested"
29− Parameter { name: "index"; type: "int" }
30− Parameter { name: "animate"; type: "bool" }
31− Parameter { name: "isSwipe"; type: "bool" }
32− }
33− }
34− Component {
35− name: "QThread"
36− prototype: "QObject"
37− Signal { name: "started" }
38− Signal { name: "finished" }
39− Method {
40− name: "start"
41− Parameter { type: "Priority" }
42− }
43− Method { name: "start" }
44− Method { name: "terminate" }
45− Method { name: "quit" }
46− }
47−}
plugins/Unity/Indicators/CMakeLists.txt+4
@@ -6,6 +6,10 @@ find_package(Qt5Quick REQUIRED)
66include_directories(
77 ${CMAKE_CURRENT_SOURCE_DIR}
88 ${CMAKE_CURRENT_BINARY_DIR}
9+)
10+
11+include_directories(
12+ SYSTEM
913 ${GLIB_INCLUDE_DIRS}
1014 ${GIO_INCLUDE_DIRS}
1115 ${QMENUMODEL_INCLUDE_DIRS}
plugins/Unity/Indicators/Indicators.qmltypesdeleted−264
@@ -1,264 +0,0 @@
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.Indicators 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "ActionRootState"
12− prototype: "RootStateObject"
13− exports: ["Unity.Indicators/ActionRootState 0.1"]
14− exportMetaObjectRevisions: [0]
15− Property { name: "actionGroup"; type: "QDBusActionGroup"; isPointer: true }
16− Property { name: "actionName"; type: "string" }
17− }
18− Component {
19− name: "ActionState"
20− prototype: "QObject"
21− exports: ["Unity.Indicators/ActionState 0.1"]
22− isCreatable: false
23− exportMetaObjectRevisions: [0]
24− Enum {
25− name: "ActionStates"
26− values: {
27− "Label": 0,
28− "IconSource": 1,
29− "AccessableName": 2,
30− "Visible": 3
31− }
32− }
33− }
34− Component {
35− name: "FlatMenuProxyModelRole"
36− prototype: "QObject"
37− exports: ["Unity.Indicators/FlatMenuProxyModelRole 0.1"]
38− isCreatable: false
39− exportMetaObjectRevisions: [0]
40− Enum {
41− name: "Roles"
42− values: {
43− "Action": 1,
44− "Label": 2,
45− "Extra": 3,
46− "Depth": 4,
47− "hasSection": 5,
48− "hasSubMenu": 6
49− }
50− }
51− }
52− Component {
53− name: "IndicatorsManager"
54− prototype: "QObject"
55− exports: ["Unity.Indicators/IndicatorsManager 0.1"]
56− exportMetaObjectRevisions: [0]
57− Property { name: "loaded"; type: "bool"; isReadonly: true }
58− Property { name: "profile"; type: "string" }
59− Signal {
60− name: "loadedChanged"
61− Parameter { type: "bool" }
62− }
63− Signal {
64− name: "profileChanged"
65− Parameter { type: "string" }
66− }
67− Signal {
68− name: "indicatorLoaded"
69− Parameter { name: "indicator_name"; type: "string" }
70− }
71− Signal {
72− name: "indicatorAboutToBeUnloaded"
73− Parameter { name: "indicator_name"; type: "string" }
74− }
75− Method { name: "load" }
76− Method { name: "unload" }
77− }
78− Component {
79− name: "IndicatorsModel"
80− prototype: "QAbstractListModel"
81− exports: ["Unity.Indicators/IndicatorsModel 0.1"]
82− exportMetaObjectRevisions: [0]
83− Property { name: "count"; type: "int"; isReadonly: true }
84− Property { name: "profile"; type: "string" }
85− Signal {
86− name: "indicatorDataChanged"
87− Parameter { name: "data"; type: "QVariant" }
88− }
89− Method { name: "load" }
90− Method { name: "unload" }
91− Method {
92− name: "data"
93− type: "QVariant"
94− Parameter { name: "row"; type: "int" }
95− Parameter { name: "role"; type: "int" }
96− }
97− }
98− Component {
99− name: "IndicatorsModelRole"
100− prototype: "QObject"
101− exports: ["Unity.Indicators/IndicatorsModelRole 0.1"]
102− isCreatable: false
103− exportMetaObjectRevisions: [0]
104− Enum {
105− name: "Roles"
106− values: {
107− "Identifier": 0,
108− "Position": 1,
109− "IndicatorProperties": 2
110− }
111− }
112− }
113− Component {
114− name: "MenuContentActivator"
115− prototype: "QObject"
116− exports: ["Unity.Indicators/MenuContentActivator 0.1"]
117− exportMetaObjectRevisions: [0]
118− Property { name: "baseIndex"; type: "int" }
119− Property { name: "running"; type: "bool" }
120− Property { name: "count"; type: "int" }
121− Property { name: "content"; type: "MenuContentState"; isList: true; isReadonly: true }
122− Signal {
123− name: "baseIndexChanged"
124− Parameter { name: "baseIndex"; type: "int" }
125− }
126− Signal {
127− name: "deltaChanged"
128− Parameter { name: "delta"; type: "int" }
129− }
130− Signal {
131− name: "runningChanged"
132− Parameter { name: "running"; type: "bool" }
133− }
134− Signal {
135− name: "countChanged"
136− Parameter { name: "count"; type: "int" }
137− }
138− Method { name: "restart" }
139− Method { name: "stop" }
140− Method { name: "clear" }
141− Method {
142− name: "isMenuContentActive"
143− type: "bool"
144− Parameter { name: "index"; type: "int" }
145− }
146− }
147− Component {
148− name: "MenuContentState"
149− prototype: "QObject"
150− exports: ["Unity.Indicators/MenuContentState 0.1"]
151− isCreatable: false
152− exportMetaObjectRevisions: [0]
153− Property { name: "active"; type: "bool"; isReadonly: true }
154− }
155− Component {
156− name: "ModelActionRootState"
157− prototype: "RootStateObject"
158− exports: ["Unity.Indicators/ModelActionRootState 0.1"]
159− exportMetaObjectRevisions: [0]
160− Property { name: "menu"; type: "UnityMenuModel"; isPointer: true }
161− Signal { name: "indexChanged" }
162− }
163− Component {
164− name: "ModelPrinter"
165− prototype: "QObject"
166− exports: ["Unity.Indicators/ModelPrinter 0.1"]
167− exportMetaObjectRevisions: [0]
168− Property { name: "model"; type: "UnityMenuModel"; isPointer: true }
169− Property { name: "text"; type: "string"; isReadonly: true }
170− Method { name: "text"; type: "string" }
171− }
172− Component {
173− name: "NetworkActionState"
174− prototype: "QObject"
175− exports: ["Unity.Indicators/NetworkActionState 0.1"]
176− isCreatable: false
177− exportMetaObjectRevisions: [0]
178− Enum {
179− name: "NetworkActionStates"
180− values: {
181− "Connection": 1,
182− "SignalStrength": 2
183− }
184− }
185− }
186− Component {
187− name: "NetworkConnection"
188− prototype: "QObject"
189− exports: ["Unity.Indicators/NetworkConnection 0.1"]
190− isCreatable: false
191− exportMetaObjectRevisions: [0]
192− Enum {
193− name: "NetworkConnectionStates"
194− values: {
195− "Initial": 0,
196− "Activating": 1,
197− "Activated": 2,
198− "Deactivating": 3
199− }
200− }
201− }
202− Component {
203− name: "RootStateObject"
204− prototype: "QObject"
205− Property { name: "valid"; type: "bool"; isReadonly: true }
206− Property { name: "title"; type: "string"; isReadonly: true }
207− Property { name: "leftLabel"; type: "string"; isReadonly: true }
208− Property { name: "rightLabel"; type: "string"; isReadonly: true }
209− Property { name: "icons"; type: "QStringList"; isReadonly: true }
210− Property { name: "accessibleName"; type: "string"; isReadonly: true }
211− Property { name: "indicatorVisible"; type: "bool"; isReadonly: true }
212− Signal { name: "updated" }
213− }
214− Component {
215− name: "SharedUnityMenuModel"
216− prototype: "QObject"
217− exports: ["Unity.Indicators/SharedUnityMenuModel 0.1"]
218− exportMetaObjectRevisions: [0]
219− Property { name: "busName"; type: "QByteArray" }
220− Property { name: "menuObjectPath"; type: "QByteArray" }
221− Property { name: "actions"; type: "QVariantMap" }
222− Property { name: "model"; type: "UnityMenuModel"; isReadonly: true; isPointer: true }
223− }
224− Component {
225− name: "UnityMenuModelCache"
226− prototype: "QObject"
227− exports: ["Unity.Indicators/UnityMenuModelCache 0.1"]
228− isCreatable: false
229− isSingleton: true
230− exportMetaObjectRevisions: [0]
231− Method {
232− name: "contains"
233− type: "bool"
234− Parameter { name: "path"; type: "QByteArray" }
235− }
236− }
237− Component {
238− name: "UnityMenuModelStack"
239− prototype: "QObject"
240− exports: ["Unity.Indicators/UnityMenuModelStack 0.1"]
241− exportMetaObjectRevisions: [0]
242− Property { name: "head"; type: "UnityMenuModel"; isPointer: true }
243− Property { name: "tail"; type: "UnityMenuModel"; isReadonly: true; isPointer: true }
244− Property { name: "count"; type: "int"; isReadonly: true }
245− Signal {
246− name: "headChanged"
247− Parameter { name: "head"; type: "UnityMenuModel"; isPointer: true }
248− }
249− Signal {
250− name: "tailChanged"
251− Parameter { name: "tail"; type: "UnityMenuModel"; isPointer: true }
252− }
253− Signal {
254− name: "countChanged"
255− Parameter { name: "count"; type: "int" }
256− }
257− Method {
258− name: "push"
259− Parameter { name: "model"; type: "UnityMenuModel"; isPointer: true }
260− Parameter { name: "menuIndex"; type: "int" }
261− }
262− Method { name: "pop"; type: "UnityMenuModel*" }
263− }
264−}
plugins/Unity/Indicators/indicatorsmanager.cpp+1−1
@@ -291,7 +291,7 @@ Indicator::Ptr IndicatorsManager::indicator(const QString& indicator_name)
291291 // The rest of the indicators respect their default profile (which is "phone", even on desktop PCs)
292292 if ((new_indicator->identifier() == QStringLiteral("indicator-session"))
293293 || (new_indicator->identifier() == QStringLiteral("indicator-power") && m_platform.isPC())) {
294− new_indicator->setProfile(QStringLiteral("desktop"));
294+ new_indicator->setProfile(m_profile.replace(QStringLiteral("phone"), QStringLiteral("desktop")));
295295 } else {
296296 new_indicator->setProfile(m_profile);
297297 }
plugins/Unity/InputInfo/InputInfo.qmltypesdeleted−71
@@ -1,71 +0,0 @@
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/InputInfo/linux/qinputdeviceinfo_linux.cpp+7−2
@@ -44,6 +44,7 @@
4444#include <libudev.h>
4545#include <libevdev/libevdev.h>
4646#include <fcntl.h>
47+#include <unistd.h>
4748#include <QDebug>
4849#include <QSocketNotifier>
4950#include <QTimer>
@@ -52,6 +53,7 @@
5253QInputDeviceManagerPrivate::QInputDeviceManagerPrivate(QObject *parent) :
5354 QObject(parent),
5455 currentFilter(QInputDevice::Unknown),
56+ udevMonitor(0),
5557 udevice(0)
5658{
5759 QTimer::singleShot(250,this,SLOT(init()));
@@ -83,9 +85,9 @@ void QInputDeviceManagerPrivate::init()
8385 udev_enumerate_add_match_subsystem(enumerate, subsystem.toLatin1());
8486
8587 udev_monitor_enable_receiving(udevMonitor);
86− notifierFd = udev_monitor_get_fd(udevMonitor);
88+ int notifierFd = udev_monitor_get_fd(udevMonitor);
8789
88− notifier = new QSocketNotifier(notifierFd, QSocketNotifier::Read, this);
90+ QSocketNotifier *notifier = new QSocketNotifier(notifierFd, QSocketNotifier::Read, this);
8991 connect(notifier, SIGNAL(activated(int)), this, SLOT(onUDevChanges()));
9092
9193 udev_enumerate_scan_devices(enumerate);
@@ -168,6 +170,7 @@ QInputDevice *QInputDeviceManagerPrivate::addDevice(struct udev_device *udev)
168170 rc = libevdev_new_from_fd(fd, &dev);
169171 if (rc < 0) {
170172 qWarning() << "Failed to init libevdev ("<< strerror(-rc) << ")";
173+ close(fd);
171174 return Q_NULLPTR;
172175 }
173176
@@ -195,6 +198,8 @@ QInputDevice *QInputDeviceManagerPrivate::addDevice(struct udev_device *udev)
195198 }
196199 }
197200
201+ libevdev_free(dev);
202+ close(fd);
198203 return inputDevice;
199204}
200205
plugins/Unity/InputInfo/linux/qinputdeviceinfo_linux_p.h−2
@@ -83,8 +83,6 @@ private:
8383
8484 QInputDevice *addDevice(const QString &path);
8585 void removeDevice(const QString &path);
86− QSocketNotifier *notifier;
87− int notifierFd;
8886 struct udev_monitor *udevMonitor;
8987 QInputDevice::InputTypeFlags getInputTypeFlags(struct udev_device *);
9088 struct udev *udevice;
plugins/Unity/InputInfo/plugin.h+1−1
@@ -24,7 +24,7 @@ class InputInfoPlugin : public QQmlExtensionPlugin
2424 Q_OBJECT
2525 Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
2626public:
27− void registerTypes(const char *uri);
27+ void registerTypes(const char *uri) override;
2828};
2929
3030#endif // INPUTINFO_PLUGIN_H
plugins/Unity/InputInfo/qdeclarativeinputdevicemodel_p.h+3−3
@@ -69,8 +69,8 @@ public:
6969 explicit QDeclarativeInputDeviceModel(QObject *parent = 0);
7070 virtual ~QDeclarativeInputDeviceModel();
7171
72− QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
73− int rowCount(const QModelIndex &parent = QModelIndex()) const;
72+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
73+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
7474
7575 void setDeviceFilter(QInputDevice::InputType filter);
7676 QInputDevice::InputType deviceFilter();
@@ -78,7 +78,7 @@ public:
7878 Q_INVOKABLE int indexOf(const QString &devicePath) const;
7979
8080 Q_INVOKABLE QInputDevice *get(int index) const;
81− QHash<int, QByteArray> roleNames() const;
81+ QHash<int, QByteArray> roleNames() const override;
8282
8383Q_SIGNALS:
8484 void deviceAdded(const QString &devicePath);
plugins/Unity/Launcher/CMakeLists.txt+3−1
@@ -1,4 +1,4 @@
1−pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=7)
1+pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=9)
22pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
33
44add_definitions(-DSM_BUSNAME=systemBus)
@@ -23,6 +23,8 @@ set(QMLLAUNCHERPLUGIN_SRC
2323 asadapter.cpp
2424 ${CMAKE_SOURCE_DIR}/plugins/AccountsService/AccountsServiceDBusAdaptor.cpp
2525 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationManagerInterface.h
26+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
27+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceListInterface.h
2628 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherItemInterface.h
2729 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherModelInterface.h
2830 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/QuickListModelInterface.h
plugins/Unity/Launcher/Launcher.qmltypesdeleted−182
@@ -1,182 +0,0 @@
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.Launcher 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "LauncherItem"
12− prototype: "unity::shell::launcher::LauncherItemInterface"
13− exports: ["Unity.Launcher/LauncherItem 0.1"]
14− isCreatable: false
15− exportMetaObjectRevisions: [0]
16− }
17− Component {
18− name: "LauncherModel"
19− prototype: "unity::shell::launcher::LauncherModelInterface"
20− exports: ["Unity.Launcher/LauncherModel 0.1"]
21− isCreatable: false
22− isSingleton: true
23− exportMetaObjectRevisions: [0]
24− Method {
25− name: "requestRemove"
26− Parameter { name: "appId"; type: "string" }
27− }
28− Method { name: "refresh" }
29− Method {
30− name: "get"
31− type: "unity::shell::launcher::LauncherItemInterface*"
32− Parameter { name: "index"; type: "int" }
33− }
34− Method {
35− name: "move"
36− Parameter { name: "oldIndex"; type: "int" }
37− Parameter { name: "newIndex"; type: "int" }
38− }
39− Method {
40− name: "pin"
41− Parameter { name: "appId"; type: "string" }
42− Parameter { name: "index"; type: "int" }
43− }
44− Method {
45− name: "pin"
46− Parameter { name: "appId"; type: "string" }
47− }
48− Method {
49− name: "quickListActionInvoked"
50− Parameter { name: "appId"; type: "string" }
51− Parameter { name: "actionIndex"; type: "int" }
52− }
53− Method {
54− name: "setUser"
55− Parameter { name: "username"; type: "string" }
56− }
57− Method {
58− name: "getUrlForAppId"
59− type: "string"
60− Parameter { name: "appId"; type: "string" }
61− }
62− }
63− Component {
64− name: "QuickListModel"
65− prototype: "unity::shell::launcher::QuickListModelInterface"
66− exports: ["Unity.Launcher/QuickListModel 0.1"]
67− isCreatable: false
68− exportMetaObjectRevisions: [0]
69− }
70− Component {
71− name: "unity::shell::launcher::LauncherItemInterface"
72− prototype: "QObject"
73− exports: ["Unity.Launcher/LauncherItemInterface 0.1"]
74− isCreatable: false
75− exportMetaObjectRevisions: [0]
76− Property { name: "appId"; type: "string"; isReadonly: true }
77− Property { name: "name"; type: "string"; isReadonly: true }
78− Property { name: "icon"; type: "string"; isReadonly: true }
79− Property { name: "pinned"; type: "bool"; isReadonly: true }
80− Property { name: "running"; type: "bool"; isReadonly: true }
81− Property { name: "recent"; type: "bool"; isReadonly: true }
82− Property { name: "progress"; type: "int"; isReadonly: true }
83− Property { name: "count"; type: "int"; isReadonly: true }
84− Property { name: "countVisible"; type: "bool"; isReadonly: true }
85− Property { name: "focused"; type: "bool"; isReadonly: true }
86− Property {
87− name: "quickList"
88− type: "unity::shell::launcher::QuickListModelInterface"
89− isReadonly: true
90− isPointer: true
91− }
92− Signal {
93− name: "nameChanged"
94− Parameter { name: "name"; type: "string" }
95− }
96− Signal {
97− name: "iconChanged"
98− Parameter { name: "icon"; type: "string" }
99− }
100− Signal {
101− name: "pinnedChanged"
102− Parameter { name: "pinned"; type: "bool" }
103− }
104− Signal {
105− name: "runningChanged"
106− Parameter { name: "running"; type: "bool" }
107− }
108− Signal {
109− name: "recentChanged"
110− Parameter { name: "running"; type: "bool" }
111− }
112− Signal {
113− name: "progressChanged"
114− Parameter { name: "progress"; type: "int" }
115− }
116− Signal {
117− name: "countChanged"
118− Parameter { name: "count"; type: "int" }
119− }
120− Signal {
121− name: "countVisibleChanged"
122− Parameter { name: "countVisible"; type: "bool" }
123− }
124− Signal {
125− name: "focusedChanged"
126− Parameter { name: "focused"; type: "bool" }
127− }
128− }
129− Component {
130− name: "unity::shell::launcher::LauncherModelInterface"
131− prototype: "QAbstractListModel"
132− exports: ["Unity.Launcher/LauncherModelInterface 0.1"]
133− isCreatable: false
134− exportMetaObjectRevisions: [0]
135− Property {
136− name: "applicationManager"
137− type: "unity::shell::application::ApplicationManagerInterface"
138− isPointer: true
139− }
140− Property { name: "onlyPinned"; type: "bool" }
141− Signal { name: "hint" }
142− Method {
143− name: "move"
144− Parameter { name: "oldIndex"; type: "int" }
145− Parameter { name: "newIndex"; type: "int" }
146− }
147− Method {
148− name: "get"
149− type: "unity::shell::launcher::LauncherItemInterface*"
150− Parameter { name: "index"; type: "int" }
151− }
152− Method {
153− name: "pin"
154− Parameter { name: "appId"; type: "string" }
155− Parameter { name: "index"; type: "int" }
156− }
157− Method {
158− name: "pin"
159− Parameter { name: "appId"; type: "string" }
160− }
161− Method {
162− name: "requestRemove"
163− Parameter { name: "appId"; type: "string" }
164− }
165− Method {
166− name: "quickListActionInvoked"
167− Parameter { name: "appId"; type: "string" }
168− Parameter { name: "actionIndex"; type: "int" }
169− }
170− Method {
171− name: "setUser"
172− Parameter { name: "username"; type: "string" }
173− }
174− }
175− Component {
176− name: "unity::shell::launcher::QuickListModelInterface"
177− prototype: "QAbstractListModel"
178− exports: ["Unity.Launcher/QuickListInterface 0.1"]
179− isCreatable: false
180− exportMetaObjectRevisions: [0]
181− }
182−}
plugins/Unity/Launcher/launcheritem.cpp+14−9
@@ -35,6 +35,7 @@ LauncherItem::LauncherItem(const QString &appId, const QString &name, const QStr
3535 m_countVisible(false),
3636 m_focused(false),
3737 m_alerting(false),
38+ m_surfaceCount(0),
3839 m_quickList(new QuickListModel(this))
3940{
4041 Q_ASSERT(parent != nullptr);
@@ -162,9 +163,6 @@ void LauncherItem::setCount(int count)
162163 if (m_count != count) {
163164 m_count = count;
164165 Q_EMIT countChanged(count);
165− if (m_countVisible) {
166− setAlerting(true);
167− }
168166 }
169167}
170168
@@ -178,9 +176,6 @@ void LauncherItem::setCountVisible(bool countVisible)
178176 if (m_countVisible != countVisible) {
179177 m_countVisible = countVisible;
180178 Q_EMIT countVisibleChanged(countVisible);
181− if (countVisible) {
182− setAlerting(true);
183− }
184179 }
185180}
186181
@@ -193,9 +188,6 @@ void LauncherItem::setFocused(bool focused)
193188{
194189 if (m_focused != focused) {
195190 m_focused = focused;
196− if (focused) {
197− setAlerting(false);
198− }
199191 Q_EMIT focusedChanged(focused);
200192 }
201193}
@@ -213,6 +205,19 @@ void LauncherItem::setAlerting(bool alerting)
213205 }
214206}
215207
208+int LauncherItem::surfaceCount() const
209+{
210+ return m_surfaceCount;
211+}
212+
213+void LauncherItem::setSurfaceCount(int surfaceCount)
214+{
215+ if (m_surfaceCount != surfaceCount) {
216+ m_surfaceCount = surfaceCount;
217+ Q_EMIT surfaceCountChanged(surfaceCount);
218+ }
219+}
220+
216221unity::shell::launcher::QuickListModelInterface *LauncherItem::quickList() const
217222{
218223 return m_quickList;
plugins/Unity/Launcher/launcheritem.h+3
@@ -45,6 +45,7 @@ public:
4545 bool countVisible() const override;
4646 bool focused() const override;
4747 bool alerting() const override;
48+ int surfaceCount() const override;
4849
4950 unity::shell::launcher::QuickListModelInterface *quickList() const override;
5051
@@ -59,6 +60,7 @@ private:
5960 void setCountVisible(bool countVisible);
6061 void setFocused(bool focused);
6162 void setAlerting(bool alerting);
63+ void setSurfaceCount(int surfaceCount);
6264
6365private:
6466 QString m_appId;
@@ -72,6 +74,7 @@ private:
7274 bool m_countVisible;
7375 bool m_focused;
7476 bool m_alerting;
77+ int m_surfaceCount;
7578 QuickListModel *m_quickList;
7679 QuickListEntry m_quitAction;
7780
plugins/Unity/Launcher/launchermodel.cpp+58−26
@@ -25,6 +25,7 @@
2525#include "asadapter.h"
2626
2727#include <unity/shell/application/ApplicationInfoInterface.h>
28+#include <unity/shell/application/MirSurfaceListInterface.h>
2829
2930#include <QDesktopServices>
3031#include <QDebug>
@@ -88,6 +89,8 @@ QVariant LauncherModel::data(const QModelIndex &index, int role) const
8889 return item->alerting();
8990 case RoleRunning:
9091 return item->running();
92+ case RoleSurfaceCount:
93+ return item->surfaceCount();
9194 default:
9295 qWarning() << Q_FUNC_INFO << "missing role, implement me";
9396 return QVariant();
@@ -96,18 +99,6 @@ QVariant LauncherModel::data(const QModelIndex &index, int role) const
9699 return QVariant();
97100}
98101
99−void LauncherModel::setAlerting(const QString &appId, bool alerting) {
100− int index = findApplication(appId);
101− if (index >= 0) {
102− QModelIndex modelIndex = this->index(index);
103− LauncherItem *item = m_list.at(index);
104− if (!item->focused()) {
105− item->setAlerting(alerting);
106− Q_EMIT dataChanged(modelIndex, modelIndex, {RoleAlerting});
107− }
108− }
109−}
110−
111102unity::shell::launcher::LauncherItemInterface *LauncherModel::get(int index) const
112103{
113104 if (index < 0 || index >= m_list.count()) {
@@ -358,11 +349,13 @@ void LauncherModel::countChanged(const QString &appId, int count)
358349 if (idx >= 0) {
359350 LauncherItem *item = m_list.at(idx);
360351 item->setCount(count);
361− if (item->countVisible()) {
362− setAlerting(item->appId(), true);
352+ QVector<int> changedRoles = {RoleCount};
353+ if (item->countVisible() && !item->alerting() && !item->focused()) {
354+ changedRoles << RoleAlerting;
355+ item->setAlerting(true);
363356 }
364357 m_asAdapter->syncItems(m_list);
365− Q_EMIT dataChanged(index(idx), index(idx), {RoleCount});
358+ Q_EMIT dataChanged(index(idx), index(idx), changedRoles);
366359 }
367360}
368361
@@ -372,10 +365,12 @@ void LauncherModel::countVisibleChanged(const QString &appId, bool countVisible)
372365 if (idx >= 0) {
373366 LauncherItem *item = m_list.at(idx);
374367 item->setCountVisible(countVisible);
375− if (countVisible) {
376− setAlerting(item->appId(), true);
368+ QVector<int> changedRoles = {RoleCountVisible};
369+ if (countVisible && !item->alerting() && !item->focused()) {
370+ changedRoles << RoleAlerting;
371+ item->setAlerting(true);
377372 }
378− Q_EMIT dataChanged(index(idx), index(idx), {RoleCountVisible});
373+ Q_EMIT dataChanged(index(idx), index(idx), changedRoles);
379374
380375 // If countVisible goes to false, and the item is neither pinned nor recent we can drop it
381376 if (!countVisible && !item->pinned() && !item->recent()) {
@@ -498,8 +493,10 @@ void LauncherModel::alert(const QString &appId)
498493 int idx = findApplication(appId);
499494 if (idx >= 0) {
500495 LauncherItem *item = m_list.at(idx);
501− setAlerting(item->appId(), true);
502− Q_EMIT dataChanged(index(idx), index(idx), {RoleAlerting});
496+ if (!item->focused() && !item->alerting()) {
497+ item->setAlerting(true);
498+ Q_EMIT dataChanged(index(idx), index(idx), {RoleAlerting});
499+ }
503500 }
504501}
505502
@@ -525,28 +522,50 @@ void LauncherModel::applicationAdded(const QModelIndex &parent, int row)
525522 item->setRecent(true);
526523 Q_EMIT dataChanged(index(itemIndex), index(itemIndex), {RoleRecent});
527524 }
525+ if (item->surfaceCount() != app->surfaceCount()) {
526+ item->setSurfaceCount(app->surfaceCount());
527+ Q_EMIT dataChanged(index(itemIndex), index(itemIndex), {RoleSurfaceCount});
528+ }
529+
528530 item->setRunning(true);
529531 } else {
530532 LauncherItem *item = new LauncherItem(app->appId(), app->name(), app->icon().toString(), this);
531533 item->setRecent(true);
532534 item->setRunning(true);
533535 item->setFocused(app->focused());
534−
536+ item->setSurfaceCount(app->surfaceCount());
535537 beginInsertRows(QModelIndex(), m_list.count(), m_list.count());
536538 m_list.append(item);
537539 endInsertRows();
538540 }
541+ connect(app, &ApplicationInfoInterface::surfaceCountChanged, this, &LauncherModel::applicationSurfaceCountChanged);
539542 m_asAdapter->syncItems(m_list);
540543 Q_EMIT dataChanged(index(itemIndex), index(itemIndex), {RoleRunning});
541544}
542545
546+void LauncherModel::applicationSurfaceCountChanged(int count)
547+{
548+ ApplicationInfoInterface *app = static_cast<ApplicationInfoInterface*>(sender());
549+ int idx = findApplication(app->appId());
550+ if (idx < 0) {
551+ qWarning() << "Received a surface count changed event from an app that's not in the Launcher model";
552+ return;
553+ }
554+ LauncherItem *item = m_list.at(idx);
555+ if (item->surfaceCount() != count) {
556+ item->setSurfaceCount(count);
557+ Q_EMIT dataChanged(index(idx), index(idx), {RoleSurfaceCount});
558+ }
559+}
560+
543561void LauncherModel::applicationRemoved(const QModelIndex &parent, int row)
544562{
545563 Q_UNUSED(parent)
546564
565+ ApplicationInfoInterface *app = m_appManager->get(row);
547566 int appIndex = -1;
548567 for (int i = 0; i < m_list.count(); ++i) {
549− if (m_list.at(i)->appId() == m_appManager->get(row)->appId()) {
568+ if (m_list.at(i)->appId() == app->appId()) {
550569 appIndex = i;
551570 break;
552571 }
@@ -557,17 +576,24 @@ void LauncherModel::applicationRemoved(const QModelIndex &parent, int row)
557576 return;
558577 }
559578
579+ disconnect(app, &ApplicationInfoInterface::surfaceCountChanged, this, &LauncherModel::applicationSurfaceCountChanged);
580+
560581 LauncherItem * item = m_list.at(appIndex);
561− item->setRunning(false);
562582
563583 if (!item->pinned()) {
564584 beginRemoveRows(QModelIndex(), appIndex, appIndex);
565585 m_list.takeAt(appIndex)->deleteLater();
566586 endRemoveRows();
567587 m_asAdapter->syncItems(m_list);
568− Q_EMIT dataChanged(index(appIndex), index(appIndex), {RolePinned});
588+ } else {
589+ QVector<int> changedRoles = {RoleRunning};
590+ item->setRunning(false);
591+ if (item->focused()) {
592+ changedRoles << RoleFocused;
593+ item->setFocused(false);
594+ }
595+ Q_EMIT dataChanged(index(appIndex), index(appIndex), changedRoles);
569596 }
570− Q_EMIT dataChanged(index(appIndex), index(appIndex), {RoleRunning});
571597}
572598
573599void LauncherModel::focusedAppIdChanged()
@@ -576,8 +602,14 @@ void LauncherModel::focusedAppIdChanged()
576602 for (int i = 0; i < m_list.count(); ++i) {
577603 LauncherItem *item = m_list.at(i);
578604 if (!item->focused() && item->appId() == appId) {
605+ QVector<int> changedRoles;
606+ changedRoles << RoleFocused;
579607 item->setFocused(true);
580− Q_EMIT dataChanged(index(i), index(i), {RoleFocused});
608+ if (item->alerting()) {
609+ changedRoles << RoleAlerting;
610+ item->setAlerting(false);
611+ }
612+ Q_EMIT dataChanged(index(i), index(i), changedRoles);
581613 } else if (item->focused() && item->appId() != appId) {
582614 item->setFocused(false);
583615 Q_EMIT dataChanged(index(i), index(i), {RoleFocused});
plugins/Unity/Launcher/launchermodel.h+1−1
@@ -45,7 +45,6 @@ public:
4545
4646 QVariant data(const QModelIndex &index, int role) const override;
4747
48− Q_INVOKABLE void setAlerting(const QString &appId, bool alerting) override;
4948 Q_INVOKABLE unity::shell::launcher::LauncherItemInterface* get(int index) const override;
5049 Q_INVOKABLE void move(int oldIndex, int newIndex) override;
5150 Q_INVOKABLE void pin(const QString &appId, int index = -1) override;
@@ -79,6 +78,7 @@ private Q_SLOTS:
7978 void applicationAdded(const QModelIndex &parent, int row);
8079 void applicationRemoved(const QModelIndex &parent, int row);
8180 void focusedAppIdChanged();
81+ void applicationSurfaceCountChanged(int);
8282
8383private:
8484 QList<LauncherItem*> m_list;
plugins/Unity/Platform/Platform.qmltypesdeleted−20
@@ -1,20 +0,0 @@
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
@@ -6,6 +6,8 @@ include_directories(
66 ${libunity8-private_SOURCE_DIR}
77)
88
9+add_definitions(-DSM_BUSNAME=systemBus)
10+
911set(QMLSESSIONPLUGIN_SRC
1012 plugin.cpp
1113 dbusunitysessionservice.cpp
plugins/Unity/Session/Session.qmltypesdeleted−85
@@ -1,85 +0,0 @@
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.Session 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "DBusUnitySessionService"
12− prototype: "UnityDBusObject"
13− exports: ["Unity.Session/DBusUnitySessionService 0.1"]
14− isCreatable: false
15− isSingleton: true
16− exportMetaObjectRevisions: [0]
17− Signal {
18− name: "LogoutRequested"
19− Parameter { name: "have_inhibitors"; type: "bool" }
20− }
21− Signal {
22− name: "logoutRequested"
23− Parameter { name: "have_inhibitors"; type: "bool" }
24− }
25− Signal {
26− name: "RebootRequested"
27− Parameter { name: "have_inhibitors"; type: "bool" }
28− }
29− Signal {
30− name: "rebootRequested"
31− Parameter { name: "have_inhibitors"; type: "bool" }
32− }
33− Signal {
34− name: "ShutdownRequested"
35− Parameter { name: "have_inhibitors"; type: "bool" }
36− }
37− Signal {
38− name: "shutdownRequested"
39− Parameter { name: "have_inhibitors"; type: "bool" }
40− }
41− Signal { name: "LogoutReady" }
42− Signal { name: "logoutReady" }
43− Signal { name: "LockRequested" }
44− Signal { name: "lockRequested" }
45− Signal { name: "Locked" }
46− Signal { name: "Unlocked" }
47− Method { name: "Logout" }
48− Method { name: "Reboot" }
49− Method { name: "Shutdown" }
50− Method { name: "Suspend" }
51− Method { name: "Hibernate" }
52− Method { name: "HybridSleep" }
53− Method { name: "RequestLogout" }
54− Method { name: "RequestReboot" }
55− Method { name: "RequestShutdown" }
56− Method { name: "EndSession" }
57− Method { name: "CanHibernate"; type: "bool" }
58− Method { name: "CanSuspend"; type: "bool" }
59− Method { name: "CanHybridSleep"; type: "bool" }
60− Method { name: "CanReboot"; type: "bool" }
61− Method { name: "CanShutdown"; type: "bool" }
62− Method { name: "CanLock"; type: "bool" }
63− Method { name: "UserName"; type: "string" }
64− Method { name: "RealName"; type: "string" }
65− Method { name: "HostName"; type: "string" }
66− Method { name: "PromptLock" }
67− Method { name: "Lock" }
68− Method { name: "IsLocked"; type: "bool" }
69− Method { name: "logout" }
70− Method { name: "reboot" }
71− Method { name: "shutdown" }
72− Method { name: "endSession" }
73− }
74− Component {
75− name: "OrientationLock"
76− prototype: "QObject"
77− exports: ["Unity.Session/OrientationLock 0.1"]
78− isCreatable: false
79− isSingleton: true
80− exportMetaObjectRevisions: [0]
81− Property { name: "enabled"; type: "bool"; isReadonly: true }
82− Property { name: "savedOrientation"; type: "Qt::ScreenOrientation" }
83− }
84− Component { name: "UnityDBusObject"; prototype: "QObject" }
85−}
plugins/Unity/Session/dbusunitysessionservice.cpp+57−18
@@ -64,19 +64,19 @@ public:
6464 QStringLiteral("GetSessionByPID"));
6565 msg << (quint32) getpid();
6666
67− QDBusReply<QDBusObjectPath> reply = QDBusConnection::systemBus().call(msg);
67+ QDBusReply<QDBusObjectPath> reply = QDBusConnection::SM_BUSNAME().call(msg);
6868 if (reply.isValid()) {
6969 logindSessionPath = reply.value().path();
7070
7171 // start watching the Active property
72− QDBusConnection::systemBus().connect(LOGIN1_SERVICE, logindSessionPath, QStringLiteral("org.freedesktop.DBus.Properties"), QStringLiteral("PropertiesChanged"),
73− this, SLOT(onPropertiesChanged(QString,QVariantMap,QStringList)));
72+ QDBusConnection::SM_BUSNAME().connect(LOGIN1_SERVICE, logindSessionPath, QStringLiteral("org.freedesktop.DBus.Properties"), QStringLiteral("PropertiesChanged"),
73+ this, SLOT(onPropertiesChanged(QString,QVariantMap,QStringList)));
7474
7575 setupSystemdInhibition();
7676
7777 // re-enable the inhibition upon resume from sleep
78− QDBusConnection::systemBus().connect(LOGIN1_SERVICE, LOGIN1_PATH, LOGIN1_IFACE, QStringLiteral("PrepareForSleep"),
79− this, SLOT(onResuming(bool)));
78+ QDBusConnection::SM_BUSNAME().connect(LOGIN1_SERVICE, LOGIN1_PATH, LOGIN1_IFACE, QStringLiteral("PrepareForSleep"),
79+ this, SLOT(onResuming(bool)));
8080 } else {
8181 qWarning() << "Failed to get logind session path" << reply.error().message();
8282 }
@@ -96,7 +96,7 @@ public:
9696 msg << "Unity8 handles power events"; // why
9797 msg << "block"; // mode
9898
99− QDBusPendingCall pendingCall = QDBusConnection::systemBus().asyncCall(msg);
99+ QDBusPendingCall pendingCall = QDBusConnection::SM_BUSNAME().asyncCall(msg);
100100 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingCall, this);
101101 connect(watcher, &QDBusPendingCallWatcher::finished,
102102 this, [this](QDBusPendingCallWatcher* watcher) {
@@ -114,7 +114,7 @@ public:
114114 bool checkLogin1Call(const QString &method) const
115115 {
116116 QDBusMessage msg = QDBusMessage::createMethodCall(LOGIN1_SERVICE, LOGIN1_PATH, LOGIN1_IFACE, method);
117− QDBusReply<QString> reply = QDBusConnection::systemBus().call(msg);
117+ QDBusReply<QString> reply = QDBusConnection::SM_BUSNAME().call(msg);
118118 return reply.isValid() && (reply == QStringLiteral("yes") || reply == QStringLiteral("challenge"));
119119 }
120120
@@ -125,7 +125,7 @@ public:
125125 LOGIN1_IFACE,
126126 method);
127127 msg.setArguments(args);
128− QDBusConnection::systemBus().asyncCall(msg);
128+ QDBusConnection::SM_BUSNAME().asyncCall(msg);
129129 }
130130
131131 void setActive(bool active)
@@ -157,7 +157,7 @@ public:
157157 msg << LOGIN1_SESSION_IFACE;
158158 msg << ACTIVE_KEY;
159159
160− QDBusPendingCall pendingCall = QDBusConnection::systemBus().asyncCall(msg);
160+ QDBusPendingCall pendingCall = QDBusConnection::SM_BUSNAME().asyncCall(msg);
161161 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingCall, this);
162162 connect(watcher, &QDBusPendingCallWatcher::finished,
163163 this, [this](QDBusPendingCallWatcher* watcher) {
@@ -191,7 +191,7 @@ public:
191191 msg << LOGIN1_SESSION_IFACE;
192192 msg << IDLE_SINCE_KEY;
193193
194− QDBusReply<QVariant> reply = QDBusConnection::systemBus().call(msg);
194+ QDBusReply<QVariant> reply = QDBusConnection::SM_BUSNAME().call(msg);
195195 if (reply.isValid()) {
196196 return reply.value().value<quint64>();
197197 } else {
@@ -208,7 +208,7 @@ public:
208208 LOGIN1_SESSION_IFACE,
209209 QStringLiteral("SetIdleHint"));
210210 msg << idle;
211− QDBusConnection::systemBus().asyncCall(msg);
211+ QDBusConnection::SM_BUSNAME().asyncCall(msg);
212212 }
213213
214214private Q_SLOTS:
@@ -227,11 +227,14 @@ private Q_SLOTS:
227227 {
228228 if (!active) {
229229 setupSystemdInhibition();
230+ } else {
231+ Q_EMIT prepareForSleep();
230232 }
231233 }
232234
233235Q_SIGNALS:
234236 void screensaverActiveChanged(bool active);
237+ void prepareForSleep();
235238};
236239
237240Q_GLOBAL_STATIC(DBusUnitySessionServicePrivate, d)
@@ -240,11 +243,12 @@ DBusUnitySessionService::DBusUnitySessionService()
240243 : UnityDBusObject(QStringLiteral("/com/canonical/Unity/Session"), QStringLiteral("com.canonical.Unity"))
241244{
242245 if (!d->logindSessionPath.isEmpty()) {
243− // connect our Lock() slot to the logind's session Lock() signal
244− QDBusConnection::systemBus().connect(LOGIN1_SERVICE, d->logindSessionPath, LOGIN1_SESSION_IFACE, QStringLiteral("Lock"), this, SLOT(Lock()));
246+ // connect our PromptLock() slot to the logind's session Lock() signal
247+ QDBusConnection::SM_BUSNAME().connect(LOGIN1_SERVICE, d->logindSessionPath, LOGIN1_SESSION_IFACE, QStringLiteral("Lock"), this, SLOT(PromptLock()));
245248 // ... and our Unlocked() signal to the logind's session Unlock() signal
246249 // (lightdm handles the unlocking by calling logind's Unlock method which in turn emits this signal we connect to)
247− QDBusConnection::systemBus().connect(LOGIN1_SERVICE, d->logindSessionPath, LOGIN1_SESSION_IFACE, QStringLiteral("Unlock"), this, SIGNAL(Unlocked()));
250+ QDBusConnection::SM_BUSNAME().connect(LOGIN1_SERVICE, d->logindSessionPath, LOGIN1_SESSION_IFACE, QStringLiteral("Unlock"), this, SLOT(doUnlock()));
251+ connect(d, &DBusUnitySessionServicePrivate::prepareForSleep, this, &DBusUnitySessionService::PromptLock);
248252 } else {
249253 qWarning() << "Failed to connect to logind's session Lock/Unlock signals";
250254 }
@@ -328,15 +332,41 @@ QString DBusUnitySessionService::HostName() const
328332
329333void DBusUnitySessionService::PromptLock()
330334{
335+ // Prompt as in quick. No locking animation needed. Usually used by
336+ // indicator-session in combination with a switch to greeter or other
337+ // user session.
331338 Q_EMIT LockRequested();
332339 Q_EMIT lockRequested();
333340}
334341
335342void DBusUnitySessionService::Lock()
336343{
337− // signal u8 to show the lockscreen/greeter
344+ // Normal lock (with animation, as compared to PromptLock above). Usually
345+ // used by indicator-session to lock the session in place.
346+ //
347+ // FIXME: We also -- as a bit of a hack around indicator-session not fully
348+ // supporting a phone profile -- switch to greeter here. The unity7 flow is
349+ // that the user chooses "Lock/Switch" from the indicator, and then can go
350+ // to greeter by selecting "Switch" again from the indicator, which is now
351+ // exposed by the desktop_lockscreen profile. But since in unity8, we try
352+ // to expose most things all the time, we don't use the separate lockscreen
353+ // profile. Instead, we just go directly to the greeter the first time
354+ // a user presses "Lock/Switch". This isn't what this DBus call is
355+ // supposed to do, but we can live with it for now.
356+ //
357+ // Here's a bug about indicator-session growing a converged Touch profile:
358+ // https://launchpad.net/bugs/1557716
359+ //
360+ // We only do this here in the animated-lock call because that's the only
361+ // time the indicator locks without also asking the display manager to
362+ // switch sessions on us. And since we are switching screens, we also
363+ // don't bother respecting the animate request, simply doing a PromptLock.
338364 PromptLock();
365+ switchToGreeter();
366+}
339367
368+void DBusUnitySessionService::switchToGreeter()
369+{
340370 // lock the session using the org.freedesktop.DisplayManager system DBUS service
341371 const QString sessionPath = QString::fromLocal8Bit(qgetenv("XDG_SESSION_PATH"));
342372 QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("org.freedesktop.DisplayManager"),
@@ -344,7 +374,7 @@ void DBusUnitySessionService::Lock()
344374 QStringLiteral("org.freedesktop.DisplayManager.Session"),
345375 QStringLiteral("Lock"));
346376
347− QDBusPendingCall pendingCall = QDBusConnection::systemBus().asyncCall(msg);
377+ QDBusPendingCall pendingCall = QDBusConnection::SM_BUSNAME().asyncCall(msg);
348378 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingCall, this);
349379 connect(watcher, &QDBusPendingCallWatcher::finished,
350380 this, [this](QDBusPendingCallWatcher* watcher) {
@@ -361,6 +391,12 @@ void DBusUnitySessionService::Lock()
361391 });
362392}
363393
394+void DBusUnitySessionService::doUnlock()
395+{
396+ Q_EMIT Unlocked();
397+ Q_EMIT unlocked();
398+}
399+
364400bool DBusUnitySessionService::IsLocked() const
365401{
366402 return !d->isSessionActive;
@@ -390,16 +426,19 @@ void DBusUnitySessionService::Shutdown()
390426
391427void DBusUnitySessionService::Suspend()
392428{
429+ PromptLock();
393430 d->makeLogin1Call(QStringLiteral("Suspend"), {false});
394431}
395432
396433void DBusUnitySessionService::Hibernate()
397434{
435+ PromptLock();
398436 d->makeLogin1Call(QStringLiteral("Hibernate"), {false});
399437}
400438
401439void DBusUnitySessionService::HybridSleep()
402440{
441+ PromptLock();
403442 d->makeLogin1Call(QStringLiteral("HybridSleep"), {false});
404443}
405444
@@ -479,7 +518,7 @@ void DBusGnomeScreensaverWrapper::SetActive(bool lock)
479518
480519void DBusGnomeScreensaverWrapper::Lock()
481520{
482− performAsyncUnityCall(QStringLiteral("Lock"));
521+ performAsyncUnityCall(QStringLiteral("PromptLock"));
483522}
484523
485524quint32 DBusGnomeScreensaverWrapper::GetActiveTime() const
@@ -516,7 +555,7 @@ bool DBusScreensaverWrapper::SetActive(bool lock)
516555
517556void DBusScreensaverWrapper::Lock()
518557{
519− performAsyncUnityCall(QStringLiteral("Lock"));
558+ performAsyncUnityCall(QStringLiteral("PromptLock"));
520559}
521560
522561quint32 DBusScreensaverWrapper::GetActiveTime() const
plugins/Unity/Session/dbusunitysessionservice.h+7
@@ -106,6 +106,7 @@ Q_SIGNALS:
106106 * Emitted after the session has been unlocked.
107107 */
108108 Q_SCRIPTABLE void Unlocked();
109+ void unlocked();
109110
110111public Q_SLOTS:
111112 /**
@@ -258,6 +259,12 @@ public Q_SLOTS:
258259 * @return whether the session is currently locked
259260 */
260261 Q_SCRIPTABLE bool IsLocked() const;
262+
263+private Q_SLOTS:
264+ void doUnlock();
265+
266+private:
267+ void switchToGreeter();
261268};
262269
263270class DBusGnomeSessionManagerWrapper : public UnityDBusObject
plugins/Utils/CMakeLists.txt+5
@@ -1,6 +1,10 @@
11include_directories(
22 ${CMAKE_CURRENT_SOURCE_DIR}
33 ${CMAKE_CURRENT_BINARY_DIR}
4+)
5+
6+include_directories(
7+ SYSTEM
48 ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
59 ${Qt5Quick_PRIVATE_INCLUDE_DIRS}
610 ${GIO_INCLUDE_DIRS}
@@ -9,6 +13,7 @@ include_directories(
913set(QMLPLUGIN_SRC
1014 activefocuslogger.cpp
1115 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationManagerInterface.h
16+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
1217 applicationsfiltermodel.cpp
1318 constants.cpp
1419 WindowInputMonitor.cpp
plugins/Utils/Utils.qmltypesdeleted−175
@@ -1,175 +0,0 @@
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 Utils 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "EasingCurve"
12− prototype: "QObject"
13− exports: ["Utils/EasingCurve 0.1"]
14− exportMetaObjectRevisions: [0]
15− Property { name: "type"; type: "QEasingCurve::Type" }
16− Property { name: "period"; type: "double" }
17− Property { name: "progress"; type: "double" }
18− Property { name: "value"; type: "double"; isReadonly: true }
19− }
20− Component {
21− name: "QAbstractProxyModel"
22− prototype: "QAbstractItemModel"
23− Property { name: "sourceModel"; type: "QAbstractItemModel"; isPointer: true }
24− }
25− Component { name: "QIdentityProxyModel"; prototype: "QAbstractProxyModel" }
26− Component {
27− name: "QLimitProxyModelQML"
28− prototype: "QIdentityProxyModel"
29− exports: ["Utils/LimitProxyModel 0.1"]
30− exportMetaObjectRevisions: [0]
31− Property { name: "model"; type: "QAbstractItemModel"; isPointer: true }
32− Property { name: "limit"; type: "int" }
33− Property { name: "count"; type: "int"; isReadonly: true }
34− Signal { name: "totalCountChanged" }
35− }
36− Component {
37− name: "QSortFilterProxyModel"
38− prototype: "QAbstractProxyModel"
39− Property { name: "filterRegExp"; type: "QRegExp" }
40− Property { name: "filterKeyColumn"; type: "int" }
41− Property { name: "dynamicSortFilter"; type: "bool" }
42− Property { name: "filterCaseSensitivity"; type: "Qt::CaseSensitivity" }
43− Property { name: "sortCaseSensitivity"; type: "Qt::CaseSensitivity" }
44− Property { name: "isSortLocaleAware"; type: "bool" }
45− Property { name: "sortRole"; type: "int" }
46− Property { name: "filterRole"; type: "int" }
47− Method {
48− name: "setFilterRegExp"
49− Parameter { name: "pattern"; type: "string" }
50− }
51− Method {
52− name: "setFilterWildcard"
53− Parameter { name: "pattern"; type: "string" }
54− }
55− Method {
56− name: "setFilterFixedString"
57− Parameter { name: "pattern"; type: "string" }
58− }
59− Method { name: "clear" }
60− Method { name: "invalidate" }
61− }
62− Component {
63− name: "RelativeTimeFormatter"
64− prototype: "TimeFormatter"
65− exports: ["Utils/RelativeTimeFormatter 0.1"]
66− exportMetaObjectRevisions: [0]
67− }
68− Component {
69− name: "TimeFormatter"
70− prototype: "QObject"
71− exports: ["Utils/GDateTimeFormatter 0.1", "Utils/TimeFormatter 0.1"]
72− exportMetaObjectRevisions: [0, 0]
73− Property { name: "format"; type: "string" }
74− Property { name: "timeString"; type: "string"; isReadonly: true }
75− Property { name: "time"; type: "qlonglong" }
76− Signal {
77− name: "formatChanged"
78− Parameter { name: "format"; type: "string" }
79− }
80− Signal {
81− name: "timeStringChanged"
82− Parameter { name: "timeString"; type: "string" }
83− }
84− Signal {
85− name: "timeChanged"
86− Parameter { name: "time"; type: "qlonglong" }
87− }
88− }
89− Component {
90− name: "UnityMenuModelPaths"
91− prototype: "QObject"
92− exports: ["Utils/UnityMenuModelPaths 0.1"]
93− exportMetaObjectRevisions: [0]
94− Property { name: "source"; type: "QVariant" }
95− Property { name: "busName"; type: "QByteArray"; isReadonly: true }
96− Property { name: "actions"; type: "QVariantMap"; isReadonly: true }
97− Property { name: "menuObjectPath"; type: "QByteArray"; isReadonly: true }
98− Property { name: "busNameHint"; type: "QByteArray" }
99− Property { name: "actionsHint"; type: "QByteArray" }
100− Property { name: "menuObjectPathHint"; type: "QByteArray" }
101− }
102− Component {
103− name: "UnitySortFilterProxyModelQML"
104− prototype: "QSortFilterProxyModel"
105− exports: ["Utils/UnitySortFilterProxyModel 0.1"]
106− exportMetaObjectRevisions: [0]
107− Property { name: "model"; type: "QAbstractItemModel"; isPointer: true }
108− Property { name: "totalCount"; type: "int"; isReadonly: true }
109− Property { name: "count"; type: "int"; isReadonly: true }
110− Property { name: "invertMatch"; type: "bool" }
111− Signal {
112− name: "invertMatchChanged"
113− Parameter { type: "bool" }
114− }
115− Method {
116− name: "get"
117− type: "QVariantMap"
118− Parameter { name: "row"; type: "int" }
119− }
120− Method {
121− name: "data"
122− type: "QVariant"
123− Parameter { name: "row"; type: "int" }
124− Parameter { name: "role"; type: "int" }
125− }
126− Method { name: "count"; type: "int" }
127− Method {
128− name: "findFirst"
129− type: "int"
130− Parameter { name: "role"; type: "int" }
131− Parameter { name: "value"; type: "QVariant" }
132− }
133− Method {
134− name: "mapRowToSource"
135− type: "int"
136− Parameter { name: "row"; type: "int" }
137− }
138− Method {
139− name: "mapFromSource"
140− type: "int"
141− Parameter { name: "row"; type: "int" }
142− }
143− Method {
144− name: "mapToSource"
145− type: "int"
146− Parameter { name: "row"; type: "int" }
147− }
148− }
149− Component {
150− name: "WindowInputFilter"
151− defaultProperty: "data"
152− prototype: "QQuickItem"
153− exports: ["Utils/WindowInputFilter 0.1"]
154− exportMetaObjectRevisions: [0]
155− }
156− Component {
157− name: "WindowStateStorage"
158− prototype: "QObject"
159− exports: ["Utils/WindowStateStorage 0.1"]
160− isCreatable: false
161− isSingleton: true
162− exportMetaObjectRevisions: [0]
163− Method {
164− name: "saveGeometry"
165− Parameter { name: "windowId"; type: "string" }
166− Parameter { name: "rect"; type: "QRect" }
167− }
168− Method {
169− name: "getGeometry"
170− type: "QRect"
171− Parameter { name: "windowId"; type: "string" }
172− Parameter { name: "defaultValue"; type: "QRect" }
173− }
174− }
175−}
plugins/Utils/WindowInputMonitor.cpp+8−8
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2015 Canonical, Ltd.
2+ * Copyright (C) 2015-2016 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -30,7 +30,6 @@ WindowInputMonitor::WindowInputMonitor(UnityUtil::AbstractTimer *timer,
3030 QQuickItem *parent)
3131 : QQuickItem(parent)
3232 , m_windowBeingTouched(false)
33− , m_homeKeyPressed(false)
3433 , m_windowLastTouchedTimer(elapsedTimer)
3534 , m_activationTimer(timer)
3635{
@@ -42,6 +41,7 @@ WindowInputMonitor::WindowInputMonitor(UnityUtil::AbstractTimer *timer,
4241 connect(m_activationTimer, &UnityUtil::AbstractTimer::timeout,
4342 this, &WindowInputMonitor::emitActivatedIfNoTouchesAround);
4443 m_activationTimer->setInterval(msecsWithoutTouches);
44+ m_activationTimer->setSingleShot(true);
4545}
4646
4747WindowInputMonitor::~WindowInputMonitor()
@@ -67,19 +67,19 @@ void WindowInputMonitor::update(QEvent *event)
6767 if (event->type() == QEvent::KeyPress) {
6868 QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
6969
70− m_homeKeyPressed = true;
71−
72− if (keyEvent->key() == Qt::Key_Super_L && !keyEvent->isAutoRepeat()
70+ if (m_pressedHomeKey == 0 && m_homeKeys.contains(keyEvent->key()) && !keyEvent->isAutoRepeat()
71+ && !m_activationTimer->isRunning()
7372 && !m_windowBeingTouched
7473 && m_windowLastTouchedTimer->elapsed() >= msecsWithoutTouches) {
74+ m_pressedHomeKey = keyEvent->key();
7575 m_activationTimer->start();
7676 }
7777
7878 } else if (event->type() == QEvent::KeyRelease) {
7979 QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
8080
81− if (keyEvent->key() == Qt::Key_Super_L) {
82− m_homeKeyPressed = false;
81+ if (keyEvent->key() == m_pressedHomeKey) {
82+ m_pressedHomeKey = 0;
8383 }
8484
8585 } else if (event->type() == QEvent::TouchBegin) {
@@ -116,7 +116,7 @@ void WindowInputMonitor::setupFilterOnWindow(QQuickWindow *window)
116116
117117void WindowInputMonitor::emitActivatedIfNoTouchesAround()
118118{
119− if (!m_homeKeyPressed && !m_windowBeingTouched &&
119+ if (m_pressedHomeKey == 0 && !m_windowBeingTouched &&
120120 (m_windowLastTouchedTimer->elapsed() > msecsWithoutTouches)) {
121121 Q_EMIT homeKeyActivated();
122122 }
plugins/Utils/WindowInputMonitor.h+8−2
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2015 Canonical, Ltd.
2+ * Copyright (C) 2015-2016 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -18,6 +18,7 @@
1818#define UNITY_WINDOWINPUTMONITOR_H
1919
2020#include <QQuickItem>
21+#include <QList>
2122#include <QPointer>
2223
2324#include "Timer.h"
@@ -83,9 +84,14 @@ private Q_SLOTS:
8384private:
8485 QPointer<QQuickWindow> m_filteredWindow;
8586 bool m_windowBeingTouched;
86− bool m_homeKeyPressed;
8787 UnityUtil::AbstractElapsedTimer *m_windowLastTouchedTimer;
8888 UnityUtil::AbstractTimer *m_activationTimer;
89+
90+ // Qt::Keys that are mapped to our "home" key.
91+ QList<int> m_homeKeys{Qt::Key_Super_L, Qt::Key_HomePage};
92+ // Which Qt::Key from m_homeKeys is currently pressed.
93+ // 0 if none
94+ int m_pressedHomeKey{0};
8995};
9096
9197#endif // UNITY_WINDOWINPUTMONITOR_H
plugins/Utils/globalfunctions.cpp+1−4
@@ -16,11 +16,8 @@
1616
1717#include "globalfunctions.h"
1818
19−#pragma GCC diagnostic push
20−#pragma GCC diagnostic ignored "-pedantic"
21−#include <private/qquickitem_p.h>
22−#pragma GCC diagnostic pop
2319#include <QQmlEngine>
20+#include <private/qquickitem_p.h>
2421
2522GlobalFunctions::GlobalFunctions(QObject *parent)
2623 : QObject(parent)
plugins/Utils/windowstatestorage.cpp+2−2
@@ -95,7 +95,7 @@ void WindowStateStorage::saveStage(const QString &appId, int stage)
9595 saveValue(queryString);
9696}
9797
98−int WindowStateStorage::getStage(const QString &appId) const
98+int WindowStateStorage::getStage(const QString &appId, int defaultValue) const
9999{
100100 const QString queryString = QStringLiteral("SELECT * FROM stage WHERE appId = '%1';")
101101 .arg(sanitiseString(appId));
@@ -103,7 +103,7 @@ int WindowStateStorage::getStage(const QString &appId) const
103103 QSqlQuery query = getValue(queryString);
104104
105105 if (!query.first()) {
106− return unity::shell::application::ApplicationInfoInterface::MainStage;
106+ return defaultValue;
107107 }
108108 return query.value("stage").toInt();
109109}
plugins/Utils/windowstatestorage.h+14−4
@@ -1,5 +1,5 @@
11/*
2− * Copyright 2015 Canonical Ltd.
2+ * Copyright 2015-2016 Canonical Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU Lesser General Public License as published by
@@ -25,9 +25,19 @@ class WindowStateStorage: public QObject
2525 Q_ENUMS(WindowState)
2626public:
2727 enum WindowState {
28− WindowStateNormal,
29− WindowStateMaximized
28+ WindowStateNormal = 1 << 0,
29+ WindowStateMaximized = 1 << 1,
30+ WindowStateMinimized = 1 << 2,
31+ WindowStateFullscreen = 1 << 3,
32+ WindowStateMaximizedLeft = 1 << 4,
33+ WindowStateMaximizedRight = 1 << 5,
34+ WindowStateMaximizedHorizontally = 1 << 6,
35+ WindowStateMaximizedVertically = 1 << 7
3036 };
37+ Q_DECLARE_FLAGS(WindowStates, WindowState)
38+#if (QT_VERSION >= QT_VERSION_CHECK(5, 5, 0))
39+ Q_FLAG(WindowStates)
40+#endif
3141
3242 WindowStateStorage(QObject *parent = 0);
3343 virtual ~WindowStateStorage();
@@ -39,7 +49,7 @@ public:
3949 Q_INVOKABLE QRect getGeometry(const QString &windowId, const QRect defaultValue) const;
4050
4151 Q_INVOKABLE void saveStage(const QString &appId, int stage);
42− Q_INVOKABLE int getStage(const QString &appId) const;
52+ Q_INVOKABLE int getStage(const QString &appId, int defaultValue) const;
4353
4454private:
4555 void initdb();
plugins/WindowManager/CMakeLists.txt+1
@@ -4,6 +4,7 @@ set(WINDOWMANAGER_SRC
44 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
55 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/Mir.h
66 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceInterface.h
7+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceListInterface.h
78 )
89
910add_library(windowmanager-qml SHARED ${WINDOWMANAGER_SRC})
plugins/Wizard/Wizard.qmltypesdeleted−33
@@ -1,33 +0,0 @@
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 Wizard 0.1 plugins'
8−
9−Module {
10− Component {
11− name: "PageList"
12− prototype: "QObject"
13− exports: ["Wizard/PageList 0.1"]
14− exportMetaObjectRevisions: [0]
15− Property { name: "index"; type: "int"; isReadonly: true }
16− Property { name: "numPages"; type: "int"; isReadonly: true }
17− Method { name: "prev"; type: "string" }
18− Method { name: "next"; type: "string" }
19− }
20− Component {
21− name: "System"
22− prototype: "QObject"
23− exports: ["Wizard/System 0.1"]
24− isCreatable: false
25− isSingleton: true
26− exportMetaObjectRevisions: [0]
27− Property { name: "wizardEnabled"; type: "bool" }
28− Method {
29− name: "updateSessionLanguage"
30− Parameter { name: "locale"; type: "string" }
31− }
32− }
33−}
po/aa.po+262−100
@@ -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-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+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,39 +15,39 @@ 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-05-19 05:49+0000\n"
19−"X-Generator: Launchpad (build 18025)\n"
18+"X-Launchpad-Export-Date: 2016-07-14 06:00+0000\n"
19+"X-Generator: Launchpad (build 18115)\n"
2020
21−#: plugins/IntegratedLightDM/Greeter.cpp:112
21+#: plugins/LightDM/Greeter.cpp:123
2222msgid "Password: "
2323msgstr "Cuumita "
2424
25−#: plugins/Unity/Launcher/launcheritem.cpp:48
26−#: plugins/Unity/Launcher/launcheritem.cpp:107
25+#: plugins/Unity/Launcher/launcheritem.cpp:49
26+#: plugins/Unity/Launcher/launcheritem.cpp:108
2727msgid "Pin shortcut"
2828msgstr ""
2929
30−#: plugins/Unity/Launcher/launcheritem.cpp:53
30+#: plugins/Unity/Launcher/launcheritem.cpp:54
3131msgid "Quit"
3232msgstr "Kat"
3333
34−#: plugins/Unity/Launcher/launcheritem.cpp:107
34+#: plugins/Unity/Launcher/launcheritem.cpp:108
3535msgid "Unpin shortcut"
3636msgstr ""
3737
38−#: qml/Components/DelayedLockscreen.qml:49
38+#: qml/Components/DelayedLockscreen.qml:50
3939msgid "Device Locked"
4040msgstr ""
4141
42−#: qml/Components/DelayedLockscreen.qml:64
42+#: qml/Components/DelayedLockscreen.qml:65
4343msgid "You have been locked out due to too many failed passphrase attempts."
4444msgstr ""
4545
46−#: qml/Components/DelayedLockscreen.qml:65
46+#: qml/Components/DelayedLockscreen.qml:66
4747msgid "You have been locked out due to too many failed passcode attempts."
4848msgstr ""
4949
50−#: qml/Components/DelayedLockscreen.qml:74
50+#: qml/Components/DelayedLockscreen.qml:75
5151#, qt-format
5252msgid "Please wait %1 minute and then try again…"
5353msgid_plural "Please wait %1 minutes and then try again…"
@@ -74,7 +74,7 @@ msgid "Log Out"
7474msgstr "Eweq"
7575
7676#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
77−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
77+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
7878#: qml/Wizard/Pages/passcode-set.qml:32
7979msgid "Cancel"
8080msgstr "Bayis"
@@ -117,18 +117,188 @@ msgctxt "Button: Restart the system"
117117msgid "Restart"
118118msgstr "Wadir-qimbis"
119119
120−#: qml/Components/Lockscreen.qml:231
120+#: qml/Components/KeyboardShortcutsOverlay.qml:41
121+msgid "Keyboard Shortcuts"
122+msgstr ""
123+
124+#: qml/Components/KeyboardShortcutsOverlay.qml:55
125+msgid "Unity 8"
126+msgstr ""
127+
128+#: qml/Components/KeyboardShortcutsOverlay.qml:62
129+msgid "PrtScr"
130+msgstr ""
131+
132+#: qml/Components/KeyboardShortcutsOverlay.qml:67
133+msgid "Takes a screenshot."
134+msgstr ""
135+
136+#: qml/Components/KeyboardShortcutsOverlay.qml:75
137+msgid "Alt + PrtScr"
138+msgstr ""
139+
140+#: qml/Components/KeyboardShortcutsOverlay.qml:80
141+msgid "Takes a screenshot of a window."
142+msgstr ""
143+
144+#: qml/Components/KeyboardShortcutsOverlay.qml:88
145+msgid "Super + Space"
146+msgstr ""
147+
148+#: qml/Components/KeyboardShortcutsOverlay.qml:93
149+msgid "Switches to next keyboard layout."
150+msgstr ""
151+
152+#: qml/Components/KeyboardShortcutsOverlay.qml:101
153+msgid "Super + Shift + Space"
154+msgstr ""
155+
156+#: qml/Components/KeyboardShortcutsOverlay.qml:106
157+msgid "Switches to previous keyboard layout."
158+msgstr ""
159+
160+#: qml/Components/KeyboardShortcutsOverlay.qml:118
161+msgid "Launcher"
162+msgstr ""
163+
164+#: qml/Components/KeyboardShortcutsOverlay.qml:125
165+msgid "Super (Hold)"
166+msgstr ""
167+
168+#: qml/Components/KeyboardShortcutsOverlay.qml:130
169+msgid "Opens the launcher, displays shortcuts."
170+msgstr ""
171+
172+#: qml/Components/KeyboardShortcutsOverlay.qml:138
173+msgid "Alt + F1"
174+msgstr ""
175+
176+#: qml/Components/KeyboardShortcutsOverlay.qml:143
177+msgid "Opens launcher keyboard navigation mode."
178+msgstr ""
179+
180+#: qml/Components/KeyboardShortcutsOverlay.qml:151
181+msgid "Super + Tab"
182+msgstr ""
183+
184+#: qml/Components/KeyboardShortcutsOverlay.qml:156
185+msgid "Switches applications via the launcher."
186+msgstr ""
187+
188+#: qml/Components/KeyboardShortcutsOverlay.qml:164
189+msgid "Super + 0 to 9"
190+msgstr ""
191+
192+#: qml/Components/KeyboardShortcutsOverlay.qml:169
193+msgid "Same as clicking on a launcher icon."
194+msgstr ""
195+
196+#: qml/Components/KeyboardShortcutsOverlay.qml:181
197+msgid "Scopes"
198+msgstr ""
199+
200+#: qml/Components/KeyboardShortcutsOverlay.qml:188
201+msgid "Super (Tap)"
202+msgstr ""
203+
204+#: qml/Components/KeyboardShortcutsOverlay.qml:193
205+msgid "Opens the Scopes home."
206+msgstr ""
207+
208+#: qml/Components/KeyboardShortcutsOverlay.qml:209
209+msgid "Switching"
210+msgstr ""
211+
212+#: qml/Components/KeyboardShortcutsOverlay.qml:216
213+msgid "Alt + Tab"
214+msgstr ""
215+
216+#: qml/Components/KeyboardShortcutsOverlay.qml:221
217+msgid "Switches between applications."
218+msgstr ""
219+
220+#: qml/Components/KeyboardShortcutsOverlay.qml:229
221+msgid "Super + W"
222+msgstr ""
223+
224+#: qml/Components/KeyboardShortcutsOverlay.qml:234
225+msgid "Opens the desktop spread."
226+msgstr ""
227+
228+#: qml/Components/KeyboardShortcutsOverlay.qml:242
229+msgid "Cursor Left or Right"
230+msgstr ""
231+
232+#: qml/Components/KeyboardShortcutsOverlay.qml:247
233+msgid "Moves the focus."
234+msgstr ""
235+
236+#: qml/Components/KeyboardShortcutsOverlay.qml:259
237+msgid "Windows"
238+msgstr ""
239+
240+#: qml/Components/KeyboardShortcutsOverlay.qml:266
241+msgid "Ctrl + Super + D"
242+msgstr ""
243+
244+#: qml/Components/KeyboardShortcutsOverlay.qml:271
245+msgid "Minimizes all windows."
246+msgstr ""
247+
248+#: qml/Components/KeyboardShortcutsOverlay.qml:279
249+msgid "Ctrl + Super + Up"
250+msgstr ""
251+
252+#: qml/Components/KeyboardShortcutsOverlay.qml:284
253+msgid "Maximizes the current window."
254+msgstr ""
255+
256+#: qml/Components/KeyboardShortcutsOverlay.qml:292
257+msgid "Ctrl + Super + Down"
258+msgstr ""
259+
260+#: qml/Components/KeyboardShortcutsOverlay.qml:297
261+msgid "Minimizes or restores the current window."
262+msgstr ""
263+
264+#: qml/Components/KeyboardShortcutsOverlay.qml:305
265+msgid "Ctrl + Super + Left or Right"
266+msgstr ""
267+
268+#: qml/Components/KeyboardShortcutsOverlay.qml:310
269+msgid "Semi-maximizes the current window."
270+msgstr ""
271+
272+#: qml/Components/KeyboardShortcutsOverlay.qml:318
273+msgid "Alt + F4"
274+msgstr ""
275+
276+#: qml/Components/KeyboardShortcutsOverlay.qml:323
277+msgid "Closes the current window."
278+msgstr ""
279+
280+#: qml/Components/Lockscreen.qml:239
121281msgid "Return to Call"
122282msgstr "Seecol gacis"
123283
124−#: qml/Components/Lockscreen.qml:231
284+#: qml/Components/Lockscreen.qml:239
125285msgid "Emergency Call"
126286msgstr ""
127287
128−#: qml/Components/Lockscreen.qml:263
288+#: qml/Components/Lockscreen.qml:271
129289msgid "OK"
130290msgstr "Hayya"
131291
292+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
293+#, qt-format
294+msgid "%1:%2:%3"
295+msgstr ""
296+
297+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
298+#, qt-format
299+msgid "%1:%2"
300+msgstr ""
301+
132302#: qml/Components/ModeSwitchWarningDialog.qml:32
133303msgid "Apps may have unsaved data:"
134304msgstr ""
@@ -155,26 +325,30 @@ msgstr ""
155325msgid "Close all"
156326msgstr "Inkih alif"
157327
158−#: qml/Dash/DashPageHeader.qml:337
328+#: qml/Components/SharingPicker.qml:54
329+msgid "Preview Share Item"
330+msgstr ""
331+
332+#: qml/Dash/DashPageHeader.qml:333
159333msgctxt "Button: Open the Ubuntu Store"
160334msgid "Store"
161335msgstr ""
162336
163−#: qml/Dash/DashPageHeader.qml:344
337+#: qml/Dash/DashPageHeader.qml:340
164338msgctxt "Button: Start a search in the current dash scope"
165339msgid "Search"
166340msgstr "Goranto"
167341
168−#: qml/Dash/DashPageHeader.qml:354
342+#: qml/Dash/DashPageHeader.qml:350
169343msgctxt "Button: Show the current dash scope settings"
170344msgid "Settings"
171345msgstr "Massosu"
172346
173−#: qml/Dash/DashPageHeader.qml:361
347+#: qml/Dash/DashPageHeader.qml:357
174348msgid "Remove from Favorites"
175349msgstr ""
176350
177−#: qml/Dash/DashPageHeader.qml:361
351+#: qml/Dash/DashPageHeader.qml:357
178352msgid "Add to Favorites"
179353msgstr ""
180354
@@ -186,24 +360,24 @@ msgstr ""
186360msgid "Reset"
187361msgstr ""
188362
189−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
363+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
190364msgid "Show less"
191365msgstr ""
192366
193−#: qml/Dash/GenericScopeView.qml:579
367+#: qml/Dash/GenericScopeView.qml:580
194368msgid "Show all"
195369msgstr ""
196370
197−#: qml/Dash/GenericScopeView.qml:636
371+#: qml/Dash/GenericScopeView.qml:637
198372msgctxt "Label: Hint for dash search line edit"
199373msgid "Search"
200374msgstr "Goranto"
201375
202−#: qml/Dash/PageHeaderExtraPanel.qml:55
376+#: qml/Dash/PageHeaderExtraPanel.qml:56
203377msgid "Recent Searches"
204378msgstr ""
205379
206−#: qml/Dash/PageHeaderExtraPanel.qml:66
380+#: qml/Dash/PageHeaderExtraPanel.qml:67
207381msgid "Clear All"
208382msgstr ""
209383
@@ -216,22 +390,18 @@ msgid "Less..."
216390msgstr ""
217391
218392#: qml/Dash/Previews/PreviewCommentInput.qml:68
219−#: qml/Dash/Previews/PreviewRatingInput.qml:174
393+#: qml/Dash/Previews/PreviewRatingInput.qml:175
220394msgid "Send"
221395msgstr "Rub"
222396
223−#: qml/Dash/Previews/PreviewRatingInput.qml:84
397+#: qml/Dash/Previews/PreviewRatingInput.qml:82
224398msgid "Rate this"
225399msgstr ""
226400
227−#: qml/Dash/Previews/PreviewRatingInput.qml:129
401+#: qml/Dash/Previews/PreviewRatingInput.qml:157
228402msgid "Add a review"
229403msgstr ""
230404
231−#: qml/Dash/Previews/PreviewSharing.qml:66
232−msgid "Preview Share Item"
233−msgstr ""
234−
235405#: qml/Dash/PullToRefreshScopeStyle.qml:55
236406msgid "Pull to refresh…"
237407msgstr ""
@@ -244,88 +414,100 @@ msgstr ""
244414msgid "Enable location data"
245415msgstr ""
246416
247−#: qml/Dash/ScopesList.qml:67
417+#: qml/Dash/ScopesList.qml:55
248418msgid "Manage"
249419msgstr ""
250420
251−#: qml/Dash/ScopesList.qml:113
421+#: qml/Dash/ScopesList.qml:102
252422msgid "Home"
253423msgstr "Dabqi"
254424
255−#: qml/Dash/ScopesList.qml:114
425+#: qml/Dash/ScopesList.qml:103
256426msgid "Also installed"
257427msgstr ""
258428
259−#: qml/DisabledScreenNotice.qml:104
429+#: qml/DisabledScreenNotice.qml:109
260430msgid ""
261431"Your device is now connected to an external display. Use this screen as a "
262432"touch pad to interact with the pointer."
263433msgstr ""
264434
265−#: qml/Greeter/CoverPage.qml:118
435+#: qml/Greeter/CoverPage.qml:127
266436msgid "Unlock"
267437msgstr ""
268438
269−#: qml/Greeter/LoginList.qml:239
439+#: qml/Greeter/Greeter.qml:555
440+msgid "Try again"
441+msgstr ""
442+
443+#: qml/Greeter/LoginList.qml:63
444+msgid "Passphrase"
445+msgstr ""
446+
447+#: qml/Greeter/LoginList.qml:64
448+msgid "Passcode"
449+msgstr ""
450+
451+#: qml/Greeter/LoginList.qml:87
270452msgid "Retry"
271453msgstr "Qagis"
272454
273−#: qml/Greeter/LoginList.qml:240
274−msgid "Tap to unlock"
455+#: qml/Greeter/LoginList.qml:88
456+msgid "Log In"
275457msgstr ""
276458
277−#: qml/Greeter/NarrowView.qml:54
459+#: qml/Greeter/NarrowView.qml:55
278460msgid "Sorry, incorrect passphrase."
279461msgstr ""
280462
281−#: qml/Greeter/NarrowView.qml:55
463+#: qml/Greeter/NarrowView.qml:56
282464msgid "Sorry, incorrect passcode."
283465msgstr ""
284466
285−#: qml/Greeter/NarrowView.qml:56
467+#: qml/Greeter/NarrowView.qml:57
286468msgid "This will be your last attempt."
287469msgstr ""
288470
289−#: qml/Greeter/NarrowView.qml:58
471+#: qml/Greeter/NarrowView.qml:59
290472msgid ""
291473"If passphrase is entered incorrectly, your phone will conduct a factory "
292474"reset and all personal data will be deleted."
293475msgstr ""
294476
295−#: qml/Greeter/NarrowView.qml:59
477+#: qml/Greeter/NarrowView.qml:60
296478msgid ""
297479"If passcode is entered incorrectly, your phone will conduct a factory reset "
298480"and all personal data will be deleted."
299481msgstr ""
300482
301−#: qml/Greeter/NarrowView.qml:116
483+#: qml/Greeter/NarrowView.qml:129
302484#, qt-format
303485msgid "Enter %1"
304486msgstr "%1 culus"
305487
306−#: qml/Greeter/NarrowView.qml:117
488+#: qml/Greeter/NarrowView.qml:130
307489msgid "Enter passphrase"
308490msgstr "Tatur-maxco culus"
309491
310−#: qml/Greeter/NarrowView.qml:118
492+#: qml/Greeter/NarrowView.qml:131
311493msgid "Enter passcode"
312494msgstr "Tatur-mudenta culus"
313495
314−#: qml/Greeter/NarrowView.qml:119
496+#: qml/Greeter/NarrowView.qml:135
315497#, qt-format
316498msgid "Sorry, incorrect %1"
317499msgstr ""
318500
319−#: qml/Greeter/NarrowView.qml:120
501+#: qml/Greeter/NarrowView.qml:136
320502msgid "Sorry, incorrect passphrase"
321503msgstr ""
322504
323−#: qml/Greeter/NarrowView.qml:121
505+#: qml/Greeter/NarrowView.qml:137
324506msgctxt "passphrase"
325507msgid "Please re-enter"
326508msgstr ""
327509
328−#: qml/Greeter/NarrowView.qml:122
510+#: qml/Greeter/NarrowView.qml:138
329511msgid "Sorry, incorrect passcode"
330512msgstr ""
331513
@@ -400,18 +582,18 @@ msgstr "Duudumteh"
400582msgid "Failed, tap to retry"
401583msgstr ""
402584
403−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
404−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
585+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
586+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
405587msgctxt "Button: Send a reply message"
406588msgid "Send"
407589msgstr "Rub"
408590
409−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
591+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
410592msgctxt "Label: Hint in message indicator line edit"
411593msgid "Reply"
412594msgstr ""
413595
414−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
596+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
415597msgctxt "Button: Call back on phone"
416598msgid "Call back"
417599msgstr ""
@@ -420,32 +602,12 @@ msgstr ""
420602msgid "Drag using 3 fingers any application from one window to the other"
421603msgstr ""
422604
423−#: qml/Tutorial/TutorialBottom.qml:78
424−msgid "Swipe up to add a contact"
425−msgstr ""
426−
427−#: qml/Tutorial/TutorialBottom.qml:80
428−msgid "Swipe up for favorite calculations"
429−msgstr ""
430−
431−#: qml/Tutorial/TutorialBottom.qml:82
432−msgid "Swipe up for recent calls"
433−msgstr ""
434−
435−#: qml/Tutorial/TutorialBottom.qml:84
436−msgid "Swipe up to create a message"
437−msgstr ""
438−
439−#: qml/Tutorial/TutorialBottom.qml:85
440−msgid "Swipe up to manage the app"
441−msgstr ""
442−
443−#: qml/Tutorial/TutorialLeftLong.qml:47
605+#: qml/Tutorial/TutorialLeftLong.qml:49
444606msgid "Long swipe from the left edge to open the Today scope"
445607msgstr ""
446608
447609#: qml/Tutorial/TutorialLeft.qml:47
448−msgid "Swipe from the left edge to open the launcher"
610+msgid "Short swipe from the left edge to open the launcher"
449611msgstr ""
450612
451613#: qml/Tutorial/TutorialRight.qml:55
@@ -453,15 +615,11 @@ msgid "Push your mouse against the right edge to view your open apps"
453615msgstr ""
454616
455617#: qml/Tutorial/TutorialRight.qml:56
456−msgid "Short or long swipe from the right edge to view your open apps"
618+msgid "Swipe from the right edge to view your open apps"
457619msgstr ""
458620
459621#: qml/Tutorial/TutorialTop.qml:53
460−msgid "Swipe from the top right edge to open the notification bar"
461−msgstr ""
462−
463−#: qml/Tutorial/TutorialTop.qml:54
464−msgid "Swipe from the top edge to open the notification bar"
622+msgid "Swipe from the top edge to access notifications and quick settings"
465623msgstr ""
466624
467625#: qml/Wizard/Page.qml:54
@@ -473,11 +631,11 @@ msgstr "Derre"
473631msgid "Language"
474632msgstr ""
475633
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
634+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
635+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
478636#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
479637#: qml/Wizard/Pages/75-report-check.qml:84
480−#: qml/Wizard/Pages/passcode-desktop.qml:124
638+#: qml/Wizard/Pages/passcode-desktop.qml:141
481639#: qml/Wizard/Pages/password-set.qml:141
482640msgid "Next"
483641msgstr ""
@@ -539,7 +697,7 @@ msgstr ""
539697msgid "Time Zone"
540698msgstr ""
541699
542−#: qml/Wizard/Pages/50-timezone.qml:178
700+#: qml/Wizard/Pages/50-timezone.qml:181
543701msgid "Enter your city"
544702msgstr ""
545703
@@ -629,7 +787,7 @@ msgid "Service Terms"
629787msgstr ""
630788
631789#: qml/Wizard/Pages/passcode-confirm.qml:43
632−#: qml/Wizard/Pages/passcode-desktop.qml:80
790+#: qml/Wizard/Pages/passcode-desktop.qml:96
633791msgid "Confirm passcode"
634792msgstr ""
635793
@@ -646,24 +804,24 @@ msgstr ""
646804msgid "Lock Screen Passcode"
647805msgstr ""
648806
649−#: qml/Wizard/Pages/passcode-desktop.qml:56
807+#: qml/Wizard/Pages/passcode-desktop.qml:60
650808msgid "Enter 4 numbers to setup your passcode"
651809msgstr ""
652810
653−#: qml/Wizard/Pages/passcode-desktop.qml:65
811+#: qml/Wizard/Pages/passcode-desktop.qml:76
654812#: qml/Wizard/Pages/passcode-set.qml:54
655813msgid "Choose passcode"
656814msgstr ""
657815
658−#: qml/Wizard/Pages/passcode-desktop.qml:105
816+#: qml/Wizard/Pages/passcode-desktop.qml:126
659817msgid "Passcode too short"
660818msgstr ""
661819
662−#: qml/Wizard/Pages/passcode-desktop.qml:107
820+#: qml/Wizard/Pages/passcode-desktop.qml:128
663821msgid "Passcodes match"
664822msgstr ""
665823
666−#: qml/Wizard/Pages/passcode-desktop.qml:109
824+#: qml/Wizard/Pages/passcode-desktop.qml:130
667825msgid "Passcodes do not match"
668826msgstr ""
669827
@@ -712,26 +870,30 @@ msgid "To proceed with no SIM tap Skip."
712870msgstr ""
713871
714872#: qml/Wizard/PasswordMeter.qml:87
715−msgid "Passwords match"
873+msgid "Password too short"
716874msgstr ""
717875
718876#: qml/Wizard/PasswordMeter.qml:89
877+msgid "Passwords match"
878+msgstr ""
879+
880+#: qml/Wizard/PasswordMeter.qml:91
719881msgid "Passwords do not match"
720882msgstr ""
721883
722−#: qml/Wizard/PasswordMeter.qml:93
884+#: qml/Wizard/PasswordMeter.qml:95
723885msgid "Strong password"
724886msgstr ""
725887
726−#: qml/Wizard/PasswordMeter.qml:95
888+#: qml/Wizard/PasswordMeter.qml:97
727889msgid "Fair password"
728890msgstr ""
729891
730−#: qml/Wizard/PasswordMeter.qml:97
892+#: qml/Wizard/PasswordMeter.qml:99
731893msgid "Weak password"
732894msgstr ""
733895
734−#: qml/Wizard/PasswordMeter.qml:99
896+#: qml/Wizard/PasswordMeter.qml:101
735897msgid "Very weak password"
736898msgstr ""
737899
po/am.po+300−108
@@ -7,47 +7,47 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-05-18 11:19+0000\n"
11−"PO-Revision-Date: 2016-03-24 19:07+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+0000\n"
11+"PO-Revision-Date: 2016-07-05 02:15+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-05-19 05:49+0000\n"
19−"X-Generator: Launchpad (build 18025)\n"
18+"X-Launchpad-Export-Date: 2016-07-14 06:00+0000\n"
19+"X-Generator: Launchpad (build 18115)\n"
2020
21−#: plugins/IntegratedLightDM/Greeter.cpp:112
21+#: plugins/LightDM/Greeter.cpp:123
2222msgid "Password: "
2323msgstr "የ መግቢያ ቃል: "
2424
25−#: plugins/Unity/Launcher/launcheritem.cpp:48
26−#: plugins/Unity/Launcher/launcheritem.cpp:107
25+#: plugins/Unity/Launcher/launcheritem.cpp:49
26+#: plugins/Unity/Launcher/launcheritem.cpp:108
2727msgid "Pin shortcut"
2828msgstr "አቋራጭ ማጣበቂያ"
2929
30−#: plugins/Unity/Launcher/launcheritem.cpp:53
30+#: plugins/Unity/Launcher/launcheritem.cpp:54
3131msgid "Quit"
3232msgstr "ማጥፊያ"
3333
34−#: plugins/Unity/Launcher/launcheritem.cpp:107
34+#: plugins/Unity/Launcher/launcheritem.cpp:108
3535msgid "Unpin shortcut"
3636msgstr "አቋራጭ መለያያ"
3737
38−#: qml/Components/DelayedLockscreen.qml:49
38+#: qml/Components/DelayedLockscreen.qml:50
3939msgid "Device Locked"
4040msgstr "አካሉ ተቆልፏል"
4141
42−#: qml/Components/DelayedLockscreen.qml:64
42+#: qml/Components/DelayedLockscreen.qml:65
4343msgid "You have been locked out due to too many failed passphrase attempts."
4444msgstr "ብዙ ጊዜ የተሳሳተ የ ማለፊያ ሀረግ ለማስገባት በ መሞከር ምክንያት ስልኩ ተቆልፏል"
4545
46−#: qml/Components/DelayedLockscreen.qml:65
46+#: qml/Components/DelayedLockscreen.qml:66
4747msgid "You have been locked out due to too many failed passcode attempts."
4848msgstr "ብዙ ጊዜ የተሳሳተ የ ማለፊያ ኮድ ለማስገባት በ መሞከር ምክንያት ስልኩ ተቆልፏል"
4949
50−#: qml/Components/DelayedLockscreen.qml:74
50+#: qml/Components/DelayedLockscreen.qml:75
5151#, qt-format
5252msgid "Please wait %1 minute and then try again…"
5353msgid_plural "Please wait %1 minutes and then try again…"
@@ -74,7 +74,7 @@ msgid "Log Out"
7474msgstr "መውጫ"
7575
7676#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
77−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
77+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
7878#: qml/Wizard/Pages/passcode-set.qml:32
7979msgid "Cancel"
8080msgstr "መሰረዣ"
@@ -119,18 +119,188 @@ msgctxt "Button: Restart the system"
119119msgid "Restart"
120120msgstr "እንደገና ማስጀመሪያ"
121121
122−#: qml/Components/Lockscreen.qml:231
122+#: qml/Components/KeyboardShortcutsOverlay.qml:41
123+msgid "Keyboard Shortcuts"
124+msgstr "የ ፊደል ገበታ አቋራጮች"
125+
126+#: qml/Components/KeyboardShortcutsOverlay.qml:55
127+msgid "Unity 8"
128+msgstr "Unity 8"
129+
130+#: qml/Components/KeyboardShortcutsOverlay.qml:62
131+msgid "PrtScr"
132+msgstr "PrtScr"
133+
134+#: qml/Components/KeyboardShortcutsOverlay.qml:67
135+msgid "Takes a screenshot."
136+msgstr "መመልከቻ ፎቶ ማንሻ"
137+
138+#: qml/Components/KeyboardShortcutsOverlay.qml:75
139+msgid "Alt + PrtScr"
140+msgstr "Alt + PrtScr"
141+
142+#: qml/Components/KeyboardShortcutsOverlay.qml:80
143+msgid "Takes a screenshot of a window."
144+msgstr "የ መስኮት መመልከቻ ፎቶ ማንሻ"
145+
146+#: qml/Components/KeyboardShortcutsOverlay.qml:88
147+msgid "Super + Space"
148+msgstr "Super + Space"
149+
150+#: qml/Components/KeyboardShortcutsOverlay.qml:93
151+msgid "Switches to next keyboard layout."
152+msgstr "የሚቀጥለው የ ፊደል ገበታ እቅድ መቀየሪያ"
153+
154+#: qml/Components/KeyboardShortcutsOverlay.qml:101
155+msgid "Super + Shift + Space"
156+msgstr "Super + Shift + Space"
157+
158+#: qml/Components/KeyboardShortcutsOverlay.qml:106
159+msgid "Switches to previous keyboard layout."
160+msgstr "ወዳለፈው የ ፊደል ገበታ እቅድ መቀየሪያ"
161+
162+#: qml/Components/KeyboardShortcutsOverlay.qml:118
163+msgid "Launcher"
164+msgstr "ማስነሻ"
165+
166+#: qml/Components/KeyboardShortcutsOverlay.qml:125
167+msgid "Super (Hold)"
168+msgstr "Super (ይጫኑ)"
169+
170+#: qml/Components/KeyboardShortcutsOverlay.qml:130
171+msgid "Opens the launcher, displays shortcuts."
172+msgstr "ማስነሻውን መክፈቻ እና አቋራጮች ማሳያ"
173+
174+#: qml/Components/KeyboardShortcutsOverlay.qml:138
175+msgid "Alt + F1"
176+msgstr "Alt + F1"
177+
178+#: qml/Components/KeyboardShortcutsOverlay.qml:143
179+msgid "Opens launcher keyboard navigation mode."
180+msgstr "መክፈቻ በ ፊደል ገበታ መቃኛ ዘዴ ማስነሻ"
181+
182+#: qml/Components/KeyboardShortcutsOverlay.qml:151
183+msgid "Super + Tab"
184+msgstr "Super + Tab"
185+
186+#: qml/Components/KeyboardShortcutsOverlay.qml:156
187+msgid "Switches applications via the launcher."
188+msgstr "መተግበሪያዎችን በ ማስጀመሪያ መቀየሪያ"
189+
190+#: qml/Components/KeyboardShortcutsOverlay.qml:164
191+msgid "Super + 0 to 9"
192+msgstr "Super + 0 እስከ 9"
193+
194+#: qml/Components/KeyboardShortcutsOverlay.qml:169
195+msgid "Same as clicking on a launcher icon."
196+msgstr "ተመሳሳይ በ ማስጀመሪያ ምልክት ላይ እንደ መጫን"
197+
198+#: qml/Components/KeyboardShortcutsOverlay.qml:181
199+msgid "Scopes"
200+msgstr "ክልል"
201+
202+#: qml/Components/KeyboardShortcutsOverlay.qml:188
203+msgid "Super (Tap)"
204+msgstr "Super (Tap)"
205+
206+#: qml/Components/KeyboardShortcutsOverlay.qml:193
207+msgid "Opens the Scopes home."
208+msgstr "የ ክልል ቤት መክፈቻ"
209+
210+#: qml/Components/KeyboardShortcutsOverlay.qml:209
211+msgid "Switching"
212+msgstr "በ መቀየር ላይ"
213+
214+#: qml/Components/KeyboardShortcutsOverlay.qml:216
215+msgid "Alt + Tab"
216+msgstr "Alt + Tab"
217+
218+#: qml/Components/KeyboardShortcutsOverlay.qml:221
219+msgid "Switches between applications."
220+msgstr "በ መተግበሪያዎች መካከል መቀያየሪያ"
221+
222+#: qml/Components/KeyboardShortcutsOverlay.qml:229
223+msgid "Super + W"
224+msgstr "Super + W"
225+
226+#: qml/Components/KeyboardShortcutsOverlay.qml:234
227+msgid "Opens the desktop spread."
228+msgstr "የ ዴስክቶፕ ማስፊያ መክፈቻ"
229+
230+#: qml/Components/KeyboardShortcutsOverlay.qml:242
231+msgid "Cursor Left or Right"
232+msgstr "መጠቆሚያ የ ግራ ወይንም የ ቀኝ"
233+
234+#: qml/Components/KeyboardShortcutsOverlay.qml:247
235+msgid "Moves the focus."
236+msgstr "ትኩረት ማንቀሳቀሻ"
237+
238+#: qml/Components/KeyboardShortcutsOverlay.qml:259
239+msgid "Windows"
240+msgstr "መስኮቶች"
241+
242+#: qml/Components/KeyboardShortcutsOverlay.qml:266
243+msgid "Ctrl + Super + D"
244+msgstr "Ctrl + Super + D"
245+
246+#: qml/Components/KeyboardShortcutsOverlay.qml:271
247+msgid "Minimizes all windows."
248+msgstr "ሁሉንም መስኮቶች ማሳነሻ"
249+
250+#: qml/Components/KeyboardShortcutsOverlay.qml:279
251+msgid "Ctrl + Super + Up"
252+msgstr "Ctrl + Super + Up"
253+
254+#: qml/Components/KeyboardShortcutsOverlay.qml:284
255+msgid "Maximizes the current window."
256+msgstr "የ አሁኑን መስኮት ማሳደጊያ"
257+
258+#: qml/Components/KeyboardShortcutsOverlay.qml:292
259+msgid "Ctrl + Super + Down"
260+msgstr "Ctrl + Super + Down"
261+
262+#: qml/Components/KeyboardShortcutsOverlay.qml:297
263+msgid "Minimizes or restores the current window."
264+msgstr "የ አሁኑን መስኮትማሳነሻ ወይንም እንደ ነበር መመለሻ"
265+
266+#: qml/Components/KeyboardShortcutsOverlay.qml:305
267+msgid "Ctrl + Super + Left or Right"
268+msgstr "Ctrl + Super + Left or Right"
269+
270+#: qml/Components/KeyboardShortcutsOverlay.qml:310
271+msgid "Semi-maximizes the current window."
272+msgstr "የ አሁኑን መስኮት በ ንዑስ-ማሳደጊያ"
273+
274+#: qml/Components/KeyboardShortcutsOverlay.qml:318
275+msgid "Alt + F4"
276+msgstr "Alt + F4"
277+
278+#: qml/Components/KeyboardShortcutsOverlay.qml:323
279+msgid "Closes the current window."
280+msgstr "የ አሁኑን መስኮት መዝጊያ"
281+
282+#: qml/Components/Lockscreen.qml:239
123283msgid "Return to Call"
124284msgstr "ወደ ጥሪ መመለሻ"
125285
126−#: qml/Components/Lockscreen.qml:231
286+#: qml/Components/Lockscreen.qml:239
127287msgid "Emergency Call"
128288msgstr "የ ድንገተኛ ጥሪ"
129289
130−#: qml/Components/Lockscreen.qml:263
290+#: qml/Components/Lockscreen.qml:271
131291msgid "OK"
132292msgstr "እሺ"
133293
294+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
295+#, qt-format
296+msgid "%1:%2:%3"
297+msgstr "%1:%2:%3"
298+
299+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
300+#, qt-format
301+msgid "%1:%2"
302+msgstr "%1:%2"
303+
134304#: qml/Components/ModeSwitchWarningDialog.qml:32
135305msgid "Apps may have unsaved data:"
136306msgstr "መተግበሪያው ያልተቀመጠ ዳታ ይዟል:"
@@ -157,26 +327,30 @@ msgstr "አሁን እንደገና መገናኛ!"
157327msgid "Close all"
158328msgstr "ሁሉንም መዝጊያ"
159329
160−#: qml/Dash/DashPageHeader.qml:337
330+#: qml/Components/SharingPicker.qml:54
331+msgid "Preview Share Item"
332+msgstr "የሚካፈሉትን እቃ ቅድመ እይታ"
333+
334+#: qml/Dash/DashPageHeader.qml:333
161335msgctxt "Button: Open the Ubuntu Store"
162336msgid "Store"
163337msgstr "ማስቀመጫ"
164338
165−#: qml/Dash/DashPageHeader.qml:344
339+#: qml/Dash/DashPageHeader.qml:340
166340msgctxt "Button: Start a search in the current dash scope"
167341msgid "Search"
168342msgstr "መፈለጊያ"
169343
170−#: qml/Dash/DashPageHeader.qml:354
344+#: qml/Dash/DashPageHeader.qml:350
171345msgctxt "Button: Show the current dash scope settings"
172346msgid "Settings"
173347msgstr "ማሰናጃዎች"
174348
175−#: qml/Dash/DashPageHeader.qml:361
349+#: qml/Dash/DashPageHeader.qml:357
176350msgid "Remove from Favorites"
177351msgstr "ከምወዳቸው ማስወገጃ"
178352
179−#: qml/Dash/DashPageHeader.qml:361
353+#: qml/Dash/DashPageHeader.qml:357
180354msgid "Add to Favorites"
181355msgstr "ወደምወዳቸው መጨመሪያ"
182356
@@ -188,24 +362,24 @@ msgstr "የ እርስዎን ውጤቶች እንደገና ማጣሪያ"
188362msgid "Reset"
189363msgstr "እንደ ነበረ መመለሻ"
190364
191−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
365+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
192366msgid "Show less"
193−msgstr ""
367+msgstr "ትንሽ ማሳያ"
194368
195−#: qml/Dash/GenericScopeView.qml:579
369+#: qml/Dash/GenericScopeView.qml:580
196370msgid "Show all"
197−msgstr ""
371+msgstr "ሁሉንም ማሳያ"
198372
199−#: qml/Dash/GenericScopeView.qml:636
373+#: qml/Dash/GenericScopeView.qml:637
200374msgctxt "Label: Hint for dash search line edit"
201375msgid "Search"
202376msgstr "መፈለጊያ"
203377
204−#: qml/Dash/PageHeaderExtraPanel.qml:55
378+#: qml/Dash/PageHeaderExtraPanel.qml:56
205379msgid "Recent Searches"
206380msgstr "የ ቅርብ ጊዜ ፍለጋዎች"
207381
208−#: qml/Dash/PageHeaderExtraPanel.qml:66
382+#: qml/Dash/PageHeaderExtraPanel.qml:67
209383msgid "Clear All"
210384msgstr "ሁሉንም ማጽጃ"
211385
@@ -218,22 +392,18 @@ msgid "Less..."
218392msgstr "አነስተኛ..."
219393
220394#: qml/Dash/Previews/PreviewCommentInput.qml:68
221−#: qml/Dash/Previews/PreviewRatingInput.qml:174
395+#: qml/Dash/Previews/PreviewRatingInput.qml:175
222396msgid "Send"
223397msgstr "መላኪያ"
224398
225−#: qml/Dash/Previews/PreviewRatingInput.qml:84
399+#: qml/Dash/Previews/PreviewRatingInput.qml:82
226400msgid "Rate this"
227401msgstr "ለዚህ ደረጃ ይስጡ"
228402
229−#: qml/Dash/Previews/PreviewRatingInput.qml:129
403+#: qml/Dash/Previews/PreviewRatingInput.qml:157
230404msgid "Add a review"
231405msgstr "ግምገማ መጨመሪያ"
232406
233−#: qml/Dash/Previews/PreviewSharing.qml:66
234−msgid "Preview Share Item"
235−msgstr "የሚካፈሉትን እቃ ቅድመ እይታ"
236−
237407#: qml/Dash/PullToRefreshScopeStyle.qml:55
238408msgid "Pull to refresh…"
239409msgstr "ይሳቡ ለማነቃቃት…"
@@ -246,49 +416,61 @@ msgstr "ይልቀቁ ለማነቃቃት…"
246416msgid "Enable location data"
247417msgstr "የአካባቢ ዳታ ማስቻያ"
248418
249−#: qml/Dash/ScopesList.qml:67
419+#: qml/Dash/ScopesList.qml:55
250420msgid "Manage"
251421msgstr "አስተዳዳሪ"
252422
253−#: qml/Dash/ScopesList.qml:113
423+#: qml/Dash/ScopesList.qml:102
254424msgid "Home"
255425msgstr "ቤት"
256426
257−#: qml/Dash/ScopesList.qml:114
427+#: qml/Dash/ScopesList.qml:103
258428msgid "Also installed"
259429msgstr "እንዲሁም የተገጠሙ"
260430
261−#: qml/DisabledScreenNotice.qml:104
431+#: qml/DisabledScreenNotice.qml:109
262432msgid ""
263433"Your device is now connected to an external display. Use this screen as a "
264434"touch pad to interact with the pointer."
265435msgstr "የ እርስዎ አካል አሁን ከ ውጪ ማሳያ ጋር ተገናኝቷል: ይህን መመልከቻ እንደ ተችፓድ መጠቀሚያ"
266436
267−#: qml/Greeter/CoverPage.qml:118
437+#: qml/Greeter/CoverPage.qml:127
268438msgid "Unlock"
269439msgstr "መክፈቻ"
270440
271−#: qml/Greeter/LoginList.qml:239
441+#: qml/Greeter/Greeter.qml:555
442+msgid "Try again"
443+msgstr "እንደገና ይሞክሩ"
444+
445+#: qml/Greeter/LoginList.qml:63
446+msgid "Passphrase"
447+msgstr ""
448+
449+#: qml/Greeter/LoginList.qml:64
450+msgid "Passcode"
451+msgstr ""
452+
453+#: qml/Greeter/LoginList.qml:87
272454msgid "Retry"
273455msgstr "እንደገና ይሞክሩ"
274456
275−#: qml/Greeter/LoginList.qml:240
276−msgid "Tap to unlock"
277−msgstr "ለመክፈት መታ ያድርጉ"
457+#: qml/Greeter/LoginList.qml:88
458+msgid "Log In"
459+msgstr "መግቢያ"
278460
279−#: qml/Greeter/NarrowView.qml:54
461+#: qml/Greeter/NarrowView.qml:55
280462msgid "Sorry, incorrect passphrase."
281463msgstr "አዝናለሁ የተሳሳተ የማለፊያ ሐረግ"
282464
283−#: qml/Greeter/NarrowView.qml:55
465+#: qml/Greeter/NarrowView.qml:56
284466msgid "Sorry, incorrect passcode."
285467msgstr "አዝናለሁ የተሳሳተ የማለፊያ ኮድ"
286468
287−#: qml/Greeter/NarrowView.qml:56
469+#: qml/Greeter/NarrowView.qml:57
288470msgid "This will be your last attempt."
289471msgstr "ይህ የመጨረሻ ሙከራዎ ነው"
290472
291−#: qml/Greeter/NarrowView.qml:58
473+#: qml/Greeter/NarrowView.qml:59
292474msgid ""
293475"If passphrase is entered incorrectly, your phone will conduct a factory "
294476"reset and all personal data will be deleted."
@@ -296,7 +478,7 @@ msgstr ""
296478"የተሳሳተ የማለፊያ ሐረግ ካስገቡ የ እርስዎ ስልክ ወደ ነበረበት ወደ ፋክቶሪው ዘዴ ይመለሳል: እና የ ግል ዳታ በሙሉ "
297479"ይጠፋል"
298480
299−#: qml/Greeter/NarrowView.qml:59
481+#: qml/Greeter/NarrowView.qml:60
300482msgid ""
301483"If passcode is entered incorrectly, your phone will conduct a factory reset "
302484"and all personal data will be deleted."
@@ -304,34 +486,34 @@ msgstr ""
304486"የተሳሳተ የማለፊያ ኮድ ካስገቡ የ እርስዎ ስልክ ወደ ነበረበት ወደ ፋክቶሪው ዘዴ ይመለሳል: እና የ ግል ዳታ በሙሉ "
305487"ይጠፋል"
306488
307−#: qml/Greeter/NarrowView.qml:116
489+#: qml/Greeter/NarrowView.qml:129
308490#, qt-format
309491msgid "Enter %1"
310492msgstr "ማስገቢያ %1"
311493
312−#: qml/Greeter/NarrowView.qml:117
494+#: qml/Greeter/NarrowView.qml:130
313495msgid "Enter passphrase"
314496msgstr "የ ማለፊያ ሀረግ ያስገቡ"
315497
316−#: qml/Greeter/NarrowView.qml:118
498+#: qml/Greeter/NarrowView.qml:131
317499msgid "Enter passcode"
318500msgstr "የ ማለፊያ ኮድ ያስገቡ"
319501
320−#: qml/Greeter/NarrowView.qml:119
502+#: qml/Greeter/NarrowView.qml:135
321503#, qt-format
322504msgid "Sorry, incorrect %1"
323505msgstr "አዝናለሁ: የተሳሳተ%1"
324506
325−#: qml/Greeter/NarrowView.qml:120
507+#: qml/Greeter/NarrowView.qml:136
326508msgid "Sorry, incorrect passphrase"
327509msgstr "አዝናለሁ የተሳሳተ የማለፊያ ሐረግ"
328510
329−#: qml/Greeter/NarrowView.qml:121
511+#: qml/Greeter/NarrowView.qml:137
330512msgctxt "passphrase"
331513msgid "Please re-enter"
332514msgstr "እባክዎን እንደገና-ያስገቡ"
333515
334−#: qml/Greeter/NarrowView.qml:122
516+#: qml/Greeter/NarrowView.qml:138
335517msgid "Sorry, incorrect passcode"
336518msgstr "አዝናለሁ የተሳሳተ የማለፊያ ኮድ"
337519
@@ -406,18 +588,18 @@ msgstr "ጨርሷል"
406588msgid "Failed, tap to retry"
407589msgstr "አልተቻለም: እንደገና ለመሞከር መታ ያድርጉ"
408590
409−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
410−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
591+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
592+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
411593msgctxt "Button: Send a reply message"
412594msgid "Send"
413595msgstr "መላኪያ"
414596
415−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
597+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
416598msgctxt "Label: Hint in message indicator line edit"
417599msgid "Reply"
418600msgstr "መመለሻ"
419601
420−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
602+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
421603msgctxt "Button: Call back on phone"
422604msgid "Call back"
423605msgstr "መልሶ መደወያ"
@@ -426,49 +608,25 @@ msgstr "መልሶ መደወያ"
426608msgid "Drag using 3 fingers any application from one window to the other"
427609msgstr "መጎተቻ 3 ጣቶች በ መጠቀም ማንኛውንም መተግበሪያ ከ አንድ መስኮት ወደ ሌላ"
428610
429−#: qml/Tutorial/TutorialBottom.qml:78
430−msgid "Swipe up to add a contact"
431−msgstr "ወደ ላይ ይጥረጉ ግንኙነት ለ መጨመር"
432−
433−#: qml/Tutorial/TutorialBottom.qml:80
434−msgid "Swipe up for favorite calculations"
435−msgstr "ወደ ላይ ይጥረጉ የሚወዱትን ለማስላት"
436−
437−#: qml/Tutorial/TutorialBottom.qml:82
438−msgid "Swipe up for recent calls"
439−msgstr "ወደ ላይ ይጥረጉ ለ ቅርብ ጊዜ ጥሪዎች"
440−
441−#: qml/Tutorial/TutorialBottom.qml:84
442−msgid "Swipe up to create a message"
443−msgstr "ወደ ላይ ይጥረጉ መልእክት ለ መፍጠር"
444−
445−#: qml/Tutorial/TutorialBottom.qml:85
446−msgid "Swipe up to manage the app"
447−msgstr "ወደ ላይ ይጥረጉ መተግበሪያ ለማስተዳደር"
448−
449−#: qml/Tutorial/TutorialLeftLong.qml:47
611+#: qml/Tutorial/TutorialLeftLong.qml:49
450612msgid "Long swipe from the left edge to open the Today scope"
451613msgstr "በ ረጅሙ ከ ግራ ጠርዝ በኩል ይጥረጉ የ ዛሬን ክልል ለ መክፈት"
452614
453615#: qml/Tutorial/TutorialLeft.qml:47
454−msgid "Swipe from the left edge to open the launcher"
455−msgstr "ከ ግራ ጠርዝ በኩል ይጥረጉ ማስጀመሪያውን ለ መክፈት"
616+msgid "Short swipe from the left edge to open the launcher"
617+msgstr "በ አጭሩ ይጥረጉ ከ ግራ ጠርዝ በኩል ማስጀመሪያውን ለ መክፈት"
456618
457619#: qml/Tutorial/TutorialRight.qml:55
458620msgid "Push your mouse against the right edge to view your open apps"
459−msgstr ""
621+msgstr "የ እርስዎን አይጥ መጠቆሚያ ወደ ቀኝ ጠርዝ በኩል ያስጠጉ የ ተከፈቱ መተግበሪያዎችን ለ መመልከት"
460622
461623#: qml/Tutorial/TutorialRight.qml:56
462−msgid "Short or long swipe from the right edge to view your open apps"
463−msgstr "በ አጭሩ ወይንም በ ረጅሙ ይጥረጉ ከ ቀኝ ጠረዝ በኩል የ ተከፈቱ መተግበሪያዎችን ለማየት"
624+msgid "Swipe from the right edge to view your open apps"
625+msgstr "ከ ቀኝ በኩል ይጥረጉ የ ተከፈቱ መተግበሪያዎችን ለ መመልከት"
464626
465627#: qml/Tutorial/TutorialTop.qml:53
466−msgid "Swipe from the top right edge to open the notification bar"
467−msgstr "ከ ላይ ቀኝ ጠርዝ በኩል ይጥረጉ የ ማስታወቂያ መደርደሪያ ለ መክፈት"
468−
469−#: qml/Tutorial/TutorialTop.qml:54
470−msgid "Swipe from the top edge to open the notification bar"
471−msgstr "ከ ላይ ጠርዝ በኩል ይጥረጉ የ ማስታወቂያ መደርደሪያ ለ መክፈት"
628+msgid "Swipe from the top edge to access notifications and quick settings"
629+msgstr "ከ ላይ ጠረዝ በኩል ይጥረጉ ማስታወቂያዎች እና በፍጥነት ማሰናጃዎች ጋር ለ መድረስ"
472630
473631#: qml/Wizard/Page.qml:54
474632msgctxt "Button: Go back one page in the Wizard"
@@ -479,11 +637,11 @@ msgstr "ወደ ኋላ"
479637msgid "Language"
480638msgstr "ቋንቋ"
481639
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
640+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
641+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
484642#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
485643#: qml/Wizard/Pages/75-report-check.qml:84
486−#: qml/Wizard/Pages/passcode-desktop.qml:124
644+#: qml/Wizard/Pages/passcode-desktop.qml:141
487645#: qml/Wizard/Pages/password-set.qml:141
488646msgid "Next"
489647msgstr "ይቀጥሉ"
@@ -545,7 +703,7 @@ msgstr "እርስዎ በኋላ በ ስርአት ማሰናጃ ውስጥ መቀየ
545703msgid "Time Zone"
546704msgstr "የ ሰአት ክልል"
547705
548−#: qml/Wizard/Pages/50-timezone.qml:178
706+#: qml/Wizard/Pages/50-timezone.qml:181
549707msgid "Enter your city"
550708msgstr "የ እርስዎን ከተማ ያስገቡ"
551709
@@ -637,7 +795,7 @@ msgid "Service Terms"
637795msgstr "የ ግልጋሎት ስምምነቶች"
638796
639797#: qml/Wizard/Pages/passcode-confirm.qml:43
640−#: qml/Wizard/Pages/passcode-desktop.qml:80
798+#: qml/Wizard/Pages/passcode-desktop.qml:96
641799msgid "Confirm passcode"
642800msgstr "የማለፊያ ኮድ ማረጋገጫ"
643801
@@ -654,24 +812,24 @@ msgstr "እባክዎን እንደገና-ያስገቡ"
654812msgid "Lock Screen Passcode"
655813msgstr "የ መመልከቻው መቆለፊያ የ ማለፊያ ኮድ"
656814
657−#: qml/Wizard/Pages/passcode-desktop.qml:56
815+#: qml/Wizard/Pages/passcode-desktop.qml:60
658816msgid "Enter 4 numbers to setup your passcode"
659817msgstr "ያስገቡ 4 ቁጥሮች የ እርስዎን የ ማለፊያ ኮድ ለማሰናዳት"
660818
661−#: qml/Wizard/Pages/passcode-desktop.qml:65
819+#: qml/Wizard/Pages/passcode-desktop.qml:76
662820#: qml/Wizard/Pages/passcode-set.qml:54
663821msgid "Choose passcode"
664822msgstr "የ ማለፊያ ኮድ ይምረጡ"
665823
666−#: qml/Wizard/Pages/passcode-desktop.qml:105
824+#: qml/Wizard/Pages/passcode-desktop.qml:126
667825msgid "Passcode too short"
668826msgstr "የ ማለፊያ ኮዱ በጣም አጭር ነው"
669827
670−#: qml/Wizard/Pages/passcode-desktop.qml:107
828+#: qml/Wizard/Pages/passcode-desktop.qml:128
671829msgid "Passcodes match"
672830msgstr "የ ማለፊያ ኮዶቹ ተመሳሳይ ናቸው"
673831
674−#: qml/Wizard/Pages/passcode-desktop.qml:109
832+#: qml/Wizard/Pages/passcode-desktop.qml:130
675833msgid "Passcodes do not match"
676834msgstr "የ ማለፊያ ኮዶቹ አይመሳሰሉም"
677835
@@ -720,26 +878,30 @@ msgid "To proceed with no SIM tap Skip."
720878msgstr "ያለ ሲም ለ መቀጠል መዝለያውን መታ ያድርጉ"
721879
722880#: qml/Wizard/PasswordMeter.qml:87
881+msgid "Password too short"
882+msgstr "የ መግቢያ ቃል በጣም አጭር ነው"
883+
884+#: qml/Wizard/PasswordMeter.qml:89
723885msgid "Passwords match"
724886msgstr "የ መግቢያ ቃሎቹ ተመሳሳይ ናቸው"
725887
726−#: qml/Wizard/PasswordMeter.qml:89
888+#: qml/Wizard/PasswordMeter.qml:91
727889msgid "Passwords do not match"
728890msgstr "የ መግቢያ ቃሎቹ ተመሳሳይ አይደሉም"
729891
730−#: qml/Wizard/PasswordMeter.qml:93
892+#: qml/Wizard/PasswordMeter.qml:95
731893msgid "Strong password"
732894msgstr "ጠንካራ የ መግቢያ ቃል"
733895
734−#: qml/Wizard/PasswordMeter.qml:95
896+#: qml/Wizard/PasswordMeter.qml:97
735897msgid "Fair password"
736898msgstr "ደህና የ መግቢያ ቃል"
737899
738−#: qml/Wizard/PasswordMeter.qml:97
900+#: qml/Wizard/PasswordMeter.qml:99
739901msgid "Weak password"
740902msgstr "ደካማ የ መግቢያ ቃል"
741903
742−#: qml/Wizard/PasswordMeter.qml:99
904+#: qml/Wizard/PasswordMeter.qml:101
743905msgid "Very weak password"
744906msgstr "በጣም ደካማ የ መግቢያ ቃል"
745907
@@ -988,6 +1150,9 @@ msgstr "በጣም ደካማ የ መግቢያ ቃል"
9881150#~ msgid "View all your running tasks."
9891151#~ msgstr "እርስዎ የሚያስኬዱትን ተግባሮች በሙሉ መመልከቻ"
9901152
1153+#~ msgid "Tap to unlock"
1154+#~ msgstr "ለመክፈት መታ ያድርጉ"
1155+
9911156#~ msgctxt "Button: Shut down the system"
9921157#~ msgid "Shut down"
9931158#~ msgstr "ማጥፊያ"
@@ -1057,5 +1222,32 @@ msgstr "በጣም ደካማ የ መግቢያ ቃል"
10571222#~ msgid "Call back"
10581223#~ msgstr "መልሶ መደወያ"
10591224
1225+#~ msgid "Swipe up for recent calls"
1226+#~ msgstr "ወደ ላይ ይጥረጉ ለ ቅርብ ጊዜ ጥሪዎች"
1227+
1228+#~ msgid "Swipe up for favorite calculations"
1229+#~ msgstr "ወደ ላይ ይጥረጉ የሚወዱትን ለማስላት"
1230+
1231+#~ msgid "Swipe up to manage the app"
1232+#~ msgstr "ወደ ላይ ይጥረጉ መተግበሪያ ለማስተዳደር"
1233+
1234+#~ msgid "Swipe up to create a message"
1235+#~ msgstr "ወደ ላይ ይጥረጉ መልእክት ለ መፍጠር"
1236+
1237+#~ msgid "Swipe up to add a contact"
1238+#~ msgstr "ወደ ላይ ይጥረጉ ግንኙነት ለ መጨመር"
1239+
1240+#~ msgid "Swipe from the top right edge to open the notification bar"
1241+#~ msgstr "ከ ላይ ቀኝ ጠርዝ በኩል ይጥረጉ የ ማስታወቂያ መደርደሪያ ለ መክፈት"
1242+
1243+#~ msgid "Swipe from the top edge to open the notification bar"
1244+#~ msgstr "ከ ላይ ጠርዝ በኩል ይጥረጉ የ ማስታወቂያ መደርደሪያ ለ መክፈት"
1245+
1246+#~ msgid "Short or long swipe from the right edge to view your open apps"
1247+#~ msgstr "በ አጭሩ ወይንም በ ረጅሙ ይጥረጉ ከ ቀኝ ጠረዝ በኩል የ ተከፈቱ መተግበሪያዎችን ለማየት"
1248+
1249+#~ msgid "Swipe from the left edge to open the launcher"
1250+#~ msgstr "ከ ግራ ጠርዝ በኩል ይጥረጉ ማስጀመሪያውን ለ መክፈት"
1251+
10601252#~ msgid "Hover your mouse on the right edge to view your open apps"
10611253#~ msgstr "የ እርስዎን አይጥ ወደ ቀኝ ጠርዝ በኩል ሲያደርጉ የ ተከፈቱ መተግበሪያዎች መመልከቻ"
po/ar.po+266−101
@@ -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-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+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,41 +16,41 @@ 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-05-19 05:49+0000\n"
20−"X-Generator: Launchpad (build 18025)\n"
19+"X-Launchpad-Export-Date: 2016-07-14 06:00+0000\n"
20+"X-Generator: Launchpad (build 18115)\n"
2121
22−#: plugins/IntegratedLightDM/Greeter.cpp:112
22+#: plugins/LightDM/Greeter.cpp:123
2323msgid "Password: "
2424msgstr "كلمة السر: "
2525
26−#: plugins/Unity/Launcher/launcheritem.cpp:48
27−#: plugins/Unity/Launcher/launcheritem.cpp:107
26+#: plugins/Unity/Launcher/launcheritem.cpp:49
27+#: plugins/Unity/Launcher/launcheritem.cpp:108
2828msgid "Pin shortcut"
2929msgstr "تثبيت الاختصار"
3030
31−#: plugins/Unity/Launcher/launcheritem.cpp:53
31+#: plugins/Unity/Launcher/launcheritem.cpp:54
3232msgid "Quit"
3333msgstr "خروج"
3434
35−#: plugins/Unity/Launcher/launcheritem.cpp:107
35+#: plugins/Unity/Launcher/launcheritem.cpp:108
3636msgid "Unpin shortcut"
3737msgstr "إزالة تثبيت الاختصار"
3838
39−#: qml/Components/DelayedLockscreen.qml:49
39+#: qml/Components/DelayedLockscreen.qml:50
4040msgid "Device Locked"
4141msgstr "الجهاز موصد"
4242
43−#: qml/Components/DelayedLockscreen.qml:64
43+#: qml/Components/DelayedLockscreen.qml:65
4444msgid "You have been locked out due to too many failed passphrase attempts."
4545msgstr ""
4646"لقد تم تأمين الجهاز ضد الفتح بسبب المحاولات العديدة الفاشلة للعبارة السرّية."
4747
48−#: qml/Components/DelayedLockscreen.qml:65
48+#: qml/Components/DelayedLockscreen.qml:66
4949msgid "You have been locked out due to too many failed passcode attempts."
5050msgstr ""
5151"لقد تم تأمين الجهاز ضد الفتح بسبب المحاولات العديدة الفاشلة للرمز السرّي."
5252
53−#: qml/Components/DelayedLockscreen.qml:74
53+#: qml/Components/DelayedLockscreen.qml:75
5454#, qt-format
5555msgid "Please wait %1 minute and then try again…"
5656msgid_plural "Please wait %1 minutes and then try again…"
@@ -81,7 +81,7 @@ msgid "Log Out"
8181msgstr "خروج"
8282
8383#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
84−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
84+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
8585#: qml/Wizard/Pages/passcode-set.qml:32
8686msgid "Cancel"
8787msgstr "إلغاء"
@@ -126,18 +126,188 @@ msgctxt "Button: Restart the system"
126126msgid "Restart"
127127msgstr "إعادة التشغيل"
128128
129−#: qml/Components/Lockscreen.qml:231
129+#: qml/Components/KeyboardShortcutsOverlay.qml:41
130+msgid "Keyboard Shortcuts"
131+msgstr ""
132+
133+#: qml/Components/KeyboardShortcutsOverlay.qml:55
134+msgid "Unity 8"
135+msgstr ""
136+
137+#: qml/Components/KeyboardShortcutsOverlay.qml:62
138+msgid "PrtScr"
139+msgstr ""
140+
141+#: qml/Components/KeyboardShortcutsOverlay.qml:67
142+msgid "Takes a screenshot."
143+msgstr ""
144+
145+#: qml/Components/KeyboardShortcutsOverlay.qml:75
146+msgid "Alt + PrtScr"
147+msgstr ""
148+
149+#: qml/Components/KeyboardShortcutsOverlay.qml:80
150+msgid "Takes a screenshot of a window."
151+msgstr ""
152+
153+#: qml/Components/KeyboardShortcutsOverlay.qml:88
154+msgid "Super + Space"
155+msgstr ""
156+
157+#: qml/Components/KeyboardShortcutsOverlay.qml:93
158+msgid "Switches to next keyboard layout."
159+msgstr ""
160+
161+#: qml/Components/KeyboardShortcutsOverlay.qml:101
162+msgid "Super + Shift + Space"
163+msgstr ""
164+
165+#: qml/Components/KeyboardShortcutsOverlay.qml:106
166+msgid "Switches to previous keyboard layout."
167+msgstr ""
168+
169+#: qml/Components/KeyboardShortcutsOverlay.qml:118
170+msgid "Launcher"
171+msgstr ""
172+
173+#: qml/Components/KeyboardShortcutsOverlay.qml:125
174+msgid "Super (Hold)"
175+msgstr ""
176+
177+#: qml/Components/KeyboardShortcutsOverlay.qml:130
178+msgid "Opens the launcher, displays shortcuts."
179+msgstr ""
180+
181+#: qml/Components/KeyboardShortcutsOverlay.qml:138
182+msgid "Alt + F1"
183+msgstr ""
184+
185+#: qml/Components/KeyboardShortcutsOverlay.qml:143
186+msgid "Opens launcher keyboard navigation mode."
187+msgstr ""
188+
189+#: qml/Components/KeyboardShortcutsOverlay.qml:151
190+msgid "Super + Tab"
191+msgstr ""
192+
193+#: qml/Components/KeyboardShortcutsOverlay.qml:156
194+msgid "Switches applications via the launcher."
195+msgstr ""
196+
197+#: qml/Components/KeyboardShortcutsOverlay.qml:164
198+msgid "Super + 0 to 9"
199+msgstr ""
200+
201+#: qml/Components/KeyboardShortcutsOverlay.qml:169
202+msgid "Same as clicking on a launcher icon."
203+msgstr ""
204+
205+#: qml/Components/KeyboardShortcutsOverlay.qml:181
206+msgid "Scopes"
207+msgstr ""
208+
209+#: qml/Components/KeyboardShortcutsOverlay.qml:188
210+msgid "Super (Tap)"
211+msgstr ""
212+
213+#: qml/Components/KeyboardShortcutsOverlay.qml:193
214+msgid "Opens the Scopes home."
215+msgstr ""
216+
217+#: qml/Components/KeyboardShortcutsOverlay.qml:209
218+msgid "Switching"
219+msgstr ""
220+
221+#: qml/Components/KeyboardShortcutsOverlay.qml:216
222+msgid "Alt + Tab"
223+msgstr ""
224+
225+#: qml/Components/KeyboardShortcutsOverlay.qml:221
226+msgid "Switches between applications."
227+msgstr ""
228+
229+#: qml/Components/KeyboardShortcutsOverlay.qml:229
230+msgid "Super + W"
231+msgstr ""
232+
233+#: qml/Components/KeyboardShortcutsOverlay.qml:234
234+msgid "Opens the desktop spread."
235+msgstr ""
236+
237+#: qml/Components/KeyboardShortcutsOverlay.qml:242
238+msgid "Cursor Left or Right"
239+msgstr ""
240+
241+#: qml/Components/KeyboardShortcutsOverlay.qml:247
242+msgid "Moves the focus."
243+msgstr ""
244+
245+#: qml/Components/KeyboardShortcutsOverlay.qml:259
246+msgid "Windows"
247+msgstr ""
248+
249+#: qml/Components/KeyboardShortcutsOverlay.qml:266
250+msgid "Ctrl + Super + D"
251+msgstr ""
252+
253+#: qml/Components/KeyboardShortcutsOverlay.qml:271
254+msgid "Minimizes all windows."
255+msgstr ""
256+
257+#: qml/Components/KeyboardShortcutsOverlay.qml:279
258+msgid "Ctrl + Super + Up"
259+msgstr ""
260+
261+#: qml/Components/KeyboardShortcutsOverlay.qml:284
262+msgid "Maximizes the current window."
263+msgstr ""
264+
265+#: qml/Components/KeyboardShortcutsOverlay.qml:292
266+msgid "Ctrl + Super + Down"
267+msgstr ""
268+
269+#: qml/Components/KeyboardShortcutsOverlay.qml:297
270+msgid "Minimizes or restores the current window."
271+msgstr ""
272+
273+#: qml/Components/KeyboardShortcutsOverlay.qml:305
274+msgid "Ctrl + Super + Left or Right"
275+msgstr ""
276+
277+#: qml/Components/KeyboardShortcutsOverlay.qml:310
278+msgid "Semi-maximizes the current window."
279+msgstr ""
280+
281+#: qml/Components/KeyboardShortcutsOverlay.qml:318
282+msgid "Alt + F4"
283+msgstr ""
284+
285+#: qml/Components/KeyboardShortcutsOverlay.qml:323
286+msgid "Closes the current window."
287+msgstr ""
288+
289+#: qml/Components/Lockscreen.qml:239
130290msgid "Return to Call"
131291msgstr "العودة إلى المكالمة"
132292
133−#: qml/Components/Lockscreen.qml:231
293+#: qml/Components/Lockscreen.qml:239
134294msgid "Emergency Call"
135295msgstr "مكالمة طوارئ"
136296
137−#: qml/Components/Lockscreen.qml:263
297+#: qml/Components/Lockscreen.qml:271
138298msgid "OK"
139299msgstr "موافق"
140300
301+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
302+#, qt-format
303+msgid "%1:%2:%3"
304+msgstr ""
305+
306+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
307+#, qt-format
308+msgid "%1:%2"
309+msgstr ""
310+
141311#: qml/Components/ModeSwitchWarningDialog.qml:32
142312msgid "Apps may have unsaved data:"
143313msgstr ""
@@ -164,26 +334,30 @@ msgstr ""
164334msgid "Close all"
165335msgstr ""
166336
167−#: qml/Dash/DashPageHeader.qml:337
337+#: qml/Components/SharingPicker.qml:54
338+msgid "Preview Share Item"
339+msgstr ""
340+
341+#: qml/Dash/DashPageHeader.qml:333
168342msgctxt "Button: Open the Ubuntu Store"
169343msgid "Store"
170344msgstr "المتجر"
171345
172−#: qml/Dash/DashPageHeader.qml:344
346+#: qml/Dash/DashPageHeader.qml:340
173347msgctxt "Button: Start a search in the current dash scope"
174348msgid "Search"
175349msgstr "بحث"
176350
177−#: qml/Dash/DashPageHeader.qml:354
351+#: qml/Dash/DashPageHeader.qml:350
178352msgctxt "Button: Show the current dash scope settings"
179353msgid "Settings"
180354msgstr "الإعدادات"
181355
182−#: qml/Dash/DashPageHeader.qml:361
356+#: qml/Dash/DashPageHeader.qml:357
183357msgid "Remove from Favorites"
184358msgstr "حذف من المفضلات"
185359
186−#: qml/Dash/DashPageHeader.qml:361
360+#: qml/Dash/DashPageHeader.qml:357
187361msgid "Add to Favorites"
188362msgstr "إضافة إلى المفضلات"
189363
@@ -195,24 +369,24 @@ msgstr ""
195369msgid "Reset"
196370msgstr ""
197371
198−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
372+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
199373msgid "Show less"
200374msgstr ""
201375
202−#: qml/Dash/GenericScopeView.qml:579
376+#: qml/Dash/GenericScopeView.qml:580
203377msgid "Show all"
204378msgstr ""
205379
206−#: qml/Dash/GenericScopeView.qml:636
380+#: qml/Dash/GenericScopeView.qml:637
207381msgctxt "Label: Hint for dash search line edit"
208382msgid "Search"
209383msgstr "بحث"
210384
211−#: qml/Dash/PageHeaderExtraPanel.qml:55
385+#: qml/Dash/PageHeaderExtraPanel.qml:56
212386msgid "Recent Searches"
213387msgstr ""
214388
215−#: qml/Dash/PageHeaderExtraPanel.qml:66
389+#: qml/Dash/PageHeaderExtraPanel.qml:67
216390msgid "Clear All"
217391msgstr ""
218392
@@ -225,22 +399,18 @@ msgid "Less..."
225399msgstr "أقل..."
226400
227401#: qml/Dash/Previews/PreviewCommentInput.qml:68
228−#: qml/Dash/Previews/PreviewRatingInput.qml:174
402+#: qml/Dash/Previews/PreviewRatingInput.qml:175
229403msgid "Send"
230404msgstr "أرسل"
231405
232−#: qml/Dash/Previews/PreviewRatingInput.qml:84
406+#: qml/Dash/Previews/PreviewRatingInput.qml:82
233407msgid "Rate this"
234408msgstr "قيّم ذلك"
235409
236−#: qml/Dash/Previews/PreviewRatingInput.qml:129
410+#: qml/Dash/Previews/PreviewRatingInput.qml:157
237411msgid "Add a review"
238412msgstr "أضف تعليق"
239413
240−#: qml/Dash/Previews/PreviewSharing.qml:66
241−msgid "Preview Share Item"
242−msgstr ""
243−
244414#: qml/Dash/PullToRefreshScopeStyle.qml:55
245415msgid "Pull to refresh…"
246416msgstr "اسحب للتحديث..."
@@ -253,49 +423,61 @@ msgstr "حرّر للتحديث..."
253423msgid "Enable location data"
254424msgstr "تفعيل بيانات الموقع"
255425
256−#: qml/Dash/ScopesList.qml:67
426+#: qml/Dash/ScopesList.qml:55
257427msgid "Manage"
258428msgstr "إدارة"
259429
260−#: qml/Dash/ScopesList.qml:113
430+#: qml/Dash/ScopesList.qml:102
261431msgid "Home"
262432msgstr "الرئيسية"
263433
264−#: qml/Dash/ScopesList.qml:114
434+#: qml/Dash/ScopesList.qml:103
265435msgid "Also installed"
266436msgstr "أيضا تم تثبيت"
267437
268−#: qml/DisabledScreenNotice.qml:104
438+#: qml/DisabledScreenNotice.qml:109
269439msgid ""
270440"Your device is now connected to an external display. Use this screen as a "
271441"touch pad to interact with the pointer."
272442msgstr ""
273443
274−#: qml/Greeter/CoverPage.qml:118
444+#: qml/Greeter/CoverPage.qml:127
275445msgid "Unlock"
276446msgstr "فك القفل"
277447
278−#: qml/Greeter/LoginList.qml:239
448+#: qml/Greeter/Greeter.qml:555
449+msgid "Try again"
450+msgstr ""
451+
452+#: qml/Greeter/LoginList.qml:63
453+msgid "Passphrase"
454+msgstr ""
455+
456+#: qml/Greeter/LoginList.qml:64
457+msgid "Passcode"
458+msgstr ""
459+
460+#: qml/Greeter/LoginList.qml:87
279461msgid "Retry"
280462msgstr "إعادة المحاولة"
281463
282−#: qml/Greeter/LoginList.qml:240
283−msgid "Tap to unlock"
284−msgstr "انقر لفك القفل"
464+#: qml/Greeter/LoginList.qml:88
465+msgid "Log In"
466+msgstr ""
285467
286−#: qml/Greeter/NarrowView.qml:54
468+#: qml/Greeter/NarrowView.qml:55
287469msgid "Sorry, incorrect passphrase."
288470msgstr "عذرًا، عبارة سرّية خاطئة."
289471
290−#: qml/Greeter/NarrowView.qml:55
472+#: qml/Greeter/NarrowView.qml:56
291473msgid "Sorry, incorrect passcode."
292474msgstr "عذرًا، رمز سرّي خاطيء."
293475
294−#: qml/Greeter/NarrowView.qml:56
476+#: qml/Greeter/NarrowView.qml:57
295477msgid "This will be your last attempt."
296478msgstr "هذه ستكون المحاولة الأخيرة لك."
297479
298−#: qml/Greeter/NarrowView.qml:58
480+#: qml/Greeter/NarrowView.qml:59
299481msgid ""
300482"If passphrase is entered incorrectly, your phone will conduct a factory "
301483"reset and all personal data will be deleted."
@@ -303,7 +485,7 @@ msgstr ""
303485"إذا تم إدخال العبارة السرية بشكل خاطئ، فسوف يتم إعادة الهاتف لحالة ضبط "
304486"المصنع وسيتم حذف كافة البيانات الشخصية."
305487
306−#: qml/Greeter/NarrowView.qml:59
488+#: qml/Greeter/NarrowView.qml:60
307489msgid ""
308490"If passcode is entered incorrectly, your phone will conduct a factory reset "
309491"and all personal data will be deleted."
@@ -311,34 +493,34 @@ msgstr ""
311493"إذا تم إدخال العبارة السرية بشكل خاطئ، فسوف يتم إعادة الهاتف لحالة ضبط "
312494"المصنع وسيتم حذف كافة البيانات الشخصية."
313495
314−#: qml/Greeter/NarrowView.qml:116
496+#: qml/Greeter/NarrowView.qml:129
315497#, qt-format
316498msgid "Enter %1"
317499msgstr "أدخِل %1"
318500
319−#: qml/Greeter/NarrowView.qml:117
501+#: qml/Greeter/NarrowView.qml:130
320502msgid "Enter passphrase"
321503msgstr "أدخِل العبارة السرية"
322504
323−#: qml/Greeter/NarrowView.qml:118
505+#: qml/Greeter/NarrowView.qml:131
324506msgid "Enter passcode"
325507msgstr "أدخِل الرمز السرّي"
326508
327−#: qml/Greeter/NarrowView.qml:119
509+#: qml/Greeter/NarrowView.qml:135
328510#, qt-format
329511msgid "Sorry, incorrect %1"
330512msgstr "نأسف، %1 غير صحيحية"
331513
332−#: qml/Greeter/NarrowView.qml:120
514+#: qml/Greeter/NarrowView.qml:136
333515msgid "Sorry, incorrect passphrase"
334516msgstr "نأسف، عبارة السّر غير صحيحية"
335517
336−#: qml/Greeter/NarrowView.qml:121
518+#: qml/Greeter/NarrowView.qml:137
337519msgctxt "passphrase"
338520msgid "Please re-enter"
339521msgstr "برجاء إعادة إدخالها"
340522
341−#: qml/Greeter/NarrowView.qml:122
523+#: qml/Greeter/NarrowView.qml:138
342524msgid "Sorry, incorrect passcode"
343525msgstr "نأسف، الرمز السري غير صحيح"
344526
@@ -425,18 +607,18 @@ msgstr "انتهى"
425607msgid "Failed, tap to retry"
426608msgstr "فشل، انقل لإعادة المحاولة"
427609
428−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
429−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
610+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
611+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
430612msgctxt "Button: Send a reply message"
431613msgid "Send"
432614msgstr ""
433615
434−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
616+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
435617msgctxt "Label: Hint in message indicator line edit"
436618msgid "Reply"
437619msgstr "رد"
438620
439−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
621+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
440622msgctxt "Button: Call back on phone"
441623msgid "Call back"
442624msgstr ""
@@ -445,32 +627,12 @@ msgstr ""
445627msgid "Drag using 3 fingers any application from one window to the other"
446628msgstr ""
447629
448−#: qml/Tutorial/TutorialBottom.qml:78
449−msgid "Swipe up to add a contact"
450−msgstr ""
451−
452−#: qml/Tutorial/TutorialBottom.qml:80
453−msgid "Swipe up for favorite calculations"
454−msgstr ""
455−
456−#: qml/Tutorial/TutorialBottom.qml:82
457−msgid "Swipe up for recent calls"
458−msgstr ""
459−
460−#: qml/Tutorial/TutorialBottom.qml:84
461−msgid "Swipe up to create a message"
462−msgstr ""
463−
464−#: qml/Tutorial/TutorialBottom.qml:85
465−msgid "Swipe up to manage the app"
466−msgstr ""
467−
468−#: qml/Tutorial/TutorialLeftLong.qml:47
630+#: qml/Tutorial/TutorialLeftLong.qml:49
469631msgid "Long swipe from the left edge to open the Today scope"
470632msgstr ""
471633
472634#: qml/Tutorial/TutorialLeft.qml:47
473−msgid "Swipe from the left edge to open the launcher"
635+msgid "Short swipe from the left edge to open the launcher"
474636msgstr ""
475637
476638#: qml/Tutorial/TutorialRight.qml:55
@@ -478,15 +640,11 @@ msgid "Push your mouse against the right edge to view your open apps"
478640msgstr ""
479641
480642#: qml/Tutorial/TutorialRight.qml:56
481−msgid "Short or long swipe from the right edge to view your open apps"
643+msgid "Swipe from the right edge to view your open apps"
482644msgstr ""
483645
484646#: qml/Tutorial/TutorialTop.qml:53
485−msgid "Swipe from the top right edge to open the notification bar"
486−msgstr ""
487−
488−#: qml/Tutorial/TutorialTop.qml:54
489−msgid "Swipe from the top edge to open the notification bar"
647+msgid "Swipe from the top edge to access notifications and quick settings"
490648msgstr ""
491649
492650#: qml/Wizard/Page.qml:54
@@ -498,11 +656,11 @@ msgstr "عودة"
498656msgid "Language"
499657msgstr ""
500658
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
659+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
660+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
503661#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
504662#: qml/Wizard/Pages/75-report-check.qml:84
505−#: qml/Wizard/Pages/passcode-desktop.qml:124
663+#: qml/Wizard/Pages/passcode-desktop.qml:141
506664#: qml/Wizard/Pages/password-set.qml:141
507665msgid "Next"
508666msgstr ""
@@ -564,7 +722,7 @@ msgstr ""
564722msgid "Time Zone"
565723msgstr ""
566724
567−#: qml/Wizard/Pages/50-timezone.qml:178
725+#: qml/Wizard/Pages/50-timezone.qml:181
568726msgid "Enter your city"
569727msgstr ""
570728
@@ -654,7 +812,7 @@ msgid "Service Terms"
654812msgstr ""
655813
656814#: qml/Wizard/Pages/passcode-confirm.qml:43
657−#: qml/Wizard/Pages/passcode-desktop.qml:80
815+#: qml/Wizard/Pages/passcode-desktop.qml:96
658816msgid "Confirm passcode"
659817msgstr "تأكيد الرمز السري"
660818
@@ -671,24 +829,24 @@ msgstr ""
671829msgid "Lock Screen Passcode"
672830msgstr ""
673831
674−#: qml/Wizard/Pages/passcode-desktop.qml:56
832+#: qml/Wizard/Pages/passcode-desktop.qml:60
675833msgid "Enter 4 numbers to setup your passcode"
676834msgstr ""
677835
678−#: qml/Wizard/Pages/passcode-desktop.qml:65
836+#: qml/Wizard/Pages/passcode-desktop.qml:76
679837#: qml/Wizard/Pages/passcode-set.qml:54
680838msgid "Choose passcode"
681839msgstr ""
682840
683−#: qml/Wizard/Pages/passcode-desktop.qml:105
841+#: qml/Wizard/Pages/passcode-desktop.qml:126
684842msgid "Passcode too short"
685843msgstr ""
686844
687−#: qml/Wizard/Pages/passcode-desktop.qml:107
845+#: qml/Wizard/Pages/passcode-desktop.qml:128
688846msgid "Passcodes match"
689847msgstr ""
690848
691−#: qml/Wizard/Pages/passcode-desktop.qml:109
849+#: qml/Wizard/Pages/passcode-desktop.qml:130
692850msgid "Passcodes do not match"
693851msgstr ""
694852
@@ -737,26 +895,30 @@ msgid "To proceed with no SIM tap Skip."
737895msgstr ""
738896
739897#: qml/Wizard/PasswordMeter.qml:87
740−msgid "Passwords match"
898+msgid "Password too short"
741899msgstr ""
742900
743901#: qml/Wizard/PasswordMeter.qml:89
902+msgid "Passwords match"
903+msgstr ""
904+
905+#: qml/Wizard/PasswordMeter.qml:91
744906msgid "Passwords do not match"
745907msgstr ""
746908
747−#: qml/Wizard/PasswordMeter.qml:93
909+#: qml/Wizard/PasswordMeter.qml:95
748910msgid "Strong password"
749911msgstr ""
750912
751−#: qml/Wizard/PasswordMeter.qml:95
913+#: qml/Wizard/PasswordMeter.qml:97
752914msgid "Fair password"
753915msgstr ""
754916
755−#: qml/Wizard/PasswordMeter.qml:97
917+#: qml/Wizard/PasswordMeter.qml:99
756918msgid "Weak password"
757919msgstr ""
758920
759−#: qml/Wizard/PasswordMeter.qml:99
921+#: qml/Wizard/PasswordMeter.qml:101
760922msgid "Very weak password"
761923msgstr ""
762924
@@ -867,6 +1029,9 @@ msgstr ""
8671029#~ msgid "See all"
8681030#~ msgstr "عرض الكل"
8691031
1032+#~ msgid "Tap to unlock"
1033+#~ msgstr "انقر لفك القفل"
1034+
8701035#~ msgid "Please re-enter"
8711036#~ msgstr "برجاء إعادة إدخالها"
8721037
po/ast.po+296−104
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+0000\n"
1111"PO-Revision-Date: 2016-05-16 14:07+0000\n"
1212"Last-Translator: Xuacu Saturio <xuacusk8@gmail.com>\n"
1313"Language-Team: Asturian <ast@li.org>\n"
@@ -15,40 +15,40 @@ 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-05-19 05:49+0000\n"
19−"X-Generator: Launchpad (build 18025)\n"
18+"X-Launchpad-Export-Date: 2016-07-14 06:00+0000\n"
19+"X-Generator: Launchpad (build 18115)\n"
2020
21−#: plugins/IntegratedLightDM/Greeter.cpp:112
21+#: plugins/LightDM/Greeter.cpp:123
2222msgid "Password: "
2323msgstr "Contraseña: "
2424
25−#: plugins/Unity/Launcher/launcheritem.cpp:48
26−#: plugins/Unity/Launcher/launcheritem.cpp:107
25+#: plugins/Unity/Launcher/launcheritem.cpp:49
26+#: plugins/Unity/Launcher/launcheritem.cpp:108
2727msgid "Pin shortcut"
2828msgstr "Anclar atayu"
2929
30−#: plugins/Unity/Launcher/launcheritem.cpp:53
30+#: plugins/Unity/Launcher/launcheritem.cpp:54
3131msgid "Quit"
3232msgstr "Colar"
3333
34−#: plugins/Unity/Launcher/launcheritem.cpp:107
34+#: plugins/Unity/Launcher/launcheritem.cpp:108
3535msgid "Unpin shortcut"
3636msgstr "Desanclar atayu"
3737
38−#: qml/Components/DelayedLockscreen.qml:49
38+#: qml/Components/DelayedLockscreen.qml:50
3939msgid "Device Locked"
4040msgstr "Preséu bloquiáu"
4141
42−#: qml/Components/DelayedLockscreen.qml:64
42+#: qml/Components/DelayedLockscreen.qml:65
4343msgid "You have been locked out due to too many failed passphrase attempts."
4444msgstr "Quedasti bloquiáu polos escesivos intentos fallíos de fras de pasu."
4545
46−#: qml/Components/DelayedLockscreen.qml:65
46+#: qml/Components/DelayedLockscreen.qml:66
4747msgid "You have been locked out due to too many failed passcode attempts."
4848msgstr ""
4949"Quedasti bloquiáu polos escesivos intentos fallíos de códigu de pasu."
5050
51−#: qml/Components/DelayedLockscreen.qml:74
51+#: qml/Components/DelayedLockscreen.qml:75
5252#, qt-format
5353msgid "Please wait %1 minute and then try again…"
5454msgid_plural "Please wait %1 minutes and then try again…"
@@ -75,7 +75,7 @@ msgid "Log Out"
7575msgstr "Zarrar sesión"
7676
7777#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
78−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
78+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
7979#: qml/Wizard/Pages/passcode-set.qml:32
8080msgid "Cancel"
8181msgstr "Encaboxar"
@@ -120,18 +120,188 @@ msgctxt "Button: Restart the system"
120120msgid "Restart"
121121msgstr "Reaniciar"
122122
123−#: qml/Components/Lockscreen.qml:231
123+#: qml/Components/KeyboardShortcutsOverlay.qml:41
124+msgid "Keyboard Shortcuts"
125+msgstr ""
126+
127+#: qml/Components/KeyboardShortcutsOverlay.qml:55
128+msgid "Unity 8"
129+msgstr ""
130+
131+#: qml/Components/KeyboardShortcutsOverlay.qml:62
132+msgid "PrtScr"
133+msgstr ""
134+
135+#: qml/Components/KeyboardShortcutsOverlay.qml:67
136+msgid "Takes a screenshot."
137+msgstr ""
138+
139+#: qml/Components/KeyboardShortcutsOverlay.qml:75
140+msgid "Alt + PrtScr"
141+msgstr ""
142+
143+#: qml/Components/KeyboardShortcutsOverlay.qml:80
144+msgid "Takes a screenshot of a window."
145+msgstr ""
146+
147+#: qml/Components/KeyboardShortcutsOverlay.qml:88
148+msgid "Super + Space"
149+msgstr ""
150+
151+#: qml/Components/KeyboardShortcutsOverlay.qml:93
152+msgid "Switches to next keyboard layout."
153+msgstr ""
154+
155+#: qml/Components/KeyboardShortcutsOverlay.qml:101
156+msgid "Super + Shift + Space"
157+msgstr ""
158+
159+#: qml/Components/KeyboardShortcutsOverlay.qml:106
160+msgid "Switches to previous keyboard layout."
161+msgstr ""
162+
163+#: qml/Components/KeyboardShortcutsOverlay.qml:118
164+msgid "Launcher"
165+msgstr ""
166+
167+#: qml/Components/KeyboardShortcutsOverlay.qml:125
168+msgid "Super (Hold)"
169+msgstr ""
170+
171+#: qml/Components/KeyboardShortcutsOverlay.qml:130
172+msgid "Opens the launcher, displays shortcuts."
173+msgstr ""
174+
175+#: qml/Components/KeyboardShortcutsOverlay.qml:138
176+msgid "Alt + F1"
177+msgstr ""
178+
179+#: qml/Components/KeyboardShortcutsOverlay.qml:143
180+msgid "Opens launcher keyboard navigation mode."
181+msgstr ""
182+
183+#: qml/Components/KeyboardShortcutsOverlay.qml:151
184+msgid "Super + Tab"
185+msgstr ""
186+
187+#: qml/Components/KeyboardShortcutsOverlay.qml:156
188+msgid "Switches applications via the launcher."
189+msgstr ""
190+
191+#: qml/Components/KeyboardShortcutsOverlay.qml:164
192+msgid "Super + 0 to 9"
193+msgstr ""
194+
195+#: qml/Components/KeyboardShortcutsOverlay.qml:169
196+msgid "Same as clicking on a launcher icon."
197+msgstr ""
198+
199+#: qml/Components/KeyboardShortcutsOverlay.qml:181
200+msgid "Scopes"
201+msgstr ""
202+
203+#: qml/Components/KeyboardShortcutsOverlay.qml:188
204+msgid "Super (Tap)"
205+msgstr ""
206+
207+#: qml/Components/KeyboardShortcutsOverlay.qml:193
208+msgid "Opens the Scopes home."
209+msgstr ""
210+
211+#: qml/Components/KeyboardShortcutsOverlay.qml:209
212+msgid "Switching"
213+msgstr ""
214+
215+#: qml/Components/KeyboardShortcutsOverlay.qml:216
216+msgid "Alt + Tab"
217+msgstr ""
218+
219+#: qml/Components/KeyboardShortcutsOverlay.qml:221
220+msgid "Switches between applications."
221+msgstr ""
222+
223+#: qml/Components/KeyboardShortcutsOverlay.qml:229
224+msgid "Super + W"
225+msgstr ""
226+
227+#: qml/Components/KeyboardShortcutsOverlay.qml:234
228+msgid "Opens the desktop spread."
229+msgstr ""
230+
231+#: qml/Components/KeyboardShortcutsOverlay.qml:242
232+msgid "Cursor Left or Right"
233+msgstr ""
234+
235+#: qml/Components/KeyboardShortcutsOverlay.qml:247
236+msgid "Moves the focus."
237+msgstr ""
238+
239+#: qml/Components/KeyboardShortcutsOverlay.qml:259
240+msgid "Windows"
241+msgstr ""
242+
243+#: qml/Components/KeyboardShortcutsOverlay.qml:266
244+msgid "Ctrl + Super + D"
245+msgstr ""
246+
247+#: qml/Components/KeyboardShortcutsOverlay.qml:271
248+msgid "Minimizes all windows."
249+msgstr ""
250+
251+#: qml/Components/KeyboardShortcutsOverlay.qml:279
252+msgid "Ctrl + Super + Up"
253+msgstr ""
254+
255+#: qml/Components/KeyboardShortcutsOverlay.qml:284
256+msgid "Maximizes the current window."
257+msgstr ""
258+
259+#: qml/Components/KeyboardShortcutsOverlay.qml:292
260+msgid "Ctrl + Super + Down"
261+msgstr ""
262+
263+#: qml/Components/KeyboardShortcutsOverlay.qml:297
264+msgid "Minimizes or restores the current window."
265+msgstr ""
266+
267+#: qml/Components/KeyboardShortcutsOverlay.qml:305
268+msgid "Ctrl + Super + Left or Right"
269+msgstr ""
270+
271+#: qml/Components/KeyboardShortcutsOverlay.qml:310
272+msgid "Semi-maximizes the current window."
273+msgstr ""
274+
275+#: qml/Components/KeyboardShortcutsOverlay.qml:318
276+msgid "Alt + F4"
277+msgstr ""
278+
279+#: qml/Components/KeyboardShortcutsOverlay.qml:323
280+msgid "Closes the current window."
281+msgstr ""
282+
283+#: qml/Components/Lockscreen.qml:239
124284msgid "Return to Call"
125285msgstr "Tornar a la llamada"
126286
127−#: qml/Components/Lockscreen.qml:231
287+#: qml/Components/Lockscreen.qml:239
128288msgid "Emergency Call"
129289msgstr "Llamada d'emerxencia"
130290
131−#: qml/Components/Lockscreen.qml:263
291+#: qml/Components/Lockscreen.qml:271
132292msgid "OK"
133293msgstr "Aceutar"
134294
295+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
296+#, qt-format
297+msgid "%1:%2:%3"
298+msgstr ""
299+
300+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
301+#, qt-format
302+msgid "%1:%2"
303+msgstr ""
304+
135305#: qml/Components/ModeSwitchWarningDialog.qml:32
136306msgid "Apps may have unsaved data:"
137307msgstr "Apps que pueden tener datos sin guardar:"
@@ -158,26 +328,30 @@ msgstr "Reconeutar agora."
158328msgid "Close all"
159329msgstr "Zarrar too"
160330
161−#: qml/Dash/DashPageHeader.qml:337
331+#: qml/Components/SharingPicker.qml:54
332+msgid "Preview Share Item"
333+msgstr "Entever l'elementu compartíu"
334+
335+#: qml/Dash/DashPageHeader.qml:333
162336msgctxt "Button: Open the Ubuntu Store"
163337msgid "Store"
164338msgstr "Tienda"
165339
166−#: qml/Dash/DashPageHeader.qml:344
340+#: qml/Dash/DashPageHeader.qml:340
167341msgctxt "Button: Start a search in the current dash scope"
168342msgid "Search"
169343msgstr "Guetar"
170344
171−#: qml/Dash/DashPageHeader.qml:354
345+#: qml/Dash/DashPageHeader.qml:350
172346msgctxt "Button: Show the current dash scope settings"
173347msgid "Settings"
174348msgstr "Axustes"
175349
176−#: qml/Dash/DashPageHeader.qml:361
350+#: qml/Dash/DashPageHeader.qml:357
177351msgid "Remove from Favorites"
178352msgstr "Desaniciar de favoritos"
179353
180−#: qml/Dash/DashPageHeader.qml:361
354+#: qml/Dash/DashPageHeader.qml:357
181355msgid "Add to Favorites"
182356msgstr "Amestar a favoritos"
183357
@@ -189,24 +363,24 @@ msgstr "Refina los resultaos"
189363msgid "Reset"
190364msgstr "Reafitar"
191365
192−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
366+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
193367msgid "Show less"
194368msgstr "Ver menos"
195369
196−#: qml/Dash/GenericScopeView.qml:579
370+#: qml/Dash/GenericScopeView.qml:580
197371msgid "Show all"
198372msgstr "Ver too"
199373
200−#: qml/Dash/GenericScopeView.qml:636
374+#: qml/Dash/GenericScopeView.qml:637
201375msgctxt "Label: Hint for dash search line edit"
202376msgid "Search"
203377msgstr "Guetar"
204378
205−#: qml/Dash/PageHeaderExtraPanel.qml:55
379+#: qml/Dash/PageHeaderExtraPanel.qml:56
206380msgid "Recent Searches"
207381msgstr "Guetes recién"
208382
209−#: qml/Dash/PageHeaderExtraPanel.qml:66
383+#: qml/Dash/PageHeaderExtraPanel.qml:67
210384msgid "Clear All"
211385msgstr "Llimpiar too"
212386
@@ -219,22 +393,18 @@ msgid "Less..."
219393msgstr "Menos…"
220394
221395#: qml/Dash/Previews/PreviewCommentInput.qml:68
222−#: qml/Dash/Previews/PreviewRatingInput.qml:174
396+#: qml/Dash/Previews/PreviewRatingInput.qml:175
223397msgid "Send"
224398msgstr "Unviar"
225399
226−#: qml/Dash/Previews/PreviewRatingInput.qml:84
400+#: qml/Dash/Previews/PreviewRatingInput.qml:82
227401msgid "Rate this"
228402msgstr "Valorar esto"
229403
230−#: qml/Dash/Previews/PreviewRatingInput.qml:129
404+#: qml/Dash/Previews/PreviewRatingInput.qml:157
231405msgid "Add a review"
232406msgstr "Amestar una reseña"
233407
234−#: qml/Dash/Previews/PreviewSharing.qml:66
235−msgid "Preview Share Item"
236−msgstr "Entever l'elementu compartíu"
237−
238408#: qml/Dash/PullToRefreshScopeStyle.qml:55
239409msgid "Pull to refresh…"
240410msgstr "Tira p'anovar..."
@@ -247,19 +417,19 @@ msgstr "Sueltar p'anovar..."
247417msgid "Enable location data"
248418msgstr "Habilitar datos d'allugamientu"
249419
250−#: qml/Dash/ScopesList.qml:67
420+#: qml/Dash/ScopesList.qml:55
251421msgid "Manage"
252422msgstr "Xestionar"
253423
254−#: qml/Dash/ScopesList.qml:113
424+#: qml/Dash/ScopesList.qml:102
255425msgid "Home"
256426msgstr "Aniciu"
257427
258−#: qml/Dash/ScopesList.qml:114
428+#: qml/Dash/ScopesList.qml:103
259429msgid "Also installed"
260430msgstr "Tamién instalaos"
261431
262−#: qml/DisabledScreenNotice.qml:104
432+#: qml/DisabledScreenNotice.qml:109
263433msgid ""
264434"Your device is now connected to an external display. Use this screen as a "
265435"touch pad to interact with the pointer."
@@ -267,31 +437,43 @@ msgstr ""
267437"El preséu agora ta coneutáu con una pantalla esterna. Usa esta pantalla como "
268438"touch pad pa interactuar col punteru."
269439
270−#: qml/Greeter/CoverPage.qml:118
440+#: qml/Greeter/CoverPage.qml:127
271441msgid "Unlock"
272442msgstr "Desbloquiar"
273443
274−#: qml/Greeter/LoginList.qml:239
444+#: qml/Greeter/Greeter.qml:555
445+msgid "Try again"
446+msgstr ""
447+
448+#: qml/Greeter/LoginList.qml:63
449+msgid "Passphrase"
450+msgstr ""
451+
452+#: qml/Greeter/LoginList.qml:64
453+msgid "Passcode"
454+msgstr ""
455+
456+#: qml/Greeter/LoginList.qml:87
275457msgid "Retry"
276458msgstr "Reintentar"
277459
278−#: qml/Greeter/LoginList.qml:240
279−msgid "Tap to unlock"
280−msgstr "Calca pa desbloquiar"
460+#: qml/Greeter/LoginList.qml:88
461+msgid "Log In"
462+msgstr ""
281463
282−#: qml/Greeter/NarrowView.qml:54
464+#: qml/Greeter/NarrowView.qml:55
283465msgid "Sorry, incorrect passphrase."
284466msgstr "Perdón, fras de pasu incorreuta"
285467
286−#: qml/Greeter/NarrowView.qml:55
468+#: qml/Greeter/NarrowView.qml:56
287469msgid "Sorry, incorrect passcode."
288470msgstr "Perdón, códigu de pasu incorreutu."
289471
290−#: qml/Greeter/NarrowView.qml:56
472+#: qml/Greeter/NarrowView.qml:57
291473msgid "This will be your last attempt."
292474msgstr "Esti sedra'l to caberu intentu"
293475
294−#: qml/Greeter/NarrowView.qml:58
476+#: qml/Greeter/NarrowView.qml:59
295477msgid ""
296478"If passphrase is entered incorrectly, your phone will conduct a factory "
297479"reset and all personal data will be deleted."
@@ -299,7 +481,7 @@ msgstr ""
299481"Si s'inxerta la fras de pasu incorreutamente, el to teléfonu va reafitase y "
300482"van desaniciase tolos datos personales."
301483
302−#: qml/Greeter/NarrowView.qml:59
484+#: qml/Greeter/NarrowView.qml:60
303485msgid ""
304486"If passcode is entered incorrectly, your phone will conduct a factory reset "
305487"and all personal data will be deleted."
@@ -307,34 +489,34 @@ msgstr ""
307489"Si s'inxerta'l códigu de pasu incorreutamente, el to teléfonu va reafitase y "
308490"van desaniciase tolos datos personales."
309491
310−#: qml/Greeter/NarrowView.qml:116
492+#: qml/Greeter/NarrowView.qml:129
311493#, qt-format
312494msgid "Enter %1"
313495msgstr "Introduz %1"
314496
315−#: qml/Greeter/NarrowView.qml:117
497+#: qml/Greeter/NarrowView.qml:130
316498msgid "Enter passphrase"
317499msgstr "Introduz la fras de pasu"
318500
319−#: qml/Greeter/NarrowView.qml:118
501+#: qml/Greeter/NarrowView.qml:131
320502msgid "Enter passcode"
321503msgstr "Introduz el códigu de pasu"
322504
323−#: qml/Greeter/NarrowView.qml:119
505+#: qml/Greeter/NarrowView.qml:135
324506#, qt-format
325507msgid "Sorry, incorrect %1"
326508msgstr "Sentímoslo, %1 incorreutu"
327509
328−#: qml/Greeter/NarrowView.qml:120
510+#: qml/Greeter/NarrowView.qml:136
329511msgid "Sorry, incorrect passphrase"
330512msgstr "Sentímoslo, contraseña incorreuta"
331513
332−#: qml/Greeter/NarrowView.qml:121
514+#: qml/Greeter/NarrowView.qml:137
333515msgctxt "passphrase"
334516msgid "Please re-enter"
335517msgstr "Vuelve a escribila"
336518
337−#: qml/Greeter/NarrowView.qml:122
519+#: qml/Greeter/NarrowView.qml:138
338520msgid "Sorry, incorrect passcode"
339521msgstr "Sentímoslo, códigu de pasu incorreutu"
340522
@@ -409,18 +591,18 @@ msgstr "Finó"
409591msgid "Failed, tap to retry"
410592msgstr "Falló, toca pa reintentar"
411593
412−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
413−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
594+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
595+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
414596msgctxt "Button: Send a reply message"
415597msgid "Send"
416598msgstr "Unviar"
417599
418−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
600+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
419601msgctxt "Label: Hint in message indicator line edit"
420602msgid "Reply"
421603msgstr "Responder"
422604
423−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
605+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
424606msgctxt "Button: Call back on phone"
425607msgid "Call back"
426608msgstr "Devolver llamada"
@@ -429,51 +611,25 @@ msgstr "Devolver llamada"
429611msgid "Drag using 3 fingers any application from one window to the other"
430612msgstr "Abasnar cualquier aplicación d'una ventana a otra usando 3 deos"
431613
432−#: qml/Tutorial/TutorialBottom.qml:78
433−msgid "Swipe up to add a contact"
434−msgstr "Eslizar p'amestar un contactu"
435−
436−#: qml/Tutorial/TutorialBottom.qml:80
437−msgid "Swipe up for favorite calculations"
438−msgstr "Eslizar pa los cálculos favoritos"
439−
440−#: qml/Tutorial/TutorialBottom.qml:82
441−msgid "Swipe up for recent calls"
442−msgstr "Eslizar pa llamaes recién"
443−
444−#: qml/Tutorial/TutorialBottom.qml:84
445−msgid "Swipe up to create a message"
446−msgstr "Eslizar pa crear un mensaxe"
447−
448−#: qml/Tutorial/TutorialBottom.qml:85
449−msgid "Swipe up to manage the app"
450−msgstr "Eslizar p'alministrar la app"
451−
452−#: qml/Tutorial/TutorialLeftLong.qml:47
614+#: qml/Tutorial/TutorialLeftLong.qml:49
453615msgid "Long swipe from the left edge to open the Today scope"
454616msgstr "Eslizamientu llargu dende'l berbesu izquierdu pa ver el scope Güei"
455617
456618#: qml/Tutorial/TutorialLeft.qml:47
457−msgid "Swipe from the left edge to open the launcher"
458−msgstr "Eslizar dende'l berbesu izquierdu p'abrir el llanzador"
619+msgid "Short swipe from the left edge to open the launcher"
620+msgstr ""
459621
460622#: qml/Tutorial/TutorialRight.qml:55
461623msgid "Push your mouse against the right edge to view your open apps"
462624msgstr "Emburria'l mur escontra'l berbesu drechu pa ver les apps abiertes"
463625
464626#: qml/Tutorial/TutorialRight.qml:56
465−msgid "Short or long swipe from the right edge to view your open apps"
627+msgid "Swipe from the right edge to view your open apps"
466628msgstr ""
467−"Eslizamientu curtiu o llargu dende'l berbesu drechu pa ver les apps abiertes"
468629
469630#: qml/Tutorial/TutorialTop.qml:53
470−msgid "Swipe from the top right edge to open the notification bar"
631+msgid "Swipe from the top edge to access notifications and quick settings"
471632msgstr ""
472−"Esliza dende'l berbesu superior drechu p'abrir la barra de notificaciones"
473−
474−#: qml/Tutorial/TutorialTop.qml:54
475−msgid "Swipe from the top edge to open the notification bar"
476−msgstr "Esliza dende'l berbesu superior p'abrir la barra de notificaciones"
477633
478634#: qml/Wizard/Page.qml:54
479635msgctxt "Button: Go back one page in the Wizard"
@@ -484,11 +640,11 @@ msgstr "Atrás"
484640msgid "Language"
485641msgstr "Llingua"
486642
487−#: qml/Wizard/Pages/10-welcome.qml:156 qml/Wizard/Pages/30-wifi.qml:206
488−#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:267
643+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
644+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
489645#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
490646#: qml/Wizard/Pages/75-report-check.qml:84
491−#: qml/Wizard/Pages/passcode-desktop.qml:124
647+#: qml/Wizard/Pages/passcode-desktop.qml:141
492648#: qml/Wizard/Pages/password-set.qml:141
493649msgid "Next"
494650msgstr "Siguiente"
@@ -552,7 +708,7 @@ msgstr "Pues camudalo sero na Configuración del Sistema."
552708msgid "Time Zone"
553709msgstr "Estaya horaria"
554710
555−#: qml/Wizard/Pages/50-timezone.qml:178
711+#: qml/Wizard/Pages/50-timezone.qml:181
556712msgid "Enter your city"
557713msgstr "Escribe la ciudá"
558714
@@ -644,7 +800,7 @@ msgid "Service Terms"
644800msgstr ""
645801
646802#: qml/Wizard/Pages/passcode-confirm.qml:43
647−#: qml/Wizard/Pages/passcode-desktop.qml:80
803+#: qml/Wizard/Pages/passcode-desktop.qml:96
648804msgid "Confirm passcode"
649805msgstr "Confirmar códigu de pasu"
650806
@@ -661,24 +817,24 @@ msgstr ""
661817msgid "Lock Screen Passcode"
662818msgstr ""
663819
664−#: qml/Wizard/Pages/passcode-desktop.qml:56
820+#: qml/Wizard/Pages/passcode-desktop.qml:60
665821msgid "Enter 4 numbers to setup your passcode"
666822msgstr ""
667823
668−#: qml/Wizard/Pages/passcode-desktop.qml:65
824+#: qml/Wizard/Pages/passcode-desktop.qml:76
669825#: qml/Wizard/Pages/passcode-set.qml:54
670826msgid "Choose passcode"
671827msgstr ""
672828
673−#: qml/Wizard/Pages/passcode-desktop.qml:105
829+#: qml/Wizard/Pages/passcode-desktop.qml:126
674830msgid "Passcode too short"
675831msgstr ""
676832
677−#: qml/Wizard/Pages/passcode-desktop.qml:107
833+#: qml/Wizard/Pages/passcode-desktop.qml:128
678834msgid "Passcodes match"
679835msgstr ""
680836
681−#: qml/Wizard/Pages/passcode-desktop.qml:109
837+#: qml/Wizard/Pages/passcode-desktop.qml:130
682838msgid "Passcodes do not match"
683839msgstr ""
684840
@@ -727,26 +883,30 @@ msgid "To proceed with no SIM tap Skip."
727883msgstr ""
728884
729885#: qml/Wizard/PasswordMeter.qml:87
730−msgid "Passwords match"
886+msgid "Password too short"
731887msgstr ""
732888
733889#: qml/Wizard/PasswordMeter.qml:89
890+msgid "Passwords match"
891+msgstr ""
892+
893+#: qml/Wizard/PasswordMeter.qml:91
734894msgid "Passwords do not match"
735895msgstr ""
736896
737−#: qml/Wizard/PasswordMeter.qml:93
897+#: qml/Wizard/PasswordMeter.qml:95
738898msgid "Strong password"
739899msgstr "Contraseña fuerte"
740900
741−#: qml/Wizard/PasswordMeter.qml:95
901+#: qml/Wizard/PasswordMeter.qml:97
742902msgid "Fair password"
743903msgstr "Contraseña aceutable"
744904
745−#: qml/Wizard/PasswordMeter.qml:97
905+#: qml/Wizard/PasswordMeter.qml:99
746906msgid "Weak password"
747907msgstr "Contraseña feble"
748908
749−#: qml/Wizard/PasswordMeter.qml:99
909+#: qml/Wizard/PasswordMeter.qml:101
750910msgid "Very weak password"
751911msgstr "Contraseña feble enforma"
752912
@@ -914,6 +1074,9 @@ msgstr "Contraseña feble enforma"
9141074#~ msgid "Reboot"
9151075#~ msgstr "Reaniciar"
9161076
1077+#~ msgid "Tap to unlock"
1078+#~ msgstr "Calca pa desbloquiar"
1079+
9171080#~ msgid "These are the shortcuts to favorite apps"
9181081#~ msgstr "Estos son los atayos a les aplicaciones favorites"
9191082
@@ -1070,3 +1233,32 @@ msgstr "Contraseña feble enforma"
10701233
10711234#~ msgid "Call back"
10721235#~ msgstr "Devolver llamada"
1236+
1237+#~ msgid "Swipe up for recent calls"
1238+#~ msgstr "Eslizar pa llamaes recién"
1239+
1240+#~ msgid "Swipe up for favorite calculations"
1241+#~ msgstr "Eslizar pa los cálculos favoritos"
1242+
1243+#~ msgid "Swipe up to add a contact"
1244+#~ msgstr "Eslizar p'amestar un contactu"
1245+
1246+#~ msgid "Swipe from the left edge to open the launcher"
1247+#~ msgstr "Eslizar dende'l berbesu izquierdu p'abrir el llanzador"
1248+
1249+#~ msgid "Swipe from the top right edge to open the notification bar"
1250+#~ msgstr ""
1251+#~ "Esliza dende'l berbesu superior drechu p'abrir la barra de notificaciones"
1252+
1253+#~ msgid "Swipe from the top edge to open the notification bar"
1254+#~ msgstr "Esliza dende'l berbesu superior p'abrir la barra de notificaciones"
1255+
1256+#~ msgid "Short or long swipe from the right edge to view your open apps"
1257+#~ msgstr ""
1258+#~ "Eslizamientu curtiu o llargu dende'l berbesu drechu pa ver les apps abiertes"
1259+
1260+#~ msgid "Swipe up to manage the app"
1261+#~ msgstr "Eslizar p'alministrar la app"
1262+
1263+#~ msgid "Swipe up to create a message"
1264+#~ msgstr "Eslizar pa crear un mensaxe"
po/az.po+262−100
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+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,39 +15,39 @@ 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-05-19 05:49+0000\n"
19−"X-Generator: Launchpad (build 18025)\n"
18+"X-Launchpad-Export-Date: 2016-07-14 06:00+0000\n"
19+"X-Generator: Launchpad (build 18115)\n"
2020
21−#: plugins/IntegratedLightDM/Greeter.cpp:112
21+#: plugins/LightDM/Greeter.cpp:123
2222msgid "Password: "
2323msgstr "Şifrә: "
2424
25−#: plugins/Unity/Launcher/launcheritem.cpp:48
26−#: plugins/Unity/Launcher/launcheritem.cpp:107
25+#: plugins/Unity/Launcher/launcheritem.cpp:49
26+#: plugins/Unity/Launcher/launcheritem.cpp:108
2727msgid "Pin shortcut"
2828msgstr "Pin qısayolu"
2929
30−#: plugins/Unity/Launcher/launcheritem.cpp:53
30+#: plugins/Unity/Launcher/launcheritem.cpp:54
3131msgid "Quit"
3232msgstr ""
3333
34−#: plugins/Unity/Launcher/launcheritem.cpp:107
34+#: plugins/Unity/Launcher/launcheritem.cpp:108
3535msgid "Unpin shortcut"
3636msgstr "Açma qısayolu"
3737
38−#: qml/Components/DelayedLockscreen.qml:49
38+#: qml/Components/DelayedLockscreen.qml:50
3939msgid "Device Locked"
4040msgstr ""
4141
42−#: qml/Components/DelayedLockscreen.qml:64
42+#: qml/Components/DelayedLockscreen.qml:65
4343msgid "You have been locked out due to too many failed passphrase attempts."
4444msgstr ""
4545
46−#: qml/Components/DelayedLockscreen.qml:65
46+#: qml/Components/DelayedLockscreen.qml:66
4747msgid "You have been locked out due to too many failed passcode attempts."
4848msgstr ""
4949
50−#: qml/Components/DelayedLockscreen.qml:74
50+#: qml/Components/DelayedLockscreen.qml:75
5151#, qt-format
5252msgid "Please wait %1 minute and then try again…"
5353msgid_plural "Please wait %1 minutes and then try again…"
@@ -74,7 +74,7 @@ msgid "Log Out"
7474msgstr ""
7575
7676#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
77−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
77+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
7878#: qml/Wizard/Pages/passcode-set.qml:32
7979msgid "Cancel"
8080msgstr "İmtina"
@@ -117,18 +117,188 @@ msgctxt "Button: Restart the system"
117117msgid "Restart"
118118msgstr ""
119119
120−#: qml/Components/Lockscreen.qml:231
120+#: qml/Components/KeyboardShortcutsOverlay.qml:41
121+msgid "Keyboard Shortcuts"
122+msgstr ""
123+
124+#: qml/Components/KeyboardShortcutsOverlay.qml:55
125+msgid "Unity 8"
126+msgstr ""
127+
128+#: qml/Components/KeyboardShortcutsOverlay.qml:62
129+msgid "PrtScr"
130+msgstr ""
131+
132+#: qml/Components/KeyboardShortcutsOverlay.qml:67
133+msgid "Takes a screenshot."
134+msgstr ""
135+
136+#: qml/Components/KeyboardShortcutsOverlay.qml:75
137+msgid "Alt + PrtScr"
138+msgstr ""
139+
140+#: qml/Components/KeyboardShortcutsOverlay.qml:80
141+msgid "Takes a screenshot of a window."
142+msgstr ""
143+
144+#: qml/Components/KeyboardShortcutsOverlay.qml:88
145+msgid "Super + Space"
146+msgstr ""
147+
148+#: qml/Components/KeyboardShortcutsOverlay.qml:93
149+msgid "Switches to next keyboard layout."
150+msgstr ""
151+
152+#: qml/Components/KeyboardShortcutsOverlay.qml:101
153+msgid "Super + Shift + Space"
154+msgstr ""
155+
156+#: qml/Components/KeyboardShortcutsOverlay.qml:106
157+msgid "Switches to previous keyboard layout."
158+msgstr ""
159+
160+#: qml/Components/KeyboardShortcutsOverlay.qml:118
161+msgid "Launcher"
162+msgstr ""
163+
164+#: qml/Components/KeyboardShortcutsOverlay.qml:125
165+msgid "Super (Hold)"
166+msgstr ""
167+
168+#: qml/Components/KeyboardShortcutsOverlay.qml:130
169+msgid "Opens the launcher, displays shortcuts."
170+msgstr ""
171+
172+#: qml/Components/KeyboardShortcutsOverlay.qml:138
173+msgid "Alt + F1"
174+msgstr ""
175+
176+#: qml/Components/KeyboardShortcutsOverlay.qml:143
177+msgid "Opens launcher keyboard navigation mode."
178+msgstr ""
179+
180+#: qml/Components/KeyboardShortcutsOverlay.qml:151
181+msgid "Super + Tab"
182+msgstr ""
183+
184+#: qml/Components/KeyboardShortcutsOverlay.qml:156
185+msgid "Switches applications via the launcher."
186+msgstr ""
187+
188+#: qml/Components/KeyboardShortcutsOverlay.qml:164
189+msgid "Super + 0 to 9"
190+msgstr ""
191+
192+#: qml/Components/KeyboardShortcutsOverlay.qml:169
193+msgid "Same as clicking on a launcher icon."
194+msgstr ""
195+
196+#: qml/Components/KeyboardShortcutsOverlay.qml:181
197+msgid "Scopes"
198+msgstr ""
199+
200+#: qml/Components/KeyboardShortcutsOverlay.qml:188
201+msgid "Super (Tap)"
202+msgstr ""
203+
204+#: qml/Components/KeyboardShortcutsOverlay.qml:193
205+msgid "Opens the Scopes home."
206+msgstr ""
207+
208+#: qml/Components/KeyboardShortcutsOverlay.qml:209
209+msgid "Switching"
210+msgstr ""
211+
212+#: qml/Components/KeyboardShortcutsOverlay.qml:216
213+msgid "Alt + Tab"
214+msgstr ""
215+
216+#: qml/Components/KeyboardShortcutsOverlay.qml:221
217+msgid "Switches between applications."
218+msgstr ""
219+
220+#: qml/Components/KeyboardShortcutsOverlay.qml:229
221+msgid "Super + W"
222+msgstr ""
223+
224+#: qml/Components/KeyboardShortcutsOverlay.qml:234
225+msgid "Opens the desktop spread."
226+msgstr ""
227+
228+#: qml/Components/KeyboardShortcutsOverlay.qml:242
229+msgid "Cursor Left or Right"
230+msgstr ""
231+
232+#: qml/Components/KeyboardShortcutsOverlay.qml:247
233+msgid "Moves the focus."
234+msgstr ""
235+
236+#: qml/Components/KeyboardShortcutsOverlay.qml:259
237+msgid "Windows"
238+msgstr ""
239+
240+#: qml/Components/KeyboardShortcutsOverlay.qml:266
241+msgid "Ctrl + Super + D"
242+msgstr ""
243+
244+#: qml/Components/KeyboardShortcutsOverlay.qml:271
245+msgid "Minimizes all windows."
246+msgstr ""
247+
248+#: qml/Components/KeyboardShortcutsOverlay.qml:279
249+msgid "Ctrl + Super + Up"
250+msgstr ""
251+
252+#: qml/Components/KeyboardShortcutsOverlay.qml:284
253+msgid "Maximizes the current window."
254+msgstr ""
255+
256+#: qml/Components/KeyboardShortcutsOverlay.qml:292
257+msgid "Ctrl + Super + Down"
258+msgstr ""
259+
260+#: qml/Components/KeyboardShortcutsOverlay.qml:297
261+msgid "Minimizes or restores the current window."
262+msgstr ""
263+
264+#: qml/Components/KeyboardShortcutsOverlay.qml:305
265+msgid "Ctrl + Super + Left or Right"
266+msgstr ""
267+
268+#: qml/Components/KeyboardShortcutsOverlay.qml:310
269+msgid "Semi-maximizes the current window."
270+msgstr ""
271+
272+#: qml/Components/KeyboardShortcutsOverlay.qml:318
273+msgid "Alt + F4"
274+msgstr ""
275+
276+#: qml/Components/KeyboardShortcutsOverlay.qml:323
277+msgid "Closes the current window."
278+msgstr ""
279+
280+#: qml/Components/Lockscreen.qml:239
121281msgid "Return to Call"
122282msgstr ""
123283
124−#: qml/Components/Lockscreen.qml:231
284+#: qml/Components/Lockscreen.qml:239
125285msgid "Emergency Call"
126286msgstr "Zərurət zəngi"
127287
128−#: qml/Components/Lockscreen.qml:263
288+#: qml/Components/Lockscreen.qml:271
129289msgid "OK"
130290msgstr "Oldu"
131291
292+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
293+#, qt-format
294+msgid "%1:%2:%3"
295+msgstr ""
296+
297+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
298+#, qt-format
299+msgid "%1:%2"
300+msgstr ""
301+
132302#: qml/Components/ModeSwitchWarningDialog.qml:32
133303msgid "Apps may have unsaved data:"
134304msgstr ""
@@ -155,26 +325,30 @@ msgstr ""
155325msgid "Close all"
156326msgstr ""
157327
158−#: qml/Dash/DashPageHeader.qml:337
328+#: qml/Components/SharingPicker.qml:54
329+msgid "Preview Share Item"
330+msgstr ""
331+
332+#: qml/Dash/DashPageHeader.qml:333
159333msgctxt "Button: Open the Ubuntu Store"
160334msgid "Store"
161335msgstr ""
162336
163−#: qml/Dash/DashPageHeader.qml:344
337+#: qml/Dash/DashPageHeader.qml:340
164338msgctxt "Button: Start a search in the current dash scope"
165339msgid "Search"
166340msgstr ""
167341
168−#: qml/Dash/DashPageHeader.qml:354
342+#: qml/Dash/DashPageHeader.qml:350
169343msgctxt "Button: Show the current dash scope settings"
170344msgid "Settings"
171345msgstr ""
172346
173−#: qml/Dash/DashPageHeader.qml:361
347+#: qml/Dash/DashPageHeader.qml:357
174348msgid "Remove from Favorites"
175349msgstr "Seçilmişlәrdәn çıxart"
176350
177−#: qml/Dash/DashPageHeader.qml:361
351+#: qml/Dash/DashPageHeader.qml:357
178352msgid "Add to Favorites"
179353msgstr "Seçilmişlәrә әlavә et"
180354
@@ -186,24 +360,24 @@ msgstr ""
186360msgid "Reset"
187361msgstr ""
188362
189−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
363+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
190364msgid "Show less"
191365msgstr ""
192366
193−#: qml/Dash/GenericScopeView.qml:579
367+#: qml/Dash/GenericScopeView.qml:580
194368msgid "Show all"
195369msgstr ""
196370
197−#: qml/Dash/GenericScopeView.qml:636
371+#: qml/Dash/GenericScopeView.qml:637
198372msgctxt "Label: Hint for dash search line edit"
199373msgid "Search"
200374msgstr ""
201375
202−#: qml/Dash/PageHeaderExtraPanel.qml:55
376+#: qml/Dash/PageHeaderExtraPanel.qml:56
203377msgid "Recent Searches"
204378msgstr ""
205379
206−#: qml/Dash/PageHeaderExtraPanel.qml:66
380+#: qml/Dash/PageHeaderExtraPanel.qml:67
207381msgid "Clear All"
208382msgstr ""
209383
@@ -216,22 +390,18 @@ msgid "Less..."
216390msgstr "Az..."
217391
218392#: qml/Dash/Previews/PreviewCommentInput.qml:68
219−#: qml/Dash/Previews/PreviewRatingInput.qml:174
393+#: qml/Dash/Previews/PreviewRatingInput.qml:175
220394msgid "Send"
221395msgstr "Göndər"
222396
223−#: qml/Dash/Previews/PreviewRatingInput.qml:84
397+#: qml/Dash/Previews/PreviewRatingInput.qml:82
224398msgid "Rate this"
225399msgstr "Qiymәtlәndir"
226400
227−#: qml/Dash/Previews/PreviewRatingInput.qml:129
401+#: qml/Dash/Previews/PreviewRatingInput.qml:157
228402msgid "Add a review"
229403msgstr "Rəy yaz"
230404
231−#: qml/Dash/Previews/PreviewSharing.qml:66
232−msgid "Preview Share Item"
233−msgstr ""
234−
235405#: qml/Dash/PullToRefreshScopeStyle.qml:55
236406msgid "Pull to refresh…"
237407msgstr ""
@@ -244,49 +414,61 @@ msgstr ""
244414msgid "Enable location data"
245415msgstr ""
246416
247−#: qml/Dash/ScopesList.qml:67
417+#: qml/Dash/ScopesList.qml:55
248418msgid "Manage"
249419msgstr ""
250420
251−#: qml/Dash/ScopesList.qml:113
421+#: qml/Dash/ScopesList.qml:102
252422msgid "Home"
253423msgstr ""
254424
255−#: qml/Dash/ScopesList.qml:114
425+#: qml/Dash/ScopesList.qml:103
256426msgid "Also installed"
257427msgstr ""
258428
259−#: qml/DisabledScreenNotice.qml:104
429+#: qml/DisabledScreenNotice.qml:109
260430msgid ""
261431"Your device is now connected to an external display. Use this screen as a "
262432"touch pad to interact with the pointer."
263433msgstr ""
264434
265−#: qml/Greeter/CoverPage.qml:118
435+#: qml/Greeter/CoverPage.qml:127
266436msgid "Unlock"
267437msgstr ""
268438
269−#: qml/Greeter/LoginList.qml:239
439+#: qml/Greeter/Greeter.qml:555
440+msgid "Try again"
441+msgstr ""
442+
443+#: qml/Greeter/LoginList.qml:63
444+msgid "Passphrase"
445+msgstr ""
446+
447+#: qml/Greeter/LoginList.qml:64
448+msgid "Passcode"
449+msgstr ""
450+
451+#: qml/Greeter/LoginList.qml:87
270452msgid "Retry"
271453msgstr ""
272454
273−#: qml/Greeter/LoginList.qml:240
274−msgid "Tap to unlock"
455+#: qml/Greeter/LoginList.qml:88
456+msgid "Log In"
275457msgstr ""
276458
277−#: qml/Greeter/NarrowView.qml:54
459+#: qml/Greeter/NarrowView.qml:55
278460msgid "Sorry, incorrect passphrase."
279461msgstr "Bağışlayın, açar söz yanlışdır."
280462
281−#: qml/Greeter/NarrowView.qml:55
463+#: qml/Greeter/NarrowView.qml:56
282464msgid "Sorry, incorrect passcode."
283465msgstr "Təəssüf ki, açar kod yanlışdır."
284466
285−#: qml/Greeter/NarrowView.qml:56
467+#: qml/Greeter/NarrowView.qml:57
286468msgid "This will be your last attempt."
287469msgstr "Bu sizin son cəhdiniz olacaq."
288470
289−#: qml/Greeter/NarrowView.qml:58
471+#: qml/Greeter/NarrowView.qml:59
290472msgid ""
291473"If passphrase is entered incorrectly, your phone will conduct a factory "
292474"reset and all personal data will be deleted."
@@ -294,7 +476,7 @@ msgstr ""
294476"Əgər açar söz yanlış daxil edilibsə, onda telefonunuz fabrika parametrlərinə "
295477"geri qayıdacaq və bütün şəxsi məlumatlarınız silinəcək."
296478
297−#: qml/Greeter/NarrowView.qml:59
479+#: qml/Greeter/NarrowView.qml:60
298480msgid ""
299481"If passcode is entered incorrectly, your phone will conduct a factory reset "
300482"and all personal data will be deleted."
@@ -302,34 +484,34 @@ msgstr ""
302484"Əgər açar kod yanlış daxil edilibsə, onda telefonunuz fabrika parametrlərinə "
303485"geri qayıdacaq və bütün şəxsi məlumatlarınız silinəcək."
304486
305−#: qml/Greeter/NarrowView.qml:116
487+#: qml/Greeter/NarrowView.qml:129
306488#, qt-format
307489msgid "Enter %1"
308490msgstr ""
309491
310−#: qml/Greeter/NarrowView.qml:117
492+#: qml/Greeter/NarrowView.qml:130
311493msgid "Enter passphrase"
312494msgstr ""
313495
314−#: qml/Greeter/NarrowView.qml:118
496+#: qml/Greeter/NarrowView.qml:131
315497msgid "Enter passcode"
316498msgstr ""
317499
318−#: qml/Greeter/NarrowView.qml:119
500+#: qml/Greeter/NarrowView.qml:135
319501#, qt-format
320502msgid "Sorry, incorrect %1"
321503msgstr "Bağışlayın, %1 yanlışdır"
322504
323−#: qml/Greeter/NarrowView.qml:120
505+#: qml/Greeter/NarrowView.qml:136
324506msgid "Sorry, incorrect passphrase"
325507msgstr "Bağışlayın, açar söz yanlışdır"
326508
327−#: qml/Greeter/NarrowView.qml:121
509+#: qml/Greeter/NarrowView.qml:137
328510msgctxt "passphrase"
329511msgid "Please re-enter"
330512msgstr ""
331513
332−#: qml/Greeter/NarrowView.qml:122
514+#: qml/Greeter/NarrowView.qml:138
333515msgid "Sorry, incorrect passcode"
334516msgstr ""
335517
@@ -404,18 +586,18 @@ msgstr "Bitdi"
404586msgid "Failed, tap to retry"
405587msgstr "Alınmadı. Yenidәn cәhd etmək üçün toxunun"
406588
407−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
408−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
589+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
590+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
409591msgctxt "Button: Send a reply message"
410592msgid "Send"
411593msgstr ""
412594
413−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
595+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
414596msgctxt "Label: Hint in message indicator line edit"
415597msgid "Reply"
416598msgstr ""
417599
418−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
600+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
419601msgctxt "Button: Call back on phone"
420602msgid "Call back"
421603msgstr ""
@@ -424,32 +606,12 @@ msgstr ""
424606msgid "Drag using 3 fingers any application from one window to the other"
425607msgstr ""
426608
427−#: qml/Tutorial/TutorialBottom.qml:78
428−msgid "Swipe up to add a contact"
429−msgstr ""
430−
431−#: qml/Tutorial/TutorialBottom.qml:80
432−msgid "Swipe up for favorite calculations"
433−msgstr ""
434−
435−#: qml/Tutorial/TutorialBottom.qml:82
436−msgid "Swipe up for recent calls"
437−msgstr ""
438−
439−#: qml/Tutorial/TutorialBottom.qml:84
440−msgid "Swipe up to create a message"
441−msgstr ""
442−
443−#: qml/Tutorial/TutorialBottom.qml:85
444−msgid "Swipe up to manage the app"
445−msgstr ""
446−
447−#: qml/Tutorial/TutorialLeftLong.qml:47
609+#: qml/Tutorial/TutorialLeftLong.qml:49
448610msgid "Long swipe from the left edge to open the Today scope"
449611msgstr ""
450612
451613#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Swipe from the left edge to open the launcher"
614+msgid "Short swipe from the left edge to open the launcher"
453615msgstr ""
454616
455617#: qml/Tutorial/TutorialRight.qml:55
@@ -457,15 +619,11 @@ msgid "Push your mouse against the right edge to view your open apps"
457619msgstr ""
458620
459621#: qml/Tutorial/TutorialRight.qml:56
460−msgid "Short or long swipe from the right edge to view your open apps"
622+msgid "Swipe from the right edge to view your open apps"
461623msgstr ""
462624
463625#: qml/Tutorial/TutorialTop.qml:53
464−msgid "Swipe from the top right edge to open the notification bar"
465−msgstr ""
466−
467−#: qml/Tutorial/TutorialTop.qml:54
468−msgid "Swipe from the top edge to open the notification bar"
626+msgid "Swipe from the top edge to access notifications and quick settings"
469627msgstr ""
470628
471629#: qml/Wizard/Page.qml:54
@@ -477,11 +635,11 @@ msgstr ""
477635msgid "Language"
478636msgstr ""
479637
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
638+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
639+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
482640#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
483641#: qml/Wizard/Pages/75-report-check.qml:84
484−#: qml/Wizard/Pages/passcode-desktop.qml:124
642+#: qml/Wizard/Pages/passcode-desktop.qml:141
485643#: qml/Wizard/Pages/password-set.qml:141
486644msgid "Next"
487645msgstr ""
@@ -543,7 +701,7 @@ msgstr ""
543701msgid "Time Zone"
544702msgstr ""
545703
546−#: qml/Wizard/Pages/50-timezone.qml:178
704+#: qml/Wizard/Pages/50-timezone.qml:181
547705msgid "Enter your city"
548706msgstr ""
549707
@@ -633,7 +791,7 @@ msgid "Service Terms"
633791msgstr ""
634792
635793#: qml/Wizard/Pages/passcode-confirm.qml:43
636−#: qml/Wizard/Pages/passcode-desktop.qml:80
794+#: qml/Wizard/Pages/passcode-desktop.qml:96
637795msgid "Confirm passcode"
638796msgstr ""
639797
@@ -650,24 +808,24 @@ msgstr ""
650808msgid "Lock Screen Passcode"
651809msgstr ""
652810
653−#: qml/Wizard/Pages/passcode-desktop.qml:56
811+#: qml/Wizard/Pages/passcode-desktop.qml:60
654812msgid "Enter 4 numbers to setup your passcode"
655813msgstr ""
656814
657−#: qml/Wizard/Pages/passcode-desktop.qml:65
815+#: qml/Wizard/Pages/passcode-desktop.qml:76
658816#: qml/Wizard/Pages/passcode-set.qml:54
659817msgid "Choose passcode"
660818msgstr ""
661819
662−#: qml/Wizard/Pages/passcode-desktop.qml:105
820+#: qml/Wizard/Pages/passcode-desktop.qml:126
663821msgid "Passcode too short"
664822msgstr ""
665823
666−#: qml/Wizard/Pages/passcode-desktop.qml:107
824+#: qml/Wizard/Pages/passcode-desktop.qml:128
667825msgid "Passcodes match"
668826msgstr ""
669827
670−#: qml/Wizard/Pages/passcode-desktop.qml:109
828+#: qml/Wizard/Pages/passcode-desktop.qml:130
671829msgid "Passcodes do not match"
672830msgstr ""
673831
@@ -716,26 +874,30 @@ msgid "To proceed with no SIM tap Skip."
716874msgstr ""
717875
718876#: qml/Wizard/PasswordMeter.qml:87
719−msgid "Passwords match"
877+msgid "Password too short"
720878msgstr ""
721879
722880#: qml/Wizard/PasswordMeter.qml:89
881+msgid "Passwords match"
882+msgstr ""
883+
884+#: qml/Wizard/PasswordMeter.qml:91
723885msgid "Passwords do not match"
724886msgstr ""
725887
726−#: qml/Wizard/PasswordMeter.qml:93
888+#: qml/Wizard/PasswordMeter.qml:95
727889msgid "Strong password"
728890msgstr ""
729891
730−#: qml/Wizard/PasswordMeter.qml:95
892+#: qml/Wizard/PasswordMeter.qml:97
731893msgid "Fair password"
732894msgstr ""
733895
734−#: qml/Wizard/PasswordMeter.qml:97
896+#: qml/Wizard/PasswordMeter.qml:99
735897msgid "Weak password"
736898msgstr ""
737899
738−#: qml/Wizard/PasswordMeter.qml:99
900+#: qml/Wizard/PasswordMeter.qml:101
739901msgid "Very weak password"
740902msgstr ""
741903
po/be.po+266−101
@@ -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-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+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,42 +16,42 @@ 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-05-19 05:49+0000\n"
20−"X-Generator: Launchpad (build 18025)\n"
19+"X-Launchpad-Export-Date: 2016-07-14 06:00+0000\n"
20+"X-Generator: Launchpad (build 18115)\n"
2121
22−#: plugins/IntegratedLightDM/Greeter.cpp:112
22+#: plugins/LightDM/Greeter.cpp:123
2323msgid "Password: "
2424msgstr "Пароль: "
2525
26−#: plugins/Unity/Launcher/launcheritem.cpp:48
27−#: plugins/Unity/Launcher/launcheritem.cpp:107
26+#: plugins/Unity/Launcher/launcheritem.cpp:49
27+#: plugins/Unity/Launcher/launcheritem.cpp:108
2828msgid "Pin shortcut"
2929msgstr "Замацаваць кнопку"
3030
31−#: plugins/Unity/Launcher/launcheritem.cpp:53
31+#: plugins/Unity/Launcher/launcheritem.cpp:54
3232msgid "Quit"
3333msgstr "Выйсці"
3434
35−#: plugins/Unity/Launcher/launcheritem.cpp:107
35+#: plugins/Unity/Launcher/launcheritem.cpp:108
3636msgid "Unpin shortcut"
3737msgstr "Адмацаваць кнопку"
3838
39−#: qml/Components/DelayedLockscreen.qml:49
39+#: qml/Components/DelayedLockscreen.qml:50
4040msgid "Device Locked"
4141msgstr "Прылада заблакаваная"
4242
43−#: qml/Components/DelayedLockscreen.qml:64
43+#: qml/Components/DelayedLockscreen.qml:65
4444msgid "You have been locked out due to too many failed passphrase attempts."
4545msgstr ""
4646"Вы былі заблакаваныя з-за занадта вялікай колькасці няўдалых спробаў."
4747
48−#: qml/Components/DelayedLockscreen.qml:65
48+#: qml/Components/DelayedLockscreen.qml:66
4949msgid "You have been locked out due to too many failed passcode attempts."
5050msgstr ""
5151"Вы былі заблакаваныя з-за занадта вялікай колькасці няўдалых спробаў уводу "
5252"кода доступу."
5353
54−#: qml/Components/DelayedLockscreen.qml:74
54+#: qml/Components/DelayedLockscreen.qml:75
5555#, qt-format
5656msgid "Please wait %1 minute and then try again…"
5757msgid_plural "Please wait %1 minutes and then try again…"
@@ -79,7 +79,7 @@ msgid "Log Out"
7979msgstr "Выйсці"
8080
8181#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
82−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
82+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
8383#: qml/Wizard/Pages/passcode-set.qml:32
8484msgid "Cancel"
8585msgstr "Скасаваць"
@@ -124,18 +124,188 @@ msgctxt "Button: Restart the system"
124124msgid "Restart"
125125msgstr "Перазапуск"
126126
127−#: qml/Components/Lockscreen.qml:231
127+#: qml/Components/KeyboardShortcutsOverlay.qml:41
128+msgid "Keyboard Shortcuts"
129+msgstr ""
130+
131+#: qml/Components/KeyboardShortcutsOverlay.qml:55
132+msgid "Unity 8"
133+msgstr ""
134+
135+#: qml/Components/KeyboardShortcutsOverlay.qml:62
136+msgid "PrtScr"
137+msgstr ""
138+
139+#: qml/Components/KeyboardShortcutsOverlay.qml:67
140+msgid "Takes a screenshot."
141+msgstr ""
142+
143+#: qml/Components/KeyboardShortcutsOverlay.qml:75
144+msgid "Alt + PrtScr"
145+msgstr ""
146+
147+#: qml/Components/KeyboardShortcutsOverlay.qml:80
148+msgid "Takes a screenshot of a window."
149+msgstr ""
150+
151+#: qml/Components/KeyboardShortcutsOverlay.qml:88
152+msgid "Super + Space"
153+msgstr ""
154+
155+#: qml/Components/KeyboardShortcutsOverlay.qml:93
156+msgid "Switches to next keyboard layout."
157+msgstr ""
158+
159+#: qml/Components/KeyboardShortcutsOverlay.qml:101
160+msgid "Super + Shift + Space"
161+msgstr ""
162+
163+#: qml/Components/KeyboardShortcutsOverlay.qml:106
164+msgid "Switches to previous keyboard layout."
165+msgstr ""
166+
167+#: qml/Components/KeyboardShortcutsOverlay.qml:118
168+msgid "Launcher"
169+msgstr ""
170+
171+#: qml/Components/KeyboardShortcutsOverlay.qml:125
172+msgid "Super (Hold)"
173+msgstr ""
174+
175+#: qml/Components/KeyboardShortcutsOverlay.qml:130
176+msgid "Opens the launcher, displays shortcuts."
177+msgstr ""
178+
179+#: qml/Components/KeyboardShortcutsOverlay.qml:138
180+msgid "Alt + F1"
181+msgstr ""
182+
183+#: qml/Components/KeyboardShortcutsOverlay.qml:143
184+msgid "Opens launcher keyboard navigation mode."
185+msgstr ""
186+
187+#: qml/Components/KeyboardShortcutsOverlay.qml:151
188+msgid "Super + Tab"
189+msgstr ""
190+
191+#: qml/Components/KeyboardShortcutsOverlay.qml:156
192+msgid "Switches applications via the launcher."
193+msgstr ""
194+
195+#: qml/Components/KeyboardShortcutsOverlay.qml:164
196+msgid "Super + 0 to 9"
197+msgstr ""
198+
199+#: qml/Components/KeyboardShortcutsOverlay.qml:169
200+msgid "Same as clicking on a launcher icon."
201+msgstr ""
202+
203+#: qml/Components/KeyboardShortcutsOverlay.qml:181
204+msgid "Scopes"
205+msgstr ""
206+
207+#: qml/Components/KeyboardShortcutsOverlay.qml:188
208+msgid "Super (Tap)"
209+msgstr ""
210+
211+#: qml/Components/KeyboardShortcutsOverlay.qml:193
212+msgid "Opens the Scopes home."
213+msgstr ""
214+
215+#: qml/Components/KeyboardShortcutsOverlay.qml:209
216+msgid "Switching"
217+msgstr ""
218+
219+#: qml/Components/KeyboardShortcutsOverlay.qml:216
220+msgid "Alt + Tab"
221+msgstr ""
222+
223+#: qml/Components/KeyboardShortcutsOverlay.qml:221
224+msgid "Switches between applications."
225+msgstr ""
226+
227+#: qml/Components/KeyboardShortcutsOverlay.qml:229
228+msgid "Super + W"
229+msgstr ""
230+
231+#: qml/Components/KeyboardShortcutsOverlay.qml:234
232+msgid "Opens the desktop spread."
233+msgstr ""
234+
235+#: qml/Components/KeyboardShortcutsOverlay.qml:242
236+msgid "Cursor Left or Right"
237+msgstr ""
238+
239+#: qml/Components/KeyboardShortcutsOverlay.qml:247
240+msgid "Moves the focus."
241+msgstr ""
242+
243+#: qml/Components/KeyboardShortcutsOverlay.qml:259
244+msgid "Windows"
245+msgstr ""
246+
247+#: qml/Components/KeyboardShortcutsOverlay.qml:266
248+msgid "Ctrl + Super + D"
249+msgstr ""
250+
251+#: qml/Components/KeyboardShortcutsOverlay.qml:271
252+msgid "Minimizes all windows."
253+msgstr ""
254+
255+#: qml/Components/KeyboardShortcutsOverlay.qml:279
256+msgid "Ctrl + Super + Up"
257+msgstr ""
258+
259+#: qml/Components/KeyboardShortcutsOverlay.qml:284
260+msgid "Maximizes the current window."
261+msgstr ""
262+
263+#: qml/Components/KeyboardShortcutsOverlay.qml:292
264+msgid "Ctrl + Super + Down"
265+msgstr ""
266+
267+#: qml/Components/KeyboardShortcutsOverlay.qml:297
268+msgid "Minimizes or restores the current window."
269+msgstr ""
270+
271+#: qml/Components/KeyboardShortcutsOverlay.qml:305
272+msgid "Ctrl + Super + Left or Right"
273+msgstr ""
274+
275+#: qml/Components/KeyboardShortcutsOverlay.qml:310
276+msgid "Semi-maximizes the current window."
277+msgstr ""
278+
279+#: qml/Components/KeyboardShortcutsOverlay.qml:318
280+msgid "Alt + F4"
281+msgstr ""
282+
283+#: qml/Components/KeyboardShortcutsOverlay.qml:323
284+msgid "Closes the current window."
285+msgstr ""
286+
287+#: qml/Components/Lockscreen.qml:239
128288msgid "Return to Call"
129289msgstr "Вярнуцца да выкліку"
130290
131−#: qml/Components/Lockscreen.qml:231
291+#: qml/Components/Lockscreen.qml:239
132292msgid "Emergency Call"
133293msgstr "Терміновы выклік"
134294
135−#: qml/Components/Lockscreen.qml:263
295+#: qml/Components/Lockscreen.qml:271
136296msgid "OK"
137297msgstr "Добра"
138298
299+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
300+#, qt-format
301+msgid "%1:%2:%3"
302+msgstr ""
303+
304+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
305+#, qt-format
306+msgid "%1:%2"
307+msgstr ""
308+
139309#: qml/Components/ModeSwitchWarningDialog.qml:32
140310msgid "Apps may have unsaved data:"
141311msgstr "Прылады могуць мець незахованыя дадзеныя:"
@@ -162,26 +332,30 @@ msgstr "Перападлучыцца зараз!"
162332msgid "Close all"
163333msgstr "Зачыніць усё"
164334
165−#: qml/Dash/DashPageHeader.qml:337
335+#: qml/Components/SharingPicker.qml:54
336+msgid "Preview Share Item"
337+msgstr "Праглядзець элемент"
338+
339+#: qml/Dash/DashPageHeader.qml:333
166340msgctxt "Button: Open the Ubuntu Store"
167341msgid "Store"
168342msgstr "Крама"
169343
170−#: qml/Dash/DashPageHeader.qml:344
344+#: qml/Dash/DashPageHeader.qml:340
171345msgctxt "Button: Start a search in the current dash scope"
172346msgid "Search"
173347msgstr "Пошук"
174348
175−#: qml/Dash/DashPageHeader.qml:354
349+#: qml/Dash/DashPageHeader.qml:350
176350msgctxt "Button: Show the current dash scope settings"
177351msgid "Settings"
178352msgstr "Налады"
179353
180−#: qml/Dash/DashPageHeader.qml:361
354+#: qml/Dash/DashPageHeader.qml:357
181355msgid "Remove from Favorites"
182356msgstr "Выдаліць з абранага"
183357
184−#: qml/Dash/DashPageHeader.qml:361
358+#: qml/Dash/DashPageHeader.qml:357
185359msgid "Add to Favorites"
186360msgstr "Дадаць да абранага"
187361
@@ -193,24 +367,24 @@ msgstr ""
193367msgid "Reset"
194368msgstr ""
195369
196−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
370+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
197371msgid "Show less"
198372msgstr ""
199373
200−#: qml/Dash/GenericScopeView.qml:579
374+#: qml/Dash/GenericScopeView.qml:580
201375msgid "Show all"
202376msgstr ""
203377
204−#: qml/Dash/GenericScopeView.qml:636
378+#: qml/Dash/GenericScopeView.qml:637
205379msgctxt "Label: Hint for dash search line edit"
206380msgid "Search"
207381msgstr "Пошук"
208382
209−#: qml/Dash/PageHeaderExtraPanel.qml:55
383+#: qml/Dash/PageHeaderExtraPanel.qml:56
210384msgid "Recent Searches"
211385msgstr ""
212386
213−#: qml/Dash/PageHeaderExtraPanel.qml:66
387+#: qml/Dash/PageHeaderExtraPanel.qml:67
214388msgid "Clear All"
215389msgstr ""
216390
@@ -223,22 +397,18 @@ msgid "Less..."
223397msgstr "Менш..."
224398
225399#: qml/Dash/Previews/PreviewCommentInput.qml:68
226−#: qml/Dash/Previews/PreviewRatingInput.qml:174
400+#: qml/Dash/Previews/PreviewRatingInput.qml:175
227401msgid "Send"
228402msgstr "Адправіць"
229403
230−#: qml/Dash/Previews/PreviewRatingInput.qml:84
404+#: qml/Dash/Previews/PreviewRatingInput.qml:82
231405msgid "Rate this"
232406msgstr "Ацаніць"
233407
234−#: qml/Dash/Previews/PreviewRatingInput.qml:129
408+#: qml/Dash/Previews/PreviewRatingInput.qml:157
235409msgid "Add a review"
236410msgstr "Дадаць рэцэнзію"
237411
238−#: qml/Dash/Previews/PreviewSharing.qml:66
239−msgid "Preview Share Item"
240−msgstr "Праглядзець элемент"
241−
242412#: qml/Dash/PullToRefreshScopeStyle.qml:55
243413msgid "Pull to refresh…"
244414msgstr "Пацягніце для абнаўлення..."
@@ -251,49 +421,61 @@ msgstr "Адпусціце для абнаўлення..."
251421msgid "Enable location data"
252422msgstr "Уключыць дадзеныя аб месцазнаходжанні"
253423
254−#: qml/Dash/ScopesList.qml:67
424+#: qml/Dash/ScopesList.qml:55
255425msgid "Manage"
256426msgstr "Кіраванне"
257427
258−#: qml/Dash/ScopesList.qml:113
428+#: qml/Dash/ScopesList.qml:102
259429msgid "Home"
260430msgstr "Хатняя папка"
261431
262−#: qml/Dash/ScopesList.qml:114
432+#: qml/Dash/ScopesList.qml:103
263433msgid "Also installed"
264434msgstr "Таксама ўсталявана"
265435
266−#: qml/DisabledScreenNotice.qml:104
436+#: qml/DisabledScreenNotice.qml:109
267437msgid ""
268438"Your device is now connected to an external display. Use this screen as a "
269439"touch pad to interact with the pointer."
270440msgstr ""
271441
272−#: qml/Greeter/CoverPage.qml:118
442+#: qml/Greeter/CoverPage.qml:127
273443msgid "Unlock"
274444msgstr "Разблакаваць"
275445
276−#: qml/Greeter/LoginList.qml:239
446+#: qml/Greeter/Greeter.qml:555
447+msgid "Try again"
448+msgstr ""
449+
450+#: qml/Greeter/LoginList.qml:63
451+msgid "Passphrase"
452+msgstr ""
453+
454+#: qml/Greeter/LoginList.qml:64
455+msgid "Passcode"
456+msgstr ""
457+
458+#: qml/Greeter/LoginList.qml:87
277459msgid "Retry"
278460msgstr "Паспрабаваць зноў"
279461
280−#: qml/Greeter/LoginList.qml:240
281−msgid "Tap to unlock"
282−msgstr "Націсніце, каб разблакаваць"
462+#: qml/Greeter/LoginList.qml:88
463+msgid "Log In"
464+msgstr ""
283465
284−#: qml/Greeter/NarrowView.qml:54
466+#: qml/Greeter/NarrowView.qml:55
285467msgid "Sorry, incorrect passphrase."
286468msgstr "Даруйце, няслушны пароль."
287469
288−#: qml/Greeter/NarrowView.qml:55
470+#: qml/Greeter/NarrowView.qml:56
289471msgid "Sorry, incorrect passcode."
290472msgstr "Даруйце, няслушны код."
291473
292−#: qml/Greeter/NarrowView.qml:56
474+#: qml/Greeter/NarrowView.qml:57
293475msgid "This will be your last attempt."
294476msgstr "Апошняя спроба."
295477
296−#: qml/Greeter/NarrowView.qml:58
478+#: qml/Greeter/NarrowView.qml:59
297479msgid ""
298480"If passphrase is entered incorrectly, your phone will conduct a factory "
299481"reset and all personal data will be deleted."
@@ -301,7 +483,7 @@ msgstr ""
301483"Калі ўведзены пароль неправільны, Ваш тэлефон зробіць агульны скід налад і "
302484"ўсе асабістыя дадзеныя будуць выдалены."
303485
304−#: qml/Greeter/NarrowView.qml:59
486+#: qml/Greeter/NarrowView.qml:60
305487msgid ""
306488"If passcode is entered incorrectly, your phone will conduct a factory reset "
307489"and all personal data will be deleted."
@@ -309,34 +491,34 @@ msgstr ""
309491"Калі ўведзены код неправільны, Ваш тэлефон зробіць агульны скід налад і ўсе "
310492"асабістыя дадзеныя будуць выдалены."
311493
312−#: qml/Greeter/NarrowView.qml:116
494+#: qml/Greeter/NarrowView.qml:129
313495#, qt-format
314496msgid "Enter %1"
315497msgstr "Увядзіце %1"
316498
317−#: qml/Greeter/NarrowView.qml:117
499+#: qml/Greeter/NarrowView.qml:130
318500msgid "Enter passphrase"
319501msgstr "Увядзіце пароль"
320502
321−#: qml/Greeter/NarrowView.qml:118
503+#: qml/Greeter/NarrowView.qml:131
322504msgid "Enter passcode"
323505msgstr "Увядзіце код"
324506
325−#: qml/Greeter/NarrowView.qml:119
507+#: qml/Greeter/NarrowView.qml:135
326508#, qt-format
327509msgid "Sorry, incorrect %1"
328510msgstr "Даруйце, некарэктны %1"
329511
330−#: qml/Greeter/NarrowView.qml:120
512+#: qml/Greeter/NarrowView.qml:136
331513msgid "Sorry, incorrect passphrase"
332514msgstr "Даруйце, някарэктны пароль"
333515
334−#: qml/Greeter/NarrowView.qml:121
516+#: qml/Greeter/NarrowView.qml:137
335517msgctxt "passphrase"
336518msgid "Please re-enter"
337519msgstr "Калі ласка, паўтарыце ўвод"
338520
339−#: qml/Greeter/NarrowView.qml:122
521+#: qml/Greeter/NarrowView.qml:138
340522msgid "Sorry, incorrect passcode"
341523msgstr "Даруйце, некарэктны код"
342524
@@ -414,18 +596,18 @@ msgstr "Скончана"
414596msgid "Failed, tap to retry"
415597msgstr "Не атрымалася, націсніце, каб паўтарыць спробу"
416598
417−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
418−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
599+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
600+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
419601msgctxt "Button: Send a reply message"
420602msgid "Send"
421603msgstr "Даслаць"
422604
423−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
605+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
424606msgctxt "Label: Hint in message indicator line edit"
425607msgid "Reply"
426608msgstr "Адказаць"
427609
428−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
610+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
429611msgctxt "Button: Call back on phone"
430612msgid "Call back"
431613msgstr "Патэлефанаваць"
@@ -434,32 +616,12 @@ msgstr "Патэлефанаваць"
434616msgid "Drag using 3 fingers any application from one window to the other"
435617msgstr ""
436618
437−#: qml/Tutorial/TutorialBottom.qml:78
438−msgid "Swipe up to add a contact"
439−msgstr ""
440−
441−#: qml/Tutorial/TutorialBottom.qml:80
442−msgid "Swipe up for favorite calculations"
443−msgstr ""
444−
445−#: qml/Tutorial/TutorialBottom.qml:82
446−msgid "Swipe up for recent calls"
447−msgstr ""
448−
449−#: qml/Tutorial/TutorialBottom.qml:84
450−msgid "Swipe up to create a message"
451−msgstr ""
452−
453−#: qml/Tutorial/TutorialBottom.qml:85
454−msgid "Swipe up to manage the app"
455−msgstr ""
456−
457−#: qml/Tutorial/TutorialLeftLong.qml:47
619+#: qml/Tutorial/TutorialLeftLong.qml:49
458620msgid "Long swipe from the left edge to open the Today scope"
459621msgstr ""
460622
461623#: qml/Tutorial/TutorialLeft.qml:47
462−msgid "Swipe from the left edge to open the launcher"
624+msgid "Short swipe from the left edge to open the launcher"
463625msgstr ""
464626
465627#: qml/Tutorial/TutorialRight.qml:55
@@ -467,15 +629,11 @@ msgid "Push your mouse against the right edge to view your open apps"
467629msgstr ""
468630
469631#: qml/Tutorial/TutorialRight.qml:56
470−msgid "Short or long swipe from the right edge to view your open apps"
632+msgid "Swipe from the right edge to view your open apps"
471633msgstr ""
472634
473635#: qml/Tutorial/TutorialTop.qml:53
474−msgid "Swipe from the top right edge to open the notification bar"
475−msgstr ""
476−
477−#: qml/Tutorial/TutorialTop.qml:54
478−msgid "Swipe from the top edge to open the notification bar"
636+msgid "Swipe from the top edge to access notifications and quick settings"
479637msgstr ""
480638
481639#: qml/Wizard/Page.qml:54
@@ -487,11 +645,11 @@ msgstr "Вярнуцца"
487645msgid "Language"
488646msgstr ""
489647
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
648+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
649+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
492650#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
493651#: qml/Wizard/Pages/75-report-check.qml:84
494−#: qml/Wizard/Pages/passcode-desktop.qml:124
652+#: qml/Wizard/Pages/passcode-desktop.qml:141
495653#: qml/Wizard/Pages/password-set.qml:141
496654msgid "Next"
497655msgstr ""
@@ -553,7 +711,7 @@ msgstr ""
553711msgid "Time Zone"
554712msgstr ""
555713
556−#: qml/Wizard/Pages/50-timezone.qml:178
714+#: qml/Wizard/Pages/50-timezone.qml:181
557715msgid "Enter your city"
558716msgstr ""
559717
@@ -643,7 +801,7 @@ msgid "Service Terms"
643801msgstr ""
644802
645803#: qml/Wizard/Pages/passcode-confirm.qml:43
646−#: qml/Wizard/Pages/passcode-desktop.qml:80
804+#: qml/Wizard/Pages/passcode-desktop.qml:96
647805msgid "Confirm passcode"
648806msgstr "Пацвердзіце код-пароль"
649807
@@ -660,24 +818,24 @@ msgstr ""
660818msgid "Lock Screen Passcode"
661819msgstr ""
662820
663−#: qml/Wizard/Pages/passcode-desktop.qml:56
821+#: qml/Wizard/Pages/passcode-desktop.qml:60
664822msgid "Enter 4 numbers to setup your passcode"
665823msgstr ""
666824
667−#: qml/Wizard/Pages/passcode-desktop.qml:65
825+#: qml/Wizard/Pages/passcode-desktop.qml:76
668826#: qml/Wizard/Pages/passcode-set.qml:54
669827msgid "Choose passcode"
670828msgstr ""
671829
672−#: qml/Wizard/Pages/passcode-desktop.qml:105
830+#: qml/Wizard/Pages/passcode-desktop.qml:126
673831msgid "Passcode too short"
674832msgstr ""
675833
676−#: qml/Wizard/Pages/passcode-desktop.qml:107
834+#: qml/Wizard/Pages/passcode-desktop.qml:128
677835msgid "Passcodes match"
678836msgstr ""
679837
680−#: qml/Wizard/Pages/passcode-desktop.qml:109
838+#: qml/Wizard/Pages/passcode-desktop.qml:130
681839msgid "Passcodes do not match"
682840msgstr ""
683841
@@ -726,26 +884,30 @@ msgid "To proceed with no SIM tap Skip."
726884msgstr ""
727885
728886#: qml/Wizard/PasswordMeter.qml:87
729−msgid "Passwords match"
887+msgid "Password too short"
730888msgstr ""
731889
732890#: qml/Wizard/PasswordMeter.qml:89
891+msgid "Passwords match"
892+msgstr ""
893+
894+#: qml/Wizard/PasswordMeter.qml:91
733895msgid "Passwords do not match"
734896msgstr ""
735897
736−#: qml/Wizard/PasswordMeter.qml:93
898+#: qml/Wizard/PasswordMeter.qml:95
737899msgid "Strong password"
738900msgstr ""
739901
740−#: qml/Wizard/PasswordMeter.qml:95
902+#: qml/Wizard/PasswordMeter.qml:97
741903msgid "Fair password"
742904msgstr ""
743905
744−#: qml/Wizard/PasswordMeter.qml:97
906+#: qml/Wizard/PasswordMeter.qml:99
745907msgid "Weak password"
746908msgstr ""
747909
748−#: qml/Wizard/PasswordMeter.qml:99
910+#: qml/Wizard/PasswordMeter.qml:101
749911msgid "Very weak password"
750912msgstr ""
751913
@@ -957,6 +1119,9 @@ msgstr ""
9571119#~ msgid "Reboot"
9581120#~ msgstr "Перазагрузіць"
9591121
1122+#~ msgid "Tap to unlock"
1123+#~ msgstr "Націсніце, каб разблакаваць"
1124+
9601125#~ msgid "Swipe up from the bottom edge."
9611126#~ msgstr "Правесці уверх ад ніжняга краю."
9621127
po/bg.po+262−100
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+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,39 +15,39 @@ 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-05-19 05:49+0000\n"
19−"X-Generator: Launchpad (build 18025)\n"
18+"X-Launchpad-Export-Date: 2016-07-14 06:00+0000\n"
19+"X-Generator: Launchpad (build 18115)\n"
2020
21−#: plugins/IntegratedLightDM/Greeter.cpp:112
21+#: plugins/LightDM/Greeter.cpp:123
2222msgid "Password: "
2323msgstr ""
2424
25−#: plugins/Unity/Launcher/launcheritem.cpp:48
26−#: plugins/Unity/Launcher/launcheritem.cpp:107
25+#: plugins/Unity/Launcher/launcheritem.cpp:49
26+#: plugins/Unity/Launcher/launcheritem.cpp:108
2727msgid "Pin shortcut"
2828msgstr ""
2929
30−#: plugins/Unity/Launcher/launcheritem.cpp:53
30+#: plugins/Unity/Launcher/launcheritem.cpp:54
3131msgid "Quit"
3232msgstr ""
3333
34−#: plugins/Unity/Launcher/launcheritem.cpp:107
34+#: plugins/Unity/Launcher/launcheritem.cpp:108
3535msgid "Unpin shortcut"
3636msgstr ""
3737
38−#: qml/Components/DelayedLockscreen.qml:49
38+#: qml/Components/DelayedLockscreen.qml:50
3939msgid "Device Locked"
4040msgstr ""
4141
42−#: qml/Components/DelayedLockscreen.qml:64
42+#: qml/Components/DelayedLockscreen.qml:65
4343msgid "You have been locked out due to too many failed passphrase attempts."
4444msgstr ""
4545
46−#: qml/Components/DelayedLockscreen.qml:65
46+#: qml/Components/DelayedLockscreen.qml:66
4747msgid "You have been locked out due to too many failed passcode attempts."
4848msgstr ""
4949
50−#: qml/Components/DelayedLockscreen.qml:74
50+#: qml/Components/DelayedLockscreen.qml:75
5151#, qt-format
5252msgid "Please wait %1 minute and then try again…"
5353msgid_plural "Please wait %1 minutes and then try again…"
@@ -74,7 +74,7 @@ msgid "Log Out"
7474msgstr ""
7575
7676#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
77−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
77+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
7878#: qml/Wizard/Pages/passcode-set.qml:32
7979msgid "Cancel"
8080msgstr ""
@@ -119,18 +119,188 @@ msgctxt "Button: Restart the system"
119119msgid "Restart"
120120msgstr ""
121121
122−#: qml/Components/Lockscreen.qml:231
122+#: qml/Components/KeyboardShortcutsOverlay.qml:41
123+msgid "Keyboard Shortcuts"
124+msgstr ""
125+
126+#: qml/Components/KeyboardShortcutsOverlay.qml:55
127+msgid "Unity 8"
128+msgstr ""
129+
130+#: qml/Components/KeyboardShortcutsOverlay.qml:62
131+msgid "PrtScr"
132+msgstr ""
133+
134+#: qml/Components/KeyboardShortcutsOverlay.qml:67
135+msgid "Takes a screenshot."
136+msgstr ""
137+
138+#: qml/Components/KeyboardShortcutsOverlay.qml:75
139+msgid "Alt + PrtScr"
140+msgstr ""
141+
142+#: qml/Components/KeyboardShortcutsOverlay.qml:80
143+msgid "Takes a screenshot of a window."
144+msgstr ""
145+
146+#: qml/Components/KeyboardShortcutsOverlay.qml:88
147+msgid "Super + Space"
148+msgstr ""
149+
150+#: qml/Components/KeyboardShortcutsOverlay.qml:93
151+msgid "Switches to next keyboard layout."
152+msgstr ""
153+
154+#: qml/Components/KeyboardShortcutsOverlay.qml:101
155+msgid "Super + Shift + Space"
156+msgstr ""
157+
158+#: qml/Components/KeyboardShortcutsOverlay.qml:106
159+msgid "Switches to previous keyboard layout."
160+msgstr ""
161+
162+#: qml/Components/KeyboardShortcutsOverlay.qml:118
163+msgid "Launcher"
164+msgstr ""
165+
166+#: qml/Components/KeyboardShortcutsOverlay.qml:125
167+msgid "Super (Hold)"
168+msgstr ""
169+
170+#: qml/Components/KeyboardShortcutsOverlay.qml:130
171+msgid "Opens the launcher, displays shortcuts."
172+msgstr ""
173+
174+#: qml/Components/KeyboardShortcutsOverlay.qml:138
175+msgid "Alt + F1"
176+msgstr ""
177+
178+#: qml/Components/KeyboardShortcutsOverlay.qml:143
179+msgid "Opens launcher keyboard navigation mode."
180+msgstr ""
181+
182+#: qml/Components/KeyboardShortcutsOverlay.qml:151
183+msgid "Super + Tab"
184+msgstr ""
185+
186+#: qml/Components/KeyboardShortcutsOverlay.qml:156
187+msgid "Switches applications via the launcher."
188+msgstr ""
189+
190+#: qml/Components/KeyboardShortcutsOverlay.qml:164
191+msgid "Super + 0 to 9"
192+msgstr ""
193+
194+#: qml/Components/KeyboardShortcutsOverlay.qml:169
195+msgid "Same as clicking on a launcher icon."
196+msgstr ""
197+
198+#: qml/Components/KeyboardShortcutsOverlay.qml:181
199+msgid "Scopes"
200+msgstr ""
201+
202+#: qml/Components/KeyboardShortcutsOverlay.qml:188
203+msgid "Super (Tap)"
204+msgstr ""
205+
206+#: qml/Components/KeyboardShortcutsOverlay.qml:193
207+msgid "Opens the Scopes home."
208+msgstr ""
209+
210+#: qml/Components/KeyboardShortcutsOverlay.qml:209
211+msgid "Switching"
212+msgstr ""
213+
214+#: qml/Components/KeyboardShortcutsOverlay.qml:216
215+msgid "Alt + Tab"
216+msgstr ""
217+
218+#: qml/Components/KeyboardShortcutsOverlay.qml:221
219+msgid "Switches between applications."
220+msgstr ""
221+
222+#: qml/Components/KeyboardShortcutsOverlay.qml:229
223+msgid "Super + W"
224+msgstr ""
225+
226+#: qml/Components/KeyboardShortcutsOverlay.qml:234
227+msgid "Opens the desktop spread."
228+msgstr ""
229+
230+#: qml/Components/KeyboardShortcutsOverlay.qml:242
231+msgid "Cursor Left or Right"
232+msgstr ""
233+
234+#: qml/Components/KeyboardShortcutsOverlay.qml:247
235+msgid "Moves the focus."
236+msgstr ""
237+
238+#: qml/Components/KeyboardShortcutsOverlay.qml:259
239+msgid "Windows"
240+msgstr ""
241+
242+#: qml/Components/KeyboardShortcutsOverlay.qml:266
243+msgid "Ctrl + Super + D"
244+msgstr ""
245+
246+#: qml/Components/KeyboardShortcutsOverlay.qml:271
247+msgid "Minimizes all windows."
248+msgstr ""
249+
250+#: qml/Components/KeyboardShortcutsOverlay.qml:279
251+msgid "Ctrl + Super + Up"
252+msgstr ""
253+
254+#: qml/Components/KeyboardShortcutsOverlay.qml:284
255+msgid "Maximizes the current window."
256+msgstr ""
257+
258+#: qml/Components/KeyboardShortcutsOverlay.qml:292
259+msgid "Ctrl + Super + Down"
260+msgstr ""
261+
262+#: qml/Components/KeyboardShortcutsOverlay.qml:297
263+msgid "Minimizes or restores the current window."
264+msgstr ""
265+
266+#: qml/Components/KeyboardShortcutsOverlay.qml:305
267+msgid "Ctrl + Super + Left or Right"
268+msgstr ""
269+
270+#: qml/Components/KeyboardShortcutsOverlay.qml:310
271+msgid "Semi-maximizes the current window."
272+msgstr ""
273+
274+#: qml/Components/KeyboardShortcutsOverlay.qml:318
275+msgid "Alt + F4"
276+msgstr ""
277+
278+#: qml/Components/KeyboardShortcutsOverlay.qml:323
279+msgid "Closes the current window."
280+msgstr ""
281+
282+#: qml/Components/Lockscreen.qml:239
123283msgid "Return to Call"
124284msgstr ""
125285
126−#: qml/Components/Lockscreen.qml:231
286+#: qml/Components/Lockscreen.qml:239
127287msgid "Emergency Call"
128288msgstr "Спешно повикване"
129289
130−#: qml/Components/Lockscreen.qml:263
290+#: qml/Components/Lockscreen.qml:271
131291msgid "OK"
132292msgstr ""
133293
294+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
295+#, qt-format
296+msgid "%1:%2:%3"
297+msgstr ""
298+
299+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
300+#, qt-format
301+msgid "%1:%2"
302+msgstr ""
303+
134304#: qml/Components/ModeSwitchWarningDialog.qml:32
135305msgid "Apps may have unsaved data:"
136306msgstr ""
@@ -157,26 +327,30 @@ msgstr ""
157327msgid "Close all"
158328msgstr ""
159329
160−#: qml/Dash/DashPageHeader.qml:337
330+#: qml/Components/SharingPicker.qml:54
331+msgid "Preview Share Item"
332+msgstr ""
333+
334+#: qml/Dash/DashPageHeader.qml:333
161335msgctxt "Button: Open the Ubuntu Store"
162336msgid "Store"
163337msgstr ""
164338
165−#: qml/Dash/DashPageHeader.qml:344
339+#: qml/Dash/DashPageHeader.qml:340
166340msgctxt "Button: Start a search in the current dash scope"
167341msgid "Search"
168342msgstr ""
169343
170−#: qml/Dash/DashPageHeader.qml:354
344+#: qml/Dash/DashPageHeader.qml:350
171345msgctxt "Button: Show the current dash scope settings"
172346msgid "Settings"
173347msgstr ""
174348
175−#: qml/Dash/DashPageHeader.qml:361
349+#: qml/Dash/DashPageHeader.qml:357
176350msgid "Remove from Favorites"
177351msgstr ""
178352
179−#: qml/Dash/DashPageHeader.qml:361
353+#: qml/Dash/DashPageHeader.qml:357
180354msgid "Add to Favorites"
181355msgstr ""
182356
@@ -188,24 +362,24 @@ msgstr ""
188362msgid "Reset"
189363msgstr ""
190364
191−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
365+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
192366msgid "Show less"
193367msgstr ""
194368
195−#: qml/Dash/GenericScopeView.qml:579
369+#: qml/Dash/GenericScopeView.qml:580
196370msgid "Show all"
197371msgstr ""
198372
199−#: qml/Dash/GenericScopeView.qml:636
373+#: qml/Dash/GenericScopeView.qml:637
200374msgctxt "Label: Hint for dash search line edit"
201375msgid "Search"
202376msgstr ""
203377
204−#: qml/Dash/PageHeaderExtraPanel.qml:55
378+#: qml/Dash/PageHeaderExtraPanel.qml:56
205379msgid "Recent Searches"
206380msgstr ""
207381
208−#: qml/Dash/PageHeaderExtraPanel.qml:66
382+#: qml/Dash/PageHeaderExtraPanel.qml:67
209383msgid "Clear All"
210384msgstr ""
211385
@@ -218,22 +392,18 @@ msgid "Less..."
218392msgstr "По-малко..."
219393
220394#: qml/Dash/Previews/PreviewCommentInput.qml:68
221−#: qml/Dash/Previews/PreviewRatingInput.qml:174
395+#: qml/Dash/Previews/PreviewRatingInput.qml:175
222396msgid "Send"
223397msgstr "Изпрати"
224398
225−#: qml/Dash/Previews/PreviewRatingInput.qml:84
399+#: qml/Dash/Previews/PreviewRatingInput.qml:82
226400msgid "Rate this"
227401msgstr "Оценете това"
228402
229−#: qml/Dash/Previews/PreviewRatingInput.qml:129
403+#: qml/Dash/Previews/PreviewRatingInput.qml:157
230404msgid "Add a review"
231405msgstr "Добави отзив"
232406
233−#: qml/Dash/Previews/PreviewSharing.qml:66
234−msgid "Preview Share Item"
235−msgstr ""
236−
237407#: qml/Dash/PullToRefreshScopeStyle.qml:55
238408msgid "Pull to refresh…"
239409msgstr ""
@@ -246,88 +416,100 @@ msgstr ""
246416msgid "Enable location data"
247417msgstr ""
248418
249−#: qml/Dash/ScopesList.qml:67
419+#: qml/Dash/ScopesList.qml:55
250420msgid "Manage"
251421msgstr ""
252422
253−#: qml/Dash/ScopesList.qml:113
423+#: qml/Dash/ScopesList.qml:102
254424msgid "Home"
255425msgstr ""
256426
257−#: qml/Dash/ScopesList.qml:114
427+#: qml/Dash/ScopesList.qml:103
258428msgid "Also installed"
259429msgstr ""
260430
261−#: qml/DisabledScreenNotice.qml:104
431+#: qml/DisabledScreenNotice.qml:109
262432msgid ""
263433"Your device is now connected to an external display. Use this screen as a "
264434"touch pad to interact with the pointer."
265435msgstr ""
266436
267−#: qml/Greeter/CoverPage.qml:118
437+#: qml/Greeter/CoverPage.qml:127
268438msgid "Unlock"
269439msgstr ""
270440
271−#: qml/Greeter/LoginList.qml:239
441+#: qml/Greeter/Greeter.qml:555
442+msgid "Try again"
443+msgstr ""
444+
445+#: qml/Greeter/LoginList.qml:63
446+msgid "Passphrase"
447+msgstr ""
448+
449+#: qml/Greeter/LoginList.qml:64
450+msgid "Passcode"
451+msgstr ""
452+
453+#: qml/Greeter/LoginList.qml:87
272454msgid "Retry"
273455msgstr ""
274456
275−#: qml/Greeter/LoginList.qml:240
276−msgid "Tap to unlock"
457+#: qml/Greeter/LoginList.qml:88
458+msgid "Log In"
277459msgstr ""
278460
279−#: qml/Greeter/NarrowView.qml:54
461+#: qml/Greeter/NarrowView.qml:55
280462msgid "Sorry, incorrect passphrase."
281463msgstr ""
282464
283−#: qml/Greeter/NarrowView.qml:55
465+#: qml/Greeter/NarrowView.qml:56
284466msgid "Sorry, incorrect passcode."
285467msgstr ""
286468
287−#: qml/Greeter/NarrowView.qml:56
469+#: qml/Greeter/NarrowView.qml:57
288470msgid "This will be your last attempt."
289471msgstr ""
290472
291−#: qml/Greeter/NarrowView.qml:58
473+#: qml/Greeter/NarrowView.qml:59
292474msgid ""
293475"If passphrase is entered incorrectly, your phone will conduct a factory "
294476"reset and all personal data will be deleted."
295477msgstr ""
296478
297−#: qml/Greeter/NarrowView.qml:59
479+#: qml/Greeter/NarrowView.qml:60
298480msgid ""
299481"If passcode is entered incorrectly, your phone will conduct a factory reset "
300482"and all personal data will be deleted."
301483msgstr ""
302484
303−#: qml/Greeter/NarrowView.qml:116
485+#: qml/Greeter/NarrowView.qml:129
304486#, qt-format
305487msgid "Enter %1"
306488msgstr ""
307489
308−#: qml/Greeter/NarrowView.qml:117
490+#: qml/Greeter/NarrowView.qml:130
309491msgid "Enter passphrase"
310492msgstr ""
311493
312−#: qml/Greeter/NarrowView.qml:118
494+#: qml/Greeter/NarrowView.qml:131
313495msgid "Enter passcode"
314496msgstr ""
315497
316−#: qml/Greeter/NarrowView.qml:119
498+#: qml/Greeter/NarrowView.qml:135
317499#, qt-format
318500msgid "Sorry, incorrect %1"
319501msgstr ""
320502
321−#: qml/Greeter/NarrowView.qml:120
503+#: qml/Greeter/NarrowView.qml:136
322504msgid "Sorry, incorrect passphrase"
323505msgstr ""
324506
325−#: qml/Greeter/NarrowView.qml:121
507+#: qml/Greeter/NarrowView.qml:137
326508msgctxt "passphrase"
327509msgid "Please re-enter"
328510msgstr ""
329511
330−#: qml/Greeter/NarrowView.qml:122
512+#: qml/Greeter/NarrowView.qml:138
331513msgid "Sorry, incorrect passcode"
332514msgstr ""
333515
@@ -402,18 +584,18 @@ msgstr ""
402584msgid "Failed, tap to retry"
403585msgstr ""
404586
405−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
406−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
587+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
588+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
407589msgctxt "Button: Send a reply message"
408590msgid "Send"
409591msgstr ""
410592
411−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
593+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
412594msgctxt "Label: Hint in message indicator line edit"
413595msgid "Reply"
414596msgstr ""
415597
416−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
598+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
417599msgctxt "Button: Call back on phone"
418600msgid "Call back"
419601msgstr ""
@@ -422,32 +604,12 @@ msgstr ""
422604msgid "Drag using 3 fingers any application from one window to the other"
423605msgstr ""
424606
425−#: qml/Tutorial/TutorialBottom.qml:78
426−msgid "Swipe up to add a contact"
427−msgstr ""
428−
429−#: qml/Tutorial/TutorialBottom.qml:80
430−msgid "Swipe up for favorite calculations"
431−msgstr ""
432−
433−#: qml/Tutorial/TutorialBottom.qml:82
434−msgid "Swipe up for recent calls"
435−msgstr ""
436−
437−#: qml/Tutorial/TutorialBottom.qml:84
438−msgid "Swipe up to create a message"
439−msgstr ""
440−
441−#: qml/Tutorial/TutorialBottom.qml:85
442−msgid "Swipe up to manage the app"
443−msgstr ""
444−
445−#: qml/Tutorial/TutorialLeftLong.qml:47
607+#: qml/Tutorial/TutorialLeftLong.qml:49
446608msgid "Long swipe from the left edge to open the Today scope"
447609msgstr ""
448610
449611#: qml/Tutorial/TutorialLeft.qml:47
450−msgid "Swipe from the left edge to open the launcher"
612+msgid "Short swipe from the left edge to open the launcher"
451613msgstr ""
452614
453615#: qml/Tutorial/TutorialRight.qml:55
@@ -455,15 +617,11 @@ msgid "Push your mouse against the right edge to view your open apps"
455617msgstr ""
456618
457619#: qml/Tutorial/TutorialRight.qml:56
458−msgid "Short or long swipe from the right edge to view your open apps"
620+msgid "Swipe from the right edge to view your open apps"
459621msgstr ""
460622
461623#: qml/Tutorial/TutorialTop.qml:53
462−msgid "Swipe from the top right edge to open the notification bar"
463−msgstr ""
464−
465−#: qml/Tutorial/TutorialTop.qml:54
466−msgid "Swipe from the top edge to open the notification bar"
624+msgid "Swipe from the top edge to access notifications and quick settings"
467625msgstr ""
468626
469627#: qml/Wizard/Page.qml:54
@@ -475,11 +633,11 @@ msgstr ""
475633msgid "Language"
476634msgstr ""
477635
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
636+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
637+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
480638#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
481639#: qml/Wizard/Pages/75-report-check.qml:84
482−#: qml/Wizard/Pages/passcode-desktop.qml:124
640+#: qml/Wizard/Pages/passcode-desktop.qml:141
483641#: qml/Wizard/Pages/password-set.qml:141
484642msgid "Next"
485643msgstr ""
@@ -541,7 +699,7 @@ msgstr ""
541699msgid "Time Zone"
542700msgstr ""
543701
544−#: qml/Wizard/Pages/50-timezone.qml:178
702+#: qml/Wizard/Pages/50-timezone.qml:181
545703msgid "Enter your city"
546704msgstr ""
547705
@@ -631,7 +789,7 @@ msgid "Service Terms"
631789msgstr ""
632790
633791#: qml/Wizard/Pages/passcode-confirm.qml:43
634−#: qml/Wizard/Pages/passcode-desktop.qml:80
792+#: qml/Wizard/Pages/passcode-desktop.qml:96
635793msgid "Confirm passcode"
636794msgstr ""
637795
@@ -648,24 +806,24 @@ msgstr ""
648806msgid "Lock Screen Passcode"
649807msgstr ""
650808
651−#: qml/Wizard/Pages/passcode-desktop.qml:56
809+#: qml/Wizard/Pages/passcode-desktop.qml:60
652810msgid "Enter 4 numbers to setup your passcode"
653811msgstr ""
654812
655−#: qml/Wizard/Pages/passcode-desktop.qml:65
813+#: qml/Wizard/Pages/passcode-desktop.qml:76
656814#: qml/Wizard/Pages/passcode-set.qml:54
657815msgid "Choose passcode"
658816msgstr ""
659817
660−#: qml/Wizard/Pages/passcode-desktop.qml:105
818+#: qml/Wizard/Pages/passcode-desktop.qml:126
661819msgid "Passcode too short"
662820msgstr ""
663821
664−#: qml/Wizard/Pages/passcode-desktop.qml:107
822+#: qml/Wizard/Pages/passcode-desktop.qml:128
665823msgid "Passcodes match"
666824msgstr ""
667825
668−#: qml/Wizard/Pages/passcode-desktop.qml:109
826+#: qml/Wizard/Pages/passcode-desktop.qml:130
669827msgid "Passcodes do not match"
670828msgstr ""
671829
@@ -714,26 +872,30 @@ msgid "To proceed with no SIM tap Skip."
714872msgstr ""
715873
716874#: qml/Wizard/PasswordMeter.qml:87
717−msgid "Passwords match"
875+msgid "Password too short"
718876msgstr ""
719877
720878#: qml/Wizard/PasswordMeter.qml:89
879+msgid "Passwords match"
880+msgstr ""
881+
882+#: qml/Wizard/PasswordMeter.qml:91
721883msgid "Passwords do not match"
722884msgstr ""
723885
724−#: qml/Wizard/PasswordMeter.qml:93
886+#: qml/Wizard/PasswordMeter.qml:95
725887msgid "Strong password"
726888msgstr ""
727889
728−#: qml/Wizard/PasswordMeter.qml:95
890+#: qml/Wizard/PasswordMeter.qml:97
729891msgid "Fair password"
730892msgstr ""
731893
732−#: qml/Wizard/PasswordMeter.qml:97
894+#: qml/Wizard/PasswordMeter.qml:99
733895msgid "Weak password"
734896msgstr ""
735897
736−#: qml/Wizard/PasswordMeter.qml:99
898+#: qml/Wizard/PasswordMeter.qml:101
737899msgid "Very weak password"
738900msgstr ""
739901
po/bn.po+266−101
@@ -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-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+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,39 +15,39 @@ 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-05-19 05:49+0000\n"
19−"X-Generator: Launchpad (build 18025)\n"
18+"X-Launchpad-Export-Date: 2016-07-14 06:00+0000\n"
19+"X-Generator: Launchpad (build 18115)\n"
2020
21−#: plugins/IntegratedLightDM/Greeter.cpp:112
21+#: plugins/LightDM/Greeter.cpp:123
2222msgid "Password: "
2323msgstr "পাসওয়ার্ড: "
2424
25−#: plugins/Unity/Launcher/launcheritem.cpp:48
26−#: plugins/Unity/Launcher/launcheritem.cpp:107
25+#: plugins/Unity/Launcher/launcheritem.cpp:49
26+#: plugins/Unity/Launcher/launcheritem.cpp:108
2727msgid "Pin shortcut"
2828msgstr "পিন"
2929
30−#: plugins/Unity/Launcher/launcheritem.cpp:53
30+#: plugins/Unity/Launcher/launcheritem.cpp:54
3131msgid "Quit"
3232msgstr ""
3333
34−#: plugins/Unity/Launcher/launcheritem.cpp:107
34+#: plugins/Unity/Launcher/launcheritem.cpp:108
3535msgid "Unpin shortcut"
3636msgstr "আনপিন"
3737
38−#: qml/Components/DelayedLockscreen.qml:49
38+#: qml/Components/DelayedLockscreen.qml:50
3939msgid "Device Locked"
4040msgstr "ডিভাইসটি লক করা"
4141
42−#: qml/Components/DelayedLockscreen.qml:64
42+#: qml/Components/DelayedLockscreen.qml:65
4343msgid "You have been locked out due to too many failed passphrase attempts."
4444msgstr "অধিকবার পাসফ্রেজ ভুল দেওয়ার কারনে আপনার আইডি লক করা হয়েছে"
4545
46−#: qml/Components/DelayedLockscreen.qml:65
46+#: qml/Components/DelayedLockscreen.qml:66
4747msgid "You have been locked out due to too many failed passcode attempts."
4848msgstr "অধিকবার পাসকোড ভুল করার কারনে আপনার আইডি লক করা হয়েছে"
4949
50−#: qml/Components/DelayedLockscreen.qml:74
50+#: qml/Components/DelayedLockscreen.qml:75
5151#, qt-format
5252msgid "Please wait %1 minute and then try again…"
5353msgid_plural "Please wait %1 minutes and then try again…"
@@ -74,7 +74,7 @@ msgid "Log Out"
7474msgstr ""
7575
7676#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
77−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
77+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
7878#: qml/Wizard/Pages/passcode-set.qml:32
7979msgid "Cancel"
8080msgstr "বাতিল"
@@ -119,18 +119,188 @@ msgctxt "Button: Restart the system"
119119msgid "Restart"
120120msgstr "পুনরায় চালু"
121121
122−#: qml/Components/Lockscreen.qml:231
122+#: qml/Components/KeyboardShortcutsOverlay.qml:41
123+msgid "Keyboard Shortcuts"
124+msgstr ""
125+
126+#: qml/Components/KeyboardShortcutsOverlay.qml:55
127+msgid "Unity 8"
128+msgstr ""
129+
130+#: qml/Components/KeyboardShortcutsOverlay.qml:62
131+msgid "PrtScr"
132+msgstr ""
133+
134+#: qml/Components/KeyboardShortcutsOverlay.qml:67
135+msgid "Takes a screenshot."
136+msgstr ""
137+
138+#: qml/Components/KeyboardShortcutsOverlay.qml:75
139+msgid "Alt + PrtScr"
140+msgstr ""
141+
142+#: qml/Components/KeyboardShortcutsOverlay.qml:80
143+msgid "Takes a screenshot of a window."
144+msgstr ""
145+
146+#: qml/Components/KeyboardShortcutsOverlay.qml:88
147+msgid "Super + Space"
148+msgstr ""
149+
150+#: qml/Components/KeyboardShortcutsOverlay.qml:93
151+msgid "Switches to next keyboard layout."
152+msgstr ""
153+
154+#: qml/Components/KeyboardShortcutsOverlay.qml:101
155+msgid "Super + Shift + Space"
156+msgstr ""
157+
158+#: qml/Components/KeyboardShortcutsOverlay.qml:106
159+msgid "Switches to previous keyboard layout."
160+msgstr ""
161+
162+#: qml/Components/KeyboardShortcutsOverlay.qml:118
163+msgid "Launcher"
164+msgstr ""
165+
166+#: qml/Components/KeyboardShortcutsOverlay.qml:125
167+msgid "Super (Hold)"
168+msgstr ""
169+
170+#: qml/Components/KeyboardShortcutsOverlay.qml:130
171+msgid "Opens the launcher, displays shortcuts."
172+msgstr ""
173+
174+#: qml/Components/KeyboardShortcutsOverlay.qml:138
175+msgid "Alt + F1"
176+msgstr ""
177+
178+#: qml/Components/KeyboardShortcutsOverlay.qml:143
179+msgid "Opens launcher keyboard navigation mode."
180+msgstr ""
181+
182+#: qml/Components/KeyboardShortcutsOverlay.qml:151
183+msgid "Super + Tab"
184+msgstr ""
185+
186+#: qml/Components/KeyboardShortcutsOverlay.qml:156
187+msgid "Switches applications via the launcher."
188+msgstr ""
189+
190+#: qml/Components/KeyboardShortcutsOverlay.qml:164
191+msgid "Super + 0 to 9"
192+msgstr ""
193+
194+#: qml/Components/KeyboardShortcutsOverlay.qml:169
195+msgid "Same as clicking on a launcher icon."
196+msgstr ""
197+
198+#: qml/Components/KeyboardShortcutsOverlay.qml:181
199+msgid "Scopes"
200+msgstr ""
201+
202+#: qml/Components/KeyboardShortcutsOverlay.qml:188
203+msgid "Super (Tap)"
204+msgstr ""
205+
206+#: qml/Components/KeyboardShortcutsOverlay.qml:193
207+msgid "Opens the Scopes home."
208+msgstr ""
209+
210+#: qml/Components/KeyboardShortcutsOverlay.qml:209
211+msgid "Switching"
212+msgstr ""
213+
214+#: qml/Components/KeyboardShortcutsOverlay.qml:216
215+msgid "Alt + Tab"
216+msgstr ""
217+
218+#: qml/Components/KeyboardShortcutsOverlay.qml:221
219+msgid "Switches between applications."
220+msgstr ""
221+
222+#: qml/Components/KeyboardShortcutsOverlay.qml:229
223+msgid "Super + W"
224+msgstr ""
225+
226+#: qml/Components/KeyboardShortcutsOverlay.qml:234
227+msgid "Opens the desktop spread."
228+msgstr ""
229+
230+#: qml/Components/KeyboardShortcutsOverlay.qml:242
231+msgid "Cursor Left or Right"
232+msgstr ""
233+
234+#: qml/Components/KeyboardShortcutsOverlay.qml:247
235+msgid "Moves the focus."
236+msgstr ""
237+
238+#: qml/Components/KeyboardShortcutsOverlay.qml:259
239+msgid "Windows"
240+msgstr ""
241+
242+#: qml/Components/KeyboardShortcutsOverlay.qml:266
243+msgid "Ctrl + Super + D"
244+msgstr ""
245+
246+#: qml/Components/KeyboardShortcutsOverlay.qml:271
247+msgid "Minimizes all windows."
248+msgstr ""
249+
250+#: qml/Components/KeyboardShortcutsOverlay.qml:279
251+msgid "Ctrl + Super + Up"
252+msgstr ""
253+
254+#: qml/Components/KeyboardShortcutsOverlay.qml:284
255+msgid "Maximizes the current window."
256+msgstr ""
257+
258+#: qml/Components/KeyboardShortcutsOverlay.qml:292
259+msgid "Ctrl + Super + Down"
260+msgstr ""
261+
262+#: qml/Components/KeyboardShortcutsOverlay.qml:297
263+msgid "Minimizes or restores the current window."
264+msgstr ""
265+
266+#: qml/Components/KeyboardShortcutsOverlay.qml:305
267+msgid "Ctrl + Super + Left or Right"
268+msgstr ""
269+
270+#: qml/Components/KeyboardShortcutsOverlay.qml:310
271+msgid "Semi-maximizes the current window."
272+msgstr ""
273+
274+#: qml/Components/KeyboardShortcutsOverlay.qml:318
275+msgid "Alt + F4"
276+msgstr ""
277+
278+#: qml/Components/KeyboardShortcutsOverlay.qml:323
279+msgid "Closes the current window."
280+msgstr ""
281+
282+#: qml/Components/Lockscreen.qml:239
123283msgid "Return to Call"
124284msgstr "কল এ ফিরে যান"
125285
126−#: qml/Components/Lockscreen.qml:231
286+#: qml/Components/Lockscreen.qml:239
127287msgid "Emergency Call"
128288msgstr "জরুরী কল"
129289
130−#: qml/Components/Lockscreen.qml:263
290+#: qml/Components/Lockscreen.qml:271
131291msgid "OK"
132292msgstr "ঠিক আছে"
133293
294+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
295+#, qt-format
296+msgid "%1:%2:%3"
297+msgstr ""
298+
299+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
300+#, qt-format
301+msgid "%1:%2"
302+msgstr ""
303+
134304#: qml/Components/ModeSwitchWarningDialog.qml:32
135305msgid "Apps may have unsaved data:"
136306msgstr ""
@@ -157,26 +327,30 @@ msgstr ""
157327msgid "Close all"
158328msgstr ""
159329
160−#: qml/Dash/DashPageHeader.qml:337
330+#: qml/Components/SharingPicker.qml:54
331+msgid "Preview Share Item"
332+msgstr ""
333+
334+#: qml/Dash/DashPageHeader.qml:333
161335msgctxt "Button: Open the Ubuntu Store"
162336msgid "Store"
163337msgstr "স্টোর"
164338
165−#: qml/Dash/DashPageHeader.qml:344
339+#: qml/Dash/DashPageHeader.qml:340
166340msgctxt "Button: Start a search in the current dash scope"
167341msgid "Search"
168342msgstr "খুঁজুন"
169343
170−#: qml/Dash/DashPageHeader.qml:354
344+#: qml/Dash/DashPageHeader.qml:350
171345msgctxt "Button: Show the current dash scope settings"
172346msgid "Settings"
173347msgstr "সেটিংস"
174348
175−#: qml/Dash/DashPageHeader.qml:361
349+#: qml/Dash/DashPageHeader.qml:357
176350msgid "Remove from Favorites"
177351msgstr "পছন্দ থেকে মুছে ফেলুন"
178352
179−#: qml/Dash/DashPageHeader.qml:361
353+#: qml/Dash/DashPageHeader.qml:357
180354msgid "Add to Favorites"
181355msgstr "পছন্দতে যোগ করুন"
182356
@@ -188,24 +362,24 @@ msgstr ""
188362msgid "Reset"
189363msgstr ""
190364
191−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
365+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
192366msgid "Show less"
193367msgstr ""
194368
195−#: qml/Dash/GenericScopeView.qml:579
369+#: qml/Dash/GenericScopeView.qml:580
196370msgid "Show all"
197371msgstr ""
198372
199−#: qml/Dash/GenericScopeView.qml:636
373+#: qml/Dash/GenericScopeView.qml:637
200374msgctxt "Label: Hint for dash search line edit"
201375msgid "Search"
202376msgstr "খুঁজুন"
203377
204−#: qml/Dash/PageHeaderExtraPanel.qml:55
378+#: qml/Dash/PageHeaderExtraPanel.qml:56
205379msgid "Recent Searches"
206380msgstr ""
207381
208−#: qml/Dash/PageHeaderExtraPanel.qml:66
382+#: qml/Dash/PageHeaderExtraPanel.qml:67
209383msgid "Clear All"
210384msgstr ""
211385
@@ -218,22 +392,18 @@ msgid "Less..."
218392msgstr "কম..."
219393
220394#: qml/Dash/Previews/PreviewCommentInput.qml:68
221−#: qml/Dash/Previews/PreviewRatingInput.qml:174
395+#: qml/Dash/Previews/PreviewRatingInput.qml:175
222396msgid "Send"
223397msgstr "পাঠান"
224398
225−#: qml/Dash/Previews/PreviewRatingInput.qml:84
399+#: qml/Dash/Previews/PreviewRatingInput.qml:82
226400msgid "Rate this"
227401msgstr "রেটিং দিন"
228402
229−#: qml/Dash/Previews/PreviewRatingInput.qml:129
403+#: qml/Dash/Previews/PreviewRatingInput.qml:157
230404msgid "Add a review"
231405msgstr "আপনার মতামত দিন"
232406
233−#: qml/Dash/Previews/PreviewSharing.qml:66
234−msgid "Preview Share Item"
235−msgstr ""
236−
237407#: qml/Dash/PullToRefreshScopeStyle.qml:55
238408msgid "Pull to refresh…"
239409msgstr "রিফ্রেশ করার জন্য টানুন"
@@ -246,89 +416,101 @@ msgstr "রিফ্রেশ করার জন্য ছেড়ে দিন"
246416msgid "Enable location data"
247417msgstr "অবস্থান নির্ণয় চালু করুন"
248418
249−#: qml/Dash/ScopesList.qml:67
419+#: qml/Dash/ScopesList.qml:55
250420msgid "Manage"
251421msgstr "ব্যবস্থাপনা"
252422
253−#: qml/Dash/ScopesList.qml:113
423+#: qml/Dash/ScopesList.qml:102
254424msgid "Home"
255425msgstr ""
256426
257−#: qml/Dash/ScopesList.qml:114
427+#: qml/Dash/ScopesList.qml:103
258428msgid "Also installed"
259429msgstr "আরও ইন্সটল করা রয়েছে..."
260430
261−#: qml/DisabledScreenNotice.qml:104
431+#: qml/DisabledScreenNotice.qml:109
262432msgid ""
263433"Your device is now connected to an external display. Use this screen as a "
264434"touch pad to interact with the pointer."
265435msgstr ""
266436
267−#: qml/Greeter/CoverPage.qml:118
437+#: qml/Greeter/CoverPage.qml:127
268438msgid "Unlock"
269439msgstr "লক খুলুন"
270440
271−#: qml/Greeter/LoginList.qml:239
441+#: qml/Greeter/Greeter.qml:555
442+msgid "Try again"
443+msgstr ""
444+
445+#: qml/Greeter/LoginList.qml:63
446+msgid "Passphrase"
447+msgstr ""
448+
449+#: qml/Greeter/LoginList.qml:64
450+msgid "Passcode"
451+msgstr ""
452+
453+#: qml/Greeter/LoginList.qml:87
272454msgid "Retry"
273455msgstr ""
274456
275−#: qml/Greeter/LoginList.qml:240
276−msgid "Tap to unlock"
277−msgstr "লক খোলার জন্য চাপ দিন"
457+#: qml/Greeter/LoginList.qml:88
458+msgid "Log In"
459+msgstr ""
278460
279−#: qml/Greeter/NarrowView.qml:54
461+#: qml/Greeter/NarrowView.qml:55
280462msgid "Sorry, incorrect passphrase."
281463msgstr "দুঃখিত, পাসওয়ার্ডটি ভুল হয়েছে।"
282464
283−#: qml/Greeter/NarrowView.qml:55
465+#: qml/Greeter/NarrowView.qml:56
284466msgid "Sorry, incorrect passcode."
285467msgstr "দুঃখিত, পাসকোডটি ভুল হয়েছে।"
286468
287−#: qml/Greeter/NarrowView.qml:56
469+#: qml/Greeter/NarrowView.qml:57
288470msgid "This will be your last attempt."
289471msgstr "এটিই আপনার সর্বশেষ সুযোগ।"
290472
291−#: qml/Greeter/NarrowView.qml:58
473+#: qml/Greeter/NarrowView.qml:59
292474msgid ""
293475"If passphrase is entered incorrectly, your phone will conduct a factory "
294476"reset and all personal data will be deleted."
295477msgstr ""
296478"ভুল পাসওয়ার্ড প্রদান করলে, আপনার ফোনটিতে থাকা সকল ব্যক্তিগত তথ্য মুছে যাবে।"
297479
298−#: qml/Greeter/NarrowView.qml:59
480+#: qml/Greeter/NarrowView.qml:60
299481msgid ""
300482"If passcode is entered incorrectly, your phone will conduct a factory reset "
301483"and all personal data will be deleted."
302484msgstr "ভুল পাসকোড প্রদান করলে, আপনার ফোনটির সকল ব্যক্তিগত তথ্য মুছে যাবে।"
303485
304−#: qml/Greeter/NarrowView.qml:116
486+#: qml/Greeter/NarrowView.qml:129
305487#, qt-format
306488msgid "Enter %1"
307489msgstr "%1 লিখুন"
308490
309−#: qml/Greeter/NarrowView.qml:117
491+#: qml/Greeter/NarrowView.qml:130
310492msgid "Enter passphrase"
311493msgstr "পাসওয়ার্ড লিখুন"
312494
313−#: qml/Greeter/NarrowView.qml:118
495+#: qml/Greeter/NarrowView.qml:131
314496msgid "Enter passcode"
315497msgstr "পাসকোড লিখুন"
316498
317−#: qml/Greeter/NarrowView.qml:119
499+#: qml/Greeter/NarrowView.qml:135
318500#, qt-format
319501msgid "Sorry, incorrect %1"
320502msgstr "দুঃখিত, %1 ভুল হয়েছে"
321503
322−#: qml/Greeter/NarrowView.qml:120
504+#: qml/Greeter/NarrowView.qml:136
323505msgid "Sorry, incorrect passphrase"
324506msgstr "দুঃখিত, পাসওয়ার্ড ভুল হয়েছে"
325507
326−#: qml/Greeter/NarrowView.qml:121
508+#: qml/Greeter/NarrowView.qml:137
327509msgctxt "passphrase"
328510msgid "Please re-enter"
329511msgstr "অনুগ্রহ করে আবার লিখুন"
330512
331−#: qml/Greeter/NarrowView.qml:122
513+#: qml/Greeter/NarrowView.qml:138
332514msgid "Sorry, incorrect passcode"
333515msgstr "দুঃখিত, পাসকোড ভুল হয়েছে"
334516
@@ -403,18 +585,18 @@ msgstr "শেষ"
403585msgid "Failed, tap to retry"
404586msgstr "ব্যার্থ হয়েছে, পুনরায় চেষ্টা করতে চাপ দিন"
405587
406−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
407−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
588+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
589+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
408590msgctxt "Button: Send a reply message"
409591msgid "Send"
410592msgstr ""
411593
412−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
594+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
413595msgctxt "Label: Hint in message indicator line edit"
414596msgid "Reply"
415597msgstr "উত্তর দিন"
416598
417−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
599+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
418600msgctxt "Button: Call back on phone"
419601msgid "Call back"
420602msgstr "কল ব্যাক"
@@ -423,32 +605,12 @@ msgstr "কল ব্যাক"
423605msgid "Drag using 3 fingers any application from one window to the other"
424606msgstr ""
425607
426−#: qml/Tutorial/TutorialBottom.qml:78
427−msgid "Swipe up to add a contact"
428−msgstr ""
429−
430−#: qml/Tutorial/TutorialBottom.qml:80
431−msgid "Swipe up for favorite calculations"
432−msgstr ""
433−
434−#: qml/Tutorial/TutorialBottom.qml:82
435−msgid "Swipe up for recent calls"
436−msgstr ""
437−
438−#: qml/Tutorial/TutorialBottom.qml:84
439−msgid "Swipe up to create a message"
440−msgstr ""
441−
442−#: qml/Tutorial/TutorialBottom.qml:85
443−msgid "Swipe up to manage the app"
444−msgstr ""
445−
446−#: qml/Tutorial/TutorialLeftLong.qml:47
608+#: qml/Tutorial/TutorialLeftLong.qml:49
447609msgid "Long swipe from the left edge to open the Today scope"
448610msgstr ""
449611
450612#: qml/Tutorial/TutorialLeft.qml:47
451−msgid "Swipe from the left edge to open the launcher"
613+msgid "Short swipe from the left edge to open the launcher"
452614msgstr ""
453615
454616#: qml/Tutorial/TutorialRight.qml:55
@@ -456,15 +618,11 @@ msgid "Push your mouse against the right edge to view your open apps"
456618msgstr ""
457619
458620#: qml/Tutorial/TutorialRight.qml:56
459−msgid "Short or long swipe from the right edge to view your open apps"
621+msgid "Swipe from the right edge to view your open apps"
460622msgstr ""
461623
462624#: qml/Tutorial/TutorialTop.qml:53
463−msgid "Swipe from the top right edge to open the notification bar"
464−msgstr ""
465−
466−#: qml/Tutorial/TutorialTop.qml:54
467−msgid "Swipe from the top edge to open the notification bar"
625+msgid "Swipe from the top edge to access notifications and quick settings"
468626msgstr ""
469627
470628#: qml/Wizard/Page.qml:54
@@ -476,11 +634,11 @@ msgstr ""
476634msgid "Language"
477635msgstr ""
478636
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
637+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
638+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
481639#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
482640#: qml/Wizard/Pages/75-report-check.qml:84
483−#: qml/Wizard/Pages/passcode-desktop.qml:124
641+#: qml/Wizard/Pages/passcode-desktop.qml:141
484642#: qml/Wizard/Pages/password-set.qml:141
485643msgid "Next"
486644msgstr ""
@@ -542,7 +700,7 @@ msgstr ""
542700msgid "Time Zone"
543701msgstr ""
544702
545−#: qml/Wizard/Pages/50-timezone.qml:178
703+#: qml/Wizard/Pages/50-timezone.qml:181
546704msgid "Enter your city"
547705msgstr ""
548706
@@ -632,7 +790,7 @@ msgid "Service Terms"
632790msgstr ""
633791
634792#: qml/Wizard/Pages/passcode-confirm.qml:43
635−#: qml/Wizard/Pages/passcode-desktop.qml:80
793+#: qml/Wizard/Pages/passcode-desktop.qml:96
636794msgid "Confirm passcode"
637795msgstr ""
638796
@@ -649,24 +807,24 @@ msgstr ""
649807msgid "Lock Screen Passcode"
650808msgstr ""
651809
652−#: qml/Wizard/Pages/passcode-desktop.qml:56
810+#: qml/Wizard/Pages/passcode-desktop.qml:60
653811msgid "Enter 4 numbers to setup your passcode"
654812msgstr ""
655813
656−#: qml/Wizard/Pages/passcode-desktop.qml:65
814+#: qml/Wizard/Pages/passcode-desktop.qml:76
657815#: qml/Wizard/Pages/passcode-set.qml:54
658816msgid "Choose passcode"
659817msgstr ""
660818
661−#: qml/Wizard/Pages/passcode-desktop.qml:105
819+#: qml/Wizard/Pages/passcode-desktop.qml:126
662820msgid "Passcode too short"
663821msgstr ""
664822
665−#: qml/Wizard/Pages/passcode-desktop.qml:107
823+#: qml/Wizard/Pages/passcode-desktop.qml:128
666824msgid "Passcodes match"
667825msgstr ""
668826
669−#: qml/Wizard/Pages/passcode-desktop.qml:109
827+#: qml/Wizard/Pages/passcode-desktop.qml:130
670828msgid "Passcodes do not match"
671829msgstr ""
672830
@@ -715,26 +873,30 @@ msgid "To proceed with no SIM tap Skip."
715873msgstr ""
716874
717875#: qml/Wizard/PasswordMeter.qml:87
718−msgid "Passwords match"
876+msgid "Password too short"
719877msgstr ""
720878
721879#: qml/Wizard/PasswordMeter.qml:89
880+msgid "Passwords match"
881+msgstr ""
882+
883+#: qml/Wizard/PasswordMeter.qml:91
722884msgid "Passwords do not match"
723885msgstr ""
724886
725−#: qml/Wizard/PasswordMeter.qml:93
887+#: qml/Wizard/PasswordMeter.qml:95
726888msgid "Strong password"
727889msgstr ""
728890
729−#: qml/Wizard/PasswordMeter.qml:95
891+#: qml/Wizard/PasswordMeter.qml:97
730892msgid "Fair password"
731893msgstr ""
732894
733−#: qml/Wizard/PasswordMeter.qml:97
895+#: qml/Wizard/PasswordMeter.qml:99
734896msgid "Weak password"
735897msgstr ""
736898
737−#: qml/Wizard/PasswordMeter.qml:99
899+#: qml/Wizard/PasswordMeter.qml:101
738900msgid "Very weak password"
739901msgstr ""
740902
@@ -860,6 +1022,9 @@ msgstr ""
8601022#~ msgid "Shut down"
8611023#~ msgstr "বন্ধ করুন"
8621024
1025+#~ msgid "Tap to unlock"
1026+#~ msgstr "লক খোলার জন্য চাপ দিন"
1027+
8631028#~ msgid "Let’s get started."
8641029#~ msgstr "আসুন শুরু করা যাক।"
8651030
po/br.po+272−101
@@ -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-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+0000\n"
1111"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"
@@ -15,43 +15,43 @@ 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-05-19 05:49+0000\n"
19−"X-Generator: Launchpad (build 18025)\n"
18+"X-Launchpad-Export-Date: 2016-07-14 06:00+0000\n"
19+"X-Generator: Launchpad (build 18115)\n"
2020
21−#: plugins/IntegratedLightDM/Greeter.cpp:112
21+#: plugins/LightDM/Greeter.cpp:123
2222msgid "Password: "
2323msgstr "Ger-tremen : "
2424
25−#: plugins/Unity/Launcher/launcheritem.cpp:48
26−#: plugins/Unity/Launcher/launcheritem.cpp:107
25+#: plugins/Unity/Launcher/launcheritem.cpp:49
26+#: plugins/Unity/Launcher/launcheritem.cpp:108
2727msgid "Pin shortcut"
2828msgstr "Spilhennañ ar verradenn"
2929
30−#: plugins/Unity/Launcher/launcheritem.cpp:53
30+#: plugins/Unity/Launcher/launcheritem.cpp:54
3131msgid "Quit"
3232msgstr "Mont kuit"
3333
34−#: plugins/Unity/Launcher/launcheritem.cpp:107
34+#: plugins/Unity/Launcher/launcheritem.cpp:108
3535msgid "Unpin shortcut"
3636msgstr "Dispilhennañ ar verradenn"
3737
38−#: qml/Components/DelayedLockscreen.qml:49
38+#: qml/Components/DelayedLockscreen.qml:50
3939msgid "Device Locked"
4040msgstr "Benveg prennet"
4141
42−#: qml/Components/DelayedLockscreen.qml:64
42+#: qml/Components/DelayedLockscreen.qml:65
4343msgid "You have been locked out due to too many failed passphrase attempts."
4444msgstr ""
4545"Prennet eo bet ho penveg abalamour da re a daolioù-esae c'hwitet evit merkañ "
4646"ho frazenn-dremen."
4747
48−#: qml/Components/DelayedLockscreen.qml:65
48+#: qml/Components/DelayedLockscreen.qml:66
4949msgid "You have been locked out due to too many failed passcode attempts."
5050msgstr ""
5151"Prennet eo bet ho penveg abalamour da re a daolioù-esae evit merkañ ho kod-"
5252"tremen."
5353
54−#: qml/Components/DelayedLockscreen.qml:74
54+#: qml/Components/DelayedLockscreen.qml:75
5555#, qt-format
5656msgid "Please wait %1 minute and then try again…"
5757msgid_plural "Please wait %1 minutes and then try again…"
@@ -78,7 +78,7 @@ msgid "Log Out"
7878msgstr "Digevreañ"
7979
8080#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
81−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
81+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
8282#: qml/Wizard/Pages/passcode-set.qml:32
8383msgid "Cancel"
8484msgstr "Nullañ"
@@ -123,18 +123,188 @@ msgctxt "Button: Restart the system"
123123msgid "Restart"
124124msgstr "Adloc'hañ"
125125
126−#: qml/Components/Lockscreen.qml:231
126+#: qml/Components/KeyboardShortcutsOverlay.qml:41
127+msgid "Keyboard Shortcuts"
128+msgstr ""
129+
130+#: qml/Components/KeyboardShortcutsOverlay.qml:55
131+msgid "Unity 8"
132+msgstr ""
133+
134+#: qml/Components/KeyboardShortcutsOverlay.qml:62
135+msgid "PrtScr"
136+msgstr ""
137+
138+#: qml/Components/KeyboardShortcutsOverlay.qml:67
139+msgid "Takes a screenshot."
140+msgstr ""
141+
142+#: qml/Components/KeyboardShortcutsOverlay.qml:75
143+msgid "Alt + PrtScr"
144+msgstr ""
145+
146+#: qml/Components/KeyboardShortcutsOverlay.qml:80
147+msgid "Takes a screenshot of a window."
148+msgstr ""
149+
150+#: qml/Components/KeyboardShortcutsOverlay.qml:88
151+msgid "Super + Space"
152+msgstr ""
153+
154+#: qml/Components/KeyboardShortcutsOverlay.qml:93
155+msgid "Switches to next keyboard layout."
156+msgstr ""
157+
158+#: qml/Components/KeyboardShortcutsOverlay.qml:101
159+msgid "Super + Shift + Space"
160+msgstr ""
161+
162+#: qml/Components/KeyboardShortcutsOverlay.qml:106
163+msgid "Switches to previous keyboard layout."
164+msgstr ""
165+
166+#: qml/Components/KeyboardShortcutsOverlay.qml:118
167+msgid "Launcher"
168+msgstr ""
169+
170+#: qml/Components/KeyboardShortcutsOverlay.qml:125
171+msgid "Super (Hold)"
172+msgstr ""
173+
174+#: qml/Components/KeyboardShortcutsOverlay.qml:130
175+msgid "Opens the launcher, displays shortcuts."
176+msgstr ""
177+
178+#: qml/Components/KeyboardShortcutsOverlay.qml:138
179+msgid "Alt + F1"
180+msgstr ""
181+
182+#: qml/Components/KeyboardShortcutsOverlay.qml:143
183+msgid "Opens launcher keyboard navigation mode."
184+msgstr ""
185+
186+#: qml/Components/KeyboardShortcutsOverlay.qml:151
187+msgid "Super + Tab"
188+msgstr ""
189+
190+#: qml/Components/KeyboardShortcutsOverlay.qml:156
191+msgid "Switches applications via the launcher."
192+msgstr ""
193+
194+#: qml/Components/KeyboardShortcutsOverlay.qml:164
195+msgid "Super + 0 to 9"
196+msgstr ""
197+
198+#: qml/Components/KeyboardShortcutsOverlay.qml:169
199+msgid "Same as clicking on a launcher icon."
200+msgstr ""
201+
202+#: qml/Components/KeyboardShortcutsOverlay.qml:181
203+msgid "Scopes"
204+msgstr ""
205+
206+#: qml/Components/KeyboardShortcutsOverlay.qml:188
207+msgid "Super (Tap)"
208+msgstr ""
209+
210+#: qml/Components/KeyboardShortcutsOverlay.qml:193
211+msgid "Opens the Scopes home."
212+msgstr ""
213+
214+#: qml/Components/KeyboardShortcutsOverlay.qml:209
215+msgid "Switching"
216+msgstr ""
217+
218+#: qml/Components/KeyboardShortcutsOverlay.qml:216
219+msgid "Alt + Tab"
220+msgstr ""
221+
222+#: qml/Components/KeyboardShortcutsOverlay.qml:221
223+msgid "Switches between applications."
224+msgstr ""
225+
226+#: qml/Components/KeyboardShortcutsOverlay.qml:229
227+msgid "Super + W"
228+msgstr ""
229+
230+#: qml/Components/KeyboardShortcutsOverlay.qml:234
231+msgid "Opens the desktop spread."
232+msgstr ""
233+
234+#: qml/Components/KeyboardShortcutsOverlay.qml:242
235+msgid "Cursor Left or Right"
236+msgstr ""
237+
238+#: qml/Components/KeyboardShortcutsOverlay.qml:247
239+msgid "Moves the focus."
240+msgstr ""
241+
242+#: qml/Components/KeyboardShortcutsOverlay.qml:259
243+msgid "Windows"
244+msgstr ""
245+
246+#: qml/Components/KeyboardShortcutsOverlay.qml:266
247+msgid "Ctrl + Super + D"
248+msgstr ""
249+
250+#: qml/Components/KeyboardShortcutsOverlay.qml:271
251+msgid "Minimizes all windows."
252+msgstr ""
253+
254+#: qml/Components/KeyboardShortcutsOverlay.qml:279
255+msgid "Ctrl + Super + Up"
256+msgstr ""
257+
258+#: qml/Components/KeyboardShortcutsOverlay.qml:284
259+msgid "Maximizes the current window."
260+msgstr ""
261+
262+#: qml/Components/KeyboardShortcutsOverlay.qml:292
263+msgid "Ctrl + Super + Down"
264+msgstr ""
265+
266+#: qml/Components/KeyboardShortcutsOverlay.qml:297
267+msgid "Minimizes or restores the current window."
268+msgstr ""
269+
270+#: qml/Components/KeyboardShortcutsOverlay.qml:305
271+msgid "Ctrl + Super + Left or Right"
272+msgstr ""
273+
274+#: qml/Components/KeyboardShortcutsOverlay.qml:310
275+msgid "Semi-maximizes the current window."
276+msgstr ""
277+
278+#: qml/Components/KeyboardShortcutsOverlay.qml:318
279+msgid "Alt + F4"
280+msgstr ""
281+
282+#: qml/Components/KeyboardShortcutsOverlay.qml:323
283+msgid "Closes the current window."
284+msgstr ""
285+
286+#: qml/Components/Lockscreen.qml:239
127287msgid "Return to Call"
128288msgstr "Distreiñ d'ar bellgomzadenn"
129289
130−#: qml/Components/Lockscreen.qml:231
290+#: qml/Components/Lockscreen.qml:239
131291msgid "Emergency Call"
132292msgstr "Pellgomzadenn vallus"
133293
134−#: qml/Components/Lockscreen.qml:263
294+#: qml/Components/Lockscreen.qml:271
135295msgid "OK"
136296msgstr "Mat eo"
137297
298+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
299+#, qt-format
300+msgid "%1:%2:%3"
301+msgstr ""
302+
303+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
304+#, qt-format
305+msgid "%1:%2"
306+msgstr ""
307+
138308#: qml/Components/ModeSwitchWarningDialog.qml:32
139309msgid "Apps may have unsaved data:"
140310msgstr "Roadennoù ha n'int ket enrollet a c'hall bezañ gant an arloadoù :"
@@ -164,26 +334,30 @@ msgstr "Adkevreañ bremañ !"
164334msgid "Close all"
165335msgstr "Serriñ pep tra"
166336
167−#: qml/Dash/DashPageHeader.qml:337
337+#: qml/Components/SharingPicker.qml:54
338+msgid "Preview Share Item"
339+msgstr "Rakwelet an elfenn lodet"
340+
341+#: qml/Dash/DashPageHeader.qml:333
168342msgctxt "Button: Open the Ubuntu Store"
169343msgid "Store"
170344msgstr "Stal"
171345
172−#: qml/Dash/DashPageHeader.qml:344
346+#: qml/Dash/DashPageHeader.qml:340
173347msgctxt "Button: Start a search in the current dash scope"
174348msgid "Search"
175349msgstr "Klask"
176350
177−#: qml/Dash/DashPageHeader.qml:354
351+#: qml/Dash/DashPageHeader.qml:350
178352msgctxt "Button: Show the current dash scope settings"
179353msgid "Settings"
180354msgstr "Arventennoù"
181355
182−#: qml/Dash/DashPageHeader.qml:361
356+#: qml/Dash/DashPageHeader.qml:357
183357msgid "Remove from Favorites"
184358msgstr "Lemel eus ar sinedoù"
185359
186−#: qml/Dash/DashPageHeader.qml:361
360+#: qml/Dash/DashPageHeader.qml:357
187361msgid "Add to Favorites"
188362msgstr "Ouzhpennañ d'ar sinedoù"
189363
@@ -195,24 +369,24 @@ msgstr "Purañ ho tisoc'hoù"
195369msgid "Reset"
196370msgstr "Adderaouekaat"
197371
198−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
372+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
199373msgid "Show less"
200374msgstr ""
201375
202−#: qml/Dash/GenericScopeView.qml:579
376+#: qml/Dash/GenericScopeView.qml:580
203377msgid "Show all"
204378msgstr ""
205379
206−#: qml/Dash/GenericScopeView.qml:636
380+#: qml/Dash/GenericScopeView.qml:637
207381msgctxt "Label: Hint for dash search line edit"
208382msgid "Search"
209383msgstr "Klask"
210384
211−#: qml/Dash/PageHeaderExtraPanel.qml:55
385+#: qml/Dash/PageHeaderExtraPanel.qml:56
212386msgid "Recent Searches"
213387msgstr "Enklaskoù graet nevez zo"
214388
215−#: qml/Dash/PageHeaderExtraPanel.qml:66
389+#: qml/Dash/PageHeaderExtraPanel.qml:67
216390msgid "Clear All"
217391msgstr "Diverkañ pep tra"
218392
@@ -225,22 +399,18 @@ msgid "Less..."
225399msgstr "Nebeutoc'h..."
226400
227401#: qml/Dash/Previews/PreviewCommentInput.qml:68
228−#: qml/Dash/Previews/PreviewRatingInput.qml:174
402+#: qml/Dash/Previews/PreviewRatingInput.qml:175
229403msgid "Send"
230404msgstr "Kas"
231405
232−#: qml/Dash/Previews/PreviewRatingInput.qml:84
406+#: qml/Dash/Previews/PreviewRatingInput.qml:82
233407msgid "Rate this"
234408msgstr "Priziit an dra-mañ"
235409
236−#: qml/Dash/Previews/PreviewRatingInput.qml:129
410+#: qml/Dash/Previews/PreviewRatingInput.qml:157
237411msgid "Add a review"
238412msgstr "Ouzhpennañ un ali"
239413
240−#: qml/Dash/Previews/PreviewSharing.qml:66
241−msgid "Preview Share Item"
242−msgstr "Rakwelet an elfenn lodet"
243−
244414#: qml/Dash/PullToRefreshScopeStyle.qml:55
245415msgid "Pull to refresh…"
246416msgstr "Tennañ evit freskaat..."
@@ -253,49 +423,61 @@ msgstr "Lezel da vont evit freskaat..."
253423msgid "Enable location data"
254424msgstr "Gweredekaat ar roadennoù lec'hiañ"
255425
256−#: qml/Dash/ScopesList.qml:67
426+#: qml/Dash/ScopesList.qml:55
257427msgid "Manage"
258428msgstr "Merañ"
259429
260−#: qml/Dash/ScopesList.qml:113
430+#: qml/Dash/ScopesList.qml:102
261431msgid "Home"
262432msgstr "Er gêr"
263433
264−#: qml/Dash/ScopesList.qml:114
434+#: qml/Dash/ScopesList.qml:103
265435msgid "Also installed"
266436msgstr "Staliet ivez"
267437
268−#: qml/DisabledScreenNotice.qml:104
438+#: qml/DisabledScreenNotice.qml:109
269439msgid ""
270440"Your device is now connected to an external display. Use this screen as a "
271441"touch pad to interact with the pointer."
272442msgstr ""
273443
274−#: qml/Greeter/CoverPage.qml:118
444+#: qml/Greeter/CoverPage.qml:127
275445msgid "Unlock"
276446msgstr "Dibrennañ"
277447
278−#: qml/Greeter/LoginList.qml:239
448+#: qml/Greeter/Greeter.qml:555
449+msgid "Try again"
450+msgstr ""
451+
452+#: qml/Greeter/LoginList.qml:63
453+msgid "Passphrase"
454+msgstr ""
455+
456+#: qml/Greeter/LoginList.qml:64
457+msgid "Passcode"
458+msgstr ""
459+
460+#: qml/Greeter/LoginList.qml:87
279461msgid "Retry"
280462msgstr "Esaeañ en-dro"
281463
282−#: qml/Greeter/LoginList.qml:240
283−msgid "Tap to unlock"
284−msgstr "Pouezañ evit dibrennañ"
464+#: qml/Greeter/LoginList.qml:88
465+msgid "Log In"
466+msgstr ""
285467
286−#: qml/Greeter/NarrowView.qml:54
468+#: qml/Greeter/NarrowView.qml:55
287469msgid "Sorry, incorrect passphrase."
288470msgstr "Siwazh, frazenn-dremen direizh"
289471
290−#: qml/Greeter/NarrowView.qml:55
472+#: qml/Greeter/NarrowView.qml:56
291473msgid "Sorry, incorrect passcode."
292474msgstr "Siwazh, kod-tremen direizh"
293475
294−#: qml/Greeter/NarrowView.qml:56
476+#: qml/Greeter/NarrowView.qml:57
295477msgid "This will be your last attempt."
296478msgstr "Ho taol-esae diwezhañ e vo."
297479
298−#: qml/Greeter/NarrowView.qml:58
480+#: qml/Greeter/NarrowView.qml:59
299481msgid ""
300482"If passphrase is entered incorrectly, your phone will conduct a factory "
301483"reset and all personal data will be deleted."
@@ -303,7 +485,7 @@ msgstr ""
303485"Ma vez ebarzhet ur frazenn-dremen direizh, e vo adderaouekaet ho pellgomzer "
304486"gant arventennoù al labouradeg hag e vo diverket an holl roadennoù personel"
305487
306−#: qml/Greeter/NarrowView.qml:59
488+#: qml/Greeter/NarrowView.qml:60
307489msgid ""
308490"If passcode is entered incorrectly, your phone will conduct a factory reset "
309491"and all personal data will be deleted."
@@ -311,34 +493,34 @@ msgstr ""
311493"Ma vez ebarzhet ur c'hod-tremen direizh, e vo adderaouekaet ho pellgomzer "
312494"gant arventennoù al labouradeg hag e vo diverket an holl roadennoù personel."
313495
314−#: qml/Greeter/NarrowView.qml:116
496+#: qml/Greeter/NarrowView.qml:129
315497#, qt-format
316498msgid "Enter %1"
317499msgstr "Merkañ %1"
318500
319−#: qml/Greeter/NarrowView.qml:117
501+#: qml/Greeter/NarrowView.qml:130
320502msgid "Enter passphrase"
321503msgstr "Merkañ ar frazenn-dremen"
322504
323−#: qml/Greeter/NarrowView.qml:118
505+#: qml/Greeter/NarrowView.qml:131
324506msgid "Enter passcode"
325507msgstr "Merkañ ar c'hod-tremen"
326508
327−#: qml/Greeter/NarrowView.qml:119
509+#: qml/Greeter/NarrowView.qml:135
328510#, qt-format
329511msgid "Sorry, incorrect %1"
330512msgstr "Siwazh, %1 direizh"
331513
332−#: qml/Greeter/NarrowView.qml:120
514+#: qml/Greeter/NarrowView.qml:136
333515msgid "Sorry, incorrect passphrase"
334516msgstr "Siwazh, frazenn-dremen direizh"
335517
336−#: qml/Greeter/NarrowView.qml:121
518+#: qml/Greeter/NarrowView.qml:137
337519msgctxt "passphrase"
338520msgid "Please re-enter"
339521msgstr "Adverkañ, mar plij"
340522
341−#: qml/Greeter/NarrowView.qml:122
523+#: qml/Greeter/NarrowView.qml:138
342524msgid "Sorry, incorrect passcode"
343525msgstr "Digarezit, kod-tremen direizh"
344526
@@ -413,18 +595,18 @@ msgstr "Echu"
413595msgid "Failed, tap to retry"
414596msgstr "C'hwitet, touchit evit adkregiñ"
415597
416−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
417−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
598+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
599+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
418600msgctxt "Button: Send a reply message"
419601msgid "Send"
420602msgstr "Kas"
421603
422−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
604+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
423605msgctxt "Label: Hint in message indicator line edit"
424606msgid "Reply"
425607msgstr "Respont"
426608
427−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
609+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
428610msgctxt "Button: Call back on phone"
429611msgid "Call back"
430612msgstr "Gervel en-dro"
@@ -433,32 +615,12 @@ msgstr "Gervel en-dro"
433615msgid "Drag using 3 fingers any application from one window to the other"
434616msgstr ""
435617
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"
439−
440−#: qml/Tutorial/TutorialBottom.qml:80
441−msgid "Swipe up for favorite calculations"
442−msgstr ""
443−
444−#: qml/Tutorial/TutorialBottom.qml:82
445−msgid "Swipe up for recent calls"
446−msgstr ""
447−
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"
451−
452−#: qml/Tutorial/TutorialBottom.qml:85
453−msgid "Swipe up to manage the app"
454−msgstr ""
455−
456−#: qml/Tutorial/TutorialLeftLong.qml:47
618+#: qml/Tutorial/TutorialLeftLong.qml:49
457619msgid "Long swipe from the left edge to open the Today scope"
458620msgstr ""
459621
460622#: qml/Tutorial/TutorialLeft.qml:47
461−msgid "Swipe from the left edge to open the launcher"
623+msgid "Short swipe from the left edge to open the launcher"
462624msgstr ""
463625
464626#: qml/Tutorial/TutorialRight.qml:55
@@ -466,15 +628,11 @@ msgid "Push your mouse against the right edge to view your open apps"
466628msgstr ""
467629
468630#: qml/Tutorial/TutorialRight.qml:56
469−msgid "Short or long swipe from the right edge to view your open apps"
631+msgid "Swipe from the right edge to view your open apps"
470632msgstr ""
471633
472634#: qml/Tutorial/TutorialTop.qml:53
473−msgid "Swipe from the top right edge to open the notification bar"
474−msgstr ""
475−
476−#: qml/Tutorial/TutorialTop.qml:54
477−msgid "Swipe from the top edge to open the notification bar"
635+msgid "Swipe from the top edge to access notifications and quick settings"
478636msgstr ""
479637
480638#: qml/Wizard/Page.qml:54
@@ -486,11 +644,11 @@ msgstr "Distreiñ"
486644msgid "Language"
487645msgstr "Yezh"
488646
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
647+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
648+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
491649#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
492650#: qml/Wizard/Pages/75-report-check.qml:84
493−#: qml/Wizard/Pages/passcode-desktop.qml:124
651+#: qml/Wizard/Pages/passcode-desktop.qml:141
494652#: qml/Wizard/Pages/password-set.qml:141
495653msgid "Next"
496654msgstr "War-lerc'h"
@@ -552,7 +710,7 @@ msgstr ""
552710msgid "Time Zone"
553711msgstr "Gwerzhid-eur"
554712
555−#: qml/Wizard/Pages/50-timezone.qml:178
713+#: qml/Wizard/Pages/50-timezone.qml:181
556714msgid "Enter your city"
557715msgstr "Skrivit ho kêr"
558716
@@ -642,7 +800,7 @@ msgid "Service Terms"
642800msgstr "Divizoù servij"
643801
644802#: qml/Wizard/Pages/passcode-confirm.qml:43
645−#: qml/Wizard/Pages/passcode-desktop.qml:80
803+#: qml/Wizard/Pages/passcode-desktop.qml:96
646804msgid "Confirm passcode"
647805msgstr "Kadarnaat ar c'hod-tremen"
648806
@@ -659,24 +817,24 @@ msgstr "Skrivit adarre, mar plij."
659817msgid "Lock Screen Passcode"
660818msgstr "Kod da brennañ ar skramm"
661819
662−#: qml/Wizard/Pages/passcode-desktop.qml:56
820+#: qml/Wizard/Pages/passcode-desktop.qml:60
663821msgid "Enter 4 numbers to setup your passcode"
664822msgstr "Skrivit 4 sifr evit lakaat ho kod"
665823
666−#: qml/Wizard/Pages/passcode-desktop.qml:65
824+#: qml/Wizard/Pages/passcode-desktop.qml:76
667825#: qml/Wizard/Pages/passcode-set.qml:54
668826msgid "Choose passcode"
669827msgstr "Choaz ur c'hod"
670828
671−#: qml/Wizard/Pages/passcode-desktop.qml:105
829+#: qml/Wizard/Pages/passcode-desktop.qml:126
672830msgid "Passcode too short"
673831msgstr "Kod re verr"
674832
675−#: qml/Wizard/Pages/passcode-desktop.qml:107
833+#: qml/Wizard/Pages/passcode-desktop.qml:128
676834msgid "Passcodes match"
677835msgstr "klotañ a ra ar c'hodoù an eil gant egile"
678836
679−#: qml/Wizard/Pages/passcode-desktop.qml:109
837+#: qml/Wizard/Pages/passcode-desktop.qml:130
680838msgid "Passcodes do not match"
681839msgstr "Ne glot ket ar c'hodoù an eil gant egile"
682840
@@ -725,26 +883,30 @@ msgid "To proceed with no SIM tap Skip."
725883msgstr ""
726884
727885#: qml/Wizard/PasswordMeter.qml:87
886+msgid "Password too short"
887+msgstr ""
888+
889+#: qml/Wizard/PasswordMeter.qml:89
728890msgid "Passwords match"
729891msgstr "Klotañ a ra ar gerioù-tremen an eil gant egile"
730892
731−#: qml/Wizard/PasswordMeter.qml:89
893+#: qml/Wizard/PasswordMeter.qml:91
732894msgid "Passwords do not match"
733895msgstr "Ne glot ket ar gerioù-tremen"
734896
735−#: qml/Wizard/PasswordMeter.qml:93
897+#: qml/Wizard/PasswordMeter.qml:95
736898msgid "Strong password"
737899msgstr "Ger-tremen sur"
738900
739−#: qml/Wizard/PasswordMeter.qml:95
901+#: qml/Wizard/PasswordMeter.qml:97
740902msgid "Fair password"
741903msgstr "Ger-tremen reizh"
742904
743−#: qml/Wizard/PasswordMeter.qml:97
905+#: qml/Wizard/PasswordMeter.qml:99
744906msgid "Weak password"
745907msgstr "Ger-tremen diasur"
746908
747−#: qml/Wizard/PasswordMeter.qml:99
909+#: qml/Wizard/PasswordMeter.qml:101
748910msgid "Very weak password"
749911msgstr "Ger-tremen diasur-kenañ"
750912
@@ -965,6 +1127,9 @@ msgstr "Ger-tremen diasur-kenañ"
9651127#~ msgid "%1 〉"
9661128#~ msgstr "%1 〉"
9671129
1130+#~ msgid "Tap to unlock"
1131+#~ msgstr "Pouezañ evit dibrennañ"
1132+
9681133#~ msgid "This action does different things for different apps"
9691134#~ msgstr "An ober-mañ a ra meur a dra evit meur a arload"
9701135
@@ -1072,3 +1237,9 @@ msgstr "Ger-tremen diasur-kenañ"
10721237
10731238#~ msgid "Call back"
10741239#~ msgstr "Gervel en-dro"
1240+
1241+#~ msgid "Swipe up to add a contact"
1242+#~ msgstr "Riklit d'an nec'h evit ouzhpennañ un darempred"
1243+
1244+#~ msgid "Swipe up to create a message"
1245+#~ msgstr "Riklit d'an nec'h evit krouiñ ur gemennadenn"
po/bs.po+266−101
@@ -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-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+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,39 +16,39 @@ 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-05-19 05:49+0000\n"
20−"X-Generator: Launchpad (build 18025)\n"
19+"X-Launchpad-Export-Date: 2016-07-14 06:00+0000\n"
20+"X-Generator: Launchpad (build 18115)\n"
2121
22−#: plugins/IntegratedLightDM/Greeter.cpp:112
22+#: plugins/LightDM/Greeter.cpp:123
2323msgid "Password: "
2424msgstr "Šifra: "
2525
26−#: plugins/Unity/Launcher/launcheritem.cpp:48
27−#: plugins/Unity/Launcher/launcheritem.cpp:107
26+#: plugins/Unity/Launcher/launcheritem.cpp:49
27+#: plugins/Unity/Launcher/launcheritem.cpp:108
2828msgid "Pin shortcut"
2929msgstr "Prikačite prečicu"
3030
31−#: plugins/Unity/Launcher/launcheritem.cpp:53
31+#: plugins/Unity/Launcher/launcheritem.cpp:54
3232msgid "Quit"
3333msgstr "Napusti"
3434
35−#: plugins/Unity/Launcher/launcheritem.cpp:107
35+#: plugins/Unity/Launcher/launcheritem.cpp:108
3636msgid "Unpin shortcut"
3737msgstr "Otkačite prečicu"
3838
39−#: qml/Components/DelayedLockscreen.qml:49
39+#: qml/Components/DelayedLockscreen.qml:50
4040msgid "Device Locked"
4141msgstr "Uređaj zaključan"
4242
43−#: qml/Components/DelayedLockscreen.qml:64
43+#: qml/Components/DelayedLockscreen.qml:65
4444msgid "You have been locked out due to too many failed passphrase attempts."
4545msgstr "Izbačeni ste zbog previše neuspjelih pokušaja unosa pristupne fraze."
4646
47−#: qml/Components/DelayedLockscreen.qml:65
47+#: qml/Components/DelayedLockscreen.qml:66
4848msgid "You have been locked out due to too many failed passcode attempts."
4949msgstr "Izbačeni ste zbog previše neuspjelih pokušaja unosa pristupnog koda."
5050
51−#: qml/Components/DelayedLockscreen.qml:74
51+#: qml/Components/DelayedLockscreen.qml:75
5252#, qt-format
5353msgid "Please wait %1 minute and then try again…"
5454msgid_plural "Please wait %1 minutes and then try again…"
@@ -76,7 +76,7 @@ msgid "Log Out"
7676msgstr "Odjavi se"
7777
7878#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
79−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
79+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
8080#: qml/Wizard/Pages/passcode-set.qml:32
8181msgid "Cancel"
8282msgstr "Otkaži"
@@ -121,18 +121,188 @@ msgctxt "Button: Restart the system"
121121msgid "Restart"
122122msgstr "Restartuj"
123123
124−#: qml/Components/Lockscreen.qml:231
124+#: qml/Components/KeyboardShortcutsOverlay.qml:41
125+msgid "Keyboard Shortcuts"
126+msgstr ""
127+
128+#: qml/Components/KeyboardShortcutsOverlay.qml:55
129+msgid "Unity 8"
130+msgstr ""
131+
132+#: qml/Components/KeyboardShortcutsOverlay.qml:62
133+msgid "PrtScr"
134+msgstr ""
135+
136+#: qml/Components/KeyboardShortcutsOverlay.qml:67
137+msgid "Takes a screenshot."
138+msgstr ""
139+
140+#: qml/Components/KeyboardShortcutsOverlay.qml:75
141+msgid "Alt + PrtScr"
142+msgstr ""
143+
144+#: qml/Components/KeyboardShortcutsOverlay.qml:80
145+msgid "Takes a screenshot of a window."
146+msgstr ""
147+
148+#: qml/Components/KeyboardShortcutsOverlay.qml:88
149+msgid "Super + Space"
150+msgstr ""
151+
152+#: qml/Components/KeyboardShortcutsOverlay.qml:93
153+msgid "Switches to next keyboard layout."
154+msgstr ""
155+
156+#: qml/Components/KeyboardShortcutsOverlay.qml:101
157+msgid "Super + Shift + Space"
158+msgstr ""
159+
160+#: qml/Components/KeyboardShortcutsOverlay.qml:106
161+msgid "Switches to previous keyboard layout."
162+msgstr ""
163+
164+#: qml/Components/KeyboardShortcutsOverlay.qml:118
165+msgid "Launcher"
166+msgstr ""
167+
168+#: qml/Components/KeyboardShortcutsOverlay.qml:125
169+msgid "Super (Hold)"
170+msgstr ""
171+
172+#: qml/Components/KeyboardShortcutsOverlay.qml:130
173+msgid "Opens the launcher, displays shortcuts."
174+msgstr ""
175+
176+#: qml/Components/KeyboardShortcutsOverlay.qml:138
177+msgid "Alt + F1"
178+msgstr ""
179+
180+#: qml/Components/KeyboardShortcutsOverlay.qml:143
181+msgid "Opens launcher keyboard navigation mode."
182+msgstr ""
183+
184+#: qml/Components/KeyboardShortcutsOverlay.qml:151
185+msgid "Super + Tab"
186+msgstr ""
187+
188+#: qml/Components/KeyboardShortcutsOverlay.qml:156
189+msgid "Switches applications via the launcher."
190+msgstr ""
191+
192+#: qml/Components/KeyboardShortcutsOverlay.qml:164
193+msgid "Super + 0 to 9"
194+msgstr ""
195+
196+#: qml/Components/KeyboardShortcutsOverlay.qml:169
197+msgid "Same as clicking on a launcher icon."
198+msgstr ""
199+
200+#: qml/Components/KeyboardShortcutsOverlay.qml:181
201+msgid "Scopes"
202+msgstr ""
203+
204+#: qml/Components/KeyboardShortcutsOverlay.qml:188
205+msgid "Super (Tap)"
206+msgstr ""
207+
208+#: qml/Components/KeyboardShortcutsOverlay.qml:193
209+msgid "Opens the Scopes home."
210+msgstr ""
211+
212+#: qml/Components/KeyboardShortcutsOverlay.qml:209
213+msgid "Switching"
214+msgstr ""
215+
216+#: qml/Components/KeyboardShortcutsOverlay.qml:216
217+msgid "Alt + Tab"
218+msgstr ""
219+
220+#: qml/Components/KeyboardShortcutsOverlay.qml:221
221+msgid "Switches between applications."
222+msgstr ""
223+
224+#: qml/Components/KeyboardShortcutsOverlay.qml:229
225+msgid "Super + W"
226+msgstr ""
227+
228+#: qml/Components/KeyboardShortcutsOverlay.qml:234
229+msgid "Opens the desktop spread."
230+msgstr ""
231+
232+#: qml/Components/KeyboardShortcutsOverlay.qml:242
233+msgid "Cursor Left or Right"
234+msgstr ""
235+
236+#: qml/Components/KeyboardShortcutsOverlay.qml:247
237+msgid "Moves the focus."
238+msgstr ""
239+
240+#: qml/Components/KeyboardShortcutsOverlay.qml:259
241+msgid "Windows"
242+msgstr ""
243+
244+#: qml/Components/KeyboardShortcutsOverlay.qml:266
245+msgid "Ctrl + Super + D"
246+msgstr ""
247+
248+#: qml/Components/KeyboardShortcutsOverlay.qml:271
249+msgid "Minimizes all windows."
250+msgstr ""
251+
252+#: qml/Components/KeyboardShortcutsOverlay.qml:279
253+msgid "Ctrl + Super + Up"
254+msgstr ""
255+
256+#: qml/Components/KeyboardShortcutsOverlay.qml:284
257+msgid "Maximizes the current window."
258+msgstr ""
259+
260+#: qml/Components/KeyboardShortcutsOverlay.qml:292
261+msgid "Ctrl + Super + Down"
262+msgstr ""
263+
264+#: qml/Components/KeyboardShortcutsOverlay.qml:297
265+msgid "Minimizes or restores the current window."
266+msgstr ""
267+
268+#: qml/Components/KeyboardShortcutsOverlay.qml:305
269+msgid "Ctrl + Super + Left or Right"
270+msgstr ""
271+
272+#: qml/Components/KeyboardShortcutsOverlay.qml:310
273+msgid "Semi-maximizes the current window."
274+msgstr ""
275+
276+#: qml/Components/KeyboardShortcutsOverlay.qml:318
277+msgid "Alt + F4"
278+msgstr ""
279+
280+#: qml/Components/KeyboardShortcutsOverlay.qml:323
281+msgid "Closes the current window."
282+msgstr ""
283+
284+#: qml/Components/Lockscreen.qml:239
125285msgid "Return to Call"
126286msgstr "Povratak na Poziv"
127287
128−#: qml/Components/Lockscreen.qml:231
288+#: qml/Components/Lockscreen.qml:239
129289msgid "Emergency Call"
130290msgstr "Hitan Poziv"
131291
132−#: qml/Components/Lockscreen.qml:263
292+#: qml/Components/Lockscreen.qml:271
133293msgid "OK"
134294msgstr "U redu"
135295
296+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
297+#, qt-format
298+msgid "%1:%2:%3"
299+msgstr ""
300+
301+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
302+#, qt-format
303+msgid "%1:%2"
304+msgstr ""
305+
136306#: qml/Components/ModeSwitchWarningDialog.qml:32
137307msgid "Apps may have unsaved data:"
138308msgstr "Aplikacije možda imaju podataka koji nisu sačuvani:"
@@ -161,26 +331,30 @@ msgstr "Ponovo poveži sada"
161331msgid "Close all"
162332msgstr "Zatvori sve"
163333
164−#: qml/Dash/DashPageHeader.qml:337
334+#: qml/Components/SharingPicker.qml:54
335+msgid "Preview Share Item"
336+msgstr "Pogledaj stavku koja se dijeli"
337+
338+#: qml/Dash/DashPageHeader.qml:333
165339msgctxt "Button: Open the Ubuntu Store"
166340msgid "Store"
167341msgstr "Trgovina"
168342
169−#: qml/Dash/DashPageHeader.qml:344
343+#: qml/Dash/DashPageHeader.qml:340
170344msgctxt "Button: Start a search in the current dash scope"
171345msgid "Search"
172346msgstr "Pretraživanje"
173347
174−#: qml/Dash/DashPageHeader.qml:354
348+#: qml/Dash/DashPageHeader.qml:350
175349msgctxt "Button: Show the current dash scope settings"
176350msgid "Settings"
177351msgstr "Podešavanja"
178352
179−#: qml/Dash/DashPageHeader.qml:361
353+#: qml/Dash/DashPageHeader.qml:357
180354msgid "Remove from Favorites"
181355msgstr "Ukloni iz Omiljenih"
182356
183−#: qml/Dash/DashPageHeader.qml:361
357+#: qml/Dash/DashPageHeader.qml:357
184358msgid "Add to Favorites"
185359msgstr "Dodaj u Omiljene"
186360
@@ -192,24 +366,24 @@ msgstr ""
192366msgid "Reset"
193367msgstr ""
194368
195−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
369+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
196370msgid "Show less"
197371msgstr ""
198372
199−#: qml/Dash/GenericScopeView.qml:579
373+#: qml/Dash/GenericScopeView.qml:580
200374msgid "Show all"
201375msgstr ""
202376
203−#: qml/Dash/GenericScopeView.qml:636
377+#: qml/Dash/GenericScopeView.qml:637
204378msgctxt "Label: Hint for dash search line edit"
205379msgid "Search"
206380msgstr "Pretraži"
207381
208−#: qml/Dash/PageHeaderExtraPanel.qml:55
382+#: qml/Dash/PageHeaderExtraPanel.qml:56
209383msgid "Recent Searches"
210384msgstr ""
211385
212−#: qml/Dash/PageHeaderExtraPanel.qml:66
386+#: qml/Dash/PageHeaderExtraPanel.qml:67
213387msgid "Clear All"
214388msgstr ""
215389
@@ -222,22 +396,18 @@ msgid "Less..."
222396msgstr "Manje..."
223397
224398#: qml/Dash/Previews/PreviewCommentInput.qml:68
225−#: qml/Dash/Previews/PreviewRatingInput.qml:174
399+#: qml/Dash/Previews/PreviewRatingInput.qml:175
226400msgid "Send"
227401msgstr "Pošalji"
228402
229−#: qml/Dash/Previews/PreviewRatingInput.qml:84
403+#: qml/Dash/Previews/PreviewRatingInput.qml:82
230404msgid "Rate this"
231405msgstr "Ocijeni ovo"
232406
233−#: qml/Dash/Previews/PreviewRatingInput.qml:129
407+#: qml/Dash/Previews/PreviewRatingInput.qml:157
234408msgid "Add a review"
235409msgstr "Dodaj recenziju"
236410
237−#: qml/Dash/Previews/PreviewSharing.qml:66
238−msgid "Preview Share Item"
239−msgstr "Pogledaj stavku koja se dijeli"
240−
241411#: qml/Dash/PullToRefreshScopeStyle.qml:55
242412msgid "Pull to refresh…"
243413msgstr "Povući za osvježavanje..."
@@ -250,49 +420,61 @@ msgstr "Pustiti za osvježavanje..."
250420msgid "Enable location data"
251421msgstr "Omogućiti podatke o lokaciji"
252422
253−#: qml/Dash/ScopesList.qml:67
423+#: qml/Dash/ScopesList.qml:55
254424msgid "Manage"
255425msgstr "Upravljanje"
256426
257−#: qml/Dash/ScopesList.qml:113
427+#: qml/Dash/ScopesList.qml:102
258428msgid "Home"
259429msgstr "Početna"
260430
261−#: qml/Dash/ScopesList.qml:114
431+#: qml/Dash/ScopesList.qml:103
262432msgid "Also installed"
263433msgstr "Također instalirano"
264434
265−#: qml/DisabledScreenNotice.qml:104
435+#: qml/DisabledScreenNotice.qml:109
266436msgid ""
267437"Your device is now connected to an external display. Use this screen as a "
268438"touch pad to interact with the pointer."
269439msgstr ""
270440
271−#: qml/Greeter/CoverPage.qml:118
441+#: qml/Greeter/CoverPage.qml:127
272442msgid "Unlock"
273443msgstr "Otključaj"
274444
275−#: qml/Greeter/LoginList.qml:239
445+#: qml/Greeter/Greeter.qml:555
446+msgid "Try again"
447+msgstr ""
448+
449+#: qml/Greeter/LoginList.qml:63
450+msgid "Passphrase"
451+msgstr ""
452+
453+#: qml/Greeter/LoginList.qml:64
454+msgid "Passcode"
455+msgstr ""
456+
457+#: qml/Greeter/LoginList.qml:87
276458msgid "Retry"
277459msgstr "Ponovi"
278460
279−#: qml/Greeter/LoginList.qml:240
280−msgid "Tap to unlock"
281−msgstr "Kucnite za otključavanje"
461+#: qml/Greeter/LoginList.qml:88
462+msgid "Log In"
463+msgstr ""
282464
283−#: qml/Greeter/NarrowView.qml:54
465+#: qml/Greeter/NarrowView.qml:55
284466msgid "Sorry, incorrect passphrase."
285467msgstr "Izvinite, pogrešna pristupna fraza."
286468
287−#: qml/Greeter/NarrowView.qml:55
469+#: qml/Greeter/NarrowView.qml:56
288470msgid "Sorry, incorrect passcode."
289471msgstr "Izvinite, pogrešan pristupni kod."
290472
291−#: qml/Greeter/NarrowView.qml:56
473+#: qml/Greeter/NarrowView.qml:57
292474msgid "This will be your last attempt."
293475msgstr "Ovo će biti vaš posljednji pokušaj."
294476
295−#: qml/Greeter/NarrowView.qml:58
477+#: qml/Greeter/NarrowView.qml:59
296478msgid ""
297479"If passphrase is entered incorrectly, your phone will conduct a factory "
298480"reset and all personal data will be deleted."
@@ -300,7 +482,7 @@ msgstr ""
300482"Ako je pristupna fraza unesena pogrešno, vaš telefon će sprovesti reset na "
301483"fabričke postavke i svi osobni podaci će biti izbrisani."
302484
303−#: qml/Greeter/NarrowView.qml:59
485+#: qml/Greeter/NarrowView.qml:60
304486msgid ""
305487"If passcode is entered incorrectly, your phone will conduct a factory reset "
306488"and all personal data will be deleted."
@@ -308,34 +490,34 @@ msgstr ""
308490"Ako je pristupni kod unesen netačno, vaš telefon će sprovesti reset na "
309491"fabričke postavke i svi osobni podaci će biti izbrisani."
310492
311−#: qml/Greeter/NarrowView.qml:116
493+#: qml/Greeter/NarrowView.qml:129
312494#, qt-format
313495msgid "Enter %1"
314496msgstr "Unesite %1"
315497
316−#: qml/Greeter/NarrowView.qml:117
498+#: qml/Greeter/NarrowView.qml:130
317499msgid "Enter passphrase"
318500msgstr "Unesite propusnu frazu"
319501
320−#: qml/Greeter/NarrowView.qml:118
502+#: qml/Greeter/NarrowView.qml:131
321503msgid "Enter passcode"
322504msgstr "Unesite pristupni kod"
323505
324−#: qml/Greeter/NarrowView.qml:119
506+#: qml/Greeter/NarrowView.qml:135
325507#, qt-format
326508msgid "Sorry, incorrect %1"
327509msgstr "Izvinite, netačno %1"
328510
329−#: qml/Greeter/NarrowView.qml:120
511+#: qml/Greeter/NarrowView.qml:136
330512msgid "Sorry, incorrect passphrase"
331513msgstr "Izvinite, netačna propusna fraza"
332514
333−#: qml/Greeter/NarrowView.qml:121
515+#: qml/Greeter/NarrowView.qml:137
334516msgctxt "passphrase"
335517msgid "Please re-enter"
336518msgstr "Molim ponovo unesite"
337519
338−#: qml/Greeter/NarrowView.qml:122
520+#: qml/Greeter/NarrowView.qml:138
339521msgid "Sorry, incorrect passcode"
340522msgstr "Izvinite, netačan pristupni kod"
341523
@@ -413,18 +595,18 @@ msgstr "Završeno"
413595msgid "Failed, tap to retry"
414596msgstr "Neuspjelo, kucnuti za ponavljanje"
415597
416−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
417−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
598+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
599+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
418600msgctxt "Button: Send a reply message"
419601msgid "Send"
420602msgstr "Pošalji"
421603
422−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
604+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
423605msgctxt "Label: Hint in message indicator line edit"
424606msgid "Reply"
425607msgstr "Odgovorite"
426608
427−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
609+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
428610msgctxt "Button: Call back on phone"
429611msgid "Call back"
430612msgstr "Uzvrati poziv"
@@ -433,32 +615,12 @@ msgstr "Uzvrati poziv"
433615msgid "Drag using 3 fingers any application from one window to the other"
434616msgstr ""
435617
436−#: qml/Tutorial/TutorialBottom.qml:78
437−msgid "Swipe up to add a contact"
438−msgstr ""
439−
440−#: qml/Tutorial/TutorialBottom.qml:80
441−msgid "Swipe up for favorite calculations"
442−msgstr ""
443−
444−#: qml/Tutorial/TutorialBottom.qml:82
445−msgid "Swipe up for recent calls"
446−msgstr ""
447−
448−#: qml/Tutorial/TutorialBottom.qml:84
449−msgid "Swipe up to create a message"
450−msgstr ""
451−
452−#: qml/Tutorial/TutorialBottom.qml:85
453−msgid "Swipe up to manage the app"
454−msgstr ""
455−
456−#: qml/Tutorial/TutorialLeftLong.qml:47
618+#: qml/Tutorial/TutorialLeftLong.qml:49
457619msgid "Long swipe from the left edge to open the Today scope"
458620msgstr ""
459621
460622#: qml/Tutorial/TutorialLeft.qml:47
461−msgid "Swipe from the left edge to open the launcher"
623+msgid "Short swipe from the left edge to open the launcher"
462624msgstr ""
463625
464626#: qml/Tutorial/TutorialRight.qml:55
@@ -466,15 +628,11 @@ msgid "Push your mouse against the right edge to view your open apps"
466628msgstr ""
467629
468630#: qml/Tutorial/TutorialRight.qml:56
469−msgid "Short or long swipe from the right edge to view your open apps"
631+msgid "Swipe from the right edge to view your open apps"
470632msgstr ""
471633
472634#: qml/Tutorial/TutorialTop.qml:53
473−msgid "Swipe from the top right edge to open the notification bar"
474−msgstr ""
475−
476−#: qml/Tutorial/TutorialTop.qml:54
477−msgid "Swipe from the top edge to open the notification bar"
635+msgid "Swipe from the top edge to access notifications and quick settings"
478636msgstr ""
479637
480638#: qml/Wizard/Page.qml:54
@@ -486,11 +644,11 @@ msgstr "Nazad"
486644msgid "Language"
487645msgstr ""
488646
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
647+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
648+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
491649#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
492650#: qml/Wizard/Pages/75-report-check.qml:84
493−#: qml/Wizard/Pages/passcode-desktop.qml:124
651+#: qml/Wizard/Pages/passcode-desktop.qml:141
494652#: qml/Wizard/Pages/password-set.qml:141
495653msgid "Next"
496654msgstr ""
@@ -552,7 +710,7 @@ msgstr ""
552710msgid "Time Zone"
553711msgstr ""
554712
555−#: qml/Wizard/Pages/50-timezone.qml:178
713+#: qml/Wizard/Pages/50-timezone.qml:181
556714msgid "Enter your city"
557715msgstr ""
558716
@@ -642,7 +800,7 @@ msgid "Service Terms"
642800msgstr ""
643801
644802#: qml/Wizard/Pages/passcode-confirm.qml:43
645−#: qml/Wizard/Pages/passcode-desktop.qml:80
803+#: qml/Wizard/Pages/passcode-desktop.qml:96
646804msgid "Confirm passcode"
647805msgstr "Potvrdi pristupni kod"
648806
@@ -659,24 +817,24 @@ msgstr ""
659817msgid "Lock Screen Passcode"
660818msgstr ""
661819
662−#: qml/Wizard/Pages/passcode-desktop.qml:56
820+#: qml/Wizard/Pages/passcode-desktop.qml:60
663821msgid "Enter 4 numbers to setup your passcode"
664822msgstr ""
665823
666−#: qml/Wizard/Pages/passcode-desktop.qml:65
824+#: qml/Wizard/Pages/passcode-desktop.qml:76
667825#: qml/Wizard/Pages/passcode-set.qml:54
668826msgid "Choose passcode"
669827msgstr ""
670828
671−#: qml/Wizard/Pages/passcode-desktop.qml:105
829+#: qml/Wizard/Pages/passcode-desktop.qml:126
672830msgid "Passcode too short"
673831msgstr ""
674832
675−#: qml/Wizard/Pages/passcode-desktop.qml:107
833+#: qml/Wizard/Pages/passcode-desktop.qml:128
676834msgid "Passcodes match"
677835msgstr ""
678836
679−#: qml/Wizard/Pages/passcode-desktop.qml:109
837+#: qml/Wizard/Pages/passcode-desktop.qml:130
680838msgid "Passcodes do not match"
681839msgstr ""
682840
@@ -725,26 +883,30 @@ msgid "To proceed with no SIM tap Skip."
725883msgstr ""
726884
727885#: qml/Wizard/PasswordMeter.qml:87
728−msgid "Passwords match"
886+msgid "Password too short"
729887msgstr ""
730888
731889#: qml/Wizard/PasswordMeter.qml:89
890+msgid "Passwords match"
891+msgstr ""
892+
893+#: qml/Wizard/PasswordMeter.qml:91
732894msgid "Passwords do not match"
733895msgstr ""
734896
735−#: qml/Wizard/PasswordMeter.qml:93
897+#: qml/Wizard/PasswordMeter.qml:95
736898msgid "Strong password"
737899msgstr ""
738900
739−#: qml/Wizard/PasswordMeter.qml:95
901+#: qml/Wizard/PasswordMeter.qml:97
740902msgid "Fair password"
741903msgstr ""
742904
743−#: qml/Wizard/PasswordMeter.qml:97
905+#: qml/Wizard/PasswordMeter.qml:99
744906msgid "Weak password"
745907msgstr ""
746908
747−#: qml/Wizard/PasswordMeter.qml:99
909+#: qml/Wizard/PasswordMeter.qml:101
748910msgid "Very weak password"
749911msgstr ""
750912
@@ -773,6 +935,9 @@ msgstr ""
773935#~ msgid "See less"
774936#~ msgstr "Pogledati manje"
775937
938+#~ msgid "Tap to unlock"
939+#~ msgstr "Kucnite za otključavanje"
940+
776941#~ msgid "Please re-enter"
777942#~ msgstr "Molimo ponovo unesite"
778943
po/ca.po+367−153
@@ -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-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+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,43 +15,43 @@ 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-05-19 05:49+0000\n"
19−"X-Generator: Launchpad (build 18025)\n"
18+"X-Launchpad-Export-Date: 2016-07-14 06:01+0000\n"
19+"X-Generator: Launchpad (build 18115)\n"
2020
21−#: plugins/IntegratedLightDM/Greeter.cpp:112
21+#: plugins/LightDM/Greeter.cpp:123
2222msgid "Password: "
2323msgstr "Contrasenya: "
2424
25−#: plugins/Unity/Launcher/launcheritem.cpp:48
26−#: plugins/Unity/Launcher/launcheritem.cpp:107
25+#: plugins/Unity/Launcher/launcheritem.cpp:49
26+#: plugins/Unity/Launcher/launcheritem.cpp:108
2727msgid "Pin shortcut"
2828msgstr "Enganxa la drecera"
2929
30−#: plugins/Unity/Launcher/launcheritem.cpp:53
30+#: plugins/Unity/Launcher/launcheritem.cpp:54
3131msgid "Quit"
3232msgstr "Surt"
3333
34−#: plugins/Unity/Launcher/launcheritem.cpp:107
34+#: plugins/Unity/Launcher/launcheritem.cpp:108
3535msgid "Unpin shortcut"
3636msgstr "Desenganxa la drecera"
3737
38−#: qml/Components/DelayedLockscreen.qml:49
38+#: qml/Components/DelayedLockscreen.qml:50
3939msgid "Device Locked"
4040msgstr "Dispositiu bloquejat"
4141
42−#: qml/Components/DelayedLockscreen.qml:64
42+#: qml/Components/DelayedLockscreen.qml:65
4343msgid "You have been locked out due to too many failed passphrase attempts."
4444msgstr ""
4545"Se us ha bloquejat l'accés al dispositiu. Heu sobrepassat el nombre "
4646"d'intents d'introducció de la contrasenya."
4747
48−#: qml/Components/DelayedLockscreen.qml:65
48+#: qml/Components/DelayedLockscreen.qml:66
4949msgid "You have been locked out due to too many failed passcode attempts."
5050msgstr ""
5151"Se us ha bloquejat l'accés al dispositiu. Heu sobrepassat el nombre "
5252"d'intents d'introducció del codi d'accés."
5353
54−#: qml/Components/DelayedLockscreen.qml:74
54+#: qml/Components/DelayedLockscreen.qml:75
5555#, qt-format
5656msgid "Please wait %1 minute and then try again…"
5757msgid_plural "Please wait %1 minutes and then try again…"
@@ -78,7 +78,7 @@ msgid "Log Out"
7878msgstr "Surt"
7979
8080#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
81−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
81+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
8282#: qml/Wizard/Pages/passcode-set.qml:32
8383msgid "Cancel"
8484msgstr "Cancel·la"
@@ -123,18 +123,188 @@ msgctxt "Button: Restart the system"
123123msgid "Restart"
124124msgstr "Reinicia"
125125
126−#: qml/Components/Lockscreen.qml:231
126+#: qml/Components/KeyboardShortcutsOverlay.qml:41
127+msgid "Keyboard Shortcuts"
128+msgstr ""
129+
130+#: qml/Components/KeyboardShortcutsOverlay.qml:55
131+msgid "Unity 8"
132+msgstr ""
133+
134+#: qml/Components/KeyboardShortcutsOverlay.qml:62
135+msgid "PrtScr"
136+msgstr ""
137+
138+#: qml/Components/KeyboardShortcutsOverlay.qml:67
139+msgid "Takes a screenshot."
140+msgstr ""
141+
142+#: qml/Components/KeyboardShortcutsOverlay.qml:75
143+msgid "Alt + PrtScr"
144+msgstr ""
145+
146+#: qml/Components/KeyboardShortcutsOverlay.qml:80
147+msgid "Takes a screenshot of a window."
148+msgstr ""
149+
150+#: qml/Components/KeyboardShortcutsOverlay.qml:88
151+msgid "Super + Space"
152+msgstr ""
153+
154+#: qml/Components/KeyboardShortcutsOverlay.qml:93
155+msgid "Switches to next keyboard layout."
156+msgstr ""
157+
158+#: qml/Components/KeyboardShortcutsOverlay.qml:101
159+msgid "Super + Shift + Space"
160+msgstr ""
161+
162+#: qml/Components/KeyboardShortcutsOverlay.qml:106
163+msgid "Switches to previous keyboard layout."
164+msgstr ""
165+
166+#: qml/Components/KeyboardShortcutsOverlay.qml:118
167+msgid "Launcher"
168+msgstr ""
169+
170+#: qml/Components/KeyboardShortcutsOverlay.qml:125
171+msgid "Super (Hold)"
172+msgstr ""
173+
174+#: qml/Components/KeyboardShortcutsOverlay.qml:130
175+msgid "Opens the launcher, displays shortcuts."
176+msgstr ""
177+
178+#: qml/Components/KeyboardShortcutsOverlay.qml:138
179+msgid "Alt + F1"
180+msgstr ""
181+
182+#: qml/Components/KeyboardShortcutsOverlay.qml:143
183+msgid "Opens launcher keyboard navigation mode."
184+msgstr ""
185+
186+#: qml/Components/KeyboardShortcutsOverlay.qml:151
187+msgid "Super + Tab"
188+msgstr ""
189+
190+#: qml/Components/KeyboardShortcutsOverlay.qml:156
191+msgid "Switches applications via the launcher."
192+msgstr ""
193+
194+#: qml/Components/KeyboardShortcutsOverlay.qml:164
195+msgid "Super + 0 to 9"
196+msgstr ""
197+
198+#: qml/Components/KeyboardShortcutsOverlay.qml:169
199+msgid "Same as clicking on a launcher icon."
200+msgstr ""
201+
202+#: qml/Components/KeyboardShortcutsOverlay.qml:181
203+msgid "Scopes"
204+msgstr ""
205+
206+#: qml/Components/KeyboardShortcutsOverlay.qml:188
207+msgid "Super (Tap)"
208+msgstr ""
209+
210+#: qml/Components/KeyboardShortcutsOverlay.qml:193
211+msgid "Opens the Scopes home."
212+msgstr ""
213+
214+#: qml/Components/KeyboardShortcutsOverlay.qml:209
215+msgid "Switching"
216+msgstr ""
217+
218+#: qml/Components/KeyboardShortcutsOverlay.qml:216
219+msgid "Alt + Tab"
220+msgstr ""
221+
222+#: qml/Components/KeyboardShortcutsOverlay.qml:221
223+msgid "Switches between applications."
224+msgstr ""
225+
226+#: qml/Components/KeyboardShortcutsOverlay.qml:229
227+msgid "Super + W"
228+msgstr ""
229+
230+#: qml/Components/KeyboardShortcutsOverlay.qml:234
231+msgid "Opens the desktop spread."
232+msgstr ""
233+
234+#: qml/Components/KeyboardShortcutsOverlay.qml:242
235+msgid "Cursor Left or Right"
236+msgstr ""
237+
238+#: qml/Components/KeyboardShortcutsOverlay.qml:247
239+msgid "Moves the focus."
240+msgstr ""
241+
242+#: qml/Components/KeyboardShortcutsOverlay.qml:259
243+msgid "Windows"
244+msgstr ""
245+
246+#: qml/Components/KeyboardShortcutsOverlay.qml:266
247+msgid "Ctrl + Super + D"
248+msgstr ""
249+
250+#: qml/Components/KeyboardShortcutsOverlay.qml:271
251+msgid "Minimizes all windows."
252+msgstr ""
253+
254+#: qml/Components/KeyboardShortcutsOverlay.qml:279
255+msgid "Ctrl + Super + Up"
256+msgstr ""
257+
258+#: qml/Components/KeyboardShortcutsOverlay.qml:284
259+msgid "Maximizes the current window."
260+msgstr ""
261+
262+#: qml/Components/KeyboardShortcutsOverlay.qml:292
263+msgid "Ctrl + Super + Down"
264+msgstr ""
265+
266+#: qml/Components/KeyboardShortcutsOverlay.qml:297
267+msgid "Minimizes or restores the current window."
268+msgstr ""
269+
270+#: qml/Components/KeyboardShortcutsOverlay.qml:305
271+msgid "Ctrl + Super + Left or Right"
272+msgstr ""
273+
274+#: qml/Components/KeyboardShortcutsOverlay.qml:310
275+msgid "Semi-maximizes the current window."
276+msgstr ""
277+
278+#: qml/Components/KeyboardShortcutsOverlay.qml:318
279+msgid "Alt + F4"
280+msgstr ""
281+
282+#: qml/Components/KeyboardShortcutsOverlay.qml:323
283+msgid "Closes the current window."
284+msgstr ""
285+
286+#: qml/Components/Lockscreen.qml:239
127287msgid "Return to Call"
128288msgstr "Torna a la trucada"
129289
130−#: qml/Components/Lockscreen.qml:231
290+#: qml/Components/Lockscreen.qml:239
131291msgid "Emergency Call"
132292msgstr "Trucada d'emergència"
133293
134−#: qml/Components/Lockscreen.qml:263
294+#: qml/Components/Lockscreen.qml:271
135295msgid "OK"
136296msgstr "D'acord"
137297
298+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
299+#, qt-format
300+msgid "%1:%2:%3"
301+msgstr ""
302+
303+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
304+#, qt-format
305+msgid "%1:%2"
306+msgstr ""
307+
138308#: qml/Components/ModeSwitchWarningDialog.qml:32
139309msgid "Apps may have unsaved data:"
140310msgstr "Pot ser que aquestes aplicacions no hagin desat les dades:"
@@ -144,6 +314,8 @@ msgctxt ""
144314"Re-dock means connect the device again to an external screen/mouse/keyboard"
145315msgid "Re-dock, save your work and close these apps to continue."
146316msgstr ""
317+"Torneu a acoblar, deseu la vostra feina i tanqueu aquestes aplicacions abans "
318+"de continuar."
147319
148320#: qml/Components/ModeSwitchWarningDialog.qml:63
149321msgid "Or force close now (unsaved data will be lost)."
@@ -161,55 +333,59 @@ msgstr "Torna a connectar"
161333msgid "Close all"
162334msgstr "Tanca-ho tot"
163335
164−#: qml/Dash/DashPageHeader.qml:337
336+#: qml/Components/SharingPicker.qml:54
337+msgid "Preview Share Item"
338+msgstr "Previsualitzeu l'element a compartir"
339+
340+#: qml/Dash/DashPageHeader.qml:333
165341msgctxt "Button: Open the Ubuntu Store"
166342msgid "Store"
167343msgstr "Botiga"
168344
169−#: qml/Dash/DashPageHeader.qml:344
345+#: qml/Dash/DashPageHeader.qml:340
170346msgctxt "Button: Start a search in the current dash scope"
171347msgid "Search"
172348msgstr "Cerca"
173349
174−#: qml/Dash/DashPageHeader.qml:354
350+#: qml/Dash/DashPageHeader.qml:350
175351msgctxt "Button: Show the current dash scope settings"
176352msgid "Settings"
177353msgstr "Paràmetres"
178354
179−#: qml/Dash/DashPageHeader.qml:361
355+#: qml/Dash/DashPageHeader.qml:357
180356msgid "Remove from Favorites"
181357msgstr "Suprimeix dels preferits"
182358
183−#: qml/Dash/DashPageHeader.qml:361
359+#: qml/Dash/DashPageHeader.qml:357
184360msgid "Add to Favorites"
185361msgstr "Afegeix als preferits"
186362
187363#: qml/Dash/FiltersPopover.qml:60
188364msgid "Refine your results"
189−msgstr ""
365+msgstr "Refineu els resultats"
190366
191367#: qml/Dash/FiltersPopover.qml:69
192368msgid "Reset"
193−msgstr ""
369+msgstr "Restableix"
194370
195−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
371+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
196372msgid "Show less"
197373msgstr ""
198374
199−#: qml/Dash/GenericScopeView.qml:579
375+#: qml/Dash/GenericScopeView.qml:580
200376msgid "Show all"
201377msgstr ""
202378
203−#: qml/Dash/GenericScopeView.qml:636
379+#: qml/Dash/GenericScopeView.qml:637
204380msgctxt "Label: Hint for dash search line edit"
205381msgid "Search"
206382msgstr "Cerca"
207383
208−#: qml/Dash/PageHeaderExtraPanel.qml:55
384+#: qml/Dash/PageHeaderExtraPanel.qml:56
209385msgid "Recent Searches"
210386msgstr "Cerques recents"
211387
212−#: qml/Dash/PageHeaderExtraPanel.qml:66
388+#: qml/Dash/PageHeaderExtraPanel.qml:67
213389msgid "Clear All"
214390msgstr "Neteja-ho tot"
215391
@@ -222,22 +398,18 @@ msgid "Less..."
222398msgstr "Menys..."
223399
224400#: qml/Dash/Previews/PreviewCommentInput.qml:68
225−#: qml/Dash/Previews/PreviewRatingInput.qml:174
401+#: qml/Dash/Previews/PreviewRatingInput.qml:175
226402msgid "Send"
227403msgstr "Envia"
228404
229−#: qml/Dash/Previews/PreviewRatingInput.qml:84
405+#: qml/Dash/Previews/PreviewRatingInput.qml:82
230406msgid "Rate this"
231407msgstr "Puntueu-ho"
232408
233−#: qml/Dash/Previews/PreviewRatingInput.qml:129
409+#: qml/Dash/Previews/PreviewRatingInput.qml:157
234410msgid "Add a review"
235411msgstr "Afegiu una ressenya"
236412
237−#: qml/Dash/Previews/PreviewSharing.qml:66
238−msgid "Preview Share Item"
239−msgstr ""
240−
241413#: qml/Dash/PullToRefreshScopeStyle.qml:55
242414msgid "Pull to refresh…"
243415msgstr "Estireu per actualitzar..."
@@ -250,49 +422,63 @@ msgstr "Deixeu anar per actualitzar..."
250422msgid "Enable location data"
251423msgstr "Habilita les dades d'ubicació"
252424
253−#: qml/Dash/ScopesList.qml:67
425+#: qml/Dash/ScopesList.qml:55
254426msgid "Manage"
255427msgstr "Gestiona"
256428
257−#: qml/Dash/ScopesList.qml:113
429+#: qml/Dash/ScopesList.qml:102
258430msgid "Home"
259431msgstr "Inici"
260432
261−#: qml/Dash/ScopesList.qml:114
433+#: qml/Dash/ScopesList.qml:103
262434msgid "Also installed"
263435msgstr "També instal·lat"
264436
265−#: qml/DisabledScreenNotice.qml:104
437+#: qml/DisabledScreenNotice.qml:109
266438msgid ""
267439"Your device is now connected to an external display. Use this screen as a "
268440"touch pad to interact with the pointer."
269441msgstr ""
442+"El vostre dispositiu està ara connectat a un monitor extern. Useu aquesta "
443+"pantalla com a ratolí tàctil per interaccionar amb el cursor."
270444
271−#: qml/Greeter/CoverPage.qml:118
445+#: qml/Greeter/CoverPage.qml:127
272446msgid "Unlock"
273447msgstr "Desbloca"
274448
275−#: qml/Greeter/LoginList.qml:239
449+#: qml/Greeter/Greeter.qml:555
450+msgid "Try again"
451+msgstr ""
452+
453+#: qml/Greeter/LoginList.qml:63
454+msgid "Passphrase"
455+msgstr ""
456+
457+#: qml/Greeter/LoginList.qml:64
458+msgid "Passcode"
459+msgstr ""
460+
461+#: qml/Greeter/LoginList.qml:87
276462msgid "Retry"
277463msgstr "Torna-ho a provar"
278464
279−#: qml/Greeter/LoginList.qml:240
280−msgid "Tap to unlock"
281−msgstr "Feu un toc per desblocar"
465+#: qml/Greeter/LoginList.qml:88
466+msgid "Log In"
467+msgstr ""
282468
283−#: qml/Greeter/NarrowView.qml:54
469+#: qml/Greeter/NarrowView.qml:55
284470msgid "Sorry, incorrect passphrase."
285471msgstr "La contrasenya és incorrecta"
286472
287−#: qml/Greeter/NarrowView.qml:55
473+#: qml/Greeter/NarrowView.qml:56
288474msgid "Sorry, incorrect passcode."
289475msgstr "El codi d'accés no és correcte"
290476
291−#: qml/Greeter/NarrowView.qml:56
477+#: qml/Greeter/NarrowView.qml:57
292478msgid "This will be your last attempt."
293479msgstr "Aquest serà el darrer intent."
294480
295−#: qml/Greeter/NarrowView.qml:58
481+#: qml/Greeter/NarrowView.qml:59
296482msgid ""
297483"If passphrase is entered incorrectly, your phone will conduct a factory "
298484"reset and all personal data will be deleted."
@@ -301,7 +487,7 @@ msgstr ""
301487"reinicialitzarà a l'estat de fàbrica i se suprimiran totes les dades "
302488"personals."
303489
304−#: qml/Greeter/NarrowView.qml:59
490+#: qml/Greeter/NarrowView.qml:60
305491msgid ""
306492"If passcode is entered incorrectly, your phone will conduct a factory reset "
307493"and all personal data will be deleted."
@@ -310,34 +496,34 @@ msgstr ""
310496"reinicialitzarà a l'estat de fàbrica i se suprimiran totes les dades "
311497"personals."
312498
313−#: qml/Greeter/NarrowView.qml:116
499+#: qml/Greeter/NarrowView.qml:129
314500#, qt-format
315501msgid "Enter %1"
316502msgstr "Introduïu: %1"
317503
318−#: qml/Greeter/NarrowView.qml:117
504+#: qml/Greeter/NarrowView.qml:130
319505msgid "Enter passphrase"
320506msgstr "Introduïu la contrasenya"
321507
322−#: qml/Greeter/NarrowView.qml:118
508+#: qml/Greeter/NarrowView.qml:131
323509msgid "Enter passcode"
324510msgstr "Introduïu el codi d'accés"
325511
326−#: qml/Greeter/NarrowView.qml:119
512+#: qml/Greeter/NarrowView.qml:135
327513#, qt-format
328514msgid "Sorry, incorrect %1"
329515msgstr "Incorrecte (%1)"
330516
331−#: qml/Greeter/NarrowView.qml:120
517+#: qml/Greeter/NarrowView.qml:136
332518msgid "Sorry, incorrect passphrase"
333519msgstr "La contrasenya no és correcta"
334520
335−#: qml/Greeter/NarrowView.qml:121
521+#: qml/Greeter/NarrowView.qml:137
336522msgctxt "passphrase"
337523msgid "Please re-enter"
338524msgstr "Torneu-ho a introduir"
339525
340−#: qml/Greeter/NarrowView.qml:122
526+#: qml/Greeter/NarrowView.qml:138
341527msgid "Sorry, incorrect passcode"
342528msgstr "El codi d'accés no és correcte"
343529
@@ -412,18 +598,18 @@ msgstr "S'ha finalitzat"
412598msgid "Failed, tap to retry"
413599msgstr "Ha fallat, feu un toc per tornar-ho a intentar"
414600
415−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
416−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
601+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
602+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
417603msgctxt "Button: Send a reply message"
418604msgid "Send"
419605msgstr "Envia"
420606
421−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
607+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
422608msgctxt "Label: Hint in message indicator line edit"
423609msgid "Reply"
424610msgstr "Respon"
425611
426−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
612+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
427613msgctxt "Button: Call back on phone"
428614msgid "Call back"
429615msgstr "Retorna la trucada"
@@ -431,33 +617,15 @@ msgstr "Retorna la trucada"
431617#: qml/Stages/SideStage.qml:76
432618msgid "Drag using 3 fingers any application from one window to the other"
433619msgstr ""
620+"Arrossegueu usant 3 dits qualsevol aplicació d'una finestra a una altra"
434621
435−#: qml/Tutorial/TutorialBottom.qml:78
436−msgid "Swipe up to add a contact"
437−msgstr ""
438−
439−#: qml/Tutorial/TutorialBottom.qml:80
440−msgid "Swipe up for favorite calculations"
441−msgstr ""
442−
443−#: qml/Tutorial/TutorialBottom.qml:82
444−msgid "Swipe up for recent calls"
445−msgstr ""
446−
447−#: qml/Tutorial/TutorialBottom.qml:84
448−msgid "Swipe up to create a message"
449−msgstr ""
450−
451−#: qml/Tutorial/TutorialBottom.qml:85
452−msgid "Swipe up to manage the app"
453−msgstr ""
454−
455−#: qml/Tutorial/TutorialLeftLong.qml:47
622+#: qml/Tutorial/TutorialLeftLong.qml:49
456623msgid "Long swipe from the left edge to open the Today scope"
457624msgstr ""
625+"Feu una lliscada llarga des de la vora esquerra per obrir l'àmbit Avui"
458626
459627#: qml/Tutorial/TutorialLeft.qml:47
460−msgid "Swipe from the left edge to open the launcher"
628+msgid "Short swipe from the left edge to open the launcher"
461629msgstr ""
462630
463631#: qml/Tutorial/TutorialRight.qml:55
@@ -465,15 +633,11 @@ msgid "Push your mouse against the right edge to view your open apps"
465633msgstr ""
466634
467635#: qml/Tutorial/TutorialRight.qml:56
468−msgid "Short or long swipe from the right edge to view your open apps"
636+msgid "Swipe from the right edge to view your open apps"
469637msgstr ""
470638
471639#: qml/Tutorial/TutorialTop.qml:53
472−msgid "Swipe from the top right edge to open the notification bar"
473−msgstr ""
474−
475−#: qml/Tutorial/TutorialTop.qml:54
476−msgid "Swipe from the top edge to open the notification bar"
640+msgid "Swipe from the top edge to access notifications and quick settings"
477641msgstr ""
478642
479643#: qml/Wizard/Page.qml:54
@@ -483,16 +647,16 @@ msgstr "Enrere"
483647
484648#: qml/Wizard/Pages/10-welcome.qml:27
485649msgid "Language"
486−msgstr ""
650+msgstr "Llengua"
487651
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
652+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
653+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
490654#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
491655#: qml/Wizard/Pages/75-report-check.qml:84
492−#: qml/Wizard/Pages/passcode-desktop.qml:124
656+#: qml/Wizard/Pages/passcode-desktop.qml:141
493657#: qml/Wizard/Pages/password-set.qml:141
494658msgid "Next"
495−msgstr ""
659+msgstr "Següent"
496660
497661#: qml/Wizard/Pages/30-wifi.qml:29
498662msgid "Connect to Wi‑Fi"
@@ -500,15 +664,15 @@ msgstr "Connecta't a la Wi-Fi"
500664
501665#: qml/Wizard/Pages/30-wifi.qml:130
502666msgid "Connected"
503−msgstr ""
667+msgstr "Connectat"
504668
505669#: qml/Wizard/Pages/30-wifi.qml:163
506670msgid "Available Wi-Fi networks"
507−msgstr ""
671+msgstr "Xarxes Wi-Fi disponibles"
508672
509673#: qml/Wizard/Pages/30-wifi.qml:164
510674msgid "No available Wi-Fi networks"
511−msgstr ""
675+msgstr "No hi ha xarxes Wi-Fi disponibles"
512676
513677#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
514678#: qml/Wizard/Pages/sim.qml:101
@@ -517,98 +681,101 @@ msgstr "Omet"
517681
518682#: qml/Wizard/Pages/40-location.qml:27
519683msgid "Location Services"
520−msgstr ""
684+msgstr "Serveis d'ubicació"
521685
522686#: qml/Wizard/Pages/40-location.qml:83
523687msgid ""
524688"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
525689"(recommended)"
526690msgstr ""
691+"Usa anònimament el GPS, punts d'accés Wi-Fi i la xarxa mòbil per detectar la "
692+"ubicació (recomanat)"
527693
528694#: qml/Wizard/Pages/40-location.qml:105
529695#, qt-format
530696msgid "By selecting this option you agree to the Nokia HERE %1."
531−msgstr ""
697+msgstr "Seleccionant aquesta opció esteu d'acord amb el Nokia HERE %1."
532698
533699#: qml/Wizard/Pages/40-location.qml:106
534700msgctxt "part of: Nokia HERE terms and conditions"
535701msgid "terms and conditions"
536−msgstr ""
702+msgstr "termes i condicions"
537703
538704#: qml/Wizard/Pages/40-location.qml:160
539705msgid "GPS only"
540−msgstr ""
706+msgstr "Sols GPS"
541707
542708#: qml/Wizard/Pages/40-location.qml:214
543709msgid "Don't use my location"
544−msgstr ""
710+msgstr "No usis la meva ubicació"
545711
546712#: qml/Wizard/Pages/40-location.qml:260
547713msgid "You can change it later in System Settings."
548−msgstr ""
714+msgstr "Podeu canviar-ho més tard a Paràmetres del sistema."
549715
550716#: qml/Wizard/Pages/50-timezone.qml:29
551717msgid "Time Zone"
552−msgstr ""
718+msgstr "Fus horari"
553719
554−#: qml/Wizard/Pages/50-timezone.qml:178
720+#: qml/Wizard/Pages/50-timezone.qml:181
555721msgid "Enter your city"
556−msgstr ""
722+msgstr "Entreu la vostra ciutat"
557723
558724#: qml/Wizard/Pages/60-account.qml:24
559725msgid "Personalize Your Device"
560−msgstr ""
726+msgstr "Personalitzeu el vostre dispositiu"
561727
562728#: qml/Wizard/Pages/60-account.qml:48
563729msgid "Preferred Name"
564−msgstr ""
730+msgstr "Nom preferit"
565731
566732#: qml/Wizard/Pages/70-passwd-type.qml:39
567733msgid "Lock Screen"
568−msgstr ""
734+msgstr "Bloca la pantalla"
569735
570736#: qml/Wizard/Pages/70-passwd-type.qml:101
571737msgctxt "Label: Type of security method"
572738msgid "Create new password"
573−msgstr ""
739+msgstr "Crea una contrasenya nova"
574740
575741#: qml/Wizard/Pages/70-passwd-type.qml:103
576742msgctxt "Label: Type of security method"
577743msgid "Create passcode (numbers only)"
578−msgstr ""
744+msgstr "Creeu un codi d'accés (sols números)"
579745
580746#: qml/Wizard/Pages/70-passwd-type.qml:105
581747msgctxt "Label: Type of security method"
582748msgid "No lock code"
583−msgstr ""
749+msgstr "No hi ha codi de bloqueig"
584750
585751#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
586752msgid "Privacy Policy"
587−msgstr ""
753+msgstr "Política de privacitat"
588754
589755#: qml/Wizard/Pages/75-report-check.qml:26
590756msgid "Help Us Improve"
591−msgstr ""
757+msgstr "Ajudeu-nos a millorar"
592758
593759#: qml/Wizard/Pages/75-report-check.qml:59
594760msgid "Improve system performance by sending us crashes and error reports."
595761msgstr ""
762+"Milloreu el rendiment del sistema enviant-nos informes de fallades i errors."
596763
597764#: qml/Wizard/Pages/75-report-check.qml:60
598765msgid "Privacy policy"
599−msgstr ""
766+msgstr "Política de privacitat"
600767
601768#: qml/Wizard/Pages/80-finished.qml:89
602769msgid "Welcome to Ubuntu"
603−msgstr ""
770+msgstr "Us donem la benvinguda a l'Ubuntu"
604771
605772#: qml/Wizard/Pages/80-finished.qml:104
606773msgid "You are ready to use your device now"
607−msgstr ""
774+msgstr "Ara ja esteu a punt per usar el vostre dispositiu"
608775
609776#: qml/Wizard/Pages/80-finished.qml:124
610777msgid "Get Started"
611−msgstr ""
778+msgstr "Introducció"
612779
613780#: qml/Wizard/Pages/here-terms.qml:25
614781msgid "Terms & Conditions"
@@ -617,6 +784,7 @@ msgstr "Condicions generals"
617784#: qml/Wizard/Pages/here-terms.qml:69
618785msgid "Your device uses positioning technologies provided by HERE."
619786msgstr ""
787+"El vostre dispositiu usa tecnologies de posicionament proveïdes per HERE."
620788
621789#: qml/Wizard/Pages/here-terms.qml:81
622790msgid ""
@@ -624,92 +792,98 @@ msgid ""
624792"collects information about nearby cell towers and Wi-Fi hotspots around your "
625793"current location whenever your position is being found."
626794msgstr ""
795+"Per proveir-vos de serveis de posicionament i per millorar la seva qualitat, "
796+"HERE recull informació sobre torres de telefonia mòbil i punts d'accés Wi-Fi "
797+"al voltant de la vostra ubicació actual sempre que s'està buscant la vostra "
798+"posició."
627799
628800#: qml/Wizard/Pages/here-terms.qml:93
629801msgid ""
630802"The information collected is used to analyze the service and to improve the "
631803"use of service, but not to identify you personally."
632804msgstr ""
805+"La informació recollida s'usa per analitzar el servei i per millorar l'ús "
806+"del servei, però no per identificar-vos personalment."
633807
634808#: qml/Wizard/Pages/here-terms.qml:106
635809#, qt-format
636810msgid "By continuing, you agree to the HERE platform %1 and %2."
637−msgstr ""
811+msgstr "En continuar, esteu d'acord amb la plataforma HERE %1 i %2."
638812
639813#: qml/Wizard/Pages/here-terms.qml:107
640814msgid "Service Terms"
641−msgstr ""
815+msgstr "Termes del servei"
642816
643817#: qml/Wizard/Pages/passcode-confirm.qml:43
644−#: qml/Wizard/Pages/passcode-desktop.qml:80
818+#: qml/Wizard/Pages/passcode-desktop.qml:96
645819msgid "Confirm passcode"
646820msgstr "Confirmeu el codi d'accés"
647821
648822#: qml/Wizard/Pages/passcode-confirm.qml:45
649823msgid "Incorrect passcode."
650−msgstr ""
824+msgstr "Codi d'accés incorrecte."
651825
652826#: qml/Wizard/Pages/passcode-confirm.qml:45
653827msgctxt "Enter the passcode again"
654828msgid "Please re-enter."
655−msgstr ""
829+msgstr "Si us plau torneu a introduir-lo."
656830
657831#: qml/Wizard/Pages/passcode-desktop.qml:30
658832msgid "Lock Screen Passcode"
659−msgstr ""
833+msgstr "Codi d'accés al bloqueig de pantalla"
660834
661−#: qml/Wizard/Pages/passcode-desktop.qml:56
835+#: qml/Wizard/Pages/passcode-desktop.qml:60
662836msgid "Enter 4 numbers to setup your passcode"
663−msgstr ""
837+msgstr "Entreu 4 números per establir el codi d'accés"
664838
665−#: qml/Wizard/Pages/passcode-desktop.qml:65
839+#: qml/Wizard/Pages/passcode-desktop.qml:76
666840#: qml/Wizard/Pages/passcode-set.qml:54
667841msgid "Choose passcode"
668−msgstr ""
842+msgstr "Trieu el codi d'accés"
669843
670−#: qml/Wizard/Pages/passcode-desktop.qml:105
844+#: qml/Wizard/Pages/passcode-desktop.qml:126
671845msgid "Passcode too short"
672−msgstr ""
846+msgstr "El codi d'accés és massa curt"
673847
674−#: qml/Wizard/Pages/passcode-desktop.qml:107
848+#: qml/Wizard/Pages/passcode-desktop.qml:128
675849msgid "Passcodes match"
676−msgstr ""
850+msgstr "Els codis d'accés concorden"
677851
678−#: qml/Wizard/Pages/passcode-desktop.qml:109
852+#: qml/Wizard/Pages/passcode-desktop.qml:130
679853msgid "Passcodes do not match"
680−msgstr ""
854+msgstr "Els codis d'accés no concorden"
681855
682856#: qml/Wizard/Pages/passcode-set.qml:62
683857msgid "Passcode must be 4 characters long"
684−msgstr ""
858+msgstr "El codi d'accés ha de tenir una longitud de 4 caràcters"
685859
686860#: qml/Wizard/Pages/password-set.qml:30
687861msgid "Lock Screen Password"
688−msgstr ""
862+msgstr "Contrasenya de bloqueig de pantalla"
689863
690864#: qml/Wizard/Pages/password-set.qml:61
691865msgid "Enter at least 8 characters"
692−msgstr ""
866+msgstr "Entreu almenys 8 caràcters"
693867
694868#: qml/Wizard/Pages/password-set.qml:73
695869msgid "Choose password"
696−msgstr ""
870+msgstr "Escolliu la contrasenya"
697871
698872#: qml/Wizard/Pages/password-set.qml:103
699873msgid "Confirm password"
700−msgstr ""
874+msgstr "Confirmeu la contrasenya"
701875
702876#: qml/Wizard/Pages/sim.qml:27
703877msgid "No SIM card installed"
704−msgstr ""
878+msgstr "No hi cap SIM instal·lada"
705879
706880#: qml/Wizard/Pages/sim.qml:54
707881msgid "SIM card added"
708−msgstr ""
882+msgstr "S'ha afegit una targeta SIM"
709883
710884#: qml/Wizard/Pages/sim.qml:55
711885msgid "You must restart the device to access the mobile network."
712−msgstr ""
886+msgstr "Heu de reiniciar el dispositiu per accedir a la xarxa mòbil."
713887
714888#: qml/Wizard/Pages/sim.qml:59
715889msgid "Restart"
@@ -717,35 +891,39 @@ msgstr "Reinicia"
717891
718892#: qml/Wizard/Pages/sim.qml:78
719893msgid "You won’t be able to make calls or use text messaging without a SIM."
720−msgstr ""
894+msgstr "No podreu fer trucades o usar la missatgeria de text sense una SIM."
721895
722896#: qml/Wizard/Pages/sim.qml:90
723897msgid "To proceed with no SIM tap Skip."
724−msgstr ""
898+msgstr "Per procedir sense cap SIM toqueu Omet."
725899
726900#: qml/Wizard/PasswordMeter.qml:87
727−msgid "Passwords match"
901+msgid "Password too short"
728902msgstr ""
729903
730904#: qml/Wizard/PasswordMeter.qml:89
905+msgid "Passwords match"
906+msgstr "Les contrasenyes coincideixen"
907+
908+#: qml/Wizard/PasswordMeter.qml:91
731909msgid "Passwords do not match"
732−msgstr ""
910+msgstr "Les contrasenyes no coincideixen"
733911
734−#: qml/Wizard/PasswordMeter.qml:93
912+#: qml/Wizard/PasswordMeter.qml:95
735913msgid "Strong password"
736−msgstr ""
914+msgstr "La contrasenya és forta"
737915
738−#: qml/Wizard/PasswordMeter.qml:95
916+#: qml/Wizard/PasswordMeter.qml:97
739917msgid "Fair password"
740−msgstr ""
918+msgstr "La contrasenya és acceptable"
741919
742−#: qml/Wizard/PasswordMeter.qml:97
920+#: qml/Wizard/PasswordMeter.qml:99
743921msgid "Weak password"
744−msgstr ""
922+msgstr "La contrasenya és dèbil"
745923
746−#: qml/Wizard/PasswordMeter.qml:99
924+#: qml/Wizard/PasswordMeter.qml:101
747925msgid "Very weak password"
748−msgstr ""
926+msgstr "La contrasenya és molt dèbil"
749927
750928#~ msgid "Confirm"
751929#~ msgstr "Confirma"
@@ -978,6 +1156,9 @@ msgstr ""
9781156#~ msgid "Open special menus"
9791157#~ msgstr "Obre els menús especials"
9801158
1159+#~ msgid "Tap to unlock"
1160+#~ msgstr "Feu un toc per desblocar"
1161+
9811162#~ msgid "To view open apps"
9821163#~ msgstr "Per veure les aplicacions obertes"
9831164
@@ -1073,3 +1254,36 @@ msgstr ""
10731254
10741255#~ msgid "Call back"
10751256#~ msgstr "Retorna la trucada"
1257+
1258+#~ msgid "Swipe up for recent calls"
1259+#~ msgstr "Llisqueu cap amunt per a trucades recents"
1260+
1261+#~ msgid "Swipe up for favorite calculations"
1262+#~ msgstr "Llisqueu cap amunt per als càlculs favorits"
1263+
1264+#~ msgid "Swipe up to create a message"
1265+#~ msgstr "Llisqueu cap amunt per crear un missatge"
1266+
1267+#~ msgid "Swipe from the left edge to open the launcher"
1268+#~ msgstr "Llisqueu des de la vora esquerra per obrir el llançador"
1269+
1270+#~ msgid "Swipe from the top right edge to open the notification bar"
1271+#~ msgstr ""
1272+#~ "Llisqueu des de la vora superior dreta per obrir la barra de notificacions"
1273+
1274+#~ msgid "Swipe from the top edge to open the notification bar"
1275+#~ msgstr "Llisqueu des de la vora superior per obrir la barra de notificacions"
1276+
1277+#~ msgid "Hover your mouse on the right edge to view your open apps"
1278+#~ msgstr "Passeu el ratolí a la vora dreta per veure les aplicacions obertes"
1279+
1280+#~ msgid "Short or long swipe from the right edge to view your open apps"
1281+#~ msgstr ""
1282+#~ "Feu una lliscada llarga o curta des de la vora dreta per veure les "
1283+#~ "aplicacions obertes"
1284+
1285+#~ msgid "Swipe up to manage the app"
1286+#~ msgstr "Llisqueu cap amunt per gestionar l'aplicació"
1287+
1288+#~ msgid "Swipe up to add a contact"
1289+#~ msgstr "Llisqueu per afegir un contacte"
po/ca@valencia.po+262−100
@@ -7,7 +7,7 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+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,43 +15,43 @@ 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-05-19 05:50+0000\n"
19−"X-Generator: Launchpad (build 18025)\n"
18+"X-Launchpad-Export-Date: 2016-07-14 06:02+0000\n"
19+"X-Generator: Launchpad (build 18115)\n"
2020
21−#: plugins/IntegratedLightDM/Greeter.cpp:112
21+#: plugins/LightDM/Greeter.cpp:123
2222msgid "Password: "
2323msgstr "Contrasenya: "
2424
25−#: plugins/Unity/Launcher/launcheritem.cpp:48
26−#: plugins/Unity/Launcher/launcheritem.cpp:107
25+#: plugins/Unity/Launcher/launcheritem.cpp:49
26+#: plugins/Unity/Launcher/launcheritem.cpp:108
2727msgid "Pin shortcut"
2828msgstr "Apega la drecera"
2929
30−#: plugins/Unity/Launcher/launcheritem.cpp:53
30+#: plugins/Unity/Launcher/launcheritem.cpp:54
3131msgid "Quit"
3232msgstr ""
3333
34−#: plugins/Unity/Launcher/launcheritem.cpp:107
34+#: plugins/Unity/Launcher/launcheritem.cpp:108
3535msgid "Unpin shortcut"
3636msgstr "Desenganxa la drecera"
3737
38−#: qml/Components/DelayedLockscreen.qml:49
38+#: qml/Components/DelayedLockscreen.qml:50
3939msgid "Device Locked"
4040msgstr "Dispositiu bloquejat"
4141
42−#: qml/Components/DelayedLockscreen.qml:64
42+#: qml/Components/DelayedLockscreen.qml:65
4343msgid "You have been locked out due to too many failed passphrase attempts."
4444msgstr ""
4545"Se vos ha bloquejat l'accés al dispositiu. Heu sobrepassat el nombre "
4646"d'intents d'introducció de la contrasenya."
4747
48−#: qml/Components/DelayedLockscreen.qml:65
48+#: qml/Components/DelayedLockscreen.qml:66
4949msgid "You have been locked out due to too many failed passcode attempts."
5050msgstr ""
5151"Se vos ha bloquejat l'accés al dispositiu. Heu sobrepassat el nombre "
5252"d'intents d'introducció del codi d'accés."
5353
54−#: qml/Components/DelayedLockscreen.qml:74
54+#: qml/Components/DelayedLockscreen.qml:75
5555#, qt-format
5656msgid "Please wait %1 minute and then try again…"
5757msgid_plural "Please wait %1 minutes and then try again…"
@@ -78,7 +78,7 @@ msgid "Log Out"
7878msgstr ""
7979
8080#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
81−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
81+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
8282#: qml/Wizard/Pages/passcode-set.qml:32
8383msgid "Cancel"
8484msgstr "Cancel·la"
@@ -123,18 +123,188 @@ msgctxt "Button: Restart the system"
123123msgid "Restart"
124124msgstr ""
125125
126−#: qml/Components/Lockscreen.qml:231
126+#: qml/Components/KeyboardShortcutsOverlay.qml:41
127+msgid "Keyboard Shortcuts"
128+msgstr ""
129+
130+#: qml/Components/KeyboardShortcutsOverlay.qml:55
131+msgid "Unity 8"
132+msgstr ""
133+
134+#: qml/Components/KeyboardShortcutsOverlay.qml:62
135+msgid "PrtScr"
136+msgstr ""
137+
138+#: qml/Components/KeyboardShortcutsOverlay.qml:67
139+msgid "Takes a screenshot."
140+msgstr ""
141+
142+#: qml/Components/KeyboardShortcutsOverlay.qml:75
143+msgid "Alt + PrtScr"
144+msgstr ""
145+
146+#: qml/Components/KeyboardShortcutsOverlay.qml:80
147+msgid "Takes a screenshot of a window."
148+msgstr ""
149+
150+#: qml/Components/KeyboardShortcutsOverlay.qml:88
151+msgid "Super + Space"
152+msgstr ""
153+
154+#: qml/Components/KeyboardShortcutsOverlay.qml:93
155+msgid "Switches to next keyboard layout."
156+msgstr ""
157+
158+#: qml/Components/KeyboardShortcutsOverlay.qml:101
159+msgid "Super + Shift + Space"
160+msgstr ""
161+
162+#: qml/Components/KeyboardShortcutsOverlay.qml:106
163+msgid "Switches to previous keyboard layout."
164+msgstr ""
165+
166+#: qml/Components/KeyboardShortcutsOverlay.qml:118
167+msgid "Launcher"
168+msgstr ""
169+
170+#: qml/Components/KeyboardShortcutsOverlay.qml:125
171+msgid "Super (Hold)"
172+msgstr ""
173+
174+#: qml/Components/KeyboardShortcutsOverlay.qml:130
175+msgid "Opens the launcher, displays shortcuts."
176+msgstr ""
177+
178+#: qml/Components/KeyboardShortcutsOverlay.qml:138
179+msgid "Alt + F1"
180+msgstr ""
181+
182+#: qml/Components/KeyboardShortcutsOverlay.qml:143
183+msgid "Opens launcher keyboard navigation mode."
184+msgstr ""
185+
186+#: qml/Components/KeyboardShortcutsOverlay.qml:151
187+msgid "Super + Tab"
188+msgstr ""
189+
190+#: qml/Components/KeyboardShortcutsOverlay.qml:156
191+msgid "Switches applications via the launcher."
192+msgstr ""
193+
194+#: qml/Components/KeyboardShortcutsOverlay.qml:164
195+msgid "Super + 0 to 9"
196+msgstr ""
197+
198+#: qml/Components/KeyboardShortcutsOverlay.qml:169
199+msgid "Same as clicking on a launcher icon."
200+msgstr ""
201+
202+#: qml/Components/KeyboardShortcutsOverlay.qml:181
203+msgid "Scopes"
204+msgstr ""
205+
206+#: qml/Components/KeyboardShortcutsOverlay.qml:188
207+msgid "Super (Tap)"
208+msgstr ""
209+
210+#: qml/Components/KeyboardShortcutsOverlay.qml:193
211+msgid "Opens the Scopes home."
212+msgstr ""
213+
214+#: qml/Components/KeyboardShortcutsOverlay.qml:209
215+msgid "Switching"
216+msgstr ""
217+
218+#: qml/Components/KeyboardShortcutsOverlay.qml:216
219+msgid "Alt + Tab"
220+msgstr ""
221+
222+#: qml/Components/KeyboardShortcutsOverlay.qml:221
223+msgid "Switches between applications."
224+msgstr ""
225+
226+#: qml/Components/KeyboardShortcutsOverlay.qml:229
227+msgid "Super + W"
228+msgstr ""
229+
230+#: qml/Components/KeyboardShortcutsOverlay.qml:234
231+msgid "Opens the desktop spread."
232+msgstr ""
233+
234+#: qml/Components/KeyboardShortcutsOverlay.qml:242
235+msgid "Cursor Left or Right"
236+msgstr ""
237+
238+#: qml/Components/KeyboardShortcutsOverlay.qml:247
239+msgid "Moves the focus."
240+msgstr ""
241+
242+#: qml/Components/KeyboardShortcutsOverlay.qml:259
243+msgid "Windows"
244+msgstr ""
245+
246+#: qml/Components/KeyboardShortcutsOverlay.qml:266
247+msgid "Ctrl + Super + D"
248+msgstr ""
249+
250+#: qml/Components/KeyboardShortcutsOverlay.qml:271
251+msgid "Minimizes all windows."
252+msgstr ""
253+
254+#: qml/Components/KeyboardShortcutsOverlay.qml:279
255+msgid "Ctrl + Super + Up"
256+msgstr ""
257+
258+#: qml/Components/KeyboardShortcutsOverlay.qml:284
259+msgid "Maximizes the current window."
260+msgstr ""
261+
262+#: qml/Components/KeyboardShortcutsOverlay.qml:292
263+msgid "Ctrl + Super + Down"
264+msgstr ""
265+
266+#: qml/Components/KeyboardShortcutsOverlay.qml:297
267+msgid "Minimizes or restores the current window."
268+msgstr ""
269+
270+#: qml/Components/KeyboardShortcutsOverlay.qml:305
271+msgid "Ctrl + Super + Left or Right"
272+msgstr ""
273+
274+#: qml/Components/KeyboardShortcutsOverlay.qml:310
275+msgid "Semi-maximizes the current window."
276+msgstr ""
277+
278+#: qml/Components/KeyboardShortcutsOverlay.qml:318
279+msgid "Alt + F4"
280+msgstr ""
281+
282+#: qml/Components/KeyboardShortcutsOverlay.qml:323
283+msgid "Closes the current window."
284+msgstr ""
285+
286+#: qml/Components/Lockscreen.qml:239
127287msgid "Return to Call"
128288msgstr "Torna a la cridada"
129289
130−#: qml/Components/Lockscreen.qml:231
290+#: qml/Components/Lockscreen.qml:239
131291msgid "Emergency Call"
132292msgstr "Cridada d'emergència"
133293
134−#: qml/Components/Lockscreen.qml:263
294+#: qml/Components/Lockscreen.qml:271
135295msgid "OK"
136296msgstr "D'acord"
137297
298+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
299+#, qt-format
300+msgid "%1:%2:%3"
301+msgstr ""
302+
303+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
304+#, qt-format
305+msgid "%1:%2"
306+msgstr ""
307+
138308#: qml/Components/ModeSwitchWarningDialog.qml:32
139309msgid "Apps may have unsaved data:"
140310msgstr ""
@@ -161,26 +331,30 @@ msgstr ""
161331msgid "Close all"
162332msgstr ""
163333
164−#: qml/Dash/DashPageHeader.qml:337
334+#: qml/Components/SharingPicker.qml:54
335+msgid "Preview Share Item"
336+msgstr ""
337+
338+#: qml/Dash/DashPageHeader.qml:333
165339msgctxt "Button: Open the Ubuntu Store"
166340msgid "Store"
167341msgstr ""
168342
169−#: qml/Dash/DashPageHeader.qml:344
343+#: qml/Dash/DashPageHeader.qml:340
170344msgctxt "Button: Start a search in the current dash scope"
171345msgid "Search"
172346msgstr ""
173347
174−#: qml/Dash/DashPageHeader.qml:354
348+#: qml/Dash/DashPageHeader.qml:350
175349msgctxt "Button: Show the current dash scope settings"
176350msgid "Settings"
177351msgstr ""
178352
179−#: qml/Dash/DashPageHeader.qml:361
353+#: qml/Dash/DashPageHeader.qml:357
180354msgid "Remove from Favorites"
181355msgstr "Suprimeix dels preferits"
182356
183−#: qml/Dash/DashPageHeader.qml:361
357+#: qml/Dash/DashPageHeader.qml:357
184358msgid "Add to Favorites"
185359msgstr "Afig als preferits"
186360
@@ -192,24 +366,24 @@ msgstr ""
192366msgid "Reset"
193367msgstr ""
194368
195−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
369+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
196370msgid "Show less"
197371msgstr ""
198372
199−#: qml/Dash/GenericScopeView.qml:579
373+#: qml/Dash/GenericScopeView.qml:580
200374msgid "Show all"
201375msgstr ""
202376
203−#: qml/Dash/GenericScopeView.qml:636
377+#: qml/Dash/GenericScopeView.qml:637
204378msgctxt "Label: Hint for dash search line edit"
205379msgid "Search"
206380msgstr ""
207381
208−#: qml/Dash/PageHeaderExtraPanel.qml:55
382+#: qml/Dash/PageHeaderExtraPanel.qml:56
209383msgid "Recent Searches"
210384msgstr ""
211385
212−#: qml/Dash/PageHeaderExtraPanel.qml:66
386+#: qml/Dash/PageHeaderExtraPanel.qml:67
213387msgid "Clear All"
214388msgstr ""
215389
@@ -222,22 +396,18 @@ msgid "Less..."
222396msgstr "Menys..."
223397
224398#: qml/Dash/Previews/PreviewCommentInput.qml:68
225−#: qml/Dash/Previews/PreviewRatingInput.qml:174
399+#: qml/Dash/Previews/PreviewRatingInput.qml:175
226400msgid "Send"
227401msgstr "Envia"
228402
229−#: qml/Dash/Previews/PreviewRatingInput.qml:84
403+#: qml/Dash/Previews/PreviewRatingInput.qml:82
230404msgid "Rate this"
231405msgstr "Puntueu-ho"
232406
233−#: qml/Dash/Previews/PreviewRatingInput.qml:129
407+#: qml/Dash/Previews/PreviewRatingInput.qml:157
234408msgid "Add a review"
235409msgstr "Afegiu una ressenya"
236410
237−#: qml/Dash/Previews/PreviewSharing.qml:66
238−msgid "Preview Share Item"
239−msgstr ""
240−
241411#: qml/Dash/PullToRefreshScopeStyle.qml:55
242412msgid "Pull to refresh…"
243413msgstr "Estireu per actualitzar..."
@@ -250,49 +420,61 @@ msgstr "Deixeu anar per actualitzar..."
250420msgid "Enable location data"
251421msgstr "Habilita les dades d'ubicació"
252422
253−#: qml/Dash/ScopesList.qml:67
423+#: qml/Dash/ScopesList.qml:55
254424msgid "Manage"
255425msgstr "Gestiona"
256426
257−#: qml/Dash/ScopesList.qml:113
427+#: qml/Dash/ScopesList.qml:102
258428msgid "Home"
259429msgstr "Inici"
260430
261−#: qml/Dash/ScopesList.qml:114
431+#: qml/Dash/ScopesList.qml:103
262432msgid "Also installed"
263433msgstr "També instal·lat"
264434
265−#: qml/DisabledScreenNotice.qml:104
435+#: qml/DisabledScreenNotice.qml:109
266436msgid ""
267437"Your device is now connected to an external display. Use this screen as a "
268438"touch pad to interact with the pointer."
269439msgstr ""
270440
271−#: qml/Greeter/CoverPage.qml:118
441+#: qml/Greeter/CoverPage.qml:127
272442msgid "Unlock"
273443msgstr "Desbloca"
274444
275−#: qml/Greeter/LoginList.qml:239
445+#: qml/Greeter/Greeter.qml:555
446+msgid "Try again"
447+msgstr ""
448+
449+#: qml/Greeter/LoginList.qml:63
450+msgid "Passphrase"
451+msgstr ""
452+
453+#: qml/Greeter/LoginList.qml:64
454+msgid "Passcode"
455+msgstr ""
456+
457+#: qml/Greeter/LoginList.qml:87
276458msgid "Retry"
277459msgstr ""
278460
279−#: qml/Greeter/LoginList.qml:240
280−msgid "Tap to unlock"
461+#: qml/Greeter/LoginList.qml:88
462+msgid "Log In"
281463msgstr ""
282464
283−#: qml/Greeter/NarrowView.qml:54
465+#: qml/Greeter/NarrowView.qml:55
284466msgid "Sorry, incorrect passphrase."
285467msgstr "La contrasenya és incorrecta"
286468
287−#: qml/Greeter/NarrowView.qml:55
469+#: qml/Greeter/NarrowView.qml:56
288470msgid "Sorry, incorrect passcode."
289471msgstr "El codi d'accés no és correcte"
290472
291−#: qml/Greeter/NarrowView.qml:56
473+#: qml/Greeter/NarrowView.qml:57
292474msgid "This will be your last attempt."
293475msgstr "Este serà el darrer intent."
294476
295−#: qml/Greeter/NarrowView.qml:58
477+#: qml/Greeter/NarrowView.qml:59
296478msgid ""
297479"If passphrase is entered incorrectly, your phone will conduct a factory "
298480"reset and all personal data will be deleted."
@@ -301,7 +483,7 @@ msgstr ""
301483"reinicialitzarà a l'estat de fàbrica i se suprimiran totes les dades "
302484"personals."
303485
304−#: qml/Greeter/NarrowView.qml:59
486+#: qml/Greeter/NarrowView.qml:60
305487msgid ""
306488"If passcode is entered incorrectly, your phone will conduct a factory reset "
307489"and all personal data will be deleted."
@@ -310,34 +492,34 @@ msgstr ""
310492"reinicialitzarà a l'estat de fàbrica i se suprimiran totes les dades "
311493"personals."
312494
313−#: qml/Greeter/NarrowView.qml:116
495+#: qml/Greeter/NarrowView.qml:129
314496#, qt-format
315497msgid "Enter %1"
316498msgstr "Introduïu: %1"
317499
318−#: qml/Greeter/NarrowView.qml:117
500+#: qml/Greeter/NarrowView.qml:130
319501msgid "Enter passphrase"
320502msgstr "Introduïu la contrasenya"
321503
322−#: qml/Greeter/NarrowView.qml:118
504+#: qml/Greeter/NarrowView.qml:131
323505msgid "Enter passcode"
324506msgstr "Introduïu el codi d'accés"
325507
326−#: qml/Greeter/NarrowView.qml:119
508+#: qml/Greeter/NarrowView.qml:135
327509#, qt-format
328510msgid "Sorry, incorrect %1"
329511msgstr "Incorrecte (%1)"
330512
331−#: qml/Greeter/NarrowView.qml:120
513+#: qml/Greeter/NarrowView.qml:136
332514msgid "Sorry, incorrect passphrase"
333515msgstr "La contrasenya no és correcta"
334516
335−#: qml/Greeter/NarrowView.qml:121
517+#: qml/Greeter/NarrowView.qml:137
336518msgctxt "passphrase"
337519msgid "Please re-enter"
338520msgstr ""
339521
340−#: qml/Greeter/NarrowView.qml:122
522+#: qml/Greeter/NarrowView.qml:138
341523msgid "Sorry, incorrect passcode"
342524msgstr "El codi d'accés no és correcte"
343525
@@ -412,18 +594,18 @@ msgstr "S'ha finalitzat"
412594msgid "Failed, tap to retry"
413595msgstr "Ha fallat, feu un toc per tornar-ho a intentar"
414596
415−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
416−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
597+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
598+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
417599msgctxt "Button: Send a reply message"
418600msgid "Send"
419601msgstr ""
420602
421−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
603+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
422604msgctxt "Label: Hint in message indicator line edit"
423605msgid "Reply"
424606msgstr ""
425607
426−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
608+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
427609msgctxt "Button: Call back on phone"
428610msgid "Call back"
429611msgstr ""
@@ -432,32 +614,12 @@ msgstr ""
432614msgid "Drag using 3 fingers any application from one window to the other"
433615msgstr ""
434616
435−#: qml/Tutorial/TutorialBottom.qml:78
436−msgid "Swipe up to add a contact"
437−msgstr ""
438−
439−#: qml/Tutorial/TutorialBottom.qml:80
440−msgid "Swipe up for favorite calculations"
441−msgstr ""
442−
443−#: qml/Tutorial/TutorialBottom.qml:82
444−msgid "Swipe up for recent calls"
445−msgstr ""
446−
447−#: qml/Tutorial/TutorialBottom.qml:84
448−msgid "Swipe up to create a message"
449−msgstr ""
450−
451−#: qml/Tutorial/TutorialBottom.qml:85
452−msgid "Swipe up to manage the app"
453−msgstr ""
454−
455−#: qml/Tutorial/TutorialLeftLong.qml:47
617+#: qml/Tutorial/TutorialLeftLong.qml:49
456618msgid "Long swipe from the left edge to open the Today scope"
457619msgstr ""
458620
459621#: qml/Tutorial/TutorialLeft.qml:47
460−msgid "Swipe from the left edge to open the launcher"
622+msgid "Short swipe from the left edge to open the launcher"
461623msgstr ""
462624
463625#: qml/Tutorial/TutorialRight.qml:55
@@ -465,15 +627,11 @@ msgid "Push your mouse against the right edge to view your open apps"
465627msgstr ""
466628
467629#: qml/Tutorial/TutorialRight.qml:56
468−msgid "Short or long swipe from the right edge to view your open apps"
630+msgid "Swipe from the right edge to view your open apps"
469631msgstr ""
470632
471633#: qml/Tutorial/TutorialTop.qml:53
472−msgid "Swipe from the top right edge to open the notification bar"
473−msgstr ""
474−
475−#: qml/Tutorial/TutorialTop.qml:54
476−msgid "Swipe from the top edge to open the notification bar"
634+msgid "Swipe from the top edge to access notifications and quick settings"
477635msgstr ""
478636
479637#: qml/Wizard/Page.qml:54
@@ -485,11 +643,11 @@ msgstr ""
485643msgid "Language"
486644msgstr ""
487645
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
646+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
647+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
490648#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
491649#: qml/Wizard/Pages/75-report-check.qml:84
492−#: qml/Wizard/Pages/passcode-desktop.qml:124
650+#: qml/Wizard/Pages/passcode-desktop.qml:141
493651#: qml/Wizard/Pages/password-set.qml:141
494652msgid "Next"
495653msgstr ""
@@ -551,7 +709,7 @@ msgstr ""
551709msgid "Time Zone"
552710msgstr ""
553711
554−#: qml/Wizard/Pages/50-timezone.qml:178
712+#: qml/Wizard/Pages/50-timezone.qml:181
555713msgid "Enter your city"
556714msgstr ""
557715
@@ -641,7 +799,7 @@ msgid "Service Terms"
641799msgstr ""
642800
643801#: qml/Wizard/Pages/passcode-confirm.qml:43
644−#: qml/Wizard/Pages/passcode-desktop.qml:80
802+#: qml/Wizard/Pages/passcode-desktop.qml:96
645803msgid "Confirm passcode"
646804msgstr "Confirmeu el codi d'accés"
647805
@@ -658,24 +816,24 @@ msgstr ""
658816msgid "Lock Screen Passcode"
659817msgstr ""
660818
661−#: qml/Wizard/Pages/passcode-desktop.qml:56
819+#: qml/Wizard/Pages/passcode-desktop.qml:60
662820msgid "Enter 4 numbers to setup your passcode"
663821msgstr ""
664822
665−#: qml/Wizard/Pages/passcode-desktop.qml:65
823+#: qml/Wizard/Pages/passcode-desktop.qml:76
666824#: qml/Wizard/Pages/passcode-set.qml:54
667825msgid "Choose passcode"
668826msgstr ""
669827
670−#: qml/Wizard/Pages/passcode-desktop.qml:105
828+#: qml/Wizard/Pages/passcode-desktop.qml:126
671829msgid "Passcode too short"
672830msgstr ""
673831
674−#: qml/Wizard/Pages/passcode-desktop.qml:107
832+#: qml/Wizard/Pages/passcode-desktop.qml:128
675833msgid "Passcodes match"
676834msgstr ""
677835
678−#: qml/Wizard/Pages/passcode-desktop.qml:109
836+#: qml/Wizard/Pages/passcode-desktop.qml:130
679837msgid "Passcodes do not match"
680838msgstr ""
681839
@@ -724,26 +882,30 @@ msgid "To proceed with no SIM tap Skip."
724882msgstr ""
725883
726884#: qml/Wizard/PasswordMeter.qml:87
727−msgid "Passwords match"
885+msgid "Password too short"
728886msgstr ""
729887
730888#: qml/Wizard/PasswordMeter.qml:89
889+msgid "Passwords match"
890+msgstr ""
891+
892+#: qml/Wizard/PasswordMeter.qml:91
731893msgid "Passwords do not match"
732894msgstr ""
733895
734−#: qml/Wizard/PasswordMeter.qml:93
896+#: qml/Wizard/PasswordMeter.qml:95
735897msgid "Strong password"
736898msgstr ""
737899
738−#: qml/Wizard/PasswordMeter.qml:95
900+#: qml/Wizard/PasswordMeter.qml:97
739901msgid "Fair password"
740902msgstr ""
741903
742−#: qml/Wizard/PasswordMeter.qml:97
904+#: qml/Wizard/PasswordMeter.qml:99
743905msgid "Weak password"
744906msgstr ""
745907
746−#: qml/Wizard/PasswordMeter.qml:99
908+#: qml/Wizard/PasswordMeter.qml:101
747909msgid "Very weak password"
748910msgstr ""
749911
po/ce.po+262−100
@@ -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-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+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,39 +15,39 @@ 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-05-19 05:49+0000\n"
19−"X-Generator: Launchpad (build 18025)\n"
18+"X-Launchpad-Export-Date: 2016-07-14 06:01+0000\n"
19+"X-Generator: Launchpad (build 18115)\n"
2020
21−#: plugins/IntegratedLightDM/Greeter.cpp:112
21+#: plugins/LightDM/Greeter.cpp:123
2222msgid "Password: "
2323msgstr ""
2424
25−#: plugins/Unity/Launcher/launcheritem.cpp:48
26−#: plugins/Unity/Launcher/launcheritem.cpp:107
25+#: plugins/Unity/Launcher/launcheritem.cpp:49
26+#: plugins/Unity/Launcher/launcheritem.cpp:108
2727msgid "Pin shortcut"
2828msgstr ""
2929
30−#: plugins/Unity/Launcher/launcheritem.cpp:53
30+#: plugins/Unity/Launcher/launcheritem.cpp:54
3131msgid "Quit"
3232msgstr ""
3333
34−#: plugins/Unity/Launcher/launcheritem.cpp:107
34+#: plugins/Unity/Launcher/launcheritem.cpp:108
3535msgid "Unpin shortcut"
3636msgstr ""
3737
38−#: qml/Components/DelayedLockscreen.qml:49
38+#: qml/Components/DelayedLockscreen.qml:50
3939msgid "Device Locked"
4040msgstr ""
4141
42−#: qml/Components/DelayedLockscreen.qml:64
42+#: qml/Components/DelayedLockscreen.qml:65
4343msgid "You have been locked out due to too many failed passphrase attempts."
4444msgstr ""
4545
46−#: qml/Components/DelayedLockscreen.qml:65
46+#: qml/Components/DelayedLockscreen.qml:66
4747msgid "You have been locked out due to too many failed passcode attempts."
4848msgstr ""
4949
50−#: qml/Components/DelayedLockscreen.qml:74
50+#: qml/Components/DelayedLockscreen.qml:75
5151#, qt-format
5252msgid "Please wait %1 minute and then try again…"
5353msgid_plural "Please wait %1 minutes and then try again…"
@@ -74,7 +74,7 @@ msgid "Log Out"
7474msgstr ""
7575
7676#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
77−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
77+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
7878#: qml/Wizard/Pages/passcode-set.qml:32
7979msgid "Cancel"
8080msgstr ""
@@ -117,18 +117,188 @@ msgctxt "Button: Restart the system"
117117msgid "Restart"
118118msgstr ""
119119
120−#: qml/Components/Lockscreen.qml:231
120+#: qml/Components/KeyboardShortcutsOverlay.qml:41
121+msgid "Keyboard Shortcuts"
122+msgstr ""
123+
124+#: qml/Components/KeyboardShortcutsOverlay.qml:55
125+msgid "Unity 8"
126+msgstr ""
127+
128+#: qml/Components/KeyboardShortcutsOverlay.qml:62
129+msgid "PrtScr"
130+msgstr ""
131+
132+#: qml/Components/KeyboardShortcutsOverlay.qml:67
133+msgid "Takes a screenshot."
134+msgstr ""
135+
136+#: qml/Components/KeyboardShortcutsOverlay.qml:75
137+msgid "Alt + PrtScr"
138+msgstr ""
139+
140+#: qml/Components/KeyboardShortcutsOverlay.qml:80
141+msgid "Takes a screenshot of a window."
142+msgstr ""
143+
144+#: qml/Components/KeyboardShortcutsOverlay.qml:88
145+msgid "Super + Space"
146+msgstr ""
147+
148+#: qml/Components/KeyboardShortcutsOverlay.qml:93
149+msgid "Switches to next keyboard layout."
150+msgstr ""
151+
152+#: qml/Components/KeyboardShortcutsOverlay.qml:101
153+msgid "Super + Shift + Space"
154+msgstr ""
155+
156+#: qml/Components/KeyboardShortcutsOverlay.qml:106
157+msgid "Switches to previous keyboard layout."
158+msgstr ""
159+
160+#: qml/Components/KeyboardShortcutsOverlay.qml:118
161+msgid "Launcher"
162+msgstr ""
163+
164+#: qml/Components/KeyboardShortcutsOverlay.qml:125
165+msgid "Super (Hold)"
166+msgstr ""
167+
168+#: qml/Components/KeyboardShortcutsOverlay.qml:130
169+msgid "Opens the launcher, displays shortcuts."
170+msgstr ""
171+
172+#: qml/Components/KeyboardShortcutsOverlay.qml:138
173+msgid "Alt + F1"
174+msgstr ""
175+
176+#: qml/Components/KeyboardShortcutsOverlay.qml:143
177+msgid "Opens launcher keyboard navigation mode."
178+msgstr ""
179+
180+#: qml/Components/KeyboardShortcutsOverlay.qml:151
181+msgid "Super + Tab"
182+msgstr ""
183+
184+#: qml/Components/KeyboardShortcutsOverlay.qml:156
185+msgid "Switches applications via the launcher."
186+msgstr ""
187+
188+#: qml/Components/KeyboardShortcutsOverlay.qml:164
189+msgid "Super + 0 to 9"
190+msgstr ""
191+
192+#: qml/Components/KeyboardShortcutsOverlay.qml:169
193+msgid "Same as clicking on a launcher icon."
194+msgstr ""
195+
196+#: qml/Components/KeyboardShortcutsOverlay.qml:181
197+msgid "Scopes"
198+msgstr ""
199+
200+#: qml/Components/KeyboardShortcutsOverlay.qml:188
201+msgid "Super (Tap)"
202+msgstr ""
203+
204+#: qml/Components/KeyboardShortcutsOverlay.qml:193
205+msgid "Opens the Scopes home."
206+msgstr ""
207+
208+#: qml/Components/KeyboardShortcutsOverlay.qml:209
209+msgid "Switching"
210+msgstr ""
211+
212+#: qml/Components/KeyboardShortcutsOverlay.qml:216
213+msgid "Alt + Tab"
214+msgstr ""
215+
216+#: qml/Components/KeyboardShortcutsOverlay.qml:221
217+msgid "Switches between applications."
218+msgstr ""
219+
220+#: qml/Components/KeyboardShortcutsOverlay.qml:229
221+msgid "Super + W"
222+msgstr ""
223+
224+#: qml/Components/KeyboardShortcutsOverlay.qml:234
225+msgid "Opens the desktop spread."
226+msgstr ""
227+
228+#: qml/Components/KeyboardShortcutsOverlay.qml:242
229+msgid "Cursor Left or Right"
230+msgstr ""
231+
232+#: qml/Components/KeyboardShortcutsOverlay.qml:247
233+msgid "Moves the focus."
234+msgstr ""
235+
236+#: qml/Components/KeyboardShortcutsOverlay.qml:259
237+msgid "Windows"
238+msgstr ""
239+
240+#: qml/Components/KeyboardShortcutsOverlay.qml:266
241+msgid "Ctrl + Super + D"
242+msgstr ""
243+
244+#: qml/Components/KeyboardShortcutsOverlay.qml:271
245+msgid "Minimizes all windows."
246+msgstr ""
247+
248+#: qml/Components/KeyboardShortcutsOverlay.qml:279
249+msgid "Ctrl + Super + Up"
250+msgstr ""
251+
252+#: qml/Components/KeyboardShortcutsOverlay.qml:284
253+msgid "Maximizes the current window."
254+msgstr ""
255+
256+#: qml/Components/KeyboardShortcutsOverlay.qml:292
257+msgid "Ctrl + Super + Down"
258+msgstr ""
259+
260+#: qml/Components/KeyboardShortcutsOverlay.qml:297
261+msgid "Minimizes or restores the current window."
262+msgstr ""
263+
264+#: qml/Components/KeyboardShortcutsOverlay.qml:305
265+msgid "Ctrl + Super + Left or Right"
266+msgstr ""
267+
268+#: qml/Components/KeyboardShortcutsOverlay.qml:310
269+msgid "Semi-maximizes the current window."
270+msgstr ""
271+
272+#: qml/Components/KeyboardShortcutsOverlay.qml:318
273+msgid "Alt + F4"
274+msgstr ""
275+
276+#: qml/Components/KeyboardShortcutsOverlay.qml:323
277+msgid "Closes the current window."
278+msgstr ""
279+
280+#: qml/Components/Lockscreen.qml:239
121281msgid "Return to Call"
122282msgstr ""
123283
124−#: qml/Components/Lockscreen.qml:231
284+#: qml/Components/Lockscreen.qml:239
125285msgid "Emergency Call"
126286msgstr ""
127287
128−#: qml/Components/Lockscreen.qml:263
288+#: qml/Components/Lockscreen.qml:271
129289msgid "OK"
130290msgstr ""
131291
292+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
293+#, qt-format
294+msgid "%1:%2:%3"
295+msgstr ""
296+
297+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
298+#, qt-format
299+msgid "%1:%2"
300+msgstr ""
301+
132302#: qml/Components/ModeSwitchWarningDialog.qml:32
133303msgid "Apps may have unsaved data:"
134304msgstr ""
@@ -155,26 +325,30 @@ msgstr ""
155325msgid "Close all"
156326msgstr ""
157327
158−#: qml/Dash/DashPageHeader.qml:337
328+#: qml/Components/SharingPicker.qml:54
329+msgid "Preview Share Item"
330+msgstr ""
331+
332+#: qml/Dash/DashPageHeader.qml:333
159333msgctxt "Button: Open the Ubuntu Store"
160334msgid "Store"
161335msgstr ""
162336
163−#: qml/Dash/DashPageHeader.qml:344
337+#: qml/Dash/DashPageHeader.qml:340
164338msgctxt "Button: Start a search in the current dash scope"
165339msgid "Search"
166340msgstr ""
167341
168−#: qml/Dash/DashPageHeader.qml:354
342+#: qml/Dash/DashPageHeader.qml:350
169343msgctxt "Button: Show the current dash scope settings"
170344msgid "Settings"
171345msgstr ""
172346
173−#: qml/Dash/DashPageHeader.qml:361
347+#: qml/Dash/DashPageHeader.qml:357
174348msgid "Remove from Favorites"
175349msgstr ""
176350
177−#: qml/Dash/DashPageHeader.qml:361
351+#: qml/Dash/DashPageHeader.qml:357
178352msgid "Add to Favorites"
179353msgstr ""
180354
@@ -186,24 +360,24 @@ msgstr ""
186360msgid "Reset"
187361msgstr ""
188362
189−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
363+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
190364msgid "Show less"
191365msgstr ""
192366
193−#: qml/Dash/GenericScopeView.qml:579
367+#: qml/Dash/GenericScopeView.qml:580
194368msgid "Show all"
195369msgstr ""
196370
197−#: qml/Dash/GenericScopeView.qml:636
371+#: qml/Dash/GenericScopeView.qml:637
198372msgctxt "Label: Hint for dash search line edit"
199373msgid "Search"
200374msgstr ""
201375
202−#: qml/Dash/PageHeaderExtraPanel.qml:55
376+#: qml/Dash/PageHeaderExtraPanel.qml:56
203377msgid "Recent Searches"
204378msgstr ""
205379
206−#: qml/Dash/PageHeaderExtraPanel.qml:66
380+#: qml/Dash/PageHeaderExtraPanel.qml:67
207381msgid "Clear All"
208382msgstr ""
209383
@@ -216,22 +390,18 @@ msgid "Less..."
216390msgstr ""
217391
218392#: qml/Dash/Previews/PreviewCommentInput.qml:68
219−#: qml/Dash/Previews/PreviewRatingInput.qml:174
393+#: qml/Dash/Previews/PreviewRatingInput.qml:175
220394msgid "Send"
221395msgstr ""
222396
223−#: qml/Dash/Previews/PreviewRatingInput.qml:84
397+#: qml/Dash/Previews/PreviewRatingInput.qml:82
224398msgid "Rate this"
225399msgstr ""
226400
227−#: qml/Dash/Previews/PreviewRatingInput.qml:129
401+#: qml/Dash/Previews/PreviewRatingInput.qml:157
228402msgid "Add a review"
229403msgstr ""
230404
231−#: qml/Dash/Previews/PreviewSharing.qml:66
232−msgid "Preview Share Item"
233−msgstr ""
234−
235405#: qml/Dash/PullToRefreshScopeStyle.qml:55
236406msgid "Pull to refresh…"
237407msgstr ""
@@ -244,88 +414,100 @@ msgstr ""
244414msgid "Enable location data"
245415msgstr ""
246416
247−#: qml/Dash/ScopesList.qml:67
417+#: qml/Dash/ScopesList.qml:55
248418msgid "Manage"
249419msgstr ""
250420
251−#: qml/Dash/ScopesList.qml:113
421+#: qml/Dash/ScopesList.qml:102
252422msgid "Home"
253423msgstr ""
254424
255−#: qml/Dash/ScopesList.qml:114
425+#: qml/Dash/ScopesList.qml:103
256426msgid "Also installed"
257427msgstr ""
258428
259−#: qml/DisabledScreenNotice.qml:104
429+#: qml/DisabledScreenNotice.qml:109
260430msgid ""
261431"Your device is now connected to an external display. Use this screen as a "
262432"touch pad to interact with the pointer."
263433msgstr ""
264434
265−#: qml/Greeter/CoverPage.qml:118
435+#: qml/Greeter/CoverPage.qml:127
266436msgid "Unlock"
267437msgstr ""
268438
269−#: qml/Greeter/LoginList.qml:239
439+#: qml/Greeter/Greeter.qml:555
440+msgid "Try again"
441+msgstr ""
442+
443+#: qml/Greeter/LoginList.qml:63
444+msgid "Passphrase"
445+msgstr ""
446+
447+#: qml/Greeter/LoginList.qml:64
448+msgid "Passcode"
449+msgstr ""
450+
451+#: qml/Greeter/LoginList.qml:87
270452msgid "Retry"
271453msgstr ""
272454
273−#: qml/Greeter/LoginList.qml:240
274−msgid "Tap to unlock"
455+#: qml/Greeter/LoginList.qml:88
456+msgid "Log In"
275457msgstr ""
276458
277−#: qml/Greeter/NarrowView.qml:54
459+#: qml/Greeter/NarrowView.qml:55
278460msgid "Sorry, incorrect passphrase."
279461msgstr ""
280462
281−#: qml/Greeter/NarrowView.qml:55
463+#: qml/Greeter/NarrowView.qml:56
282464msgid "Sorry, incorrect passcode."
283465msgstr ""
284466
285−#: qml/Greeter/NarrowView.qml:56
467+#: qml/Greeter/NarrowView.qml:57
286468msgid "This will be your last attempt."
287469msgstr ""
288470
289−#: qml/Greeter/NarrowView.qml:58
471+#: qml/Greeter/NarrowView.qml:59
290472msgid ""
291473"If passphrase is entered incorrectly, your phone will conduct a factory "
292474"reset and all personal data will be deleted."
293475msgstr ""
294476
295−#: qml/Greeter/NarrowView.qml:59
477+#: qml/Greeter/NarrowView.qml:60
296478msgid ""
297479"If passcode is entered incorrectly, your phone will conduct a factory reset "
298480"and all personal data will be deleted."
299481msgstr ""
300482
301−#: qml/Greeter/NarrowView.qml:116
483+#: qml/Greeter/NarrowView.qml:129
302484#, qt-format
303485msgid "Enter %1"
304486msgstr ""
305487
306−#: qml/Greeter/NarrowView.qml:117
488+#: qml/Greeter/NarrowView.qml:130
307489msgid "Enter passphrase"
308490msgstr ""
309491
310−#: qml/Greeter/NarrowView.qml:118
492+#: qml/Greeter/NarrowView.qml:131
311493msgid "Enter passcode"
312494msgstr ""
313495
314−#: qml/Greeter/NarrowView.qml:119
496+#: qml/Greeter/NarrowView.qml:135
315497#, qt-format
316498msgid "Sorry, incorrect %1"
317499msgstr ""
318500
319−#: qml/Greeter/NarrowView.qml:120
501+#: qml/Greeter/NarrowView.qml:136
320502msgid "Sorry, incorrect passphrase"
321503msgstr ""
322504
323−#: qml/Greeter/NarrowView.qml:121
505+#: qml/Greeter/NarrowView.qml:137
324506msgctxt "passphrase"
325507msgid "Please re-enter"
326508msgstr ""
327509
328−#: qml/Greeter/NarrowView.qml:122
510+#: qml/Greeter/NarrowView.qml:138
329511msgid "Sorry, incorrect passcode"
330512msgstr ""
331513
@@ -400,18 +582,18 @@ msgstr ""
400582msgid "Failed, tap to retry"
401583msgstr ""
402584
403−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
404−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
585+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
586+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
405587msgctxt "Button: Send a reply message"
406588msgid "Send"
407589msgstr ""
408590
409−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
591+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
410592msgctxt "Label: Hint in message indicator line edit"
411593msgid "Reply"
412594msgstr ""
413595
414−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
596+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
415597msgctxt "Button: Call back on phone"
416598msgid "Call back"
417599msgstr ""
@@ -420,32 +602,12 @@ msgstr ""
420602msgid "Drag using 3 fingers any application from one window to the other"
421603msgstr ""
422604
423−#: qml/Tutorial/TutorialBottom.qml:78
424−msgid "Swipe up to add a contact"
425−msgstr ""
426−
427−#: qml/Tutorial/TutorialBottom.qml:80
428−msgid "Swipe up for favorite calculations"
429−msgstr ""
430−
431−#: qml/Tutorial/TutorialBottom.qml:82
432−msgid "Swipe up for recent calls"
433−msgstr ""
434−
435−#: qml/Tutorial/TutorialBottom.qml:84
436−msgid "Swipe up to create a message"
437−msgstr ""
438−
439−#: qml/Tutorial/TutorialBottom.qml:85
440−msgid "Swipe up to manage the app"
441−msgstr ""
442−
443−#: qml/Tutorial/TutorialLeftLong.qml:47
605+#: qml/Tutorial/TutorialLeftLong.qml:49
444606msgid "Long swipe from the left edge to open the Today scope"
445607msgstr ""
446608
447609#: qml/Tutorial/TutorialLeft.qml:47
448−msgid "Swipe from the left edge to open the launcher"
610+msgid "Short swipe from the left edge to open the launcher"
449611msgstr ""
450612
451613#: qml/Tutorial/TutorialRight.qml:55
@@ -453,15 +615,11 @@ msgid "Push your mouse against the right edge to view your open apps"
453615msgstr ""
454616
455617#: qml/Tutorial/TutorialRight.qml:56
456−msgid "Short or long swipe from the right edge to view your open apps"
618+msgid "Swipe from the right edge to view your open apps"
457619msgstr ""
458620
459621#: qml/Tutorial/TutorialTop.qml:53
460−msgid "Swipe from the top right edge to open the notification bar"
461−msgstr ""
462−
463−#: qml/Tutorial/TutorialTop.qml:54
464−msgid "Swipe from the top edge to open the notification bar"
622+msgid "Swipe from the top edge to access notifications and quick settings"
465623msgstr ""
466624
467625#: qml/Wizard/Page.qml:54
@@ -473,11 +631,11 @@ msgstr ""
473631msgid "Language"
474632msgstr ""
475633
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
634+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
635+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
478636#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
479637#: qml/Wizard/Pages/75-report-check.qml:84
480−#: qml/Wizard/Pages/passcode-desktop.qml:124
638+#: qml/Wizard/Pages/passcode-desktop.qml:141
481639#: qml/Wizard/Pages/password-set.qml:141
482640msgid "Next"
483641msgstr ""
@@ -539,7 +697,7 @@ msgstr ""
539697msgid "Time Zone"
540698msgstr ""
541699
542−#: qml/Wizard/Pages/50-timezone.qml:178
700+#: qml/Wizard/Pages/50-timezone.qml:181
543701msgid "Enter your city"
544702msgstr ""
545703
@@ -629,7 +787,7 @@ msgid "Service Terms"
629787msgstr ""
630788
631789#: qml/Wizard/Pages/passcode-confirm.qml:43
632−#: qml/Wizard/Pages/passcode-desktop.qml:80
790+#: qml/Wizard/Pages/passcode-desktop.qml:96
633791msgid "Confirm passcode"
634792msgstr ""
635793
@@ -646,24 +804,24 @@ msgstr ""
646804msgid "Lock Screen Passcode"
647805msgstr ""
648806
649−#: qml/Wizard/Pages/passcode-desktop.qml:56
807+#: qml/Wizard/Pages/passcode-desktop.qml:60
650808msgid "Enter 4 numbers to setup your passcode"
651809msgstr ""
652810
653−#: qml/Wizard/Pages/passcode-desktop.qml:65
811+#: qml/Wizard/Pages/passcode-desktop.qml:76
654812#: qml/Wizard/Pages/passcode-set.qml:54
655813msgid "Choose passcode"
656814msgstr ""
657815
658−#: qml/Wizard/Pages/passcode-desktop.qml:105
816+#: qml/Wizard/Pages/passcode-desktop.qml:126
659817msgid "Passcode too short"
660818msgstr ""
661819
662−#: qml/Wizard/Pages/passcode-desktop.qml:107
820+#: qml/Wizard/Pages/passcode-desktop.qml:128
663821msgid "Passcodes match"
664822msgstr ""
665823
666−#: qml/Wizard/Pages/passcode-desktop.qml:109
824+#: qml/Wizard/Pages/passcode-desktop.qml:130
667825msgid "Passcodes do not match"
668826msgstr ""
669827
@@ -712,25 +870,29 @@ msgid "To proceed with no SIM tap Skip."
712870msgstr ""
713871
714872#: qml/Wizard/PasswordMeter.qml:87
715−msgid "Passwords match"
873+msgid "Password too short"
716874msgstr ""
717875
718876#: qml/Wizard/PasswordMeter.qml:89
877+msgid "Passwords match"
878+msgstr ""
879+
880+#: qml/Wizard/PasswordMeter.qml:91
719881msgid "Passwords do not match"
720882msgstr ""
721883
722−#: qml/Wizard/PasswordMeter.qml:93
884+#: qml/Wizard/PasswordMeter.qml:95
723885msgid "Strong password"
724886msgstr ""
725887
726−#: qml/Wizard/PasswordMeter.qml:95
888+#: qml/Wizard/PasswordMeter.qml:97
727889msgid "Fair password"
728890msgstr ""
729891
730−#: qml/Wizard/PasswordMeter.qml:97
892+#: qml/Wizard/PasswordMeter.qml:99
731893msgid "Weak password"
732894msgstr ""
733895
734−#: qml/Wizard/PasswordMeter.qml:99
896+#: qml/Wizard/PasswordMeter.qml:101
735897msgid "Very weak password"
736898msgstr ""
po/ckb.po+262−100
@@ -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-05-18 11:19+0000\n"
10+"POT-Creation-Date: 2016-07-11 17:24+0000\n"
1111"PO-Revision-Date: 2014-01-21 11:05+0000\n"
1212"Last-Translator: Aras <aras.noori@gmail.com>\n"
1313"Language-Team: Kurdish (Sorani) <ckb@li.org>\n"
@@ -15,39 +15,39 @@ 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-05-19 05:50+0000\n"
19−"X-Generator: Launchpad (build 18025)\n"
18+"X-Launchpad-Export-Date: 2016-07-14 06:02+0000\n"
19+"X-Generator: Launchpad (build 18115)\n"
2020
21−#: plugins/IntegratedLightDM/Greeter.cpp:112
21+#: plugins/LightDM/Greeter.cpp:123
2222msgid "Password: "
2323msgstr ""
2424
25−#: plugins/Unity/Launcher/launcheritem.cpp:48
26−#: plugins/Unity/Launcher/launcheritem.cpp:107
25+#: plugins/Unity/Launcher/launcheritem.cpp:49
26+#: plugins/Unity/Launcher/launcheritem.cpp:108
2727msgid "Pin shortcut"
2828msgstr ""
2929
30−#: plugins/Unity/Launcher/launcheritem.cpp:53
30+#: plugins/Unity/Launcher/launcheritem.cpp:54
3131msgid "Quit"
3232msgstr ""
3333
34−#: plugins/Unity/Launcher/launcheritem.cpp:107
34+#: plugins/Unity/Launcher/launcheritem.cpp:108
3535msgid "Unpin shortcut"
3636msgstr ""
3737
38−#: qml/Components/DelayedLockscreen.qml:49
38+#: qml/Components/DelayedLockscreen.qml:50
3939msgid "Device Locked"
4040msgstr ""
4141
42−#: qml/Components/DelayedLockscreen.qml:64
42+#: qml/Components/DelayedLockscreen.qml:65
4343msgid "You have been locked out due to too many failed passphrase attempts."
4444msgstr ""
4545
46−#: qml/Components/DelayedLockscreen.qml:65
46+#: qml/Components/DelayedLockscreen.qml:66
4747msgid "You have been locked out due to too many failed passcode attempts."
4848msgstr ""
4949
50−#: qml/Components/DelayedLockscreen.qml:74
50+#: qml/Components/DelayedLockscreen.qml:75
5151#, qt-format
5252msgid "Please wait %1 minute and then try again…"
5353msgid_plural "Please wait %1 minutes and then try again…"
@@ -74,7 +74,7 @@ msgid "Log Out"
7474msgstr ""
7575
7676#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
77−#: qml/Dash/DashPageHeader.qml:298 qml/Wizard/Pages/passcode-confirm.qml:32
77+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
7878#: qml/Wizard/Pages/passcode-set.qml:32
7979msgid "Cancel"
8080msgstr ""
@@ -117,18 +117,188 @@ msgctxt "Button: Restart the system"
117117msgid "Restart"
118118msgstr ""
119119
120−#: qml/Components/Lockscreen.qml:231
120+#: qml/Components/KeyboardShortcutsOverlay.qml:41
121+msgid "Keyboard Shortcuts"
122+msgstr ""
123+
124+#: qml/Components/KeyboardShortcutsOverlay.qml:55
125+msgid "Unity 8"
126+msgstr ""
127+
128+#: qml/Components/KeyboardShortcutsOverlay.qml:62
129+msgid "PrtScr"
130+msgstr ""
131+
132+#: qml/Components/KeyboardShortcutsOverlay.qml:67
133+msgid "Takes a screenshot."
134+msgstr ""
135+
136+#: qml/Components/KeyboardShortcutsOverlay.qml:75
137+msgid "Alt + PrtScr"
138+msgstr ""
139+
140+#: qml/Components/KeyboardShortcutsOverlay.qml:80
141+msgid "Takes a screenshot of a window."
142+msgstr ""
143+
144+#: qml/Components/KeyboardShortcutsOverlay.qml:88
145+msgid "Super + Space"
146+msgstr ""
147+
148+#: qml/Components/KeyboardShortcutsOverlay.qml:93
149+msgid "Switches to next keyboard layout."
150+msgstr ""
151+
152+#: qml/Components/KeyboardShortcutsOverlay.qml:101
153+msgid "Super + Shift + Space"
154+msgstr ""
155+
156+#: qml/Components/KeyboardShortcutsOverlay.qml:106
157+msgid "Switches to previous keyboard layout."
158+msgstr ""
159+
160+#: qml/Components/KeyboardShortcutsOverlay.qml:118
161+msgid "Launcher"
162+msgstr ""
163+
164+#: qml/Components/KeyboardShortcutsOverlay.qml:125
165+msgid "Super (Hold)"
166+msgstr ""
167+
168+#: qml/Components/KeyboardShortcutsOverlay.qml:130
169+msgid "Opens the launcher, displays shortcuts."
170+msgstr ""
171+
172+#: qml/Components/KeyboardShortcutsOverlay.qml:138
173+msgid "Alt + F1"
174+msgstr ""
175+
176+#: qml/Components/KeyboardShortcutsOverlay.qml:143
177+msgid "Opens launcher keyboard navigation mode."
178+msgstr ""
179+
180+#: qml/Components/KeyboardShortcutsOverlay.qml:151
181+msgid "Super + Tab"
182+msgstr ""
183+
184+#: qml/Components/KeyboardShortcutsOverlay.qml:156
185+msgid "Switches applications via the launcher."
186+msgstr ""
187+
188+#: qml/Components/KeyboardShortcutsOverlay.qml:164
189+msgid "Super + 0 to 9"
190+msgstr ""
191+
192+#: qml/Components/KeyboardShortcutsOverlay.qml:169
193+msgid "Same as clicking on a launcher icon."
194+msgstr ""
195+
196+#: qml/Components/KeyboardShortcutsOverlay.qml:181
197+msgid "Scopes"
198+msgstr ""
199+
200+#: qml/Components/KeyboardShortcutsOverlay.qml:188
201+msgid "Super (Tap)"
202+msgstr ""
203+
204+#: qml/Components/KeyboardShortcutsOverlay.qml:193
205+msgid "Opens the Scopes home."
206+msgstr ""
207+
208+#: qml/Components/KeyboardShortcutsOverlay.qml:209
209+msgid "Switching"
210+msgstr ""
211+
212+#: qml/Components/KeyboardShortcutsOverlay.qml:216
213+msgid "Alt + Tab"
214+msgstr ""
215+
216+#: qml/Components/KeyboardShortcutsOverlay.qml:221
217+msgid "Switches between applications."
218+msgstr ""
219+
220+#: qml/Components/KeyboardShortcutsOverlay.qml:229
221+msgid "Super + W"
222+msgstr ""
223+
224+#: qml/Components/KeyboardShortcutsOverlay.qml:234
225+msgid "Opens the desktop spread."
226+msgstr ""
227+
228+#: qml/Components/KeyboardShortcutsOverlay.qml:242
229+msgid "Cursor Left or Right"
230+msgstr ""
231+
232+#: qml/Components/KeyboardShortcutsOverlay.qml:247
233+msgid "Moves the focus."
234+msgstr ""
235+
236+#: qml/Components/KeyboardShortcutsOverlay.qml:259
237+msgid "Windows"
238+msgstr ""
239+
240+#: qml/Components/KeyboardShortcutsOverlay.qml:266
241+msgid "Ctrl + Super + D"
242+msgstr ""
243+
244+#: qml/Components/KeyboardShortcutsOverlay.qml:271
245+msgid "Minimizes all windows."
246+msgstr ""
247+
248+#: qml/Components/KeyboardShortcutsOverlay.qml:279
249+msgid "Ctrl + Super + Up"
250+msgstr ""
251+
252+#: qml/Components/KeyboardShortcutsOverlay.qml:284
253+msgid "Maximizes the current window."
254+msgstr ""
255+
256+#: qml/Components/KeyboardShortcutsOverlay.qml:292
257+msgid "Ctrl + Super + Down"
258+msgstr ""
259+
260+#: qml/Components/KeyboardShortcutsOverlay.qml:297
261+msgid "Minimizes or restores the current window."
262+msgstr ""
263+
264+#: qml/Components/KeyboardShortcutsOverlay.qml:305
265+msgid "Ctrl + Super + Left or Right"
266+msgstr ""
267+
268+#: qml/Components/KeyboardShortcutsOverlay.qml:310
269+msgid "Semi-maximizes the current window."
270+msgstr ""
271+
272+#: qml/Components/KeyboardShortcutsOverlay.qml:318
273+msgid "Alt + F4"
274+msgstr ""
275+
276+#: qml/Components/KeyboardShortcutsOverlay.qml:323
277+msgid "Closes the current window."
278+msgstr ""
279+
280+#: qml/Components/Lockscreen.qml:239
121281msgid "Return to Call"
122282msgstr ""
123283
124−#: qml/Components/Lockscreen.qml:231
284+#: qml/Components/Lockscreen.qml:239
125285msgid "Emergency Call"
126286msgstr "هێڵی فریاگوزاری"
127287
128−#: qml/Components/Lockscreen.qml:263
288+#: qml/Components/Lockscreen.qml:271
129289msgid "OK"
130290msgstr ""
131291
292+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
293+#, qt-format
294+msgid "%1:%2:%3"
295+msgstr ""
296+
297+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
298+#, qt-format
299+msgid "%1:%2"
300+msgstr ""
301+
132302#: qml/Components/ModeSwitchWarningDialog.qml:32
133303msgid "Apps may have unsaved data:"
134304msgstr ""
@@ -155,26 +325,30 @@ msgstr ""
155325msgid "Close all"
156326msgstr ""
157327
158−#: qml/Dash/DashPageHeader.qml:337
328+#: qml/Components/SharingPicker.qml:54
329+msgid "Preview Share Item"
330+msgstr ""
331+
332+#: qml/Dash/DashPageHeader.qml:333
159333msgctxt "Button: Open the Ubuntu Store"
160334msgid "Store"
161335msgstr ""
162336
163−#: qml/Dash/DashPageHeader.qml:344
337+#: qml/Dash/DashPageHeader.qml:340
164338msgctxt "Button: Start a search in the current dash scope"
165339msgid "Search"
166340msgstr ""
167341
168−#: qml/Dash/DashPageHeader.qml:354
342+#: qml/Dash/DashPageHeader.qml:350
169343msgctxt "Button: Show the current dash scope settings"
170344msgid "Settings"
171345msgstr ""
172346
173−#: qml/Dash/DashPageHeader.qml:361
347+#: qml/Dash/DashPageHeader.qml:357
174348msgid "Remove from Favorites"
175349msgstr ""
176350
177−#: qml/Dash/DashPageHeader.qml:361
351+#: qml/Dash/DashPageHeader.qml:357
178352msgid "Add to Favorites"
179353msgstr ""
180354
@@ -186,24 +360,24 @@ msgstr ""
186360msgid "Reset"
187361msgstr ""
188362
189−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:764
363+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
190364msgid "Show less"
191365msgstr ""
192366
193−#: qml/Dash/GenericScopeView.qml:579
367+#: qml/Dash/GenericScopeView.qml:580
194368msgid "Show all"
195369msgstr ""
196370
197−#: qml/Dash/GenericScopeView.qml:636
371+#: qml/Dash/GenericScopeView.qml:637
198372msgctxt "Label: Hint for dash search line edit"
199373msgid "Search"
200374msgstr ""
201375
202−#: qml/Dash/PageHeaderExtraPanel.qml:55
376+#: qml/Dash/PageHeaderExtraPanel.qml:56
203377msgid "Recent Searches"
204378msgstr ""
205379
206−#: qml/Dash/PageHeaderExtraPanel.qml:66
380+#: qml/Dash/PageHeaderExtraPanel.qml:67
207381msgid "Clear All"
208382msgstr ""
209383
@@ -216,22 +390,18 @@ msgid "Less..."
216390msgstr ""
217391
218392#: qml/Dash/Previews/PreviewCommentInput.qml:68
219−#: qml/Dash/Previews/PreviewRatingInput.qml:174
393+#: qml/Dash/Previews/PreviewRatingInput.qml:175
220394msgid "Send"
221395msgstr "ناردن"
222396
223−#: qml/Dash/Previews/PreviewRatingInput.qml:84
397+#: qml/Dash/Previews/PreviewRatingInput.qml:82
224398msgid "Rate this"
225399msgstr "پلە دابنی بۆی"
226400
227−#: qml/Dash/Previews/PreviewRatingInput.qml:129
401+#: qml/Dash/Previews/PreviewRatingInput.qml:157
228402msgid "Add a review"
229403msgstr "پێداچوونەوە زۆر بکە"
230404
231−#: qml/Dash/Previews/PreviewSharing.qml:66
232−msgid "Preview Share Item"
233−msgstr ""
234−
235405#: qml/Dash/PullToRefreshScopeStyle.qml:55
236406msgid "Pull to refresh…"
237407msgstr ""
@@ -244,88 +414,100 @@ msgstr ""
244414msgid "Enable location data"
245415msgstr ""
246416
247−#: qml/Dash/ScopesList.qml:67
417+#: qml/Dash/ScopesList.qml:55
248418msgid "Manage"
249419msgstr ""
250420
251−#: qml/Dash/ScopesList.qml:113
421+#: qml/Dash/ScopesList.qml:102
252422msgid "Home"
253423msgstr ""
254424
255−#: qml/Dash/ScopesList.qml:114
425+#: qml/Dash/ScopesList.qml:103
256426msgid "Also installed"
257427msgstr ""
258428
259−#: qml/DisabledScreenNotice.qml:104
429+#: qml/DisabledScreenNotice.qml:109
260430msgid ""
261431"Your device is now connected to an external display. Use this screen as a "
262432"touch pad to interact with the pointer."
263433msgstr ""
264434
265−#: qml/Greeter/CoverPage.qml:118
435+#: qml/Greeter/CoverPage.qml:127
266436msgid "Unlock"
267437msgstr ""
268438
269−#: qml/Greeter/LoginList.qml:239
439+#: qml/Greeter/Greeter.qml:555
440+msgid "Try again"
441+msgstr ""
442+
443+#: qml/Greeter/LoginList.qml:63
444+msgid "Passphrase"
445+msgstr ""
446+
447+#: qml/Greeter/LoginList.qml:64
448+msgid "Passcode"
449+msgstr ""
450+
451+#: qml/Greeter/LoginList.qml:87
270452msgid "Retry"
271453msgstr ""
272454
273−#: qml/Greeter/LoginList.qml:240
274−msgid "Tap to unlock"
455+#: qml/Greeter/LoginList.qml:88
456+msgid "Log In"
275457msgstr ""
276458
277−#: qml/Greeter/NarrowView.qml:54
459+#: qml/Greeter/NarrowView.qml:55
278460msgid "Sorry, incorrect passphrase."
279461msgstr ""
280462
281−#: qml/Greeter/NarrowView.qml:55
463+#: qml/Greeter/NarrowView.qml:56
282464msgid "Sorry, incorrect passcode."
283465msgstr ""
284466
285−#: qml/Greeter/NarrowView.qml:56
467+#: qml/Greeter/NarrowView.qml:57
286468msgid "This will be your last attempt."
287469msgstr ""
288470
289−#: qml/Greeter/NarrowView.qml:58
471+#: qml/Greeter/NarrowView.qml:59
290472msgid ""
291473"If passphrase is entered incorrectly, your phone will conduct a factory "
292474"reset and all personal data will be deleted."
293475msgstr ""
294476
295−#: qml/Greeter/NarrowView.qml:59
477+#: qml/Greeter/NarrowView.qml:60
296478msgid ""
297479"If passcode is entered incorrectly, your phone will conduct a factory reset "
298480"and all personal data will be deleted."
299481msgstr ""
300482
301−#: qml/Greeter/NarrowView.qml:116
483+#: qml/Greeter/NarrowView.qml:129
302484#, qt-format
303485msgid "Enter %1"
304486msgstr ""
305487
306−#: qml/Greeter/NarrowView.qml:117
488+#: qml/Greeter/NarrowView.qml:130
307489msgid "Enter passphrase"
308490msgstr ""
309491
310−#: qml/Greeter/NarrowView.qml:118
492+#: qml/Greeter/NarrowView.qml:131
311493msgid "Enter passcode"
312494msgstr ""
313495
314−#: qml/Greeter/NarrowView.qml:119
496+#: qml/Greeter/NarrowView.qml:135
315497#, qt-format
316498msgid "Sorry, incorrect %1"
317499msgstr ""
318500
319−#: qml/Greeter/NarrowView.qml:120
501+#: qml/Greeter/NarrowView.qml:136
320502msgid "Sorry, incorrect passphrase"
321503msgstr ""
322504
323−#: qml/Greeter/NarrowView.qml:121
505+#: qml/Greeter/NarrowView.qml:137
324506msgctxt "passphrase"
325507msgid "Please re-enter"
326508msgstr ""
327509
328−#: qml/Greeter/NarrowView.qml:122
510+#: qml/Greeter/NarrowView.qml:138
329511msgid "Sorry, incorrect passcode"
330512msgstr ""
331513
@@ -400,18 +582,18 @@ msgstr ""
400582msgid "Failed, tap to retry"
401583msgstr ""
402584
403−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:155
404−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:214
585+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
586+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
405587msgctxt "Button: Send a reply message"
406588msgid "Send"
407589msgstr ""
408590
409−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:156
591+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
410592msgctxt "Label: Hint in message indicator line edit"
411593msgid "Reply"
412594msgstr ""
413595
414−#: qml/Panel/Indicators/MessageMenuItemFactory.qml:213
596+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
415597msgctxt "Button: Call back on phone"
416598msgid "Call back"
417599msgstr ""
@@ -420,32 +602,12 @@ msgstr ""
420602msgid "Drag using 3 fingers any application from one window to the other"
421603msgstr ""
422604
423−#: qml/Tutorial/TutorialBottom.qml:78
424−msgid "Swipe up to add a contact"
425−msgstr ""
426−
427−#: qml/Tutorial/TutorialBottom.qml:80
428−msgid "Swipe up for favorite calculations"
429−msgstr ""
430−
431−#: qml/Tutorial/TutorialBottom.qml:82
432−msgid "Swipe up for recent calls"
433−msgstr ""
434−
435−#: qml/Tutorial/TutorialBottom.qml:84
436−msgid "Swipe up to create a message"
437−msgstr ""
438−
439−#: qml/Tutorial/TutorialBottom.qml:85
440−msgid "Swipe up to manage the app"
441−msgstr ""
442−
443−#: qml/Tutorial/TutorialLeftLong.qml:47
605+#: qml/Tutorial/TutorialLeftLong.qml:49
444606msgid "Long swipe from the left edge to open the Today scope"
445607msgstr ""
446608
447609#: qml/Tutorial/TutorialLeft.qml:47
448−msgid "Swipe from the left edge to open the launcher"
610+msgid "Short swipe from the left edge to open the launcher"
449611msgstr ""
450612
451613#: qml/Tutorial/TutorialRight.qml:55
@@ -453,15 +615,11 @@ msgid "Push your mouse against the right edge to view your open apps"
453615msgstr ""
454616
455617#: qml/Tutorial/TutorialRight.qml:56
456−msgid "Short or long swipe from the right edge to view your open apps"
618+msgid "Swipe from the right edge to view your open apps"
457619msgstr ""
458620
459621#: qml/Tutorial/TutorialTop.qml:53
460−msgid "Swipe from the top right edge to open the notification bar"
461−msgstr ""
462−
463−#: qml/Tutorial/TutorialTop.qml:54
464−msgid "Swipe from the top edge to open the notification bar"
622+msgid "Swipe from the top edge to access notifications and quick settings"
465623msgstr ""
466624
467625#: qml/Wizard/Page.qml:54
@@ -473,11 +631,11 @@ msgstr ""
473631msgid "Language"
474632msgstr ""
475633
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
634+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
635+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
478636#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
479637#: qml/Wizard/Pages/75-report-check.qml:84
480−#: qml/Wizard/Pages/passcode-desktop.qml:124
638+#: qml/Wizard/Pages/passcode-desktop.qml:141
481639#: qml/Wizard/Pages/password-set.qml:141
482640msgid "Next"
483641msgstr ""
@@ -539,7 +697,7 @@ msgstr ""
539697msgid "Time Zone"
540698msgstr ""
541699
542−#: qml/Wizard/Pages/50-timezone.qml:178
700+#: qml/Wizard/Pages/50-timezone.qml:181
543701msgid "Enter your city"
544702msgstr ""
545703
@@ -629,7 +787,7 @@ msgid "Service Terms"
629787msgstr ""
630788
631789#: qml/Wizard/Pages/passcode-confirm.qml:43
632−#: qml/Wizard/Pages/passcode-desktop.qml:80
790+#: qml/Wizard/Pages/passcode-desktop.qml:96
633791msgid "Confirm passcode"
634792msgstr ""
635793
@@ -646,24 +804,24 @@ msgstr ""
646804msgid "Lock Screen Passcode"
647805msgstr ""
648806
649−#: qml/Wizard/Pages/passcode-desktop.qml:56
807+#: qml/Wizard/Pages/passcode-desktop.qml:60
650808msgid "Enter 4 numbers to setup your passcode"
651809msgstr ""
652810
653−#: qml/Wizard/Pages/passcode-desktop.qml:65
811+#: qml/Wizard/Pages/passcode-desktop.qml:76
654812#: qml/Wizard/Pages/passcode-set.qml:54
655813msgid "Choose passcode"
656814msgstr ""
657815
658−#: qml/Wizard/Pages/passcode-desktop.qml:105
816+#: qml/Wizard/Pages/passcode-desktop.qml:126
659817msgid "Passcode too short"
660818msgstr ""
661819
662−#: qml/Wizard/Pages/passcode-desktop.qml:107
820+#: qml/Wizard/Pages/passcode-desktop.qml:128
663821msgid "Passcodes match"
664822msgstr ""
665823
666−#: qml/Wizard/Pages/passcode-desktop.qml:109
824+#: qml/Wizard/Pages/passcode-desktop.qml:130
667825msgid "Passcodes do not match"
668826msgstr ""
669827
@@ -712,26 +870,30 @@ msgid "To proceed with no SIM tap Skip."
712870msgstr ""
713871
714872#: qml/Wizard/PasswordMeter.qml:87
715−msgid "Passwords match"
873+msgid "Password too short"
716874msgstr ""
717875
718876#: qml/Wizard/PasswordMeter.qml:89
877+msgid "Passwords match"
878+msgstr ""
879+
880+#: qml/Wizard/PasswordMeter.qml:91
719881msgid "Passwords do not match"
720882msgstr ""
721883
722−#: qml/Wizard/PasswordMeter.qml:93
884+#: qml/Wizard/PasswordMeter.qml:95
723885msgid "Strong password"
724886msgstr ""
725887
726−#: qml/Wizard/PasswordMeter.qml:95
888+#: qml/Wizard/PasswordMeter.qml:97
727889msgid "Fair password"
728890msgstr ""
729891
730−#: qml/Wizard/PasswordMeter.qml:97
892+#: qml/Wizard/PasswordMeter.qml:99
731893msgid "Weak password"
732894msgstr ""
733895
734−#: qml/Wizard/PasswordMeter.qml:99
896+#: qml/Wizard/PasswordMeter.qml:101
735897msgid "Very weak password"
736898msgstr ""
737899
po/co.ponew file+964
@@ -0,0 +1,964 @@
1+# Corsican translation for unity8
2+# Copyright (c) 2016 Rosetta Contributors and Canonical Ltd 2016
3+# This file is distributed under the same license as the unity8 package.
4+# FIRST AUTHOR <EMAIL@ADDRESS>, 2016.
5+#
6+msgid ""
7+msgstr ""
8+"Project-Id-Version: unity8\n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10+"POT-Creation-Date: 2016-07-11 17:24+0000\n"
11+"PO-Revision-Date: 2016-05-24 10:40+0000\n"
12+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13+"Language-Team: Corsican <co@li.org>\n"
14+"MIME-Version: 1.0\n"
15+"Content-Type: text/plain; charset=UTF-8\n"
16+"Content-Transfer-Encoding: 8bit\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2016-07-14 06:01+0000\n"
19+"X-Generator: Launchpad (build 18115)\n"
20+
21+#: plugins/LightDM/Greeter.cpp:123
22+msgid "Password: "
23+msgstr "Parolla d'ordine: "
24+
25+#: plugins/Unity/Launcher/launcheritem.cpp:49
26+#: plugins/Unity/Launcher/launcheritem.cpp:108
27+msgid "Pin shortcut"
28+msgstr "Fissà l'accurtatoghju"
29+
30+#: plugins/Unity/Launcher/launcheritem.cpp:54
31+msgid "Quit"
32+msgstr "Abbandunà"
33+
34+#: plugins/Unity/Launcher/launcheritem.cpp:108
35+msgid "Unpin shortcut"
36+msgstr "Toglie l'accurtatoghju"
37+
38+#: qml/Components/DelayedLockscreen.qml:50
39+msgid "Device Locked"
40+msgstr "Dispusitivu bluccatu"
41+
42+#: qml/Components/DelayedLockscreen.qml:65
43+msgid "You have been locked out due to too many failed passphrase attempts."
44+msgstr ""
45+"Site stati bluccati per troppi tentativi fallati d'inserimentu di a frasa "
46+"d'ordine."
47+
48+#: qml/Components/DelayedLockscreen.qml:66
49+msgid "You have been locked out due to too many failed passcode attempts."
50+msgstr ""
51+"Site stati bluccati per troppi tentativi fallati d'inserimentu di u codice "
52+"d'accessu."
53+
54+#: qml/Components/DelayedLockscreen.qml:75
55+#, qt-format
56+msgid "Please wait %1 minute and then try again…"
57+msgid_plural "Please wait %1 minutes and then try again…"
58+msgstr[0] "Aspettà %1 minutu è po turnà à pruvà…"
59+msgstr[1] "Aspettà %1 minuti è po turnà à pruvà…"
60+
61+#: qml/Components/Dialogs.qml:144
62+msgctxt "Title: Lock/Log out dialog"
63+msgid "Log out"
64+msgstr "Escì"
65+
66+#: qml/Components/Dialogs.qml:145
67+msgid "Are you sure you want to log out?"
68+msgstr "Site sicuri di vulè escì?"
69+
70+#: qml/Components/Dialogs.qml:147
71+msgctxt "Button: Lock the system"
72+msgid "Lock"
73+msgstr "Bluccà"
74+
75+#: qml/Components/Dialogs.qml:154
76+msgctxt "Button: Log out from the system"
77+msgid "Log Out"
78+msgstr "Escì"
79+
80+#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
81+#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
82+#: qml/Wizard/Pages/passcode-set.qml:32
83+msgid "Cancel"
84+msgstr "Annullà"
85+
86+#: qml/Components/Dialogs.qml:173
87+msgctxt "Title: Reboot dialog"
88+msgid "Reboot"
89+msgstr "Turnà ad avvià"
90+
91+#: qml/Components/Dialogs.qml:174
92+msgid "Are you sure you want to reboot?"
93+msgstr "Site sicuri di vulè turnà ad avvià?"
94+
95+#: qml/Components/Dialogs.qml:176
96+msgid "No"
97+msgstr "Nò"
98+
99+#: qml/Components/Dialogs.qml:182
100+msgid "Yes"
101+msgstr "Iè"
102+
103+#: qml/Components/Dialogs.qml:197
104+msgctxt "Title: Power off/Restart dialog"
105+msgid "Power"
106+msgstr "Alimentazione"
107+
108+#: qml/Components/Dialogs.qml:198
109+msgid ""
110+"Are you sure you would like\n"
111+"to power off?"
112+msgstr ""
113+"Site sicuri di vulè\n"
114+"spenghje?"
115+
116+#: qml/Components/Dialogs.qml:200
117+msgctxt "Button: Power off the system"
118+msgid "Power off"
119+msgstr "Spenghje"
120+
121+#: qml/Components/Dialogs.qml:209
122+msgctxt "Button: Restart the system"
123+msgid "Restart"
124+msgstr "Turnà ad avvià"
125+
126+#: qml/Components/KeyboardShortcutsOverlay.qml:41
127+msgid "Keyboard Shortcuts"
128+msgstr ""
129+
130+#: qml/Components/KeyboardShortcutsOverlay.qml:55
131+msgid "Unity 8"
132+msgstr ""
133+
134+#: qml/Components/KeyboardShortcutsOverlay.qml:62
135+msgid "PrtScr"
136+msgstr ""
137+
138+#: qml/Components/KeyboardShortcutsOverlay.qml:67
139+msgid "Takes a screenshot."
140+msgstr ""
141+
142+#: qml/Components/KeyboardShortcutsOverlay.qml:75
143+msgid "Alt + PrtScr"
144+msgstr ""
145+
146+#: qml/Components/KeyboardShortcutsOverlay.qml:80
147+msgid "Takes a screenshot of a window."
148+msgstr ""
149+
150+#: qml/Components/KeyboardShortcutsOverlay.qml:88
151+msgid "Super + Space"
152+msgstr ""
153+
154+#: qml/Components/KeyboardShortcutsOverlay.qml:93
155+msgid "Switches to next keyboard layout."
156+msgstr ""
157+
158+#: qml/Components/KeyboardShortcutsOverlay.qml:101
159+msgid "Super + Shift + Space"
160+msgstr ""
161+
162+#: qml/Components/KeyboardShortcutsOverlay.qml:106
163+msgid "Switches to previous keyboard layout."
164+msgstr ""
165+
166+#: qml/Components/KeyboardShortcutsOverlay.qml:118
167+msgid "Launcher"
168+msgstr ""
169+
170+#: qml/Components/KeyboardShortcutsOverlay.qml:125
171+msgid "Super (Hold)"
172+msgstr ""
173+
174+#: qml/Components/KeyboardShortcutsOverlay.qml:130
175+msgid "Opens the launcher, displays shortcuts."
176+msgstr ""
177+
178+#: qml/Components/KeyboardShortcutsOverlay.qml:138
179+msgid "Alt + F1"
180+msgstr ""
181+
182+#: qml/Components/KeyboardShortcutsOverlay.qml:143
183+msgid "Opens launcher keyboard navigation mode."
184+msgstr ""
185+
186+#: qml/Components/KeyboardShortcutsOverlay.qml:151
187+msgid "Super + Tab"
188+msgstr ""
189+
190+#: qml/Components/KeyboardShortcutsOverlay.qml:156
191+msgid "Switches applications via the launcher."
192+msgstr ""
193+
194+#: qml/Components/KeyboardShortcutsOverlay.qml:164
195+msgid "Super + 0 to 9"
196+msgstr ""
197+
198+#: qml/Components/KeyboardShortcutsOverlay.qml:169
199+msgid "Same as clicking on a launcher icon."
200+msgstr ""
201+
202+#: qml/Components/KeyboardShortcutsOverlay.qml:181
203+msgid "Scopes"
204+msgstr ""
205+
206+#: qml/Components/KeyboardShortcutsOverlay.qml:188
207+msgid "Super (Tap)"
208+msgstr ""
209+
210+#: qml/Components/KeyboardShortcutsOverlay.qml:193
211+msgid "Opens the Scopes home."
212+msgstr ""
213+
214+#: qml/Components/KeyboardShortcutsOverlay.qml:209
215+msgid "Switching"
216+msgstr ""
217+
218+#: qml/Components/KeyboardShortcutsOverlay.qml:216
219+msgid "Alt + Tab"
220+msgstr ""
221+
222+#: qml/Components/KeyboardShortcutsOverlay.qml:221
223+msgid "Switches between applications."
224+msgstr ""
225+
226+#: qml/Components/KeyboardShortcutsOverlay.qml:229
227+msgid "Super + W"
228+msgstr ""
229+
230+#: qml/Components/KeyboardShortcutsOverlay.qml:234
231+msgid "Opens the desktop spread."
232+msgstr ""
233+
234+#: qml/Components/KeyboardShortcutsOverlay.qml:242
235+msgid "Cursor Left or Right"
236+msgstr ""
237+
238+#: qml/Components/KeyboardShortcutsOverlay.qml:247
239+msgid "Moves the focus."
240+msgstr ""
241+
242+#: qml/Components/KeyboardShortcutsOverlay.qml:259
243+msgid "Windows"
244+msgstr ""
245+
246+#: qml/Components/KeyboardShortcutsOverlay.qml:266
247+msgid "Ctrl + Super + D"
248+msgstr ""
249+
250+#: qml/Components/KeyboardShortcutsOverlay.qml:271
251+msgid "Minimizes all windows."
252+msgstr ""
253+
254+#: qml/Components/KeyboardShortcutsOverlay.qml:279
255+msgid "Ctrl + Super + Up"
256+msgstr ""
257+
258+#: qml/Components/KeyboardShortcutsOverlay.qml:284
259+msgid "Maximizes the current window."
260+msgstr ""
261+
262+#: qml/Components/KeyboardShortcutsOverlay.qml:292
263+msgid "Ctrl + Super + Down"
264+msgstr ""
265+
266+#: qml/Components/KeyboardShortcutsOverlay.qml:297
267+msgid "Minimizes or restores the current window."
268+msgstr ""
269+
270+#: qml/Components/KeyboardShortcutsOverlay.qml:305
271+msgid "Ctrl + Super + Left or Right"
272+msgstr ""
273+
274+#: qml/Components/KeyboardShortcutsOverlay.qml:310
275+msgid "Semi-maximizes the current window."
276+msgstr ""
277+
278+#: qml/Components/KeyboardShortcutsOverlay.qml:318
279+msgid "Alt + F4"
280+msgstr ""
281+
282+#: qml/Components/KeyboardShortcutsOverlay.qml:323
283+msgid "Closes the current window."
284+msgstr ""
285+
286+#: qml/Components/Lockscreen.qml:239
287+msgid "Return to Call"
288+msgstr "Turnà à a Chjamata"
289+
290+#: qml/Components/Lockscreen.qml:239
291+msgid "Emergency Call"
292+msgstr "Chjamata d'emergenza"
293+
294+#: qml/Components/Lockscreen.qml:271
295+msgid "OK"
296+msgstr "OK"
297+
298+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
299+#, qt-format
300+msgid "%1:%2:%3"
301+msgstr ""
302+
303+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
304+#, qt-format
305+msgid "%1:%2"
306+msgstr ""
307+
308+#: qml/Components/ModeSwitchWarningDialog.qml:32
309+msgid "Apps may have unsaved data:"
310+msgstr "E app puderebbenu avè dati micca salvati:"
311+
312+#: qml/Components/ModeSwitchWarningDialog.qml:57
313+msgctxt ""
314+"Re-dock means connect the device again to an external screen/mouse/keyboard"
315+msgid "Re-dock, save your work and close these apps to continue."
316+msgstr ""
317+"Turnà à cullegà, salvà u travagliu fattu è chjode sse applicazioni per "
318+"continuà."
319+
320+#: qml/Components/ModeSwitchWarningDialog.qml:63
321+msgid "Or force close now (unsaved data will be lost)."
322+msgstr "O furzà a chjusura avà (i dati micca salvati seranu perduti)."
323+
324+#: qml/Components/ModeSwitchWarningDialog.qml:75
325+msgid "OK, I will reconnect"
326+msgstr "OK, sto cunnettendumi..."
327+
328+#: qml/Components/ModeSwitchWarningDialog.qml:76
329+msgid "Reconnect now!"
330+msgstr "Turnà à cunnettesi avà!"
331+
332+#: qml/Components/ModeSwitchWarningDialog.qml:88
333+msgid "Close all"
334+msgstr "Chjode tuttu"
335+
336+#: qml/Components/SharingPicker.qml:54
337+msgid "Preview Share Item"
338+msgstr "Anteprima elementi da sparte"
339+
340+#: qml/Dash/DashPageHeader.qml:333
341+msgctxt "Button: Open the Ubuntu Store"
342+msgid "Store"
343+msgstr "Buttega"
344+
345+#: qml/Dash/DashPageHeader.qml:340
346+msgctxt "Button: Start a search in the current dash scope"
347+msgid "Search"
348+msgstr "Circà"
349+
350+#: qml/Dash/DashPageHeader.qml:350
351+msgctxt "Button: Show the current dash scope settings"
352+msgid "Settings"
353+msgstr "Parametri"
354+
355+#: qml/Dash/DashPageHeader.qml:357
356+msgid "Remove from Favorites"
357+msgstr "Toglie da i Favuriti"
358+
359+#: qml/Dash/DashPageHeader.qml:357
360+msgid "Add to Favorites"
361+msgstr "Aghjustà à i Favuriti"
362+
363+#: qml/Dash/FiltersPopover.qml:60
364+msgid "Refine your results"
365+msgstr "Raffinà i risultati"
366+
367+#: qml/Dash/FiltersPopover.qml:69
368+msgid "Reset"
369+msgstr "Re-inizializzà"
370+
371+#: qml/Dash/GenericScopeView.qml:580 qml/Dash/GenericScopeView.qml:775
372+msgid "Show less"
373+msgstr ""
374+
375+#: qml/Dash/GenericScopeView.qml:580
376+msgid "Show all"
377+msgstr ""
378+
379+#: qml/Dash/GenericScopeView.qml:637
380+msgctxt "Label: Hint for dash search line edit"
381+msgid "Search"
382+msgstr "Circà"
383+
384+#: qml/Dash/PageHeaderExtraPanel.qml:56
385+msgid "Recent Searches"
386+msgstr "Ricerche recente"
387+
388+#: qml/Dash/PageHeaderExtraPanel.qml:67
389+msgid "Clear All"
390+msgstr "Squassà tuttu"
391+
392+#: qml/Dash/Previews/PreviewActionCombo.qml:35
393+msgid "More..."
394+msgstr "Di più..."
395+
396+#: qml/Dash/Previews/PreviewActionCombo.qml:35
397+msgid "Less..."
398+msgstr "Menu..."
399+
400+#: qml/Dash/Previews/PreviewCommentInput.qml:68
401+#: qml/Dash/Previews/PreviewRatingInput.qml:175
402+msgid "Send"
403+msgstr "Mandà"
404+
405+#: qml/Dash/Previews/PreviewRatingInput.qml:82
406+msgid "Rate this"
407+msgstr "Ghjudicà questu"
408+
409+#: qml/Dash/Previews/PreviewRatingInput.qml:157
410+msgid "Add a review"
411+msgstr "Aghjustà una recensione"
412+
413+#: qml/Dash/PullToRefreshScopeStyle.qml:55
414+msgid "Pull to refresh…"
415+msgstr "Tirà per rinnuvà..."
416+
417+#: qml/Dash/PullToRefreshScopeStyle.qml:60
418+msgid "Release to refresh…"
419+msgstr "Lascià andà per rinnuvà..."
420+
421+#: qml/Dash/ScopeSettings/ScopeSettingBoolean.qml:43
422+msgid "Enable location data"
423+msgstr "Abilità i dati nant'à u locu"
424+
425+#: qml/Dash/ScopesList.qml:55
426+msgid "Manage"
427+msgstr "Gestì"
428+
429+#: qml/Dash/ScopesList.qml:102
430+msgid "Home"
431+msgstr "Accolta"
432+
433+#: qml/Dash/ScopesList.qml:103
434+msgid "Also installed"
435+msgstr "Anu dinù installatu..."
436+
437+#: qml/DisabledScreenNotice.qml:109
438+msgid ""
439+"Your device is now connected to an external display. Use this screen as a "
440+"touch pad to interact with the pointer."
441+msgstr ""
442+"U vostru dispusitivu avà hè cunnessu à unu screnu esternu. Usà u screnu di "
443+"ssu dispusitivu cum'è un tappettu tattile per guvernà u puntatore."
444+
445+#: qml/Greeter/CoverPage.qml:127
446+msgid "Unlock"
447+msgstr "Sbluccà"
448+
449+#: qml/Greeter/Greeter.qml:555
450+msgid "Try again"
451+msgstr ""
452+
453+#: qml/Greeter/LoginList.qml:63
454+msgid "Passphrase"
455+msgstr ""
456+
457+#: qml/Greeter/LoginList.qml:64
458+msgid "Passcode"
459+msgstr ""
460+
461+#: qml/Greeter/LoginList.qml:87
462+msgid "Retry"
463+msgstr "Turnà à pruvà"
464+
465+#: qml/Greeter/LoginList.qml:88
466+msgid "Log In"
467+msgstr ""
468+
469+#: qml/Greeter/NarrowView.qml:55
470+msgid "Sorry, incorrect passphrase."
471+msgstr "Spiacenti, frasa d'ordine errata"
472+
473+#: qml/Greeter/NarrowView.qml:56
474+msgid "Sorry, incorrect passcode."
475+msgstr "Spiacenti, codice d'accessu erratu"
476+
477+#: qml/Greeter/NarrowView.qml:57
478+msgid "This will be your last attempt."
479+msgstr "Questu tentativu serà l'ultimu."
480+
481+#: qml/Greeter/NarrowView.qml:59
482+msgid ""
483+"If passphrase is entered incorrectly, your phone will conduct a factory "
484+"reset and all personal data will be deleted."
485+msgstr ""
486+"Si a frasa d'ordine hè errata, u telefunu serà reinizializatu, è tutti i "
487+"dati persunali serannu perduti."
488+
489+#: qml/Greeter/NarrowView.qml:60
490+msgid ""
491+"If passcode is entered incorrectly, your phone will conduct a factory reset "
492+"and all personal data will be deleted."
493+msgstr ""
494+"Si u codice d'accessu hè erratu, u telefunu serà reinizializatu, è tutti i "
495+"dati persunali serannu perduti."
496+
497+#: qml/Greeter/NarrowView.qml:129
498+#, qt-format
499+msgid "Enter %1"
500+msgstr "Inserì %1"
501+
502+#: qml/Greeter/NarrowView.qml:130
503+msgid "Enter passphrase"
504+msgstr "Inserì a frasa d'ordine"
505+
506+#: qml/Greeter/NarrowView.qml:131
507+msgid "Enter passcode"
508+msgstr "Inserì u codice d'accessu"
509+
510+#: qml/Greeter/NarrowView.qml:135
511+#, qt-format
512+msgid "Sorry, incorrect %1"
513+msgstr "Spiacenti, %1 micca currettu"
514+
515+#: qml/Greeter/NarrowView.qml:136
516+msgid "Sorry, incorrect passphrase"
517+msgstr "Spiacenti, frasa d'ordine micca curretta"
518+
519+#: qml/Greeter/NarrowView.qml:137
520+msgctxt "passphrase"
521+msgid "Please re-enter"
522+msgstr "Ripete l'inserimentu"
523+
524+#: qml/Greeter/NarrowView.qml:138
525+msgid "Sorry, incorrect passcode"
526+msgstr "Spiacenti, codice d'accessu micca currettu"
527+
528+#: qml/Notifications/NotificationMenuItemFactory.qml:124
529+msgid "Show password"
530+msgstr "Mustrà a parolla d'ordine"
531+
532+#: qml/Panel/ActiveCallHint.qml:79
533+msgid "Tap to return to call..."
534+msgstr "Tuccà per riturnà à a chjamata..."
535+
536+#: qml/Panel/ActiveCallHint.qml:92
537+msgid "Conference"
538+msgstr "Cunferenza"
539+
540+#: qml/Panel/Indicators/MenuItemFactory.qml:762
541+msgid "Nothing is playing"
542+msgstr "Nunda in ripruduzione..."
543+
544+#: qml/Panel/Indicators/MenuItemFactory.qml:891
545+#, qt-format
546+msgid "%1 hour"
547+msgid_plural "%1 hours"
548+msgstr[0] "%1 ora"
549+msgstr[1] "%1 ore"
550+
551+#: qml/Panel/Indicators/MenuItemFactory.qml:895
552+#, qt-format
553+msgid "%1 minute"
554+msgid_plural "%1 minutes"
555+msgstr[0] "%1 minutu"
556+msgstr[1] "%1 minuti"
557+
558+#: qml/Panel/Indicators/MenuItemFactory.qml:900
559+#, qt-format
560+msgid "%1 second"
561+msgid_plural "%1 seconds"
562+msgstr[0] "%1 seconda"
563+msgstr[1] "%1 seconde"
564+
565+#: qml/Panel/Indicators/MenuItemFactory.qml:903
566+msgid "0 seconds"
567+msgstr "0 seconde"
568+
569+#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
570+#: qml/Panel/Indicators/MenuItemFactory.qml:905
571+#, qt-format
572+msgid "%1 remaining"
573+msgstr "%1 rimanente"
574+
575+#: qml/Panel/Indicators/MenuItemFactory.qml:911
576+msgid "In queue…"
577+msgstr "In coda..."
578+
579+#: qml/Panel/Indicators/MenuItemFactory.qml:915
580+msgid "Downloading"
581+msgstr "Scaricamentu..."
582+
583+#: qml/Panel/Indicators/MenuItemFactory.qml:917
584+msgid "Paused, tap to resume"
585+msgstr "In sosta, tuccà pè riprende"
586+
587+#: qml/Panel/Indicators/MenuItemFactory.qml:919
588+msgid "Canceled"
589+msgstr "Annullatu"
590+
591+#: qml/Panel/Indicators/MenuItemFactory.qml:921
592+msgid "Finished"
593+msgstr "Cumpletu"
594+
595+#: qml/Panel/Indicators/MenuItemFactory.qml:923
596+msgid "Failed, tap to retry"
597+msgstr "Fallatu, tocca per turnà à pruvà"
598+
599+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:151
600+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:210
601+msgctxt "Button: Send a reply message"
602+msgid "Send"
603+msgstr "Mandà"
604+
605+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:152
606+msgctxt "Label: Hint in message indicator line edit"
607+msgid "Reply"
608+msgstr "Risponde"
609+
610+#: qml/Panel/Indicators/MessageMenuItemFactory.qml:209
611+msgctxt "Button: Call back on phone"
612+msgid "Call back"
613+msgstr "Richjamà"
614+
615+#: qml/Stages/SideStage.qml:76
616+msgid "Drag using 3 fingers any application from one window to the other"
617+msgstr ""
618+"Trascinà cù 3 dite qualichissia applicazione da una finestra à un'antra"
619+
620+#: qml/Tutorial/TutorialLeftLong.qml:49
621+msgid "Long swipe from the left edge to open the Today scope"
622+msgstr "Scorre longu da mancina versu diritta per aprì u pannellu Oghje"
623+
624+#: qml/Tutorial/TutorialLeft.qml:47
625+msgid "Short swipe from the left edge to open the launcher"
626+msgstr ""
627+
628+#: qml/Tutorial/TutorialRight.qml:55
629+msgid "Push your mouse against the right edge to view your open apps"
630+msgstr ""
631+
632+#: qml/Tutorial/TutorialRight.qml:56
633+msgid "Swipe from the right edge to view your open apps"
634+msgstr ""
635+
636+#: qml/Tutorial/TutorialTop.qml:53
637+msgid "Swipe from the top edge to access notifications and quick settings"
638+msgstr ""
639+
640+#: qml/Wizard/Page.qml:54
641+msgctxt "Button: Go back one page in the Wizard"
642+msgid "Back"
643+msgstr "Riturnà"
644+
645+#: qml/Wizard/Pages/10-welcome.qml:27
646+msgid "Language"
647+msgstr "Lingua"
648+
649+#: qml/Wizard/Pages/10-welcome.qml:171 qml/Wizard/Pages/30-wifi.qml:206
650+#: qml/Wizard/Pages/40-location.qml:271 qml/Wizard/Pages/50-timezone.qml:270
651+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
652+#: qml/Wizard/Pages/75-report-check.qml:84
653+#: qml/Wizard/Pages/passcode-desktop.qml:141
654+#: qml/Wizard/Pages/password-set.qml:141
655+msgid "Next"
656+msgstr "Prossimu"
657+
658+#: qml/Wizard/Pages/30-wifi.qml:29
659+msgid "Connect to Wi‑Fi"
660+msgstr "Cunnettesi à u Wi-Fi"
661+
662+#: qml/Wizard/Pages/30-wifi.qml:130
663+msgid "Connected"
664+msgstr "Cunnessu"
665+
666+#: qml/Wizard/Pages/30-wifi.qml:163
667+msgid "Available Wi-Fi networks"
668+msgstr "Rete Wi-Fi dispunibili"
669+
670+#: qml/Wizard/Pages/30-wifi.qml:164
671+msgid "No available Wi-Fi networks"
672+msgstr "Nisuna reta Wi-Fi hè dispunibile"
673+
674+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
675+#: qml/Wizard/Pages/sim.qml:101
676+msgid "Skip"
677+msgstr "Ignurà"
678+
679+#: qml/Wizard/Pages/40-location.qml:27
680+msgid "Location Services"
681+msgstr "Servizi di lucalizazione"
682+
683+#: qml/Wizard/Pages/40-location.qml:83
684+msgid ""
685+"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
686+"(recommended)"
687+msgstr ""
688+"Usà di manera anonima u GPS, i punti d'accessu Wi-Fi, e reti mobili, per "
689+"stabilisce à pusizione (segeritu)"
690+
691+#: qml/Wizard/Pages/40-location.qml:105
692+#, qt-format
693+msgid "By selecting this option you agree to the Nokia HERE %1."
694+msgstr "Selezziunendu issa ozzione s'accettanu i %1 di Nokia HERE."
695+
696+#: qml/Wizard/Pages/40-location.qml:106
697+msgctxt "part of: Nokia HERE terms and conditions"
698+msgid "terms and conditions"
699+msgstr "termini è cundizioni"
700+
701+#: qml/Wizard/Pages/40-location.qml:160
702+msgid "GPS only"
703+msgstr "Sulamente GPS"
704+
705+#: qml/Wizard/Pages/40-location.qml:214
706+msgid "Don't use my location"
707+msgstr "Miccà usà u mo locu"
708+
709+#: qml/Wizard/Pages/40-location.qml:260
710+msgid "You can change it later in System Settings."
711+msgstr "A pudite cambià successivamente ind'i Parametri di Sistema"
712+
713+#: qml/Wizard/Pages/50-timezone.qml:29
714+msgid "Time Zone"
715+msgstr "Fusu orariu"
716+
717+#: qml/Wizard/Pages/50-timezone.qml:181
718+msgid "Enter your city"
719+msgstr "Inserì a vostra cità"
720+
721+#: qml/Wizard/Pages/60-account.qml:24
722+msgid "Personalize Your Device"
723+msgstr "Persunalizà u vostru dispusitivu"
724+
725+#: qml/Wizard/Pages/60-account.qml:48
726+msgid "Preferred Name"
727+msgstr "Nome preferitu"
728+
729+#: qml/Wizard/Pages/70-passwd-type.qml:39
730+msgid "Lock Screen"
731+msgstr "Bluccà u screnu"
732+
733+#: qml/Wizard/Pages/70-passwd-type.qml:101
734+msgctxt "Label: Type of security method"
735+msgid "Create new password"
736+msgstr "Creà una nova parolla d'ordine"
737+
738+#: qml/Wizard/Pages/70-passwd-type.qml:103
739+msgctxt "Label: Type of security method"
740+msgid "Create passcode (numbers only)"
741+msgstr "Creà un codice d'accessu (sulamente numeri)"
742+
743+#: qml/Wizard/Pages/70-passwd-type.qml:105
744+msgctxt "Label: Type of security method"
745+msgid "No lock code"
746+msgstr "Nisun codice di bloccu"
747+
748+#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
749+msgid "Privacy Policy"
750+msgstr "Pulitica di Riservatezza"
751+
752+#: qml/Wizard/Pages/75-report-check.qml:26
753+msgid "Help Us Improve"
754+msgstr "Aiutaci à migliurà"
755+
756+#: qml/Wizard/Pages/75-report-check.qml:59
757+msgid "Improve system performance by sending us crashes and error reports."
758+msgstr ""
759+"Migliurà l'efficienza di u sistema mandenduci nutificazioni d'errori è "
760+"blocchi impurtanti."
761+
762+#: qml/Wizard/Pages/75-report-check.qml:60
763+msgid "Privacy policy"
764+msgstr "Pulitica di Riservatezza"
765+
766+#: qml/Wizard/Pages/80-finished.qml:89
767+msgid "Welcome to Ubuntu"
768+msgstr "Benvenuti in Ubuntu"
769+
770+#: qml/Wizard/Pages/80-finished.qml:104
771+msgid "You are ready to use your device now"
772+msgstr "Avà site pronti à usà u vostru dispusitivu"
773+
774+#: qml/Wizard/Pages/80-finished.qml:124
775+msgid "Get Started"
776+msgstr "Primi passi"
777+
778+#: qml/Wizard/Pages/here-terms.qml:25
779+msgid "Terms & Conditions"
780+msgstr "Termini & Cundizioni"
781+
782+#: qml/Wizard/Pages/here-terms.qml:69
783+msgid "Your device uses positioning technologies provided by HERE."
784+msgstr "U dispusitivu utliza tecnulugie di pusiziunamentu furnite da HERE."
785+
786+#: qml/Wizard/Pages/here-terms.qml:81
787+msgid ""
788+"To provide you with positioning services and to improve their quality, HERE "
789+"collects information about nearby cell towers and Wi-Fi hotspots around your "
790+"current location whenever your position is being found."
791+msgstr ""
792+"Per furnì servizii di pusiziunamentu è migliuranne a qualità, ogni volta chì "
793+"a pusizione hè truvata, HERE culleziona e infurmazione nant'à i punti "
794+"d'accessu Wi-Fi è i repetitori di telefunia mobile ind'u circondu."
795+
796+#: qml/Wizard/Pages/here-terms.qml:93
797+msgid ""
798+"The information collected is used to analyze the service and to improve the "
799+"use of service, but not to identify you personally."
800+msgstr ""
801+"E infurmazione raccolte seranu utilizate per analizà u servizi è "
802+"migliurallu, micca per idintificà l'utilizatore."
803+
804+#: qml/Wizard/Pages/here-terms.qml:106
805+#, qt-format
806+msgid "By continuing, you agree to the HERE platform %1 and %2."
807+msgstr "Cuntinuendu, s'accettanu i %1 e la %2 di a piattaforma HERE."
808+
809+#: qml/Wizard/Pages/here-terms.qml:107
810+msgid "Service Terms"
811+msgstr "Termini di u serviziu"
812+
813+#: qml/Wizard/Pages/passcode-confirm.qml:43
814+#: qml/Wizard/Pages/passcode-desktop.qml:96
815+msgid "Confirm passcode"
816+msgstr "Cunfirmà u codice d'accessu"
817+
818+#: qml/Wizard/Pages/passcode-confirm.qml:45
819+msgid "Incorrect passcode."
820+msgstr "Codice d'accessu micca currettu"
821+
822+#: qml/Wizard/Pages/passcode-confirm.qml:45
823+msgctxt "Enter the passcode again"
824+msgid "Please re-enter."
825+msgstr "Ripete l'inserimentu."
826+
827+#: qml/Wizard/Pages/passcode-desktop.qml:30
828+msgid "Lock Screen Passcode"
829+msgstr "Codice bloccu screnu"
830+
831+#: qml/Wizard/Pages/passcode-desktop.qml:60
832+msgid "Enter 4 numbers to setup your passcode"
833+msgstr "Inserì 4 numeri per creà u vostru codice d'accessu"
834+
835+#: qml/Wizard/Pages/passcode-desktop.qml:76
836+#: qml/Wizard/Pages/passcode-set.qml:54
837+msgid "Choose passcode"
838+msgstr "Sceglie u codice d'accessu"
839+
840+#: qml/Wizard/Pages/passcode-desktop.qml:126
841+msgid "Passcode too short"
842+msgstr "Codice d'accessu troppu cortu"
843+
844+#: qml/Wizard/Pages/passcode-desktop.qml:128
845+msgid "Passcodes match"
846+msgstr "I codici currispondenu."
847+
848+#: qml/Wizard/Pages/passcode-desktop.qml:130
849+msgid "Passcodes do not match"
850+msgstr "I codici ùn currispondenu micca."
851+
852+#: qml/Wizard/Pages/passcode-set.qml:62
853+msgid "Passcode must be 4 characters long"
854+msgstr "U codice d'accessu hà da esse longu almenu 4 caratteri"
855+
856+#: qml/Wizard/Pages/password-set.qml:30
857+msgid "Lock Screen Password"
858+msgstr "Parolla d'ordine per bloccu screnu"
859+
860+#: qml/Wizard/Pages/password-set.qml:61
861+msgid "Enter at least 8 characters"
862+msgstr "Inserì almenu 8 caratteri"
863+
864+#: qml/Wizard/Pages/password-set.qml:73
865+msgid "Choose password"
866+msgstr "Sceglie a parolla d'ordine"
867+
868+#: qml/Wizard/Pages/password-set.qml:103
869+msgid "Confirm password"
870+msgstr "Cunfirmà parolla d'ordine"
871+
872+#: qml/Wizard/Pages/sim.qml:27
873+msgid "No SIM card installed"
874+msgstr "Nisuna carta SIM installata"
875+
876+#: qml/Wizard/Pages/sim.qml:54
877+msgid "SIM card added"
878+msgstr "Carta SIM aghjustata"
879+
880+#: qml/Wizard/Pages/sim.qml:55
881+msgid "You must restart the device to access the mobile network."
882+msgstr "Duvite ri-avvià u dispusitivu per accede à a reta mobile."
883+
884+#: qml/Wizard/Pages/sim.qml:59
885+msgid "Restart"
886+msgstr "Turnà ad avvià"
887+
888+#: qml/Wizard/Pages/sim.qml:78
889+msgid "You won’t be able to make calls or use text messaging without a SIM."
890+msgstr ""
891+"Senza una carta SIM ùn hè micca pussibile di chjamà o mandà messaggi SMS."
892+
893+#: qml/Wizard/Pages/sim.qml:90
894+msgid "To proceed with no SIM tap Skip."
895+msgstr "Per prucede senza una carta SIM tuccà Saltà"
896+
897+#: qml/Wizard/PasswordMeter.qml:87
898+msgid "Password too short"
899+msgstr ""
900+
901+#: qml/Wizard/PasswordMeter.qml:89
902+msgid "Passwords match"
903+msgstr "E parolle d'ordine sò l'istesse"
904+
905+#: qml/Wizard/PasswordMeter.qml:91
906+msgid "Passwords do not match"
907+msgstr "E parolle d'ordine ùn coincidunu micca"
908+
909+#: qml/Wizard/PasswordMeter.qml:95
910+msgid "Strong password"
911+msgstr "Parolla d'ordine forte"
912+
913+#: qml/Wizard/PasswordMeter.qml:97
914+msgid "Fair password"
915+msgstr "Parolla d'ordine media"
916+
917+#: qml/Wizard/PasswordMeter.qml:99
918+msgid "Weak password"
919+msgstr "Parolla d'ordine debule"
920+
921+#: qml/Wizard/PasswordMeter.qml:101
922+msgid "Very weak password"
923+msgstr "Parolla d'ordine moltu debule"
924+
925+#~ msgid "See all"
926+#~ msgstr "Vede tutti"
927+
928+#~ msgid "Tap to unlock"
929+#~ msgstr "Tuccà per sbluccà"
930+
931+#~ msgid "See less"
932+#~ msgstr "Vede menu"
933+
934+#~ msgid "Swipe from the left edge to open the launcher"
935+#~ msgstr "Scorre da mancina versu diritta per aprì u launcher"
936+
937+#~ msgid "Swipe up to add a contact"
938+#~ msgstr "Scorre versu l'altu per aghjustà un cuntattu"
939+
940+#~ msgid "Swipe up for recent calls"
941+#~ msgstr "Scorre versu l'altu pè e chjamate recenti"
942+
943+#~ msgid "Swipe up for favorite calculations"
944+#~ msgstr "Scorre versu l'altu pè mustrà i calculi favuriti"
945+
946+#~ msgid "Swipe up to manage the app"
947+#~ msgstr "Scorre versu l'altu per gestì l'app"
948+
949+#~ msgid "Swipe up to create a message"
950+#~ msgstr "Scorre versu l'altu per creà un messaggiu"
951+
952+#~ msgid "Short or long swipe from the right edge to view your open apps"
953+#~ msgstr ""
954+#~ "Scorre cortu o longu da diritta versu mancina per vede e applicazioni aperte"
955+
956+#~ msgid "Swipe from the top right edge to open the notification bar"
957+#~ msgstr "Scorre da l'altu à diritta per aprì a barra di e nutificazione"
958+
959+#~ msgid "Swipe from the top edge to open the notification bar"
960+#~ msgstr "Scorre da l'altu per aprì a barra di e nutificazione"
961+
962+#~ msgid "Hover your mouse on the right edge to view your open apps"
963+#~ msgstr ""
964+#~ "Passà u puntatore di u topu nant'à u bordu destru per vede e app aperte"
po/cs.po+266−101

This diff is too big to show here.

po/cy.po+266−101

This diff is too big to show here.

po/da.po+266−101

This diff is too big to show here.

po/de.po+303−109

This diff is too big to show here.

po/el.po+266−101

This diff is too big to show here.

po/en_AU.po+296−104

This diff is too big to show here.

po/en_GB.po+297−105

This diff is too big to show here.

po/eo.po+262−100

This diff is too big to show here.

po/es.po+300−106

This diff is too big to show here.

po/eu.po+266−101

This diff is too big to show here.

po/fa.po+301−108

This diff is too big to show here.

po/fi.po+301−107

This diff is too big to show here.

po/fo.po+346−180

This diff is too big to show here.

po/fr.po+306−111

This diff is too big to show here.

po/ga.po+266−101

This diff is too big to show here.

po/gd.po+299−107

This diff is too big to show here.

po/gl.po+298−104

This diff is too big to show here.

po/gv.po+262−100

This diff is too big to show here.

po/he.po+266−101

This diff is too big to show here.

po/hi.po+262−100

This diff is too big to show here.

po/hr.po+297−105

This diff is too big to show here.

po/hu.po+299−106

This diff is too big to show here.

po/hy.po+262−100

This diff is too big to show here.

po/ia.po+299−105

This diff is too big to show here.

po/id.po+262−100

This diff is too big to show here.

po/is.po+262−100

This diff is too big to show here.

po/it.po+297−105

This diff is too big to show here.

po/ja.po+262−100

This diff is too big to show here.

po/km.po+262−100

This diff is too big to show here.

po/kn.po+262−100

This diff is too big to show here.

po/ko.po+266−101

This diff is too big to show here.

po/ku.po+262−100

This diff is too big to show here.

po/ky.po+262−100

This diff is too big to show here.

po/lo.po+262−100

This diff is too big to show here.

po/lt.po+262−100

This diff is too big to show here.

po/lv.po+266−101

This diff is too big to show here.

po/ml.po+262−100

This diff is too big to show here.

po/mr.po+262−100

This diff is too big to show here.

po/ms.po+302−105

This diff is too big to show here.

po/my.po+262−100

This diff is too big to show here.

po/nb.po+299−107

This diff is too big to show here.

po/ne.po+262−100

This diff is too big to show here.

po/nl.po+292−103

This diff is too big to show here.

po/nn.po+262−100

This diff is too big to show here.

po/oc.po+275−101

This diff is too big to show here.

po/or.po+262−100

This diff is too big to show here.

po/pa.po+266−101

This diff is too big to show here.

po/pl.po+300−108

This diff is too big to show here.

po/pt.po+302−108

This diff is too big to show here.

po/pt_BR.po+266−101

This diff is too big to show here.

po/ro.po+266−101

This diff is too big to show here.

po/ru.po+326−137

This diff is too big to show here.

po/shn.po+262−100

This diff is too big to show here.

po/si.po+262−100

This diff is too big to show here.

po/sk.po+298−106

This diff is too big to show here.

po/sl.po+296−104

This diff is too big to show here.

po/sq.po+266−101

This diff is too big to show here.

po/sr.po+296−104

This diff is too big to show here.

po/sv.po+302−109

This diff is too big to show here.

po/sw.po+266−101

This diff is too big to show here.

po/ta.po+262−100

This diff is too big to show here.

po/te.po+262−100

This diff is too big to show here.

po/th.po+262−100

This diff is too big to show here.

po/tr.po+266−101

This diff is too big to show here.

po/ug.po+287−122

This diff is too big to show here.

po/uk.po+297−105

This diff is too big to show here.

po/unity8.pot+260−98

This diff is too big to show here.

po/ur.po+262−100

This diff is too big to show here.

po/uz.po+262−100

This diff is too big to show here.

po/vi.po+262−100

This diff is too big to show here.

po/wo.po+266−101

This diff is too big to show here.

po/xh.po+262−100

This diff is too big to show here.

po/zh_CN.po+305−113

This diff is too big to show here.

po/zh_HK.po+262−100

This diff is too big to show here.

po/zh_TW.po+277−112

This diff is too big to show here.

qml/Components/DelayedLockscreen.qml+1

This diff is too big to show here.

qml/Components/Dialogs.qml+8−8

This diff is too big to show here.

qml/Components/DragHandle.qml+43−25

This diff is too big to show here.

qml/Components/FadingLabel.qmlnew file+42

This diff is too big to show here.

qml/Components/FloatingFlickable.qmlnew file+59

This diff is too big to show here.

qml/Components/InputMethod.qml+2−2

This diff is too big to show here.

qml/Components/KeyboardShortcutsOverlay.qmlnew file+334

This diff is too big to show here.

qml/Components/LazyImage.qml+3−1

This diff is too big to show here.

qml/Components/ListItems/graphics/ListItemDividerHorizontal@18.png

Binary file not shown.

qml/Components/Lockscreen.qml+8

This diff is too big to show here.

qml/Components/MediaServices/MediaServices.qmlnew file+386

This diff is too big to show here.

qml/Components/MediaServices/MediaServicesControls.qmlnew file+192

This diff is too big to show here.

qml/Components/MediaServices/MediaServicesHeader.qmlnew file+71

This diff is too big to show here.

qml/Components/MediaServices/VideoPlayer.qmlnew file+155

This diff is too big to show here.

qml/Components/MediaServices/VideoPlayerControls.qmlnew file+158

This diff is too big to show here.

qml/Components/ModeSwitchWarningDialog.qml+1−1

This diff is too big to show here.

qml/Components/PanelState/PanelState.qml+4−3

This diff is too big to show here.

qml/Components/PassphraseLockscreen.qml+4

This diff is too big to show here.

qml/Components/PhysicalKeysMapper.qml+2−22

This diff is too big to show here.

qml/Components/PinLockscreen.qml+4

This diff is too big to show here.

qml/Components/Rating.qml+1

This diff is too big to show here.

qml/Components/RatingStyle.qml+3

This diff is too big to show here.

qml/Dash/Previews/PreviewSharing.qml → qml/Components/SharingPicker.qmlrenamed+2−14

This diff is too big to show here.

qml/Components/WindowControlButtons.qml+41−34

This diff is too big to show here.

qml/Components/graphics/close@20.png

Binary file not shown.

qml/Components/graphics/icon_star_empty@20.png

Binary file not shown.

qml/Components/graphics/icon_star_full@20.png

Binary file not shown.

qml/Components/graphics/icon_star_half@20.png

Binary file not shown.

qml/Components/graphics/icon_star_off@20.png

Binary file not shown.

qml/Components/graphics/icon_star_on@20.png

Binary file not shown.

qml/Components/graphics/non-selected@18.png

Binary file not shown.

qml/Components/graphics/window-close.svg+164−14

This diff is too big to show here.

qml/Components/graphics/window-maximize.svg+164−12

This diff is too big to show here.

qml/Components/graphics/window-minimize.svg+164−13

This diff is too big to show here.

qml/Components/graphics/window-window.svgnew file+41

This diff is too big to show here.

qml/Dash/CardCarousel.qml+1−1

This diff is too big to show here.

qml/Dash/CardGrid.qml−2

This diff is too big to show here.

qml/Dash/CardTool.qml+8−3

This diff is too big to show here.

qml/Dash/Dash.qml+3−3

This diff is too big to show here.

qml/Dash/DashApplication.qml+15−7

This diff is too big to show here.

qml/Dash/DashCategoryBase.qml+3−11

This diff is too big to show here.

qml/Dash/DashPageHeader.qml+31−36

This diff is too big to show here.

qml/Dash/Filters/FilterOptionSelector.qml+4

This diff is too big to show here.

qml/Dash/Filters/FilterWidgetFactory.qml+8

This diff is too big to show here.

qml/Dash/GenericScopeView.qml+20−9

This diff is too big to show here.

qml/Dash/PageHeaderExtraPanel.qml+34−10

This diff is too big to show here.

qml/Dash/Previews/Preview.qml+17

This diff is too big to show here.

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

This diff is too big to show here.

qml/Dash/Previews/PreviewImageGallery.qml+3

This diff is too big to show here.

qml/Dash/Previews/PreviewInlineVideo.qmlnew file+65

This diff is too big to show here.

qml/Dash/Previews/PreviewMediaToolbar.qml+25−5

This diff is too big to show here.

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

This diff is too big to show here.

qml/Dash/Previews/PreviewRatingEdit.qml+4−1

This diff is too big to show here.

qml/Dash/Previews/PreviewRatingInput.qml+41−42

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

This diff is too big to show here.

qml/Dash/Previews/PreviewZoomableImage.qml+1

This diff is too big to show here.

qml/Dash/ScopesList.qml+2−13

This diff is too big to show here.

qml/Dash/graphics/dash_divider_top_darkgrad@27.png

Binary file not shown.

qml/Dash/graphics/dash_divider_top_lightgrad@27.png

Binary file not shown.

qml/Dash/graphics/header_handlearrow2@27.png

Binary file not shown.

qml/Dash/graphics/header_handlearrow@27.png

Binary file not shown.

qml/Dash/graphics/icon_clear@20.png

Binary file not shown.

qml/Dash/graphics/icon_search_active@20.png

Binary file not shown.

qml/Dash/graphics/icon_search_inactive@20.png

Binary file not shown.

qml/Dash/graphics/navigation_shadow@18.png

Binary file not shown.

qml/Dash/graphics/navigation_shadow_light@18.png

Binary file not shown.

qml/Dash/graphics/overview_hint@27.png

Binary file not shown.

qml/Dash/graphics/pagination_dot_off@30.png

Binary file not shown.

qml/Dash/graphics/pagination_dot_on@30.png

Binary file not shown.

qml/Dash/graphics/paper.png

Binary file not shown.

qml/Dash/graphics/pixel.png

Binary file not shown.

qml/Dash/graphics/play_button@18.png

Binary file not shown.

qml/Dash/graphics/play_button_active@18.png

Binary file not shown.

qml/Dash/graphics/play_button_active_big@20.png

Binary file not shown.

qml/Dash/graphics/play_button_big@20.png

Binary file not shown.

qml/Dash/graphics/tabbarchevron@27.png

Binary file not shown.

qml/Dash/graphics/tablet/icon_close_preview@20.png

Binary file not shown.

qml/Dash/graphics/tooltip_arrow@27.png

Binary file not shown.

qml/DisabledScreenNotice.qml+7

This diff is too big to show here.

qml/Greeter/CoverPage.qml+23−1

This diff is too big to show here.

qml/Components/Header.qml → qml/Greeter/FullLightDMImpl.qmlrenamed+10−10

This diff is too big to show here.

qml/Greeter/Greeter.qml+184−68

This diff is too big to show here.

qml/Greeter/GreeterPrompt.qmlnew file+197

This diff is too big to show here.

qml/Greeter/IntegratedLightDMImpl.qml+1−1

This diff is too big to show here.

qml/Greeter/LightDM.qml → qml/Greeter/LightDMService.qmlrenamed+14−3

This diff is too big to show here.

qml/Greeter/LoginList.qml+77−81

This diff is too big to show here.

qml/Greeter/NarrowView.qml+20−3

This diff is too big to show here.

qml/Greeter/WideView.qml+11−4

This diff is too big to show here.

qml/Greeter/graphics/dot_empty.png

Binary file not shown.

qml/Greeter/graphics/dot_filled.png

Binary file not shown.

qml/Greeter/graphics/dot_pointer.png

Binary file not shown.

qml/Greeter/graphics/icon_arrow.png

Binary file not shown.

qml/Greeter/graphics/infographic_circle_back.png

Binary file not shown.

qml/Greeter/qmldirnew file+1

This diff is too big to show here.

qml/Launcher/Launcher.qml+17−24

This diff is too big to show here.

qml/Launcher/LauncherDelegate.qml+6−10

This diff is too big to show here.

qml/Launcher/LauncherPanel.qml+5−1

This diff is too big to show here.

qml/Launcher/graphics/divider-line.png

Binary file not shown.

qml/Launcher/graphics/focused_app_arrow@30.png

Binary file not shown.

qml/Launcher/graphics/home@18.png

Binary file not shown.

qml/Launcher/graphics/quicklist_tooltip@30.png

Binary file not shown.

qml/Notifications/Notification.qml+36−5

This diff is too big to show here.

qml/Notifications/NotificationMenuItemFactory.qml+4

This diff is too big to show here.

qml/Notifications/Notifications.qml+19−9

This diff is too big to show here.

qml/Panel/Indicators/MenuItemFactory.qml+2−2

This diff is too big to show here.

qml/Panel/Indicators/MessageMenuItemFactory.qml+1−5

This diff is too big to show here.

qml/Panel/Indicators/client/IndicatorsClient.qml+7−1

This diff is too big to show here.

qml/Panel/Indicators/client/IndicatorsList.qml+7

This diff is too big to show here.

qml/Panel/IndicatorsMenu.qml+20−14

This diff is too big to show here.

qml/Panel/Panel.qml+26−22

This diff is too big to show here.

qml/Panel/graphics/rectangular_dropshadow@30.png

Binary file not shown.

qml/Rotation/HalfLoopRotationAnimation.qml+1−1

This diff is too big to show here.

qml/Rotation/ImmediateRotationAction.qml+1−1

This diff is too big to show here.

qml/Rotation/NinetyRotationAnimation.qml+1−1

This diff is too big to show here.

qml/Rotation/UpdateShellTransformations.qml+4−4

This diff is too big to show here.

qml/Shell.qml+79−23

This diff is too big to show here.

qml/Stages/AbstractStage.qml+1

This diff is too big to show here.

qml/Stages/ApplicationWindow.qml+25−9

This diff is too big to show here.

qml/Stages/DecoratedWindow.qml+51−20

This diff is too big to show here.

qml/Stages/DesktopSpread.qml+3−1

This diff is too big to show here.

qml/Stages/DesktopSpreadDelegate.qml+1−1

This diff is too big to show here.

qml/Stages/DesktopStage.qml+131−57

This diff is too big to show here.

qml/Stages/OrientationChangeAnimation.qml+30−6

This diff is too big to show here.

qml/Stages/PhoneStage.qml+4−4

This diff is too big to show here.

qml/Stages/ShimStage.qml → qml/Stages/ResizeGrip.qmlrenamed+22−19

This diff is too big to show here.

qml/Stages/SideStage.qml+1−2

This diff is too big to show here.

qml/Stages/Splash.qml+6−17

This diff is too big to show here.

qml/Stages/SpreadDelegate.qml+8−12

This diff is too big to show here.

qml/Stages/SurfaceContainer.qml+3

This diff is too big to show here.

qml/Stages/TabletSideStageTouchGesture.qml+3

This diff is too big to show here.

qml/Stages/TabletStage.qml+24−16

This diff is too big to show here.

qml/Stages/WindowControlsOverlay.qmlnew file+219

This diff is too big to show here.

qml/Stages/WindowDecoration.qml+39−13

This diff is too big to show here.

qml/Stages/WindowResizeArea.qml+40−20

This diff is too big to show here.

qml/Stages/graphics/PageHeaderBaseDividerBottom@18.png

Binary file not shown.

qml/Stages/graphics/PageHeaderBaseDividerLight@18.png

Binary file not shown.

qml/Stages/graphics/arrows-centre.pngnew file

Binary file not shown.

qml/Stages/graphics/arrows.pngnew file

Binary file not shown.

qml/Stages/graphics/dropshadow2gu@30.png

Binary file not shown.

qml/Stages/graphics/sidestage_handle@20.png

Binary file not shown.

qml/Tutorial/InactivityTimer.qml+26−10

This diff is too big to show here.

qml/Tutorial/Tutorial.qml+7−6

This diff is too big to show here.

qml/Tutorial/TutorialBottom.qmldeleted−124

This diff is too big to show here.

qml/Tutorial/TutorialContent.qml+51−134

This diff is too big to show here.

qml/Tutorial/TutorialLeft.qml+2−2

This diff is too big to show here.

qml/Tutorial/TutorialLeftLong.qml+3−1

This diff is too big to show here.

qml/Tutorial/TutorialPage.qml+2−2

This diff is too big to show here.

qml/Tutorial/TutorialRight.qml+2−2

This diff is too big to show here.

qml/Tutorial/TutorialTop.qml+2−3

This diff is too big to show here.

qml/Tutorial/graphics/background1.png

Binary file not shown.

qml/Tutorial/graphics/background2.png

Binary file not shown.

qml/Wizard/Pages/10-welcome.qml+17−4

This diff is too big to show here.

qml/Wizard/Pages/50-timezone.qml+5−2

This diff is too big to show here.

qml/Wizard/Pages/data/Desktop_header_bkg.png

Binary file not shown.

qml/Wizard/Pages/data/Desktop_splash_screen_bkg.png

Binary file not shown.

qml/Wizard/Pages/data/Phone_header_bkg.png

Binary file not shown.

qml/Wizard/Pages/data/Phone_splash_screen_bkg.png

Binary file not shown.

qml/Wizard/Pages/data/Tick@30.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/map.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/pin.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-1.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-10.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-11.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-2.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-3.5.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-3.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-4.5.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-4.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-5.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-6.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-7.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-8.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-9.5.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_-9.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_0.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_1.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_10.5.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_10.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_11.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_12.75.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_12.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_13.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_2.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_3.5.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_3.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_4.5.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_4.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_5.5.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_5.75.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_5.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_6.5.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_6.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_7.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_8.5.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_8.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_9.5.png

Binary file not shown.

qml/Wizard/Pages/data/timezonemap/timezone_9.png

Binary file not shown.

qml/Wizard/Pages/passcode-desktop.qml+27−10

This diff is too big to show here.

qml/Wizard/PasswordMeter.qml+3−1

This diff is too big to show here.

qml/Wizard/Wizard.qml+6−2

This diff is too big to show here.

qml/graphics/dropshadow_left@20.png

Binary file not shown.

qml/graphics/dropshadow_right@20.png

Binary file not shown.

src/CMakeLists.txt+2−4

This diff is too big to show here.

src/Dash/CMakeLists.txt+1

This diff is too big to show here.

src/Dash/main.cpp+29−21

This diff is too big to show here.

src/ShellApplication.cpp+11−1

This diff is too big to show here.

tools/unix-signal-handler.cpp → src/UnixSignalHandler.cpprenamed+4−6

This diff is too big to show here.

tools/unix-signal-handler.h → src/UnixSignalHandler.hrenamed

The content is the same.

src/main.cpp+8

This diff is too big to show here.

tests/CMakeLists.txt+7−2

This diff is too big to show here.

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

This diff is too big to show here.

tests/autopilot/unity8/fixture_setup.py+1−1

This diff is too big to show here.

tests/autopilot/unity8/greeter/tests/test_args.py−5

This diff is too big to show here.

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

This diff is too big to show here.

tests/data/unity/backgrounds/blue.png

Binary file not shown.

tests/data/unity/backgrounds/red.png

Binary file not shown.

tests/graphics/applicationIcons/browser@18.png

Binary file not shown.

tests/graphics/applicationIcons/calendar@18.png

Binary file not shown.

tests/graphics/applicationIcons/camera@18.png

Binary file not shown.

tests/graphics/applicationIcons/contacts-app@18.png

Binary file not shown.

tests/graphics/applicationIcons/dash.png

Binary file not shown.

tests/graphics/applicationIcons/dialer-app@18.png

Binary file not shown.

tests/graphics/applicationIcons/evernote@18.png

Binary file not shown.

tests/graphics/applicationIcons/facebook@18.png

Binary file not shown.

tests/graphics/applicationIcons/gallery@18.png

Binary file not shown.

tests/graphics/applicationIcons/gmail@18.png

Binary file not shown.

tests/graphics/applicationIcons/libreoffice@18.png

Binary file not shown.

tests/graphics/applicationIcons/map@18.png

Binary file not shown.

tests/graphics/applicationIcons/messages-app@18.png

Binary file not shown.

tests/graphics/applicationIcons/notepad@18.png

Binary file not shown.

tests/graphics/applicationIcons/pinterest@18.png

Binary file not shown.

tests/graphics/applicationIcons/soundcloud@18.png

Binary file not shown.

tests/graphics/applicationIcons/system-settings@18.png

Binary file not shown.

tests/graphics/applicationIcons/twitter@18.png

Binary file not shown.

tests/graphics/applicationIcons/weather@18.png

Binary file not shown.

tests/graphics/applicationIcons/wikipedia@18.png

Binary file not shown.

tests/graphics/applicationIcons/youtube@18.png

Binary file not shown.

tests/graphics/avatars/amanda@12.png

Binary file not shown.

tests/graphics/avatars/anna_olsson@12.png

Binary file not shown.

tests/graphics/avatars/funky@12.png

Binary file not shown.

tests/graphics/clock@18.png

Binary file not shown.

tests/libs/CMakeLists.txtdeleted−1

This diff is too big to show here.

tests/libs/UbuntuGestures/CMakeLists.txtdeleted−16

This diff is too big to show here.

tests/libs/UbuntuGestures/tst_TouchRegistry.cppdeleted−974

This diff is too big to show here.

tests/mocks/AccountsService/AccountsService.cpp+24

This diff is too big to show here.

tests/mocks/AccountsService/AccountsService.h+16

This diff is too big to show here.

tests/mocks/AccountsService/AccountsService.qmltypesdeleted−41

This diff is too big to show here.

tests/mocks/Biometryd/CMakeLists.txtnew file+14

This diff is too big to show here.

libs/UbuntuGestures/TouchOwnershipEvent.cpp → tests/mocks/Biometryd/MockBiometryd.cpprenamed+20−12

This diff is too big to show here.

tests/mocks/Biometryd/MockBiometryd.hnew file+50

This diff is too big to show here.

tests/mocks/Biometryd/MockDevice.cppnew file+29

This diff is too big to show here.

tests/mocks/Biometryd/MockDevice.hnew file+40

This diff is too big to show here.

tests/mocks/Biometryd/MockIdentifier.cppnew file+28

This diff is too big to show here.

tests/mocks/Biometryd/MockIdentifier.hnew file+36

This diff is too big to show here.

libs/UbuntuGestures/UbuntuGesturesGlobal.h → tests/mocks/Biometryd/MockObserver.cpprenamed+6−7

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_Damper.cpp → tests/mocks/Biometryd/MockObserver.hrenamed+15−18

This diff is too big to show here.

tests/mocks/Biometryd/MockOperation.cppnew file+56

This diff is too big to show here.

tests/mocks/Biometryd/MockOperation.hnew file+48

This diff is too big to show here.

libs/UbuntuGestures/UnownedTouchEvent.cpp → tests/mocks/Biometryd/plugin.cpprenamed+16−14

This diff is too big to show here.

tests/mocks/Biometryd/plugin.hnew file+31

This diff is too big to show here.

tests/mocks/Biometryd/qmldirnew file+3

This diff is too big to show here.

tests/mocks/CMakeLists.txt+2−1

This diff is too big to show here.

tests/mocks/Cursor/qmldir+1−1

This diff is too big to show here.

tests/mocks/GSettings.1.0/GSettings.qmltypesdeleted−42

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/GSettings.1.0/fake_gsettings.h+2−2

This diff is too big to show here.

tests/mocks/IntegratedLightDM/qmldirdeleted−3

This diff is too big to show here.

tests/mocks/LightDM/CMakeLists.txtnew file+1

This diff is too big to show here.

tests/mocks/IntegratedLightDM/IntegratedLightDM.qmltypes → tests/mocks/LightDM/IntegratedLightDM.qmltypesrenamed

The content is the same.

tests/mocks/IntegratedLightDM/CMakeLists.txt → tests/mocks/LightDM/IntegratedLightDM/CMakeLists.txtrenamed+9−7

This diff is too big to show here.

tests/mocks/IntegratedLightDM/MockGreeter.cpp → tests/mocks/LightDM/IntegratedLightDM/MockGreeter.cpprenamed+16

This diff is too big to show here.

tests/mocks/IntegratedLightDM/MockGreeter.h → tests/mocks/LightDM/IntegratedLightDM/MockGreeter.hrenamed+5

This diff is too big to show here.

tests/mocks/LightDM/IntegratedLightDM/MockSessionsModel.cppnew file+37

This diff is too big to show here.

tests/mocks/LightDM/IntegratedLightDM/MockSessionsModel.hnew file+34

This diff is too big to show here.

tests/mocks/IntegratedLightDM/MockUsersModel.cpp → tests/mocks/LightDM/IntegratedLightDM/MockUsersModel.cpprenamed

The content is the same.

tests/mocks/IntegratedLightDM/MockUsersModel.h → tests/mocks/LightDM/IntegratedLightDM/MockUsersModel.hrenamed

The content is the same.

tests/mocks/IntegratedLightDM/QLightDM/Greeter → tests/mocks/LightDM/IntegratedLightDM/QLightDM/Greeterrenamed

The content is the same.

plugins/Ubuntu/Gestures/Damper.cpp → tests/mocks/LightDM/IntegratedLightDM/QLightDM/SessionsModelrenamed+1−8

This diff is too big to show here.

tests/mocks/IntegratedLightDM/QLightDM/UsersModel → tests/mocks/LightDM/IntegratedLightDM/QLightDM/UsersModelrenamed

The content is the same.

tests/mocks/IntegratedLightDM/liblightdm/CMakeLists.txt → tests/mocks/LightDM/IntegratedLightDM/liblightdm/CMakeLists.txtrenamed+4−2

This diff is too big to show here.

tests/mocks/IntegratedLightDM/liblightdm/Greeter.cpp → tests/mocks/LightDM/IntegratedLightDM/liblightdm/Greeter.cpprenamed+9−2

This diff is too big to show here.

tests/mocks/IntegratedLightDM/liblightdm/Greeter.h → tests/mocks/LightDM/IntegratedLightDM/liblightdm/Greeter.hrenamed+1

This diff is too big to show here.

tests/mocks/IntegratedLightDM/liblightdm/GreeterPrivate.cpp → tests/mocks/LightDM/IntegratedLightDM/liblightdm/GreeterPrivate.cpprenamed

The content is the same.

tests/mocks/IntegratedLightDM/liblightdm/GreeterPrivate.h → tests/mocks/LightDM/IntegratedLightDM/liblightdm/GreeterPrivate.hrenamed+1−1

This diff is too big to show here.

tests/mocks/LightDM/IntegratedLightDM/liblightdm/SessionsModel.cppnew file+99

This diff is too big to show here.

tests/mocks/LightDM/IntegratedLightDM/liblightdm/SessionsModel.hnew file+72

This diff is too big to show here.

tests/mocks/LightDM/IntegratedLightDM/liblightdm/SessionsModelPrivate.cppnew file+73

This diff is too big to show here.

tests/mocks/LightDM/IntegratedLightDM/liblightdm/SessionsModelPrivate.hnew file+59

This diff is too big to show here.

tests/mocks/IntegratedLightDM/liblightdm/UsersModel.cpp → tests/mocks/LightDM/IntegratedLightDM/liblightdm/UsersModel.cpprenamed+4−1

This diff is too big to show here.

tests/mocks/IntegratedLightDM/liblightdm/UsersModel.h → tests/mocks/LightDM/IntegratedLightDM/liblightdm/UsersModel.hrenamed+2−1

This diff is too big to show here.

tests/mocks/IntegratedLightDM/liblightdm/UsersModelPrivate.cpp → tests/mocks/LightDM/IntegratedLightDM/liblightdm/UsersModelPrivate.cpprenamed+29−23

This diff is too big to show here.

tests/mocks/IntegratedLightDM/liblightdm/UsersModelPrivate.h → tests/mocks/LightDM/IntegratedLightDM/liblightdm/UsersModelPrivate.hrenamed+2−1

This diff is too big to show here.

tests/mocks/IntegratedLightDM/plugin.cpp → tests/mocks/LightDM/IntegratedLightDM/plugin.cpprenamed+15−4

This diff is too big to show here.

tests/mocks/IntegratedLightDM/plugin.h → tests/mocks/LightDM/IntegratedLightDM/plugin.hrenamed+1−1

This diff is too big to show here.

tests/mocks/LightDM/IntegratedLightDM/qmldirnew file+2

This diff is too big to show here.

tests/mocks/Lights/Lights.qmltypesdeleted−45

This diff is too big to show here.

tests/mocks/MeeGo/QOfono/QOfono.qmltypesdeleted−30

This diff is too big to show here.

tests/mocks/Powerd/Powerd.qmltypesdeleted−39

This diff is too big to show here.

tests/mocks/QMenuModel/QMenuModel.qmltypesdeleted−111

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/QtMultimedia/QtMultimedia.qmltypesdeleted−62

This diff is too big to show here.

tests/mocks/QtMultimedia/VideoSurface.qmlnew file+111

This diff is too big to show here.

tests/mocks/QtMultimedia/audio.cppdeleted−132

This diff is too big to show here.

tests/mocks/QtMultimedia/audio.hdeleted−97

This diff is too big to show here.

tests/mocks/QtMultimedia/mediaplayer.cppnew file+318

This diff is too big to show here.

tests/mocks/QtMultimedia/mediaplayer.hnew file+223

This diff is too big to show here.

tests/mocks/QtMultimedia/plugin.cpp+7−3

This diff is too big to show here.

tests/mocks/QtMultimedia/videooutput.cppnew file+127

This diff is too big to show here.

tests/mocks/QtMultimedia/videooutput.hnew file+52

This diff is too big to show here.

tests/mocks/Ubuntu/DownloadDaemonListener/DownloadDaemonListener.qmltypesdeleted−60

This diff is too big to show here.

tests/mocks/Ubuntu/Payments/MockPayments.cpp+1

This diff is too big to show here.

tests/mocks/Ubuntu/Payments/Payments.qmltypesdeleted−44

This diff is too big to show here.

tests/mocks/Ubuntu/SystemImage/SystemImage.qmltypesdeleted−20

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/LanguagePlugin/LanguagePlugin.qmltypesdeleted−10

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/SecurityPrivacy/SecurityPrivacy.qmltypesdeleted−39

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/TimeDate/CMakeLists.txt+1−1

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/TimeDate/MockTimeDate.qml+15−3

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/TimeDate/qmldir+1−1

This diff is too big to show here.

tests/mocks/Ubuntu/Telephony/Telephony.qmltypesdeleted−58

This diff is too big to show here.

tests/mocks/Ubuntu/Thumbnailer/Thumbnailer.qmltypesdeleted−17

This diff is too big to show here.

tests/mocks/Unity/Application/Application.qmltypesdeleted−517

This diff is too big to show here.

tests/mocks/Unity/Application/ApplicationInfo.cpp+29−27

This diff is too big to show here.

tests/mocks/Unity/Application/ApplicationInfo.h+6−5

This diff is too big to show here.

tests/mocks/Unity/Application/ApplicationManager.cpp+18−1

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurfaceListModel.cpp+13−3

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Unity/Application/UbuntuKeyboardInfo.cpp+1−1

This diff is too big to show here.

tests/mocks/Unity/Application/resources/screenshots/browser@12.png

Binary file not shown.

tests/mocks/Unity/Application/resources/screenshots/camera@12.png

Binary file not shown.

tests/mocks/Unity/Application/resources/screenshots/dialer@12.png

Binary file not shown.

tests/mocks/Unity/Application/resources/screenshots/facebook@12.png

Binary file not shown.

tests/mocks/Unity/Application/resources/screenshots/gallery@12.png

Binary file not shown.

tests/mocks/Unity/Application/resources/screenshots/libreoffice@12.png

Binary file not shown.

tests/mocks/Unity/Application/resources/screenshots/map@12.png

Binary file not shown.

tests/mocks/Unity/Application/resources/screenshots/music@12.png

Binary file not shown.

tests/mocks/Unity/Application/resources/screenshots/twitter@12.png

Binary file not shown.

tests/mocks/Unity/Application/resources/screenshots/unity8-dash@12.png

Binary file not shown.

tests/mocks/Unity/Application/resources/screenshots/vkb_portrait.png

Binary file not shown.

tests/mocks/Unity/Application/resources/vkb_portrait.png

Binary file not shown.

tests/mocks/Unity/Connectivity/Connectivity.qmltypesdeleted−20

This diff is too big to show here.

tests/mocks/Unity/DashCommunicator/DashCommunicator.qmltypesdeleted−46

This diff is too big to show here.

tests/mocks/Unity/Indicators/Indicators.qmltypesdeleted−232

This diff is too big to show here.

tests/mocks/Unity/InputInfo/plugin.h+1−1

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Unity/Launcher/Launcher.qmltypesdeleted−187

This diff is too big to show here.

tests/mocks/Unity/Launcher/MockLauncherItem.cpp+14

This diff is too big to show here.

tests/mocks/Unity/Launcher/MockLauncherItem.h+3

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Unity/Launcher/MockLauncherModel.h+1−1

This diff is too big to show here.

tests/mocks/Unity/Notifications/Notifications.qmltypesdeleted−149

This diff is too big to show here.

tests/mocks/Unity/Screens/plugin.h+1−1

This diff is too big to show here.

tests/mocks/Unity/Unity.qmltypesdeleted−469

This diff is too big to show here.

tests/mocks/Unity/fake_optionselectorfilter.cpp+5

This diff is too big to show here.

tests/mocks/Unity/fake_optionselectorfilter.h+2

This diff is too big to show here.

tests/mocks/Unity/fake_optionselectoroptions.cpp+13

This diff is too big to show here.

tests/mocks/Unity/fake_optionselectoroptions.h+2

This diff is too big to show here.

tests/mocks/Unity/fake_previewmodel.cpp+1−1

This diff is too big to show here.

tests/mocks/Unity/fake_scope.cpp+17−5

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Unity/fake_scopes.cpp+12

This diff is too big to show here.

tests/mocks/Unity/fake_scopesoverview.cpp+1−1

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Utils/Utils.qmltypesdeleted−178

This diff is too big to show here.

tests/mocks/Utils/plugin.h+1−1

This diff is too big to show here.

tests/mocks/Utils/windowstatestorage.cpp+3−2

This diff is too big to show here.

tests/mocks/Utils/windowstatestorage.h+18−4

This diff is too big to show here.

tests/mocks/Wizard/Wizard.qmltypesdeleted−37

This diff is too big to show here.

tests/mocks/libusermetrics/UserMetrics.cpp+1−1

This diff is too big to show here.

tests/mocks/libusermetrics/libusermetricsoutput/ColorTheme.hdeleted−1

This diff is too big to show here.

tests/mocks/libusermetrics/libusermetricsoutput/UserMetrics.hdeleted−1

This diff is too big to show here.

tests/plugins/AccountsService/CMakeLists.txt−5

This diff is too big to show here.

tests/plugins/CMakeLists.txt+3−2

This diff is too big to show here.

tests/plugins/Cursor/CMakeLists.txtnew file+8

This diff is too big to show here.

tests/plugins/Cursor/TextEntry.qmlnew file+34

This diff is too big to show here.

tests/plugins/Cursor/tst_Cursor.qmlnew file+144

This diff is too big to show here.

tests/plugins/Dash/CMakeLists.txt+4

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Dash/cardcreator/1.res.cardcreator+13−43

This diff is too big to show here.

tests/plugins/Dash/cardcreator/1.tst+1

This diff is too big to show here.

tests/plugins/Dash/cardcreator/10.res+4−13

This diff is too big to show here.

tests/plugins/Dash/cardcreator/10.res.cardcreator−10

This diff is too big to show here.

tests/plugins/Dash/cardcreator/10.tst+1

This diff is too big to show here.

tests/plugins/Dash/cardcreator/11.res+20−49

This diff is too big to show here.

tests/plugins/Dash/cardcreator/11.res.cardcreator+15−45

This diff is too big to show here.

tests/plugins/Dash/cardcreator/11.tst+1

This diff is too big to show here.

tests/plugins/Dash/cardcreator/12.res+17−46

This diff is too big to show here.

tests/plugins/Dash/cardcreator/12.res.cardcreator+15−45

This diff is too big to show here.

tests/plugins/Dash/cardcreator/12.tst+1

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Dash/cardcreator/2.res.cardcreator−10

This diff is too big to show here.

tests/plugins/Dash/cardcreator/2.tst+1

This diff is too big to show here.

tests/plugins/Dash/cardcreator/3.res+16−54

This diff is too big to show here.

tests/plugins/Dash/cardcreator/3.res.cardcreator+12−51

This diff is too big to show here.

tests/plugins/Dash/cardcreator/3.tst+1

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Dash/cardcreator/4.tst+1

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Dash/cardcreator/5.tst+1

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Dash/cardcreator/6.tst+1

This diff is too big to show here.

tests/plugins/Dash/cardcreator/7.res+4−13

This diff is too big to show here.

tests/plugins/Dash/cardcreator/7.res.cardcreator−10

This diff is too big to show here.

tests/plugins/Dash/cardcreator/7.tst+1

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Dash/cardcreator/8.tst+1

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Dash/cardcreator/9.res.cardcreator+1−3

This diff is too big to show here.

tests/plugins/Dash/cardcreator/9.tst+1

This diff is too big to show here.

tests/plugins/Dash/cardcreatortest.cpp+9−6

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/horizontaljournaltest.cpp+1−4

This diff is too big to show here.

tests/plugins/Dash/listviewwithpageheadersectionexternalmodeltest.cpp+3−6

This diff is too big to show here.

tests/plugins/Dash/listviewwithpageheadersectiontest.cpp+9−6

This diff is too big to show here.

tests/plugins/Dash/listviewwithpageheadertest.cpp+6−4

This diff is too big to show here.

tests/plugins/Dash/listviewwithpageheadertestsection.qml+15−3

This diff is too big to show here.

tests/plugins/Dash/listviewwithpageheadertestsectionexternalmodel.qml+2−1

This diff is too big to show here.

tests/plugins/Dash/organicgridtest.cpp+1−4

This diff is too big to show here.

tests/plugins/Dash/tst_ListViewWithPageHeaderQML.qml+4−2

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/Dash/verticaljournaltest.cpp+1−4

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/IntegratedLightDM/CMakeLists.txt → tests/plugins/LightDM/IntegratedLightDM/CMakeLists.txtrenamed+36−13

This diff is too big to show here.

tests/plugins/IntegratedLightDM/dbus.cpp → tests/plugins/LightDM/IntegratedLightDM/dbus.cpprenamed

The content is the same.

tests/plugins/IntegratedLightDM/greeter.qml → tests/plugins/LightDM/IntegratedLightDM/greeter.qmlrenamed+1−1

This diff is too big to show here.

tests/plugins/IntegratedLightDM/integrated.cpp → tests/plugins/LightDM/IntegratedLightDM/integrated.cpprenamed

The content is the same.

tests/plugins/IntegratedLightDM/pam.cpp → tests/plugins/LightDM/IntegratedLightDM/pam.cpprenamed

The content is the same.

tests/plugins/LightDM/IntegratedLightDM/sessionsmodel.cppnew file+96

This diff is too big to show here.

tests/plugins/IntegratedLightDM/usersmodel.cpp → tests/plugins/LightDM/IntegratedLightDM/usersmodel.cpprenamed

The content is the same.

tests/plugins/Ubuntu/Gestures/CMakeLists.txt+6−5

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/DownwardsLauncher.qmldeleted−72

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/GestureTest.cpp+2−2

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/LeftwardsLauncher.qmldeleted−76

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/RightwardsLauncher.qmldeleted−76

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/UpwardsLauncher.qmldeleted−76

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_DirectionalDragArea.cppdeleted−1250

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_DirectionalDragArea.qmldeleted−76

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_FloatingFlickable.cpp+25−18

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_FloatingFlickable.qml+1

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_TouchGate.cpp+1−1

This diff is too big to show here.

tests/plugins/Unity/Indicators/MenuContentActivatorTest.cpp+1

This diff is too big to show here.

tests/plugins/Unity/Launcher/CMakeLists.txt+1−1

This diff is too big to show here.

tests/plugins/Unity/Launcher/launchermodeltest.cpp+43−2

This diff is too big to show here.

tests/plugins/Unity/Session/CMakeLists.txt+29−1

This diff is too big to show here.

tests/plugins/Unity/Session/LightDMServer.cppnew file+29

This diff is too big to show here.

tests/plugins/Unity/Session/LightDMServer.hnew file+38

This diff is too big to show here.

tests/plugins/Unity/Session/LogindServer.cppnew file+33

This diff is too big to show here.

tests/plugins/Unity/Session/LogindServer.hnew file+43

This diff is too big to show here.

tests/plugins/Unity/Session/interfaces.xmlnew file+17

This diff is too big to show here.

tests/plugins/Unity/Session/server.cppnew file+50

This diff is too big to show here.

tests/plugins/Unity/Session/sessionbackendtest.cpp+15−16

This diff is too big to show here.

tests/plugins/Utils/WindowInputMonitorTest.cpp+52−11

This diff is too big to show here.

tests/qmltests/CMakeLists.txt+3−1

This diff is too big to show here.

tests/qmltests/Components/CMakeLists.txt+10−3

This diff is too big to show here.

tests/qmltests/Components/tst_DragHandle.cpp+28−24

This diff is too big to show here.

tests/qmltests/Components/tst_DragHandle.qml+22−4

This diff is too big to show here.

tests/qmltests/Components/tst_DragHandle/BottomEdgeShowable.qmlnew file+108

This diff is too big to show here.

tests/qmltests/Components/tst_DragHandle/HorizontalShowable.qml → tests/qmltests/Components/tst_DragHandle/LeftEdgeShowable.qmlrenamed

The content is the same.

tests/qmltests/Components/tst_DragHandle/RightEdgeShowable.qmlnew file+108

This diff is too big to show here.

tests/qmltests/Components/tst_DragHandle/VerticalShowable.qml → tests/qmltests/Components/tst_DragHandle/TopEdgeShowable.qmlrenamed+7−7

This diff is too big to show here.

tests/qmltests/Components/tst_EdgeDragEvaluator.cpp+1−1

This diff is too big to show here.

tests/qmltests/Components/tst_LazyImage/portrait.png

Binary file not shown.

tests/qmltests/Components/tst_LazyImage/square.png

Binary file not shown.

tests/qmltests/Components/tst_LazyImage/wide.png

Binary file not shown.

tests/qmltests/Components/tst_Lockscreen.qml+20−1

This diff is too big to show here.

tests/qmltests/Components/tst_MediaServices.qmlnew file+230

This diff is too big to show here.

tests/qmltests/Components/tst_PhysicalKeysMapper.qml+12−21

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewSharing.qml → tests/qmltests/Components/tst_SharingPicker.qmlrenamed+8−8

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_PreviewExpandable.qml+23−4

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewInlineVideo.qmlnew file+114

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewMediaToolbar.qml+3−3

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewRatingDisplayCreationRanges.qml+51−15

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewRatingEdit.qml+8−1

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewRatingInput.qml+18−6

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewWidgetFactory.qml+18−17

This diff is too big to show here.

tests/qmltests/Dash/artwork/avatar@12.png

Binary file not shown.

tests/qmltests/Dash/artwork/background.png

Binary file not shown.

tests/qmltests/Dash/artwork/checkers.png

Binary file not shown.

tests/qmltests/Dash/artwork/emblem.png

Binary file not shown.

tests/qmltests/Dash/artwork/music-player-design.png

Binary file not shown.

tests/qmltests/Dash/tst_Card.qml+23−11

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/Dash/tst_Dash.qml+150−125

This diff is too big to show here.

tests/qmltests/Dash/tst_DashContent.qml+70−5

This diff is too big to show here.

tests/qmltests/Dash/tst_DashPageHeader.qml−24

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/Dash/tst_GenericScopeView.qml+37−2

This diff is too big to show here.

tests/qmltests/Dash/tst_PreviewView.qml+3−3

This diff is too big to show here.

tests/qmltests/Greeter/TestView.qml+10−3

This diff is too big to show here.

tests/qmltests/Greeter/tst_Greeter.qml+203−24

This diff is too big to show here.

tests/qmltests/Greeter/tst_Infographics.qml+1−1

This diff is too big to show here.

tests/qmltests/Greeter/tst_NarrowView.qml+24−3

This diff is too big to show here.

tests/qmltests/Greeter/tst_WideView.qml+108−35

This diff is too big to show here.

tests/qmltests/Launcher/tst_Launcher.qml+76−13

This diff is too big to show here.

tests/qmltests/Notifications/tst_Notifications.qml+89

This diff is too big to show here.

tests/qmltests/Panel/Indicators/tst_MessageMenuItemFactory.qml+1

This diff is too big to show here.

tests/qmltests/Panel/tst_IndicatorsMenu.qml+29−1

This diff is too big to show here.

tests/qmltests/Stages/ApplicationCheckBox.qml+1−1

This diff is too big to show here.

tests/qmltests/Stages/SurfaceManagerControls.qml+1−1

This diff is too big to show here.

tests/qmltests/Stages/tst_ApplicationWindow.qml+39−11

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/Stages/tst_PhoneStage.qml+1−1

This diff is too big to show here.

tests/qmltests/Stages/tst_TabletStage.qml+222−31

This diff is too big to show here.

tests/qmltests/Stages/tst_WindowResizeArea.qml+52−39

This diff is too big to show here.

tests/qmltests/Tutorial/tst_Tutorial.qml+177−211

This diff is too big to show here.

tests/qmltests/UnityLogo.png

Binary file not shown.

tests/qmltests/Wizard/tst_Wizard.qml+7−15

This diff is too big to show here.

tests/qmltests/tst_OrientedShell.qml+71−49

This diff is too big to show here.

tests/qmltests/tst_Shell.qml+115−36

This diff is too big to show here.

tests/qmltests/tst_ShellWithPin.qml+9−7

This diff is too big to show here.

tests/qmltests/utils/Unity/Test/tst_UnityTest.qml+31

This diff is too big to show here.

tests/uqmlscene/main.cpp−1

This diff is too big to show here.

tests/utils/modules/Unity/Test/CMakeLists.txt+9−3

This diff is too big to show here.

tests/utils/modules/Unity/Test/Test.qmltypesdeleted−60

This diff is too big to show here.

tests/utils/modules/Unity/Test/UnityTestCase.qml+31−12

This diff is too big to show here.

tests/utils/modules/Unity/Test/testutil.cpp+19−2

This diff is too big to show here.

tests/utils/modules/Unity/Test/testutil.h+1

This diff is too big to show here.

tools/CMakeLists.txt+1−1

This diff is too big to show here.

tools/scopetool.cpp+1−1

This diff is too big to show here.