on xenial help sign in
Merge
commitf105062824b10e181e5bba4ff34f45214b72fc4b authorAlbert Astals Cid <albert.astals@canonical.com> dateMon 28 Nov 2016, 10:57 (10 years ago) parentc0f650b9212688
946 files changed+59470−29785
.crossbuilder/post_deploy+1 CMakeLists.txt+4−2 CODING+20−59 build.sh+6−37 data/51-unity8-greeter.conf+2 data/CMakeLists.txt+11 data/com.canonical.Unity8.gschema.xml+5 data/unity8-dash.conf+1−1 data/unity8-dash.png data/unity8-filewatcher.conf+5 data/unity8-greeter-init.conf+12 data/unity8-greeter-wrapper+106 data/unity8-greeter.desktop.in+7 data/unity8-greeter.pkla+44 data/unity8.conf+25−2 debian/changelog+516 debian/control+52−28 debian/rules+7−2 debian/unity8-greeter.install+5 debian/unity8-private.install+2−1 debian/unity8.install+2−1 debian/usr.bin.unity8-dash+21 include/paths.h.in+34−25 plugins/AccountsService/AccountsService.cpp+41−3 plugins/AccountsService/AccountsService.h+15−4 plugins/AccountsService/AccountsService.qmltypes−41 plugins/AccountsService/com.canonical.unity.AccountsService.xml+4 plugins/CMakeLists.txt+2−1 plugins/Cursor/CMakeLists.txt+2−2 plugins/Cursor/Cursor.qml+29−11 plugins/Cursor/CursorImageInfo.cpp+23−13 plugins/Cursor/CursorImageInfo.h+10−4 plugins/Cursor/CursorImageProvider.cpp+34−22 plugins/Cursor/CursorImageProvider.h+9−6 plugins/Cursor/MousePointer.cpp+97−15 plugins/Cursor/MousePointer.h+27−1 plugins/Dash/CMakeLists.txt+1 plugins/Dash/CardAttributes.qml+1−1 plugins/Dash/CardCreator.js+165−131 plugins/Dash/CardCreatorCache.qml+3−3 plugins/Dash/Dash.qmltypes−100 plugins/Dash/DashAudioPlayer.qml+45−21 plugins/Dash/abstractdashview.cpp+13 plugins/Dash/abstractdashview.h+2−1 plugins/Dash/graphics/music_progress_bg.png plugins/Dash/horizontaljournal.cpp+1−1 plugins/Dash/listviewwithpageheader.cpp+23−21 plugins/Dash/organicgrid.cpp+3−1 plugins/Dash/verticaljournal.cpp+12−2 plugins/Dash/verticaljournal.h+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/ImageCache/CMakeLists.txt+8 plugins/ImageCache/ImageCache.cpp+135 plugins/ImageCache/ImageCache.h+53 plugins/ImageCache/plugin.cpp+39 plugins/ImageCache/plugin.h+31 plugins/ImageCache/qmldir+2 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+33 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−5 plugins/IntegratedLightDM/liblightdm/Greeter.h → plugins/LightDM/IntegratedLightDM/liblightdm/Greeter.h−2 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−3 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+136 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/Lights.qmltypes−45 plugins/Powerd/Powerd.qmltypes−39 plugins/SessionBroadcast/SessionBroadcast.cpp+35−9 plugins/SessionBroadcast/SessionBroadcast.h+10−3 plugins/SessionBroadcast/SessionBroadcast.qmltypes−19 plugins/UInput/UInput.qmltypes−44 plugins/Ubuntu/DownloadDaemonListener/CMakeLists.txt+3−1 plugins/Ubuntu/DownloadDaemonListener/DownloadDaemonListener.qmltypes−60 plugins/Ubuntu/DownloadDaemonListener/DownloadTracker.cpp+2−1 plugins/Ubuntu/DownloadDaemonListener/DownloadTracker.h+2−1 plugins/Ubuntu/DownloadDaemonListener/interface/downloadtrackeradaptor.cpp+2−2 plugins/Ubuntu/DownloadDaemonListener/interface/downloadtrackeradaptor.h+71−4 plugins/Ubuntu/DownloadDaemonListener/interface/metatypes.h+3−6 plugins/Ubuntu/Gestures/AxisVelocityCalculator.cpp+1−1 plugins/Ubuntu/Gestures/AxisVelocityCalculator.h+4−4 plugins/Ubuntu/Gestures/CMakeLists.txt+5−1 plugins/Ubuntu/Gestures/Gestures.qmltypes−77 plugins/Ubuntu/Gestures/TouchDispatcher.cpp+1−2 plugins/Ubuntu/Gestures/TouchGate.cpp+10−5 plugins/Ubuntu/Gestures/TouchGate.h+3−2 plugins/Ubuntu/Gestures/TouchGestureArea.cpp+16−16 plugins/Ubuntu/Gestures/TouchGestureArea.h+16−15 plugins/Ubuntu/Payments/Payments.qmltypes−43 plugins/Ubuntu/SystemImage/CMakeLists.txt+5 plugins/Ubuntu/SystemImage/SystemImage.cpp+127−5 plugins/Ubuntu/SystemImage/SystemImage.h+52−2 plugins/Ubuntu/SystemImage/SystemImage.qmltypes−19 plugins/Ubuntu/SystemImage/plugin.cpp+3−9 plugins/Ubuntu/SystemImage/plugin.h+1−1 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/actionrootstate.cpp+1−1 plugins/Unity/Indicators/indicatorsmanager.cpp+4−6 plugins/Unity/Indicators/modelprinter.cpp+19−4 plugins/Unity/Indicators/modelprinter.h+2−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/Launcher/CMakeLists.txt+11−4 plugins/Unity/Launcher/Launcher.qmltypes−182 plugins/Unity/Launcher/desktopfilehandler.cpp−155 plugins/Unity/Launcher/desktopfilehandler.h−56 plugins/Unity/Launcher/launcheritem.cpp+14−9 plugins/Unity/Launcher/launcheritem.h+3 plugins/Unity/Launcher/launchermodel.cpp+111−52 plugins/Unity/Launcher/launchermodel.h+18−9 plugins/Unity/Platform/Platform.qmltypes−20 plugins/Unity/Session/CMakeLists.txt+2 plugins/Unity/Session/Session.qmltypes−85 plugins/Unity/Session/dbusunitysessionservice.cpp+50−18 plugins/Unity/Session/dbusunitysessionservice.h+7 plugins/Utils/CMakeLists.txt+2 plugins/Utils/URLDispatcher.cpp+77 plugins/Utils/URLDispatcher.h+47 plugins/Utils/Utils.qmltypes−175 plugins/Utils/constants.cpp+6−1 plugins/Utils/constants.h+5−5 plugins/Utils/deviceconfigparser.cpp+1−1 plugins/Utils/globalfunctions.cpp+1−1 plugins/Utils/plugin.cpp+2 plugins/Utils/timezoneFormatter.cpp+1−1 plugins/Utils/windowstatestorage.cpp+10−7 plugins/Utils/windowstatestorage.h+9−4 plugins/WindowManager/CMakeLists.txt+1 plugins/WindowManager/TopLevelSurfaceList.cpp−5 plugins/Wizard/CMakeLists.txt+6−3 plugins/Wizard/PageList.cpp+16−1 plugins/Wizard/System.cpp+10−1 plugins/Wizard/System.h+5−1 plugins/Wizard/Wizard.qmltypes−33 plugins/Wizard/keyboardLayoutsModel.cpp+163 plugins/Wizard/keyboardLayoutsModel.h+66 plugins/Wizard/plugin.cpp+2 plugins/Wizard/qmldir−1 plugins/Wizard/timezonemodel.cpp+5−5 po/aa.po+363−194 po/am.po+445−213 po/ar.po+415−210 po/ast.po+474−233 po/az.po+382−197 po/be.po+413−208 po/bg.po+351−192 po/bn.po+407−202 po/br.po+426−214 po/bs.po+410−205 po/ca.po+528−266 po/ca@valencia.po+407−209 po/ce.po+351−192 po/ckb.po+351−192 po/co.po+454−214 po/cs.po+407−206 po/cy.po+413−208 po/da.po+408−207 po/de.po+470−234 po/el.po+414−209 po/en_AU.po+439−207 po/en_GB.po+444−210 po/eo.po+353−194 po/es.po+449−213 po/eu.po+412−207 po/fa.po+447−212 po/fi.po+445−211 po/fo.po+442−265 po/fr.po+455−218 po/ga.po+410−205 po/gd.po+457−218 po/gl.po+445−209 po/gv.po+357−198 po/he.po+373−196 po/hi.po+351−192 po/hr.po+446−212 po/hu.po+446−211 po/hy.po+389−201 po/ia.po+446−210 po/id.po+401−203 po/is.po+404−206 po/it.po+451−215 po/ja.po+398−200 po/km.po+389−201 po/kn.po+351−192 po/ko.po+406−201 po/ku.po+386−198 po/ky.po+351−192 po/lo.po+351−192 po/lt.po+351−192 po/lv.po+410−205 po/ml.po+351−192 po/mr.po+351−192 po/ms.po+447−210 po/my.po+352−193 po/nb.po+447−213 po/ne.po+352−193 po/nl.po+515−270 po/nn.po+351−192 po/oc.po+480−261 po/or.po+351−192 po/pa.po+404−203 po/pl.po+451−215 po/pt.po+450−214 po/pt_BR.po+411−206 po/ro.po+410−209 po/ru.po+440−217 po/shn.po+351−192 po/si.po+351−192 po/sk.po+450−216 po/sl.po+441−209 po/sq.po+372−195 po/sr.po+447−212 po/sv.po+449−214 po/sw.po+406−205 po/ta.po+351−192 po/te.po+351−192 po/th.po+351−192 po/tr.po+497−273 po/ug.po+427−222 po/uk.po+457−215 po/unity8.pot+350−191 po/ur.po+351−192 po/uz.po+351−192 po/vi.po+351−192 po/wo.po+409−204 po/xh.po+351−192 po/zh_CN.po+445−213 po/zh_HK.po+351−192 po/zh_TW.po+418−213 qml/CMakeLists.txt+1−1 qml/Components/BlurLayer.qml+10−40 qml/Components/Carousel.qml+1−2 qml/Components/Dialogs.qml+13−8 qml/Components/EdgeBarrier.qml+2 qml/Components/FadingLabel.qml+42 qml/Components/Flickable.qml+24 qml/Components/FloatingFlickable.qml+4 qml/Components/GridView.qml+24 qml/Components/InputMethod.qml+8−44 qml/Components/KeyboardShortcutsOverlay.qml+334 qml/Components/KeymapSwitcher.qml+27−1 qml/Components/LazyImage.qml+3−1 qml/Components/ListItems/graphics/ListItemDividerHorizontal@18.png qml/Components/ListView.qml+24 qml/Components/Lockscreen.qml+1−20 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/NotificationAudio.qml+20−3 qml/Components/PanelState/PanelState.qml+1−1 qml/Components/PhysicalKeysMapper.qml+2−22 qml/Components/ResponsiveGridView.qml+1 qml/Dash/Previews/PreviewSharing.qml → qml/Components/SharingPicker.qml+2−14 qml/Components/VolumeControl.qml+3−3 qml/Components/Wallpaper.qml+44 qml/Components/WallpaperResolver.qml+24−38 qml/Components/WindowControlButtons.qml+25−27 qml/Components/ZoomableImage.qml+1−1 qml/Components/flickableUtils.js+28 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 qml/Dash/CardGrid.qml+4−4 qml/Dash/CardTool.qml+75−18 qml/Dash/Dash.qml+1−1 qml/Dash/DashApplication.qml+16−5 qml/Dash/DashBackground.qml+2−11 qml/Dash/DashContent.qml−2 qml/Dash/DashNavigation.qml+1 qml/Dash/DashNavigationList.qml+48−45 qml/Dash/DashPageHeader.qml+67−71 qml/Components/ListItems/Header.qml → qml/Dash/DashSectionHeader.qml+21−21 qml/Dash/Filters/FilterExpandableWidget.qml+1 qml/Dash/Filters/FilterOptionSelector.qml+2 qml/Dash/FiltersPopover.qml+1 qml/Dash/GenericScopeView.qml+14−73 qml/Dash/PageHeaderExtraPanel.qml+2 qml/Dash/Previews/Preview.qml+36−7 qml/Dash/Previews/PreviewActionCombo.qml+13−2 qml/Dash/Previews/PreviewActions.qml+3−2 qml/Dash/Previews/PreviewAudioPlayback.qml+10−9 qml/Dash/Previews/PreviewComment.qml+3 qml/Dash/Previews/PreviewCommentInput.qml+15 qml/Dash/Previews/PreviewHeader.qml+5−3 qml/Dash/Previews/PreviewIconActions.qml+1 qml/Dash/Previews/PreviewImageGallery.qml+3 qml/Dash/Previews/PreviewInlineVideo.qml+112 qml/Dash/Previews/PreviewMediaToolbar.qml+25−5 qml/Dash/Previews/PreviewProgress.qml+6−3 qml/Dash/Previews/PreviewRatingEdit.qml+4−1 qml/Dash/Previews/PreviewRatingInput.qml+28−1 qml/Dash/Previews/PreviewRatingSingleDisplay.qml+12−9 qml/Components/ListItems/ThinDivider.qml → qml/Dash/Previews/PreviewSingleton/PreviewSingleton.qml+5−10 qml/Dash/Previews/PreviewSingleton/qmldir+1 qml/Dash/Previews/PreviewTable.qml+8−2 qml/Dash/Previews/PreviewTextSummary.qml+7−2 qml/Dash/Previews/PreviewVideoPlayback.qml+1−1 qml/Dash/Previews/PreviewWidget.qml+5−2 qml/Dash/Previews/PreviewWidgetFactory.qml+13−3 qml/Dash/Previews/PreviewZoomableImage.qml+2−1 qml/Dash/PullToRefreshScopeStyle.qml+1 qml/Dash/ScopeListView.qml+4−2 qml/Dash/ScopesList.qml+3 qml/Dash/ScopesListCategory.qml+3−2 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/overview_hint@30.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/Greeter/Circle.qml+57 qml/Greeter/Clock.qml−2 qml/Greeter/CoverPage.qml+29−7 qml/Components/DelayedLockscreen.qml → qml/Greeter/DelayedLockscreen.qml+6−14 qml/Greeter/FullLightDMImpl.qml+30 qml/Greeter/Greeter.qml+242−84 qml/Greeter/GreeterPrompt.qml+228 qml/Greeter/Infographics.qml+44−23 qml/Greeter/IntegratedLightDMImpl.qml+3−2 qml/Greeter/LightDM.qml → qml/Greeter/LightDMService.qml+16−3 qml/Greeter/LoginAreaContainer.qml+38 qml/Greeter/LoginList.qml+157−87 qml/Greeter/NarrowView.qml+155−52 qml/Greeter/SessionIcon.qml+47 qml/Greeter/SessionsList.qml+187 qml/Greeter/WideView.qml+112−34 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/graphics/session_icons/gnome_badge.png qml/Greeter/graphics/session_icons/kde_badge.png qml/Greeter/graphics/session_icons/recovery_console_badge.png qml/Greeter/graphics/session_icons/ubuntu_badge.png qml/Greeter/graphics/session_icons/unknown_badge.png qml/Greeter/qmldir+1 qml/Launcher/Launcher.qml+2 qml/Launcher/LauncherDelegate.qml+4−8 qml/Launcher/LauncherPanel.qml+14−7 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+30−30 qml/Notifications/NotificationMenuItemFactory.qml−3 qml/Notifications/Notifications.qml+14−24 qml/Notifications/ShapedIcon.qml+1 qml/OrientedShell.qml+10−3 qml/Panel/IndicatorItemRow.qml+13−2 qml/Panel/IndicatorPage.qml+1 qml/Panel/Indicators/MenuItemFactory.qml+161−88 qml/Panel/Indicators/client/IndicatorRepresentation.qml+27−23 qml/Panel/Indicators/client/IndicatorsClient.qml+8−2 qml/Panel/Indicators/client/IndicatorsList.qml+19−17 qml/Panel/Indicators/client/IndicatorsTree.qml+6−8 qml/Panel/IndicatorsMenu.qml+3−1 qml/Panel/Panel.qml+16−17 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/RotationStates.qml−6 qml/Rotation/UpdateShellTransformations.qml+4−4 qml/Shell.qml+231−184 qml/Stages/AbstractStage.qml → qml/Stage/AbstractStage.qml qml/Stages/ApplicationWindow.qml → qml/Stage/ApplicationWindow.qml+45−46 qml/Stage/DecoratedWindow.qml+266 qml/Stages/DesktopSpread.qml → qml/Stage/DesktopSpread.qml qml/Stages/DesktopSpreadDelegate.qml → qml/Stage/DesktopSpreadDelegate.qml qml/Stage/FakeMaximizeDelegate.qml+233 qml/Stages/MainViewStyle.qml → qml/Stage/MainViewStyle.qml qml/Stage/MoveHandler.qml+180 qml/Stages/OrientationChangeAnimation.qml → qml/Stage/OrientationChangeAnimation.qml+30−6 qml/Stages/PhoneStage.qml → qml/Stage/PhoneStage.qml qml/Stages/PromptSurfaceAnimations.qml → qml/Stage/PromptSurfaceAnimations.qml+2−3 qml/Components/UbuntuShapeForItem.qml → qml/Stage/ResizeGrip.qml+21−22 qml/Stages/ShimStage.qml → qml/Stage/ShimStage.qml qml/Stages/SideStage.qml → qml/Stage/SideStage.qml qml/Stages/Splash.qml → qml/Stage/Splash.qml+3−6 qml/Stage/Spread/BezierCurve.qml+45 qml/Stage/Spread/KeySpline.js+66 qml/Stage/Spread/MathUtils.js+95 qml/Stage/Spread/OpacityMask.qml+82 qml/Stage/Spread/Spread.qml+162 qml/Stage/Spread/SpreadDelegateInputArea.qml+189 qml/Stage/Spread/SpreadMaths.qml+78 qml/Stage/Spread/StagedRightEdgeMaths.qml+174 qml/Stage/Spread/WindowedRightEdgeMaths.qml+81 qml/Stage/Spread/cubic-bezier.js+39 qml/Stages/SpreadDelegate.qml → qml/Stage/SpreadDelegate.qml qml/Stages/SpreadMaths.qml → qml/Stage/SpreadMaths.qml qml/Stage/Stage.qml+1945 qml/Stage/StageMaths.qml+79 qml/Stages/StagedFullscreenPolicy.qml → qml/Stage/StagedFullscreenPolicy.qml qml/Stages/SurfaceContainer.qml → qml/Stage/SurfaceContainer.qml+5−52 qml/Stages/TabletSideStageTouchGesture.qml → qml/Stage/TabletSideStageTouchGesture.qml+3 qml/Stages/TabletStage.qml → qml/Stage/TabletStage.qml qml/Stages/TopLevelSurfaceRepeater.qml → qml/Stage/TopLevelSurfaceRepeater.qml+16−1 qml/Stages/TransformedSpreadDelegate.qml → qml/Stage/TransformedSpreadDelegate.qml qml/Stages/TransformedTabletSpreadDelegate.qml → qml/Stage/TransformedTabletSpreadDelegate.qml qml/Stage/WindowControlsOverlay.qml+257 qml/Stages/WindowDecoration.qml → qml/Stage/WindowDecoration.qml+24−33 qml/Stage/WindowInfoItem.qml+53 qml/Stages/WindowResizeArea.qml → qml/Stage/WindowResizeArea.qml+51−61 qml/Stages/WindowedFullscreenPolicy.qml → qml/Stage/WindowedFullscreenPolicy.qml qml/Stage/graphics/PageHeaderBaseDividerBottom@18.png qml/Stage/graphics/PageHeaderBaseDividerLight@18.png qml/Stages/graphics/PageHeaderBaseDividerLight@18.sci → qml/Stage/graphics/PageHeaderBaseDividerLight@18.sci qml/Stage/graphics/arrows-centre.png qml/Stage/graphics/arrows.png qml/Stages/graphics/sidestage_drag.svg → qml/Stage/graphics/sidestage_drag.svg qml/Stage/graphics/sidestage_handle@20.png qml/Stages/graphics/sidestage_handle@20.sci → qml/Stage/graphics/sidestage_handle@20.sci qml/Stages/graphics/sidestage_open.svg → qml/Stage/graphics/sidestage_open.svg qml/Stages/graphics/window-close.svg → qml/Stage/graphics/window-close.svg qml/Stages/DecoratedWindow.qml−109 qml/Stages/DesktopStage.qml−684 qml/Stages/graphics/PageHeaderBaseDividerBottom@18.png qml/Stages/graphics/PageHeaderBaseDividerLight@18.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+3−3 qml/Tutorial/TutorialTop.qml+2−3 qml/Tutorial/graphics/background1.png qml/Tutorial/graphics/background2.png qml/Wizard/Page.qml+1−1 qml/Wizard/Pages/10-welcome.qml+20−5 qml/Wizard/Pages/20-keyboard.qml+161 qml/Wizard/Pages/30-wifi.qml+11−5 qml/Wizard/Pages/50-timezone.qml+1 qml/Wizard/Pages/70-passwd-type.qml+1 qml/Wizard/Pages/77-system-update.qml+156 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-confirm.qml+2−2 qml/Wizard/Pages/passcode-desktop.qml+28−10 qml/Wizard/Pages/passcode-set.qml+2−2 qml/Wizard/Pages/password-set.qml+1 qml/Wizard/PasswordMeter.qml+3−1 qml/Wizard/Wizard.qml+6−2 qml/Wizard/WizardItemSelector.qml+129 qml/graphics/dropshadow2gu@30.png qml/Stages/graphics/dropshadow2gu@30.sci → qml/graphics/dropshadow2gu@30.sci qml/graphics/dropshadow_left@20.png qml/graphics/dropshadow_right@20.png qml/graphics/phone_background.jpg qml/graphics/tablet_background.jpg run.sh−70 run_on_device.sh−164 src/CMakeLists.txt−4 src/Dash/main.cpp+32−22 src/Panel/Indicators/client/indicatorsclient.cpp+10−8 src/Panel/Indicators/client/indicatorsclient.h−2 src/SecondaryWindow.cpp+1−1 src/ShellApplication.cpp+11−1 src/UnixSignalHandler.cpp+3−5 src/main.cpp+12−1 tests/CMakeLists.txt+14−13 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/dash@18.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/imports/check_imports.py+58 tests/mocks/AccountsService/AccountsService.cpp+43−3 tests/mocks/AccountsService/AccountsService.h+20−1 tests/mocks/AccountsService/AccountsService.qmltypes−41 tests/mocks/AccountsService/CMakeLists.txt+14 tests/mocks/Biometryd/CMakeLists.txt+14 tests/mocks/Biometryd/MockBiometryd.cpp+43 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 tests/mocks/Biometryd/MockObserver.cpp+22 tests/mocks/Biometryd/MockObserver.h+37 tests/mocks/Biometryd/MockOperation.cpp+56 tests/mocks/Biometryd/MockOperation.h+48 tests/mocks/Biometryd/plugin.cpp+41 tests/mocks/Biometryd/plugin.h+31 tests/mocks/Biometryd/qmldir+3 tests/mocks/CMakeLists.txt+3−1 tests/mocks/Cursor/CMakeLists.txt+1−1 tests/mocks/Cursor/Cursor.qml+12−1 tests/mocks/GSettings.1.0/GSettings.qmltypes−42 tests/mocks/GSettings.1.0/fake_gsettings.cpp+34−1 tests/mocks/GSettings.1.0/fake_gsettings.h+9 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+66 tests/mocks/LightDM/IntegratedLightDM/MockSessionsModel.h+44 tests/mocks/IntegratedLightDM/MockUsersModel.cpp → tests/mocks/LightDM/IntegratedLightDM/MockUsersModel.cpp+5 tests/mocks/IntegratedLightDM/MockUsersModel.h → tests/mocks/LightDM/IntegratedLightDM/MockUsersModel.h+2 tests/mocks/IntegratedLightDM/QLightDM/Greeter → tests/mocks/LightDM/IntegratedLightDM/QLightDM/Greeter tests/mocks/LightDM/IntegratedLightDM/QLightDM/SessionsModel+17 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+7−5 tests/mocks/IntegratedLightDM/liblightdm/Greeter.h → tests/mocks/LightDM/IntegratedLightDM/liblightdm/Greeter.h+1−2 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 tests/mocks/LightDM/IntegratedLightDM/liblightdm/SessionsModel.cpp+121 tests/mocks/LightDM/IntegratedLightDM/liblightdm/SessionsModel.h+72 tests/mocks/LightDM/IntegratedLightDM/liblightdm/SessionsModelPrivate.cpp+83 tests/mocks/LightDM/IntegratedLightDM/liblightdm/SessionsModelPrivate.h+63 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+43−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−103 tests/mocks/QtMultimedia/mediaplayer.cpp+319 tests/mocks/QtMultimedia/mediaplayer.h+224 tests/mocks/QtMultimedia/plugin.cpp+7−3 tests/mocks/QtMultimedia/videooutput.cpp+127 tests/mocks/QtMultimedia/videooutput.h+52 tests/mocks/SessionBroadcast/CMakeLists.txt+8 tests/mocks/SessionBroadcast/SessionBroadcast.cpp+34 tests/mocks/SessionBroadcast/SessionBroadcast.h+39 tests/mocks/SessionBroadcast/plugin.cpp+31 tests/mocks/SessionBroadcast/plugin.h+32 tests/mocks/SessionBroadcast/qmldir+2 tests/mocks/Ubuntu/DownloadDaemonListener/DownloadDaemonListener.qmltypes−60 tests/mocks/Ubuntu/DownloadDaemonListener/MockDownloadTracker.cpp+3−1 tests/mocks/Ubuntu/DownloadDaemonListener/MockDownloadTracker.h+2−1 tests/mocks/Ubuntu/Payments/Payments.qmltypes−44 tests/mocks/Ubuntu/SystemImage/MockSystemImage.cpp+24−1 tests/mocks/Ubuntu/SystemImage/MockSystemImage.h+22−2 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/Telephony/MockTelepathyHelper.cpp+27 tests/mocks/Ubuntu/Telephony/MockTelepathyHelper.h+22 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+31−37 tests/mocks/Unity/Application/ApplicationInfo.h+5−8 tests/mocks/Unity/Application/ApplicationManager.cpp+20−11 tests/mocks/Unity/Application/CMakeLists.txt−1 tests/mocks/Unity/Application/MirSurface.cpp+27 tests/mocks/Unity/Application/MirSurface.h+12 tests/mocks/Unity/Application/MirSurfaceItem.cpp+50−10 tests/mocks/Unity/Application/MirSurfaceItem.h+2 tests/mocks/Unity/Application/MirSurfaceListModel.cpp+13−4 tests/mocks/Unity/Application/MirSurfaceListModel.h+1 tests/mocks/Unity/Application/UbuntuKeyboardInfo.cpp−58 tests/mocks/Unity/Application/UbuntuKeyboardInfo.h−57 tests/mocks/Unity/Application/VirtualKeyboard.cpp+22−1 tests/mocks/Unity/Application/VirtualKeyboard.h+4−1 tests/mocks/Unity/Application/plugin.cpp−8 tests/mocks/Unity/Application/resources/MirSurfaceItem.qml+2−5 tests/mocks/Unity/Application/resources/VirtualKeyboard.qml+1−6 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/CMakeLists.txt+1 tests/mocks/Unity/Indicators/Indicators.qmltypes−232 tests/mocks/Unity/Indicators/IndicatorsModel.qml+71−6 tests/mocks/Unity/Indicators/fakeindicatorsmodeldata.js+1311 tests/mocks/Unity/Indicators/fakeplugin.cpp+2 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/MockNotification.cpp+15 tests/mocks/Unity/Notifications/MockNotification.h+5 tests/mocks/Unity/Notifications/MockNotificationModel.cpp+4−6 tests/mocks/Unity/Notifications/MockNotificationModel.h+2−4 tests/mocks/Unity/Notifications/Notifications.qmltypes−149 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+16−8 tests/mocks/Unity/fake_previewwidgetmodel.cpp+18−10 tests/mocks/Unity/fake_scope.cpp+11−2 tests/mocks/Unity/fake_scope.h+1 tests/mocks/Unity/fake_scopes.cpp+1 tests/mocks/Unity/fake_scopesoverview.cpp+1−1 tests/mocks/Utils/CMakeLists.txt+1 tests/mocks/Utils/URLDispatcher.cpp+38 tests/mocks/Utils/URLDispatcher.h+47 tests/mocks/Utils/Utils.qmltypes−178 tests/mocks/Utils/constants.cpp+2−1 tests/mocks/Utils/constants.h+5−5 tests/mocks/Utils/plugin.cpp+2 tests/mocks/Utils/windowstatestorage.cpp+4−4 tests/mocks/Utils/windowstatestorage.h+9−4 tests/mocks/Wizard/CMakeLists.txt+6−3 tests/mocks/Wizard/MockSystem.cpp+8 tests/mocks/Wizard/MockSystem.h+4 tests/mocks/Wizard/Wizard.qmltypes−37 tests/mocks/Wizard/mockplugin.cpp+2 tests/mocks/libusermetrics/UserMetrics.cpp+33−13 tests/mocks/libusermetrics/UserMetrics.h+2 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−1 tests/plugins/Cursor/tst_Cursor.qml+8−1 tests/plugins/Dash/cardcreator/1.res+27−40 tests/plugins/Dash/cardcreator/1.res.cardcreator+12−37 tests/plugins/Dash/cardcreator/1.tst+1−1 tests/plugins/Dash/cardcreator/10.res+8−9 tests/plugins/Dash/cardcreator/10.res.cardcreator+4−5 tests/plugins/Dash/cardcreator/11.res+31−44 tests/plugins/Dash/cardcreator/11.res.cardcreator+13−38 tests/plugins/Dash/cardcreator/12.res+26−39 tests/plugins/Dash/cardcreator/12.res.cardcreator+11−36 tests/plugins/Dash/cardcreator/2.res+8−9 tests/plugins/Dash/cardcreator/2.res.cardcreator+4−5 tests/plugins/Dash/cardcreator/3.res+18−32 tests/plugins/Dash/cardcreator/3.res.cardcreator+13−29 tests/plugins/Dash/cardcreator/4.res+15−14 tests/plugins/Dash/cardcreator/4.res.cardcreator+3−12 tests/plugins/Dash/cardcreator/5.res+19−34 tests/plugins/Dash/cardcreator/5.res.cardcreator+13−30 tests/plugins/Dash/cardcreator/6.res+14−13 tests/plugins/Dash/cardcreator/6.res.cardcreator+4−13 tests/plugins/Dash/cardcreator/6.tst+1−1 tests/plugins/Dash/cardcreator/7.res+8−9 tests/plugins/Dash/cardcreator/7.res.cardcreator+4−5 tests/plugins/Dash/cardcreator/8.res+16−15 tests/plugins/Dash/cardcreator/8.res.cardcreator+4−13 tests/plugins/Dash/cardcreator/8.tst+1−1 tests/plugins/Dash/cardcreator/9.res+17−16 tests/plugins/Dash/cardcreator/9.res.cardcreator+4−13 tests/plugins/Dash/cardcreator/9.tst+1−1 tests/plugins/Dash/horizontaljournaltest.cpp+1−1 tests/plugins/Dash/listviewwithpageheadersectionexternalmodeltest.cpp+4−4 tests/plugins/Dash/listviewwithpageheadersectiontest.cpp+61−55 tests/plugins/Dash/listviewwithpageheadertest.cpp+31−1 tests/plugins/Dash/listviewwithpageheadertestsection.qml+12−1 tests/plugins/Dash/organicgridtest.cpp+1−1 tests/plugins/Dash/verticaljournaltest.cpp+63−1 tests/plugins/Greeter/Unity/Launcher/CMakeLists.txt−1 tests/plugins/ImageCache/CMakeLists.txt+20 tests/plugins/ImageCache/graphics/wide.jpg tests/plugins/ImageCache/test.cpp+214 qml/Components/Circle.qml → tests/plugins/ImageCache/test.qml+6−5 tests/plugins/LightDM/CMakeLists.txt+1 tests/plugins/IntegratedLightDM/CMakeLists.txt → tests/plugins/LightDM/IntegratedLightDM/CMakeLists.txt+35−15 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+128 tests/plugins/IntegratedLightDM/usersmodel.cpp → tests/plugins/LightDM/IntegratedLightDM/usersmodel.cpp+2−2 tests/plugins/SessionBroadcast/BroadcastServer.cpp+33 tests/plugins/SessionBroadcast/BroadcastServer.h+40 tests/plugins/SessionBroadcast/CMakeLists.txt+45 tests/plugins/SessionBroadcast/interfaces.xml+18 tests/plugins/SessionBroadcast/server.cpp+37 tests/plugins/SessionBroadcast/sessionbroadcasttest.cpp+111 tests/plugins/Ubuntu/Gestures/CMakeLists.txt+2−1 tests/plugins/Ubuntu/Gestures/GestureTest.cpp+3−3 tests/plugins/Ubuntu/Gestures/GestureTest.h+4−5 tests/plugins/Ubuntu/Gestures/tst_AxisVelocityCalculator.cpp+1−1 tests/plugins/Ubuntu/Gestures/tst_FloatingFlickable.cpp+1−1 tests/plugins/Ubuntu/Gestures/tst_TouchGate.cpp+3−1 tests/plugins/Unity/Launcher/CMakeLists.txt+13−21 tests/plugins/Unity/Launcher/abs-icon.desktop → tests/plugins/Unity/Launcher/applications/abs-icon.desktop+1 tests/plugins/Unity/Launcher/click-icon.desktop → tests/plugins/Unity/Launcher/applications/click-icon.desktop+1 tests/plugins/Unity/Launcher/click-icon.svg → tests/plugins/Unity/Launcher/applications/click-icon.svg tests/plugins/Unity/Launcher/no-name.desktop → tests/plugins/Unity/Launcher/applications/no-name.desktop+1 tests/plugins/Unity/Launcher/rel-icon.desktop → tests/plugins/Unity/Launcher/applications/rel-icon.desktop+1 tests/plugins/Unity/Launcher/rel-icon.svg → tests/plugins/Unity/Launcher/applications/rel-icon.svg tests/plugins/Unity/Launcher/launchermodeltest.cpp+62−26 tests/plugins/Unity/Launcher/no-icon.desktop−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−1 tests/plugins/Utils/CMakeLists.txt+9 tests/plugins/Utils/URLDispatcherTest.cpp+78 tests/plugins/Wizard/tst_pagelist.cpp+30−1 tests/qmltests/CMakeLists.txt+21−19 tests/qmltests/Components/CMakeLists.txt+1 tests/qmltests/Components/tst_Carousel.qml−1 tests/qmltests/Components/tst_DragHandle.cpp+2−2 tests/qmltests/Components/tst_EdgeDragEvaluator.cpp+2−2 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+3−23 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/Components/tst_WallpaperResolver.qml+21−35 tests/qmltests/Components/tst_ZoomableImage.qml+1−1 tests/qmltests/Dash/Previews/tst_Preview.qml+23−6 tests/qmltests/Dash/Previews/tst_PreviewActions.qml+33−2 tests/qmltests/Dash/Previews/tst_PreviewAudioPlayback.qml+8−10 tests/qmltests/Dash/Previews/tst_PreviewCommentInput.qml+28 tests/qmltests/Dash/Previews/tst_PreviewExpandable.qml+26−7 tests/qmltests/Dash/Previews/tst_PreviewHeader.qml+1−5 tests/qmltests/Dash/Previews/tst_PreviewIconActions.qml+1−1 tests/qmltests/Dash/Previews/tst_PreviewImageGallery.qml+6−6 tests/qmltests/Dash/Previews/tst_PreviewInlineVideo.qml+155 tests/qmltests/Dash/Previews/tst_PreviewMediaToolbar.qml+3−3 tests/qmltests/Dash/Previews/tst_PreviewProgress.qml+14−1 tests/qmltests/Dash/Previews/tst_PreviewRatingDisplayCreationRanges.qml+52−15 tests/qmltests/Dash/Previews/tst_PreviewRatingEdit.qml+3 tests/qmltests/Dash/Previews/tst_PreviewRatingInput.qml+32 tests/qmltests/Dash/Previews/tst_PreviewTable.qml+22−1 tests/qmltests/Dash/Previews/tst_PreviewTextSummary.qml+2−2 tests/qmltests/Dash/Previews/tst_PreviewWidgetFactory.qml+17−16 tests/qmltests/Dash/Previews/tst_PreviewZoomableImage.qml+12−7 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+8−18 tests/qmltests/Dash/tst_CardCarousel.qml+24 tests/qmltests/Dash/tst_CardTool.qml+4−4 tests/qmltests/Dash/tst_Dash.qml+103−82 tests/qmltests/Dash/tst_DashContent.qml+56−14 tests/qmltests/Dash/tst_DashPageHeader.qml+46−5 tests/qmltests/Dash/tst_DashShell.qml+7−1 tests/qmltests/Dash/tst_GenericScopeView.qml+67−35 tests/qmltests/Greeter/TestView.qml+14−6 tests/qmltests/Greeter/tst_Greeter.qml+210−24 tests/qmltests/Greeter/tst_Infographics.qml+78−14 tests/qmltests/Greeter/tst_NarrowView.qml+70−14 tests/qmltests/Greeter/tst_WideView.qml+261−41 tests/qmltests/Launcher/tst_Launcher.qml+110−16 tests/qmltests/Notifications/Notification.qml+1 tests/qmltests/Notifications/tst_Notifications.qml+79−29 tests/qmltests/Notifications/tst_OptionToggle.qml+1−16 tests/qmltests/Notifications/tst_SwipeToAct.qml+4−18 tests/qmltests/Notifications/tst_VisualSnapDecisionsQueue.qml+7−23 tests/qmltests/Panel/Indicators/tst_MenuItemFactory.qml+61−13 tests/qmltests/Panel/tst_IndicatorItem.qml+4−3 tests/qmltests/Panel/tst_IndicatorItemRow.qml+26−1 tests/qmltests/Panel/tst_IndicatorPage.qml+1−3 tests/qmltests/Panel/tst_IndicatorsBar.qml+3−3 tests/qmltests/Panel/tst_IndicatorsMenu.qml+33−4 tests/qmltests/Panel/tst_Panel.qml+19−2 tests/qmltests/Stages/ApplicationCheckBox.qml → tests/qmltests/Stage/ApplicationCheckBox.qml+1−1 tests/qmltests/Stages/SizeHintField.qml → tests/qmltests/Stage/SizeHintField.qml tests/qmltests/Stages/SurfaceManagerControls.qml → tests/qmltests/Stage/SurfaceManagerControls.qml+1−1 tests/qmltests/Stages/SurfaceManagerField.qml → tests/qmltests/Stage/SurfaceManagerField.qml tests/qmltests/Stages/tst_ApplicationWindow.qml → tests/qmltests/Stage/tst_ApplicationWindow.qml+40−12 tests/qmltests/Stage/tst_DecoratedWindow.qml+232 tests/qmltests/Stages/tst_DesktopStage.qml → tests/qmltests/Stage/tst_DesktopStage.qml+160−25 tests/qmltests/Stages/tst_PhoneStage.qml → tests/qmltests/Stage/tst_PhoneStage.qml+149−211 tests/qmltests/Stages/tst_Splash.qml → tests/qmltests/Stage/tst_Splash.qml+16−2 tests/qmltests/Stages/tst_SpreadDelegate.qml → tests/qmltests/Stage/tst_SpreadDelegate.qml tests/qmltests/Stages/tst_SurfaceContainer.qml → tests/qmltests/Stage/tst_SurfaceContainer.qml+2−2 tests/qmltests/Stages/tst_TabletStage.qml → tests/qmltests/Stage/tst_TabletStage.qml+221−225 tests/qmltests/Stages/tst_WindowResizeArea.qml → tests/qmltests/Stage/tst_WindowResizeArea.qml+59−45 tests/qmltests/Tutorial/tst_Tutorial.qml+176−210 tests/qmltests/UnityLogo.png tests/qmltests/Wizard/tst_Wizard.qml+47−2 tests/qmltests/tst_DisabledScreenNotice.qml+1−1 tests/qmltests/tst_OrientedShell.qml+133−245 tests/qmltests/tst_Shell.qml+533−208 tests/qmltests/tst_ShellWithPin.qml+61−57 tests/qmltests/utils/Unity/Test/tst_UnityTest.qml+31 tests/utils/modules/Unity/Test/CMakeLists.txt+1−1 tests/utils/modules/Unity/Test/MouseTouchEmulationCheckbox.qml+4 tests/utils/modules/Unity/Test/Test.qmltypes−60 tests/utils/modules/Unity/Test/TouchEventSequenceWrapper.cpp+8−3 tests/utils/modules/Unity/Test/TouchEventSequenceWrapper.h+4−2 tests/utils/modules/Unity/Test/UnityTestCase.qml+2−2 tests/utils/modules/Unity/Test/testutil.cpp+32−4 tests/utils/modules/Unity/Test/testutil.h+1 tools/registry-tracker.cpp+2−2 tools/scopetool.cpp+6−2
.crossbuilder/post_deploynew file+1
@@ -0,0 +1 @@
1+restart unity8
CMakeLists.txt+4−2
@@ -63,12 +63,13 @@ find_package(Qt5DBus 5.4 REQUIRED)
6363find_package(Qt5Concurrent 5.4 REQUIRED)
6464find_package(Qt5Sql 5.4 REQUIRED)
6565
66−pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=17)
66+pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=22)
6767pkg_check_modules(GEONAMES REQUIRED geonames>=0.2)
6868pkg_check_modules(GIO REQUIRED gio-2.0>=2.32)
6969pkg_check_modules(GLIB REQUIRED glib-2.0>=2.32)
7070pkg_check_modules(QMENUMODEL REQUIRED qmenumodel)
71−
71+pkg_check_modules(GD3 REQUIRED gnome-desktop-3.0)
72+pkg_check_modules(UAL REQUIRED ubuntu-app-launch-2)
7273pkg_check_modules(UBUNTUGESTURES REQUIRED UbuntuGestures)
7374
7475### Check UbuntuGestures private headers. No pkg-config (.pc) file is provided for them
@@ -134,6 +135,7 @@ set(SHELL_APP unity8)
134135set(DASH_APP unity8-dash)
135136set(SCOPE_TOOL unity-scope-tool)
136137set(INDICATORS_CLIENT_APP indicators-client)
138+set(GREETER_APP unity8-greeter)
137139set(MOCK_INDICATOR_SERVICE_APP unity-mock-indicator-service)
138140
139141include_directories(
CODING+20−59
@@ -15,23 +15,17 @@ download source
1515 $ bzr branch lp:unity8 ~/unity8/trunk
1616 $ cd ~/unity8/trunk
1717
18−install dependencies
18+install dependencies and build Unity 8
1919--------------------
20−If its your first time, install build dependencies
2120
2221$ cd ~/unity8/trunk
23−$ ./build.sh --setup
24−
25− this will:
26− - install the required dependencies to build, as well as run on the desktop
27− - it should also install unity-scope-home and unity-lens-application which
28− are technically "recommends", not strict dependencies
22+$ ./build.sh
2923
30−build Unity 8
31−-------------
24+ If its your first time, this will install the required dependencies to build and
25+ build it.
3226
33−$ cd ~/unity8/trunk
34−$ ./build.sh
27+ You might want to also install unity-scope-home and unity-scope-click which
28+ are technically "recommends", not strict dependencies
3529
3630You may also rebuild with the -c for clean, which just deletes the build
3731directory.
@@ -43,13 +37,15 @@ Running Unity 8 on your desktop
4337run the Unity 8 shell
4438---------------------
4539$ cd ~/unity8/trunk
46−$ ./run.sh
40+$ cd builddir
4741
48−Options can be passed to test the lock screen
49−$ ./run.sh -p OR -k
42+Each component of unity8 can be ran independently for development and testing
43+For example:
44+$ make tryShell
45+$ make tryLauncher
46+$ make tryLockscreen
5047
51−-p is for pin lock, for which the default prompt answer is "1234"
52−-k is for keylock passphrase, for which the default prompt answer is "password"
48+Check out the tests/qmltests/ directory for a list of things that can be ran.
5349
5450Notes
5551-----
@@ -70,50 +66,15 @@ Notes
7066
7167Running Unity 8 on devices
7268==========================
73−- Ubuntu Touch builds are currently only available in 14.04 flavour
74−- supported hardware should match one of those listed here
75− https://wiki.ubuntu.com/Touch/Devices#Running_fine
76−- follow the Ubuntu Touch install instructions for your chosen device
77− https://wiki.ubuntu.com/Touch/Install
78−- make sure your device is connected to a network
79−- also make sure you have your SSH key in ~/.ssh/id_rsa.pub (or install one
80− on the device yourself)
81−
82−$ cd ~/unity/trunk
83−$ ./run_on_device.sh --setup
84− this will:
85− - install your public SSH key on the device
86− - install the needed dependencies
8769
88−$ ./run_on_device.sh
89− this will:
90− - rsync the code to the device
91− - build on the device
92− - replace the running shell
93−
94−Options can be passed to test the lock screen
95−$ ./run_on_device.sh -p OR -k
96−
97−-p is for pin lock, for which the default prompt answer is "1234"
98−-k is for keylock passphrase, for which the default prompt answer is "password"
99−
100−Notes
101−-----
102−- using adb over TCP has some advantages, Google will be of help here
103− - NOTE: this is not yet available for flipped images
104− - TL;DR: `adb tcpip 5555; adb connect $your_device_ip`
105− - you can persist the above via `adb shell setprop persist.adb.tcp.port 5555`
106− - it's unsafe - anyone can connect to your device
107− - with TCP the Nexus 10 doesn't drop the adb connection when locking
108− the screen
109−- exporting ANDROID_SERIAL=$your_device_serial or
110− ANDROID_SERIAL=$your_device_ip:5555 will make adb not complain about
111− multiple devices
112−- you can export TARGET_IP=$your_device_ip TARGET_SSH_PORT=22 for run_on_device.sh
113− to not use adb forwarding - useful if you use multiple devices
114−- using Ninja (package ninja-build - run_on_device.sh -s installs this now)
115− will improve build times (especially in the nothing-to-build case)
70+Running unity8 on a device should be done using crossbuilder.
71+Go to
72+* https://launchpad.net/crossbuilder and
73+* https://wiki.ubuntu.com/Touch/Crossbuilder
74+for more details on crossbuilder.
11675
76+unity8 will automatically restart on the phone once deployment
77+has finished due to post-build-steps set up in this repository.
11778
11879Coding guidelines
11980=================
build.sh+6−37
@@ -9,7 +9,6 @@ usage() {
99 echo "usage: build [OPTIONS] [BUILD_TYPE]\n" >&2
1010 echo "Script to build the shell. If BUILD_TYPE is not specified, it defaults to \"debug\".\n" >&2
1111 echo "OPTIONS:" >&2
12− echo " -s, --setup Setup the build environment and branch Unity" >&2
1312 echo " -c, --clean Clean the build tree before building" >&2
1413 echo >&2
1514 exit 1
@@ -22,7 +21,6 @@ eval set -- "$ARGS"
2221while [ $# -gt 0 ]
2322do
2423 case "$1" in
25− -s|--setup) SETUP=true;;
2624 -c|--clean) CLEAN=true;;
2725 -h|--help) usage;;
2826 --) shift;break;;
@@ -35,31 +33,6 @@ done
3533BUILD_TYPE="debug"
3634[ $# -eq 1 ] && BUILD_TYPE="$1"
3735
38−install_dependencies() {
39− sudo apt-get update || exit 4
40− echo "Installing Unity 8 dependencies.."
41− sudo apt-get install devscripts \
42− equivs \
43− gsettings-desktop-schemas \
44− gsettings-ubuntu-schemas \
45− pay-service \
46− qmenumodel-qml \
47− qml-module-qtquick-layouts \
48− qml-module-qtquick-xmllistmodel \
49− qtdeclarative5-gsettings1.0 \
50− qtdeclarative5-ubuntu-ui-toolkit-plugin \
51− qtdeclarative5-ubuntu-settings-components \
52− qtdeclarative5-ubuntu-telephony0.1 \
53− qtdeclarative5-ubuntu-thumbnailer0.1 \
54− qtdeclarative5-unity-notifications-plugin \
55− qml-module-ubuntu-connectivity \
56− ubuntu-mobile-icons \
57− ubuntu-system-settings \
58− unity-plugin-scopes \
59− xvfb \
60− || exit 5
61−}
62−
6336mk_build_deps() {
6437 if [ ! -f control -o $CODE_DIR/debian/control -nt control ]; then
6538 sed 's/\:native//g' $CODE_DIR/debian/control > control
@@ -85,13 +58,9 @@ else
8558 BUILD_COMMAND="make -j$NUM_JOBS"
8659fi
8760
88−if $SETUP; then
89− install_dependencies
90−else
91− if $CLEAN; then rm -rf builddir; fi
92− mkdir -p builddir
93− cd builddir
94− mk_build_deps
95− cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE $CODE_DIR ${GENERATOR} || exit 6
96− ${BUILD_COMMAND} || exit 7
97−fi
61+if $CLEAN; then rm -rf builddir; fi
62+mkdir -p builddir
63+cd builddir
64+mk_build_deps
65+cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE $CODE_DIR ${GENERATOR} || exit 6
66+${BUILD_COMMAND} || exit 7
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/com.canonical.Unity8.gschema.xml+5
@@ -43,6 +43,11 @@
4343 <summary>Width of the launcher in grid units.</summary>
4444 <description>Changes the width of the launcher in all usage modes.</description>
4545 </key>
46+ <key type="b" name="enable-launcher">
47+ <default>true</default>
48+ <summary>Enable or disable the launcher</summary>
49+ <description>Toggle the availability of the launcher</description>
50+ </key>
4651 </schema>
4752
4853 <schema path="/com/canonical/unity8/greeter/" id="com.canonical.Unity8.Greeter" gettext-domain="unity8">
data/unity8-dash.conf+1−1
@@ -22,4 +22,4 @@ pre-start script
2222 initctl emit scope-ui-starting
2323end script
2424
25−exec ${BINARY:-unity8-dash} $ARGS --desktop_file_hint=/usr/share/applications/unity8-dash.desktop
25+exec ${BINARY:-unity8-dash} $ARGS --desktop_file_hint=unity8-dash.desktop
data/unity8-dash.png

Binary file not shown.

data/unity8-filewatcher.conf+5
@@ -1,6 +1,11 @@
11description "File system watcher for unity8"
22author "Michael Zanetti <michael.zanetti@canonical.com>"
33
4+# This method of updating the launcher will not work in our new snappy world,
5+# neither for snaps installed in the system nor if we are running inside a snap.
6+# Plus it hardcodes the phablet user... To be replaced once bug 1630997 is
7+# fixed in ubuntu-app-launch.
8+
49# Workaround for bug 1360208. ~ and * in one expression doesn't work currently
510start on (file FILE=/home/phablet/.local/share/applications/*.desktop) or (file FILE=/usr/share/applications/*.desktop)
611
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+106
@@ -0,0 +1,106 @@
1+#!/bin/sh
2+# -*- Mode: sh; indent-tabs-mode: nil; tab-width: 4 -*-
3+#
4+# Copyright (C) 2011,2013,2016 Canonical Ltd
5+#
6+# This program is free software: you can redistribute it and/or modify it under
7+# the terms of the GNU General Public License as published by the Free Software
8+# Foundation, version 3 of the License.
9+#
10+# See http://www.gnu.org/copyleft/gpl.html the full text of the license.
11+
12+# This wrapper merely ensures that init and friends live only as long as this
13+# script does. Otherwise, it's very easy for some processes to not notice that
14+# the session died. We could try to do this in-process, but we want to do this
15+# cleanup even if the greeter aborts.
16+
17+trap cleanup TERM EXIT
18+
19+cleanup()
20+{
21+ trap - TERM EXIT
22+ # Kill upstart and indicators
23+ if [ -n "$INIT_PID" ]; then
24+ kill "$INIT_PID"
25+ fi
26+ if [ -n "$CMD_PID" ]; then
27+ kill "$CMD_PID"
28+ fi
29+ exit 0
30+}
31+
32+set_greeter_var()
33+{
34+ export "$1=$2"
35+ gdbus call --session --dest org.freedesktop.DBus --object-path /org/freedesktop/DBus --method org.freedesktop.DBus.UpdateActivationEnvironment "{'$1': '$2'}"
36+ if [ -n "$INIT_PID" ]; then
37+ initctl set-env --global "$1=$2"
38+ fi
39+}
40+
41+SUB_SOCKET=$XDG_RUNTIME_DIR/mir_socket
42+rm -f $SUB_SOCKET # clear socket in case we were hard shut down
43+
44+echo "DBUS_SESSION_BUS_ADDRESS=${DBUS_SESSION_BUS_ADDRESS}" >"$XDG_RUNTIME_DIR/dbus-session"
45+
46+# If touch session script (which sets up grid units and mir variables) is available, use it
47+TOUCH_WRAPPER=
48+if which ubuntu-touch-session >/dev/null; then
49+ TOUCH_WRAPPER=ubuntu-touch-session
50+fi
51+
52+# Pretend that we're in an ubuntu-touch session, so that indicator-network
53+# will start.
54+export DESKTOP_SESSION=ubuntu-touch
55+
56+# We disable ofono using pulse. It causes problems with racing with the user's
57+# pulse. We need to come up with a better long-term fix for this, because we
58+# eventually need the greeter to play ringtones for users that aren't logged in.
59+set_greeter_var PA_DISABLED 1
60+
61+# Normal unity8 sessions are entirely driven by Upstart. But greeters
62+# are special. They need access to the file descriptors that lightdm
63+# creates for them and don't want to start all the services that a normal
64+# session would. So it's inconvenient to live within an upstart session.
65+# But... we still want to use Upstart for some services. So launch here.
66+MIR_SOCKET=$SUB_SOCKET $TOUCH_WRAPPER upstart --user --no-startup-event &
67+INIT_PID=$!
68+while [ ! -e "$XDG_RUNTIME_DIR/upstart/sessions/$INIT_PID.session" ]; do sleep 0.1; done
69+. "$XDG_RUNTIME_DIR/upstart/sessions/$INIT_PID.session"
70+export UPSTART_SESSION
71+
72+# Connect upstart to system, but do first command in a loop to avoid any
73+# race condition between the session file above being written and upstart being
74+# ready to handle requests.
75+while ! initctl notify-dbus-address "$DBUS_SESSION_BUS_ADDRESS"; do sleep 0.1; done
76+initctl start notify-cgmanager
77+
78+# Start any pre-greeter tasks if needed (like wizard)
79+initctl emit unity8-greeter-starting
80+
81+# Define language here for phone if available. When phone user switches their
82+# language, they expect that to affect the greeter too. But the user doesn't
83+# have permission to switch system language, only their own. So we notice if
84+# the phablet user exists and use their language if so. TODO: talk to design
85+# about whether we should switch language on fly as users are selected (this
86+# is very hard to do technically).
87+#
88+# Do this after unity8-greeter-starting, in case a customization upstart job
89+# changes language.
90+if [ "$(id -u phablet 2>/dev/null)" = "32011" ]; then
91+ 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)
92+ if [ -n "$USER_LANG" ]; then
93+ set_greeter_var LANGUAGE "$USER_LANG"
94+ fi
95+ 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)
96+ if [ -n "$USER_LOCALE" ]; then
97+ set_greeter_var LANG "$USER_LOCALE"
98+ set_greeter_var LC_ALL "$USER_LOCALE"
99+ fi
100+fi
101+
102+# And finally actually start the greeter
103+exec env QT_QPA_PLATFORM=ubuntumirclient MIR_SERVER_FILE=$SUB_SOCKET $TOUCH_WRAPPER $@ &
104+CMD_PID=$!
105+wait $CMD_PID
106+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+516
@@ -1,3 +1,519 @@
1+unity8 (8.15+17.04.20161116.1-0ubuntu1) zesty; urgency=medium
2+
3+ [ Marco Trevisan (Treviño) ]
4+ * MenuItemFactory: bind calendar backend properties to calendarMenu item
5+
6+ Adds support for showing the calendar at the requested date, marking days
7+ with events properly and toggling the visibility of the week number.
8+
9+ * MenuItemFactory: use Menus.RadioMenu and Menus.ButtonMenu
10+
11+ * Bump version as USC breaks with unity8 << 8.14
12+
13+ [ Albert Astals Cid ]
14+ * [Hopefully] Fix infinite loop in some of the GSV tests (LP:
15+ #1599301)
16+
17+ [ Marco Trevisan (Treviño) ]
18+ * testLauncher: use tryCompare to check launcher contentY
19+
20+ [ Michael Zanetti ]
21+ * Stabilize OrientedShell tests
22+
23+ -- Marco Trevisan (Treviño) <mail@3v1n0.net> Wed, 16 Nov 2016 10:44:59 +0000
24+
25+unity8 (8.14+17.04.20161109-0ubuntu1) zesty; urgency=medium
26+
27+ [ Albert Astals Cid ]
28+ * Make more CardTool properties readonly
29+ * Make the > in Dash Section Header be after text (LP: #1508905)
30+ * Rework Dash Preview column margins
31+ * Improve LVWPH <-> GenericScopeView interaction (LP: #1508905,
32+ #1622423)
33+ * Make the PreviewButtons be of the width of the button and not half
34+ the total width
35+ * Fix first column of the preview table to be 25%
36+
37+ [ Andrea Cimitan ]
38+ * Remove background under header pagination dots, update dots assets,
39+ remove dash paper background, update bottom edge asset
40+ * Few styling changes for cards
41+ * various tweaks to fonts inside previews
42+ * More visual tweaks
43+
44+ [ Brian Douglass ]
45+ * Add a new setting to enable/disable the launcher
46+
47+ [ Lukáš Tinkl ]
48+ * Stabilize test_doubleTapToMaximizeWindow()
49+ * Enable loading the main Qt catalog which in turn allows for using
50+ RTL languages
51+ * Fix the pixelated notification icon by setting sourceSize (LP:
52+ #1637712)
53+
54+ [ Michael Terry ]
55+ * More path lookup fixes for running inside of a snap. (LP: #1629009)
56+
57+ [ Michael Zanetti ]
58+ * Added blur and darkening to wallpaper while in spread
59+ * Fixes in the spread after design review (LP: #1637502, #1638848)
60+ * More fixes to the unified stages code (LP: #1637205, #1637249,
61+ #1637258)
62+ * Delay alt tab for tiny bit in order to avoid flickering on quick alt-
63+ tabs
64+
65+ [ Tomás Tormo ]
66+ * Reload Infographics userdata when the day changes (LP: #1378814)
67+
68+ -- Michał Sawicz <michal.sawicz@canonical.com> Wed, 09 Nov 2016 15:10:32 +0000
69+
70+unity8 (8.14+17.04.20161027-0ubuntu1) zesty; urgency=medium
71+
72+ * MenuItemFactory: activate item on calendar selection change (LP:
73+ #1541125)
74+
75+ -- Marco Trevisan (Treviño) <mail@3v1n0.net> Thu, 27 Oct 2016 12:32:25 +0000
76+
77+unity8 (8.14+17.04.20161024-0ubuntu1) zesty; urgency=medium
78+
79+ [ Albert Astals Cid ]
80+ * Make PreviewProgress be thicker again (LP: #1629382)
81+ * tst_PreviewZoomableImage: Wait for LazyImage transitions on init()
82+ (LP: #1630136)
83+
84+ [ Andrea Azzarone ]
85+ * Remove UbuntuShapeForItem and replace its use with the more standard
86+ Ubuntu.Components.UbuntuShape.
87+
88+ [ Lukáš Tinkl ]
89+ * Restore the double tap decoration to maximize feature (LP: #1627281)
90+ * Hide the cursor for fullscreen apps after 3 seconds of inactivity
91+ * Implement moving windows by Alt + left mouse button
92+
93+ [ Marco Trevisan (Treviño) ]
94+ * MenuItemFactory: use more features from SlotsLayout based settings
95+ components
96+
97+ [ Michael Terry ]
98+ * Grab launcher icon information from ubuntu-app-launch, not directly
99+ from desktop files.
100+ * Adjust root paths if we're running inside a snap. (LP: #1629009)
101+
102+ [ Michael Zanetti ]
103+ * Merge all Stages into one single codebase. Apply new spread visuals.
104+ (LP: #1489517, #1603914, #1635800)
105+
106+ -- Michael Zanetti <michael.zanetti@canonical.com> Mon, 24 Oct 2016 11:37:28 +0000
107+
108+unity8 (8.14+16.10.20160922-0ubuntu2) yakkety; urgency=medium
109+
110+ * debian/control:
111+ - Drop unity-scope-mediascanner2 to a Suggests rather than a Recommends,
112+ to ease our transition to main. It's already seeded directly in
113+ Touch, so this will only affect the Desktop variant of unity8.
114+
115+ -- Michael Terry <mterry@ubuntu.com> Mon, 03 Oct 2016 10:43:25 -0400
116+
117+unity8 (8.14+16.10.20160922-0ubuntu1) yakkety; urgency=medium
118+
119+ [ Albert Astals Cid ]
120+ * LVWPH: update clipItem height when list height changes (LP:
121+ #1606935)
122+ * Put the touchdown shape inside a loader
123+ * No need for the touchdown in the card for the cardtool
124+ * Add bottom gradient to the Show Less floating button
125+ * Remove artShapeSize from non cardtool cards
126+ * LVWPH: Fix case in which header was shown incorrectly
127+ * LVWPH: Fix items cut on top in the dash (or at least some instances
128+ of it)
129+ * Reduce calls to CardCreatorCache.getCardComponent while the
130+ component is being created (LP: #1615675)
131+ * Dash::test_cardIconStyle change compare into tryCompareFunction
132+ * Make PreviewActionsTest::test_comboButton more stable
133+ * Adapt onShiftedContentXChanged to work when the content changes very
134+ abruptly
135+ * Make tryGenericScopeView show the scope correctly
136+ * Make sure the spinner does not get too close to the title text (LP:
137+ #1597392)
138+ * Show "Pull to refresh" in white when overlaid in low luminance
139+ colors (LP: #1596849)
140+ * Make test_Shell non ultra slow again (LP: #1597366)
141+ * Improve findChild calls inside tryCompareFunction.
142+
143+ [ Andrea Cimitan ]
144+ * override some Qt Components definitions so we can have sane default
145+ values for flick speeds
146+ * Elide the label text inside recent searches panel (LP: #1611796)
147+ * Add a PreviewSingleton module to store some data for previews (LP:
148+ #1595235)
149+ * Use PreviewSingleton for PreviewRatingInput and PreviewCommentInput
150+ (LP: #1595235)
151+ * rework GenericScopeView PullToRefresh test
152+ * use mouseFlick instead touchFlick for manage_dash_move_current
153+ * add a couple of waiting tricks for a flaky dash test
154+
155+ [ Daniel d'Andrada ]
156+ * Set progress bar indeterminate when processing signal received. (LP:
157+ #1249349)
158+ * Implement cursor confinement (LP: #1590099)
159+
160+ [ Josh Arenson ]
161+ * Add a frontend to the sessions model and enable a session chooser in
162+ the greeter.
163+
164+ [ Lukáš Tinkl ]
165+ * Implement edge maximizing (aka window snapping) (LP: #1602628)
166+ * On the PC platform (as opposed to running on $devices), use the
167+ "mute" action instead of silent mode
168+ * Respect Fitt's law wrt the window control buttons in panel (LP:
169+ #1611959)
170+ * Fix 2 failing color-related tests
171+
172+ [ Marco Trevisan (Treviño) ]
173+ * Indicators, mocks: add fake indicators menuitem to populate mocks
174+ with different menu types
175+ * IndicatorsClient: use PageHeader and ListItemLayout's
176+
177+ [ Michael Terry ]
178+ * Support launching apps inside a unity8 session from the greeter and
179+ support emergency dialing inside the greeter.
180+ * Fix tryShell to actually show appropriate backgrounds for each mock
181+ user.
182+ * Add an indicator to the greeter when a user is logged in (only shown
183+ if we have more than one user)
184+ * Hide the greeter OSK if indicators are open and don't show the edge
185+ tutorial during an emergency call.
186+ * Switch from lockscreen PIN pad to a passcode entry box that uses the
187+ OSK.
188+ * Use the default system wallpaper instead of our custom one.
189+ * Update look of infographic a bit
190+ * Make infographic bubbles white even on the default wallpaper.
191+
192+ -- Michał Sawicz <michal.sawicz@canonical.com> Thu, 22 Sep 2016 07:46:57 +0000
193+
194+unity8 (8.14+16.10.20160831.3-0ubuntu1) yakkety; urgency=medium
195+
196+ [ Daniel d'Andrada ]
197+ * Added implementation for MirSurfaceInterface::persistentId
198+
199+ -- Ken VanDine <ken.vandine@canonical.com> Wed, 31 Aug 2016 11:56:09 +0000
200+
201+unity8 (8.14+16.10.20160826-0ubuntu1) yakkety; urgency=medium
202+
203+ * Make sure we emit sounds when taking a screenshot even after media-
204+ hub (LP: #1544477)
205+
206+ -- Alfonso Sanchez-Beato <alfonso.sanchez-beato@canonical.com> Fri, 26 Aug 2016 08:14:14 +0000
207+
208+unity8 (8.14+16.10.20160819-0ubuntu1) yakkety; urgency=medium
209+
210+ [ Lukáš Tinkl ]
211+ * Reset topmostIsFullscreen to correctly rotate the shell when
212+ dismissing SIM PIN screen (LP: #1614070)
213+
214+ -- Michał Sawicz <michal.sawicz@canonical.com> Fri, 19 Aug 2016 14:16:54 +0000
215+
216+unity8 (8.14+16.10.20160811.1-0ubuntu1) yakkety; urgency=medium
217+
218+ [ Albert Astals Cid ]
219+ * Take into account carousel selectedItemScaleFactor when setting card
220+ fixedArtShapeSize (LP: #1599238)
221+ * Remove unused LimitProxyModel
222+ * Do not calculate implicitHeight for Cards in a CardGrid
223+ * Small clazy fixes
224+
225+ [ Daniel d'Andrada ]
226+ * Remove stage property from Application
227+
228+ [ Larry Price ]
229+ * Allow libertine-scope to show empty search result hint unmodified.
230+ (LP: #1606693)
231+
232+ [ Lukáš Tinkl ]
233+ * Open the quicklist (context) menu also using the Menu key (LP:
234+ #1608265)
235+ * Fix incorrect SIM PIN dialog position when entering a wrong PIN (LP:
236+ #1596076)
237+ * Apply the correct keymap also on prompt surfaces (LP: #1610124)
238+ * Implement an optional system update feature during OOBE wizard (LP:
239+ #1580785)
240+ * Implement a page for choosing HW keyboard layout in OOBE wizard
241+
242+ [ Michael Zanetti ]
243+ * Clean up some build script legacy
244+ * Add a crossbuilder_post file to make crossbuilder restart unity8
245+ after deploying
246+ * fixes for the automatic switching between usage modes (LP: #1590944)
247+
248+ [ Omer Akram ]
249+ * Add object names for setup wizard
250+
251+ -- Michał Sawicz <michal.sawicz@canonical.com> Thu, 11 Aug 2016 06:28:20 +0000
252+
253+unity8 (8.14+16.10.20160803-0ubuntu1) yakkety; urgency=medium
254+
255+ [ Albert Astals Cid ]
256+ * Fix DisabledScreenNotice::test_rotation
257+ * Make the delegate of DashNavigationList an async Loader
258+ * unity-scope-tool: Use parse instead of process
259+ * VerticalJournal improvements regarding model insertions and item
260+ height changes (LP: #1599754)
261+ * Add math.h includes for compilation in yakkety (LP: #1605502)
262+
263+ [ Andrea Cimitan ]
264+ * Unfocus the search text field in the dash page header when requested
265+ (LP: #1590820)
266+ * Use binding for filter popover contentWidth (LP: #1595116)
267+ * Add few sourceSize for Image we forgot (LP: #1595113)
268+ * Replace Flickable with an Item inside DashPageHeader for
269+ headerContainer (LP: #1599235)
270+
271+ [ Albert Astals Cid, Andrea Cimitan ]
272+ * Unbox the artshapeLoader
273+
274+ [ Daniel d'Andrada ]
275+ * Fix splashscreen orientation when app rotates own contents (LP:
276+ #1586050)
277+ * tst_PreviewIconActions: Make test name match filename
278+ * Cursor: make its size grid unit based (LP: #1604014)
279+ * TouchEventSequenceWrapper: item might get deleted when touch
280+ sequence is committed (LP: #1607686)
281+
282+ [ Lukáš Tinkl ]
283+ * Implement frontend support for running keyboard indicator
284+ * Provide window/surface close shortcuts across all the stages (LP:
285+ #1578392, #1606528)
286+ * Restart the location trust prompt service when exiting the wizard
287+ (LP: #1594430)
288+ * Implement clearing the search and closing the panel on pressing
289+ Escape key in the dash header
290+ * Fix log timestamps (LP: #1602196)
291+ * Don't display the mode switch warning dialog on tablets (LP:
292+ #1600290)
293+
294+ [ Michael Terry ]
295+ * Fix indicator profile bug that caused sound indicator to say Mute
296+ instead of Silent Mode. (LP: #1604205)
297+ * Fix lockscreen appearing right after unlocking a locked session on
298+ the desktop. (LP: #1604374)
299+
300+ [ Michał Sawicz ]
301+ * Add arm64 support, drop unnecessary B-D on web plugin
302+
303+ -- Michał Sawicz <michal.sawicz@canonical.com> Wed, 03 Aug 2016 15:56:27 +0000
304+
305+unity8 (8.14+16.10.20160728-0ubuntu1) yakkety; urgency=medium
306+
307+ [ Zoltán Balogh ]
308+ * Bump the version to secure UITK compatibility
309+
310+ [ Albert Astals Cid ]
311+ * Pass the correct number of arguments to mapToItem (LP: #1606835)
312+
313+ -- Michał Sawicz <michal.sawicz@canonical.com> Thu, 28 Jul 2016 08:17:13 +0000
314+
315+unity8 (8.13+16.10.20160714+fix1-0ubuntu2~1) yakkety; urgency=medium
316+
317+ * Rebuild against Qt 5.6.
318+ * Add https://code.launchpad.net/~aacid/unity8/floor_includes/+merge/300850
319+
320+ -- Timo Jyrinki <timo-jyrinki@ubuntu.com> Fri, 22 Jul 2016 09:03:54 +0300
321+
322+unity8 (8.13+16.10.20160714-0ubuntu1) yakkety; urgency=medium
323+
324+ [ Daniel d'Andrada ]
325+ * Make use of MirSurface::inputBounds and drop UbuntuKeyboardInfo hack
326+
327+ -- Michał Sawicz <michal.sawicz@canonical.com> Thu, 14 Jul 2016 07:09:29 +0000
328+
329+unity8 (8.12+16.10.20160711-0ubuntu1) yakkety; urgency=medium
330+
331+ [ Josh Arenson ]
332+ * Add a SessionsModel to lightdm to support the greeter's session
333+ chooser
334+ * Add unity8-greeter package which contains a basic, but usable
335+ LightDM greeter. (LP: #1324602)
336+
337+ [ Michael Terry ]
338+ * Make sure indicators and launcher hide when power button is pressed
339+ on greeter. (LP: #1595569)
340+ * Fix tablet greeter focus to be always-on, no longer hiding the OSK
341+ or forcing a mouse click to type a password. (LP: #1435923)
342+
343+ -- Michael Terry <michael.terry@canonical.com> Mon, 11 Jul 2016 17:24:20 +0000
344+
345+unity8 (8.12+16.10.20160707-0ubuntu1) yakkety; urgency=medium
346+
347+ [ Michael Zanetti ]
348+ * emit the correct role changed signal on count visible changed (LP:
349+ #1599925)
350+
351+ -- Michał Sawicz <michal.sawicz@canonical.com> Thu, 07 Jul 2016 16:49:32 +0000
352+
353+unity8 (8.12+16.10.20160705-0ubuntu1) yakkety; urgency=medium
354+
355+ [ Michael Zanetti ]
356+ * don't displace windows if the OSK is on another screen (LP:
357+ #1598917)
358+
359+ -- Michał Sawicz <michal.sawicz@canonical.com> Tue, 05 Jul 2016 10:00:57 +0000
360+
361+unity8 (8.12+16.10.20160627.5-0ubuntu1) yakkety; urgency=medium
362+
363+ [ Albert Astals Cid ]
364+ * Stop watching the old header item height once it's not our header
365+ anymore
366+ * LVWPH: cull the header item when not on view to save some painting
367+ * Adapt test to new mock behaviour
368+ * Don't let the mouse go outside the parentItem (LP: #1525350)
369+ * Use non deprecated package names
370+ * Mark system includes as such
371+ * Fix initialization order warning
372+ * Do not rely on deleteLater not crashing on null pointers
373+ * Add more headers of classes we use for automoc to be run
374+ * CardTool: Fix the fallback value to be a size and not an integer
375+ * CardTool: Include Ubuntu Components since we're using units.gu
376+ * Rework tst_PreviewRatingDisplayCreationRanges
377+
378+ [ Daniel d'Andrada ]
379+ * Cursor: Let AnimatedSprite run only on animated cursors and while
380+ the display is on (LP: #1588873, #1594358)
381+ * Fix missing screenshot when orientation changes while shell rotation
382+ ongoing (LP: #1587796)
383+
384+ [ Josh Arenson ]
385+ * Make PreviewRatingSingleDisplay visible again after editing a
386+ review. (LP: #1587097)
387+ * Correct errors in all png images to prevent libpng warnings.
388+
389+ [ Lukáš Tinkl ]
390+ * Fix some smaller issues with OOBE wizard password pages (LP:
391+ #1590467)
392+ * Prevent mouse wheel events from going through shell elements (LP:
393+ #1536268)
394+ * Do not let mouse and wheel events pass thru the titlebar (LP:
395+ #1588424)
396+ * Hide the maximize window button based on size restrictions (LP:
397+ #1541982)
398+
399+ [ Marco Trevisan (Treviño) ]
400+ * Unity8.conf: ensure MIR_SOCKET is set for future customers (such as
401+ the dash)
402+ * ClientIndicator: be more informative about loading failures for
403+ dynamically created objects
404+
405+ [ Michael Terry ]
406+ * Stop unity8 from getting in a "switch-to-greeter" loop when locking
407+ on a desktop. (LP: #1593718)
408+
409+ [ Michael Zanetti ]
410+ * set minimum window sizes on dash
411+ * displace application windows when the OSK would cover them
412+
413+ [ Nick Dedekind ]
414+ * Force dash to always stay in the main stage. (lp:#1592404) (LP:
415+ #1592404)
416+ * Save the last surface stage on stage drop. (LP: #1579003)
417+ * Default portrait only apps to the side stage. (LP: #1573153)
418+
419+ [ Albert Astals Cid, Andrea Cimitan, Michał Sawicz, Nick Dedekind ]
420+ * Added live video playback in dash previews
421+
422+ -- Michael Zanetti <michael.zanetti@canonical.com> Mon, 27 Jun 2016 18:48:59 +0000
423+
424+unity8 (8.12+16.10.20160620.3-0ubuntu1) yakkety; urgency=medium
425+
426+ [ Michael Terry, Michał Sawicz ]
427+ * Support unlocking via fingerprint, if one is registered.
428+
429+ -- Michael Terry <michael.terry@canonical.com> Mon, 20 Jun 2016 20:25:25 +0000
430+
431+unity8 (8.12+16.10.20160617-0ubuntu1) yakkety; urgency=medium
432+
433+ [ Michael Terry ]
434+ * Do not create Label/Icon if we don't need it
435+ * Fix Z-ordering of prompt surfaces (LP: #1586219)
436+ * Drop bottom edge tutorials completely and small fixes for other
437+ edges. (LP: #1565103)
438+ * Redo visuals for greeter prompt box. (LP: #1435923)
439+ * Make tutorial qmltests more robust. (LP: #1590810)
440+ * Stop showing an extra lockscreen in desktop unity8 sessions. (LP:
441+ #1582987)
442+
443+ [ Albert Astals Cid ]
444+ * Improve dash plugin mock
445+ * Stabilize PreviewExpandableTest::test_all_widgets_height
446+ * Workaround QTBUG-53460
447+ * Split artShape code for cardTool card and regular card
448+ * Simplify the code since fixedArtSize code is mandatory for regular
449+ cards
450+ * Desktop stage: Support rotatesWindowContents (LP: #1547481)
451+ * Turn if if else into if elseif else
452+ * Fix leaks in QInputDeviceManagerPrivate::addDevice
453+ * Do not call |= on uninitialized sigterm.sa_flags
454+ * initialize udevMonitor
455+ * Make notifier and notifierFd function local variables
456+ * Fix crash if a component that is not an Item is given to
457+ sectionDelegate
458+ * Tests: Do not use dynamic_cast if we're not going to test it anyway
459+ * Minor coverity fixes
460+ * Fix warning about anchors.fill in ProportionalShape (LP: #1590963)
461+ * Make wait in cleanup() wait for snapTo animation to have finished
462+
463+ [ Alexandros Frantzis ]
464+ * Improve the way notifications interact with power management (LP:
465+ #1570922)
466+
467+ [ Andrea Cimitan ]
468+ * Correctly refresh cardcreator cache on artshapestyle changes (LP:
469+ #1588335)
470+ * Same tweaks we have for click scope now for libertine
471+ * add a timer to pull to refresh to work on small windows (LP:
472+ #1589060)
473+
474+ [ Daniel d'Andrada ]
475+ * Clean up debug leftovers
476+ * Ensure mouse and window movement are pixel-aligned (LP: #1510382)
477+ * Fix SpreadDelegate rotation animations
478+ * No point in version-controlling files that are automatically
479+ generated
480+ * Center cursor on screen when it's first shown
481+ * Custom cursor name just have to start with "custom"
482+ * Work around AnimatedSprite infinite loop bug (LP: #1588929)
483+
484+ [ Josh Arenson ]
485+ * Disable showDash when it is already shown. (LP: #1506708)
486+ * Add a timestamp to the dash log (LP: #1580074)
487+ * Add timestamp to unity8 log (LP: #1498169)
488+
489+ [ Lukáš Tinkl ]
490+ * Implement keyboard shortcuts info panel
491+ * Implement window controls overlay activatable with 3 fingers tap
492+ (LP: #1489020)
493+ * Select correct Chinese input method for OSK in the wizard (LP:
494+ #1588633)
495+
496+ [ Michael Zanetti ]
497+ * Add support for the launcher surface pips displaying the correct
498+ number of surfaces
499+ * Add support for the persistent alert state. (LP: #1575147, #1584348,
500+ #1586621)
501+ * send a Alt-release event on alt+tab instead of delaying it
502+ completely and invoking it later (LP: #1565236)
503+
504+ [ Stephen M. Webb ]
505+ * added a new upstart $SESSION for unity8-desktop-session (LP:
506+ #1376715)
507+
508+ -- Michael Terry <michael.terry@canonical.com> Fri, 17 Jun 2016 01:22:57 +0000
509+
510+unity8 (8.12+16.10.20160601.1-0ubuntu1) yakkety; urgency=medium
511+
512+ [ Pawel Stolowski ]
513+ * Added apparmor profile for unity8-dash.
514+
515+ -- Michał Sawicz <michal.sawicz@canonical.com> Wed, 01 Jun 2016 20:59:03 +0000
516+
1517unity8 (8.12+16.10.20160527-0ubuntu1) yakkety; urgency=medium
2518
3519 [ Albert Astals Cid ]
debian/control+52−28
@@ -5,49 +5,58 @@ 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
10−# to g++ so we don't try to run armhf g++
11+# to g++ so we don't try to run arm g++
1112# on an x86 CPU for example, when cross-compiling.
1213 g++:native,
13− libandroid-properties-dev,
1414 graphviz,
1515 gsettings-ubuntu-schemas (>= 0.0.2+14.10.20140815),
16+ libandroid-properties-dev,
1617 libconnectivity-qt1-dev (>= 0.7.1),
1718 libevdev-dev,
1819 libgeonames-dev (>= 0.2),
19− libgl1-mesa-dev[!armhf] | libgl-dev[!armhf],
20+ libgnome-desktop-3-dev,
21+ libgl1-mesa-dev[!arm64 !armhf] | libgl-dev[!arm64 !armhf],
2022 libgl1-mesa-dri,
21− libgles2-mesa-dev[armhf],
23+ libgles2-mesa-dev[arm64 armhf],
2224 libglib2.0-dev,
2325 libgsettings-qt-dev,
2426 libhardware-dev,
27+ liblightdm-qt5-3-dev,
2528 libpam0g-dev,
2629 libpay2-dev,
2730 libpulse-dev,
28− libqmenumodel-dev (>= 0.2.9),
31+ libqmenumodel-dev (>= 0.2.10),
2932 libqt5svg5-dev,
3033 libqt5xmlpatterns5-dev,
3134 libsystemsettings-dev,
32− libubuntugestures5-dev,
33− libubuntugestures5-private-dev,
35+ libubuntu-app-launch2-dev,
36+ libubuntu-download-manager-common-dev,
37+ libubuntugestures5-dev (>= 1.3.2030),
38+ libubuntugestures5-private-dev (>= 1.3.2030),
3439 libudev-dev,
35− libunity-api-dev (>= 7.113),
40+ libudm-common-dev,
41+ libunity-api-dev (>= 7.119),
3642 libusermetricsoutput1-dev,
3743# Need those X11 libs touch emulation from mouse events in manual QML tests on a X11 desktop
38− libx11-dev[!armhf],
39− libxcb1-dev[!armhf],
40− libxi-dev[!armhf],
44+ libx11-dev[!arm64 !armhf],
45+ libxcb1-dev[!arm64 !armhf],
46+ libxi-dev[!arm64 !armhf],
4147# End of X11 libs
4248 pkg-config,
4349 python3-all:any,
4450 python3-setuptools,
4551 qml-module-qt-labs-folderlistmodel,
52+ qml-module-qtmultimedia (>= 5.4.1-1ubuntu19~overlay2),
4653 qml-module-qtquick-layouts,
4754 qml-module-qtquick-xmllistmodel,
4855 qml-module-qtquick2,
4956 qml-module-qtsysteminfo,
5057 qml-module-qttest,
58+ qml-module-ubuntu-components (>= 1.3.2030) | qml-module-ubuntu-components-gles (>= 1.3.2030),
59+ qml-module-ubuntu-web,
5160 qt5-default,
5261 qtbase5-dev (>= 5.4),
5362 qtbase5-dev-tools,
@@ -55,11 +64,8 @@ Build-Depends: cmake,
5564 qtdeclarative5-dev (>= 5.4),
5665 qtdeclarative5-dev-tools,
5766 qtdeclarative5-private-dev (>= 5.4),
58− qtdeclarative5-qtmultimedia-plugin (>= 5.4.1-1ubuntu19~overlay2),
5967 qtdeclarative5-ubuntu-content1,
60− qtdeclarative5-ubuntu-settings-components (>= 0.7),
61− qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 1.3.1845) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 1.3.1845),
62− qtdeclarative5-ubuntu-web-plugin,
68+ qtdeclarative5-ubuntu-settings-components (>= 0.11),
6369 ttf-ubuntu-font-family,
6470Standards-Version: 3.9.4
6571Homepage: http://launchpad.net/unity
@@ -72,15 +78,26 @@ XS-Testsuite: autopkgtest
7278X-Ubuntu-Use-Langpack: yes
7379
7480Package: indicators-client
75−Architecture: amd64 armhf i386
76−Depends: qmenumodel-qml (>= 0.2.9),
77− qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 1.3.1845) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 1.3.1845),
81+Architecture: any
82+Depends: qmenumodel-qml (>= 0.2.10),
83+ qml-module-ubuntu-components (>= 1.3.2030) | qml-module-ubuntu-components-gles (>= 1.3.2030),
7884 unity8 (= ${binary:Version}),
7985 ${misc:Depends},
8086 ${shlibs:Depends},
8187Description: Indicators client test application
8288 This package contains the client application for indicators used by autopilot
8389
90+Package: unity8-greeter
91+Architecture: any
92+Depends: unity8 (= ${binary:Version}),
93+ unity-system-compositor,
94+ ${misc:Depends},
95+ ${shlibs:Depends}
96+Recommends: lightdm
97+Provides: lightdm-greeter
98+Description: The Unity8 Greeter
99+ The Unity 8 greeter is the primary login greeter for Ubuntu devices.
100+
84101Package: unity-scope-tool
85102Architecture: any
86103Depends: unity8-common (= ${source:Version}),
@@ -101,10 +118,12 @@ Depends: dmz-cursor-theme,
101118 gsettings-desktop-schemas,
102119 libcap2-bin,
103120 libglib2.0-bin,
104− qmenumodel-qml (>= 0.2.9),
121+ qmenumodel-qml (>= 0.2.10),
122+ qml-module-biometryd,
105123 qml-module-qt-labs-folderlistmodel,
106124 qml-module-qtquick-xmllistmodel,
107125 qml-module-qtsysteminfo,
126+ qml-module-ubuntu-web,
108127 qtdeclarative5-qtmir-plugin (>= 0.4.8),
109128 qtdeclarative5-ubuntu-telephony0.1,
110129 qtdeclarative5-ubuntu-web-plugin,
@@ -115,12 +134,15 @@ Depends: dmz-cursor-theme,
115134 unity8-private | unity-launcher-impl,
116135 ${misc:Depends},
117136 ${shlibs:Depends},
118−Recommends: indicator-session,
137+Recommends: indicator-keyboard,
138+ indicator-session,
139+ unity-greeter-session-broadcast,
119140 unity-scope-click,
120− unity-scope-mediascanner2,
141+Suggests: unity-scope-mediascanner2,
121142Breaks: indicator-network (<< 0.5.1+14.10.20141014),
122143 ubuntu-touch-session (<< 0.107),
123144 unity8-greeter (<< 7.89),
145+ ubuntu-keyboard (<< 0.100),
124146Replaces: ubuntu-touch-session (<< 0.82~),
125147 unity8-greeter (<< 7.89),
126148Conflicts: ubuntu-system-settings-wizard,
@@ -130,12 +152,14 @@ Description: Unity 8 shell
130152Package: unity8-common
131153Architecture: all
132154Depends: qml-module-qtquick-layouts,
133− qtdeclarative5-ubuntu-settings-components (>= 0.7),
134− qtdeclarative5-ubuntu-thumbnailer0.1 | ubuntu-thumbnailer-impl,
135− qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 1.3.1845) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 1.3.1845),
155+ qml-module-ubuntu-components (>= 1.3.2030) | qml-module-ubuntu-components-gles (>= 1.3.2030),
156+ qml-module-ubuntu-thumbnailer0.1 | ubuntu-thumbnailer-impl,
157+ qtdeclarative5-ubuntu-settings-components (>= 0.11),
136158 qtdeclarative5-unity-notifications-plugin (>= 0.1.2) | unity-notifications-impl,
159+ qttranslations5-l10n,
137160 ubuntu-thumbnailer-impl-0,
138− unity-application-impl-17,
161+ ubuntu-wallpapers,
162+ unity-application-impl-22,
139163 unity-notifications-impl-3,
140164 unity-plugin-scopes | unity-scopes-impl,
141165 unity-scopes-impl-12,
@@ -162,7 +186,7 @@ Depends: autopilot-qt5 (>= 1.4),
162186 python3-fixtures,
163187 python3-gi,
164188 qttestability-autopilot (>= 1.4),
165− ubuntu-ui-toolkit-autopilot (>= 1.3.1845),
189+ ubuntu-ui-toolkit-autopilot (>= 1.3.2030),
166190 unity-scope-click,
167191 unity8 (= ${source:Version}),
168192 unity8-fake-env (= ${source:Version}),
@@ -181,7 +205,7 @@ Pre-Depends: ${misc:Pre-Depends},
181205Depends: ${misc:Depends},
182206 ${shlibs:Depends},
183207Provides: unity-application-impl,
184− unity-application-impl-16,
208+ unity-application-impl-22,
185209Replaces: unity8-autopilot (<< 8.02+15.04.20150422-0ubuntu1)
186210Description: Fake environment for running Unity 8 shell
187211 Provides fake implementations of some QML modules used by Unity 8 shell
@@ -191,7 +215,7 @@ Package: unity8-private
191215Architecture: any
192216Multi-Arch: same
193217Pre-Depends: ${misc:Pre-Depends},
194−Depends: accountsservice-ubuntu-schemas (>= 0.0.5),
218+Depends: accountsservice-ubuntu-schemas (>= 0.0.7),
195219 gsettings-ubuntu-schemas (>= 0.0.2+14.10.20140815),
196220 libhardware2,
197221 pay-service,
debian/rules+7−2
@@ -29,10 +29,15 @@ 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
3740override_dh_shlibdeps:
38− dh_shlibdeps -XlibMockLightDM-qml.so
41+ # Some mock libraries link against liblightdm-qt5-3.so which we want to
42+ # avoid, since we only really link against our mock one, not the system one.
43+ dh_shlibdeps -XlibMockLightDM-qml.so -XlibMockAccountsService-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+2−1
@@ -4,7 +4,8 @@ usr/lib/*/unity8/qml/Cursor
44usr/lib/*/unity8/qml/Dash
55usr/lib/*/unity8/qml/GlobalShortcut
66usr/lib/*/unity8/qml/Greeter
7−usr/lib/*/unity8/qml/IntegratedLightDM
7+usr/lib/*/unity8/qml/ImageCache
8+usr/lib/*/unity8/qml/LightDM
89usr/lib/*/unity8/qml/Lights
910usr/lib/*/unity8/qml/Powerd
1011usr/lib/*/unity8/qml/ScreenshotDirectory
debian/unity8.install+2−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/
@@ -15,7 +16,7 @@ usr/share/unity8/DeviceConfiguration.qml
1516usr/share/unity8/OrientedShell.qml
1617usr/share/unity8/DisabledScreenNotice.qml
1718usr/share/unity8/Shell.qml
18−usr/share/unity8/Stages
19+usr/share/unity8/Stage
1920usr/share/unity8/Tutorial
2021usr/share/unity8/Wizard
2122usr/share/url-dispatcher/urls/unity8-dash.url-dispatcher
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+}
include/paths.h.in+34−25
@@ -1,8 +1,5 @@
11/*
2− * Copyright (C) 2012 Canonical, Ltd.
3− *
4− * Authors:
5− * Ugo Riboni <ugo.riboni@canonical.com>
2+ * Copyright (C) 2012-2016 Canonical, Ltd.
63 *
74 * This program is free software; you can redistribute it and/or modify
85 * it under the terms of the GNU General Public License as published by
@@ -17,8 +14,7 @@
1714 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1815 */
1916
20−#ifndef PATHS_H
21−#define PATHS_H
17+#pragma once
2218
2319// Qt
2420#include <QtCore/QCoreApplication>
@@ -27,10 +23,25 @@
2723#include <QtQml/QQmlEngine>
2824#include <QStandardPaths>
2925
26+inline QString installRoot() {
27+ static QString installRoot;
28+ static bool installRootSet = false;
29+ if (!installRootSet) {
30+ QString snapRoot = QFile::decodeName(qgetenv("SNAP"));
31+ if (!snapRoot.isEmpty() && QCoreApplication::applicationDirPath() ==
32+ QDir(snapRoot + QStringLiteral("@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@")).canonicalPath()) {
33+ installRoot = snapRoot;
34+ } else if (QCoreApplication::applicationDirPath() ==
35+ QDir(QStringLiteral("@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@")).canonicalPath()) {
36+ installRoot = QStringLiteral("");
37+ }
38+ installRootSet = true;
39+ }
40+ return installRoot;
41+}
42+
3043inline bool isRunningInstalled() {
31− static bool installed = (QCoreApplication::applicationDirPath() ==
32− QDir(QStringLiteral("@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@")).canonicalPath());
33− return installed;
44+ return !installRoot().isNull();
3445}
3546
3647inline QString buildDirectory() {
@@ -45,24 +56,24 @@ inline QString sourceDirectory() {
4556
4657inline QString translationDirectory() {
4758 if (isRunningInstalled()) {
48− return QStringLiteral("@CMAKE_INSTALL_PREFIX@/share/locale");
59+ return installRoot() + QStringLiteral("@CMAKE_INSTALL_PREFIX@/share/locale");
4960 } else {
50− return QString(buildDirectory() + "/po/locale");
61+ return buildDirectory() + QStringLiteral("/po/locale");
5162 }
5263}
5364
5465inline QString qmlDirectory() {
5566 if (isRunningInstalled()) {
56− return QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_APP_DIR@/");
67+ return installRoot() + QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_APP_DIR@/");
5768 } else {
58− return QString(sourceDirectory() + "/qml");
69+ return sourceDirectory() + QStringLiteral("/qml");
5970 }
6071}
6172
6273inline QStringList overrideImportPaths() {
6374 QStringList paths;
6475 if (!isRunningInstalled()) {
65− paths << QString(buildDirectory() + "/plugins");
76+ paths << buildDirectory() + QStringLiteral("/plugins");
6677 }
6778 return paths;
6879}
@@ -70,9 +81,9 @@ inline QStringList overrideImportPaths() {
7081inline QStringList nonMirImportPaths() {
7182 QStringList paths;
7283 if (isRunningInstalled()) {
73− paths << QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/nonmirplugins");
84+ paths << installRoot() + QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/nonmirplugins");
7485 } else {
75− paths << QString(buildDirectory() + "/nonmirplugins");
86+ paths << buildDirectory() + QStringLiteral("/nonmirplugins");
7687 }
7788 return paths;
7889}
@@ -80,23 +91,23 @@ inline QStringList nonMirImportPaths() {
8091inline QStringList fallbackImportPaths() {
8192 QStringList paths;
8293 if (isRunningInstalled()) {
83− paths << QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@");
84− paths << QStringLiteral("@USS_PRIVATE_PLUGINDIR@");
85− paths << QStringLiteral("@SHELL_PLUGINDIR@");
86− paths << QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/mocks");
94+ paths << installRoot() + QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@");
95+ paths << installRoot() + QStringLiteral("@USS_PRIVATE_PLUGINDIR@");
96+ paths << installRoot() + QStringLiteral("@SHELL_PLUGINDIR@");
97+ paths << installRoot() + QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/mocks");
8798 } else {
8899 paths << QStringLiteral("@USS_PRIVATE_PLUGINDIR@");
89100 paths << QStringLiteral("@SHELL_PLUGINDIR@");
90− paths << QString(buildDirectory() + "/tests/mocks");
101+ paths << buildDirectory() + QStringLiteral("/tests/mocks");
91102 }
92103 return paths;
93104}
94105
95106inline QString mockPluginsDir() {
96107 if (isRunningInstalled()) {
97− return QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/mocks");
108+ return installRoot() + QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_INSTALL_QML@/mocks");
98109 } else {
99− return QString(buildDirectory() + "/tests/mocks");
110+ return buildDirectory() + QStringLiteral("/tests/mocks");
100111 }
101112}
102113
@@ -137,5 +148,3 @@ inline void appendImportPaths(QQmlEngine *engine, const QStringList &paths)
137148 }
138149 engine->setImportPathList(importPathList);
139150}
140−
141−#endif
plugins/AccountsService/AccountsService.cpp+41−3
@@ -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")
@@ -66,9 +68,9 @@ Q_DECLARE_METATYPE(StringMapList)
6668QVariant primaryButtonConverter(const QVariant &value)
6769{
6870 QString stringValue = value.toString();
69− if (stringValue == "left") {
71+ if (stringValue == QLatin1String("left")) {
7072 return QVariant::fromValue(0);
71− } else if (stringValue == "right") {
73+ } else if (stringValue == QLatin1String("right")) {
7274 return QVariant::fromValue(1); // Mir is less clear on this -- any non-zero value is the same
7375 } else {
7476 return QVariant::fromValue(0); // default to left
@@ -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,34 @@ QStringList AccountsService::keymaps() const
274284 return {QStringLiteral("us")};
275285}
276286
287+void AccountsService::setKeymaps(const QStringList &keymaps)
288+{
289+ if (keymaps.isEmpty()) {
290+ qWarning() << "Setting empty keymaps is not supported";
291+ return;
292+ }
293+
294+ StringMapList result;
295+ Q_FOREACH(const QString &keymap, keymaps) {
296+ StringMap map;
297+ map.insert(QStringLiteral("xkb"), keymap);
298+ result.append(map);
299+ }
300+
301+ setProperty(IFACE_ACCOUNTS_USER, PROP_INPUT_SOURCES, QVariant::fromValue(result));
302+ Q_EMIT keymapsChanged();
303+}
304+
305+uint AccountsService::failedFingerprintLogins() const
306+{
307+ return getProperty(IFACE_UNITY_PRIVATE, PROP_FAILED_FINGERPRINT_LOGINS).toUInt();
308+}
309+
310+void AccountsService::setFailedFingerprintLogins(uint failedFingerprintLogins)
311+{
312+ setProperty(IFACE_UNITY_PRIVATE, PROP_FAILED_FINGERPRINT_LOGINS, failedFingerprintLogins);
313+}
314+
277315uint AccountsService::failedLogins() const
278316{
279317 return getProperty(IFACE_UNITY_PRIVATE, PROP_FAILED_LOGINS).toUInt();
plugins/AccountsService/AccountsService.h+15−4
@@ -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
@@ -72,9 +79,7 @@ class AccountsService: public QObject
7279 NOTIFY hereLicensePathChanged)
7380 Q_PROPERTY(QString realName READ realName WRITE setRealName NOTIFY realNameChanged)
7481 Q_PROPERTY(QString email READ email WRITE setEmail NOTIFY emailChanged)
75− Q_PROPERTY(QStringList keymaps
76− READ keymaps
77− NOTIFY keymapsChanged)
82+ Q_PROPERTY(QStringList keymaps READ keymaps WRITE setKeymaps NOTIFY keymapsChanged)
7883
7984public:
8085 enum PasswordDisplayHint {
@@ -91,6 +96,7 @@ public:
9196 void setDemoEdges(bool demoEdges);
9297 QStringList demoEdgesCompleted() const;
9398 Q_INVOKABLE void markDemoEdgeCompleted(const QString &edge);
99+ bool enableFingerprintIdentification() const;
94100 bool enableLauncherWhileLocked() const;
95101 bool enableIndicatorsWhileLocked() const;
96102 QString backgroundFile() const;
@@ -98,6 +104,8 @@ public:
98104 PasswordDisplayHint passwordDisplayHint() const;
99105 uint failedLogins() const;
100106 void setFailedLogins(uint failedLogins);
107+ uint failedFingerprintLogins() const;
108+ void setFailedFingerprintLogins(uint failedFingerprintLogins);
101109 bool hereEnabled() const;
102110 void setHereEnabled(bool enabled);
103111 QString hereLicensePath() const;
@@ -107,17 +115,20 @@ public:
107115 QString email() const;
108116 void setEmail(const QString &email);
109117 QStringList keymaps() const;
118+ void setKeymaps(const QStringList &keymaps);
110119
111120Q_SIGNALS:
112121 void userChanged();
113122 void demoEdgesChanged();
114123 void demoEdgesCompletedChanged();
124+ void enableFingerprintIdentificationChanged();
115125 void enableLauncherWhileLockedChanged();
116126 void enableIndicatorsWhileLockedChanged();
117127 void backgroundFileChanged();
118128 void statsWelcomeScreenChanged();
119129 void passwordDisplayHintChanged();
120130 void failedLoginsChanged();
131+ void failedFingerprintLoginsChanged();
121132 void hereEnabledChanged();
122133 void hereLicensePathChanged();
123134 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+2−1
@@ -15,7 +15,8 @@ add_subdirectory(AccountsService)
1515add_subdirectory(Cursor)
1616add_subdirectory(GlobalShortcut)
1717add_subdirectory(Greeter)
18−add_subdirectory(IntegratedLightDM)
18+add_subdirectory(ImageCache)
19+add_subdirectory(LightDM)
1920add_subdirectory(Lights)
2021add_subdirectory(Dash)
2122add_subdirectory(Powerd)
plugins/Cursor/CMakeLists.txt+2−2
@@ -28,6 +28,6 @@ target_link_libraries(Cursor-qml
2828 ${QT5PLATFORM_SUPPORT_LDFLAGS}
2929)
3030
31−qt5_use_modules(Cursor-qml Qml Quick DBus Network Gui Sql Concurrent Svg)
31+qt5_use_modules(Cursor-qml Qml Quick Svg)
3232
33−add_unity8_plugin(Cursor 1.0 Cursor TARGETS Cursor-qml)
33+add_unity8_plugin(Cursor 1.1 Cursor TARGETS Cursor-qml)
plugins/Cursor/Cursor.qml+29−11
@@ -16,6 +16,7 @@
1616
1717import QtQuick 2.4
1818import Cursor 1.1
19+import Powerd 0.1
1920
2021MousePointer {
2122 id: mousePointer
@@ -24,21 +25,38 @@ MousePointer {
2425 id: imageInfo
2526 themeName: mousePointer.themeName
2627 cursorName: mousePointer.cursorName
28+ cursorHeight: mousePointer.height
2729 }
2830
29− AnimatedSprite {
30− x: -imageInfo.hotspot.x
31− y: -imageInfo.hotspot.y
32− source: "image://cursor/" + mousePointer.themeName + "/" + mousePointer.cursorName
31+ Loader {
32+ active: mousePointer.visible && imageInfo.frameCount > 1
33+ sourceComponent: AnimatedSprite {
34+ x: -imageInfo.hotspot.x
35+ y: -imageInfo.hotspot.y
36+ source: imageInfo.imageSource
3337
34− interpolate: false
38+ interpolate: false
3539
36− width: imageInfo.frameWidth
37− height: imageInfo.frameHeight
40+ width: imageInfo.frameWidth
41+ height: imageInfo.frameHeight
3842
39− frameCount: imageInfo.frameCount
40− frameDuration: imageInfo.frameDuration
41− frameWidth: imageInfo.frameWidth
42− frameHeight: imageInfo.frameHeight
43+ frameCount: imageInfo.frameCount
44+ frameDuration: imageInfo.frameDuration
45+ frameWidth: imageInfo.frameWidth
46+ frameHeight: imageInfo.frameHeight
47+
48+ running: Powerd.status === Powerd.On
49+ }
50+ }
51+
52+ Loader {
53+ active: mousePointer.visible && imageInfo.frameCount === 1
54+ sourceComponent: Image {
55+ x: -imageInfo.hotspot.x
56+ y: -imageInfo.hotspot.y
57+ source: imageInfo.imageSource
58+ width: sourceSize.width
59+ height: sourceSize.height
60+ }
4361 }
4462}
plugins/Cursor/CursorImageInfo.cpp+23−13
@@ -19,17 +19,23 @@
1919CursorImageInfo::CursorImageInfo(QObject *parent)
2020 : QObject(parent)
2121{
22− m_updateTimer.setInterval(0);
23− m_updateTimer.setSingleShot(true);
24− connect(&m_updateTimer, &QTimer::timeout, this, &CursorImageInfo::update);
2522}
2623
2724void CursorImageInfo::setCursorName(const QString &cursorName)
2825{
2926 if (cursorName != m_cursorName) {
3027 m_cursorName = cursorName;
28+ update();
3129 Q_EMIT cursorNameChanged();
32− scheduleUpdate();
30+ }
31+
32+}
33+void CursorImageInfo::setCursorHeight(qreal cursorHeight)
34+{
35+ if (cursorHeight != m_cursorHeight) {
36+ m_cursorHeight = cursorHeight;
37+ update();
38+ Q_EMIT cursorHeightChanged();
3339 }
3440}
3541
@@ -37,27 +43,21 @@ void CursorImageInfo::setThemeName(const QString &themeName)
3743{
3844 if (m_themeName != themeName) {
3945 m_themeName = themeName;
46+ update();
4047 Q_EMIT themeNameChanged();
41− scheduleUpdate();
42− }
43−}
44−
45−void CursorImageInfo::scheduleUpdate()
46−{
47− if (!m_updateTimer.isActive()) {
48− m_updateTimer.start();
4948 }
5049}
5150
5251void CursorImageInfo::update()
5352{
54− m_cursorImage = CursorImageProvider::instance()->fetchCursor(m_themeName, m_cursorName);
53+ m_cursorImage = CursorImageProvider::instance()->fetchCursor(m_themeName, m_cursorName, (int) m_cursorHeight);
5554
5655 Q_EMIT hotspotChanged();
5756 Q_EMIT frameWidthChanged();
5857 Q_EMIT frameHeightChanged();
5958 Q_EMIT frameCountChanged();
6059 Q_EMIT frameDurationChanged();
60+ Q_EMIT imageSourceChanged();
6161}
6262
6363QPoint CursorImageInfo::hotspot() const
@@ -104,3 +104,13 @@ int CursorImageInfo::frameDuration() const
104104 return 0;
105105 }
106106}
107+
108+QUrl CursorImageInfo::imageSource() const
109+{
110+ auto urlString = QString("image://cursor/%1/%2/%3")
111+ .arg(m_themeName)
112+ .arg(m_cursorName)
113+ .arg(m_cursorHeight);
114+
115+ return QUrl(urlString);
116+}
plugins/Cursor/CursorImageInfo.h+10−4
@@ -21,7 +21,7 @@
2121
2222#include <QObject>
2323#include <QString>
24−#include <QTimer>
24+#include <QUrl>
2525
2626class CursorImageInfo : public QObject
2727{
@@ -29,12 +29,14 @@ class CursorImageInfo : public QObject
2929
3030 Q_PROPERTY(QString themeName READ themeName WRITE setThemeName NOTIFY themeNameChanged)
3131 Q_PROPERTY(QString cursorName READ cursorName WRITE setCursorName NOTIFY cursorNameChanged)
32+ Q_PROPERTY(qreal cursorHeight READ cursorHeight WRITE setCursorHeight NOTIFY cursorHeightChanged)
3233
3334 Q_PROPERTY(QPoint hotspot READ hotspot NOTIFY hotspotChanged)
3435 Q_PROPERTY(qreal frameWidth READ frameWidth NOTIFY frameWidthChanged)
3536 Q_PROPERTY(qreal frameHeight READ frameHeight NOTIFY frameHeightChanged)
3637 Q_PROPERTY(int frameCount READ frameCount NOTIFY frameCountChanged)
3738 Q_PROPERTY(int frameDuration READ frameDuration NOTIFY frameDurationChanged)
39+ Q_PROPERTY(QUrl imageSource READ imageSource NOTIFY imageSourceChanged)
3840
3941public:
4042 CursorImageInfo(QObject *parent = nullptr);
@@ -45,30 +47,34 @@ public:
4547 QString cursorName() const { return m_cursorName; }
4648 void setCursorName(const QString &);
4749
50+ qreal cursorHeight() const { return m_cursorHeight; }
51+ void setCursorHeight(qreal);
52+
4853 QPoint hotspot() const;
4954 qreal frameWidth() const;
5055 qreal frameHeight() const;
5156 int frameCount() const;
5257 int frameDuration() const;
58+ QUrl imageSource() const;
5359
5460Q_SIGNALS:
5561 void themeNameChanged();
5662 void cursorNameChanged();
63+ void cursorHeightChanged();
5764 void hotspotChanged();
5865 void frameWidthChanged();
5966 void frameHeightChanged();
6067 void frameCountChanged();
6168 void frameDurationChanged();
69+ void imageSourceChanged();
6270
6371private Q_SLOTS:
6472 void update();
6573
6674private:
67− void scheduleUpdate();
68− QTimer m_updateTimer;
69−
7075 QString m_themeName;
7176 QString m_cursorName;
77+ qreal m_cursorHeight{0};
7278
7379 CursorImage *m_cursorImage{nullptr};
7480};
plugins/Cursor/CursorImageProvider.cpp+34−22
@@ -27,7 +27,7 @@ CursorImageProvider *CursorImageProvider::m_instance = nullptr;
2727/////
2828// BuiltInCursorImage
2929
30−BuiltInCursorImage::BuiltInCursorImage()
30+BuiltInCursorImage::BuiltInCursorImage(int cursorHeight)
3131{
3232 const char *svgString =
3333 "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>"
@@ -42,12 +42,14 @@ BuiltInCursorImage::BuiltInCursorImage()
4242 " d=\"M 20.504,50.94931 460.42533,518.14486 266.47603,515.61948 366.48114,719.16522 274.05218,770.68296 172.53185,559.56112 20.504,716.13476 Z\" />"
4343 "</svg>";
4444
45− qimage = QImage(20, 32, QImage::Format_ARGB32);
45+ // NB: Original image dimension is 20x32. Ensure aspect ratio is kept
46+ qimage = QImage((20./32.)*cursorHeight, cursorHeight, QImage::Format_ARGB32);
4647 qimage.fill(Qt::transparent);
4748 QPainter imagePainter(&qimage);
4849
4950 frameWidth = qimage.width();
5051 frameHeight = qimage.height();
52+ requestedHeight = cursorHeight;
5153
5254 QSvgRenderer *svgRenderer = new QSvgRenderer(QByteArray(svgString));
5355 svgRenderer->render(&imagePainter);
@@ -81,11 +83,9 @@ CustomCursorImage::CustomCursorImage(const QCursor &cursor)
8183/////
8284// XCursorImage
8385
84−XCursorImage::XCursorImage(const QString &theme, const QString &file)
86+XCursorImage::XCursorImage(const QString &theme, const QString &file, int preferredCursorHeightPx)
8587{
86− // TODO: Consider grid unit value
87− // Hardcoding to a medium size for now
88− int preferredCursorHeightPx = 32;
88+ requestedHeight = preferredCursorHeightPx;
8989
9090 XcursorImages *xcursorImages = XcursorLibraryLoadImages(QFile::encodeName(file), QFile::encodeName(theme),
9191 preferredCursorHeightPx);
@@ -96,7 +96,7 @@ XCursorImage::XCursorImage(const QString &theme, const QString &file)
9696 frameCount = xcursorImages->nimage;
9797
9898 for (int i = 0; i < xcursorImages->nimage; ++i) {
99− XcursorImage *xcursorImage = xcursorImages->images[0];
99+ XcursorImage *xcursorImage = xcursorImages->images[i];
100100 if (frameWidth < (int)xcursorImage->width) {
101101 frameWidth = xcursorImage->width;
102102 }
@@ -235,34 +235,43 @@ CursorImageProvider::~CursorImageProvider()
235235 m_instance = nullptr;
236236}
237237
238−QImage CursorImageProvider::requestImage(const QString &cursorThemeAndName, QSize *size, const QSize & /*requestedSize*/)
238+QImage CursorImageProvider::requestImage(const QString &cursorThemeAndNameAndHeight, QSize *size, const QSize & /*requestedSize*/)
239239{
240− CursorImage *cursorImage = fetchCursor(cursorThemeAndName);
240+ CursorImage *cursorImage = fetchCursor(cursorThemeAndNameAndHeight);
241241 size->setWidth(cursorImage->qimage.width());
242242 size->setHeight(cursorImage->qimage.height());
243243
244244 return cursorImage->qimage;
245245}
246246
247−CursorImage *CursorImageProvider::fetchCursor(const QString &cursorThemeAndName)
247+CursorImage *CursorImageProvider::fetchCursor(const QString &cursorThemeAndNameAndHeight)
248248{
249249 QString themeName;
250250 QString cursorName;
251+ int cursorHeight;
251252 {
252− QStringList themeAndNameList = cursorThemeAndName.split('/');
253− if (themeAndNameList.size() != 2) {
253+ QStringList themeAndNameList = cursorThemeAndNameAndHeight.split('/');
254+ if (themeAndNameList.size() != 3) {
254255 return nullptr;
255256 }
256257 themeName = themeAndNameList[0];
257258 cursorName = themeAndNameList[1];
259+
260+ bool ok;
261+ cursorHeight = themeAndNameList[2].toInt(&ok);
262+ if (!ok) {
263+ cursorHeight = 32;
264+ qWarning().nospace() << "CursorImageProvider: invalid cursor height ("<<themeAndNameList[2]<<")."
265+ " Falling back to "<<cursorHeight<<" pixels";
266+ }
258267 }
259268
260− return fetchCursor(themeName, cursorName);
269+ return fetchCursor(themeName, cursorName, cursorHeight);
261270}
262271
263−CursorImage *CursorImageProvider::fetchCursor(const QString &themeName, const QString &cursorName)
272+CursorImage *CursorImageProvider::fetchCursor(const QString &themeName, const QString &cursorName, int cursorHeight)
264273{
265− CursorImage *cursorImage = fetchCursorHelper(themeName, cursorName);
274+ CursorImage *cursorImage = fetchCursorHelper(themeName, cursorName, cursorHeight);
266275
267276 // Try some fallbacks
268277 if (cursorImage->qimage.isNull()) {
@@ -271,7 +280,7 @@ CursorImage *CursorImageProvider::fetchCursor(const QString &themeName, const QS
271280 int i = 0;
272281 while (cursorImage->qimage.isNull() && i < fallbackNames.count()) {
273282 qDebug().nospace() << "CursorImageProvider: "<< cursorName <<" not found, trying " << fallbackNames.at(i);
274− cursorImage = fetchCursorHelper(themeName, fallbackNames.at(i));
283+ cursorImage = fetchCursorHelper(themeName, fallbackNames.at(i), cursorHeight);
275284 ++i;
276285 }
277286 }
@@ -281,14 +290,14 @@ CursorImage *CursorImageProvider::fetchCursor(const QString &themeName, const QS
281290 if (cursorImage->qimage.isNull() && cursorName != QLatin1String("left_ptr")) {
282291 qDebug() << "CursorImageProvider:" << cursorName
283292 << "not found (nor its fallbacks, if any). Going for \"left_ptr\" as a last resort.";
284− cursorImage = fetchCursorHelper(themeName, QStringLiteral("left_ptr"));
293+ cursorImage = fetchCursorHelper(themeName, QStringLiteral("left_ptr"), cursorHeight);
285294 }
286295
287296 if (cursorImage->qimage.isNull()) {
288297 // finally, go for the built-in cursor
289298 qWarning() << "CursorImageProvider: couldn't find any cursors. Using the built-in one";
290− if (!m_builtInCursorImage) {
291− m_builtInCursorImage.reset(new BuiltInCursorImage);
299+ if (!m_builtInCursorImage || m_builtInCursorImage->requestedHeight != cursorHeight) {
300+ m_builtInCursorImage.reset(new BuiltInCursorImage(cursorHeight));
292301 }
293302 cursorImage = m_builtInCursorImage.data();
294303 }
@@ -296,17 +305,20 @@ CursorImage *CursorImageProvider::fetchCursor(const QString &themeName, const QS
296305 return cursorImage;
297306}
298307
299−CursorImage *CursorImageProvider::fetchCursorHelper(const QString &themeName, const QString &cursorName)
308+CursorImage *CursorImageProvider::fetchCursorHelper(const QString &themeName, const QString &cursorName, int cursorHeight)
300309{
301310 if (cursorName == QLatin1String("blank")) {
302311 return &m_blankCursorImage;
303− } else if (cursorName == QLatin1String("custom")) {
312+ } else if (cursorName.startsWith(QLatin1String("custom"))) {
304313 return m_customCursorImage.data();
305314 } else {
306315 QMap<QString, CursorImage*> &themeCursors = m_cursors[themeName];
307316
308317 if (!themeCursors.contains(cursorName)) {
309− themeCursors[cursorName] = new XCursorImage(themeName, cursorName);
318+ themeCursors[cursorName] = new XCursorImage(themeName, cursorName, cursorHeight);
319+ } else if (themeCursors[cursorName]->requestedHeight != cursorHeight) {
320+ delete themeCursors.take(cursorName);
321+ themeCursors[cursorName] = new XCursorImage(themeName, cursorName, cursorHeight);
310322 }
311323
312324 return themeCursors[cursorName];
plugins/Cursor/CursorImageProvider.h+9−6
@@ -42,17 +42,20 @@ public:
4242 int frameHeight{0};
4343 int frameCount{1};
4444 int frameDuration{40};
45+
46+ // Requested height when creating this cursor.
47+ int requestedHeight{0};
4548};
4649
4750class XCursorImage : public CursorImage {
4851public:
49− XCursorImage(const QString &theme, const QString &file);
52+ XCursorImage(const QString &theme, const QString &file, int preferredCursorHeightPx);
5053 virtual ~XCursorImage();
5154};
5255
5356class BuiltInCursorImage : public CursorImage {
5457public:
55− BuiltInCursorImage();
58+ BuiltInCursorImage(int cursorHeight);
5659};
5760
5861class BlankCursorImage : public CursorImage {
@@ -74,15 +77,15 @@ public:
7477 static CursorImageProvider *instance() { return m_instance; }
7578
7679
77− QImage requestImage(const QString &cursorName, QSize *size, const QSize &requestedSize) override;
80+ QImage requestImage(const QString &cursorThemeAndNameAndHeight, QSize *size, const QSize &requestedSize) override;
7881
79− CursorImage *fetchCursor(const QString &themeName, const QString &cursorName);
82+ CursorImage *fetchCursor(const QString &themeName, const QString &cursorName, int cursorHeight);
8083
8184 void setCustomCursor(const QCursor &customCursor);
8285
8386private:
84− CursorImage *fetchCursor(const QString &cursorThemeAndName);
85− CursorImage *fetchCursorHelper(const QString &themeName, const QString &cursorName);
87+ CursorImage *fetchCursor(const QString &cursorThemeAndNameAndHeight);
88+ CursorImage *fetchCursorHelper(const QString &themeName, const QString &cursorName, int cursorHeight);
8689
8790 // themeName -> (cursorName -> cursorImage)
8891 // TODO: discard old, unused, cursors
plugins/Cursor/MousePointer.cpp+97−15
@@ -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
@@ -22,6 +22,7 @@
2222
2323#include <QQuickWindow>
2424#include <QGuiApplication>
25+#include <QtMath>
2526
2627#include <qpa/qwindowsysteminterface.h>
2728
@@ -43,29 +44,83 @@ void MousePointer::handleMouseEvent(ulong timestamp, QPointF movement, Qt::Mouse
4344 Q_EMIT mouseMoved();
4445 }
4546
46− qreal newX = x() + movement.x();
47− if (newX < 0) {
47+ m_accumulatedMovement += movement;
48+ // don't apply the fractional part
49+ QPointF appliedMovement(int(m_accumulatedMovement.x()), int(m_accumulatedMovement.y()));
50+ m_accumulatedMovement -= appliedMovement;
51+
52+ qreal newX = x() + appliedMovement.x();
53+ qreal newY = y() + appliedMovement.y();
54+ const qreal sceneWidth = parentItem()->width();
55+ const qreal sceneHeight = parentItem()->height();
56+
57+ if (newX <= 0 && newY < m_topBoundaryOffset) { // top left corner
58+ const auto distance = qSqrt(qPow(newX, 2) + qPow(newY-m_topBoundaryOffset, 2));
59+ Q_EMIT pushedTopLeftCorner(qAbs(distance), buttons);
60+ m_pushing = true;
61+ } else if (newX >= sceneWidth-1 && newY < m_topBoundaryOffset) { // top right corner
62+ const auto distance = qSqrt(qPow(newX-sceneWidth, 2) + qPow(newY-m_topBoundaryOffset, 2));
63+ Q_EMIT pushedTopRightCorner(qAbs(distance), buttons);
64+ m_pushing = true;
65+ } else if (newX < 0 && newY >= sceneHeight-1) { // bottom left corner
66+ const auto distance = qSqrt(qPow(newX, 2) + qPow(newY-sceneHeight, 2));
67+ Q_EMIT pushedBottomLeftCorner(qAbs(distance), buttons);
68+ m_pushing = true;
69+ } else if (newX >= sceneWidth-1 && newY >= sceneHeight-1) { // bottom right corner
70+ const auto distance = qSqrt(qPow(newX-sceneWidth, 2) + qPow(newY-sceneHeight, 2));
71+ Q_EMIT pushedBottomRightCorner(qAbs(distance), buttons);
72+ m_pushing = true;
73+ } else if (newX < 0) { // left edge
4874 Q_EMIT pushedLeftBoundary(qAbs(newX), buttons);
49− newX = 0;
50− } else if (newX > parentItem()->width()) {
51− Q_EMIT pushedRightBoundary(newX - parentItem()->width(), buttons);
52− newX = parentItem()->width();
75+ m_pushing = true;
76+ } else if (newX >= sceneWidth) { // right edge
77+ Q_EMIT pushedRightBoundary(newX - (sceneWidth - 1), buttons);
78+ m_pushing = true;
79+ } else if (newY < m_topBoundaryOffset) { // top edge
80+ Q_EMIT pushedTopBoundary(qAbs(newY - m_topBoundaryOffset), buttons);
81+ m_pushing = true;
82+ } else if (Q_LIKELY(newX > 0 && newX < sceneWidth-1 && newY > 0 && newY < sceneHeight-1)) { // normal pos, not pushing
83+ if (m_pushing) {
84+ Q_EMIT pushStopped();
85+ m_pushing = false;
86+ }
5387 }
54− setX(newX);
5588
56− qreal newY = y() + movement.y();
57− if (newY < 0) {
58− newY = 0;
59− } else if (newY > parentItem()->height()) {
60− newY = parentItem()->height();
61− }
62− setY(newY);
89+ applyItemConfinement(newX, newY);
90+
91+ setX(qBound(0.0, newX, sceneWidth - 1));
92+ setY(qBound(0.0, newY, sceneHeight - 1));
6393
6494 QPointF scenePosition = mapToItem(nullptr, QPointF(0, 0));
6595 QWindowSystemInterface::handleMouseEvent(window(), timestamp, scenePosition /*local*/, scenePosition /*global*/,
6696 buttons, modifiers);
6797}
6898
99+void MousePointer::applyItemConfinement(qreal &newX, qreal &newY)
100+{
101+ Q_ASSERT(parentItem() != nullptr);
102+
103+ if (m_confiningItem.isNull()) {
104+ return;
105+ }
106+
107+ QRectF confiningItemGeometry(0, 0, m_confiningItem->width(), m_confiningItem->height());
108+
109+ QRectF confiningRect = m_confiningItem->mapRectToItem(parentItem(), confiningItemGeometry);
110+
111+ if (newX < confiningRect.x()) {
112+ newX = confiningRect.x();
113+ } else if (newX > confiningRect.right()) {
114+ newX = confiningRect.right();
115+ }
116+
117+ if (newY < confiningRect.y()) {
118+ newY = confiningRect.y();
119+ } else if (newY > confiningRect.bottom()) {
120+ newY = confiningRect.bottom();
121+ }
122+}
123+
69124void MousePointer::handleWheelEvent(ulong timestamp, QPoint angleDelta, Qt::KeyboardModifiers modifiers)
70125{
71126 if (!parentItem()) {
@@ -77,6 +132,20 @@ void MousePointer::handleWheelEvent(ulong timestamp, QPoint angleDelta, Qt::Keyb
77132 QPoint() /* pixelDelta */, angleDelta, modifiers, Qt::ScrollUpdate);
78133}
79134
135+int MousePointer::topBoundaryOffset() const
136+{
137+ return m_topBoundaryOffset;
138+}
139+
140+void MousePointer::setTopBoundaryOffset(int topBoundaryOffset)
141+{
142+ if (m_topBoundaryOffset == topBoundaryOffset)
143+ return;
144+
145+ m_topBoundaryOffset = topBoundaryOffset;
146+ Q_EMIT topBoundaryOffsetChanged(topBoundaryOffset);
147+}
148+
80149void MousePointer::itemChange(ItemChange change, const ItemChangeData &value)
81150{
82151 if (change == ItemSceneChange) {
@@ -151,3 +220,16 @@ void MousePointer::setCustomCursor(const QCursor &customCursor)
151220{
152221 CursorImageProvider::instance()->setCustomCursor(customCursor);
153222}
223+
224+QQuickItem* MousePointer::confiningItem() const
225+{
226+ return m_confiningItem.data();
227+}
228+
229+void MousePointer::setConfiningItem(QQuickItem *item)
230+{
231+ if (item != m_confiningItem) {
232+ m_confiningItem = item;
233+ Q_EMIT confiningItemChanged();
234+ }
235+}
plugins/Cursor/MousePointer.h+27−1
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2015 Canonical, Ltd.
2+ * Copyright (C) 2015-2016 Canonical, Ltd.
33 *
44 * This program is free software: you can redistribute it and/or modify it under
55 * the terms of the GNU Lesser General Public License version 3, as published by
@@ -27,6 +27,8 @@
2727
2828class MousePointer : public MirMousePointerInterface {
2929 Q_OBJECT
30+ Q_PROPERTY(QQuickItem* confiningItem READ confiningItem WRITE setConfiningItem NOTIFY confiningItemChanged)
31+ Q_PROPERTY(int topBoundaryOffset READ topBoundaryOffset WRITE setTopBoundaryOffset NOTIFY topBoundaryOffsetChanged)
3032public:
3133 MousePointer(QQuickItem *parent = nullptr);
3234
@@ -38,6 +40,12 @@ public:
3840
3941 void setCustomCursor(const QCursor &) override;
4042
43+ QQuickItem* confiningItem() const;
44+ void setConfiningItem(QQuickItem*);
45+
46+ int topBoundaryOffset() const;
47+ void setTopBoundaryOffset(int topBoundaryOffset);
48+
4149public Q_SLOTS:
4250 void handleMouseEvent(ulong timestamp, QPointF movement, Qt::MouseButtons buttons,
4351 Qt::KeyboardModifiers modifiers) override;
@@ -46,7 +54,16 @@ public Q_SLOTS:
4654Q_SIGNALS:
4755 void pushedLeftBoundary(qreal amount, Qt::MouseButtons buttons);
4856 void pushedRightBoundary(qreal amount, Qt::MouseButtons buttons);
57+ void pushedTopBoundary(qreal amount, Qt::MouseButtons buttons);
58+ void pushedTopLeftCorner(qreal amount, Qt::MouseButtons buttons);
59+ void pushedTopRightCorner(qreal amount, Qt::MouseButtons buttons);
60+ void pushedBottomLeftCorner(qreal amount, Qt::MouseButtons buttons);
61+ void pushedBottomRightCorner(qreal amount, Qt::MouseButtons buttons);
62+ void pushStopped();
4963 void mouseMoved();
64+ void confiningItemChanged();
65+
66+ void topBoundaryOffsetChanged(int topBoundaryOffset);
5067
5168protected:
5269 void itemChange(ItemChange change, const ItemChangeData &value) override;
@@ -56,11 +73,20 @@ private Q_SLOTS:
5673
5774private:
5875 void registerWindow(QWindow *window);
76+ void applyItemConfinement(qreal &newX, qreal &newY);
5977
6078 QPointer<QWindow> m_registeredWindow;
6179 QPointer<QScreen> m_registeredScreen;
6280 QString m_cursorName;
6381 QString m_themeName;
82+
83+ // Accumulated, unapplied, mouse movement.
84+ QPointF m_accumulatedMovement;
85+
86+ QPointer<QQuickItem> m_confiningItem;
87+
88+ int m_topBoundaryOffset{0};
89+ bool m_pushing{false};
6490};
6591
6692#endif // MOUSEPOINTER_H
plugins/Dash/CMakeLists.txt+1
@@ -11,6 +11,7 @@ include_directories(
1111 ${CMAKE_CURRENT_SOURCE_DIR}
1212 ${CMAKE_CURRENT_BINARY_DIR}
1313)
14+
1415include_directories(
1516 SYSTEM
1617 ${Qt5Qml_PRIVATE_INCLUDE_DIRS}
plugins/Dash/CardAttributes.qml+1−1
@@ -62,7 +62,7 @@ GridLayout {
6262 elide: Text.ElideRight
6363 maximumLineCount: 1
6464 font.weight: "style" in modelData && modelData["style"] === "highlighted" ? Font.Bold : Font.Light
65− fontSize: "small"
65+ fontSize: "x-small"
6666 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale)
6767 color: grid.color
6868 }
plugins/Dash/CardCreator.js+165−131
@@ -25,10 +25,10 @@ var kBackgroundLoaderCode = 'Loader {\n\
2525 objectName: "backgroundLoader"; \n\
2626 anchors.fill: parent; \n\
2727 asynchronous: %3; \n\
28− visible: status == Loader.Ready; \n\
28+ visible: status === Loader.Ready; \n\
2929 sourceComponent: UbuntuShape { \n\
3030 objectName: "background"; \n\
31− radius: "medium"; \n\
31+ radius: "small"; \n\
3232 aspect: { \n\
3333 switch (root.backgroundShapeStyle) { \n\
3434 case "inset": return UbuntuShape.Inset; \n\
@@ -64,67 +64,91 @@ var kArtUbuntuShapeCode = 'UbuntuShape { \n\
6464 anchors.fill: parent; \n\
6565 source: artImage; \n\
6666 sourceFillMode: UbuntuShape.PreserveAspectCrop; \n\
67− radius: "medium"; \n\
67+ radius: "small"; \n\
6868 aspect: %1; \n\
6969 }';
7070
7171var kArtProportionalShapeCode = 'ProportionalShape { \n\
72− anchors.fill: parent; \n\
72+ anchors.left: parent.left; \n\
73+ anchors.right: parent.right; \n\
7374 source: artImage; \n\
7475 aspect: UbuntuShape.DropShadow; \n\
7576 }';
7677
77−// %1 is used as anchors of artShapeHolder
78+// %1 is used as anchors of artShapeLoader
7879// %2 is used as image width
7980// %3 is used as image height
8081// %4 is whether the image should be visible
81−// %5 is used as aspect ratio fallback
82−// %6 is whether the loader should be asynchronous or not
83−// %7 is the shape code we want to use
84−// %8 is injected as code to artImage
85−// %9 is used as image fallback
86−var kArtShapeHolderCode = 'Item { \n\
87− id: artShapeHolder; \n\
88− height: root.fixedArtShapeSize.height > 0 ? root.fixedArtShapeSize.height : artShapeLoader.height; \n\
89− width: root.fixedArtShapeSize.width > 0 ? root.fixedArtShapeSize.width : artShapeLoader.width; \n\
82+// %5 is whether the loader should be asynchronous or not
83+// %6 is the shape code we want to use
84+// %7 is injected as code to artImage
85+// %8 is used as image fallback
86+var kArtShapeHolderCode = 'Loader { \n\
87+ id: artShapeLoader; \n\
88+ height: root.fixedArtShapeSize.height; \n\
89+ width: root.fixedArtShapeSize.width; \n\
9090 anchors { %1 } \n\
91− Loader { \n\
92− id: artShapeLoader; \n\
93− objectName: "artShapeLoader"; \n\
94− readonly property string cardArt: cardData && cardData["art"] || %9; \n\
95− onCardArtChanged: { if (item) { item.image.source = cardArt; } } \n\
96− active: cardArt != ""; \n\
97− asynchronous: %6; \n\
98− visible: status == Loader.Ready; \n\
99− sourceComponent: Item { \n\
100− id: artShape; \n\
101− objectName: "artShape"; \n\
102− visible: image.status == Image.Ready; \n\
103− readonly property alias image: artImage; \n\
91+ objectName: "artShapeLoader"; \n\
92+ readonly property string cardArt: cardData && cardData["art"] || %8; \n\
93+ onCardArtChanged: { if (item) { item.image.source = cardArt; } } \n\
94+ active: cardArt != ""; \n\
95+ asynchronous: %5; \n\
96+ visible: status === Loader.Ready; \n\
97+ sourceComponent: Item { \n\
98+ id: artShape; \n\
99+ objectName: "artShape"; \n\
100+ visible: image.status === Image.Ready; \n\
101+ readonly property alias image: artImage; \n\
102+ %6 \n\
103+ width: root.fixedArtShapeSize.width; \n\
104+ height: root.fixedArtShapeSize.height; \n\
105+ CroppedImageMinimumSourceSize { \n\
106+ id: artImage; \n\
107+ objectName: "artImage"; \n\
108+ source: artShapeLoader.cardArt; \n\
109+ asynchronous: %5; \n\
110+ visible: %4; \n\
111+ width: %2; \n\
112+ height: %3; \n\
113+ %7 \n\
114+ } \n\
115+ } \n\
116+ }\n';
117+
118+// %1 is used as anchors of artShapeLoader
119+// %2 is used as image width
120+// %3 is used as image height
121+// %4 is whether the image should be visible
122+// %5 is whether the loader should be asynchronous or not
123+// %6 is the shape code we want to use
124+// %7 is injected as code to artImage
125+// %8 is used as image fallback
126+var kArtShapeHolderCodeCardToolCard = 'Loader { \n\
127+ id: artShapeLoader; \n\
128+ anchors { %1 } \n\
129+ objectName: "artShapeLoader"; \n\
130+ readonly property string cardArt: cardData && cardData["art"] || %8; \n\
131+ onCardArtChanged: { if (item) { item.image.source = cardArt; } } \n\
132+ active: cardArt != ""; \n\
133+ asynchronous: %5; \n\
134+ visible: status === Loader.Ready; \n\
135+ sourceComponent: Item { \n\
136+ id: artShape; \n\
137+ objectName: "artShape"; \n\
138+ visible: image.status === Image.Ready; \n\
139+ readonly property alias image: artImage; \n\
140+ %6 \n\
141+ width: image.status !== Image.Ready ? 0 : image.width; \n\
142+ height: image.status !== Image.Ready ? 0 : image.height; \n\
143+ CroppedImageMinimumSourceSize { \n\
144+ id: artImage; \n\
145+ objectName: "artImage"; \n\
146+ source: artShapeLoader.cardArt; \n\
147+ asynchronous: %5; \n\
148+ visible: %4; \n\
149+ width: %2; \n\
150+ height: %3; \n\
104151 %7 \n\
105− readonly property real fixedArtShapeSizeAspect: (root.fixedArtShapeSize.height > 0 && root.fixedArtShapeSize.width > 0) ? root.fixedArtShapeSize.width / root.fixedArtShapeSize.height : -1; \n\
106− readonly property real aspect: fixedArtShapeSizeAspect > 0 ? fixedArtShapeSizeAspect : %5; \n\
107− Component.onCompleted: { updateWidthHeightBindings(); } \n\
108− Connections { target: root; onFixedArtShapeSizeChanged: updateWidthHeightBindings(); } \n\
109− function updateWidthHeightBindings() { \n\
110− if (root.fixedArtShapeSize.height > 0 && root.fixedArtShapeSize.width > 0) { \n\
111− width = root.fixedArtShapeSize.width; \n\
112− height = root.fixedArtShapeSize.height; \n\
113− } else { \n\
114− width = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.width }); \n\
115− height = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.height }); \n\
116− } \n\
117− } \n\
118− CroppedImageMinimumSourceSize { \n\
119− id: artImage; \n\
120− objectName: "artImage"; \n\
121− source: artShapeLoader.cardArt; \n\
122− asynchronous: %6; \n\
123− visible: %4; \n\
124− width: %2; \n\
125− height: %3; \n\
126− %8 \n\
127− } \n\
128152 } \n\
129153 } \n\
130154 }\n';
@@ -142,7 +166,7 @@ var kAudioButtonCode = 'AbstractButton { \n\
142166 UbuntuShape { \n\
143167 anchors.fill: parent; \n\
144168 visible: parent.pressed; \n\
145− radius: "medium"; \n\
169+ radius: "small"; \n\
146170 } \n\
147171 Rectangle { \n\
148172 color: Qt.rgba(0, 0, 0, 0.5); \n\
@@ -182,15 +206,15 @@ var kAudioButtonCode = 'AbstractButton { \n\
182206var kOverlayLoaderCode = 'Loader { \n\
183207 id: overlayLoader; \n\
184208 readonly property real overlayHeight: %2 + units.gu(2); \n\
185− anchors.fill: artShapeHolder; \n\
209+ anchors.fill: artShapeLoader; \n\
186210 active: artShapeLoader.active && artShapeLoader.item && artShapeLoader.item.image.status === Image.Ready || false; \n\
187211 asynchronous: %1; \n\
188− visible: showHeader && status == Loader.Ready; \n\
212+ visible: showHeader && status === Loader.Ready; \n\
189213 sourceComponent: UbuntuShapeOverlay { \n\
190214 id: overlay; \n\
191215 property real luminance: Style.luminance(overlayColor); \n\
192216 aspect: UbuntuShape.Flat; \n\
193− radius: "medium"; \n\
217+ radius: "small"; \n\
194218 overlayColor: cardData && cardData["overlayColor"] || "#99000000"; \n\
195219 overlayRect: Qt.rect(0, 1 - overlayLoader.overlayHeight / height, 1, 1); \n\
196220 } \n\
@@ -242,7 +266,7 @@ var kMascotShapeLoaderCode = 'Loader { \n\
242266 objectName: "mascotShapeLoader"; \n\
243267 asynchronous: %2; \n\
244268 active: mascotImage.status === Image.Ready; \n\
245− visible: showHeader && active && status == Loader.Ready; \n\
269+ visible: showHeader && active && status === Loader.Ready; \n\
246270 width: units.gu(6); \n\
247271 height: units.gu(5.625); \n\
248272 sourceComponent: UbuntuShape { image: mascotImage } \n\
@@ -284,7 +308,7 @@ var kTitleLabelCode = 'Label { \n\
284308 visible: showHeader %3; \n\
285309 width: %4; \n\
286310 text: root.title; \n\
287− font.weight: cardData && cardData["subtitle"] ? Font.DemiBold : Font.Normal; \n\
311+ font.weight: Font.Normal; \n\
288312 horizontalAlignment: %5; \n\
289313 }\n';
290314
@@ -307,13 +331,15 @@ var kEmblemIconCode = 'Icon { \n\
307331 }\n';
308332
309333// %1 is used as anchors of touchdown effect
310−var kTouchdownCode = 'UbuntuShape { \n\
311− id: touchdown; \n\
312− objectName: "touchdown"; \n\
334+var kTouchdownCode = 'Loader { \n\
335+ active: root.pressed; \n\
313336 anchors { %1 } \n\
314− visible: root.pressed; \n\
315− radius: "medium"; \n\
316− borderSource: "radius_pressed.sci" \n\
337+ sourceComponent: UbuntuShape { \n\
338+ objectName: "touchdown"; \n\
339+ anchors.fill: parent; \n\
340+ radius: "small"; \n\
341+ borderSource: "radius_pressed.sci" \n\
342+ } \n\
317343 }\n';
318344
319345// %1 is used as anchors of subtitleLabel
@@ -373,7 +399,8 @@ var kSummaryLabelCode = 'Label { \n\
373399 elide: Text.ElideRight; \n\
374400 text: cardData && cardData["summary"] || ""; \n\
375401 height: text ? implicitHeight : 0; \n\
376− fontSize: "small"; \n\
402+ fontSize: "x-small"; \n\
403+ font.weight: Font.Light; \n\
377404 color: %3; \n\
378405 }\n';
379406
@@ -405,7 +432,7 @@ function sanitizeColor(colorString) {
405432 return colorString;
406433}
407434
408−function cardString(template, components, isCardTool, artShapeStyle) {
435+function cardString(template, components, isCardTool, artShapeStyle, categoryLayout) {
409436 var code;
410437
411438 var templateInteractive = (template == null ? true : (template["non-interactive"] !== undefined ? !template["non-interactive"] : true)) ? "true" : "false";
@@ -413,18 +440,19 @@ function cardString(template, components, isCardTool, artShapeStyle) {
413440 code = 'AbstractButton { \n\
414441 id: root; \n\
415442 property var cardData; \n\
416− property string backgroundShapeStyle: "inset"; \n\
443+ property string backgroundShapeStyle: "flat"; \n\
417444 property real fontScale: 1.0; \n\
418445 property var scopeStyle: null; \n\
419− %2\
420− property size fixedArtShapeSize: Qt.size(-1, -1); \n\
421446 readonly property string title: cardData && cardData["title"] || ""; \n\
422447 property bool showHeader: true; \n\
423448 implicitWidth: childrenRect.width; \n\
424449 enabled: %1; \n\
425450 \n'.arg(templateInteractive);
426451
427− code = code.arg(isCardTool ? "" : "property int fixedHeaderHeight: -1; \n");
452+ if (!isCardTool) {
453+ code += "property int fixedHeaderHeight: -1; \n\
454+ property size fixedArtShapeSize: Qt.size(-1, -1); \n";
455+ }
428456
429457 var hasArt = components["art"] && components["art"]["field"] || false;
430458 var hasSummary = components["summary"] || false;
@@ -481,39 +509,45 @@ function cardString(template, components, isCardTool, artShapeStyle) {
481509 }
482510
483511 if (hasArt) {
484− code += 'readonly property size artShapeSize: artShapeLoader.item ? Qt.size(artShapeLoader.item.width, artShapeLoader.item.height) : Qt.size(-1, -1);\n';
512+ var artShapeAspect;
513+ if (isCardTool) {
514+ code += 'readonly property size artShapeSize: artShapeLoader.item ? Qt.size(artShapeLoader.item.width, artShapeLoader.item.height) : Qt.size(-1, -1);\n';
515+
516+ var artShapeAspect = components["art"] && components["art"]["aspect-ratio"] || 1;
517+ if (isNaN(artShapeAspect)) {
518+ artShapeAspect = 1;
519+ }
520+ } else {
521+ artShapeAspect = "(root.fixedArtShapeSize.width / root.fixedArtShapeSize.height)";
522+ }
485523
486524 var widthCode, heightCode;
487525 var artAnchors;
488526 if (isHorizontal) {
489527 artAnchors = 'left: parent.left';
490528 if (hasMascot || hasTitle) {
491− widthCode = 'height * artShape.aspect'
529+ widthCode = 'height * ' + artShapeAspect;
492530 heightCode = 'headerHeight + 2 * units.gu(1)';
493531 } else {
494532 // This side of the else is a bit silly, who wants an horizontal layout without mascot and title?
495533 // So we define a "random" height of the image height + 2 gu for the margins
496− widthCode = 'height * artShape.aspect'
534+ widthCode = 'height * ' + artShapeAspect
497535 heightCode = 'units.gu(7.625)';
498536 }
499537 } else {
500538 artAnchors = 'horizontalCenter: parent.horizontalCenter;';
501539 widthCode = 'root.width'
502− heightCode = 'width / artShape.aspect';
540+ heightCode = 'width / ' + artShapeAspect;
503541 }
504542
505− var aspectRatio = components["art"] && components["art"]["aspect-ratio"] || 1;
506− if (isNaN(aspectRatio)) {
507− aspectRatio = 1;
508− }
509543 var fallback = !isCardTool && components["art"] && components["art"]["fallback"] || "";
510544 fallback = encodeURI(fallback);
511545 var fallbackStatusCode = "";
512546 var fallbackURICode = '""';
513547 if (fallback !== "") {
514− // fallbackStatusCode has %9 in it because we want to substitute it for fallbackURICode
515− // which in kArtShapeHolderCode is %9
516− fallbackStatusCode += 'onStatusChanged: if (status === Image.Error) source = %9;';
548+ // fallbackStatusCode has %8 in it because we want to substitute it for fallbackURICode
549+ // which in kArtShapeHolderCode is %8
550+ fallbackStatusCode += 'onStatusChanged: if (status === Image.Error) source = %8;';
517551 fallbackURICode = 'decodeURI("%1")'.arg(fallback);
518552 }
519553 var artShapeHolderShapeCode;
@@ -533,16 +567,16 @@ function cardString(template, components, isCardTool, artShapeStyle) {
533567 } else {
534568 artShapeHolderShapeCode = "";
535569 }
536− code += kArtShapeHolderCode.arg(artAnchors)
537− .arg(widthCode)
538− .arg(heightCode)
539− .arg(isConciergeMode ? "true" : "false")
540− .arg(aspectRatio)
541− .arg(asynchronous)
542− .arg(artShapeHolderShapeCode)
543− .arg(fallbackStatusCode)
544− .arg(fallbackURICode);
545− } else {
570+ var artShapeHolderCode = isCardTool ? kArtShapeHolderCodeCardToolCard : kArtShapeHolderCode;
571+ code += artShapeHolderCode.arg(artAnchors)
572+ .arg(widthCode)
573+ .arg(heightCode)
574+ .arg(isConciergeMode ? "true" : "false")
575+ .arg(asynchronous)
576+ .arg(artShapeHolderShapeCode)
577+ .arg(fallbackStatusCode)
578+ .arg(fallbackURICode);
579+ } else if (isCardTool) {
546580 code += 'readonly property size artShapeSize: Qt.size(-1, -1);\n'
547581 }
548582
@@ -553,15 +587,15 @@ function cardString(template, components, isCardTool, artShapeStyle) {
553587
554588 var headerVerticalAnchors;
555589 if (headerAsOverlay) {
556− headerVerticalAnchors = 'bottom: artShapeHolder.bottom; \n\
590+ headerVerticalAnchors = 'bottom: artShapeLoader.bottom; \n\
557591 bottomMargin: units.gu(1);\n';
558592 } else {
559593 if (hasArt) {
560594 if (isHorizontal) {
561− headerVerticalAnchors = 'top: artShapeHolder.top; \n\
595+ headerVerticalAnchors = 'top: artShapeLoader.top; \n\
562596 topMargin: units.gu(1);\n';
563597 } else {
564− headerVerticalAnchors = 'top: artShapeHolder.bottom; \n\
598+ headerVerticalAnchors = 'top: artShapeLoader.bottom; \n\
565599 topMargin: units.gu(1);\n';
566600 }
567601 } else {
@@ -573,7 +607,7 @@ function cardString(template, components, isCardTool, artShapeStyle) {
573607 var headerLeftAnchor;
574608 var headerLeftAnchorHasMargin = false;
575609 if (isHorizontal && hasArt) {
576− headerLeftAnchor = 'left: artShapeHolder.right; \n\
610+ headerLeftAnchor = 'left: artShapeLoader.right; \n\
577611 leftMargin: units.gu(1);\n';
578612 headerLeftAnchorHasMargin = true;
579613 } else if (isHorizontal && isAudio) {
@@ -827,7 +861,7 @@ function cardString(template, components, isCardTool, artShapeStyle) {
827861 var audioButtonWidth;
828862 var audioButtonHeight;
829863 if (hasArt) {
830− audioButtonAnchorsFill = 'artShapeHolder';
864+ audioButtonAnchorsFill = 'artShapeLoader';
831865 audioButtonWidth = 'undefined';
832866 audioButtonHeight = 'undefined';
833867 } else {
@@ -841,15 +875,15 @@ function cardString(template, components, isCardTool, artShapeStyle) {
841875
842876 if (hasSummary) {
843877 var summaryTopAnchor;
844− if (isHorizontal && hasArt) summaryTopAnchor = 'artShapeHolder.bottom';
845− else if (headerAsOverlay && hasArt) summaryTopAnchor = 'artShapeHolder.bottom';
878+ if (isHorizontal && hasArt) summaryTopAnchor = 'artShapeLoader.bottom';
879+ else if (headerAsOverlay && hasArt) summaryTopAnchor = 'artShapeLoader.bottom';
846880 else if (hasHeaderRow) summaryTopAnchor = 'row.bottom';
847881 else if (hasTitleContainer) summaryTopAnchor = 'headerTitleContainer.bottom';
848882 else if (hasMascot) summaryTopAnchor = 'mascotImage.bottom';
849883 else if (hasAttributes) summaryTopAnchor = 'attributesRow.bottom';
850884 else if (hasSubtitle) summaryTopAnchor = 'subtitleLabel.bottom';
851885 else if (hasTitle) summaryTopAnchor = 'titleLabel.bottom';
852− else if (hasArt) summaryTopAnchor = 'artShapeHolder.bottom';
886+ else if (hasArt) summaryTopAnchor = 'artShapeLoader.bottom';
853887 else summaryTopAnchor = 'parent.top';
854888
855889 var summaryColor;
@@ -864,24 +898,20 @@ function cardString(template, components, isCardTool, artShapeStyle) {
864898 code += kSummaryLabelCode.arg(summaryTopAnchor).arg(summaryTopMargin).arg(summaryColor);
865899 }
866900
867−// <<<<<<< TREE
868−// if (artShapeStyle != "shadow" && artShapeStyle != "icon") {
869−// var touchdownAnchors;
870−// =======
871901 if (hasSocialActions) {
872902 var socialAnchors;
873903 var socialTopAnchor;
874904
875905 if (hasSummary) socialTopAnchor = 'summary.bottom;';
876− else if (isHorizontal && hasArt) socialTopAnchor = 'artShapeHolder.bottom;';
877− else if (headerAsOverlay && hasArt) socialTopAnchor = 'artShapeHolder.bottom;';
906+ else if (isHorizontal && hasArt) socialTopAnchor = 'artShapeLoader.bottom;';
907+ else if (headerAsOverlay && hasArt) socialTopAnchor = 'artShapeLoader.bottom;';
878908 else if (hasHeaderRow) socialTopAnchor = 'row.bottom;';
879909 else if (hasTitleContainer) socialTopAnchor = 'headerTitleContainer.bottom;';
880910 else if (hasMascot) socialTopAnchor = 'mascotImage.bottom;';
881911 else if (hasAttributes) socialTopAnchor = 'attributesRow.bottom;';
882912 else if (hasSubtitle) socialTopAnchor = 'subtitleLabel.bottom;';
883913 else if (hasTitle) socialTopAnchor = 'titleLabel.bottom;';
884− else if (hasArt) socialTopAnchor = 'artShapeHolder.bottom;';
914+ else if (hasArt) socialTopAnchor = 'artShapeLoader.bottom;';
885915 else socialTopAnchor = 'parent.top';
886916
887917 socialAnchors = 'top: ' + socialTopAnchor + ' left: parent.left; right: parent.right; topMargin: units.gu(1);'
@@ -896,41 +926,45 @@ function cardString(template, components, isCardTool, artShapeStyle) {
896926 code += kSocialActionsRowCode.arg(socialAnchors).arg(socialColor);
897927 }
898928
899− if (artShapeStyle != "shadow" && artShapeStyle != "icon") {
929+ if (artShapeStyle != "shadow" && artShapeStyle != "icon" && !isCardTool) {
900930 var touchdownAnchors;
901931 if (hasBackground) {
902932 touchdownAnchors = 'fill: backgroundLoader';
903933 } else if (touchdownOnArtShape) {
904− touchdownAnchors = 'fill: artShapeHolder';
934+ touchdownAnchors = 'fill: artShapeLoader';
905935 } else {
906936 touchdownAnchors = 'fill: root'
907937 }
908938 code += kTouchdownCode.arg(touchdownAnchors);
909939 }
910940
911− var implicitHeight = 'implicitHeight: ';
912− if (hasSocialActions) {
913− implicitHeight += 'socialActionsRow.y + socialActionsRow.height + units.gu(1);\n';
914− } else if (hasSummary) {
915− implicitHeight += 'summary.y + summary.height + units.gu(1);\n';
916− } else if (isAudio) {
917− implicitHeight += 'audioButton.height;\n';
918− } else if (headerAsOverlay) {
919− implicitHeight += 'artShapeHolder.height;\n';
920− } else if (hasHeaderRow) {
921− implicitHeight += 'row.y + row.height + units.gu(1);\n';
922− } else if (hasMascot) {
923− implicitHeight += 'mascotImage.y + mascotImage.height;\n';
924− } else if (hasTitleContainer) {
925− implicitHeight += 'headerTitleContainer.y + headerTitleContainer.height + units.gu(1);\n';
926− } else if (hasAttributes) {
927− implicitHeight += 'attributesRow.y + attributesRow.height + units.gu(1);\n';
928− } else if (hasSubtitle) {
929− implicitHeight += 'subtitleLabel.y + subtitleLabel.height + units.gu(1);\n';
930− } else if (hasTitle) {
931− implicitHeight += 'titleLabel.y + titleLabel.height + units.gu(1);\n';
932− } else if (hasArt) {
933− implicitHeight += 'artShapeHolder.height;\n';
941+ if (isCardTool || categoryLayout !== "grid") {
942+ var implicitHeight = 'implicitHeight: ';
943+ if (hasSocialActions) {
944+ implicitHeight += 'socialActionsRow.y + socialActionsRow.height + units.gu(1);\n';
945+ } else if (hasSummary) {
946+ implicitHeight += 'summary.y + summary.height + units.gu(1);\n';
947+ } else if (isAudio) {
948+ implicitHeight += 'audioButton.height;\n';
949+ } else if (headerAsOverlay) {
950+ implicitHeight += 'artShapeLoader.height;\n';
951+ } else if (hasHeaderRow) {
952+ implicitHeight += 'row.y + row.height + units.gu(1);\n';
953+ } else if (hasMascot) {
954+ implicitHeight += 'mascotImage.y + mascotImage.height;\n';
955+ } else if (hasTitleContainer) {
956+ implicitHeight += 'headerTitleContainer.y + headerTitleContainer.height + units.gu(1);\n';
957+ } else if (hasAttributes) {
958+ implicitHeight += 'attributesRow.y + attributesRow.height + units.gu(1);\n';
959+ } else if (hasSubtitle) {
960+ implicitHeight += 'subtitleLabel.y + subtitleLabel.height + units.gu(1);\n';
961+ } else if (hasTitle) {
962+ implicitHeight += 'titleLabel.y + titleLabel.height + units.gu(1);\n';
963+ } else if (hasArt) {
964+ implicitHeight += 'artShapeLoader.height;\n';
965+ } else {
966+ implicitHeight = '';
967+ }
934968 } else {
935969 implicitHeight = '';
936970 }
@@ -941,13 +975,13 @@ function cardString(template, components, isCardTool, artShapeStyle) {
941975 return code;
942976}
943977
944−function createCardComponent(parent, template, components, isCardTool, artShapeStyle, identifier) {
978+function createCardComponent(parent, template, components, isCardTool, artShapeStyle, categoryLayout, identifier) {
945979 var imports = 'import QtQuick 2.4; \n\
946980 import Ubuntu.Components 1.3; \n\
947981 import Ubuntu.Settings.Components 0.1; \n\
948982 import Dash 0.1;\n\
949983 import Utils 0.1;\n';
950− var card = cardString(template, components, isCardTool, artShapeStyle);
984+ var card = cardString(template, components, isCardTool, artShapeStyle, categoryLayout);
951985 var code = imports + 'Component {\n' + card + '}\n';
952986
953987 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, artShapeStyle) {
26+ function getCardComponent(template, components, isCardTool, artShapeStyle, categoryLayout) {
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 + categoryLayout;
3333 var component = cache[allString];
3434 if (component === undefined) {
35− component = CardCreator.createCardComponent(root, template, components, isCardTool, artShapeStyle, allString);
35+ component = CardCreator.createCardComponent(root, template, components, isCardTool, artShapeStyle, categoryLayout, 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/DashAudioPlayer.qml+45−21
@@ -20,16 +20,22 @@ import QtMultimedia 5.6
2020import Dash 0.1
2121
2222QtObject {
23− readonly property real progress: audio.position / audio.duration
24− readonly property bool playing: audio.playbackState === Audio.PlayingState
25− readonly property bool paused: audio.playbackState === Audio.PausedState
26− readonly property bool stopped: audio.playbackState === Audio.StoppedState
27− readonly property alias position: audio.position
28− readonly property url currentSource: audio.playlist.currentItemSource
23+ id: root
24+ readonly property real progress: priv.audio ? priv.audio.position / priv.audio.duration : 0.0
25+ readonly property bool playing: priv.audio ? priv.audio.playbackState === Audio.PlayingState : false
26+ readonly property bool paused: priv.audio ? priv.audio.playbackState === Audio.PausedState : false
27+ readonly property bool stopped: priv.audio ? priv.audio.playbackState === Audio.StoppedState : true
28+ readonly property int position: priv.audio ? priv.audio.position : 0
29+ readonly property url currentSource: priv.audio ? priv.audio.playlist.currentItemSource : ""
30+ readonly property Playlist playlist: priv.audio ? priv.audio.playlist : null
2931
3032 function playSource(newSource, newPlaylist) {
33+ if (!priv.audio) {
34+ console.info("DashAudioPlayer: creating player");
35+ priv.audio = priv.audioComponent.createObject(root);
36+ }
3137 stop();
32− audio.playlist.clear();
38+ priv.audio.playlist.clear();
3339 if (newPlaylist) {
3440 // Look for newSource in newPlaylist
3541 var sourceIndex = -1;
@@ -48,35 +54,53 @@ QtObject {
4854 for (var i in newPlaylist) {
4955 urls.push(newPlaylist[i]);
5056 }
51− audio.playlist.addItems(urls);
52− audio.playlist.currentIndex = sourceIndex;
57+ priv.audio.playlist.addItems(urls);
58+ priv.audio.playlist.currentIndex = sourceIndex;
5359 } else {
54− audio.playlist.addItem(newSource);
55− audio.playlist.currentIndex = 0;
60+ priv.audio.playlist.addItem(newSource);
61+ priv.audio.playlist.currentIndex = 0;
5662 }
5763 play();
5864 }
5965
6066 function stop() {
61− audio.stop();
67+ if (priv.audio) {
68+ priv.audio.stop();
69+ }
6270 }
6371
6472 function play() {
65− audio.play();
73+ if (priv.audio) {
74+ priv.audio.play();
75+ }
6676 }
6777
6878 function pause() {
69− audio.pause();
79+ if (priv.audio) {
80+ priv.audio.pause();
81+ }
7082 }
7183
72− property QtObject audio: Audio {
73− id: audio
74− objectName: "audio"
75− playlist: Playlist {
76− objectName: "playlist"
84+ property QtObject priv: QtObject {
85+ id: priv
86+ property Audio audio: null
87+ property Component audioComponent: Component {
88+ Audio {
89+ playlist: Playlist {
90+ objectName: "playlist"
91+ }
92+ /* Remove player in case of error so it gets recreated next time
93+ * we need it. Happens if backend media player restarted, for
94+ * instance. qtmultimedia should probably handle this
95+ * transparently (LP: #1616425).
96+ */
97+ onError: {
98+ console.warn("DashAudioPlayer: error event (" +
99+ priv.audio.errorString + "), destroying");
100+ priv.audio.destroy();
101+ }
102+ }
77103 }
78−
79− onErrorStringChanged: console.warn("Dash Audio player error:", errorString)
80104 }
81105
82106 function lengthToString(s) {
plugins/Dash/abstractdashview.cpp+13
@@ -16,6 +16,8 @@
1616
1717#include "abstractdashview.h"
1818
19+#include <private/qquickitem_p.h>
20+
1921AbstractDashView::AbstractDashView()
2022 : m_delegateModel(nullptr)
2123 , m_asyncRequestedIndex(-1)
@@ -249,6 +251,7 @@ QQuickItem *AbstractDashView::createItem(int modelIndex, bool asynchronous)
249251 }
250252 return nullptr;
251253 } else {
254+ QQuickItemPrivate::get(item)->addItemChangeListener(this, QQuickItemPrivate::Geometry);
252255 addItemToView(modelIndex, item);
253256 return item;
254257 }
@@ -256,6 +259,7 @@ QQuickItem *AbstractDashView::createItem(int modelIndex, bool asynchronous)
256259
257260void AbstractDashView::releaseItem(QQuickItem *item)
258261{
262+ QQuickItemPrivate::get(item)->removeItemChangeListener(this, QQuickItemPrivate::Geometry);
259263 QQmlDelegateModel::ReleaseFlags flags = m_delegateModel->release(item);
260264 if (flags & QQmlDelegateModel::Destroyed) {
261265 item->setParentItem(nullptr);
@@ -294,6 +298,15 @@ void AbstractDashView::onModelUpdated(const QQmlChangeSet &changeSet, bool reset
294298 cleanupExistingItems();
295299 } else {
296300 processModelRemoves(changeSet.removes());
301+
302+ // The current AbstractDashViews do not support insertions that are not at the end
303+ // so reset if that happens
304+ Q_FOREACH(const QQmlChangeSet::Change insert, changeSet.inserts()) {
305+ if (insert.index < m_delegateModel->count() - 1) {
306+ cleanupExistingItems();
307+ break;
308+ }
309+ }
297310 }
298311 polish();
299312}
plugins/Dash/abstractdashview.h+2−1
@@ -23,9 +23,10 @@ class QAbstractItemModel;
2323class QQmlComponent;
2424
2525#include <private/qqmldelegatemodel_p.h>
26+#include <private/qquickitemchangelistener_p.h>
2627#include <qqmlinfo.h>
2728
28−class AbstractDashView : public QQuickItem
29+class AbstractDashView : public QQuickItem, public QQuickItemChangeListener
2930{
3031 Q_OBJECT
3132
plugins/Dash/graphics/music_progress_bg.png

Binary file not shown.

plugins/Dash/horizontaljournal.cpp+1−1
@@ -26,8 +26,8 @@
2626#include "horizontaljournal.h"
2727
2828#include <qqmlengine.h>
29−#include <private/qqmldelegatemodel_p.h>
3029#include <qqmlinfo.h>
30+#include <private/qqmldelegatemodel_p.h>
3131#include <private/qquickitem_p.h>
3232
3333HorizontalJournal::HorizontalJournal()
plugins/Dash/listviewwithpageheader.cpp+23−21
@@ -253,6 +253,7 @@ void ListViewWithPageHeader::setHeader(QQuickItem *headerItem)
253253 oldHeaderHeight = m_headerItem->height();
254254 oldHeaderY = m_headerItem->y();
255255 m_headerItem->setParentItem(nullptr);
256+ QQuickItemPrivate::get(m_headerItem)->removeItemChangeListener(this, QQuickItemPrivate::ImplicitHeight);
256257 }
257258 m_headerItem = headerItem;
258259 if (m_headerItem) {
@@ -284,9 +285,11 @@ void ListViewWithPageHeader::setSectionDelegate(QQmlComponent *delegate)
284285 m_sectionDelegate = delegate;
285286
286287 m_topSectionItem = getSectionItem(QString(), false /*watchGeometry*/);
287− m_topSectionItem->setZ(3);
288− QQuickItemPrivate::get(m_topSectionItem)->setCulled(true);
289− 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+ }
290293
291294 // TODO create sections for existing items
292295
@@ -584,6 +587,10 @@ void ListViewWithPageHeader::adjustHeader(qreal diff)
584587 } else {
585588 m_headerItem->setY(-m_minYExtent);
586589 }
590+ } else if (m_headerItemShownHeight == 0 && m_previousContentY > m_headerItem->y() && contentY() < m_headerItem->y()) {
591+ // The header was hidden but now that we've moved up (e.g. because of item removed) it's visible
592+ // make sure it isn't
593+ m_headerItem->setY(-m_minYExtent);
587594 }
588595 Q_EMIT headerItemShownHeightChanged();
589596 } else {
@@ -697,7 +704,9 @@ void ListViewWithPageHeader::reallyReleaseItem(ListItem *listItem)
697704 if (flags & QQmlDelegateModel::Destroyed) {
698705 item->setParentItem(nullptr);
699706 }
700− listItem->sectionItem()->deleteLater();
707+ if (listItem->sectionItem()) {
708+ listItem->sectionItem()->deleteLater();
709+ }
701710 delete listItem;
702711}
703712
@@ -763,7 +772,7 @@ QQuickItem *ListViewWithPageHeader::getSectionItem(const QString &sectionText, b
763772 delete nobj;
764773 } else {
765774 sectionItem->setProperty("text", sectionText);
766− sectionItem->setProperty("delegateIndex", -1);
775+ sectionItem->setProperty("delegate", QVariant());
767776 sectionItem->setZ(2);
768777 QQml_setParent_noEvent(sectionItem, m_clipItem);
769778 sectionItem->setParentItem(m_clipItem);
@@ -773,7 +782,7 @@ QQuickItem *ListViewWithPageHeader::getSectionItem(const QString &sectionText, b
773782 }
774783 m_sectionDelegate->completeCreate();
775784
776− if (watchGeometry) {
785+ if (watchGeometry && sectionItem) {
777786 QQuickItemPrivate::get(sectionItem)->addItemChangeListener(this, QQuickItemPrivate::Geometry);
778787 }
779788
@@ -920,7 +929,7 @@ ListViewWithPageHeader::ListItem *ListViewWithPageHeader::createItem(int modelIn
920929 polish();
921930 }
922931 if (listItem->sectionItem()) {
923− listItem->sectionItem()->setProperty("delegateIndex", modelIndex);
932+ listItem->sectionItem()->setProperty("delegate", QVariant::fromValue(listItem->m_item));
924933 }
925934 adjustMinYExtent();
926935 m_contentHeightDirty = true;
@@ -973,6 +982,7 @@ void ListViewWithPageHeader::onContentWidthChanged()
973982
974983void ListViewWithPageHeader::onHeightChanged()
975984{
985+ m_clipItem->setHeight(height() - m_headerItemShownHeight);
976986 polish();
977987}
978988
@@ -1113,7 +1123,7 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
11131123 for (int i = 0; i < m_visibleItems.count(); ++i) {
11141124 ListItem *item = m_visibleItems[i];
11151125 if (item->sectionItem()) {
1116− item->sectionItem()->setProperty("delegateIndex", m_firstVisibleIndex + i);
1126+ item->sectionItem()->setProperty("delegate", QVariant::fromValue(item->m_item));
11171127 }
11181128 }
11191129
@@ -1287,15 +1297,7 @@ void ListViewWithPageHeader::layout()
12871297
12881298 QQuickItemPrivate::get(m_topSectionItem)->setCulled(false);
12891299 m_topSectionItem->setY(topSectionStickPos);
1290− int delegateIndex = modelIndex;
1291− // Look for the first index with this section text
1292− while (delegateIndex > 0) {
1293− const QString prevSection = m_delegateModel->stringValue(delegateIndex - 1, m_sectionProperty);
1294− if (prevSection != section)
1295− break;
1296− delegateIndex--;
1297− }
1298− m_topSectionItem->setProperty("delegateIndex", delegateIndex);
1300+ m_topSectionItem->setProperty("delegate", QVariant::fromValue(item->m_item));
12991301 if (item->sectionItem()) {
13001302 QQuickItemPrivate::get(item->sectionItem())->setCulled(true);
13011303 }
@@ -1329,6 +1331,10 @@ void ListViewWithPageHeader::layout()
13291331 }
13301332 }
13311333 }
1334+ if (m_headerItem) {
1335+ const bool cullHeader = m_headerItem->y() + m_headerItem->height() < contentY();
1336+ QQuickItemPrivate::get(m_headerItem)->setCulled(cullHeader);
1337+ }
13321338 m_inLayout = false;
13331339}
13341340
@@ -1379,10 +1385,6 @@ void ListViewWithPageHeader::updatePolish()
13791385
13801386 m_contentHeightDirty = false;
13811387 adjustMinYExtent();
1382− if (contentHeight + m_minYExtent < height()) {
1383− // need this since in the previous call to adjustMinYExtent contentHeight is not set yet
1384− m_minYExtent = 0;
1385− }
13861388 m_inContentHeightKeepHeaderShown = m_headerItem && m_headerItem->y() == contentY();
13871389 setContentHeight(contentHeight);
13881390 m_inContentHeightKeepHeaderShown = false;
plugins/Dash/organicgrid.cpp+3−1
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2014 Canonical, Ltd.
2+ * Copyright (C) 2014, 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
@@ -16,6 +16,8 @@
1616
1717#include "organicgrid.h"
1818
19+#include <math.h>
20+
1921#include <private/qquickitem_p.h>
2022
2123OrganicGrid::OrganicGrid()
plugins/Dash/verticaljournal.cpp+12−2
@@ -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
@@ -27,6 +27,8 @@
2727 */
2828#include "verticaljournal.h"
2929
30+#include <math.h>
31+
3032#include <private/qquickitem_p.h>
3133
3234VerticalJournal::VerticalJournal()
@@ -94,7 +96,7 @@ void VerticalJournal::findTopModelIndexToAdd(int *modelIndex, qreal *yPos)
9496
9597 if (*modelIndex > 0) {
9698 Q_ASSERT(m_indexColumnMap.contains(*modelIndex));
97− while (m_indexColumnMap[*modelIndex] != columnToAddTo) {
99+ while (*modelIndex > 0 && m_indexColumnMap[*modelIndex] != columnToAddTo) {
98100 // We found out that we have to add to columnToAddTo
99101 // and thought that we had to add *modelIndex, but history tells
100102 // it is not correct, so find up from *modelIndex until we found the index
@@ -268,3 +270,11 @@ void VerticalJournal::processModelRemoves(const QVector<QQmlChangeSet::Change> &
268270 }
269271 }
270272}
273+
274+void VerticalJournal::itemGeometryChanged(QQuickItem * /*item*/, const QRectF &newGeometry, const QRectF &oldGeometry)
275+{
276+ const qreal heightDiff = newGeometry.height() - oldGeometry.height();
277+ if (heightDiff != 0) {
278+ relayout();
279+ }
280+}
plugins/Dash/verticaljournal.h+3
@@ -65,6 +65,9 @@ public:
6565 qreal columnWidth() const;
6666 void setColumnWidth(qreal columnWidth);
6767
68+protected:
69+ void itemGeometryChanged(QQuickItem *item, const QRectF &newGeometry, const QRectF &oldGeometry) override;
70+
6871Q_SIGNALS:
6972 void columnWidthChanged();
7073
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/ImageCache/CMakeLists.txtnew file+8
@@ -0,0 +1,8 @@
1+add_library(ImageCache-qml MODULE
2+ ImageCache.cpp
3+ plugin.cpp
4+ )
5+
6+qt5_use_modules(ImageCache-qml Gui Qml Quick)
7+
8+add_unity8_plugin(ImageCache 0.1 ImageCache TARGETS ImageCache-qml)
plugins/ImageCache/ImageCache.cppnew file+135
@@ -0,0 +1,135 @@
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 <QDateTime>
18+#include <QDebug>
19+#include <QDir>
20+#include <QUrl>
21+#include <QUrlQuery>
22+
23+#include "ImageCache.h"
24+
25+ImageCache::ImageCache()
26+ : QQuickImageProvider(QQmlImageProviderBase::Image,
27+ QQmlImageProviderBase::ForceAsynchronousImageLoading)
28+{
29+}
30+
31+QString ImageCache::imageCacheRoot()
32+{
33+ QString xdgCache(qgetenv("XDG_CACHE_HOME"));
34+ if (xdgCache.isEmpty()) {
35+ xdgCache = QDir::homePath() + QStringLiteral("/.cache");
36+ }
37+
38+ return QDir::cleanPath(xdgCache) + QStringLiteral("/unity8/imagecache");
39+}
40+
41+QFileInfo ImageCache::imagePath(const QUrl &image)
42+{
43+ QUrlQuery query(image);
44+
45+ auto name = query.queryItemValue(QStringLiteral("name"));
46+ if (name.isEmpty()) {
47+ name = QStringLiteral("/paths") + image.toLocalFile();
48+ } else {
49+ name = QStringLiteral("/names/") + name;
50+ }
51+
52+ return QFileInfo(imageCacheRoot() + name);
53+}
54+
55+bool ImageCache::needsUpdate(const QUrl &image, const QFileInfo &cachePath, const QSize &imageSize, const QSize &requestedSize, QSize &finalSize)
56+{
57+ if (!cachePath.exists())
58+ return true;
59+
60+ QFileInfo imageInfo(image.toLocalFile());
61+ if (imageInfo.lastModified() > cachePath.lastModified())
62+ return true;
63+
64+ QSize cacheSize(QImageReader(cachePath.filePath()).size());
65+ finalSize = calculateSize(imageSize, requestedSize);
66+ if (finalSize.isValid() && cacheSize != finalSize)
67+ return true;
68+
69+ return false;
70+}
71+
72+QSize ImageCache::calculateSize(const QSize &imageSize, const QSize &requestedSize)
73+{
74+ QSize finalSize(requestedSize);
75+
76+ if (finalSize.width() == 0) {
77+ finalSize.setWidth(imageSize.width() * (((double)finalSize.height()) / imageSize.height()));
78+ } else if (finalSize.height() == 0) {
79+ finalSize.setHeight(imageSize.height() * (((double)finalSize.width()) / imageSize.width()));
80+ }
81+
82+ return finalSize;
83+}
84+
85+QImage ImageCache::loadAndCacheImage(QImageReader &reader, const QFileInfo &cachePath, const QSize &finalSize)
86+{
87+ reader.setQuality(100);
88+ reader.setScaledSize(finalSize);
89+ auto format = reader.format(); // can't get this after reading
90+
91+ QImage loadedImage(reader.read());
92+ if (loadedImage.isNull()) {
93+ qWarning() << "ImageCache could not read image" << reader.fileName() << ":" << reader.errorString();
94+ return QImage();
95+ }
96+
97+ cachePath.dir().mkpath(QStringLiteral("."));
98+ loadedImage.save(cachePath.filePath(), format, 100);
99+
100+ return loadedImage;
101+}
102+
103+QImage ImageCache::requestImage(const QString &id, QSize *size, const QSize &requestedSize)
104+{
105+ QUrl image(id);
106+ QImageReader imageReader(image.toLocalFile());
107+ QSize imageSize(imageReader.size());
108+ QImage result;
109+
110+ // Early exit here, with no sourceSize, scaled-up sourceSize, or bad source image
111+ if ((requestedSize.width() <= 0 && requestedSize.height() <= 0) ||
112+ imageSize.isEmpty() ||
113+ requestedSize.height() >= imageSize.height() ||
114+ requestedSize.width() >= imageSize.width()) {
115+ // We're only interested in scaling down, not up.
116+ result = imageReader.read();
117+ *size = result.size();
118+ return result;
119+ }
120+
121+ auto cachePath = imagePath(image);
122+ QSize finalSize;
123+
124+ if (needsUpdate(image, cachePath, imageSize, requestedSize, finalSize)) {
125+ if (finalSize.isEmpty()) {
126+ finalSize = calculateSize(imageSize, requestedSize);
127+ }
128+ result = loadAndCacheImage(imageReader, cachePath, finalSize);
129+ } else {
130+ result = QImage(cachePath.filePath());
131+ }
132+
133+ *size = result.size();
134+ return result;
135+}
plugins/ImageCache/ImageCache.hnew file+53
@@ -0,0 +1,53 @@
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+#pragma once
18+
19+#include <QFileInfo>
20+#include <QImageReader>
21+#include <QQuickImageProvider>
22+#include <QSize>
23+
24+/**
25+ * This class accepts an id formulated like a URL. So you'd use something like:
26+ *
27+ * Image {
28+ * source: "image://unity8imagecache/file:///usr/share/..."
29+ * }
30+ *
31+ * Right now, we only support file:/// URLs. We do accept some flags though:
32+ *
33+ * ?name=NAME
34+ * - This will use NAME as the cache lookup key instead of the provided URL.
35+ *
36+ * We don't do any cleaning of old cached files yet. So you may want to always
37+ * provide a name to avoid leaving lots of files around.
38+ */
39+
40+class ImageCache: public QQuickImageProvider
41+{
42+public:
43+ ImageCache();
44+
45+ QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize) override;
46+
47+private:
48+ static QString imageCacheRoot();
49+ static QFileInfo imagePath(const QUrl &image);
50+ static bool needsUpdate(const QUrl &image, const QFileInfo &cachePath, const QSize &imageSize, const QSize &requestedSize, QSize &finalSize);
51+ static QSize calculateSize(const QSize &imageSize, const QSize &requestedSize);
52+ static QImage loadAndCacheImage(QImageReader &reader, const QFileInfo &cachePath, const QSize &finalSize);
53+};
plugins/ImageCache/plugin.cppnew file+39
@@ -0,0 +1,39 @@
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 <QQmlEngine>
18+
19+#include "ImageCache.h"
20+#include "plugin.h"
21+
22+#include <QtQml>
23+
24+void ImageCachePlugin::registerTypes(const char *uri)
25+{
26+ Q_ASSERT(uri == QLatin1String("ImageCache"));
27+
28+ qmlRegisterTypeNotAvailable(uri, 0, 1, "__ImageCacheIgnoreMe",
29+ QStringLiteral("Ignore this: QML plugins must contain at least one type"));
30+}
31+
32+void ImageCachePlugin::initializeEngine(QQmlEngine* engine, const char* uri)
33+{
34+ Q_ASSERT(uri == QLatin1String("ImageCache"));
35+
36+ QQmlExtensionPlugin::initializeEngine(engine, uri);
37+
38+ engine->addImageProvider("unity8imagecache", new ImageCache);
39+}
plugins/ImageCache/plugin.hnew file+31
@@ -0,0 +1,31 @@
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+#pragma once
18+
19+#include <QQmlExtensionPlugin>
20+
21+class QQmlEngine;
22+
23+class ImageCachePlugin : public QQmlExtensionPlugin
24+{
25+ Q_OBJECT
26+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
27+
28+public:
29+ void registerTypes(const char* uri) override;
30+ void initializeEngine(QQmlEngine* engine, const char* uri) override;
31+};
plugins/ImageCache/qmldirnew file+2
@@ -0,0 +1,2 @@
1+module ImageCache
2+plugin ImageCache-qml
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+33
@@ -0,0 +1,33 @@
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+ ${CMAKE_CURRENT_BINARY_DIR}
10+ )
11+
12+include_directories(
13+ SYSTEM
14+ ${LIBLIGHTDM_INCLUDE_DIRS}
15+ )
16+
17+
18+foreach(source_file ${QMLPLUGIN_SRC})
19+ list(APPEND RELATIVE_QMLPLUGIN_SRC ../${source_file})
20+endforeach()
21+
22+add_library(FullLightDM-qml MODULE
23+ ${RELATIVE_QMLPLUGIN_SRC}
24+ )
25+
26+target_link_libraries(FullLightDM-qml
27+ unity8-private
28+ ${LIBLIGHTDM_LDFLAGS}
29+ ${LIBUSERMETRICSOUTPUT_LDFLAGS}
30+ )
31+
32+qt5_use_modules(FullLightDM-qml DBus Gui Qml)
33+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−5
@@ -78,11 +78,6 @@ bool Greeter::showRemoteLoginHint() const
7878 return true;
7979}
8080
81−bool Greeter::lockHint () const
82−{
83− return false;
84−}
85−
8681QString Greeter::selectUserHint() const
8782{
8883 return QLatin1String("");
plugins/IntegratedLightDM/liblightdm/Greeter.h → plugins/LightDM/IntegratedLightDM/liblightdm/Greeter.hrenamed−2
@@ -45,7 +45,6 @@ class Q_DECL_EXPORT Greeter : public QObject
4545
4646 Q_PROPERTY(QString hostname READ hostname CONSTANT)
4747 Q_PROPERTY(bool hasGuestAccount READ hasGuestAccountHint CONSTANT)
48− Q_PROPERTY(bool locked READ lockHint CONSTANT)
4948
5049 Q_ENUMS(PromptType MessageType)
5150
@@ -68,7 +67,6 @@ public:
6867 bool hideUsersHint() const;
6968 bool showManualLoginHint() const;
7069 bool showRemoteLoginHint() const;
71− bool lockHint () const;
7270 bool hasGuestAccountHint() const;
7371 QString selectUserHint() const;
7472 bool selectGuestHint() const;
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−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
@@ -40,8 +40,6 @@ UsersModel::UsersModel(QObject *parent) :
4040 QAbstractListModel(parent),
4141 d_ptr(new UsersModelPrivate(this))
4242{
43− Q_D(UsersModel);
44−
4543 // Extend roleNames (we want to keep the "display" role)
4644 QHash<int, QByteArray> roles = roleNames();
4745 roles[NameRole] = "name";
@@ -52,6 +50,7 @@ UsersModel::UsersModel(QObject *parent) :
5250 roles[SessionRole] = "session";
5351 roles[HasMessagesRole] = "hasMessages";
5452 roles[ImagePathRole] = "imagePath";
53+ roles[UidRole] = "uid";
5554 setRoleNames(roles);
5655
5756 connect(d_ptr, &UsersModelPrivate::dataChanged, this, [this](int i) {
@@ -101,6 +100,8 @@ QVariant UsersModel::data(const QModelIndex &index, int role) const
101100 return d->entries[row].has_messages;
102101 case UsersModel::ImagePathRole:
103102 return "";
103+ case UsersModel::UidRole:
104+ return d->entries[row].uid;
104105 default:
105106 return QVariant();
106107 }
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+136
@@ -0,0 +1,136 @@
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 sessionKey) 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_" + sessionKey + "_badge.png";
57+ QString iconUrl = searchDirectory.toString(QUrl::StripTrailingSlash) +
58+ "/" + sessionKey + "_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+ bool iconFound = false;
70+ if (sessionKey == "ubuntu" || sessionKey == "ubuntu-2d") {
71+ path += "ubuntu_badge.png";
72+ iconFound = true;
73+ } else if(
74+ sessionKey == "gnome-classic" ||
75+ sessionKey == "gnome-flashback-compiz" ||
76+ sessionKey == "gnome-flashback-metacity" ||
77+ sessionKey == "gnome-shell" ||
78+ sessionKey == "gnome-wayland" ||
79+ sessionKey == "gnome"
80+ ){
81+ path += "gnome_badge.png";
82+ iconFound = true;
83+ } else if (sessionKey == "plasma") {
84+ path += "kde_badge.png";
85+ iconFound = true;
86+ } else if (sessionKey == "xterm") {
87+ path += "recovery_console_badge.png";
88+ iconFound = true;
89+ } else if (sessionKey == "remote-login") {
90+ path += "remote_login_help.png";
91+ iconFound = true;
92+ }
93+
94+ if (QFile(path).exists() && iconFound) {
95+ return path;
96+ }
97+ }
98+ }
99+
100+ // FIXME make this smarter
101+ return QUrl("./graphics/session_icons/unknown_badge.png");
102+}
103+
104+QVariant SessionsModel::data(const QModelIndex& index, int role) const
105+{
106+ switch (role) {
107+ case SessionsModel::IconRole:
108+ return iconUrl(m_model->data(index, QLightDM::SessionsModel::KeyRole).toString());
109+ default:
110+ return m_model->data(index, role);
111+ }
112+}
113+
114+SessionsModel::SessionsModel(QObject* parent)
115+ : UnitySortFilterProxyModelQML(parent)
116+{
117+ // Add a custom IconRole that isn't in either of the lightdm implementations
118+ m_model = new QLightDM::SessionsModel(this);
119+ m_roleNames = m_model->roleNames();
120+ m_roleNames[IconRole] = "icon_url";
121+
122+ // Update search locations to use $SNAP prefix if specified
123+ auto snapRoot = QFile::decodeName(qgetenv("SNAP"));
124+ if (!snapRoot.isEmpty()) {
125+ for (int i = 0; i < m_iconSearchDirectories.size(); i++) {
126+ m_iconSearchDirectories[i] = snapRoot + m_iconSearchDirectories[i].path();
127+ }
128+ }
129+
130+ setModel(m_model);
131+ setSourceModel(m_model);
132+ setSortCaseSensitivity(Qt::CaseInsensitive);
133+ setSortLocaleAware(true);
134+ setSortRole(Qt::DisplayRole);
135+ sort(0);
136+}
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<QLightDM::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/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/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.cpp+35−9
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013,2016 Canonical, Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -12,12 +12,12 @@
1212 *
1313 * You should have received a copy of the GNU General Public License
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Author: Michael Terry <michael.terry@canonical.com>
1715 */
1816
1917#include "SessionBroadcast.h"
2018#include <QDBusConnection>
19+#include <QDBusConnectionInterface>
20+#include <QDBusInterface>
2121
2222#include <glib.h>
2323
@@ -27,13 +27,39 @@ SessionBroadcast::SessionBroadcast(QObject* parent)
2727 m_username = QString::fromUtf8(g_get_user_name());
2828
2929 auto connection = QDBusConnection::SM_BUSNAME();
30+ auto interface = connection.interface();
31+ interface->startService(QStringLiteral("com.canonical.Unity.Greeter.Broadcast"));
32+
33+ m_broadcaster = new QDBusInterface(QStringLiteral("com.canonical.Unity.Greeter.Broadcast"),
34+ QStringLiteral("/com/canonical/Unity/Greeter/Broadcast"),
35+ QStringLiteral("com.canonical.Unity.Greeter.Broadcast"),
36+ connection, this);
37+
38+ connect(m_broadcaster, SIGNAL(StartUrl(const QString &, const QString &)),
39+ this, SLOT(onStartUrl(const QString &, const QString &)));
40+
41+ connect(m_broadcaster, SIGNAL(ShowHome(const QString &)),
42+ this, SLOT(onShowHome(const QString &)));
43+}
44+
45+void SessionBroadcast::requestUrlStart(const QString &username, const QString &url)
46+{
47+ m_broadcaster->asyncCall(QStringLiteral("RequestUrlStart"), username, url);
48+}
49+
50+void SessionBroadcast::requestHomeShown(const QString &username)
51+{
52+ m_broadcaster->asyncCall(QStringLiteral("RequestHomeShown"), username);
53+}
3054
31− connection.connect(QStringLiteral("com.canonical.Unity.Greeter.Broadcast"),
32− QStringLiteral("/com/canonical/Unity/Greeter/Broadcast"),
33− QStringLiteral("com.canonical.Unity.Greeter.Broadcast"),
34− QStringLiteral("ShowHome"),
35− this,
36− SLOT(onShowHome(const QString &)));
55+void SessionBroadcast::onStartUrl(const QString &username, const QString &url)
56+{
57+ // Since this signal is just used for testing, we don't *really* care if
58+ // username matches, but just in case we do eventually use the signal, we
59+ // should only listen to our own requests.
60+ if (username == m_username) {
61+ Q_EMIT startUrl(url);
62+ }
3763}
3864
3965void SessionBroadcast::onShowHome(const QString &username)
plugins/SessionBroadcast/SessionBroadcast.h+10−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
@@ -12,8 +12,6 @@
1212 *
1313 * You should have received a copy of the GNU General Public License
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors: Michael Terry <michael.terry@canonical.com>
1715 */
1816
1917#ifndef UNITY_SESSIONBROADCAST_H
@@ -31,14 +29,23 @@ class SessionBroadcast: public QObject
3129public:
3230 explicit SessionBroadcast(QObject *parent = 0);
3331
32+ Q_INVOKABLE void requestUrlStart(const QString &username, const QString &url);
33+ Q_INVOKABLE void requestHomeShown(const QString &username);
34+
3435Q_SIGNALS:
36+ // This signal isn't actually used by the shell
37+ // (unity-greeter-session-broadcast handles launching an app for us), but
38+ // it's useful for testing the plugin.
39+ void startUrl(const QString &url);
3540 void showHome();
3641
3742private Q_SLOTS:
43+ void onStartUrl(const QString &username, const QString &url);
3844 void onShowHome(const QString &username);
3945
4046private:
4147 QString m_username;
48+ QDBusInterface *m_broadcaster;
4249};
4350
4451#endif
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+3−1
@@ -12,5 +12,7 @@ set(DOWNLOADDAEMONLISTENER_SOURCES
1212add_library(DownloadDaemonListener MODULE ${DOWNLOADDAEMONLISTENER_SOURCES})
1313
1414qt5_use_modules(DownloadDaemonListener Qml Quick DBus Core)
15−
15+pkg_check_modules(DDLADAPTER REQUIRED udm-common)
16+add_definitions(${DDLADAPTER_CFLAGS} ${DDLADAPTER_CFLAGS_OTHER})
17+target_link_libraries(DownloadDaemonListener ${DDLADAPTER_LIBRARIES})
1618add_unity8_plugin(Ubuntu.DownloadDaemonListener 0.1 Ubuntu/DownloadDaemonListener TARGETS DownloadDaemonListener)
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/DownloadDaemonListener/DownloadTracker.cpp+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 it
55 * under the terms of the GNU Lesser General Public License, as
@@ -78,6 +78,7 @@ void DownloadTracker::startService()
7878 connect(m_adaptor, static_cast<void (DownloadTrackerAdaptor::*)(qulonglong, qulonglong)>(&DownloadTrackerAdaptor::progress), this, &DownloadTracker::progress);
7979 connect(m_adaptor, &DownloadTrackerAdaptor::resumed, this, &DownloadTracker::resumed);
8080 connect(m_adaptor, &DownloadTrackerAdaptor::started, this, &DownloadTracker::started);
81+ connect(m_adaptor, &DownloadTrackerAdaptor::processing, this, &DownloadTracker::processing);
8182 }
8283 // FIXME find a better way of determining if the service is ready
8384 Q_EMIT serviceReadyChanged(m_adaptor && m_adaptor->isValid());
plugins/Ubuntu/DownloadDaemonListener/DownloadTracker.h+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 it
55 * under the terms of the GNU Lesser General Public License, as
@@ -54,6 +54,7 @@ Q_SIGNALS:
5454 void error(const QString &error);
5555 void finished(const QString &path);
5656 void paused(bool success);
57+ void processing(const QString &path);
5758 void progress(qulonglong received, qulonglong total);
5859 void resumed(bool success);
5960 void started(bool success);
plugins/Ubuntu/DownloadDaemonListener/interface/downloadtrackeradaptor.cpp+2−2
@@ -1,8 +1,8 @@
11/*
22 * This file was generated by qdbusxml2cpp version 0.8
3− * Command line was: qdbusxml2cpp -v -c DownloadTrackerAdaptor -p downloadtrackeradaptor.h:downloadtrackeradaptor.cpp -i metatypes.h com.canonical.applications.download.xml
3+ * Command line was: qdbusxml2cpp -v -c DownloadTrackerAdaptor -p downloadtrackeradaptor.h:downloadtrackeradaptor.cpp -i metatypes.h ../../../../../../ubuntu-download-manager/trunk/docs/dbus/com.canonical.applications.download.xml
44 *
5− * qdbusxml2cpp is Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
5+ * qdbusxml2cpp is Copyright (C) 2015 The Qt Company Ltd.
66 *
77 * This is an auto-generated file.
88 * This file may have been hand-edited. Look for HAND-EDIT comments
plugins/Ubuntu/DownloadDaemonListener/interface/downloadtrackeradaptor.h+71−4
@@ -1,15 +1,15 @@
11/*
22 * This file was generated by qdbusxml2cpp version 0.8
3− * Command line was: qdbusxml2cpp -v -c DownloadTrackerAdaptor -p downloadtrackeradaptor.h:downloadtrackeradaptor.cpp -i metatypes.h com.canonical.applications.download.xml
3+ * Command line was: qdbusxml2cpp -v -c DownloadTrackerAdaptor -p downloadtrackeradaptor.h:downloadtrackeradaptor.cpp -i metatypes.h ../../../../../../ubuntu-download-manager/trunk/docs/dbus/com.canonical.applications.download.xml
44 *
5− * qdbusxml2cpp is Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
5+ * qdbusxml2cpp is Copyright (C) 2015 The Qt Company Ltd.
66 *
77 * This is an auto-generated file.
88 * Do not edit! All changes made to it will be lost.
99 */
1010
11−#ifndef DOWNLOADTRACKERADAPTOR_H_1374434371
12−#define DOWNLOADTRACKERADAPTOR_H_1374434371
11+#ifndef DOWNLOADTRACKERADAPTOR_H
12+#define DOWNLOADTRACKERADAPTOR_H
1313
1414#include <QtCore/QObject>
1515#include <QtCore/QByteArray>
@@ -36,6 +36,22 @@ public:
3636
3737 ~DownloadTrackerAdaptor();
3838
39+ Q_PROPERTY(QString ClickPackage READ clickPackage)
40+ inline QString clickPackage() const
41+ { return qvariant_cast< QString >(property("ClickPackage")); }
42+
43+ Q_PROPERTY(QString DestinationApp READ destinationApp)
44+ inline QString destinationApp() const
45+ { return qvariant_cast< QString >(property("DestinationApp")); }
46+
47+ Q_PROPERTY(bool ShowInIndicator READ showInIndicator)
48+ inline bool showInIndicator() const
49+ { return qvariant_cast< bool >(property("ShowInIndicator")); }
50+
51+ Q_PROPERTY(QString Title READ title)
52+ inline QString title() const
53+ { return qvariant_cast< QString >(property("Title")); }
54+
3955public Q_SLOTS: // METHODS
4056 inline QDBusPendingReply<> allowGSMDownload(bool allowed)
4157 {
@@ -50,6 +66,24 @@ public Q_SLOTS: // METHODS
5066 return asyncCallWithArgumentList(QStringLiteral("cancel"), argumentList);
5167 }
5268
69+ inline QDBusPendingReply<> collected()
70+ {
71+ QList<QVariant> argumentList;
72+ return asyncCallWithArgumentList(QStringLiteral("collected"), argumentList);
73+ }
74+
75+ inline QDBusPendingReply<QString> filePath()
76+ {
77+ QList<QVariant> argumentList;
78+ return asyncCallWithArgumentList(QStringLiteral("filePath"), argumentList);
79+ }
80+
81+ inline QDBusPendingReply<StringMap> headers()
82+ {
83+ QList<QVariant> argumentList;
84+ return asyncCallWithArgumentList(QStringLiteral("headers"), argumentList);
85+ }
86+
5387 inline QDBusPendingReply<bool> isGSMDownloadAllowed()
5488 {
5589 QList<QVariant> argumentList;
@@ -80,6 +114,27 @@ public Q_SLOTS: // METHODS
80114 return asyncCallWithArgumentList(QStringLiteral("resume"), argumentList);
81115 }
82116
117+ inline QDBusPendingReply<> setDestinationDir(const QString &path)
118+ {
119+ QList<QVariant> argumentList;
120+ argumentList << QVariant::fromValue(path);
121+ return asyncCallWithArgumentList(QStringLiteral("setDestinationDir"), argumentList);
122+ }
123+
124+ inline QDBusPendingReply<> setHeaders(StringMap headers)
125+ {
126+ QList<QVariant> argumentList;
127+ argumentList << QVariant::fromValue(headers);
128+ return asyncCallWithArgumentList(QStringLiteral("setHeaders"), argumentList);
129+ }
130+
131+ inline QDBusPendingReply<> setMetadata(const QVariantMap &data)
132+ {
133+ QList<QVariant> argumentList;
134+ argumentList << QVariant::fromValue(data);
135+ return asyncCallWithArgumentList(QStringLiteral("setMetadata"), argumentList);
136+ }
137+
83138 inline QDBusPendingReply<> setThrottle(qulonglong speed)
84139 {
85140 QList<QVariant> argumentList;
@@ -93,6 +148,12 @@ public Q_SLOTS: // METHODS
93148 return asyncCallWithArgumentList(QStringLiteral("start"), argumentList);
94149 }
95150
151+ inline QDBusPendingReply<int> state()
152+ {
153+ QList<QVariant> argumentList;
154+ return asyncCallWithArgumentList(QStringLiteral("state"), argumentList);
155+ }
156+
96157 inline QDBusPendingReply<qulonglong> throttle()
97158 {
98159 QList<QVariant> argumentList;
@@ -106,10 +167,16 @@ public Q_SLOTS: // METHODS
106167 }
107168
108169Q_SIGNALS: // SIGNALS
170+ void authError(AuthErrorStruct error);
109171 void canceled(bool success);
110172 void error(const QString &error);
111173 void finished(const QString &path);
174+ void hashError(HashErrorStruct error);
175+ void httpError(HttpErrorStruct error);
176+ void networkError(NetworkErrorStruct error);
112177 void paused(bool success);
178+ void processError(ProcessErrorStruct error);
179+ void processing(const QString &path);
113180 void progress(qulonglong received, qulonglong total);
114181 void resumed(bool success);
115182 void started(bool success);
plugins/Ubuntu/DownloadDaemonListener/interface/metatypes.h+3−6
@@ -1,5 +1,5 @@
11/*
2− * Copyright 2013 2013 Canonical Ltd.
2+ * Copyright 2013-2016 Canonical Ltd.
33 *
44 * This library is free software; you can redistribute it and/or
55 * modify it under the terms of version 3 of the GNU Lesser General Public
@@ -19,10 +19,7 @@
1919#ifndef DOWNLOADER_LIB_APP_METATYPES_H
2020#define DOWNLOADER_LIB_APP_METATYPES_H
2121
22−#include <QMap>
23−
24−typedef QMap<QString, QString> StringMap;
25−
26−Q_DECLARE_METATYPE(StringMap)
22+// Just include the system file so we're always up to date.
23+#include <ubuntu/download_manager/metatypes.h>
2724
2825#endif // METATYPES_H
plugins/Ubuntu/Gestures/AxisVelocityCalculator.cpp+1−1
@@ -21,7 +21,7 @@
2121#include "AxisVelocityCalculator.h"
2222#include <QtCore/QElapsedTimer>
2323
24−using namespace UbuntuGestures;
24+UG_USE_NAMESPACE
2525
2626AxisVelocityCalculator::AxisVelocityCalculator(QObject *parent)
2727 : AxisVelocityCalculator(SharedTimeSource(new RealTimeSource), parent)
plugins/Ubuntu/Gestures/AxisVelocityCalculator.h+4−4
@@ -24,7 +24,7 @@
2424#include "UbuntuGesturesQmlGlobal.h"
2525#include <stdint.h>
2626#include <QtCore/QObject>
27−#include <TimeSource>
27+#include <UbuntuGestures/private/timesource_p.h>
2828
2929/*
3030 Estimates the current velocity of a finger based on recent movement along an axis
@@ -68,7 +68,7 @@ public:
6868 /*
6969 Constructor that takes a TimeSource
7070 */
71− AxisVelocityCalculator(const UbuntuGestures::SharedTimeSource &timeSource, QObject *parent = 0);
71+ AxisVelocityCalculator(const UG_PREPEND_NAMESPACE(SharedTimeSource) &timeSource, QObject *parent = 0);
7272
7373 virtual ~AxisVelocityCalculator();
7474
@@ -90,7 +90,7 @@ public:
9090 /*
9191 Replaces the TimeSource with the given one. Useful for testing purposes.
9292 */
93− void setTimeSource(const UbuntuGestures::SharedTimeSource &timeSource);
93+ void setTimeSource(const UG_PREPEND_NAMESPACE(SharedTimeSource) &timeSource);
9494
9595 /*
9696 The minimum amount of samples needed for a velocity calculation.
@@ -138,7 +138,7 @@ private:
138138 int m_samplesRead; /* index of the oldest sample available. -1 if buffer is empty */
139139 int m_samplesWrite; /* index where the next sample will be written */
140140
141− UbuntuGestures::SharedTimeSource m_timeSource;
141+ UG_PREPEND_NAMESPACE(SharedTimeSource) m_timeSource;
142142
143143 qreal m_trackedPosition;
144144};
plugins/Ubuntu/Gestures/CMakeLists.txt+5−1
@@ -24,7 +24,11 @@ qt5_use_modules(UbuntuGesturesQml Core Quick)
2424# So that Foo.cpp can #include "Foo.moc"
2525include_directories(${CMAKE_CURRENT_BINARY_DIR})
2626
27−include_directories(${UBUNTUGESTURES_INCLUDE_DIRS})
27+include_directories(
28+ SYSTEM
29+ ${UBUNTUGESTURES_INCLUDE_DIRS}
30+ ${UBUNTUGESTURES_INCLUDEDIR}/UbuntuGestures/${UBUNTUGESTURES_VERSION}
31+)
2832
2933# There's no cmake var for v8 include path :-/ so create one
3034LIST(GET Qt5Core_INCLUDE_DIRS 0 QtCoreDir0)
plugins/Ubuntu/Gestures/Gestures.qmltypesdeleted−77
@@ -1,77 +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: "PressedOutsideNotifier"
59− defaultProperty: "data"
60− prototype: "QQuickItem"
61− exports: ["Ubuntu.Gestures/PressedOutsideNotifier 0.1"]
62− exportMetaObjectRevisions: [0]
63− Signal { name: "pressedOutside" }
64− }
65− Component {
66− name: "TouchGate"
67− defaultProperty: "data"
68− prototype: "QQuickItem"
69− exports: ["Ubuntu.Gestures/TouchGate 0.1"]
70− exportMetaObjectRevisions: [0]
71− Property { name: "targetItem"; type: "QQuickItem"; isPointer: true }
72− Signal {
73− name: "targetItemChanged"
74− Parameter { name: "item"; type: "QQuickItem"; isPointer: true }
75− }
76− }
77−}
plugins/Ubuntu/Gestures/TouchDispatcher.cpp+1−2
@@ -19,7 +19,6 @@
1919#include <QGuiApplication>
2020#include <QScopedPointer>
2121#include <QStyleHints>
22−
2322#include <private/qquickitem_p.h>
2423
2524#define TOUCHDISPATCHER_DEBUG 0
@@ -222,7 +221,7 @@ void TouchDispatcher::dispatchAsMouse(
222221 QEvent::Type eventType;
223222 if (touchMouse->state() == Qt::TouchPointPressed) {
224223 eventType = QEvent::MouseButtonPress;
225− } if (touchMouse->state() == Qt::TouchPointReleased) {
224+ } else if (touchMouse->state() == Qt::TouchPointReleased) {
226225 eventType = QEvent::MouseButtonRelease;
227226 m_touchMouseId = -1;
228227 } else {
plugins/Ubuntu/Gestures/TouchGate.cpp+10−5
@@ -20,16 +20,18 @@
2020#include <QDebug>
2121#include <QQuickWindow>
2222
23−#include <TouchOwnershipEvent>
24−#include <TouchRegistry>
23+#include <UbuntuGestures/private/touchownershipevent_p.h>
24+#include <UbuntuGestures/private/touchregistry_p.h>
2525
2626#if TOUCHGATE_DEBUG
2727#define ugDebug(params) qDebug().nospace() << "[TouchGate(" << (void*)this << ")] " << params
28−#include <DebugHelpers.h>
28+#include <UbuntuGestures/private/debughelpers_p.h>
2929#else // TOUCHGATE_DEBUG
3030#define ugDebug(params) ((void)0)
3131#endif // TOUCHGATE_DEBUG
3232
33+UG_USE_NAMESPACE
34+
3335TouchGate::TouchGate(QQuickItem *parent)
3436 : QQuickItem(parent)
3537{
@@ -40,7 +42,7 @@ TouchGate::TouchGate(QQuickItem *parent)
4042bool TouchGate::event(QEvent *e)
4143{
4244 if (e->type() == TouchOwnershipEvent::touchOwnershipEventType()) {
43− touchOwnershipEvent(static_cast<TouchOwnershipEvent *>(e));
45+ touchOwnershipEvent(static_cast<TouchOwnershipEvent*>(e));
4446 return true;
4547 } else {
4648 return QQuickItem::event(e);
@@ -59,7 +61,10 @@ void TouchGate::touchEvent(QTouchEvent *event)
5961 const QTouchEvent::TouchPoint &touchPoint = touchPoints[i];
6062
6163 if (touchPoint.state() == Qt::TouchPointPressed) {
62− Q_ASSERT(!m_touchInfoMap.contains(touchPoint.id()));
64+// FIXME: This assert triggers frequently in make trySomething. We have verified
65+// that it's a bug in the mouse to touch conversion of the test environment
66+// and not in the actual product. Still, it probably should be cleaned up eventually.
67+// Q_ASSERT(!m_touchInfoMap.contains(touchPoint.id()));
6368 m_touchInfoMap[touchPoint.id()].ownership = OwnershipRequested;
6469 m_touchInfoMap[touchPoint.id()].ended = false;
6570 TouchRegistry::instance()->requestTouchOwnership(touchPoint.id(), this);
plugins/Ubuntu/Gestures/TouchGate.h+3−2
@@ -19,6 +19,7 @@
1919
2020#include "UbuntuGesturesQmlGlobal.h"
2121#include "TouchDispatcher.h"
22+#include <UbuntuGestures/ubuntugesturesglobal.h>
2223
2324#include <QQuickItem>
2425#include <QList>
@@ -26,7 +27,7 @@
2627
2728#define TOUCHGATE_DEBUG 0
2829
29−class TouchOwnershipEvent;
30+UG_FORWARD_DECLARE_CLASS(TouchOwnershipEvent)
3031
3132/*
3233 Blocks the passage of events until ownership over the related touch points is granted.
@@ -82,7 +83,7 @@ private:
8283 ulong timestamp;
8384 };
8485
85− void touchOwnershipEvent(TouchOwnershipEvent *event);
86+ void touchOwnershipEvent(UG_PREPEND_NAMESPACE(TouchOwnershipEvent) *event);
8687 bool isTouchPointOwned(int touchId) const;
8788 void storeTouchEvent(QTouchDevice *device,
8889 Qt::KeyboardModifiers modifiers,
plugins/Ubuntu/Gestures/TouchGestureArea.cpp+16−16
@@ -16,9 +16,9 @@
1616
1717#include "TouchGestureArea.h"
1818
19−#include <UbuntuGestures/TouchOwnershipEvent>
20−#include <UbuntuGestures/TouchRegistry>
21−#include <UbuntuGestures/UnownedTouchEvent>
19+#include <UbuntuGestures/private/touchownershipevent_p.h>
20+#include <UbuntuGestures/private/touchregistry_p.h>
21+#include <UbuntuGestures/private/unownedtouchevent_p.h>
2222// #include "TouchRegistry.h"
2323// #include "UnownedTouchEvent.h"
2424
@@ -26,6 +26,8 @@
2626#include <QStyleHints>
2727#include <private/qquickwindow_p.h>
2828
29+UG_USE_NAMESPACE
30+
2931#define TOUCHGESTUREAREA_DEBUG 0
3032
3133// TODO - understand more about why we lose touch event releases.
@@ -135,7 +137,7 @@ TouchGestureArea::TouchGestureArea(QQuickItem* parent)
135137 , m_recognitionPeriod(50)
136138 , m_releaseRejectPeriod(100)
137139{
138− setRecognitionTimer(new UbuntuGestures::Timer(this));
140+ setRecognitionTimer(new Timer(this));
139141 m_recognitionTimer->setInterval(m_recognitionPeriod);
140142 m_recognitionTimer->setSingleShot(true);
141143}
@@ -153,10 +155,10 @@ bool TouchGestureArea::event(QEvent *event)
153155{
154156 // Process unowned touch events (handles update/release for incomplete gestures)
155157 if (event->type() == TouchOwnershipEvent::touchOwnershipEventType()) {
156− touchOwnershipEvent(static_cast<TouchOwnershipEvent *>(event));
158+ touchOwnershipEvent(static_cast<TouchOwnershipEvent*>(event));
157159 return true;
158160 } else if (event->type() == UnownedTouchEvent::unownedTouchEventType()) {
159− unownedTouchEvent(static_cast<UnownedTouchEvent *>(event)->touchEvent());
161+ unownedTouchEvent(static_cast<UnownedTouchEvent*>(event)->touchEvent());
160162 return true;
161163 }
162164
@@ -375,7 +377,7 @@ void TouchGestureArea::unownedTouchEvent_waitingForMoreTouches(QTouchEvent *even
375377 }
376378 }
377379
378− if (m_candidateTouches.count() == 0) {
380+ if (m_candidateTouches.isEmpty()) {
379381 setInternalStatus(InternalStatus::WaitingForTouch);
380382 }
381383}
@@ -439,7 +441,7 @@ void TouchGestureArea::unownedTouchEvent_rejected(QTouchEvent *event)
439441 }
440442 }
441443
442− if (m_watchedTouches.count() == 0) {
444+ if (m_watchedTouches.isEmpty()) {
443445 setInternalStatus(InternalStatus::WaitingForTouch);
444446 }
445447}
@@ -527,7 +529,7 @@ void TouchGestureArea::updateTouchPoints(QTouchEvent *touchEvent)
527529 if (updateable) {
528530 if (!dragging() && m_status == InternalStatus::Recognized) {
529531 bool allWantDrag = !m_liveTouchPoints.isEmpty();
530− Q_FOREACH(auto point, m_liveTouchPoints) {
532+ Q_FOREACH(const auto &point, m_liveTouchPoints) {
531533 allWantDrag &= point->dragging();
532534 }
533535 // only dragging if all points are dragging.
@@ -608,7 +610,7 @@ void TouchGestureArea::setInternalStatus(uint newStatus)
608610 }
609611}
610612
611−void TouchGestureArea::setRecognitionTimer(UbuntuGestures::AbstractTimer *timer)
613+void TouchGestureArea::setRecognitionTimer(AbstractTimer *timer)
612614{
613615 int interval = 0;
614616 bool timerWasRunning = false;
@@ -646,11 +648,9 @@ bool TouchGestureArea::dragging() const
646648QQmlListProperty<GestureTouchPoint> TouchGestureArea::touchPoints()
647649{
648650 return QQmlListProperty<GestureTouchPoint>(this,
649− 0,
650− nullptr,
651− TouchGestureArea::touchPoint_count,
652− TouchGestureArea::touchPoint_at,
653− 0);
651+ nullptr,
652+ TouchGestureArea::touchPoint_count,
653+ TouchGestureArea::touchPoint_at);
654654}
655655
656656int TouchGestureArea::minimumTouchPoints() const
@@ -721,7 +721,7 @@ void TouchGestureArea::rejectGesture()
721721 }
722722 m_candidateTouches.clear();
723723
724− if (m_watchedTouches.count() == 0) {
724+ if (m_watchedTouches.isEmpty()) {
725725 setInternalStatus(InternalStatus::WaitingForTouch);
726726 } else {
727727 setInternalStatus(InternalStatus::Rejected);
plugins/Ubuntu/Gestures/TouchGestureArea.h+16−15
@@ -21,10 +21,11 @@
2121
2222#include <QQuickItem>
2323
24−#include <UbuntuGestures/Timer>
24+#include <UbuntuGestures/ubuntugesturesglobal.h>
25+#include <UbuntuGestures/private/timer_p.h>
2526
26−class TouchOwnershipEvent;
27−class UnownedTouchEvent;
27+UG_FORWARD_DECLARE_CLASS(TouchOwnershipEvent)
28+UG_FORWARD_DECLARE_CLASS(UnownedTouchEvent)
2829
2930class GestureTouchPoint : public QObject
3031{
@@ -75,7 +76,7 @@ public:
7576 return *this;
7677 }
7778
78− bool operator=(const GestureTouchPoint& rhs) const {
79+ bool operator==(const GestureTouchPoint& rhs) const {
7980 if (&rhs == this) return true;
8081 return m_id == rhs.m_id &&
8182 m_pressed == rhs.m_pressed &&
@@ -83,7 +84,7 @@ public:
8384 m_y == rhs.m_y &&
8485 m_dragging == rhs.m_dragging;
8586 }
86− bool operator!=(const GestureTouchPoint& rhs) const { return !operator=(rhs); }
87+ bool operator!=(const GestureTouchPoint& rhs) const { return !operator==(rhs); }
8788
8889 void setPos(const QPointF &pos);
8990
@@ -105,8 +106,8 @@ private:
105106/*
106107 An area that detects multi-finger gestures.
107108
108− We can use this to detect gestures contstrained by a minimim and/or maximum number of touch points.
109− This components uses the touch registry to apply for ownership of touch points.
109+ We can use this to detect gestures constrained by a minimum and/or maximum number of touch points.
110+ This component uses the touch registry to apply for ownership of touch points.
110111 This way we can use the component in conjuntion with the directional drag area to compete for ownwership
111112 or gestures; unlike the MultiPointTouchArea.
112113 */
@@ -136,12 +137,12 @@ public:
136137 Recognized,
137138 Rejected
138139 };
139− TouchGestureArea(QQuickItem* parent = NULL);
140+ TouchGestureArea(QQuickItem* parent = nullptr);
140141 ~TouchGestureArea();
141142
142143 bool event(QEvent *e) override;
143144
144− void setRecognitionTimer(UbuntuGestures::AbstractTimer *timer);
145+ void setRecognitionTimer(UG_PREPEND_NAMESPACE(AbstractTimer) *timer);
145146
146147 int status() const;
147148 bool dragging() const;
@@ -164,10 +165,10 @@ Q_SIGNALS:
164165
165166 void touchPointsUpdated();
166167 void draggingChanged(bool dragging);
167− void minimumTouchPointsChanged(bool value);
168− void maximumTouchPointsChanged(bool value);
169− void recognitionPeriodChanged(bool value);
170− void releaseRejectPeriodChanged(bool value);
168+ void minimumTouchPointsChanged(int value);
169+ void maximumTouchPointsChanged(int value);
170+ void recognitionPeriodChanged(int value);
171+ void releaseRejectPeriodChanged(int value);
171172
172173 void pressed(const QList<QObject*>& points);
173174 void released(const QList<QObject*>& points);
@@ -194,7 +195,7 @@ private:
194195 void unownedTouchEvent_recognised(QTouchEvent *unownedTouchEvent);
195196 void unownedTouchEvent_rejected(QTouchEvent *unownedTouchEvent);
196197
197− void touchOwnershipEvent(TouchOwnershipEvent *event);
198+ void touchOwnershipEvent(UG_PREPEND_NAMESPACE(TouchOwnershipEvent) *event);
198199 void updateTouchPoints(QTouchEvent *event);
199200
200201 GestureTouchPoint* addTouchPoint(const QTouchEvent::TouchPoint *tp);
@@ -209,7 +210,7 @@ private:
209210 uint m_status;
210211 QSet<int> m_candidateTouches;
211212 QSet<int> m_watchedTouches;
212− UbuntuGestures::AbstractTimer *m_recognitionTimer;
213+ UG_PREPEND_NAMESPACE(AbstractTimer) *m_recognitionTimer;
213214
214215 bool m_dragging;
215216 QHash<int, GestureTouchPoint*> m_liveTouchPoints;
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/CMakeLists.txt+5
@@ -1,3 +1,7 @@
1+include_directories(
2+ ${GLIB_INCLUDE_DIRS}
3+)
4+
15set(SYSTEMIMAGE_SOURCES
26 plugin.cpp
37 SystemImage.cpp
@@ -6,5 +10,6 @@ set(SYSTEMIMAGE_SOURCES
610add_library(SystemImage MODULE ${SYSTEMIMAGE_SOURCES})
711
812qt5_use_modules(SystemImage Qml DBus Core)
13+target_link_libraries(SystemImage ${GLIB_LIBRARIES})
914
1015add_unity8_plugin(Ubuntu.SystemImage 0.1 Ubuntu/SystemImage TARGETS SystemImage)
plugins/Ubuntu/SystemImage/SystemImage.cpp+127−5
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2014 Canonical, Ltd.
2+ * Copyright (C) 2014-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
@@ -14,20 +14,142 @@
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1515 */
1616
17−#include "SystemImage.h"
1817#include <QDBusConnection>
1918#include <QDBusPendingCall>
19+#include <QDBusReply>
20+#include <QDebug>
21+
22+#include <glib.h>
23+
24+#include "SystemImage.h"
25+
26+#define SYSTEMIMAGE_SERVICE QStringLiteral("com.canonical.SystemImage")
27+#define SYSTEMIMAGE_PATH QStringLiteral("/Service")
28+#define SYSTEMIMAGE_IFACE QStringLiteral("com.canonical.SystemImage")
29+
30+Q_LOGGING_CATEGORY(SYSTEMIMAGEPLUGIN, "unity8.systemimage", QtWarningMsg)
31+
32+#define DEBUG_MSG qCDebug(SYSTEMIMAGEPLUGIN).nospace().noquote() << Q_FUNC_INFO
33+#define WARNING_MSG qCWarning(SYSTEMIMAGEPLUGIN).nospace().noquote() << Q_FUNC_INFO
2034
2135SystemImage::SystemImage(QObject *parent)
2236 : QObject(parent)
2337{
38+ QDBusConnection::systemBus().connect(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE, QStringLiteral("UpdateAvailableStatus"),
39+ this, SLOT(onUpdateAvailableStatus(bool,bool,QString,int,QString,QString)));
40+ QDBusConnection::systemBus().connect(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE, QStringLiteral("UpdateDownloaded"),
41+ this, SLOT(onUpdateDownloaded()));
42+ QDBusConnection::systemBus().connect(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE, QStringLiteral("UpdateFailed"),
43+ this, SLOT(onUpdateFailed(int,QString)));
44+ QDBusConnection::systemBus().connect(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE, QStringLiteral("Applied"),
45+ this, SLOT(onUpdateApplied(bool)));
46+ QDBusConnection::systemBus().connect(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE, QStringLiteral("Rebooting"),
47+ this, SLOT(onRebooting(bool)));
48+}
49+
50+void SystemImage::checkForUpdate()
51+{
52+ DEBUG_MSG << "Checking for update";
53+ const QDBusMessage msg = QDBusMessage::createMethodCall(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE,
54+ QStringLiteral("CheckForUpdate"));
55+ QDBusConnection::systemBus().asyncCall(msg);
56+}
57+
58+void SystemImage::applyUpdate()
59+{
60+ DEBUG_MSG << "Applying update";
61+ setUpdateApplying(true);
62+
63+ const QDBusMessage msg = QDBusMessage::createMethodCall(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE,
64+ QStringLiteral("ApplyUpdate"));
65+ QDBusConnection::systemBus().asyncCall(msg);
2466}
2567
2668void SystemImage::factoryReset()
2769{
28− const QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("com.canonical.SystemImage"),
29− QStringLiteral("/Service"),
30− QStringLiteral("com.canonical.SystemImage"),
70+ const QDBusMessage msg = QDBusMessage::createMethodCall(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE,
3171 QStringLiteral("FactoryReset"));
3272 QDBusConnection::systemBus().asyncCall(msg);
3373}
74+
75+void SystemImage::onUpdateAvailableStatus(bool is_available, bool downloading, const QString &available_version, int update_size,
76+ const QString &last_update_date, const QString &error_reason)
77+{
78+ DEBUG_MSG << "A new update is " << (is_available ? "" : "NOT") << "available";
79+
80+ if (is_available == m_updateAvailable) {
81+ return;
82+ }
83+
84+ m_updateAvailable = is_available;
85+ m_downloading = downloading;
86+ m_availableVersion = available_version;
87+ m_updateSize = formatSize(update_size);
88+ m_lastUpdateDate = last_update_date;
89+ m_errorReason = error_reason;
90+ Q_EMIT updateAvailableStatus();
91+
92+ DEBUG_MSG << "Downloading: " << downloading << ", version: " << available_version << ", last update: " << last_update_date <<
93+ ", size: " << m_updateSize;
94+}
95+
96+void SystemImage::onUpdateDownloaded()
97+{
98+ DEBUG_MSG << "Update downloaded";
99+
100+ m_downloaded = true;
101+ Q_EMIT updateDownloadedChanged();
102+}
103+
104+void SystemImage::onUpdateFailed(int /*consecutive_failure_count*/, const QString &last_reason)
105+{
106+ WARNING_MSG << "System Update failed: " << last_reason;
107+ setUpdateApplying(false);
108+}
109+
110+void SystemImage::onUpdateApplied(bool applied)
111+{
112+ DEBUG_MSG << "System Update applied with status: " << applied;
113+ setUpdateApplying(false);
114+ if (applied) {
115+ resetUpdateStatus();
116+ Q_EMIT updateAvailableStatus();
117+ }
118+}
119+
120+void SystemImage::onRebooting(bool status)
121+{
122+ setUpdateApplying(false);
123+ DEBUG_MSG << "Rebooting: " << status;
124+}
125+
126+void SystemImage::setUpdateApplying(bool status)
127+{
128+ if (status != m_updateApplying) {
129+ m_updateApplying = status;
130+ Q_EMIT updateApplyingChanged();
131+ }
132+}
133+
134+void SystemImage::resetUpdateStatus()
135+{
136+ m_updateAvailable = false;
137+ m_updateApplying = false;
138+ m_downloading = false;
139+ m_downloaded = false;
140+ m_availableVersion.clear();
141+ m_updateSize.clear();
142+ m_lastUpdateDate.clear();
143+ m_errorReason.clear();
144+}
145+
146+QString SystemImage::formatSize(quint64 size) const
147+{
148+ guint64 g_size = size;
149+
150+ gchar * formatted_size = g_format_size(g_size);
151+ QString q_formatted_size = QString::fromLocal8Bit(formatted_size);
152+ g_free(formatted_size);
153+
154+ return q_formatted_size;
155+}
plugins/Ubuntu/SystemImage/SystemImage.h+52−2
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2014 Canonical, Ltd.
2+ * Copyright (C) 2014-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,17 +18,67 @@
1818#define SYSTEMIMAGE_H
1919
2020#include <QObject>
21+#include <QLoggingCategory>
22+
23+Q_DECLARE_LOGGING_CATEGORY(SYSTEMIMAGEPLUGIN)
2124
2225class SystemImage : public QObject
2326{
2427 Q_OBJECT
2528 Q_DISABLE_COPY(SystemImage)
2629
30+ Q_PROPERTY(bool updateAvailable READ updateAvailable NOTIFY updateAvailableStatus)
31+ Q_PROPERTY(bool updateDownloading READ updateDownloading NOTIFY updateAvailableStatus)
32+ Q_PROPERTY(QString availableVersion READ availableVersion NOTIFY updateAvailableStatus)
33+ Q_PROPERTY(QString updateSize READ updateSize NOTIFY updateAvailableStatus)
34+ Q_PROPERTY(bool updateApplying READ updateApplying NOTIFY updateApplyingChanged)
35+ Q_PROPERTY(bool updateDownloaded READ updateDownloaded NOTIFY updateDownloadedChanged)
36+
2737public:
28− explicit SystemImage(QObject *parent = 0);
38+ explicit SystemImage(QObject *parent = nullptr);
2939 ~SystemImage() = default;
3040
41+ bool updateAvailable() const { return m_updateAvailable; }
42+ bool updateDownloading() const { return m_downloading; }
43+ QString availableVersion() const { return m_availableVersion; }
44+ QString updateSize() const { return m_updateSize; }
45+ bool updateApplying() const { return m_updateApplying; }
46+ bool updateDownloaded() const { return m_downloaded; }
47+
48+public Q_SLOTS:
49+ Q_INVOKABLE void checkForUpdate();
50+ Q_INVOKABLE void applyUpdate();
3151 Q_INVOKABLE void factoryReset();
52+
53+private Q_SLOTS:
54+ void onUpdateAvailableStatus(bool is_available, bool updateDownloading, const QString &available_version,
55+ int update_size, const QString &last_update_date, const QString &error_reason);
56+ void onUpdateDownloaded();
57+ void onUpdateFailed(int consecutive_failure_count, const QString & last_reason);
58+ void onUpdateApplied(bool applied);
59+ void onRebooting(bool status);
60+
61+Q_SIGNALS:
62+ void updateAvailableStatus();
63+ void updateDownloadedChanged();
64+ void updateApplyingChanged();
65+
66+private Q_SLOTS:
67+ void setUpdateApplying(bool status);
68+
69+private:
70+ void resetUpdateStatus();
71+ QString formatSize(quint64 size) const;
72+
73+private:
74+ bool m_updateAvailable = false;
75+ bool m_updateApplying = false;
76+ bool m_downloading = false;
77+ bool m_downloaded = false;
78+ QString m_availableVersion;
79+ QString m_updateSize;
80+ QString m_lastUpdateDate;
81+ QString m_errorReason;
3282};
3383
3484#endif // SYSTEMIMAGE_H
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/Ubuntu/SystemImage/plugin.cpp+3−9
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2014 Canonical, Ltd.
2+ * Copyright (C) 2014-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
@@ -19,16 +19,10 @@
1919
2020#include <QtQml>
2121
22−static QObject *service_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
23−{
24− Q_UNUSED(engine)
25− Q_UNUSED(scriptEngine)
26− return new SystemImage();
27−}
28−
2922void BackendPlugin::registerTypes(const char *uri)
3023{
3124 Q_ASSERT(uri == QLatin1String("Ubuntu.SystemImage"));
3225
33− qmlRegisterSingletonType<SystemImage>(uri, 0, 1, "SystemImage", service_provider);
26+ qmlRegisterSingletonType<SystemImage>(uri, 0, 1, "SystemImage",
27+ [](QQmlEngine*, QJSEngine*) -> QObject* { return new SystemImage; });
3428}
plugins/Ubuntu/SystemImage/plugin.h+1−1
@@ -22,7 +22,7 @@
2222class BackendPlugin : public QQmlExtensionPlugin
2323{
2424 Q_OBJECT
25− Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
25+ Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
2626
2727public:
2828 void registerTypes(const char *uri) override;
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)
1115include_directories(
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/actionrootstate.cpp+1−1
@@ -44,7 +44,7 @@ void ActionRootState::setActionGroup(QDBusActionGroup *actionGroup)
4444 connect(m_actionGroup, &QDBusActionGroup::statusChanged, this, [&](bool) { updateActionState(); });
4545 connect(m_actionGroup, &QDBusActionGroup::actionAppear, this, [&](const QString&) { updateActionState(); });
4646 connect(m_actionGroup, &QDBusActionGroup::actionVanish, this, [&](const QString&) { updateActionState(); });
47− connect(m_actionGroup, &QDBusActionGroup::actionStateChanged, this, [&](QVariant) { updateActionState(); });
47+ connect(m_actionGroup, &QDBusActionGroup::actionStateChanged, this, [&](const QVariant&) { updateActionState(); });
4848
4949 connect(m_actionGroup, &QObject::destroyed, this, [&](QObject*) { updateActionState(); });
5050 }
plugins/Unity/Indicators/indicatorsmanager.cpp+4−6
@@ -114,10 +114,6 @@ void IndicatorsManager::loadFile(const QFileInfo& file_info)
114114 QSettings indicator_settings(file_info.absoluteFilePath(), QSettings::IniFormat, this);
115115 const QString name = indicator_settings.value(QStringLiteral("Indicator Service/Name")).toString();
116116
117− if (m_platform.isPC() && name == QLatin1String("indicator-keyboard")) {
118− return; // convergence: skip this indicator until it works in Mir
119− }
120−
121117 auto iter = m_indicatorsData.constFind(name);
122118 if (iter != m_indicatorsData.constEnd())
123119 {
@@ -285,13 +281,15 @@ Indicator::Ptr IndicatorsManager::indicator(const QString& indicator_name)
285281
286282 // convergence:
287283 // 1) enable session indicator
288− // 2) on a PC, switch the battery/power indicator to desktop mode,
284+ // 2) enable keyboard indicator
285+ // 3) on a PC, switch the battery/power indicator to desktop mode,
289286 // can't control brightness for now and phone-on-desktop broken (FIXME)
290287 //
291288 // The rest of the indicators respect their default profile (which is "phone", even on desktop PCs)
292289 if ((new_indicator->identifier() == QStringLiteral("indicator-session"))
290+ || new_indicator->identifier() == QStringLiteral("indicator-keyboard")
293291 || (new_indicator->identifier() == QStringLiteral("indicator-power") && m_platform.isPC())) {
294− new_indicator->setProfile(QStringLiteral("desktop"));
292+ new_indicator->setProfile(QString(m_profile).replace(QStringLiteral("phone"), QStringLiteral("desktop")));
295293 } else {
296294 new_indicator->setProfile(m_profile);
297295 }
plugins/Unity/Indicators/modelprinter.cpp+19−4
@@ -105,12 +105,25 @@ QString ModelPrinter::getRowSring(UnityMenuModel* sourceModel, int row, int dept
105105
106106 Q_FOREACH(int role, roles) {
107107 const QByteArray& roleName = roleNames[role];
108− stream << tabify(depth) << getVariantString(roleName, sourceModel->get(row, roleName));
108+ stream << getVariantString(roleName, sourceModel->get(row, roleName), depth);
109109 }
110110 return str;
111111}
112112
113−QString ModelPrinter::getVariantString(const QString& roleName, const QVariant &vData) const
113+QString ModelPrinter::getVariantString(const QVariant& vData) const
114+{
115+ if (vData.type() == QVariant::List) {
116+ QStringList strList;
117+ for (const auto& v : vData.toList())
118+ strList.append(getVariantString(v));
119+
120+ return '[' + strList.join(", ") + ']';
121+ }
122+
123+ return vData.toString();
124+}
125+
126+QString ModelPrinter::getVariantString(const QString& roleName, const QVariant &vData, int depth) const
114127{
115128 QString str;
116129 QTextStream stream(&str);
@@ -119,18 +132,20 @@ QString ModelPrinter::getVariantString(const QString& roleName, const QVariant &
119132 QMapIterator<QString, QVariant> iter(vData.toMap());
120133 while (iter.hasNext()) {
121134 iter.next();
135+ stream << tabify(depth);
122136 stream << roleName
123137 << "."
124138 << iter.key()
125139 << ": "
126− << iter.value().toString()
140+ << getVariantString(iter.value())
127141 << endl;
128142 }
129143 }
130144 else {
145+ stream << tabify(depth);
131146 stream << roleName
132147 << ": "
133− << vData.toString()
148+ << getVariantString(vData)
134149 << endl;
135150 }
136151 return str;
plugins/Unity/Indicators/modelprinter.h+2−1
@@ -46,7 +46,8 @@ Q_SIGNALS:
4646private:
4747 QString getModelDataString(UnityMenuModel* sourceModel, int level);
4848 QString getRowSring(UnityMenuModel* sourceModel, int index, int depth) const;
49− QString getVariantString(const QString& roleName, const QVariant &vData) const;
49+ QString getVariantString(const QString& roleName, const QVariant &vData, int depth) const;
50+ QString getVariantString(const QVariant&) const;
5051
5152 UnityMenuModel* m_model;
5253 QList<UnityMenuModel*> m_children;
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/Launcher/CMakeLists.txt+11−4
@@ -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)
@@ -6,11 +6,16 @@ add_definitions(-DSM_BUSNAME=systemBus)
66include_directories(
77 ${CMAKE_CURRENT_SOURCE_DIR}
88 ${CMAKE_SOURCE_DIR}/plugins/AccountsService
9− ${GSETTINGS_QT_INCLUDE_DIRS}
10− ${GLIB_INCLUDE_DIRS}
119 ${libunity8-private_SOURCE_DIR}
1210)
1311
12+include_directories(
13+ SYSTEM
14+ ${GSETTINGS_QT_INCLUDE_DIRS}
15+ ${GLIB_INCLUDE_DIRS}
16+ ${UAL_INCLUDE_DIRS}
17+ )
18+
1419set(QMLLAUNCHERPLUGIN_SRC
1520 plugin.cpp
1621 launchermodel.cpp
@@ -19,10 +24,11 @@ set(QMLLAUNCHERPLUGIN_SRC
1924 quicklistentry.cpp
2025 dbusinterface.cpp
2126 gsettings.cpp
22− desktopfilehandler.cpp
2327 asadapter.cpp
2428 ${CMAKE_SOURCE_DIR}/plugins/AccountsService/AccountsServiceDBusAdaptor.cpp
2529 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationManagerInterface.h
30+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
31+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceListInterface.h
2632 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherItemInterface.h
2733 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherModelInterface.h
2834 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/QuickListModelInterface.h
@@ -36,6 +42,7 @@ target_link_libraries(UnityLauncher-qml
3642 unity8-private
3743 ${GSETTINGS_QT_LDFLAGS}
3844 ${GLIB_LIBRARIES}
45+ ${UAL_LIBRARIES}
3946 )
4047
4148qt5_use_modules(UnityLauncher-qml DBus Qml Gui)
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/desktopfilehandler.cppdeleted−155
@@ -1,155 +0,0 @@
1−/*
2− * Copyright 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 Lesser General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Michael Zanetti <michael.zanetti@canonical.com>
18− */
19−
20−#include "desktopfilehandler.h"
21−
22−#include <QStringList>
23−#include <QStandardPaths>
24−#include <QDir>
25−#include <QSettings>
26−#include <QLocale>
27−
28−#include <libintl.h>
29−
30−DesktopFileHandler::DesktopFileHandler(const QString &appId, QObject *parent):
31− QObject(parent),
32− m_appId(appId)
33−{
34− load();
35−}
36−
37−QString DesktopFileHandler::appId() const
38−{
39− return m_appId;
40−}
41−
42−void DesktopFileHandler::setAppId(const QString &appId)
43−{
44− if (m_appId != appId) {
45− m_appId = appId;
46− load();
47− }
48−}
49−
50−QString DesktopFileHandler::filename() const
51−{
52− return m_filename;
53−}
54−
55−bool DesktopFileHandler::isValid() const
56−{
57− return !m_filename.isEmpty();
58−}
59−
60−void DesktopFileHandler::load()
61−{
62− m_filename.clear();
63−
64− if (m_appId.isEmpty()) {
65− return;
66− }
67−
68− int dashPos = -1;
69− QString helper = m_appId;
70−
71− QStringList searchDirs = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation);
72−#ifdef LAUNCHER_TESTING
73− searchDirs << QStringLiteral(".");
74−#endif
75−
76− QString path;
77− do {
78− if (dashPos != -1) {
79− helper.replace(dashPos, 1, '/');
80− }
81−
82− if (helper.contains('/')) {
83− path += helper.split('/').at(0) + '/';
84− helper.remove(QRegExp("^" + path));
85− }
86−
87− Q_FOREACH(const QString &searchDirName, searchDirs) {
88− QDir searchDir(searchDirName + "/" + path);
89− const QString desktop = QStringLiteral("*.desktop");
90− Q_FOREACH(const QString &desktopFile, searchDir.entryList(QStringList() << desktop)) {
91− if (desktopFile.startsWith(helper)) {
92− QFileInfo fileInfo(searchDir, desktopFile);
93− m_filename = fileInfo.absoluteFilePath();
94− return;
95− }
96− }
97− }
98−
99− dashPos = helper.indexOf('-');
100− } while (dashPos != -1);
101−}
102−
103−QString DesktopFileHandler::displayName() const
104−{
105− if (!isValid()) {
106− return QString();
107− }
108−
109− QSettings settings(m_filename, QSettings::IniFormat);
110− settings.setIniCodec("UTF-8");
111− settings.beginGroup(QStringLiteral("Desktop Entry"));
112−
113− // First try to find Name[xx_YY] and Name[xx] in .desktop file
114− const QString locale = QLocale().name();
115− const QStringList splitLocale = locale.split(QLatin1Char('_'));
116− const QString shortLocale = splitLocale.first();
117−
118− if (locale != shortLocale && settings.contains(QStringLiteral("Name[%1]").arg(locale))) {
119− return settings.value(QStringLiteral("Name[%1]").arg(locale)).toString();
120− }
121−
122− if (settings.contains(QStringLiteral("Name[%1]").arg(shortLocale))) {
123− return settings.value(QStringLiteral("Name[%1]").arg(shortLocale)).toString();
124− }
125−
126− // No translation found in desktop file. Get the untranslated one and have a go with gettext.
127− QString displayName = settings.value(QStringLiteral("Name")).toString();
128−
129− if (settings.contains(QStringLiteral("X-Ubuntu-Gettext-Domain"))) {
130− const QString domain = settings.value(QStringLiteral("X-Ubuntu-Gettext-Domain")).toString();
131− return dgettext(domain.toUtf8().constData(), displayName.toUtf8().constData());
132− }
133−
134− return displayName;
135−}
136−
137−QString DesktopFileHandler::icon() const
138−{
139− if (!isValid()) {
140− return QString();
141− }
142−
143− QSettings settings(m_filename, QSettings::IniFormat);
144− settings.setIniCodec("UTF-8");
145− settings.beginGroup(QStringLiteral("Desktop Entry"));
146− QString iconString = settings.value(QStringLiteral("Icon")).toString();
147− QString pathString = settings.value(QStringLiteral("Path")).toString();
148−
149− if (QFileInfo::exists(iconString)) {
150− return QFileInfo(iconString).absoluteFilePath();
151− } else if (QFileInfo::exists(pathString + '/' + iconString)) {
152− return pathString + '/' + iconString;
153− }
154− return "image://theme/" + iconString;
155−}
plugins/Unity/Launcher/desktopfilehandler.hdeleted−56
@@ -1,56 +0,0 @@
1−/*
2− * Copyright 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 Lesser General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU Lesser General Public License for more details.
12− *
13− * You should have received a copy of the GNU Lesser General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Michael Zanetti <michael.zanetti@canonical.com>
18− */
19−
20−#ifndef DESKTOPFILEHANDLER_H
21−#define DESKTOPFILEHANDLER_H
22−
23−#include <QObject>
24−
25−/**
26− * When an object of this class is created or whenever setAppId(appId) is called,
27− * this will search for a .desktop file matching the give appId. If a file is
28− * found, isValid() will return true and the other methods return the contents
29− * of the .desktop file.
30− *
31− * Note that this class will consider the user's locale and do a best effort
32− * to return localized values.
33− */
34−
35−class DesktopFileHandler: public QObject
36−{
37− Q_OBJECT
38−public:
39− DesktopFileHandler(const QString &appId = QString(), QObject *parent = nullptr);
40−
41− QString appId() const;
42− void setAppId(const QString &appId);
43−
44− bool isValid() const;
45− QString filename() const;
46− QString displayName() const;
47− QString icon() const;
48−
49−private:
50− void load();
51−
52− QString m_appId;
53− QString m_filename;
54−};
55−
56−#endif
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+111−52
@@ -1,5 +1,5 @@
11/*
2− * Copyright 2013-2014 Canonical Ltd.
2+ * Copyright 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 Lesser General Public License as published by
@@ -12,23 +12,25 @@
1212 *
1313 * You should have received a copy of the GNU Lesser General Public License
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Michael Zanetti <michael.zanetti@canonical.com>
1815 */
1916
2017#include "launchermodel.h"
2118#include "launcheritem.h"
2219#include "gsettings.h"
23−#include "desktopfilehandler.h"
2420#include "dbusinterface.h"
2521#include "asadapter.h"
2622
23+#include <ubuntu-app-launch/appid.h>
24+#include <ubuntu-app-launch/application.h>
25+#include <ubuntu-app-launch/registry.h>
2726#include <unity/shell/application/ApplicationInfoInterface.h>
27+#include <unity/shell/application/MirSurfaceListInterface.h>
2828
2929#include <QDesktopServices>
3030#include <QDebug>
3131
32+namespace ual = ubuntu::app_launch;
33+
3234using namespace unity::shell::application;
3335
3436LauncherModel::LauncherModel(QObject *parent):
@@ -36,7 +38,8 @@ LauncherModel::LauncherModel(QObject *parent):
3638 m_settings(new GSettings(this)),
3739 m_dbusIface(new DBusInterface(this)),
3840 m_asAdapter(new ASAdapter()),
39− m_appManager(nullptr)
41+ m_appManager(nullptr),
42+ m_ualRegistry(std::make_shared<ual::Registry>())
4043{
4144 connect(m_dbusIface, &DBusInterface::countChanged, this, &LauncherModel::countChanged);
4245 connect(m_dbusIface, &DBusInterface::countVisibleChanged, this, &LauncherModel::countVisibleChanged);
@@ -88,6 +91,8 @@ QVariant LauncherModel::data(const QModelIndex &index, int role) const
8891 return item->alerting();
8992 case RoleRunning:
9093 return item->running();
94+ case RoleSurfaceCount:
95+ return item->surfaceCount();
9196 default:
9297 qWarning() << Q_FUNC_INFO << "missing role, implement me";
9398 return QVariant();
@@ -96,18 +101,6 @@ QVariant LauncherModel::data(const QModelIndex &index, int role) const
96101 return QVariant();
97102}
98103
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−
111104unity::shell::launcher::LauncherItemInterface *LauncherModel::get(int index) const
112105{
113106 if (index < 0 || index >= m_list.count()) {
@@ -166,16 +159,16 @@ void LauncherModel::pin(const QString &appId, int index)
166159 index = m_list.count();
167160 }
168161
169− DesktopFileHandler desktopFile(appId);
170− if (!desktopFile.isValid()) {
171− qWarning() << "Can't pin this application, there is no .desktop file available.";
162+ auto appInfo = getApplicationInfo(appId);
163+ if (!appInfo.valid) {
164+ qWarning() << "Can't pin application, appId not found:" << appId;
172165 return;
173166 }
174167
175168 beginInsertRows(QModelIndex(), index, index);
176169 LauncherItem *item = new LauncherItem(appId,
177− desktopFile.displayName(),
178− desktopFile.icon(),
170+ appInfo.name,
171+ appInfo.icon,
179172 this);
180173 item->setPinned(true);
181174 m_list.insert(index, item);
@@ -342,6 +335,32 @@ int LauncherModel::findApplication(const QString &appId)
342335 return -1;
343336}
344337
338+LauncherModel::AppInfo LauncherModel::getApplicationInfo(const QString &appId)
339+{
340+ AppInfo info;
341+
342+ ual::AppID ualAppId = ual::AppID::find(m_ualRegistry, appId.toStdString());
343+ if (ualAppId.empty()) {
344+ return info;
345+ }
346+
347+ std::shared_ptr<ual::Application> ualApp;
348+ try
349+ {
350+ ualApp = ual::Application::create(ualAppId, m_ualRegistry);
351+ }
352+ catch (std::runtime_error &e)
353+ {
354+ qWarning() << "Couldn't find application info for" << appId << "-" << e.what();
355+ return info;
356+ }
357+
358+ info.valid = true;
359+ info.name = QString::fromStdString(ualApp->info()->name());
360+ info.icon = QString::fromStdString(ualApp->info()->iconPath());
361+ return info;
362+}
363+
345364void LauncherModel::progressChanged(const QString &appId, int progress)
346365{
347366 const int idx = findApplication(appId);
@@ -358,11 +377,13 @@ void LauncherModel::countChanged(const QString &appId, int count)
358377 if (idx >= 0) {
359378 LauncherItem *item = m_list.at(idx);
360379 item->setCount(count);
361− if (item->countVisible()) {
362− setAlerting(item->appId(), true);
380+ QVector<int> changedRoles = {RoleCount};
381+ if (item->countVisible() && !item->alerting() && !item->focused()) {
382+ changedRoles << RoleAlerting;
383+ item->setAlerting(true);
363384 }
364385 m_asAdapter->syncItems(m_list);
365− Q_EMIT dataChanged(index(idx), index(idx), {RoleCount});
386+ Q_EMIT dataChanged(index(idx), index(idx), changedRoles);
366387 }
367388}
368389
@@ -372,10 +393,12 @@ void LauncherModel::countVisibleChanged(const QString &appId, bool countVisible)
372393 if (idx >= 0) {
373394 LauncherItem *item = m_list.at(idx);
374395 item->setCountVisible(countVisible);
375− if (countVisible) {
376− setAlerting(item->appId(), true);
396+ QVector<int> changedRoles = {RoleCountVisible};
397+ if (countVisible && !item->alerting() && !item->focused()) {
398+ changedRoles << RoleAlerting;
399+ item->setAlerting(true);
377400 }
378− Q_EMIT dataChanged(index(idx), index(idx), {RoleCountVisible});
401+ Q_EMIT dataChanged(index(idx), index(idx), changedRoles);
379402
380403 // If countVisible goes to false, and the item is neither pinned nor recent we can drop it
381404 if (!countVisible && !item->pinned() && !item->recent()) {
@@ -385,11 +408,11 @@ void LauncherModel::countVisibleChanged(const QString &appId, bool countVisible)
385408 }
386409 } else {
387410 // Need to create a new LauncherItem and show the highlight
388− DesktopFileHandler desktopFile(appId);
389− if (countVisible && desktopFile.isValid()) {
411+ auto appInfo = getApplicationInfo(appId);
412+ if (countVisible && appInfo.valid) {
390413 LauncherItem *item = new LauncherItem(appId,
391− desktopFile.displayName(),
392− desktopFile.icon(),
414+ appInfo.name,
415+ appInfo.icon,
393416 this);
394417 item->setCountVisible(true);
395418 beginInsertRows(QModelIndex(), m_list.count(), m_list.count());
@@ -405,28 +428,28 @@ void LauncherModel::refresh()
405428 // First walk through all the existing items and see if we need to remove something
406429 QList<LauncherItem*> toBeRemoved;
407430 Q_FOREACH (LauncherItem* item, m_list) {
408− DesktopFileHandler desktopFile(item->appId());
409− if (!desktopFile.isValid()) {
410− // Desktop file not available for this app => drop it!
431+ auto appInfo = getApplicationInfo(item->appId());
432+ if (!appInfo.valid) {
433+ // Application no longer available => drop it!
411434 toBeRemoved << item;
412435 } else if (!m_settings->storedApplications().contains(item->appId())) {
413436 // Item not in settings any more => drop it!
414437 toBeRemoved << item;
415438 } else {
416439 int idx = m_list.indexOf(item);
417− item->setName(desktopFile.displayName());
440+ item->setName(appInfo.name);
418441 item->setPinned(item->pinned()); // update pinned text if needed
419442 item->setRunning(item->running());
420443 Q_EMIT dataChanged(index(idx), index(idx), {RoleName, RoleRunning});
421444
422445 const QString oldIcon = item->icon();
423− if (oldIcon == desktopFile.icon()) { // same icon file, perhaps different contents, simulate changing the icon name to force reload
446+ if (oldIcon == appInfo.icon) { // same icon file, perhaps different contents, simulate changing the icon name to force reload
424447 item->setIcon(QString());
425448 Q_EMIT dataChanged(index(idx), index(idx), {RoleIcon});
426449 }
427450
428451 // now set the icon for real
429− item->setIcon(desktopFile.icon());
452+ item->setIcon(appInfo.icon);
430453 Q_EMIT dataChanged(index(idx), index(idx), {RoleIcon});
431454 }
432455 }
@@ -457,15 +480,14 @@ void LauncherModel::refresh()
457480 if (itemIndex == -1) {
458481 // Need to add it. Just add it into the addedIndex to keep same ordering as the list
459482 // in the settings.
460− DesktopFileHandler desktopFile(entry);
461− if (!desktopFile.isValid()) {
462− qWarning() << "Couldn't find a .desktop file for" << entry << ". Skipping...";
483+ auto appInfo = getApplicationInfo(entry);
484+ if (!appInfo.valid) {
463485 continue;
464486 }
465487
466488 LauncherItem *item = new LauncherItem(entry,
467− desktopFile.displayName(),
468− desktopFile.icon(),
489+ appInfo.name,
490+ appInfo.icon,
469491 this);
470492 item->setPinned(true);
471493 beginInsertRows(QModelIndex(), addedIndex, addedIndex);
@@ -498,8 +520,10 @@ void LauncherModel::alert(const QString &appId)
498520 int idx = findApplication(appId);
499521 if (idx >= 0) {
500522 LauncherItem *item = m_list.at(idx);
501− setAlerting(item->appId(), true);
502− Q_EMIT dataChanged(index(idx), index(idx), {RoleAlerting});
523+ if (!item->focused() && !item->alerting()) {
524+ item->setAlerting(true);
525+ Q_EMIT dataChanged(index(idx), index(idx), {RoleAlerting});
526+ }
503527 }
504528}
505529
@@ -525,28 +549,50 @@ void LauncherModel::applicationAdded(const QModelIndex &parent, int row)
525549 item->setRecent(true);
526550 Q_EMIT dataChanged(index(itemIndex), index(itemIndex), {RoleRecent});
527551 }
552+ if (item->surfaceCount() != app->surfaceCount()) {
553+ item->setSurfaceCount(app->surfaceCount());
554+ Q_EMIT dataChanged(index(itemIndex), index(itemIndex), {RoleSurfaceCount});
555+ }
556+
528557 item->setRunning(true);
529558 } else {
530559 LauncherItem *item = new LauncherItem(app->appId(), app->name(), app->icon().toString(), this);
531560 item->setRecent(true);
532561 item->setRunning(true);
533562 item->setFocused(app->focused());
534−
563+ item->setSurfaceCount(app->surfaceCount());
535564 beginInsertRows(QModelIndex(), m_list.count(), m_list.count());
536565 m_list.append(item);
537566 endInsertRows();
538567 }
568+ connect(app, &ApplicationInfoInterface::surfaceCountChanged, this, &LauncherModel::applicationSurfaceCountChanged);
539569 m_asAdapter->syncItems(m_list);
540570 Q_EMIT dataChanged(index(itemIndex), index(itemIndex), {RoleRunning});
541571}
542572
573+void LauncherModel::applicationSurfaceCountChanged(int count)
574+{
575+ ApplicationInfoInterface *app = static_cast<ApplicationInfoInterface*>(sender());
576+ int idx = findApplication(app->appId());
577+ if (idx < 0) {
578+ qWarning() << "Received a surface count changed event from an app that's not in the Launcher model";
579+ return;
580+ }
581+ LauncherItem *item = m_list.at(idx);
582+ if (item->surfaceCount() != count) {
583+ item->setSurfaceCount(count);
584+ Q_EMIT dataChanged(index(idx), index(idx), {RoleSurfaceCount});
585+ }
586+}
587+
543588void LauncherModel::applicationRemoved(const QModelIndex &parent, int row)
544589{
545590 Q_UNUSED(parent)
546591
592+ ApplicationInfoInterface *app = m_appManager->get(row);
547593 int appIndex = -1;
548594 for (int i = 0; i < m_list.count(); ++i) {
549− if (m_list.at(i)->appId() == m_appManager->get(row)->appId()) {
595+ if (m_list.at(i)->appId() == app->appId()) {
550596 appIndex = i;
551597 break;
552598 }
@@ -557,17 +603,24 @@ void LauncherModel::applicationRemoved(const QModelIndex &parent, int row)
557603 return;
558604 }
559605
606+ disconnect(app, &ApplicationInfoInterface::surfaceCountChanged, this, &LauncherModel::applicationSurfaceCountChanged);
607+
560608 LauncherItem * item = m_list.at(appIndex);
561− item->setRunning(false);
562609
563610 if (!item->pinned()) {
564611 beginRemoveRows(QModelIndex(), appIndex, appIndex);
565612 m_list.takeAt(appIndex)->deleteLater();
566613 endRemoveRows();
567614 m_asAdapter->syncItems(m_list);
568− Q_EMIT dataChanged(index(appIndex), index(appIndex), {RolePinned});
615+ } else {
616+ QVector<int> changedRoles = {RoleRunning};
617+ item->setRunning(false);
618+ if (item->focused()) {
619+ changedRoles << RoleFocused;
620+ item->setFocused(false);
621+ }
622+ Q_EMIT dataChanged(index(appIndex), index(appIndex), changedRoles);
569623 }
570− Q_EMIT dataChanged(index(appIndex), index(appIndex), {RoleRunning});
571624}
572625
573626void LauncherModel::focusedAppIdChanged()
@@ -576,8 +629,14 @@ void LauncherModel::focusedAppIdChanged()
576629 for (int i = 0; i < m_list.count(); ++i) {
577630 LauncherItem *item = m_list.at(i);
578631 if (!item->focused() && item->appId() == appId) {
632+ QVector<int> changedRoles;
633+ changedRoles << RoleFocused;
579634 item->setFocused(true);
580− Q_EMIT dataChanged(index(i), index(i), {RoleFocused});
635+ if (item->alerting()) {
636+ changedRoles << RoleAlerting;
637+ item->setAlerting(false);
638+ }
639+ Q_EMIT dataChanged(index(i), index(i), changedRoles);
581640 } else if (item->focused() && item->appId() != appId) {
582641 item->setFocused(false);
583642 Q_EMIT dataChanged(index(i), index(i), {RoleFocused});
plugins/Unity/Launcher/launchermodel.h+18−9
@@ -1,5 +1,5 @@
11/*
2− * Copyright 2013-2014 Canonical Ltd.
2+ * Copyright 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 Lesser General Public License as published by
@@ -12,14 +12,11 @@
1212 *
1313 * You should have received a copy of the GNU Lesser General Public License
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Michael Zanetti <michael.zanetti@canonical.com>
1815 */
1916
20−#ifndef LAUNCHERMODEL_H
21−#define LAUNCHERMODEL_H
17+#pragma once
2218
19+#include <memory>
2320#include <unity/shell/launcher/LauncherModelInterface.h>
2421#include <unity/shell/application/ApplicationManagerInterface.h>
2522
@@ -30,6 +27,12 @@ class GSettings;
3027class DBusInterface;
3128class ASAdapter;
3229
30+namespace ubuntu {
31+ namespace app_launch {
32+ class Registry;
33+ }
34+}
35+
3336using namespace unity::shell::launcher;
3437using namespace unity::shell::application;
3538
@@ -45,7 +48,6 @@ public:
4548
4649 QVariant data(const QModelIndex &index, int role) const override;
4750
48− Q_INVOKABLE void setAlerting(const QString &appId, bool alerting) override;
4951 Q_INVOKABLE unity::shell::launcher::LauncherItemInterface* get(int index) const override;
5052 Q_INVOKABLE void move(int oldIndex, int newIndex) override;
5153 Q_INVOKABLE void pin(const QString &appId, int index = -1) override;
@@ -71,6 +73,13 @@ private:
7173
7274 void unpin(const QString &appId);
7375
76+ struct AppInfo {
77+ bool valid = false;
78+ QString name;
79+ QString icon;
80+ };
81+ AppInfo getApplicationInfo(const QString &appId);
82+
7483private Q_SLOTS:
7584 void countChanged(const QString &appId, int count);
7685 void countVisibleChanged(const QString &appId, bool count);
@@ -79,6 +88,7 @@ private Q_SLOTS:
7988 void applicationAdded(const QModelIndex &parent, int row);
8089 void applicationRemoved(const QModelIndex &parent, int row);
8190 void focusedAppIdChanged();
91+ void applicationSurfaceCountChanged(int);
8292
8393private:
8494 QList<LauncherItem*> m_list;
@@ -88,8 +98,7 @@ private:
8898 ASAdapter *m_asAdapter;
8999
90100 ApplicationManagerInterface *m_appManager;
101+ std::shared_ptr<ubuntu::app_launch::Registry> m_ualRegistry;
91102
92103 friend class LauncherModelTest;
93104};
94−
95−#endif // LAUNCHERMODEL_H
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+50−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:
@@ -243,11 +243,11 @@ DBusUnitySessionService::DBusUnitySessionService()
243243 : UnityDBusObject(QStringLiteral("/com/canonical/Unity/Session"), QStringLiteral("com.canonical.Unity"))
244244{
245245 if (!d->logindSessionPath.isEmpty()) {
246− // connect our Lock() slot to the logind's session Lock() signal
247− 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()));
248248 // ... and our Unlocked() signal to the logind's session Unlock() signal
249249 // (lightdm handles the unlocking by calling logind's Unlock method which in turn emits this signal we connect to)
250− 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()));
251251 connect(d, &DBusUnitySessionServicePrivate::prepareForSleep, this, &DBusUnitySessionService::PromptLock);
252252 } else {
253253 qWarning() << "Failed to connect to logind's session Lock/Unlock signals";
@@ -332,15 +332,41 @@ QString DBusUnitySessionService::HostName() const
332332
333333void DBusUnitySessionService::PromptLock()
334334{
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.
335338 Q_EMIT LockRequested();
336339 Q_EMIT lockRequested();
337340}
338341
339342void DBusUnitySessionService::Lock()
340343{
341− // 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.
342364 PromptLock();
365+ switchToGreeter();
366+}
343367
368+void DBusUnitySessionService::switchToGreeter()
369+{
344370 // lock the session using the org.freedesktop.DisplayManager system DBUS service
345371 const QString sessionPath = QString::fromLocal8Bit(qgetenv("XDG_SESSION_PATH"));
346372 QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("org.freedesktop.DisplayManager"),
@@ -348,7 +374,7 @@ void DBusUnitySessionService::Lock()
348374 QStringLiteral("org.freedesktop.DisplayManager.Session"),
349375 QStringLiteral("Lock"));
350376
351− QDBusPendingCall pendingCall = QDBusConnection::systemBus().asyncCall(msg);
377+ QDBusPendingCall pendingCall = QDBusConnection::SM_BUSNAME().asyncCall(msg);
352378 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingCall, this);
353379 connect(watcher, &QDBusPendingCallWatcher::finished,
354380 this, [this](QDBusPendingCallWatcher* watcher) {
@@ -365,6 +391,12 @@ void DBusUnitySessionService::Lock()
365391 });
366392}
367393
394+void DBusUnitySessionService::doUnlock()
395+{
396+ Q_EMIT Unlocked();
397+ Q_EMIT unlocked();
398+}
399+
368400bool DBusUnitySessionService::IsLocked() const
369401{
370402 return !d->isSessionActive;
@@ -486,7 +518,7 @@ void DBusGnomeScreensaverWrapper::SetActive(bool lock)
486518
487519void DBusGnomeScreensaverWrapper::Lock()
488520{
489− performAsyncUnityCall(QStringLiteral("Lock"));
521+ performAsyncUnityCall(QStringLiteral("PromptLock"));
490522}
491523
492524quint32 DBusGnomeScreensaverWrapper::GetActiveTime() const
@@ -523,7 +555,7 @@ bool DBusScreensaverWrapper::SetActive(bool lock)
523555
524556void DBusScreensaverWrapper::Lock()
525557{
526− performAsyncUnityCall(QStringLiteral("Lock"));
558+ performAsyncUnityCall(QStringLiteral("PromptLock"));
527559}
528560
529561quint32 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+2
@@ -13,6 +13,7 @@ include_directories(
1313set(QMLPLUGIN_SRC
1414 activefocuslogger.cpp
1515 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationManagerInterface.h
16+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
1617 applicationsfiltermodel.cpp
1718 constants.cpp
1819 WindowInputMonitor.cpp
@@ -28,6 +29,7 @@ set(QMLPLUGIN_SRC
2829 inputeventgenerator.cpp
2930 deviceconfigparser.cpp
3031 globalfunctions.cpp
32+ URLDispatcher.cpp
3133 plugin.cpp
3234 )
3335
plugins/Utils/URLDispatcher.cppnew file+77
@@ -0,0 +1,77 @@
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 "URLDispatcher.h"
18+
19+#include <QDBusConnection>
20+
21+class URLDispatcherInterface : public QObject
22+{
23+ Q_OBJECT
24+ Q_CLASSINFO("D-Bus Interface", "com.canonical.URLDispatcher")
25+
26+public:
27+ explicit URLDispatcherInterface(URLDispatcher *parent);
28+
29+ Q_SCRIPTABLE void DispatchURL(const QString &url, const QString &package);
30+};
31+
32+URLDispatcherInterface::URLDispatcherInterface(URLDispatcher *parent)
33+ : QObject(parent)
34+{
35+}
36+
37+void URLDispatcherInterface::DispatchURL(const QString &url, const QString &package)
38+{
39+ Q_UNUSED(package);
40+ Q_EMIT static_cast<URLDispatcher *>(parent())->urlRequested(url);
41+}
42+
43+URLDispatcher::URLDispatcher(QObject *parent)
44+ : QObject(parent)
45+ , m_dispatcher(nullptr)
46+{
47+}
48+
49+bool URLDispatcher::active() const
50+{
51+ return m_dispatcher != nullptr;
52+}
53+
54+void URLDispatcher::setActive(bool value)
55+{
56+ if (value == active())
57+ return;
58+
59+ QDBusConnection connection = QDBusConnection::sessionBus();
60+
61+ if (value) {
62+ URLDispatcherInterface *dispatcher = new URLDispatcherInterface(this);
63+ connection.registerObject(QStringLiteral("/com/canonical/URLDispatcher"),
64+ dispatcher,
65+ QDBusConnection::ExportScriptableContents);
66+ connection.registerService(QStringLiteral("com.canonical.URLDispatcher"));
67+ m_dispatcher = dispatcher;
68+ } else {
69+ connection.unregisterService(QStringLiteral("com.canonical.URLDispatcher"));
70+ delete m_dispatcher;
71+ m_dispatcher = nullptr;
72+ }
73+
74+ Q_EMIT activeChanged();
75+}
76+
77+#include "URLDispatcher.moc"
plugins/Utils/URLDispatcher.hnew file+47
@@ -0,0 +1,47 @@
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 UNITY_URLDISPATCHER_H
18+#define UNITY_URLDISPATCHER_H
19+
20+#include <QObject>
21+#include <QString>
22+
23+// This class manages our url-dispatcher interception. We intercept
24+// url-dispatcher because rather than spawning the handler for the URL
25+// in our own session, we want to notify the user session to do it for us
26+// (and start an unlock in the process).
27+
28+class URLDispatcher : public QObject
29+{
30+ Q_OBJECT
31+ Q_PROPERTY(bool active READ active WRITE setActive NOTIFY activeChanged)
32+
33+public:
34+ explicit URLDispatcher(QObject *parent=0);
35+
36+ bool active() const;
37+ void setActive(bool active);
38+
39+Q_SIGNALS:
40+ void urlRequested(const QString &url);
41+ void activeChanged();
42+
43+private:
44+ QObject *m_dispatcher;
45+};
46+
47+#endif
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/constants.cpp+6−1
@@ -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
@@ -16,6 +16,8 @@
1616
1717#include "constants.h"
1818
19+#include <QFile>
20+
1921Constants::Constants(QObject *parent)
2022 : QObject(parent)
2123{
@@ -24,4 +26,7 @@ Constants::Constants(QObject *parent)
2426 } else {
2527 m_indicatorValueTimeout = 5000;
2628 }
29+
30+ QString snapRoot = QFile::decodeName(qgetenv("SNAP"));
31+ m_defaultWallpaper = snapRoot + "/usr/share/backgrounds/warty-final-ubuntu.png";
2732}
plugins/Utils/constants.h+5−5
@@ -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
@@ -14,8 +14,7 @@
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1515*/
1616
17−#ifndef CONSTANTS_H
18−#define CONSTANTS_H
17+#pragma once
1918
2019#include <QObject>
2120
@@ -30,14 +29,15 @@ class Constants: public QObject
3029{
3130 Q_OBJECT
3231 Q_PROPERTY(int indicatorValueTimeout READ indicatorValueTimeout CONSTANT)
32+ Q_PROPERTY(QString defaultWallpaper READ defaultWallpaper CONSTANT)
3333
3434public:
3535 Constants(QObject *parent = 0);
3636
3737 int indicatorValueTimeout() const { return m_indicatorValueTimeout; }
38+ QString defaultWallpaper() const { return m_defaultWallpaper; }
3839
3940private:
4041 int m_indicatorValueTimeout;
42+ QString m_defaultWallpaper;
4143};
42−
43−#endif
plugins/Utils/deviceconfigparser.cpp+1−1
@@ -26,7 +26,7 @@ DeviceConfigParser::DeviceConfigParser(QObject *parent): QObject(parent)
2626 // Local files have highest priority
2727 QString path;
2828 Q_FOREACH (const QString &standardPath, QStandardPaths::standardLocations(QStandardPaths::GenericConfigLocation)) {
29− if (QFileInfo(standardPath + "/devices.conf").exists()) {
29+ if (QFileInfo::exists(standardPath + "/devices.conf")) {
3030 path = standardPath + "/devices.conf";
3131 break;
3232 }
plugins/Utils/globalfunctions.cpp+1−1
@@ -16,8 +16,8 @@
1616
1717#include "globalfunctions.h"
1818
19−#include <private/qquickitem_p.h>
2019#include <QQmlEngine>
20+#include <private/qquickitem_p.h>
2121
2222GlobalFunctions::GlobalFunctions(QObject *parent)
2323 : QObject(parent)
plugins/Utils/plugin.cpp+2
@@ -38,6 +38,7 @@
3838#include "inputeventgenerator.h"
3939#include "deviceconfigparser.h"
4040#include "globalfunctions.h"
41+#include "URLDispatcher.h"
4142
4243static QObject *createWindowStateStorage(QQmlEngine *engine, QJSEngine *scriptEngine)
4344{
@@ -80,4 +81,5 @@ void UtilsPlugin::registerTypes(const char *uri)
8081 qmlRegisterType<InputEventGenerator>(uri, 0, 1, "InputEventGenerator");
8182 qmlRegisterType<DeviceConfigParser>(uri, 0, 1, "DeviceConfigParser");
8283 qmlRegisterSingletonType<GlobalFunctions>(uri, 0, 1, "Functions", createGlobalFunctions);
84+ qmlRegisterType<URLDispatcher>(uri, 0, 1, "URLDispatcher");
8385}
plugins/Utils/timezoneFormatter.cpp+1−1
@@ -39,7 +39,7 @@ QString TimezoneFormatter::currentTimeInTimezoneWithAbbrev(const QVariant &tzId)
3939 QTimeZone tz(tzId.toByteArray());
4040 if (tz.isValid()) {
4141 const QDateTime now = QDateTime::currentDateTime().toTimeZone(tz);
42− return QStringLiteral("%1 %2").arg(now.time().toString(QStringLiteral("h:mm"))).arg(tz.abbreviation(now));
42+ return QStringLiteral("%1 %2").arg(now.time().toString(QStringLiteral("h:mm")), tz.abbreviation(now));
4343 }
4444 return QString();
4545}
plugins/Utils/windowstatestorage.cpp+10−7
@@ -28,7 +28,9 @@
2828QMutex WindowStateStorage::s_mutex;
2929
3030inline QString sanitiseString(QString string) {
31− return string.remove("\"").remove("'").remove("\\");
31+ return string.remove(QLatin1Char('\"'))
32+ .remove(QLatin1Char('\''))
33+ .remove(QLatin1Char('\\'));
3234}
3335
3436WindowStateStorage::WindowStateStorage(QObject *parent):
@@ -74,7 +76,7 @@ WindowStateStorage::WindowState WindowStateStorage::getState(const QString &wind
7476 return (WindowState)query.value(QStringLiteral("state")).toInt();
7577}
7678
77−void WindowStateStorage::saveGeometry(const QString &windowId, const QRect rect)
79+void WindowStateStorage::saveGeometry(const QString &windowId, const QRect &rect)
7880{
7981 const QString queryString = QStringLiteral("INSERT OR REPLACE INTO geometry (windowId, x, y, width, height) values ('%1', '%2', '%3', '%4', '%5');")
8082 .arg(sanitiseString(windowId))
@@ -90,12 +92,12 @@ void WindowStateStorage::saveStage(const QString &appId, int stage)
9092{
9193 const QString queryString = QStringLiteral("INSERT OR REPLACE INTO stage (appId, stage) values ('%1', '%2');")
9294 .arg(sanitiseString(appId))
93− .arg((int)stage);
95+ .arg(stage);
9496
9597 saveValue(queryString);
9698}
9799
98−int WindowStateStorage::getStage(const QString &appId) const
100+int WindowStateStorage::getStage(const QString &appId, int defaultValue) const
99101{
100102 const QString queryString = QStringLiteral("SELECT * FROM stage WHERE appId = '%1';")
101103 .arg(sanitiseString(appId));
@@ -103,7 +105,7 @@ int WindowStateStorage::getStage(const QString &appId) const
103105 QSqlQuery query = getValue(queryString);
104106
105107 if (!query.first()) {
106− return unity::shell::application::ApplicationInfoInterface::MainStage;
108+ return defaultValue;
107109 }
108110 return query.value("stage").toInt();
109111}
@@ -121,7 +123,7 @@ void WindowStateStorage::executeAsyncQuery(const QString &queryString)
121123 }
122124}
123125
124−QRect WindowStateStorage::getGeometry(const QString &windowId, const QRect defaultValue) const
126+QRect WindowStateStorage::getGeometry(const QString &windowId, const QRect &defaultValue) const
125127{
126128 QString queryString = QStringLiteral("SELECT * FROM geometry WHERE windowId = '%1';")
127129 .arg(sanitiseString(windowId));
@@ -131,7 +133,8 @@ QRect WindowStateStorage::getGeometry(const QString &windowId, const QRect defau
131133 if (!query.first()) {
132134 return defaultValue;
133135 }
134− return QRect(query.value(QStringLiteral("x")).toInt(), query.value(QStringLiteral("y")).toInt(), query.value(QStringLiteral("width")).toInt(), query.value(QStringLiteral("height")).toInt());
136+ return QRect(query.value(QStringLiteral("x")).toInt(), query.value(QStringLiteral("y")).toInt(),
137+ query.value(QStringLiteral("width")).toInt(), query.value(QStringLiteral("height")).toInt());
135138}
136139
137140void WindowStateStorage::initdb()
plugins/Utils/windowstatestorage.h+9−4
@@ -32,7 +32,12 @@ public:
3232 WindowStateMaximizedLeft = 1 << 4,
3333 WindowStateMaximizedRight = 1 << 5,
3434 WindowStateMaximizedHorizontally = 1 << 6,
35− WindowStateMaximizedVertically = 1 << 7
35+ WindowStateMaximizedVertically = 1 << 7,
36+ WindowStateMaximizedTopLeft = 1 << 8,
37+ WindowStateMaximizedTopRight = 1 << 9,
38+ WindowStateMaximizedBottomLeft = 1 << 10,
39+ WindowStateMaximizedBottomRight = 1 << 11,
40+ WindowStateRestored = 1 << 12
3641 };
3742 Q_DECLARE_FLAGS(WindowStates, WindowState)
3843#if (QT_VERSION >= QT_VERSION_CHECK(5, 5, 0))
@@ -45,11 +50,11 @@ public:
4550 Q_INVOKABLE void saveState(const QString &windowId, WindowState state);
4651 Q_INVOKABLE WindowState getState(const QString &windowId, WindowState defaultValue) const;
4752
48− Q_INVOKABLE void saveGeometry(const QString &windowId, const QRect rect);
49− Q_INVOKABLE QRect getGeometry(const QString &windowId, const QRect defaultValue) const;
53+ Q_INVOKABLE void saveGeometry(const QString &windowId, const QRect &rect);
54+ Q_INVOKABLE QRect getGeometry(const QString &windowId, const QRect &defaultValue) const;
5055
5156 Q_INVOKABLE void saveStage(const QString &appId, int stage);
52− Q_INVOKABLE int getStage(const QString &appId) const;
57+ Q_INVOKABLE int getStage(const QString &appId, int defaultValue) const;
5358
5459private:
5560 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/WindowManager/TopLevelSurfaceList.cpp−5
@@ -133,11 +133,6 @@ void TopLevelSurfaceList::appendSurfaceHelper(MirSurfaceInterface *surface, Appl
133133
134134void TopLevelSurfaceList::connectSurface(MirSurfaceInterface *surface)
135135{
136− connect(surface, &MirSurfaceInterface::focusedChanged, this, [this, surface](bool focused){
137− if (focused) {
138− this->raise(surface);
139− }
140− });
141136 connect(surface, &MirSurfaceInterface::liveChanged, this, [this, surface](bool live){
142137 if (!live) {
143138 onSurfaceDied(surface);
plugins/Wizard/CMakeLists.txt+6−3
@@ -1,4 +1,6 @@
1−include_directories(${GLIB_INCLUDE_DIRS} ${GEONAMES_INCLUDE_DIRS})
1+pkg_search_module(GD3 REQUIRED gnome-desktop-3.0)
2+
3+include_directories(SYSTEM ${GD3_INCLUDE_DIRS} ${GLIB_INCLUDE_DIRS} ${GEONAMES_INCLUDE_DIRS})
24
35add_library(Wizard-qml MODULE
46 plugin.cpp
@@ -7,10 +9,11 @@ add_library(Wizard-qml MODULE
79 LocalePlugin.cpp
810 timezonemodel.cpp
911 Status.cpp
12+ keyboardLayoutsModel.cpp
1013)
1114
12−qt5_use_modules(Wizard-qml DBus Qml Concurrent)
13−target_link_libraries(Wizard-qml ${GLIB_LDFLAGS} ${GEONAMES_LDFLAGS})
15+qt5_use_modules(Wizard-qml DBus Qml)
16+target_link_libraries(Wizard-qml ${GD3_LDFLAGS} ${GLIB_LDFLAGS} ${GEONAMES_LDFLAGS})
1417add_unity8_plugin(Wizard 0.1 Wizard TARGETS Wizard-qml)
1518
1619set(POLKIT_LIB_DIR "${CMAKE_INSTALL_LOCALSTATEDIR}/lib/polkit-1")
plugins/Wizard/PageList.cpp+16−1
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2014 Canonical Ltd.
2+ * Copyright (C) 2014-2016 Canonical Ltd.
33 *
44 * This program is free software: you can redistribute it and/or modify it
55 * under the terms of the GNU General Public License version 3, as published
@@ -34,6 +34,7 @@
3434#include <QDir>
3535#include <QSet>
3636#include <QStandardPaths>
37+#include <QSettings>
3738
3839PageList::PageList(QObject *parent)
3940 : QObject(parent),
@@ -66,6 +67,20 @@ PageList::PageList(QObject *parent)
6667 Q_FOREACH(const QString &page, disabledPages) {
6768 m_pages.remove(page);
6869 }
70+
71+ // If there was a system update installed, skip until the last page to just greet the user
72+ QSettings settings;
73+ if (settings.value(QStringLiteral("Wizard/SkipUntilFinishedPage")).toBool()) {
74+ const QString lastPage = m_pages.lastKey();
75+ Q_FOREACH(const QString &page, m_pages.keys()) {
76+ if (Q_UNLIKELY(page != lastPage)) {
77+ m_pages.remove(page);
78+ }
79+ }
80+
81+ // ... and reset it again for the next run
82+ settings.remove(QStringLiteral("Wizard/SkipUntilFinishedPage"));
83+ }
6984}
7085
7186QStringList PageList::entries() const
plugins/Wizard/System.cpp+10−1
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2014-2015 Canonical Ltd.
2+ * Copyright (C) 2014-2016 Canonical Ltd.
33 *
44 * This program is free software: you can redistribute it and/or modify it
55 * under the terms of the GNU General Public License version 3, as published
@@ -26,6 +26,7 @@
2626#include <QMap>
2727#include <QProcess>
2828#include <QDebug>
29+#include <QSettings>
2930
3031System::System()
3132 : QObject()
@@ -105,7 +106,15 @@ void System::updateSessionLocale(const QString &locale)
105106 initctl stop scope-registry; \
106107 initctl stop smart-scopes-proxy; \
107108 initctl emit --no-wait indicator-services-start; \
109+ initctl restart --no-wait ubuntu-location-service-trust-stored; \
108110 initctl restart --no-wait maliit-server; \
109111 initctl restart --no-wait indicator-messages; \
110112 initctl restart --no-wait unity8-dash\""));
111113}
114+
115+void System::skipUntilFinishedPage()
116+{
117+ QSettings settings;
118+ settings.setValue(QStringLiteral("Wizard/SkipUntilFinishedPage"), true);
119+ settings.sync();
120+}
plugins/Wizard/System.h+5−1
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2014-2015 Canonical Ltd.
2+ * Copyright (C) 2014-2016 Canonical Ltd.
33 *
44 * This program is free software: you can redistribute it and/or modify it
55 * under the terms of the GNU General Public License version 3, as published
@@ -35,6 +35,10 @@ public:
3535
3636public Q_SLOTS:
3737 void updateSessionLocale(const QString &locale);
38+ /**
39+ * Mark the wizard to skip all the pages and just show the last (welcome to ubuntu) page
40+ */
41+ void skipUntilFinishedPage();
3842
3943Q_SIGNALS:
4044 void wizardEnabledChanged();
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−}
plugins/Wizard/keyboardLayoutsModel.cppnew file+163
@@ -0,0 +1,163 @@
1+/*
2+ * Copyright (C) 2016 Canonical Ltd.
3+ *
4+ * This program is free software: you can redistribute it and/or modify it
5+ * under the terms of the GNU General Public License version 3, as published
6+ * by the Free Software Foundation.
7+ *
8+ * This program is distributed in the hope that it will be useful, but
9+ * WITHOUT ANY WARRANTY; without even the implied warranties of
10+ * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11+ * PURPOSE. See the GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License along
14+ * with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include <QDBusMetaType>
18+#include <QDebug>
19+
20+#define GNOME_DESKTOP_USE_UNSTABLE_API
21+#include <libgnome-desktop/gnome-xkb-info.h>
22+
23+#include "keyboardLayoutsModel.h"
24+
25+typedef QList<QMap<QString, QString>> StringMapList;
26+Q_DECLARE_METATYPE(StringMapList)
27+
28+KeyboardLayoutsModel::KeyboardLayoutsModel(QObject *parent)
29+ : QAbstractListModel(parent)
30+{
31+ m_roleNames = {
32+ {LayoutIdRole, "layoutId"},
33+ {DisplayNameRole, "displayName"},
34+ {LanguageRole, "language"}
35+ };
36+
37+ qDBusRegisterMetaType<StringMapList>();
38+
39+ buildModel();
40+ connect(this, &KeyboardLayoutsModel::languageChanged, this, &KeyboardLayoutsModel::updateModel);
41+}
42+
43+QString KeyboardLayoutsModel::language() const
44+{
45+ return m_language;
46+}
47+
48+void KeyboardLayoutsModel::setLanguage(const QString &language)
49+{
50+ if (m_language == language)
51+ return;
52+
53+ m_language = language;
54+ Q_EMIT languageChanged(language);
55+}
56+
57+static bool compareLayouts(const KeyboardLayoutInfo &layout0, const KeyboardLayoutInfo &layout1)
58+{
59+ QString name0(layout0.id);
60+ QString name1(layout1.id);
61+
62+ if (name0 == name1) {
63+ name0 = layout0.displayName;
64+ name1 = layout1.displayName;
65+
66+ if (name0 == name1) {
67+ name0 = layout0.language;
68+ name1 = layout1.language;
69+ }
70+ }
71+
72+ return QString::localeAwareCompare(name0, name1) < 0;
73+}
74+
75+void KeyboardLayoutsModel::buildModel()
76+{
77+ GList *sources, *tmp;
78+ const gchar *display_name;
79+ const gchar *short_name;
80+ const gchar *xkb_layout;
81+ const gchar *xkb_variant;
82+
83+ GnomeXkbInfo * xkbInfo(gnome_xkb_info_new());
84+
85+ sources = gnome_xkb_info_get_all_layouts(xkbInfo);
86+
87+ for (tmp = sources; tmp != NULL; tmp = tmp->next) {
88+ gboolean result = gnome_xkb_info_get_layout_info(xkbInfo, (const gchar *)tmp->data,
89+ &display_name, &short_name, &xkb_layout, &xkb_variant);
90+ if (!result) {
91+ qWarning() << "Skipping invalid layout";
92+ continue;
93+ }
94+
95+ KeyboardLayoutInfo layout;
96+ layout.id = QString::fromUtf8((const gchar *)tmp->data);
97+ layout.language = QString::fromUtf8(short_name);
98+ layout.displayName = QString::fromUtf8(display_name);
99+
100+ m_db.append(layout);
101+ }
102+ g_list_free(sources);
103+ g_object_unref(xkbInfo);
104+
105+ std::sort(m_db.begin(), m_db.end(), compareLayouts);
106+}
107+
108+void KeyboardLayoutsModel::updateModel()
109+{
110+ beginResetModel();
111+ m_layouts.clear();
112+
113+ const QString lang = m_language.section("_", 0, 0);
114+ const QString country = m_language.section("_", 1, 1).toLower();
115+
116+ Q_FOREACH(const KeyboardLayoutInfo & info, m_db) {
117+ const QString kbdCountry = info.id.section("+", 0, 0);
118+ if (info.language == lang && // filter by language
119+ (kbdCountry.startsWith(country) || kbdCountry.length() > 2)) { // and by known country, also insert anything that doesn't match the country
120+ m_layouts.append(info);
121+ }
122+ }
123+
124+ std::sort(m_layouts.begin(), m_layouts.end(), compareLayouts);
125+ endResetModel();
126+}
127+
128+int KeyboardLayoutsModel::rowCount(const QModelIndex &parent) const
129+{
130+ Q_UNUSED(parent)
131+ return m_layouts.count();
132+}
133+
134+QVariant KeyboardLayoutsModel::data(const QModelIndex &index, int role) const
135+{
136+ const int row = index.row();
137+
138+ if (row >= m_layouts.count()) {
139+ qWarning() << Q_FUNC_INFO << "index out of bounds";
140+ return QVariant();
141+ }
142+
143+ const KeyboardLayoutInfo &layout = m_layouts.at(row);
144+
145+ switch (role) {
146+ case Qt::DisplayRole:
147+ case DisplayNameRole:
148+ return layout.displayName;
149+ case LayoutIdRole:
150+ return layout.id;
151+ case LanguageRole:
152+ return layout.language;
153+ default: {
154+ qWarning() << Q_FUNC_INFO << "unsupported data role";
155+ return QVariant();
156+ }
157+ }
158+}
159+
160+QHash<int, QByteArray> KeyboardLayoutsModel::roleNames() const
161+{
162+ return m_roleNames;
163+}
plugins/Wizard/keyboardLayoutsModel.hnew file+66
@@ -0,0 +1,66 @@
1+/*
2+ * Copyright (C) 2016 Canonical Ltd.
3+ *
4+ * This program is free software: you can redistribute it and/or modify it
5+ * under the terms of the GNU General Public License version 3, as published
6+ * by the Free Software Foundation.
7+ *
8+ * This program is distributed in the hope that it will be useful, but
9+ * WITHOUT ANY WARRANTY; without even the implied warranties of
10+ * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11+ * PURPOSE. See the GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License along
14+ * with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef KEYBOARDLAYOUTSMODEL_H
18+#define KEYBOARDLAYOUTSMODEL_H
19+
20+#include <QAbstractListModel>
21+
22+struct KeyboardLayoutInfo {
23+ QString id;
24+ QString displayName;
25+ QString language;
26+};
27+
28+class KeyboardLayoutsModel: public QAbstractListModel
29+{
30+ Q_OBJECT
31+
32+ Q_PROPERTY(QString language READ language WRITE setLanguage NOTIFY languageChanged)
33+
34+public:
35+ explicit KeyboardLayoutsModel(QObject * parent = nullptr);
36+ ~KeyboardLayoutsModel() = default;
37+
38+ enum Roles {
39+ LayoutIdRole = Qt::UserRole + 1,
40+ DisplayNameRole,
41+ LanguageRole
42+ };
43+
44+ QString language() const;
45+ void setLanguage(const QString &language);
46+
47+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
48+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
49+ QHash<int, QByteArray> roleNames() const override;
50+
51+Q_SIGNALS:
52+ void languageChanged(const QString &language);
53+
54+private Q_SLOTS:
55+ void updateModel();
56+
57+private:
58+ void buildModel();
59+
60+ QString m_language;
61+ QHash<int, QByteArray> m_roleNames;
62+ QVector<KeyboardLayoutInfo> m_layouts;
63+ QVector<KeyboardLayoutInfo> m_db;
64+};
65+
66+#endif
plugins/Wizard/plugin.cpp+2
@@ -20,6 +20,7 @@
2020#include "timezonemodel.h"
2121#include "LocalePlugin.h"
2222#include "Status.h"
23+#include "keyboardLayoutsModel.h"
2324
2425#include <QtQml/qqml.h>
2526
@@ -30,5 +31,6 @@ void WizardPlugin::registerTypes(const char *uri)
3031 qmlRegisterSingletonType<System>(uri, 0, 1, "System", [](QQmlEngine*, QJSEngine*) -> QObject* { return new System; });
3132 qmlRegisterSingletonType<Status>(uri, 0, 1, "Status", [](QQmlEngine*, QJSEngine*) -> QObject* { return new Status; });
3233 qmlRegisterType<TimeZoneLocationModel>(uri, 0, 1, "TimeZoneModel");
34+ qmlRegisterType<KeyboardLayoutsModel>(uri, 0, 1, "KeyboardLayoutsModel");
3335 qmlRegisterType<LocalePlugin>(uri, 0, 1, "LocalePlugin");
3436}
plugins/Wizard/qmldir−1
@@ -1,3 +1,2 @@
11module Wizard
22plugin Wizard-qml
3−typeinfo Wizard.qmltypes
plugins/Wizard/timezonemodel.cpp+5−5
@@ -60,12 +60,12 @@ QVariant TimeZoneLocationModel::data(const QModelIndex &index, int role) const
6060
6161 switch (role) {
6262 case Qt::DisplayRole:
63− return QStringLiteral("%1, %2, %3").arg(geonames_city_get_name(city))
64− .arg(geonames_city_get_state(city))
65− .arg(geonames_city_get_country(city));
63+ return QStringLiteral("%1, %2, %3").arg(geonames_city_get_name(city),
64+ geonames_city_get_state(city),
65+ geonames_city_get_country(city));
6666 case SimpleRole:
67− return QStringLiteral("%1, %2").arg(geonames_city_get_name(city))
68− .arg(geonames_city_get_country(city));
67+ return QStringLiteral("%1, %2").arg(geonames_city_get_name(city),
68+ geonames_city_get_country(city));
6969 case TimeZoneRole:
7070 return geonames_city_get_timezone(city);
7171 case CountryRole:
po/aa.po+363−194
@@ -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-27 13:54+0000\n"
10+"POT-Creation-Date: 2016-11-16 10:44+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,120 +15,272 @@ 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-06-02 06:20+0000\n"
19−"X-Generator: Launchpad (build 18053)\n"
18+"X-Launchpad-Export-Date: 2016-11-23 06:34+0000\n"
19+"X-Generator: Launchpad (build 18269)\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
39−msgid "Device Locked"
40−msgstr ""
41−
42−#: qml/Components/DelayedLockscreen.qml:64
43−msgid "You have been locked out due to too many failed passphrase attempts."
44−msgstr ""
45−
46−#: qml/Components/DelayedLockscreen.qml:65
47−msgid "You have been locked out due to too many failed passcode attempts."
48−msgstr ""
49−
50−#: qml/Components/DelayedLockscreen.qml:74
51−#, qt-format
52−msgid "Please wait %1 minute and then try again…"
53−msgid_plural "Please wait %1 minutes and then try again…"
54−msgstr[0] "Maganak %1 minit qambaalaay, kaadu gabbat"
55−msgstr[1] "Maganak %1 minit qambaalaay, kaadu gabbat"
56−
57−#: qml/Components/Dialogs.qml:144
38+#: qml/Components/Dialogs.qml:149
5839msgctxt "Title: Lock/Log out dialog"
5940msgid "Log out"
6041msgstr "Eweq"
6142
62−#: qml/Components/Dialogs.qml:145
43+#: qml/Components/Dialogs.qml:150
6344msgid "Are you sure you want to log out?"
6445msgstr ""
6546
66−#: qml/Components/Dialogs.qml:147
47+#: qml/Components/Dialogs.qml:152
6748msgctxt "Button: Lock the system"
6849msgid "Lock"
6950msgstr "Koflis"
7051
71−#: qml/Components/Dialogs.qml:154
52+#: qml/Components/Dialogs.qml:159
7253msgctxt "Button: Log out from the system"
7354msgid "Log Out"
7455msgstr "Eweq"
7556
76−#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
77−#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
57+#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
58+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
59+#: qml/Wizard/Pages/passcode-confirm.qml:32
7860#: qml/Wizard/Pages/passcode-set.qml:32
7961msgid "Cancel"
8062msgstr "Bayis"
8163
82−#: qml/Components/Dialogs.qml:173
64+#: qml/Components/Dialogs.qml:178
8365msgctxt "Title: Reboot dialog"
8466msgid "Reboot"
8567msgstr "Wadir-ugus"
8668
87−#: qml/Components/Dialogs.qml:174
69+#: qml/Components/Dialogs.qml:179
8870msgid "Are you sure you want to reboot?"
8971msgstr "Wadir-ugussuh digga maay litoo?"
9072
91−#: qml/Components/Dialogs.qml:176
73+#: qml/Components/Dialogs.qml:181
9274msgid "No"
9375msgstr "Maleey"
9476
95−#: qml/Components/Dialogs.qml:182
77+#: qml/Components/Dialogs.qml:187
9678msgid "Yes"
9779msgstr "Yeey"
9880
99−#: qml/Components/Dialogs.qml:197
81+#: qml/Components/Dialogs.qml:202
10082msgctxt "Title: Power off/Restart dialog"
10183msgid "Power"
10284msgstr "Cayla"
10385
104−#: qml/Components/Dialogs.qml:198
86+#: qml/Components/Dialogs.qml:203
10587msgid ""
10688"Are you sure you would like\n"
10789"to power off?"
10890msgstr "Timmi haytuh digga maay litoo?"
10991
110−#: qml/Components/Dialogs.qml:200
92+#: qml/Components/Dialogs.qml:205
11193msgctxt "Button: Power off the system"
11294msgid "Power off"
11395msgstr "Timmi hayis"
11496
115−#: qml/Components/Dialogs.qml:209
97+#: qml/Components/Dialogs.qml:214
11698msgctxt "Button: Restart the system"
11799msgid "Restart"
118100msgstr "Wadir-qimbis"
119101
120−#: qml/Components/Lockscreen.qml:231
102+#: qml/Components/KeyboardShortcutsOverlay.qml:41
103+msgid "Keyboard Shortcuts"
104+msgstr ""
105+
106+#: qml/Components/KeyboardShortcutsOverlay.qml:55
107+msgid "Unity 8"
108+msgstr ""
109+
110+#: qml/Components/KeyboardShortcutsOverlay.qml:62
111+msgid "PrtScr"
112+msgstr ""
113+
114+#: qml/Components/KeyboardShortcutsOverlay.qml:67
115+msgid "Takes a screenshot."
116+msgstr ""
117+
118+#: qml/Components/KeyboardShortcutsOverlay.qml:75
119+msgid "Alt + PrtScr"
120+msgstr ""
121+
122+#: qml/Components/KeyboardShortcutsOverlay.qml:80
123+msgid "Takes a screenshot of a window."
124+msgstr ""
125+
126+#: qml/Components/KeyboardShortcutsOverlay.qml:88
127+msgid "Super + Space"
128+msgstr ""
129+
130+#: qml/Components/KeyboardShortcutsOverlay.qml:93
131+msgid "Switches to next keyboard layout."
132+msgstr ""
133+
134+#: qml/Components/KeyboardShortcutsOverlay.qml:101
135+msgid "Super + Shift + Space"
136+msgstr ""
137+
138+#: qml/Components/KeyboardShortcutsOverlay.qml:106
139+msgid "Switches to previous keyboard layout."
140+msgstr ""
141+
142+#: qml/Components/KeyboardShortcutsOverlay.qml:118
143+msgid "Launcher"
144+msgstr ""
145+
146+#: qml/Components/KeyboardShortcutsOverlay.qml:125
147+msgid "Super (Hold)"
148+msgstr ""
149+
150+#: qml/Components/KeyboardShortcutsOverlay.qml:130
151+msgid "Opens the launcher, displays shortcuts."
152+msgstr ""
153+
154+#: qml/Components/KeyboardShortcutsOverlay.qml:138
155+msgid "Alt + F1"
156+msgstr ""
157+
158+#: qml/Components/KeyboardShortcutsOverlay.qml:143
159+msgid "Opens launcher keyboard navigation mode."
160+msgstr ""
161+
162+#: qml/Components/KeyboardShortcutsOverlay.qml:151
163+msgid "Super + Tab"
164+msgstr ""
165+
166+#: qml/Components/KeyboardShortcutsOverlay.qml:156
167+msgid "Switches applications via the launcher."
168+msgstr ""
169+
170+#: qml/Components/KeyboardShortcutsOverlay.qml:164
171+msgid "Super + 0 to 9"
172+msgstr ""
173+
174+#: qml/Components/KeyboardShortcutsOverlay.qml:169
175+msgid "Same as clicking on a launcher icon."
176+msgstr ""
177+
178+#: qml/Components/KeyboardShortcutsOverlay.qml:181
179+msgid "Scopes"
180+msgstr ""
181+
182+#: qml/Components/KeyboardShortcutsOverlay.qml:188
183+msgid "Super (Tap)"
184+msgstr ""
185+
186+#: qml/Components/KeyboardShortcutsOverlay.qml:193
187+msgid "Opens the Scopes home."
188+msgstr ""
189+
190+#: qml/Components/KeyboardShortcutsOverlay.qml:209
191+msgid "Switching"
192+msgstr ""
193+
194+#: qml/Components/KeyboardShortcutsOverlay.qml:216
195+msgid "Alt + Tab"
196+msgstr ""
197+
198+#: qml/Components/KeyboardShortcutsOverlay.qml:221
199+msgid "Switches between applications."
200+msgstr ""
201+
202+#: qml/Components/KeyboardShortcutsOverlay.qml:229
203+msgid "Super + W"
204+msgstr ""
205+
206+#: qml/Components/KeyboardShortcutsOverlay.qml:234
207+msgid "Opens the desktop spread."
208+msgstr ""
209+
210+#: qml/Components/KeyboardShortcutsOverlay.qml:242
211+msgid "Cursor Left or Right"
212+msgstr ""
213+
214+#: qml/Components/KeyboardShortcutsOverlay.qml:247
215+msgid "Moves the focus."
216+msgstr ""
217+
218+#: qml/Components/KeyboardShortcutsOverlay.qml:259
219+msgid "Windows"
220+msgstr ""
221+
222+#: qml/Components/KeyboardShortcutsOverlay.qml:266
223+msgid "Ctrl + Super + D"
224+msgstr ""
225+
226+#: qml/Components/KeyboardShortcutsOverlay.qml:271
227+msgid "Minimizes all windows."
228+msgstr ""
229+
230+#: qml/Components/KeyboardShortcutsOverlay.qml:279
231+msgid "Ctrl + Super + Up"
232+msgstr ""
233+
234+#: qml/Components/KeyboardShortcutsOverlay.qml:284
235+msgid "Maximizes the current window."
236+msgstr ""
237+
238+#: qml/Components/KeyboardShortcutsOverlay.qml:292
239+msgid "Ctrl + Super + Down"
240+msgstr ""
241+
242+#: qml/Components/KeyboardShortcutsOverlay.qml:297
243+msgid "Minimizes or restores the current window."
244+msgstr ""
245+
246+#: qml/Components/KeyboardShortcutsOverlay.qml:305
247+msgid "Ctrl + Super + Left or Right"
248+msgstr ""
249+
250+#: qml/Components/KeyboardShortcutsOverlay.qml:310
251+msgid "Semi-maximizes the current window."
252+msgstr ""
253+
254+#: qml/Components/KeyboardShortcutsOverlay.qml:318
255+msgid "Alt + F4"
256+msgstr ""
257+
258+#: qml/Components/KeyboardShortcutsOverlay.qml:323
259+msgid "Closes the current window."
260+msgstr ""
261+
262+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
121263msgid "Return to Call"
122264msgstr "Seecol gacis"
123265
124−#: qml/Components/Lockscreen.qml:231
266+#: qml/Components/Lockscreen.qml:212
125267msgid "Emergency Call"
126268msgstr ""
127269
128−#: qml/Components/Lockscreen.qml:263
270+#: qml/Components/Lockscreen.qml:244
129271msgid "OK"
130272msgstr "Hayya"
131273
274+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
275+#, qt-format
276+msgid "%1:%2:%3"
277+msgstr ""
278+
279+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
280+#, qt-format
281+msgid "%1:%2"
282+msgstr ""
283+
132284#: qml/Components/ModeSwitchWarningDialog.qml:32
133285msgid "Apps may have unsaved data:"
134286msgstr ""
@@ -155,88 +307,88 @@ msgstr ""
155307msgid "Close all"
156308msgstr "Inkih alif"
157309
158−#: qml/Dash/DashPageHeader.qml:333
310+#: qml/Components/SharingPicker.qml:54
311+msgid "Preview Share Item"
312+msgstr ""
313+
314+#: qml/Dash/DashPageHeader.qml:361
159315msgctxt "Button: Open the Ubuntu Store"
160316msgid "Store"
161317msgstr ""
162318
163−#: qml/Dash/DashPageHeader.qml:340
319+#: qml/Dash/DashPageHeader.qml:368
164320msgctxt "Button: Start a search in the current dash scope"
165321msgid "Search"
166322msgstr "Goranto"
167323
168−#: qml/Dash/DashPageHeader.qml:350
324+#: qml/Dash/DashPageHeader.qml:378
169325msgctxt "Button: Show the current dash scope settings"
170326msgid "Settings"
171327msgstr "Massosu"
172328
173−#: qml/Dash/DashPageHeader.qml:357
329+#: qml/Dash/DashPageHeader.qml:385
174330msgid "Remove from Favorites"
175331msgstr ""
176332
177−#: qml/Dash/DashPageHeader.qml:357
333+#: qml/Dash/DashPageHeader.qml:385
178334msgid "Add to Favorites"
179335msgstr ""
180336
181−#: qml/Dash/FiltersPopover.qml:60
337+#: qml/Dash/FiltersPopover.qml:61
182338msgid "Refine your results"
183339msgstr ""
184340
185−#: qml/Dash/FiltersPopover.qml:69
341+#: qml/Dash/FiltersPopover.qml:70
186342msgid "Reset"
187343msgstr ""
188344
189−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:774
345+#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
190346msgid "Show less"
191347msgstr ""
192348
193−#: qml/Dash/GenericScopeView.qml:579
349+#: qml/Dash/GenericScopeView.qml:545
194350msgid "Show all"
195351msgstr ""
196352
197−#: qml/Dash/GenericScopeView.qml:636
353+#: qml/Dash/GenericScopeView.qml:576
198354msgctxt "Label: Hint for dash search line edit"
199355msgid "Search"
200356msgstr "Goranto"
201357
202−#: qml/Dash/PageHeaderExtraPanel.qml:56
358+#: qml/Dash/PageHeaderExtraPanel.qml:57
203359msgid "Recent Searches"
204360msgstr ""
205361
206−#: qml/Dash/PageHeaderExtraPanel.qml:67
362+#: qml/Dash/PageHeaderExtraPanel.qml:68
207363msgid "Clear All"
208364msgstr ""
209365
210−#: qml/Dash/Previews/PreviewActionCombo.qml:35
366+#: qml/Dash/Previews/PreviewActionCombo.qml:36
211367msgid "More..."
212368msgstr ""
213369
214−#: qml/Dash/Previews/PreviewActionCombo.qml:35
370+#: qml/Dash/Previews/PreviewActionCombo.qml:36
215371msgid "Less..."
216372msgstr ""
217373
218−#: qml/Dash/Previews/PreviewCommentInput.qml:68
219−#: qml/Dash/Previews/PreviewRatingInput.qml:175
374+#: qml/Dash/Previews/PreviewCommentInput.qml:83
375+#: qml/Dash/Previews/PreviewRatingInput.qml:202
220376msgid "Send"
221377msgstr "Rub"
222378
223−#: qml/Dash/Previews/PreviewRatingInput.qml:82
379+#: qml/Dash/Previews/PreviewRatingInput.qml:109
224380msgid "Rate this"
225381msgstr ""
226382
227−#: qml/Dash/Previews/PreviewRatingInput.qml:157
383+#: qml/Dash/Previews/PreviewRatingInput.qml:184
228384msgid "Add a review"
229385msgstr ""
230386
231−#: qml/Dash/Previews/PreviewSharing.qml:66
232−msgid "Preview Share Item"
233−msgstr ""
234−
235−#: qml/Dash/PullToRefreshScopeStyle.qml:55
387+#: qml/Dash/PullToRefreshScopeStyle.qml:56
236388msgid "Pull to refresh…"
237389msgstr ""
238390
239−#: qml/Dash/PullToRefreshScopeStyle.qml:60
391+#: qml/Dash/PullToRefreshScopeStyle.qml:61
240392msgid "Release to refresh…"
241393msgstr ""
242394
@@ -244,15 +396,15 @@ msgstr ""
244396msgid "Enable location data"
245397msgstr ""
246398
247−#: qml/Dash/ScopesList.qml:55
399+#: qml/Dash/ScopesList.qml:57
248400msgid "Manage"
249401msgstr ""
250402
251−#: qml/Dash/ScopesList.qml:101
403+#: qml/Dash/ScopesList.qml:104
252404msgid "Home"
253405msgstr "Dabqi"
254406
255−#: qml/Dash/ScopesList.qml:102
407+#: qml/Dash/ScopesList.qml:105
256408msgid "Also installed"
257409msgstr ""
258410
@@ -262,71 +414,55 @@ msgid ""
262414"touch pad to interact with the pointer."
263415msgstr ""
264416
265−#: qml/Greeter/CoverPage.qml:118
417+#: qml/Greeter/CoverPage.qml:127
266418msgid "Unlock"
267419msgstr ""
268420
269−#: qml/Greeter/LoginList.qml:239
270−msgid "Retry"
271−msgstr "Qagis"
272−
273−#: qml/Greeter/LoginList.qml:240
274−msgid "Tap to unlock"
421+#: qml/Greeter/DelayedLockscreen.qml:43
422+msgid "Device Locked"
275423msgstr ""
276424
277−#: qml/Greeter/NarrowView.qml:54
278−msgid "Sorry, incorrect passphrase."
425+#: qml/Greeter/DelayedLockscreen.qml:58
426+msgid "You have been locked out due to too many failed passphrase attempts."
279427msgstr ""
280428
281−#: qml/Greeter/NarrowView.qml:55
282−msgid "Sorry, incorrect passcode."
429+#: qml/Greeter/DelayedLockscreen.qml:59
430+msgid "You have been locked out due to too many failed passcode attempts."
283431msgstr ""
284432
285−#: qml/Greeter/NarrowView.qml:56
286−msgid "This will be your last attempt."
287−msgstr ""
433+#: qml/Greeter/DelayedLockscreen.qml:68
434+#, qt-format
435+msgid "Please wait %1 minute and then try again…"
436+msgid_plural "Please wait %1 minutes and then try again…"
437+msgstr[0] "Maganak %1 minit qambaalaay, kaadu gabbat"
438+msgstr[1] "Maganak %1 minit qambaalaay, kaadu gabbat"
288439
289−#: qml/Greeter/NarrowView.qml:58
290−msgid ""
291−"If passphrase is entered incorrectly, your phone will conduct a factory "
292−"reset and all personal data will be deleted."
440+#: qml/Greeter/Greeter.qml:596
441+msgid "Try again"
293442msgstr ""
294443
295−#: qml/Greeter/NarrowView.qml:59
296−msgid ""
297−"If passcode is entered incorrectly, your phone will conduct a factory reset "
298−"and all personal data will be deleted."
444+#: qml/Greeter/LoginList.qml:70
445+msgid "Passphrase"
299446msgstr ""
300447
301−#: qml/Greeter/NarrowView.qml:116
302−#, qt-format
303−msgid "Enter %1"
304−msgstr "%1 culus"
305−
306−#: qml/Greeter/NarrowView.qml:117
307−msgid "Enter passphrase"
308−msgstr "Tatur-maxco culus"
309−
310−#: qml/Greeter/NarrowView.qml:118
311−msgid "Enter passcode"
312−msgstr "Tatur-mudenta culus"
313−
314−#: qml/Greeter/NarrowView.qml:119
315−#, qt-format
316−msgid "Sorry, incorrect %1"
448+#: qml/Greeter/LoginList.qml:71
449+msgid "Passcode"
317450msgstr ""
318451
319−#: qml/Greeter/NarrowView.qml:120
320−msgid "Sorry, incorrect passphrase"
452+#: qml/Greeter/LoginList.qml:98
453+msgid "Retry"
454+msgstr "Qagis"
455+
456+#: qml/Greeter/LoginList.qml:99
457+msgid "Log In"
321458msgstr ""
322459
323−#: qml/Greeter/NarrowView.qml:121
324−msgctxt "passphrase"
325−msgid "Please re-enter"
460+#: qml/Greeter/NarrowView.qml:252
461+msgid "Emergency"
326462msgstr ""
327463
328−#: qml/Greeter/NarrowView.qml:122
329−msgid "Sorry, incorrect passcode"
464+#: qml/Greeter/SessionsList.qml:122
465+msgid "Select desktop environment"
330466msgstr ""
331467
332468#: qml/Notifications/NotificationMenuItemFactory.qml:124
@@ -341,62 +477,62 @@ msgstr ""
341477msgid "Conference"
342478msgstr "Koboxu"
343479
344−#: qml/Panel/Indicators/MenuItemFactory.qml:762
480+#: qml/Panel/Indicators/MenuItemFactory.qml:847
345481msgid "Nothing is playing"
346482msgstr ""
347483
348−#: qml/Panel/Indicators/MenuItemFactory.qml:891
484+#: qml/Panel/Indicators/MenuItemFactory.qml:975
349485#, qt-format
350486msgid "%1 hour"
351487msgid_plural "%1 hours"
352488msgstr[0] "%1 saaqata"
353489msgstr[1] "%1 saaqata"
354490
355−#: qml/Panel/Indicators/MenuItemFactory.qml:895
491+#: qml/Panel/Indicators/MenuItemFactory.qml:979
356492#, qt-format
357493msgid "%1 minute"
358494msgid_plural "%1 minutes"
359495msgstr[0] "%1 miniti"
360496msgstr[1] "%1 miniti"
361497
362−#: qml/Panel/Indicators/MenuItemFactory.qml:900
498+#: qml/Panel/Indicators/MenuItemFactory.qml:984
363499#, qt-format
364500msgid "%1 second"
365501msgid_plural "%1 seconds"
366502msgstr[0] "%1 nammayye"
367503msgstr[1] "%1 nammayye"
368504
369−#: qml/Panel/Indicators/MenuItemFactory.qml:903
505+#: qml/Panel/Indicators/MenuItemFactory.qml:987
370506msgid "0 seconds"
371507msgstr "0 nammayye"
372508
373509#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
374−#: qml/Panel/Indicators/MenuItemFactory.qml:905
510+#: qml/Panel/Indicators/MenuItemFactory.qml:989
375511#, qt-format
376512msgid "%1 remaining"
377513msgstr "%1 raaqe"
378514
379−#: qml/Panel/Indicators/MenuItemFactory.qml:911
515+#: qml/Panel/Indicators/MenuItemFactory.qml:995
380516msgid "In queue…"
381517msgstr ""
382518
383−#: qml/Panel/Indicators/MenuItemFactory.qml:915
519+#: qml/Panel/Indicators/MenuItemFactory.qml:999
384520msgid "Downloading"
385521msgstr "Qulluumah"
386522
387−#: qml/Panel/Indicators/MenuItemFactory.qml:917
523+#: qml/Panel/Indicators/MenuItemFactory.qml:1001
388524msgid "Paused, tap to resume"
389525msgstr ""
390526
391−#: qml/Panel/Indicators/MenuItemFactory.qml:919
527+#: qml/Panel/Indicators/MenuItemFactory.qml:1003
392528msgid "Canceled"
393529msgstr "Bayteh"
394530
395−#: qml/Panel/Indicators/MenuItemFactory.qml:921
531+#: qml/Panel/Indicators/MenuItemFactory.qml:1005
396532msgid "Finished"
397533msgstr "Duudumteh"
398534
399−#: qml/Panel/Indicators/MenuItemFactory.qml:923
535+#: qml/Panel/Indicators/MenuItemFactory.qml:1007
400536msgid "Failed, tap to retry"
401537msgstr ""
402538
@@ -416,36 +552,16 @@ msgctxt "Button: Call back on phone"
416552msgid "Call back"
417553msgstr ""
418554
419−#: qml/Stages/SideStage.qml:76
555+#: qml/Stage/SideStage.qml:76
420556msgid "Drag using 3 fingers any application from one window to the other"
421557msgstr ""
422558
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
559+#: qml/Tutorial/TutorialLeftLong.qml:49
444560msgid "Long swipe from the left edge to open the Today scope"
445561msgstr ""
446562
447563#: qml/Tutorial/TutorialLeft.qml:47
448−msgid "Swipe from the left edge to open the launcher"
564+msgid "Short swipe from the left edge to open the launcher"
449565msgstr ""
450566
451567#: qml/Tutorial/TutorialRight.qml:55
@@ -453,15 +569,11 @@ msgid "Push your mouse against the right edge to view your open apps"
453569msgstr ""
454570
455571#: qml/Tutorial/TutorialRight.qml:56
456−msgid "Short or long swipe from the right edge to view your open apps"
572+msgid "Swipe from the right edge to view your open apps"
457573msgstr ""
458574
459575#: 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"
576+msgid "Swipe from the top edge to access notifications and quick settings"
465577msgstr ""
466578
467579#: qml/Wizard/Page.qml:54
@@ -469,40 +581,54 @@ msgctxt "Button: Go back one page in the Wizard"
469581msgid "Back"
470582msgstr "Derre"
471583
472−#: qml/Wizard/Pages/10-welcome.qml:27
584+#: qml/Wizard/Pages/10-welcome.qml:28
473585msgid "Language"
474586msgstr ""
475587
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:270
478−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
588+#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
589+#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
590+#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
591+#: qml/Wizard/Pages/70-passwd-type.qml:145
479592#: qml/Wizard/Pages/75-report-check.qml:84
480−#: qml/Wizard/Pages/passcode-desktop.qml:124
481−#: qml/Wizard/Pages/password-set.qml:141
593+#: qml/Wizard/Pages/passcode-desktop.qml:142
594+#: qml/Wizard/Pages/password-set.qml:142
482595msgid "Next"
483596msgstr ""
484597
485−#: qml/Wizard/Pages/30-wifi.qml:29
598+#: qml/Wizard/Pages/20-keyboard.qml:31
599+msgid "Select Keyboard"
600+msgstr ""
601+
602+#: qml/Wizard/Pages/20-keyboard.qml:71
603+msgid "Keyboard language"
604+msgstr ""
605+
606+#: qml/Wizard/Pages/20-keyboard.qml:93
607+msgid "Keyboard layout"
608+msgstr ""
609+
610+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
611+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
612+#: qml/Wizard/Pages/sim.qml:101
613+msgid "Skip"
614+msgstr "Kaqit"
615+
616+#: qml/Wizard/Pages/30-wifi.qml:31
486617msgid "Connect to Wi‑Fi"
487618msgstr ""
488619
489−#: qml/Wizard/Pages/30-wifi.qml:130
620+#: qml/Wizard/Pages/30-wifi.qml:132
490621msgid "Connected"
491622msgstr ""
492623
493−#: qml/Wizard/Pages/30-wifi.qml:163
624+#: qml/Wizard/Pages/30-wifi.qml:165
494625msgid "Available Wi-Fi networks"
495626msgstr ""
496627
497−#: qml/Wizard/Pages/30-wifi.qml:164
628+#: qml/Wizard/Pages/30-wifi.qml:166
498629msgid "No available Wi-Fi networks"
499630msgstr ""
500631
501−#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
502−#: qml/Wizard/Pages/sim.qml:101
503−msgid "Skip"
504−msgstr "Kaqit"
505−
506632#: qml/Wizard/Pages/40-location.qml:27
507633msgid "Location Services"
508634msgstr ""
@@ -535,11 +661,11 @@ msgstr ""
535661msgid "You can change it later in System Settings."
536662msgstr ""
537663
538−#: qml/Wizard/Pages/50-timezone.qml:29
664+#: qml/Wizard/Pages/50-timezone.qml:30
539665msgid "Time Zone"
540666msgstr ""
541667
542−#: qml/Wizard/Pages/50-timezone.qml:181
668+#: qml/Wizard/Pages/50-timezone.qml:182
543669msgid "Enter your city"
544670msgstr ""
545671
@@ -551,21 +677,21 @@ msgstr ""
551677msgid "Preferred Name"
552678msgstr ""
553679
554−#: qml/Wizard/Pages/70-passwd-type.qml:39
680+#: qml/Wizard/Pages/70-passwd-type.qml:40
555681msgid "Lock Screen"
556682msgstr ""
557683
558−#: qml/Wizard/Pages/70-passwd-type.qml:101
684+#: qml/Wizard/Pages/70-passwd-type.qml:102
559685msgctxt "Label: Type of security method"
560686msgid "Create new password"
561687msgstr ""
562688
563−#: qml/Wizard/Pages/70-passwd-type.qml:103
689+#: qml/Wizard/Pages/70-passwd-type.qml:104
564690msgctxt "Label: Type of security method"
565691msgid "Create passcode (numbers only)"
566692msgstr ""
567693
568−#: qml/Wizard/Pages/70-passwd-type.qml:105
694+#: qml/Wizard/Pages/70-passwd-type.qml:106
569695msgctxt "Label: Type of security method"
570696msgid "No lock code"
571697msgstr ""
@@ -586,6 +712,35 @@ msgstr ""
586712msgid "Privacy policy"
587713msgstr ""
588714
715+#: qml/Wizard/Pages/77-system-update.qml:28
716+msgid "Update Device"
717+msgstr ""
718+
719+#: qml/Wizard/Pages/77-system-update.qml:55
720+msgid ""
721+"There is a system update available and ready to install. Afterwards, the "
722+"device will automatically restart."
723+msgstr ""
724+
725+#: qml/Wizard/Pages/77-system-update.qml:76
726+msgctxt "string identifying name of the update"
727+msgid "Ubuntu system"
728+msgstr ""
729+
730+#: qml/Wizard/Pages/77-system-update.qml:83
731+#, qt-format
732+msgctxt "version of the system update"
733+msgid "Version %1"
734+msgstr ""
735+
736+#: qml/Wizard/Pages/77-system-update.qml:102
737+msgid "This could take a few minutes..."
738+msgstr ""
739+
740+#: qml/Wizard/Pages/77-system-update.qml:116
741+msgid "Install and restart now"
742+msgstr ""
743+
589744#: qml/Wizard/Pages/80-finished.qml:89
590745msgid "Welcome to Ubuntu"
591746msgstr ""
@@ -629,7 +784,7 @@ msgid "Service Terms"
629784msgstr ""
630785
631786#: qml/Wizard/Pages/passcode-confirm.qml:43
632−#: qml/Wizard/Pages/passcode-desktop.qml:80
787+#: qml/Wizard/Pages/passcode-desktop.qml:97
633788msgid "Confirm passcode"
634789msgstr ""
635790
@@ -642,28 +797,28 @@ msgctxt "Enter the passcode again"
642797msgid "Please re-enter."
643798msgstr ""
644799
645−#: qml/Wizard/Pages/passcode-desktop.qml:30
800+#: qml/Wizard/Pages/passcode-desktop.qml:31
646801msgid "Lock Screen Passcode"
647802msgstr ""
648803
649−#: qml/Wizard/Pages/passcode-desktop.qml:56
804+#: qml/Wizard/Pages/passcode-desktop.qml:61
650805msgid "Enter 4 numbers to setup your passcode"
651806msgstr ""
652807
653−#: qml/Wizard/Pages/passcode-desktop.qml:65
808+#: qml/Wizard/Pages/passcode-desktop.qml:77
654809#: qml/Wizard/Pages/passcode-set.qml:54
655810msgid "Choose passcode"
656811msgstr ""
657812
658−#: qml/Wizard/Pages/passcode-desktop.qml:105
813+#: qml/Wizard/Pages/passcode-desktop.qml:127
659814msgid "Passcode too short"
660815msgstr ""
661816
662−#: qml/Wizard/Pages/passcode-desktop.qml:107
817+#: qml/Wizard/Pages/passcode-desktop.qml:129
663818msgid "Passcodes match"
664819msgstr ""
665820
666−#: qml/Wizard/Pages/passcode-desktop.qml:109
821+#: qml/Wizard/Pages/passcode-desktop.qml:131
667822msgid "Passcodes do not match"
668823msgstr ""
669824
@@ -671,19 +826,19 @@ msgstr ""
671826msgid "Passcode must be 4 characters long"
672827msgstr ""
673828
674−#: qml/Wizard/Pages/password-set.qml:30
829+#: qml/Wizard/Pages/password-set.qml:31
675830msgid "Lock Screen Password"
676831msgstr ""
677832
678−#: qml/Wizard/Pages/password-set.qml:61
833+#: qml/Wizard/Pages/password-set.qml:62
679834msgid "Enter at least 8 characters"
680835msgstr ""
681836
682−#: qml/Wizard/Pages/password-set.qml:73
837+#: qml/Wizard/Pages/password-set.qml:74
683838msgid "Choose password"
684839msgstr ""
685840
686−#: qml/Wizard/Pages/password-set.qml:103
841+#: qml/Wizard/Pages/password-set.qml:104
687842msgid "Confirm password"
688843msgstr ""
689844
@@ -712,26 +867,30 @@ msgid "To proceed with no SIM tap Skip."
712867msgstr ""
713868
714869#: qml/Wizard/PasswordMeter.qml:87
715−msgid "Passwords match"
870+msgid "Password too short"
716871msgstr ""
717872
718873#: qml/Wizard/PasswordMeter.qml:89
874+msgid "Passwords match"
875+msgstr ""
876+
877+#: qml/Wizard/PasswordMeter.qml:91
719878msgid "Passwords do not match"
720879msgstr ""
721880
722−#: qml/Wizard/PasswordMeter.qml:93
881+#: qml/Wizard/PasswordMeter.qml:95
723882msgid "Strong password"
724883msgstr ""
725884
726−#: qml/Wizard/PasswordMeter.qml:95
885+#: qml/Wizard/PasswordMeter.qml:97
727886msgid "Fair password"
728887msgstr ""
729888
730−#: qml/Wizard/PasswordMeter.qml:97
889+#: qml/Wizard/PasswordMeter.qml:99
731890msgid "Weak password"
732891msgstr ""
733892
734−#: qml/Wizard/PasswordMeter.qml:99
893+#: qml/Wizard/PasswordMeter.qml:101
735894msgid "Very weak password"
736895msgstr ""
737896
@@ -750,6 +909,16 @@ msgstr ""
750909#~ msgid "Reboot"
751910#~ msgstr "Wadir-ugus"
752911
912+#, qt-format
913+#~ msgid "Enter %1"
914+#~ msgstr "%1 culus"
915+
916+#~ msgid "Enter passphrase"
917+#~ msgstr "Tatur-maxco culus"
918+
919+#~ msgid "Enter passcode"
920+#~ msgstr "Tatur-mudenta culus"
921+
753922#~ msgctxt "Label: Type of security method"
754923#~ msgid "Swipe"
755924#~ msgstr "Uysuttuc"
po/am.po+445−213
@@ -7,101 +7,83 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-05-27 13:54+0000\n"
11−"PO-Revision-Date: 2016-03-24 19:07+0000\n"
10+"POT-Creation-Date: 2016-11-16 10:44+0000\n"
11+"PO-Revision-Date: 2016-08-13 14:45+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-06-02 06:20+0000\n"
19−"X-Generator: Launchpad (build 18053)\n"
18+"X-Launchpad-Export-Date: 2016-11-23 06:34+0000\n"
19+"X-Generator: Launchpad (build 18269)\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
39−msgid "Device Locked"
40−msgstr "አካሉ ተቆልፏል"
41−
42−#: qml/Components/DelayedLockscreen.qml:64
43−msgid "You have been locked out due to too many failed passphrase attempts."
44−msgstr "ብዙ ጊዜ የተሳሳተ የ ማለፊያ ሀረግ ለማስገባት በ መሞከር ምክንያት ስልኩ ተቆልፏል"
45−
46−#: qml/Components/DelayedLockscreen.qml:65
47−msgid "You have been locked out due to too many failed passcode attempts."
48−msgstr "ብዙ ጊዜ የተሳሳተ የ ማለፊያ ኮድ ለማስገባት በ መሞከር ምክንያት ስልኩ ተቆልፏል"
49−
50−#: qml/Components/DelayedLockscreen.qml:74
51−#, qt-format
52−msgid "Please wait %1 minute and then try again…"
53−msgid_plural "Please wait %1 minutes and then try again…"
54−msgstr[0] "እባክዎን ይቆዩ %1 ደቂቃ እና ከዛ እንደ ገና ይምክሩ…"
55−msgstr[1] "እባክዎን ይቆዩ %1 ደቂቃዎች እና ከዛ እንደ ገና ይምክሩ…"
56−
57−#: qml/Components/Dialogs.qml:144
38+#: qml/Components/Dialogs.qml:149
5839msgctxt "Title: Lock/Log out dialog"
5940msgid "Log out"
6041msgstr "መውጫ"
6142
62−#: qml/Components/Dialogs.qml:145
43+#: qml/Components/Dialogs.qml:150
6344msgid "Are you sure you want to log out?"
6445msgstr "በእርግጥ መውጣት ይፈልጋሉ?"
6546
66−#: qml/Components/Dialogs.qml:147
47+#: qml/Components/Dialogs.qml:152
6748msgctxt "Button: Lock the system"
6849msgid "Lock"
6950msgstr "መቆለፊያ"
7051
71−#: qml/Components/Dialogs.qml:154
52+#: qml/Components/Dialogs.qml:159
7253msgctxt "Button: Log out from the system"
7354msgid "Log Out"
7455msgstr "መውጫ"
7556
76−#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
77−#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
57+#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
58+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
59+#: qml/Wizard/Pages/passcode-confirm.qml:32
7860#: qml/Wizard/Pages/passcode-set.qml:32
7961msgid "Cancel"
8062msgstr "መሰረዣ"
8163
82−#: qml/Components/Dialogs.qml:173
64+#: qml/Components/Dialogs.qml:178
8365msgctxt "Title: Reboot dialog"
8466msgid "Reboot"
8567msgstr "እንደገና ማስነሻ"
8668
87−#: qml/Components/Dialogs.qml:174
69+#: qml/Components/Dialogs.qml:179
8870msgid "Are you sure you want to reboot?"
8971msgstr "በእርግጥ እንደገና ማስነሳት ይፈልጋሉ?"
9072
91−#: qml/Components/Dialogs.qml:176
73+#: qml/Components/Dialogs.qml:181
9274msgid "No"
9375msgstr "አይ"
9476
95−#: qml/Components/Dialogs.qml:182
77+#: qml/Components/Dialogs.qml:187
9678msgid "Yes"
9779msgstr "አዎ"
9880
99−#: qml/Components/Dialogs.qml:197
81+#: qml/Components/Dialogs.qml:202
10082msgctxt "Title: Power off/Restart dialog"
10183msgid "Power"
10284msgstr "ሐይል"
10385
104−#: qml/Components/Dialogs.qml:198
86+#: qml/Components/Dialogs.qml:203
10587msgid ""
10688"Are you sure you would like\n"
10789"to power off?"
@@ -109,28 +91,198 @@ msgstr ""
10991"በእርግጥ ሐይሉን ማጥፋት\n"
11092"ይፈልጋሉ?"
11193
112−#: qml/Components/Dialogs.qml:200
94+#: qml/Components/Dialogs.qml:205
11395msgctxt "Button: Power off the system"
11496msgid "Power off"
11597msgstr "ሐይል ማጥፊያ"
11698
117−#: qml/Components/Dialogs.qml:209
99+#: qml/Components/Dialogs.qml:214
118100msgctxt "Button: Restart the system"
119101msgid "Restart"
120102msgstr "እንደገና ማስጀመሪያ"
121103
122−#: qml/Components/Lockscreen.qml:231
104+#: qml/Components/KeyboardShortcutsOverlay.qml:41
105+msgid "Keyboard Shortcuts"
106+msgstr "የ ፊደል ገበታ አቋራጮች"
107+
108+#: qml/Components/KeyboardShortcutsOverlay.qml:55
109+msgid "Unity 8"
110+msgstr "Unity 8"
111+
112+#: qml/Components/KeyboardShortcutsOverlay.qml:62
113+msgid "PrtScr"
114+msgstr "PrtScr"
115+
116+#: qml/Components/KeyboardShortcutsOverlay.qml:67
117+msgid "Takes a screenshot."
118+msgstr "መመልከቻ ፎቶ ማንሻ"
119+
120+#: qml/Components/KeyboardShortcutsOverlay.qml:75
121+msgid "Alt + PrtScr"
122+msgstr "Alt + PrtScr"
123+
124+#: qml/Components/KeyboardShortcutsOverlay.qml:80
125+msgid "Takes a screenshot of a window."
126+msgstr "የ መስኮት መመልከቻ ፎቶ ማንሻ"
127+
128+#: qml/Components/KeyboardShortcutsOverlay.qml:88
129+msgid "Super + Space"
130+msgstr "Super + Space"
131+
132+#: qml/Components/KeyboardShortcutsOverlay.qml:93
133+msgid "Switches to next keyboard layout."
134+msgstr "የሚቀጥለው የ ፊደል ገበታ እቅድ መቀየሪያ"
135+
136+#: qml/Components/KeyboardShortcutsOverlay.qml:101
137+msgid "Super + Shift + Space"
138+msgstr "Super + Shift + Space"
139+
140+#: qml/Components/KeyboardShortcutsOverlay.qml:106
141+msgid "Switches to previous keyboard layout."
142+msgstr "ወዳለፈው የ ፊደል ገበታ እቅድ መቀየሪያ"
143+
144+#: qml/Components/KeyboardShortcutsOverlay.qml:118
145+msgid "Launcher"
146+msgstr "ማስነሻ"
147+
148+#: qml/Components/KeyboardShortcutsOverlay.qml:125
149+msgid "Super (Hold)"
150+msgstr "Super (ይጫኑ)"
151+
152+#: qml/Components/KeyboardShortcutsOverlay.qml:130
153+msgid "Opens the launcher, displays shortcuts."
154+msgstr "ማስነሻውን መክፈቻ እና አቋራጮች ማሳያ"
155+
156+#: qml/Components/KeyboardShortcutsOverlay.qml:138
157+msgid "Alt + F1"
158+msgstr "Alt + F1"
159+
160+#: qml/Components/KeyboardShortcutsOverlay.qml:143
161+msgid "Opens launcher keyboard navigation mode."
162+msgstr "መክፈቻ በ ፊደል ገበታ መቃኛ ዘዴ ማስነሻ"
163+
164+#: qml/Components/KeyboardShortcutsOverlay.qml:151
165+msgid "Super + Tab"
166+msgstr "Super + Tab"
167+
168+#: qml/Components/KeyboardShortcutsOverlay.qml:156
169+msgid "Switches applications via the launcher."
170+msgstr "መተግበሪያዎችን በ ማስጀመሪያ መቀየሪያ"
171+
172+#: qml/Components/KeyboardShortcutsOverlay.qml:164
173+msgid "Super + 0 to 9"
174+msgstr "Super + 0 እስከ 9"
175+
176+#: qml/Components/KeyboardShortcutsOverlay.qml:169
177+msgid "Same as clicking on a launcher icon."
178+msgstr "ተመሳሳይ በ ማስጀመሪያ ምልክት ላይ እንደ መጫን"
179+
180+#: qml/Components/KeyboardShortcutsOverlay.qml:181
181+msgid "Scopes"
182+msgstr "ክልል"
183+
184+#: qml/Components/KeyboardShortcutsOverlay.qml:188
185+msgid "Super (Tap)"
186+msgstr "Super (Tap)"
187+
188+#: qml/Components/KeyboardShortcutsOverlay.qml:193
189+msgid "Opens the Scopes home."
190+msgstr "የ ክልል ቤት መክፈቻ"
191+
192+#: qml/Components/KeyboardShortcutsOverlay.qml:209
193+msgid "Switching"
194+msgstr "በ መቀየር ላይ"
195+
196+#: qml/Components/KeyboardShortcutsOverlay.qml:216
197+msgid "Alt + Tab"
198+msgstr "Alt + Tab"
199+
200+#: qml/Components/KeyboardShortcutsOverlay.qml:221
201+msgid "Switches between applications."
202+msgstr "በ መተግበሪያዎች መካከል መቀያየሪያ"
203+
204+#: qml/Components/KeyboardShortcutsOverlay.qml:229
205+msgid "Super + W"
206+msgstr "Super + W"
207+
208+#: qml/Components/KeyboardShortcutsOverlay.qml:234
209+msgid "Opens the desktop spread."
210+msgstr "የ ዴስክቶፕ ማስፊያ መክፈቻ"
211+
212+#: qml/Components/KeyboardShortcutsOverlay.qml:242
213+msgid "Cursor Left or Right"
214+msgstr "መጠቆሚያ የ ግራ ወይንም የ ቀኝ"
215+
216+#: qml/Components/KeyboardShortcutsOverlay.qml:247
217+msgid "Moves the focus."
218+msgstr "ትኩረት ማንቀሳቀሻ"
219+
220+#: qml/Components/KeyboardShortcutsOverlay.qml:259
221+msgid "Windows"
222+msgstr "መስኮቶች"
223+
224+#: qml/Components/KeyboardShortcutsOverlay.qml:266
225+msgid "Ctrl + Super + D"
226+msgstr "Ctrl + Super + D"
227+
228+#: qml/Components/KeyboardShortcutsOverlay.qml:271
229+msgid "Minimizes all windows."
230+msgstr "ሁሉንም መስኮቶች ማሳነሻ"
231+
232+#: qml/Components/KeyboardShortcutsOverlay.qml:279
233+msgid "Ctrl + Super + Up"
234+msgstr "Ctrl + Super + Up"
235+
236+#: qml/Components/KeyboardShortcutsOverlay.qml:284
237+msgid "Maximizes the current window."
238+msgstr "የ አሁኑን መስኮት ማሳደጊያ"
239+
240+#: qml/Components/KeyboardShortcutsOverlay.qml:292
241+msgid "Ctrl + Super + Down"
242+msgstr "Ctrl + Super + Down"
243+
244+#: qml/Components/KeyboardShortcutsOverlay.qml:297
245+msgid "Minimizes or restores the current window."
246+msgstr "የ አሁኑን መስኮትማሳነሻ ወይንም እንደ ነበር መመለሻ"
247+
248+#: qml/Components/KeyboardShortcutsOverlay.qml:305
249+msgid "Ctrl + Super + Left or Right"
250+msgstr "Ctrl + Super + Left or Right"
251+
252+#: qml/Components/KeyboardShortcutsOverlay.qml:310
253+msgid "Semi-maximizes the current window."
254+msgstr "የ አሁኑን መስኮት በ ንዑስ-ማሳደጊያ"
255+
256+#: qml/Components/KeyboardShortcutsOverlay.qml:318
257+msgid "Alt + F4"
258+msgstr "Alt + F4"
259+
260+#: qml/Components/KeyboardShortcutsOverlay.qml:323
261+msgid "Closes the current window."
262+msgstr "የ አሁኑን መስኮት መዝጊያ"
263+
264+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
123265msgid "Return to Call"
124266msgstr "ወደ ጥሪ መመለሻ"
125267
126−#: qml/Components/Lockscreen.qml:231
268+#: qml/Components/Lockscreen.qml:212
127269msgid "Emergency Call"
128270msgstr "የ ድንገተኛ ጥሪ"
129271
130−#: qml/Components/Lockscreen.qml:263
272+#: qml/Components/Lockscreen.qml:244
131273msgid "OK"
132274msgstr "እሺ"
133275
276+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
277+#, qt-format
278+msgid "%1:%2:%3"
279+msgstr "%1:%2:%3"
280+
281+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
282+#, qt-format
283+msgid "%1:%2"
284+msgstr "%1:%2"
285+
134286#: qml/Components/ModeSwitchWarningDialog.qml:32
135287msgid "Apps may have unsaved data:"
136288msgstr "መተግበሪያው ያልተቀመጠ ዳታ ይዟል:"
@@ -157,88 +309,88 @@ msgstr "አሁን እንደገና መገናኛ!"
157309msgid "Close all"
158310msgstr "ሁሉንም መዝጊያ"
159311
160−#: qml/Dash/DashPageHeader.qml:333
312+#: qml/Components/SharingPicker.qml:54
313+msgid "Preview Share Item"
314+msgstr "የሚካፈሉትን እቃ ቅድመ እይታ"
315+
316+#: qml/Dash/DashPageHeader.qml:361
161317msgctxt "Button: Open the Ubuntu Store"
162318msgid "Store"
163319msgstr "ማስቀመጫ"
164320
165−#: qml/Dash/DashPageHeader.qml:340
321+#: qml/Dash/DashPageHeader.qml:368
166322msgctxt "Button: Start a search in the current dash scope"
167323msgid "Search"
168324msgstr "መፈለጊያ"
169325
170−#: qml/Dash/DashPageHeader.qml:350
326+#: qml/Dash/DashPageHeader.qml:378
171327msgctxt "Button: Show the current dash scope settings"
172328msgid "Settings"
173329msgstr "ማሰናጃዎች"
174330
175−#: qml/Dash/DashPageHeader.qml:357
331+#: qml/Dash/DashPageHeader.qml:385
176332msgid "Remove from Favorites"
177333msgstr "ከምወዳቸው ማስወገጃ"
178334
179−#: qml/Dash/DashPageHeader.qml:357
335+#: qml/Dash/DashPageHeader.qml:385
180336msgid "Add to Favorites"
181337msgstr "ወደምወዳቸው መጨመሪያ"
182338
183−#: qml/Dash/FiltersPopover.qml:60
339+#: qml/Dash/FiltersPopover.qml:61
184340msgid "Refine your results"
185341msgstr "የ እርስዎን ውጤቶች እንደገና ማጣሪያ"
186342
187−#: qml/Dash/FiltersPopover.qml:69
343+#: qml/Dash/FiltersPopover.qml:70
188344msgid "Reset"
189345msgstr "እንደ ነበረ መመለሻ"
190346
191−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:774
347+#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
192348msgid "Show less"
193−msgstr ""
349+msgstr "ትንሽ ማሳያ"
194350
195−#: qml/Dash/GenericScopeView.qml:579
351+#: qml/Dash/GenericScopeView.qml:545
196352msgid "Show all"
197−msgstr ""
353+msgstr "ሁሉንም ማሳያ"
198354
199−#: qml/Dash/GenericScopeView.qml:636
355+#: qml/Dash/GenericScopeView.qml:576
200356msgctxt "Label: Hint for dash search line edit"
201357msgid "Search"
202358msgstr "መፈለጊያ"
203359
204−#: qml/Dash/PageHeaderExtraPanel.qml:56
360+#: qml/Dash/PageHeaderExtraPanel.qml:57
205361msgid "Recent Searches"
206362msgstr "የ ቅርብ ጊዜ ፍለጋዎች"
207363
208−#: qml/Dash/PageHeaderExtraPanel.qml:67
364+#: qml/Dash/PageHeaderExtraPanel.qml:68
209365msgid "Clear All"
210366msgstr "ሁሉንም ማጽጃ"
211367
212−#: qml/Dash/Previews/PreviewActionCombo.qml:35
368+#: qml/Dash/Previews/PreviewActionCombo.qml:36
213369msgid "More..."
214370msgstr "ተጨማሪ..."
215371
216−#: qml/Dash/Previews/PreviewActionCombo.qml:35
372+#: qml/Dash/Previews/PreviewActionCombo.qml:36
217373msgid "Less..."
218374msgstr "አነስተኛ..."
219375
220−#: qml/Dash/Previews/PreviewCommentInput.qml:68
221−#: qml/Dash/Previews/PreviewRatingInput.qml:175
376+#: qml/Dash/Previews/PreviewCommentInput.qml:83
377+#: qml/Dash/Previews/PreviewRatingInput.qml:202
222378msgid "Send"
223379msgstr "መላኪያ"
224380
225−#: qml/Dash/Previews/PreviewRatingInput.qml:82
381+#: qml/Dash/Previews/PreviewRatingInput.qml:109
226382msgid "Rate this"
227383msgstr "ለዚህ ደረጃ ይስጡ"
228384
229−#: qml/Dash/Previews/PreviewRatingInput.qml:157
385+#: qml/Dash/Previews/PreviewRatingInput.qml:184
230386msgid "Add a review"
231387msgstr "ግምገማ መጨመሪያ"
232388
233−#: qml/Dash/Previews/PreviewSharing.qml:66
234−msgid "Preview Share Item"
235−msgstr "የሚካፈሉትን እቃ ቅድመ እይታ"
236−
237−#: qml/Dash/PullToRefreshScopeStyle.qml:55
389+#: qml/Dash/PullToRefreshScopeStyle.qml:56
238390msgid "Pull to refresh…"
239391msgstr "ይሳቡ ለማነቃቃት…"
240392
241−#: qml/Dash/PullToRefreshScopeStyle.qml:60
393+#: qml/Dash/PullToRefreshScopeStyle.qml:61
242394msgid "Release to refresh…"
243395msgstr "ይልቀቁ ለማነቃቃት…"
244396
@@ -246,15 +398,15 @@ msgstr "ይልቀቁ ለማነቃቃት…"
246398msgid "Enable location data"
247399msgstr "የአካባቢ ዳታ ማስቻያ"
248400
249−#: qml/Dash/ScopesList.qml:55
401+#: qml/Dash/ScopesList.qml:57
250402msgid "Manage"
251403msgstr "አስተዳዳሪ"
252404
253−#: qml/Dash/ScopesList.qml:101
405+#: qml/Dash/ScopesList.qml:104
254406msgid "Home"
255407msgstr "ቤት"
256408
257−#: qml/Dash/ScopesList.qml:102
409+#: qml/Dash/ScopesList.qml:105
258410msgid "Also installed"
259411msgstr "እንዲሁም የተገጠሙ"
260412
@@ -264,76 +416,56 @@ msgid ""
264416"touch pad to interact with the pointer."
265417msgstr "የ እርስዎ አካል አሁን ከ ውጪ ማሳያ ጋር ተገናኝቷል: ይህን መመልከቻ እንደ ተችፓድ መጠቀሚያ"
266418
267−#: qml/Greeter/CoverPage.qml:118
419+#: qml/Greeter/CoverPage.qml:127
268420msgid "Unlock"
269421msgstr "መክፈቻ"
270422
271−#: qml/Greeter/LoginList.qml:239
272−msgid "Retry"
273−msgstr "እንደገና ይሞክሩ"
274−
275−#: qml/Greeter/LoginList.qml:240
276−msgid "Tap to unlock"
277−msgstr "ለመክፈት መታ ያድርጉ"
278−
279−#: qml/Greeter/NarrowView.qml:54
280−msgid "Sorry, incorrect passphrase."
281−msgstr "አዝናለሁ የተሳሳተ የማለፊያ ሐረግ"
282−
283−#: qml/Greeter/NarrowView.qml:55
284−msgid "Sorry, incorrect passcode."
285−msgstr "አዝናለሁ የተሳሳተ የማለፊያ ኮድ"
286−
287−#: qml/Greeter/NarrowView.qml:56
288−msgid "This will be your last attempt."
289−msgstr "ይህ የመጨረሻ ሙከራዎ ነው"
423+#: qml/Greeter/DelayedLockscreen.qml:43
424+msgid "Device Locked"
425+msgstr "አካሉ ተቆልፏል"
290426
291−#: qml/Greeter/NarrowView.qml:58
292−msgid ""
293−"If passphrase is entered incorrectly, your phone will conduct a factory "
294−"reset and all personal data will be deleted."
295−msgstr ""
296−"የተሳሳተ የማለፊያ ሐረግ ካስገቡ የ እርስዎ ስልክ ወደ ነበረበት ወደ ፋክቶሪው ዘዴ ይመለሳል: እና የ ግል ዳታ በሙሉ "
297−"ይጠፋል"
427+#: qml/Greeter/DelayedLockscreen.qml:58
428+msgid "You have been locked out due to too many failed passphrase attempts."
429+msgstr "ብዙ ጊዜ የተሳሳተ የ ማለፊያ ሀረግ ለማስገባት በ መሞከር ምክንያት ስልኩ ተቆልፏል"
298430
299−#: qml/Greeter/NarrowView.qml:59
300−msgid ""
301−"If passcode is entered incorrectly, your phone will conduct a factory reset "
302−"and all personal data will be deleted."
303−msgstr ""
304−"የተሳሳተ የማለፊያ ኮድ ካስገቡ የ እርስዎ ስልክ ወደ ነበረበት ወደ ፋክቶሪው ዘዴ ይመለሳል: እና የ ግል ዳታ በሙሉ "
305−"ይጠፋል"
431+#: qml/Greeter/DelayedLockscreen.qml:59
432+msgid "You have been locked out due to too many failed passcode attempts."
433+msgstr "ብዙ ጊዜ የተሳሳተ የ ማለፊያ ኮድ ለማስገባት በ መሞከር ምክንያት ስልኩ ተቆልፏል"
306434
307−#: qml/Greeter/NarrowView.qml:116
435+#: qml/Greeter/DelayedLockscreen.qml:68
308436#, qt-format
309−msgid "Enter %1"
310−msgstr "ማስገቢያ %1"
437+msgid "Please wait %1 minute and then try again…"
438+msgid_plural "Please wait %1 minutes and then try again…"
439+msgstr[0] "እባክዎን ይቆዩ %1 ደቂቃ እና ከዛ እንደ ገና ይምክሩ…"
440+msgstr[1] "እባክዎን ይቆዩ %1 ደቂቃዎች እና ከዛ እንደ ገና ይምክሩ…"
311441
312−#: qml/Greeter/NarrowView.qml:117
313−msgid "Enter passphrase"
314−msgstr "የ ማለፊያ ሀረግ ያስገቡ"
442+#: qml/Greeter/Greeter.qml:596
443+msgid "Try again"
444+msgstr "እንደገና ይሞክሩ"
315445
316−#: qml/Greeter/NarrowView.qml:118
317−msgid "Enter passcode"
318−msgstr "የ ማለፊያ ኮድ ያስገቡ"
446+#: qml/Greeter/LoginList.qml:70
447+msgid "Passphrase"
448+msgstr "የማለፊያ ሐረግ"
319449
320−#: qml/Greeter/NarrowView.qml:119
321−#, qt-format
322−msgid "Sorry, incorrect %1"
323−msgstr "አዝናለሁ: የተሳሳተ%1"
450+#: qml/Greeter/LoginList.qml:71
451+msgid "Passcode"
452+msgstr "ማለፊያ ኮድ"
324453
325−#: qml/Greeter/NarrowView.qml:120
326−msgid "Sorry, incorrect passphrase"
327−msgstr "አዝናለሁ የተሳሳተ የማለፊያ ሐረግ"
454+#: qml/Greeter/LoginList.qml:98
455+msgid "Retry"
456+msgstr "እንደገና ይሞክሩ"
328457
329−#: qml/Greeter/NarrowView.qml:121
330−msgctxt "passphrase"
331−msgid "Please re-enter"
332−msgstr "እባክዎን እንደገና-ያስገቡ"
458+#: qml/Greeter/LoginList.qml:99
459+msgid "Log In"
460+msgstr "መግቢያ"
333461
334−#: qml/Greeter/NarrowView.qml:122
335−msgid "Sorry, incorrect passcode"
336−msgstr "አዝናለሁ የተሳሳተ የማለፊያ ኮድ"
462+#: qml/Greeter/NarrowView.qml:252
463+msgid "Emergency"
464+msgstr "ድንገተኛ"
465+
466+#: qml/Greeter/SessionsList.qml:122
467+msgid "Select desktop environment"
468+msgstr "የ ዴስክቶፕ አይነት ይምረጡ"
337469
338470#: qml/Notifications/NotificationMenuItemFactory.qml:124
339471msgid "Show password"
@@ -347,62 +479,62 @@ msgstr "ወደ ጥሪው ለመመለስ መታ ያድርጉ..."
347479msgid "Conference"
348480msgstr "ስብሰባ"
349481
350−#: qml/Panel/Indicators/MenuItemFactory.qml:762
482+#: qml/Panel/Indicators/MenuItemFactory.qml:847
351483msgid "Nothing is playing"
352484msgstr "ምንም አይጫወትም"
353485
354−#: qml/Panel/Indicators/MenuItemFactory.qml:891
486+#: qml/Panel/Indicators/MenuItemFactory.qml:975
355487#, qt-format
356488msgid "%1 hour"
357489msgid_plural "%1 hours"
358490msgstr[0] "%1 ሰአት"
359491msgstr[1] "%1 ሰአቶች"
360492
361−#: qml/Panel/Indicators/MenuItemFactory.qml:895
493+#: qml/Panel/Indicators/MenuItemFactory.qml:979
362494#, qt-format
363495msgid "%1 minute"
364496msgid_plural "%1 minutes"
365497msgstr[0] "%1 ደቂቃ"
366498msgstr[1] "%1 ደቂቃዎች"
367499
368−#: qml/Panel/Indicators/MenuItemFactory.qml:900
500+#: qml/Panel/Indicators/MenuItemFactory.qml:984
369501#, qt-format
370502msgid "%1 second"
371503msgid_plural "%1 seconds"
372504msgstr[0] "%1 ሰከንድ"
373505msgstr[1] "%1 ሰከንዶች"
374506
375−#: qml/Panel/Indicators/MenuItemFactory.qml:903
507+#: qml/Panel/Indicators/MenuItemFactory.qml:987
376508msgid "0 seconds"
377509msgstr "0 ሰከንዶች"
378510
379511#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
380−#: qml/Panel/Indicators/MenuItemFactory.qml:905
512+#: qml/Panel/Indicators/MenuItemFactory.qml:989
381513#, qt-format
382514msgid "%1 remaining"
383515msgstr "%1 የቀረው"
384516
385−#: qml/Panel/Indicators/MenuItemFactory.qml:911
517+#: qml/Panel/Indicators/MenuItemFactory.qml:995
386518msgid "In queue…"
387519msgstr "ወረፋ በመጠበቅ ላይ…"
388520
389−#: qml/Panel/Indicators/MenuItemFactory.qml:915
521+#: qml/Panel/Indicators/MenuItemFactory.qml:999
390522msgid "Downloading"
391523msgstr "በማውረድ ላይ"
392524
393−#: qml/Panel/Indicators/MenuItemFactory.qml:917
525+#: qml/Panel/Indicators/MenuItemFactory.qml:1001
394526msgid "Paused, tap to resume"
395527msgstr "ማስቆሚያ: ለመቀጠል መታ ያድርጉ"
396528
397−#: qml/Panel/Indicators/MenuItemFactory.qml:919
529+#: qml/Panel/Indicators/MenuItemFactory.qml:1003
398530msgid "Canceled"
399531msgstr "ተሰርዟል"
400532
401−#: qml/Panel/Indicators/MenuItemFactory.qml:921
533+#: qml/Panel/Indicators/MenuItemFactory.qml:1005
402534msgid "Finished"
403535msgstr "ጨርሷል"
404536
405−#: qml/Panel/Indicators/MenuItemFactory.qml:923
537+#: qml/Panel/Indicators/MenuItemFactory.qml:1007
406538msgid "Failed, tap to retry"
407539msgstr "አልተቻለም: እንደገና ለመሞከር መታ ያድርጉ"
408540
@@ -422,93 +554,83 @@ msgctxt "Button: Call back on phone"
422554msgid "Call back"
423555msgstr "መልሶ መደወያ"
424556
425−#: qml/Stages/SideStage.qml:76
557+#: qml/Stage/SideStage.qml:76
426558msgid "Drag using 3 fingers any application from one window to the other"
427559msgstr "መጎተቻ 3 ጣቶች በ መጠቀም ማንኛውንም መተግበሪያ ከ አንድ መስኮት ወደ ሌላ"
428560
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
561+#: qml/Tutorial/TutorialLeftLong.qml:49
450562msgid "Long swipe from the left edge to open the Today scope"
451563msgstr "በ ረጅሙ ከ ግራ ጠርዝ በኩል ይጥረጉ የ ዛሬን ክልል ለ መክፈት"
452564
453565#: qml/Tutorial/TutorialLeft.qml:47
454−msgid "Swipe from the left edge to open the launcher"
455−msgstr "ከ ግራ ጠርዝ በኩል ይጥረጉ ማስጀመሪያውን ለ መክፈት"
566+msgid "Short swipe from the left edge to open the launcher"
567+msgstr "በ አጭሩ ይጥረጉ ከ ግራ ጠርዝ በኩል ማስጀመሪያውን ለ መክፈት"
456568
457569#: qml/Tutorial/TutorialRight.qml:55
458570msgid "Push your mouse against the right edge to view your open apps"
459−msgstr ""
571+msgstr "የ እርስዎን አይጥ መጠቆሚያ ወደ ቀኝ ጠርዝ በኩል ያስጠጉ የ ተከፈቱ መተግበሪያዎችን ለ መመልከት"
460572
461573#: qml/Tutorial/TutorialRight.qml:56
462−msgid "Short or long swipe from the right edge to view your open apps"
463−msgstr "በ አጭሩ ወይንም በ ረጅሙ ይጥረጉ ከ ቀኝ ጠረዝ በኩል የ ተከፈቱ መተግበሪያዎችን ለማየት"
574+msgid "Swipe from the right edge to view your open apps"
575+msgstr "ከ ቀኝ በኩል ይጥረጉ የ ተከፈቱ መተግበሪያዎችን ለ መመልከት"
464576
465577#: 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 "ከ ላይ ጠርዝ በኩል ይጥረጉ የ ማስታወቂያ መደርደሪያ ለ መክፈት"
578+msgid "Swipe from the top edge to access notifications and quick settings"
579+msgstr "ከ ላይ ጠረዝ በኩል ይጥረጉ ማስታወቂያዎች እና በፍጥነት ማሰናጃዎች ጋር ለ መድረስ"
472580
473581#: qml/Wizard/Page.qml:54
474582msgctxt "Button: Go back one page in the Wizard"
475583msgid "Back"
476584msgstr "ወደ ኋላ"
477585
478−#: qml/Wizard/Pages/10-welcome.qml:27
586+#: qml/Wizard/Pages/10-welcome.qml:28
479587msgid "Language"
480588msgstr "ቋንቋ"
481589
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:270
484−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
590+#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
591+#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
592+#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
593+#: qml/Wizard/Pages/70-passwd-type.qml:145
485594#: qml/Wizard/Pages/75-report-check.qml:84
486−#: qml/Wizard/Pages/passcode-desktop.qml:124
487−#: qml/Wizard/Pages/password-set.qml:141
595+#: qml/Wizard/Pages/passcode-desktop.qml:142
596+#: qml/Wizard/Pages/password-set.qml:142
488597msgid "Next"
489598msgstr "ይቀጥሉ"
490599
491−#: qml/Wizard/Pages/30-wifi.qml:29
600+#: qml/Wizard/Pages/20-keyboard.qml:31
601+msgid "Select Keyboard"
602+msgstr "ቋንቋ ይምረጡ"
603+
604+#: qml/Wizard/Pages/20-keyboard.qml:71
605+msgid "Keyboard language"
606+msgstr "የ ፊደል ገበታ ቋንቋ"
607+
608+#: qml/Wizard/Pages/20-keyboard.qml:93
609+msgid "Keyboard layout"
610+msgstr "የ ፊደል ገበታ አቀራረብ"
611+
612+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
613+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
614+#: qml/Wizard/Pages/sim.qml:101
615+msgid "Skip"
616+msgstr "መዝለያ"
617+
618+#: qml/Wizard/Pages/30-wifi.qml:31
492619msgid "Connect to Wi‑Fi"
493620msgstr "ወደ ዋይ‑ፋይ መገናኛ"
494621
495−#: qml/Wizard/Pages/30-wifi.qml:130
622+#: qml/Wizard/Pages/30-wifi.qml:132
496623msgid "Connected"
497624msgstr "ተገናኝቷል"
498625
499−#: qml/Wizard/Pages/30-wifi.qml:163
626+#: qml/Wizard/Pages/30-wifi.qml:165
500627msgid "Available Wi-Fi networks"
501628msgstr "ዝግጁ የ ዋይ-ፋይ ኔትዎርኮች"
502629
503−#: qml/Wizard/Pages/30-wifi.qml:164
630+#: qml/Wizard/Pages/30-wifi.qml:166
504631msgid "No available Wi-Fi networks"
505632msgstr "ምንም ዝግጁ ዋይ-ፋይ ኔትዎርኮች አልተገኙም"
506633
507−#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
508−#: qml/Wizard/Pages/sim.qml:101
509−msgid "Skip"
510−msgstr "መዝለያ"
511−
512634#: qml/Wizard/Pages/40-location.qml:27
513635msgid "Location Services"
514636msgstr "የ አካባቢ ግልጋሎት"
@@ -541,11 +663,11 @@ msgstr "የ እኔን አካባቢ አትጠቀም"
541663msgid "You can change it later in System Settings."
542664msgstr "እርስዎ በኋላ በ ስርአት ማሰናጃ ውስጥ መቀየር ይችላሉ"
543665
544−#: qml/Wizard/Pages/50-timezone.qml:29
666+#: qml/Wizard/Pages/50-timezone.qml:30
545667msgid "Time Zone"
546668msgstr "የ ሰአት ክልል"
547669
548−#: qml/Wizard/Pages/50-timezone.qml:181
670+#: qml/Wizard/Pages/50-timezone.qml:182
549671msgid "Enter your city"
550672msgstr "የ እርስዎን ከተማ ያስገቡ"
551673
@@ -557,21 +679,21 @@ msgstr "የ እርስዎን አካል የ ግልዎ ያድርጉ"
557679msgid "Preferred Name"
558680msgstr "የመረጡት ስም"
559681
560−#: qml/Wizard/Pages/70-passwd-type.qml:39
682+#: qml/Wizard/Pages/70-passwd-type.qml:40
561683msgid "Lock Screen"
562684msgstr "መመልከቻውን መቆለፊያ"
563685
564−#: qml/Wizard/Pages/70-passwd-type.qml:101
686+#: qml/Wizard/Pages/70-passwd-type.qml:102
565687msgctxt "Label: Type of security method"
566688msgid "Create new password"
567689msgstr "አዲስ የ መግቢያ ቃል መፍጠሪያ"
568690
569−#: qml/Wizard/Pages/70-passwd-type.qml:103
691+#: qml/Wizard/Pages/70-passwd-type.qml:104
570692msgctxt "Label: Type of security method"
571693msgid "Create passcode (numbers only)"
572694msgstr "አዲስ የ ማለፊያ ኮድ መፍጠሪያ (ቁጥር ብቻ)"
573695
574−#: qml/Wizard/Pages/70-passwd-type.qml:105
696+#: qml/Wizard/Pages/70-passwd-type.qml:106
575697msgctxt "Label: Type of security method"
576698msgid "No lock code"
577699msgstr "ምንም መቆለፊያ ኮድ አልተገኘም"
@@ -592,6 +714,35 @@ msgstr "የ ስርአቱን አፈጻጸም ለማሻሻል የ ግጭት እና
592714msgid "Privacy policy"
593715msgstr "የ ግላዊነት መመሪያ"
594716
717+#: qml/Wizard/Pages/77-system-update.qml:28
718+msgid "Update Device"
719+msgstr "አካሉን ማሻሻያ"
720+
721+#: qml/Wizard/Pages/77-system-update.qml:55
722+msgid ""
723+"There is a system update available and ready to install. Afterwards, the "
724+"device will automatically restart."
725+msgstr "የ ስርአት ማሻሻያ ዝግጁ ነው ለ መግጠም: ከዚያ በኋላ አካሉ ራሱ በራሱ እንደገና ይጀምራል"
726+
727+#: qml/Wizard/Pages/77-system-update.qml:76
728+msgctxt "string identifying name of the update"
729+msgid "Ubuntu system"
730+msgstr "የ ኡቡቱ ስርአት"
731+
732+#: qml/Wizard/Pages/77-system-update.qml:83
733+#, qt-format
734+msgctxt "version of the system update"
735+msgid "Version %1"
736+msgstr "እትም %1"
737+
738+#: qml/Wizard/Pages/77-system-update.qml:102
739+msgid "This could take a few minutes..."
740+msgstr "ይህ ትንሽ ደቂቆች ይወስዳል"
741+
742+#: qml/Wizard/Pages/77-system-update.qml:116
743+msgid "Install and restart now"
744+msgstr "መግጠሚያ እና እንደገና ማስጀመሪያ"
745+
595746#: qml/Wizard/Pages/80-finished.qml:89
596747msgid "Welcome to Ubuntu"
597748msgstr "እንኳን ደህና መጡ ወደ ኡቡንቱ"
@@ -637,7 +788,7 @@ msgid "Service Terms"
637788msgstr "የ ግልጋሎት ስምምነቶች"
638789
639790#: qml/Wizard/Pages/passcode-confirm.qml:43
640−#: qml/Wizard/Pages/passcode-desktop.qml:80
791+#: qml/Wizard/Pages/passcode-desktop.qml:97
641792msgid "Confirm passcode"
642793msgstr "የማለፊያ ኮድ ማረጋገጫ"
643794
@@ -650,28 +801,28 @@ msgctxt "Enter the passcode again"
650801msgid "Please re-enter."
651802msgstr "እባክዎን እንደገና-ያስገቡ"
652803
653−#: qml/Wizard/Pages/passcode-desktop.qml:30
804+#: qml/Wizard/Pages/passcode-desktop.qml:31
654805msgid "Lock Screen Passcode"
655806msgstr "የ መመልከቻው መቆለፊያ የ ማለፊያ ኮድ"
656807
657−#: qml/Wizard/Pages/passcode-desktop.qml:56
808+#: qml/Wizard/Pages/passcode-desktop.qml:61
658809msgid "Enter 4 numbers to setup your passcode"
659810msgstr "ያስገቡ 4 ቁጥሮች የ እርስዎን የ ማለፊያ ኮድ ለማሰናዳት"
660811
661−#: qml/Wizard/Pages/passcode-desktop.qml:65
812+#: qml/Wizard/Pages/passcode-desktop.qml:77
662813#: qml/Wizard/Pages/passcode-set.qml:54
663814msgid "Choose passcode"
664815msgstr "የ ማለፊያ ኮድ ይምረጡ"
665816
666−#: qml/Wizard/Pages/passcode-desktop.qml:105
817+#: qml/Wizard/Pages/passcode-desktop.qml:127
667818msgid "Passcode too short"
668819msgstr "የ ማለፊያ ኮዱ በጣም አጭር ነው"
669820
670−#: qml/Wizard/Pages/passcode-desktop.qml:107
821+#: qml/Wizard/Pages/passcode-desktop.qml:129
671822msgid "Passcodes match"
672823msgstr "የ ማለፊያ ኮዶቹ ተመሳሳይ ናቸው"
673824
674−#: qml/Wizard/Pages/passcode-desktop.qml:109
825+#: qml/Wizard/Pages/passcode-desktop.qml:131
675826msgid "Passcodes do not match"
676827msgstr "የ ማለፊያ ኮዶቹ አይመሳሰሉም"
677828
@@ -679,19 +830,19 @@ msgstr "የ ማለፊያ ኮዶቹ አይመሳሰሉም"
679830msgid "Passcode must be 4 characters long"
680831msgstr "የ ማለፊያ ኮድ 4 ባህሪዎች መሆን አለበት"
681832
682−#: qml/Wizard/Pages/password-set.qml:30
833+#: qml/Wizard/Pages/password-set.qml:31
683834msgid "Lock Screen Password"
684835msgstr "የ መመልከቻ መቆለፊያ የ መግቢያ ቃል"
685836
686−#: qml/Wizard/Pages/password-set.qml:61
837+#: qml/Wizard/Pages/password-set.qml:62
687838msgid "Enter at least 8 characters"
688839msgstr "ያስገቡ ቢያንስ 8 ባህሪዎች"
689840
690−#: qml/Wizard/Pages/password-set.qml:73
841+#: qml/Wizard/Pages/password-set.qml:74
691842msgid "Choose password"
692843msgstr "የ መግቢያ ቃል ይምረጡ"
693844
694−#: qml/Wizard/Pages/password-set.qml:103
845+#: qml/Wizard/Pages/password-set.qml:104
695846msgid "Confirm password"
696847msgstr "የ መግቢያ ቃሉን ያረጋግጡ"
697848
@@ -720,26 +871,30 @@ msgid "To proceed with no SIM tap Skip."
720871msgstr "ያለ ሲም ለ መቀጠል መዝለያውን መታ ያድርጉ"
721872
722873#: qml/Wizard/PasswordMeter.qml:87
874+msgid "Password too short"
875+msgstr "የ መግቢያ ቃል በጣም አጭር ነው"
876+
877+#: qml/Wizard/PasswordMeter.qml:89
723878msgid "Passwords match"
724879msgstr "የ መግቢያ ቃሎቹ ተመሳሳይ ናቸው"
725880
726−#: qml/Wizard/PasswordMeter.qml:89
881+#: qml/Wizard/PasswordMeter.qml:91
727882msgid "Passwords do not match"
728883msgstr "የ መግቢያ ቃሎቹ ተመሳሳይ አይደሉም"
729884
730−#: qml/Wizard/PasswordMeter.qml:93
885+#: qml/Wizard/PasswordMeter.qml:95
731886msgid "Strong password"
732887msgstr "ጠንካራ የ መግቢያ ቃል"
733888
734−#: qml/Wizard/PasswordMeter.qml:95
889+#: qml/Wizard/PasswordMeter.qml:97
735890msgid "Fair password"
736891msgstr "ደህና የ መግቢያ ቃል"
737892
738−#: qml/Wizard/PasswordMeter.qml:97
893+#: qml/Wizard/PasswordMeter.qml:99
739894msgid "Weak password"
740895msgstr "ደካማ የ መግቢያ ቃል"
741896
742−#: qml/Wizard/PasswordMeter.qml:99
897+#: qml/Wizard/PasswordMeter.qml:101
743898msgid "Very weak password"
744899msgstr "በጣም ደካማ የ መግቢያ ቃል"
745900
@@ -812,6 +967,13 @@ msgstr "በጣም ደካማ የ መግቢያ ቃል"
812967#~ msgid "Power off"
813968#~ msgstr "ማጥፊያ"
814969
970+#~ msgid "This will be your last attempt."
971+#~ msgstr "ይህ የመጨረሻ ሙከራዎ ነው"
972+
973+#, qt-format
974+#~ msgid "Sorry, incorrect %1"
975+#~ msgstr "አዝናለሁ: የተሳሳተ%1"
976+
815977#~ msgid "Power"
816978#~ msgstr "ሐይል"
817979
@@ -830,24 +992,60 @@ msgstr "በጣም ደካማ የ መግቢያ ቃል"
830992#~ msgid "Settings"
831993#~ msgstr "ማሰናጃ"
832994
995+#~ msgid "Sorry, incorrect passphrase"
996+#~ msgstr "አዝናለሁ የተሳሳተ የማለፊያ ሐረግ"
997+
833998#~ msgid "Unlock SIM"
834999#~ msgstr "ሲም መክፈቻ"
8351000
1001+#~ msgid "Sorry, incorrect passcode"
1002+#~ msgstr "አዝናለሁ የተሳሳተ የማለፊያ ኮድ"
1003+
1004+#~ msgid "Sorry, incorrect passphrase."
1005+#~ msgstr "አዝናለሁ የተሳሳተ የማለፊያ ሐረግ"
1006+
1007+#~ msgid "Sorry, incorrect passcode."
1008+#~ msgstr "አዝናለሁ የተሳሳተ የማለፊያ ኮድ"
1009+
8361010#~ msgid ""
8371011#~ "You have now mastered the edge gestures and can start using the "
8381012#~ "phone<br><br>Tap on the screen to start"
8391013#~ msgstr ""
8401014#~ "አሁን የ ጠርዝ እንቅስቃሴን አውቀዋል እና መጀመር ይችላሉ ስልኩን መጠቀም <br><br>መመልከቻውን መታ ያድርጉ ለመጀመር"
8411015
1016+#~ msgid ""
1017+#~ "If passcode is entered incorrectly, your phone will conduct a factory reset "
1018+#~ "and all personal data will be deleted."
1019+#~ msgstr ""
1020+#~ "የተሳሳተ የማለፊያ ኮድ ካስገቡ የ እርስዎ ስልክ ወደ ነበረበት ወደ ፋክቶሪው ዘዴ ይመለሳል: እና የ ግል ዳታ በሙሉ "
1021+#~ "ይጠፋል"
1022+
1023+#~ msgid ""
1024+#~ "If passphrase is entered incorrectly, your phone will conduct a factory "
1025+#~ "reset and all personal data will be deleted."
1026+#~ msgstr ""
1027+#~ "የተሳሳተ የማለፊያ ሐረግ ካስገቡ የ እርስዎ ስልክ ወደ ነበረበት ወደ ፋክቶሪው ዘዴ ይመለሳል: እና የ ግል ዳታ በሙሉ "
1028+#~ "ይጠፋል"
1029+
8421030#~ msgid "Roaming"
8431031#~ msgstr "ማዘዋወሪያ"
8441032
8451033#~ msgid "Manage Scopes"
8461034#~ msgstr "የ ክልል አስተዳዳሪ"
8471035
1036+#, qt-format
1037+#~ msgid "Enter %1"
1038+#~ msgstr "ማስገቢያ %1"
1039+
8481040#~ msgid "Please re-enter"
8491041#~ msgstr "እባክዎን እንደገና-ያስገቡ"
8501042
1043+#~ msgid "Enter passphrase"
1044+#~ msgstr "የ ማለፊያ ሀረግ ያስገቡ"
1045+
1046+#~ msgid "Enter passcode"
1047+#~ msgstr "የ ማለፊያ ኮድ ያስገቡ"
1048+
8511049#~ msgid "Lock security"
8521050#~ msgstr "ደህንነት መቆለፊያ"
8531051
@@ -988,6 +1186,9 @@ msgstr "በጣም ደካማ የ መግቢያ ቃል"
9881186#~ msgid "View all your running tasks."
9891187#~ msgstr "እርስዎ የሚያስኬዱትን ተግባሮች በሙሉ መመልከቻ"
9901188
1189+#~ msgid "Tap to unlock"
1190+#~ msgstr "ለመክፈት መታ ያድርጉ"
1191+
9911192#~ msgctxt "Button: Shut down the system"
9921193#~ msgid "Shut down"
9931194#~ msgstr "ማጥፊያ"
@@ -1054,8 +1255,39 @@ msgstr "በጣም ደካማ የ መግቢያ ቃል"
10541255#~ msgid "%a %d %b %l:%M %p"
10551256#~ msgstr "%a %d %b %l:%ደ %ከ"
10561257
1258+#~ msgctxt "passphrase"
1259+#~ msgid "Please re-enter"
1260+#~ msgstr "እባክዎን እንደገና-ያስገቡ"
1261+
10571262#~ msgid "Call back"
10581263#~ msgstr "መልሶ መደወያ"
10591264
1265+#~ msgid "Swipe up for recent calls"
1266+#~ msgstr "ወደ ላይ ይጥረጉ ለ ቅርብ ጊዜ ጥሪዎች"
1267+
1268+#~ msgid "Swipe up for favorite calculations"
1269+#~ msgstr "ወደ ላይ ይጥረጉ የሚወዱትን ለማስላት"
1270+
1271+#~ msgid "Swipe up to manage the app"
1272+#~ msgstr "ወደ ላይ ይጥረጉ መተግበሪያ ለማስተዳደር"
1273+
1274+#~ msgid "Swipe up to create a message"
1275+#~ msgstr "ወደ ላይ ይጥረጉ መልእክት ለ መፍጠር"
1276+
1277+#~ msgid "Swipe up to add a contact"
1278+#~ msgstr "ወደ ላይ ይጥረጉ ግንኙነት ለ መጨመር"
1279+
1280+#~ msgid "Swipe from the top right edge to open the notification bar"
1281+#~ msgstr "ከ ላይ ቀኝ ጠርዝ በኩል ይጥረጉ የ ማስታወቂያ መደርደሪያ ለ መክፈት"
1282+
1283+#~ msgid "Swipe from the top edge to open the notification bar"
1284+#~ msgstr "ከ ላይ ጠርዝ በኩል ይጥረጉ የ ማስታወቂያ መደርደሪያ ለ መክፈት"
1285+
1286+#~ msgid "Short or long swipe from the right edge to view your open apps"
1287+#~ msgstr "በ አጭሩ ወይንም በ ረጅሙ ይጥረጉ ከ ቀኝ ጠረዝ በኩል የ ተከፈቱ መተግበሪያዎችን ለማየት"
1288+
1289+#~ msgid "Swipe from the left edge to open the launcher"
1290+#~ msgstr "ከ ግራ ጠርዝ በኩል ይጥረጉ ማስጀመሪያውን ለ መክፈት"
1291+
10601292#~ msgid "Hover your mouse on the right edge to view your open apps"
10611293#~ msgstr "የ እርስዎን አይጥ ወደ ቀኝ ጠርዝ በኩል ሲያደርጉ የ ተከፈቱ መተግበሪያዎች መመልከቻ"
po/ar.po+415−210
@@ -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-27 13:54+0000\n"
10+"POT-Creation-Date: 2016-11-16 10:44+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,99 +16,75 @@ 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-06-02 06:20+0000\n"
20−"X-Generator: Launchpad (build 18053)\n"
19+"X-Launchpad-Export-Date: 2016-11-23 06:34+0000\n"
20+"X-Generator: Launchpad (build 18269)\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
40−msgid "Device Locked"
41−msgstr "الجهاز موصد"
42−
43−#: qml/Components/DelayedLockscreen.qml:64
44−msgid "You have been locked out due to too many failed passphrase attempts."
45−msgstr ""
46−"لقد تم تأمين الجهاز ضد الفتح بسبب المحاولات العديدة الفاشلة للعبارة السرّية."
47−
48−#: qml/Components/DelayedLockscreen.qml:65
49−msgid "You have been locked out due to too many failed passcode attempts."
50−msgstr ""
51−"لقد تم تأمين الجهاز ضد الفتح بسبب المحاولات العديدة الفاشلة للرمز السرّي."
52−
53−#: qml/Components/DelayedLockscreen.qml:74
54−#, qt-format
55−msgid "Please wait %1 minute and then try again…"
56−msgid_plural "Please wait %1 minutes and then try again…"
57−msgstr[0] "برجاء الانتظار %1 دقيقة ثم المحاولة مجددًا..."
58−msgstr[1] "برجاء الانتظار دقيقة واحدة (%1) ثم المحاولة مجددًا..."
59−msgstr[2] "برجاء الانتظار دقيقتين (%1) ثم المحاولة مجددًا..."
60−msgstr[3] "برجاء الانتظار %1 دقائق ثم المحاولة مجددًا..."
61−msgstr[4] "برجاء الانتظار %1 دقيقة ثم المحاولة مجددًا..."
62−msgstr[5] "برجاء الانتظار %1 دقيقة ثم المحاولة مجددًا..."
63−
64−#: qml/Components/Dialogs.qml:144
39+#: qml/Components/Dialogs.qml:149
6540msgctxt "Title: Lock/Log out dialog"
6641msgid "Log out"
6742msgstr "خروج"
6843
69−#: qml/Components/Dialogs.qml:145
44+#: qml/Components/Dialogs.qml:150
7045msgid "Are you sure you want to log out?"
7146msgstr "هل أنت متأكد من رغبتك في تسجيل الخروج؟"
7247
73−#: qml/Components/Dialogs.qml:147
48+#: qml/Components/Dialogs.qml:152
7449msgctxt "Button: Lock the system"
7550msgid "Lock"
7651msgstr "أوصِد"
7752
78−#: qml/Components/Dialogs.qml:154
53+#: qml/Components/Dialogs.qml:159
7954msgctxt "Button: Log out from the system"
8055msgid "Log Out"
8156msgstr "خروج"
8257
83−#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
84−#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
58+#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
59+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
60+#: qml/Wizard/Pages/passcode-confirm.qml:32
8561#: qml/Wizard/Pages/passcode-set.qml:32
8662msgid "Cancel"
8763msgstr "إلغاء"
8864
89−#: qml/Components/Dialogs.qml:173
65+#: qml/Components/Dialogs.qml:178
9066msgctxt "Title: Reboot dialog"
9167msgid "Reboot"
9268msgstr "إعادة التشغيل"
9369
94−#: qml/Components/Dialogs.qml:174
70+#: qml/Components/Dialogs.qml:179
9571msgid "Are you sure you want to reboot?"
9672msgstr "هل أنت متأكد من رغبتك في إعادة تشغيل الجهاز؟"
9773
98−#: qml/Components/Dialogs.qml:176
74+#: qml/Components/Dialogs.qml:181
9975msgid "No"
10076msgstr "لا"
10177
102−#: qml/Components/Dialogs.qml:182
78+#: qml/Components/Dialogs.qml:187
10379msgid "Yes"
10480msgstr "نعم"
10581
106−#: qml/Components/Dialogs.qml:197
82+#: qml/Components/Dialogs.qml:202
10783msgctxt "Title: Power off/Restart dialog"
10884msgid "Power"
10985msgstr "الطاقة"
11086
111−#: qml/Components/Dialogs.qml:198
87+#: qml/Components/Dialogs.qml:203
11288msgid ""
11389"Are you sure you would like\n"
11490"to power off?"
@@ -116,28 +92,198 @@ msgstr ""
11692"هل أنت متأكد من رغبتك\n"
11793"في إيقاف التشغيل؟"
11894
119−#: qml/Components/Dialogs.qml:200
95+#: qml/Components/Dialogs.qml:205
12096msgctxt "Button: Power off the system"
12197msgid "Power off"
12298msgstr "إيقاف التشغيل"
12399
124−#: qml/Components/Dialogs.qml:209
100+#: qml/Components/Dialogs.qml:214
125101msgctxt "Button: Restart the system"
126102msgid "Restart"
127103msgstr "إعادة التشغيل"
128104
129−#: qml/Components/Lockscreen.qml:231
105+#: qml/Components/KeyboardShortcutsOverlay.qml:41
106+msgid "Keyboard Shortcuts"
107+msgstr ""
108+
109+#: qml/Components/KeyboardShortcutsOverlay.qml:55
110+msgid "Unity 8"
111+msgstr ""
112+
113+#: qml/Components/KeyboardShortcutsOverlay.qml:62
114+msgid "PrtScr"
115+msgstr ""
116+
117+#: qml/Components/KeyboardShortcutsOverlay.qml:67
118+msgid "Takes a screenshot."
119+msgstr ""
120+
121+#: qml/Components/KeyboardShortcutsOverlay.qml:75
122+msgid "Alt + PrtScr"
123+msgstr ""
124+
125+#: qml/Components/KeyboardShortcutsOverlay.qml:80
126+msgid "Takes a screenshot of a window."
127+msgstr ""
128+
129+#: qml/Components/KeyboardShortcutsOverlay.qml:88
130+msgid "Super + Space"
131+msgstr ""
132+
133+#: qml/Components/KeyboardShortcutsOverlay.qml:93
134+msgid "Switches to next keyboard layout."
135+msgstr ""
136+
137+#: qml/Components/KeyboardShortcutsOverlay.qml:101
138+msgid "Super + Shift + Space"
139+msgstr ""
140+
141+#: qml/Components/KeyboardShortcutsOverlay.qml:106
142+msgid "Switches to previous keyboard layout."
143+msgstr ""
144+
145+#: qml/Components/KeyboardShortcutsOverlay.qml:118
146+msgid "Launcher"
147+msgstr ""
148+
149+#: qml/Components/KeyboardShortcutsOverlay.qml:125
150+msgid "Super (Hold)"
151+msgstr ""
152+
153+#: qml/Components/KeyboardShortcutsOverlay.qml:130
154+msgid "Opens the launcher, displays shortcuts."
155+msgstr ""
156+
157+#: qml/Components/KeyboardShortcutsOverlay.qml:138
158+msgid "Alt + F1"
159+msgstr ""
160+
161+#: qml/Components/KeyboardShortcutsOverlay.qml:143
162+msgid "Opens launcher keyboard navigation mode."
163+msgstr ""
164+
165+#: qml/Components/KeyboardShortcutsOverlay.qml:151
166+msgid "Super + Tab"
167+msgstr ""
168+
169+#: qml/Components/KeyboardShortcutsOverlay.qml:156
170+msgid "Switches applications via the launcher."
171+msgstr ""
172+
173+#: qml/Components/KeyboardShortcutsOverlay.qml:164
174+msgid "Super + 0 to 9"
175+msgstr ""
176+
177+#: qml/Components/KeyboardShortcutsOverlay.qml:169
178+msgid "Same as clicking on a launcher icon."
179+msgstr ""
180+
181+#: qml/Components/KeyboardShortcutsOverlay.qml:181
182+msgid "Scopes"
183+msgstr ""
184+
185+#: qml/Components/KeyboardShortcutsOverlay.qml:188
186+msgid "Super (Tap)"
187+msgstr ""
188+
189+#: qml/Components/KeyboardShortcutsOverlay.qml:193
190+msgid "Opens the Scopes home."
191+msgstr ""
192+
193+#: qml/Components/KeyboardShortcutsOverlay.qml:209
194+msgid "Switching"
195+msgstr ""
196+
197+#: qml/Components/KeyboardShortcutsOverlay.qml:216
198+msgid "Alt + Tab"
199+msgstr ""
200+
201+#: qml/Components/KeyboardShortcutsOverlay.qml:221
202+msgid "Switches between applications."
203+msgstr ""
204+
205+#: qml/Components/KeyboardShortcutsOverlay.qml:229
206+msgid "Super + W"
207+msgstr ""
208+
209+#: qml/Components/KeyboardShortcutsOverlay.qml:234
210+msgid "Opens the desktop spread."
211+msgstr ""
212+
213+#: qml/Components/KeyboardShortcutsOverlay.qml:242
214+msgid "Cursor Left or Right"
215+msgstr ""
216+
217+#: qml/Components/KeyboardShortcutsOverlay.qml:247
218+msgid "Moves the focus."
219+msgstr ""
220+
221+#: qml/Components/KeyboardShortcutsOverlay.qml:259
222+msgid "Windows"
223+msgstr ""
224+
225+#: qml/Components/KeyboardShortcutsOverlay.qml:266
226+msgid "Ctrl + Super + D"
227+msgstr ""
228+
229+#: qml/Components/KeyboardShortcutsOverlay.qml:271
230+msgid "Minimizes all windows."
231+msgstr ""
232+
233+#: qml/Components/KeyboardShortcutsOverlay.qml:279
234+msgid "Ctrl + Super + Up"
235+msgstr ""
236+
237+#: qml/Components/KeyboardShortcutsOverlay.qml:284
238+msgid "Maximizes the current window."
239+msgstr ""
240+
241+#: qml/Components/KeyboardShortcutsOverlay.qml:292
242+msgid "Ctrl + Super + Down"
243+msgstr ""
244+
245+#: qml/Components/KeyboardShortcutsOverlay.qml:297
246+msgid "Minimizes or restores the current window."
247+msgstr ""
248+
249+#: qml/Components/KeyboardShortcutsOverlay.qml:305
250+msgid "Ctrl + Super + Left or Right"
251+msgstr ""
252+
253+#: qml/Components/KeyboardShortcutsOverlay.qml:310
254+msgid "Semi-maximizes the current window."
255+msgstr ""
256+
257+#: qml/Components/KeyboardShortcutsOverlay.qml:318
258+msgid "Alt + F4"
259+msgstr ""
260+
261+#: qml/Components/KeyboardShortcutsOverlay.qml:323
262+msgid "Closes the current window."
263+msgstr ""
264+
265+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
130266msgid "Return to Call"
131267msgstr "العودة إلى المكالمة"
132268
133−#: qml/Components/Lockscreen.qml:231
269+#: qml/Components/Lockscreen.qml:212
134270msgid "Emergency Call"
135271msgstr "مكالمة طوارئ"
136272
137−#: qml/Components/Lockscreen.qml:263
273+#: qml/Components/Lockscreen.qml:244
138274msgid "OK"
139275msgstr "موافق"
140276
277+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
278+#, qt-format
279+msgid "%1:%2:%3"
280+msgstr ""
281+
282+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
283+#, qt-format
284+msgid "%1:%2"
285+msgstr ""
286+
141287#: qml/Components/ModeSwitchWarningDialog.qml:32
142288msgid "Apps may have unsaved data:"
143289msgstr ""
@@ -164,88 +310,88 @@ msgstr ""
164310msgid "Close all"
165311msgstr ""
166312
167−#: qml/Dash/DashPageHeader.qml:333
313+#: qml/Components/SharingPicker.qml:54
314+msgid "Preview Share Item"
315+msgstr ""
316+
317+#: qml/Dash/DashPageHeader.qml:361
168318msgctxt "Button: Open the Ubuntu Store"
169319msgid "Store"
170320msgstr "المتجر"
171321
172−#: qml/Dash/DashPageHeader.qml:340
322+#: qml/Dash/DashPageHeader.qml:368
173323msgctxt "Button: Start a search in the current dash scope"
174324msgid "Search"
175325msgstr "بحث"
176326
177−#: qml/Dash/DashPageHeader.qml:350
327+#: qml/Dash/DashPageHeader.qml:378
178328msgctxt "Button: Show the current dash scope settings"
179329msgid "Settings"
180330msgstr "الإعدادات"
181331
182−#: qml/Dash/DashPageHeader.qml:357
332+#: qml/Dash/DashPageHeader.qml:385
183333msgid "Remove from Favorites"
184334msgstr "حذف من المفضلات"
185335
186−#: qml/Dash/DashPageHeader.qml:357
336+#: qml/Dash/DashPageHeader.qml:385
187337msgid "Add to Favorites"
188338msgstr "إضافة إلى المفضلات"
189339
190−#: qml/Dash/FiltersPopover.qml:60
340+#: qml/Dash/FiltersPopover.qml:61
191341msgid "Refine your results"
192342msgstr ""
193343
194−#: qml/Dash/FiltersPopover.qml:69
344+#: qml/Dash/FiltersPopover.qml:70
195345msgid "Reset"
196346msgstr ""
197347
198−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:774
348+#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
199349msgid "Show less"
200350msgstr ""
201351
202−#: qml/Dash/GenericScopeView.qml:579
352+#: qml/Dash/GenericScopeView.qml:545
203353msgid "Show all"
204354msgstr ""
205355
206−#: qml/Dash/GenericScopeView.qml:636
356+#: qml/Dash/GenericScopeView.qml:576
207357msgctxt "Label: Hint for dash search line edit"
208358msgid "Search"
209359msgstr "بحث"
210360
211−#: qml/Dash/PageHeaderExtraPanel.qml:56
361+#: qml/Dash/PageHeaderExtraPanel.qml:57
212362msgid "Recent Searches"
213363msgstr ""
214364
215−#: qml/Dash/PageHeaderExtraPanel.qml:67
365+#: qml/Dash/PageHeaderExtraPanel.qml:68
216366msgid "Clear All"
217367msgstr ""
218368
219−#: qml/Dash/Previews/PreviewActionCombo.qml:35
369+#: qml/Dash/Previews/PreviewActionCombo.qml:36
220370msgid "More..."
221371msgstr "المزيد..."
222372
223−#: qml/Dash/Previews/PreviewActionCombo.qml:35
373+#: qml/Dash/Previews/PreviewActionCombo.qml:36
224374msgid "Less..."
225375msgstr "أقل..."
226376
227−#: qml/Dash/Previews/PreviewCommentInput.qml:68
228−#: qml/Dash/Previews/PreviewRatingInput.qml:175
377+#: qml/Dash/Previews/PreviewCommentInput.qml:83
378+#: qml/Dash/Previews/PreviewRatingInput.qml:202
229379msgid "Send"
230380msgstr "أرسل"
231381
232−#: qml/Dash/Previews/PreviewRatingInput.qml:82
382+#: qml/Dash/Previews/PreviewRatingInput.qml:109
233383msgid "Rate this"
234384msgstr "قيّم ذلك"
235385
236−#: qml/Dash/Previews/PreviewRatingInput.qml:157
386+#: qml/Dash/Previews/PreviewRatingInput.qml:184
237387msgid "Add a review"
238388msgstr "أضف تعليق"
239389
240−#: qml/Dash/Previews/PreviewSharing.qml:66
241−msgid "Preview Share Item"
242−msgstr ""
243−
244−#: qml/Dash/PullToRefreshScopeStyle.qml:55
390+#: qml/Dash/PullToRefreshScopeStyle.qml:56
245391msgid "Pull to refresh…"
246392msgstr "اسحب للتحديث..."
247393
248−#: qml/Dash/PullToRefreshScopeStyle.qml:60
394+#: qml/Dash/PullToRefreshScopeStyle.qml:61
249395msgid "Release to refresh…"
250396msgstr "حرّر للتحديث..."
251397
@@ -253,15 +399,15 @@ msgstr "حرّر للتحديث..."
253399msgid "Enable location data"
254400msgstr "تفعيل بيانات الموقع"
255401
256−#: qml/Dash/ScopesList.qml:55
402+#: qml/Dash/ScopesList.qml:57
257403msgid "Manage"
258404msgstr "إدارة"
259405
260−#: qml/Dash/ScopesList.qml:101
406+#: qml/Dash/ScopesList.qml:104
261407msgid "Home"
262408msgstr "الرئيسية"
263409
264−#: qml/Dash/ScopesList.qml:102
410+#: qml/Dash/ScopesList.qml:105
265411msgid "Also installed"
266412msgstr "أيضا تم تثبيت"
267413
@@ -271,76 +417,62 @@ msgid ""
271417"touch pad to interact with the pointer."
272418msgstr ""
273419
274−#: qml/Greeter/CoverPage.qml:118
420+#: qml/Greeter/CoverPage.qml:127
275421msgid "Unlock"
276422msgstr "فك القفل"
277423
278−#: qml/Greeter/LoginList.qml:239
279−msgid "Retry"
280−msgstr "إعادة المحاولة"
281−
282−#: qml/Greeter/LoginList.qml:240
283−msgid "Tap to unlock"
284−msgstr "انقر لفك القفل"
285−
286−#: qml/Greeter/NarrowView.qml:54
287−msgid "Sorry, incorrect passphrase."
288−msgstr "عذرًا، عبارة سرّية خاطئة."
289−
290−#: qml/Greeter/NarrowView.qml:55
291−msgid "Sorry, incorrect passcode."
292−msgstr "عذرًا، رمز سرّي خاطيء."
293−
294−#: qml/Greeter/NarrowView.qml:56
295−msgid "This will be your last attempt."
296−msgstr "هذه ستكون المحاولة الأخيرة لك."
424+#: qml/Greeter/DelayedLockscreen.qml:43
425+msgid "Device Locked"
426+msgstr "الجهاز موصد"
297427
298−#: qml/Greeter/NarrowView.qml:58
299−msgid ""
300−"If passphrase is entered incorrectly, your phone will conduct a factory "
301−"reset and all personal data will be deleted."
428+#: qml/Greeter/DelayedLockscreen.qml:58
429+msgid "You have been locked out due to too many failed passphrase attempts."
302430msgstr ""
303−"إذا تم إدخال العبارة السرية بشكل خاطئ، فسوف يتم إعادة الهاتف لحالة ضبط "
304−"المصنع وسيتم حذف كافة البيانات الشخصية."
431+"لقد تم تأمين الجهاز ضد الفتح بسبب المحاولات العديدة الفاشلة للعبارة السرّية."
305432
306−#: qml/Greeter/NarrowView.qml:59
307−msgid ""
308−"If passcode is entered incorrectly, your phone will conduct a factory reset "
309−"and all personal data will be deleted."
433+#: qml/Greeter/DelayedLockscreen.qml:59
434+msgid "You have been locked out due to too many failed passcode attempts."
310435msgstr ""
311−"إذا تم إدخال العبارة السرية بشكل خاطئ، فسوف يتم إعادة الهاتف لحالة ضبط "
312−"المصنع وسيتم حذف كافة البيانات الشخصية."
436+"لقد تم تأمين الجهاز ضد الفتح بسبب المحاولات العديدة الفاشلة للرمز السرّي."
313437
314−#: qml/Greeter/NarrowView.qml:116
438+#: qml/Greeter/DelayedLockscreen.qml:68
315439#, qt-format
316−msgid "Enter %1"
317−msgstr "أدخِل %1"
440+msgid "Please wait %1 minute and then try again…"
441+msgid_plural "Please wait %1 minutes and then try again…"
442+msgstr[0] "برجاء الانتظار %1 دقيقة ثم المحاولة مجددًا..."
443+msgstr[1] "برجاء الانتظار دقيقة واحدة (%1) ثم المحاولة مجددًا..."
444+msgstr[2] "برجاء الانتظار دقيقتين (%1) ثم المحاولة مجددًا..."
445+msgstr[3] "برجاء الانتظار %1 دقائق ثم المحاولة مجددًا..."
446+msgstr[4] "برجاء الانتظار %1 دقيقة ثم المحاولة مجددًا..."
447+msgstr[5] "برجاء الانتظار %1 دقيقة ثم المحاولة مجددًا..."
318448
319−#: qml/Greeter/NarrowView.qml:117
320−msgid "Enter passphrase"
321−msgstr "أدخِل العبارة السرية"
449+#: qml/Greeter/Greeter.qml:596
450+msgid "Try again"
451+msgstr ""
322452
323−#: qml/Greeter/NarrowView.qml:118
324−msgid "Enter passcode"
325−msgstr "أدخِل الرمز السرّي"
453+#: qml/Greeter/LoginList.qml:70
454+msgid "Passphrase"
455+msgstr ""
326456
327−#: qml/Greeter/NarrowView.qml:119
328−#, qt-format
329−msgid "Sorry, incorrect %1"
330−msgstr "نأسف، %1 غير صحيحية"
457+#: qml/Greeter/LoginList.qml:71
458+msgid "Passcode"
459+msgstr ""
460+
461+#: qml/Greeter/LoginList.qml:98
462+msgid "Retry"
463+msgstr "إعادة المحاولة"
331464
332−#: qml/Greeter/NarrowView.qml:120
333−msgid "Sorry, incorrect passphrase"
334−msgstr "نأسف، عبارة السّر غير صحيحية"
465+#: qml/Greeter/LoginList.qml:99
466+msgid "Log In"
467+msgstr ""
335468
336−#: qml/Greeter/NarrowView.qml:121
337−msgctxt "passphrase"
338−msgid "Please re-enter"
339−msgstr "برجاء إعادة إدخالها"
469+#: qml/Greeter/NarrowView.qml:252
470+msgid "Emergency"
471+msgstr ""
340472
341−#: qml/Greeter/NarrowView.qml:122
342−msgid "Sorry, incorrect passcode"
343−msgstr "نأسف، الرمز السري غير صحيح"
473+#: qml/Greeter/SessionsList.qml:122
474+msgid "Select desktop environment"
475+msgstr ""
344476
345477#: qml/Notifications/NotificationMenuItemFactory.qml:124
346478msgid "Show password"
@@ -354,11 +486,11 @@ msgstr "انقر للعودة إلى المكالمة..."
354486msgid "Conference"
355487msgstr "مؤتمر"
356488
357−#: qml/Panel/Indicators/MenuItemFactory.qml:762
489+#: qml/Panel/Indicators/MenuItemFactory.qml:847
358490msgid "Nothing is playing"
359491msgstr "لا شيء مُشغّل"
360492
361−#: qml/Panel/Indicators/MenuItemFactory.qml:891
493+#: qml/Panel/Indicators/MenuItemFactory.qml:975
362494#, qt-format
363495msgid "%1 hour"
364496msgid_plural "%1 hours"
@@ -369,7 +501,7 @@ msgstr[3] "%1 ساعات"
369501msgstr[4] "%1 ساعة"
370502msgstr[5] "%1 ساعة"
371503
372−#: qml/Panel/Indicators/MenuItemFactory.qml:895
504+#: qml/Panel/Indicators/MenuItemFactory.qml:979
373505#, qt-format
374506msgid "%1 minute"
375507msgid_plural "%1 minutes"
@@ -380,7 +512,7 @@ msgstr[3] "%1 دقائق"
380512msgstr[4] "%1 دقيقة"
381513msgstr[5] "%1 دقيقة"
382514
383−#: qml/Panel/Indicators/MenuItemFactory.qml:900
515+#: qml/Panel/Indicators/MenuItemFactory.qml:984
384516#, qt-format
385517msgid "%1 second"
386518msgid_plural "%1 seconds"
@@ -391,37 +523,37 @@ msgstr[3] "%1 ثوان"
391523msgstr[4] "%1 ثانية"
392524msgstr[5] "%1 ثانية"
393525
394−#: qml/Panel/Indicators/MenuItemFactory.qml:903
526+#: qml/Panel/Indicators/MenuItemFactory.qml:987
395527msgid "0 seconds"
396528msgstr "أقل من ثانية"
397529
398530#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
399−#: qml/Panel/Indicators/MenuItemFactory.qml:905
531+#: qml/Panel/Indicators/MenuItemFactory.qml:989
400532#, qt-format
401533msgid "%1 remaining"
402534msgstr "باق %1"
403535
404−#: qml/Panel/Indicators/MenuItemFactory.qml:911
536+#: qml/Panel/Indicators/MenuItemFactory.qml:995
405537msgid "In queue…"
406538msgstr "في الانتظار..."
407539
408−#: qml/Panel/Indicators/MenuItemFactory.qml:915
540+#: qml/Panel/Indicators/MenuItemFactory.qml:999
409541msgid "Downloading"
410542msgstr "التنزيل"
411543
412−#: qml/Panel/Indicators/MenuItemFactory.qml:917
544+#: qml/Panel/Indicators/MenuItemFactory.qml:1001
413545msgid "Paused, tap to resume"
414546msgstr "مُلبث، انقر للاستئناف"
415547
416−#: qml/Panel/Indicators/MenuItemFactory.qml:919
548+#: qml/Panel/Indicators/MenuItemFactory.qml:1003
417549msgid "Canceled"
418550msgstr "تم إلغائه"
419551
420−#: qml/Panel/Indicators/MenuItemFactory.qml:921
552+#: qml/Panel/Indicators/MenuItemFactory.qml:1005
421553msgid "Finished"
422554msgstr "انتهى"
423555
424−#: qml/Panel/Indicators/MenuItemFactory.qml:923
556+#: qml/Panel/Indicators/MenuItemFactory.qml:1007
425557msgid "Failed, tap to retry"
426558msgstr "فشل، انقل لإعادة المحاولة"
427559
@@ -441,36 +573,16 @@ msgctxt "Button: Call back on phone"
441573msgid "Call back"
442574msgstr ""
443575
444−#: qml/Stages/SideStage.qml:76
576+#: qml/Stage/SideStage.qml:76
445577msgid "Drag using 3 fingers any application from one window to the other"
446578msgstr ""
447579
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
580+#: qml/Tutorial/TutorialLeftLong.qml:49
469581msgid "Long swipe from the left edge to open the Today scope"
470582msgstr ""
471583
472584#: qml/Tutorial/TutorialLeft.qml:47
473−msgid "Swipe from the left edge to open the launcher"
585+msgid "Short swipe from the left edge to open the launcher"
474586msgstr ""
475587
476588#: qml/Tutorial/TutorialRight.qml:55
@@ -478,15 +590,11 @@ msgid "Push your mouse against the right edge to view your open apps"
478590msgstr ""
479591
480592#: qml/Tutorial/TutorialRight.qml:56
481−msgid "Short or long swipe from the right edge to view your open apps"
593+msgid "Swipe from the right edge to view your open apps"
482594msgstr ""
483595
484596#: 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"
597+msgid "Swipe from the top edge to access notifications and quick settings"
490598msgstr ""
491599
492600#: qml/Wizard/Page.qml:54
@@ -494,40 +602,54 @@ msgctxt "Button: Go back one page in the Wizard"
494602msgid "Back"
495603msgstr "عودة"
496604
497−#: qml/Wizard/Pages/10-welcome.qml:27
605+#: qml/Wizard/Pages/10-welcome.qml:28
498606msgid "Language"
499607msgstr ""
500608
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:270
503−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
609+#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
610+#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
611+#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
612+#: qml/Wizard/Pages/70-passwd-type.qml:145
504613#: qml/Wizard/Pages/75-report-check.qml:84
505−#: qml/Wizard/Pages/passcode-desktop.qml:124
506−#: qml/Wizard/Pages/password-set.qml:141
614+#: qml/Wizard/Pages/passcode-desktop.qml:142
615+#: qml/Wizard/Pages/password-set.qml:142
507616msgid "Next"
508617msgstr ""
509618
510−#: qml/Wizard/Pages/30-wifi.qml:29
619+#: qml/Wizard/Pages/20-keyboard.qml:31
620+msgid "Select Keyboard"
621+msgstr ""
622+
623+#: qml/Wizard/Pages/20-keyboard.qml:71
624+msgid "Keyboard language"
625+msgstr ""
626+
627+#: qml/Wizard/Pages/20-keyboard.qml:93
628+msgid "Keyboard layout"
629+msgstr ""
630+
631+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
632+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
633+#: qml/Wizard/Pages/sim.qml:101
634+msgid "Skip"
635+msgstr "تخطي"
636+
637+#: qml/Wizard/Pages/30-wifi.qml:31
511638msgid "Connect to Wi‑Fi"
512639msgstr "اتصل بالواي فاي"
513640
514−#: qml/Wizard/Pages/30-wifi.qml:130
641+#: qml/Wizard/Pages/30-wifi.qml:132
515642msgid "Connected"
516643msgstr ""
517644
518−#: qml/Wizard/Pages/30-wifi.qml:163
645+#: qml/Wizard/Pages/30-wifi.qml:165
519646msgid "Available Wi-Fi networks"
520647msgstr ""
521648
522−#: qml/Wizard/Pages/30-wifi.qml:164
649+#: qml/Wizard/Pages/30-wifi.qml:166
523650msgid "No available Wi-Fi networks"
524651msgstr ""
525652
526−#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
527−#: qml/Wizard/Pages/sim.qml:101
528−msgid "Skip"
529−msgstr "تخطي"
530−
531653#: qml/Wizard/Pages/40-location.qml:27
532654msgid "Location Services"
533655msgstr ""
@@ -560,11 +682,11 @@ msgstr ""
560682msgid "You can change it later in System Settings."
561683msgstr ""
562684
563−#: qml/Wizard/Pages/50-timezone.qml:29
685+#: qml/Wizard/Pages/50-timezone.qml:30
564686msgid "Time Zone"
565687msgstr ""
566688
567−#: qml/Wizard/Pages/50-timezone.qml:181
689+#: qml/Wizard/Pages/50-timezone.qml:182
568690msgid "Enter your city"
569691msgstr ""
570692
@@ -576,21 +698,21 @@ msgstr ""
576698msgid "Preferred Name"
577699msgstr ""
578700
579−#: qml/Wizard/Pages/70-passwd-type.qml:39
701+#: qml/Wizard/Pages/70-passwd-type.qml:40
580702msgid "Lock Screen"
581703msgstr ""
582704
583−#: qml/Wizard/Pages/70-passwd-type.qml:101
705+#: qml/Wizard/Pages/70-passwd-type.qml:102
584706msgctxt "Label: Type of security method"
585707msgid "Create new password"
586708msgstr ""
587709
588−#: qml/Wizard/Pages/70-passwd-type.qml:103
710+#: qml/Wizard/Pages/70-passwd-type.qml:104
589711msgctxt "Label: Type of security method"
590712msgid "Create passcode (numbers only)"
591713msgstr ""
592714
593−#: qml/Wizard/Pages/70-passwd-type.qml:105
715+#: qml/Wizard/Pages/70-passwd-type.qml:106
594716msgctxt "Label: Type of security method"
595717msgid "No lock code"
596718msgstr ""
@@ -611,6 +733,35 @@ msgstr ""
611733msgid "Privacy policy"
612734msgstr ""
613735
736+#: qml/Wizard/Pages/77-system-update.qml:28
737+msgid "Update Device"
738+msgstr ""
739+
740+#: qml/Wizard/Pages/77-system-update.qml:55
741+msgid ""
742+"There is a system update available and ready to install. Afterwards, the "
743+"device will automatically restart."
744+msgstr ""
745+
746+#: qml/Wizard/Pages/77-system-update.qml:76
747+msgctxt "string identifying name of the update"
748+msgid "Ubuntu system"
749+msgstr ""
750+
751+#: qml/Wizard/Pages/77-system-update.qml:83
752+#, qt-format
753+msgctxt "version of the system update"
754+msgid "Version %1"
755+msgstr ""
756+
757+#: qml/Wizard/Pages/77-system-update.qml:102
758+msgid "This could take a few minutes..."
759+msgstr ""
760+
761+#: qml/Wizard/Pages/77-system-update.qml:116
762+msgid "Install and restart now"
763+msgstr ""
764+
614765#: qml/Wizard/Pages/80-finished.qml:89
615766msgid "Welcome to Ubuntu"
616767msgstr ""
@@ -654,7 +805,7 @@ msgid "Service Terms"
654805msgstr ""
655806
656807#: qml/Wizard/Pages/passcode-confirm.qml:43
657−#: qml/Wizard/Pages/passcode-desktop.qml:80
808+#: qml/Wizard/Pages/passcode-desktop.qml:97
658809msgid "Confirm passcode"
659810msgstr "تأكيد الرمز السري"
660811
@@ -667,28 +818,28 @@ msgctxt "Enter the passcode again"
667818msgid "Please re-enter."
668819msgstr ""
669820
670−#: qml/Wizard/Pages/passcode-desktop.qml:30
821+#: qml/Wizard/Pages/passcode-desktop.qml:31
671822msgid "Lock Screen Passcode"
672823msgstr ""
673824
674−#: qml/Wizard/Pages/passcode-desktop.qml:56
825+#: qml/Wizard/Pages/passcode-desktop.qml:61
675826msgid "Enter 4 numbers to setup your passcode"
676827msgstr ""
677828
678−#: qml/Wizard/Pages/passcode-desktop.qml:65
829+#: qml/Wizard/Pages/passcode-desktop.qml:77
679830#: qml/Wizard/Pages/passcode-set.qml:54
680831msgid "Choose passcode"
681832msgstr ""
682833
683−#: qml/Wizard/Pages/passcode-desktop.qml:105
834+#: qml/Wizard/Pages/passcode-desktop.qml:127
684835msgid "Passcode too short"
685836msgstr ""
686837
687−#: qml/Wizard/Pages/passcode-desktop.qml:107
838+#: qml/Wizard/Pages/passcode-desktop.qml:129
688839msgid "Passcodes match"
689840msgstr ""
690841
691−#: qml/Wizard/Pages/passcode-desktop.qml:109
842+#: qml/Wizard/Pages/passcode-desktop.qml:131
692843msgid "Passcodes do not match"
693844msgstr ""
694845
@@ -696,19 +847,19 @@ msgstr ""
696847msgid "Passcode must be 4 characters long"
697848msgstr ""
698849
699−#: qml/Wizard/Pages/password-set.qml:30
850+#: qml/Wizard/Pages/password-set.qml:31
700851msgid "Lock Screen Password"
701852msgstr ""
702853
703−#: qml/Wizard/Pages/password-set.qml:61
854+#: qml/Wizard/Pages/password-set.qml:62
704855msgid "Enter at least 8 characters"
705856msgstr ""
706857
707−#: qml/Wizard/Pages/password-set.qml:73
858+#: qml/Wizard/Pages/password-set.qml:74
708859msgid "Choose password"
709860msgstr ""
710861
711−#: qml/Wizard/Pages/password-set.qml:103
862+#: qml/Wizard/Pages/password-set.qml:104
712863msgid "Confirm password"
713864msgstr ""
714865
@@ -737,26 +888,30 @@ msgid "To proceed with no SIM tap Skip."
737888msgstr ""
738889
739890#: qml/Wizard/PasswordMeter.qml:87
740−msgid "Passwords match"
891+msgid "Password too short"
741892msgstr ""
742893
743894#: qml/Wizard/PasswordMeter.qml:89
895+msgid "Passwords match"
896+msgstr ""
897+
898+#: qml/Wizard/PasswordMeter.qml:91
744899msgid "Passwords do not match"
745900msgstr ""
746901
747−#: qml/Wizard/PasswordMeter.qml:93
902+#: qml/Wizard/PasswordMeter.qml:95
748903msgid "Strong password"
749904msgstr ""
750905
751−#: qml/Wizard/PasswordMeter.qml:95
906+#: qml/Wizard/PasswordMeter.qml:97
752907msgid "Fair password"
753908msgstr ""
754909
755−#: qml/Wizard/PasswordMeter.qml:97
910+#: qml/Wizard/PasswordMeter.qml:99
756911msgid "Weak password"
757912msgstr ""
758913
759−#: qml/Wizard/PasswordMeter.qml:99
914+#: qml/Wizard/PasswordMeter.qml:101
760915msgid "Very weak password"
761916msgstr ""
762917
@@ -867,9 +1022,41 @@ msgstr ""
8671022#~ msgid "See all"
8681023#~ msgstr "عرض الكل"
8691024
1025+#~ msgid "Tap to unlock"
1026+#~ msgstr "انقر لفك القفل"
1027+
1028+#, qt-format
1029+#~ msgid "Enter %1"
1030+#~ msgstr "أدخِل %1"
1031+
1032+#~ msgid "Sorry, incorrect passcode."
1033+#~ msgstr "عذرًا، رمز سرّي خاطيء."
1034+
1035+#~ msgid "Enter passphrase"
1036+#~ msgstr "أدخِل العبارة السرية"
1037+
1038+#~ msgid "Enter passcode"
1039+#~ msgstr "أدخِل الرمز السرّي"
1040+
1041+#~ msgid "Sorry, incorrect passphrase."
1042+#~ msgstr "عذرًا، عبارة سرّية خاطئة."
1043+
1044+#~ msgid "This will be your last attempt."
1045+#~ msgstr "هذه ستكون المحاولة الأخيرة لك."
1046+
1047+#, qt-format
1048+#~ msgid "Sorry, incorrect %1"
1049+#~ msgstr "نأسف، %1 غير صحيحية"
1050+
1051+#~ msgid "Sorry, incorrect passphrase"
1052+#~ msgstr "نأسف، عبارة السّر غير صحيحية"
1053+
8701054#~ msgid "Please re-enter"
8711055#~ msgstr "برجاء إعادة إدخالها"
8721056
1057+#~ msgid "Sorry, incorrect passcode"
1058+#~ msgstr "نأسف، الرمز السري غير صحيح"
1059+
8731060#~ msgid "This action does different things for different apps"
8741061#~ msgstr "هذا الإجراء يقوم بأشياء مختلفة على التطبيقات المختلفة"
8751062
@@ -990,6 +1177,10 @@ msgstr ""
9901177#~ "باستخدام نظام تحديد المواقع (GPS)، والواي فاي، وبيانات الشبكة الخلوية "
9911178#~ "(مستحسن)"
9921179
1180+#~ msgctxt "passphrase"
1181+#~ msgid "Please re-enter"
1182+#~ msgstr "برجاء إعادة إدخالها"
1183+
9931184#~ msgid ""
9941185#~ "This can be disabled in <b>System Settings</b> under <b>Security &amp; "
9951186#~ "Privacy</b>"
@@ -1028,3 +1219,17 @@ msgstr ""
10281219#~ msgstr ""
10291220#~ "باختيارك لهذا الخيار فإنك توافق على <a href='#'>الشروط والأحكام</a> الخاصة "
10301221#~ "بـ Nokia HERE."
1222+
1223+#~ msgid ""
1224+#~ "If passcode is entered incorrectly, your phone will conduct a factory reset "
1225+#~ "and all personal data will be deleted."
1226+#~ msgstr ""
1227+#~ "إذا تم إدخال العبارة السرية بشكل خاطئ، فسوف يتم إعادة الهاتف لحالة ضبط "
1228+#~ "المصنع وسيتم حذف كافة البيانات الشخصية."
1229+
1230+#~ msgid ""
1231+#~ "If passphrase is entered incorrectly, your phone will conduct a factory "
1232+#~ "reset and all personal data will be deleted."
1233+#~ msgstr ""
1234+#~ "إذا تم إدخال العبارة السرية بشكل خاطئ، فسوف يتم إعادة الهاتف لحالة ضبط "
1235+#~ "المصنع وسيتم حذف كافة البيانات الشخصية."
po/ast.po+474−233
@@ -7,102 +7,83 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-05-27 13:54+0000\n"
11−"PO-Revision-Date: 2016-05-16 14:07+0000\n"
10+"POT-Creation-Date: 2016-11-16 10:44+0000\n"
11+"PO-Revision-Date: 2016-09-28 13:40+0000\n"
1212"Last-Translator: Xuacu Saturio <xuacusk8@gmail.com>\n"
1313"Language-Team: Asturian <ast@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-06-02 06:20+0000\n"
19−"X-Generator: Launchpad (build 18053)\n"
18+"X-Launchpad-Export-Date: 2016-11-23 06:34+0000\n"
19+"X-Generator: Launchpad (build 18269)\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
39−msgid "Device Locked"
40−msgstr "Preséu bloquiáu"
41−
42−#: qml/Components/DelayedLockscreen.qml:64
43−msgid "You have been locked out due to too many failed passphrase attempts."
44−msgstr "Quedasti bloquiáu polos escesivos intentos fallíos de fras de pasu."
45−
46−#: qml/Components/DelayedLockscreen.qml:65
47−msgid "You have been locked out due to too many failed passcode attempts."
48−msgstr ""
49−"Quedasti bloquiáu polos escesivos intentos fallíos de códigu de pasu."
50−
51−#: qml/Components/DelayedLockscreen.qml:74
52−#, qt-format
53−msgid "Please wait %1 minute and then try again…"
54−msgid_plural "Please wait %1 minutes and then try again…"
55−msgstr[0] "Por favor, espera %1 minutu y vuelvi a intentalo…"
56−msgstr[1] "Por favor, espera %1 minutos y vuelvi a intentalo…"
57−
58−#: qml/Components/Dialogs.qml:144
38+#: qml/Components/Dialogs.qml:149
5939msgctxt "Title: Lock/Log out dialog"
6040msgid "Log out"
6141msgstr "Zarrar sesión"
6242
63−#: qml/Components/Dialogs.qml:145
43+#: qml/Components/Dialogs.qml:150
6444msgid "Are you sure you want to log out?"
6545msgstr "¿De xuru que quies zarrar la sesión?"
6646
67−#: qml/Components/Dialogs.qml:147
47+#: qml/Components/Dialogs.qml:152
6848msgctxt "Button: Lock the system"
6949msgid "Lock"
7050msgstr "Bloquiar"
7151
72−#: qml/Components/Dialogs.qml:154
52+#: qml/Components/Dialogs.qml:159
7353msgctxt "Button: Log out from the system"
7454msgid "Log Out"
7555msgstr "Zarrar sesión"
7656
77−#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
78−#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
57+#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
58+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
59+#: qml/Wizard/Pages/passcode-confirm.qml:32
7960#: qml/Wizard/Pages/passcode-set.qml:32
8061msgid "Cancel"
8162msgstr "Encaboxar"
8263
83−#: qml/Components/Dialogs.qml:173
64+#: qml/Components/Dialogs.qml:178
8465msgctxt "Title: Reboot dialog"
8566msgid "Reboot"
8667msgstr "Reaniciu"
8768
88−#: qml/Components/Dialogs.qml:174
69+#: qml/Components/Dialogs.qml:179
8970msgid "Are you sure you want to reboot?"
9071msgstr "¿De xuru que quies reaniciar?"
9172
92−#: qml/Components/Dialogs.qml:176
73+#: qml/Components/Dialogs.qml:181
9374msgid "No"
9475msgstr "Non"
9576
96−#: qml/Components/Dialogs.qml:182
77+#: qml/Components/Dialogs.qml:187
9778msgid "Yes"
9879msgstr "Sí"
9980
100−#: qml/Components/Dialogs.qml:197
81+#: qml/Components/Dialogs.qml:202
10182msgctxt "Title: Power off/Restart dialog"
10283msgid "Power"
10384msgstr "Apagáu"
10485
105−#: qml/Components/Dialogs.qml:198
86+#: qml/Components/Dialogs.qml:203
10687msgid ""
10788"Are you sure you would like\n"
10889"to power off?"
@@ -110,28 +91,198 @@ msgstr ""
11091"¿De xuru que te prestaría\n"
11192"apagar?"
11293
113−#: qml/Components/Dialogs.qml:200
94+#: qml/Components/Dialogs.qml:205
11495msgctxt "Button: Power off the system"
11596msgid "Power off"
11697msgstr "Apagar"
11798
118−#: qml/Components/Dialogs.qml:209
99+#: qml/Components/Dialogs.qml:214
119100msgctxt "Button: Restart the system"
120101msgid "Restart"
121102msgstr "Reaniciar"
122103
123−#: qml/Components/Lockscreen.qml:231
104+#: qml/Components/KeyboardShortcutsOverlay.qml:41
105+msgid "Keyboard Shortcuts"
106+msgstr "Atayos de tecláu"
107+
108+#: qml/Components/KeyboardShortcutsOverlay.qml:55
109+msgid "Unity 8"
110+msgstr "Unity 8"
111+
112+#: qml/Components/KeyboardShortcutsOverlay.qml:62
113+msgid "PrtScr"
114+msgstr "ImprPant"
115+
116+#: qml/Components/KeyboardShortcutsOverlay.qml:67
117+msgid "Takes a screenshot."
118+msgstr "Saca una imaxe de la pantalla."
119+
120+#: qml/Components/KeyboardShortcutsOverlay.qml:75
121+msgid "Alt + PrtScr"
122+msgstr "Alt + ImprPant"
123+
124+#: qml/Components/KeyboardShortcutsOverlay.qml:80
125+msgid "Takes a screenshot of a window."
126+msgstr "Saca una imaxe d'una ventana."
127+
128+#: qml/Components/KeyboardShortcutsOverlay.qml:88
129+msgid "Super + Space"
130+msgstr "Super + Espaciu"
131+
132+#: qml/Components/KeyboardShortcutsOverlay.qml:93
133+msgid "Switches to next keyboard layout."
134+msgstr "Salta al siguiente diseñu de tecláu."
135+
136+#: qml/Components/KeyboardShortcutsOverlay.qml:101
137+msgid "Super + Shift + Space"
138+msgstr "Super +Mayús + Espaciu"
139+
140+#: qml/Components/KeyboardShortcutsOverlay.qml:106
141+msgid "Switches to previous keyboard layout."
142+msgstr "Salta al diseñu de tecláu anterior."
143+
144+#: qml/Components/KeyboardShortcutsOverlay.qml:118
145+msgid "Launcher"
146+msgstr "Llanzador"
147+
148+#: qml/Components/KeyboardShortcutsOverlay.qml:125
149+msgid "Super (Hold)"
150+msgstr "Super (Caltener)"
151+
152+#: qml/Components/KeyboardShortcutsOverlay.qml:130
153+msgid "Opens the launcher, displays shortcuts."
154+msgstr "Abre'l llanzador, amuesa atayos."
155+
156+#: qml/Components/KeyboardShortcutsOverlay.qml:138
157+msgid "Alt + F1"
158+msgstr "Alt + F1"
159+
160+#: qml/Components/KeyboardShortcutsOverlay.qml:143
161+msgid "Opens launcher keyboard navigation mode."
162+msgstr "Abre'l mou de navegación con tecláu del llanzador."
163+
164+#: qml/Components/KeyboardShortcutsOverlay.qml:151
165+msgid "Super + Tab"
166+msgstr "Super + Tab"
167+
168+#: qml/Components/KeyboardShortcutsOverlay.qml:156
169+msgid "Switches applications via the launcher."
170+msgstr "Cambia d'aplicaciones col llanzador."
171+
172+#: qml/Components/KeyboardShortcutsOverlay.qml:164
173+msgid "Super + 0 to 9"
174+msgstr "Super + 0 a 9"
175+
176+#: qml/Components/KeyboardShortcutsOverlay.qml:169
177+msgid "Same as clicking on a launcher icon."
178+msgstr "Igual que facer click nel iconu del llanzador."
179+
180+#: qml/Components/KeyboardShortcutsOverlay.qml:181
181+msgid "Scopes"
182+msgstr "Ámbitos"
183+
184+#: qml/Components/KeyboardShortcutsOverlay.qml:188
185+msgid "Super (Tap)"
186+msgstr "Super (Tocar)"
187+
188+#: qml/Components/KeyboardShortcutsOverlay.qml:193
189+msgid "Opens the Scopes home."
190+msgstr "Abre'l principiu d'Ámbitos"
191+
192+#: qml/Components/KeyboardShortcutsOverlay.qml:209
193+msgid "Switching"
194+msgstr "Conmutación"
195+
196+#: qml/Components/KeyboardShortcutsOverlay.qml:216
197+msgid "Alt + Tab"
198+msgstr "Alt + Tab"
199+
200+#: qml/Components/KeyboardShortcutsOverlay.qml:221
201+msgid "Switches between applications."
202+msgstr "Conmuta ente aplicaciones."
203+
204+#: qml/Components/KeyboardShortcutsOverlay.qml:229
205+msgid "Super + W"
206+msgstr "Super + W"
207+
208+#: qml/Components/KeyboardShortcutsOverlay.qml:234
209+msgid "Opens the desktop spread."
210+msgstr "Abre esparder l'escritoriu."
211+
212+#: qml/Components/KeyboardShortcutsOverlay.qml:242
213+msgid "Cursor Left or Right"
214+msgstr "Flecha izq. o dre."
215+
216+#: qml/Components/KeyboardShortcutsOverlay.qml:247
217+msgid "Moves the focus."
218+msgstr "Mueve'l focu"
219+
220+#: qml/Components/KeyboardShortcutsOverlay.qml:259
221+msgid "Windows"
222+msgstr "Ventanes"
223+
224+#: qml/Components/KeyboardShortcutsOverlay.qml:266
225+msgid "Ctrl + Super + D"
226+msgstr "Ctrl + Super + D"
227+
228+#: qml/Components/KeyboardShortcutsOverlay.qml:271
229+msgid "Minimizes all windows."
230+msgstr "Amenorga toles ventanes."
231+
232+#: qml/Components/KeyboardShortcutsOverlay.qml:279
233+msgid "Ctrl + Super + Up"
234+msgstr "Ctrl + Super + Arriba"
235+
236+#: qml/Components/KeyboardShortcutsOverlay.qml:284
237+msgid "Maximizes the current window."
238+msgstr "Maximiza la ventana actual."
239+
240+#: qml/Components/KeyboardShortcutsOverlay.qml:292
241+msgid "Ctrl + Super + Down"
242+msgstr "Ctrl + Super + Abaxo"
243+
244+#: qml/Components/KeyboardShortcutsOverlay.qml:297
245+msgid "Minimizes or restores the current window."
246+msgstr "Amenorga o restaura la ventana actual."
247+
248+#: qml/Components/KeyboardShortcutsOverlay.qml:305
249+msgid "Ctrl + Super + Left or Right"
250+msgstr "Ctrl + Super + Izquierda o Drecha"
251+
252+#: qml/Components/KeyboardShortcutsOverlay.qml:310
253+msgid "Semi-maximizes the current window."
254+msgstr "Semi-maximiza la ventana actual."
255+
256+#: qml/Components/KeyboardShortcutsOverlay.qml:318
257+msgid "Alt + F4"
258+msgstr "Alt + F4"
259+
260+#: qml/Components/KeyboardShortcutsOverlay.qml:323
261+msgid "Closes the current window."
262+msgstr "Zarra la ventana actual."
263+
264+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
124265msgid "Return to Call"
125266msgstr "Tornar a la llamada"
126267
127−#: qml/Components/Lockscreen.qml:231
268+#: qml/Components/Lockscreen.qml:212
128269msgid "Emergency Call"
129270msgstr "Llamada d'emerxencia"
130271
131−#: qml/Components/Lockscreen.qml:263
272+#: qml/Components/Lockscreen.qml:244
132273msgid "OK"
133274msgstr "Aceutar"
134275
276+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
277+#, qt-format
278+msgid "%1:%2:%3"
279+msgstr "%1:%2:%3"
280+
281+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
282+#, qt-format
283+msgid "%1:%2"
284+msgstr "%1:%2"
285+
135286#: qml/Components/ModeSwitchWarningDialog.qml:32
136287msgid "Apps may have unsaved data:"
137288msgstr "Apps que pueden tener datos sin guardar:"
@@ -158,88 +309,88 @@ msgstr "Reconeutar agora."
158309msgid "Close all"
159310msgstr "Zarrar too"
160311
161−#: qml/Dash/DashPageHeader.qml:333
312+#: qml/Components/SharingPicker.qml:54
313+msgid "Preview Share Item"
314+msgstr "Entever l'elementu compartíu"
315+
316+#: qml/Dash/DashPageHeader.qml:361
162317msgctxt "Button: Open the Ubuntu Store"
163318msgid "Store"
164319msgstr "Tienda"
165320
166−#: qml/Dash/DashPageHeader.qml:340
321+#: qml/Dash/DashPageHeader.qml:368
167322msgctxt "Button: Start a search in the current dash scope"
168323msgid "Search"
169324msgstr "Guetar"
170325
171−#: qml/Dash/DashPageHeader.qml:350
326+#: qml/Dash/DashPageHeader.qml:378
172327msgctxt "Button: Show the current dash scope settings"
173328msgid "Settings"
174329msgstr "Axustes"
175330
176−#: qml/Dash/DashPageHeader.qml:357
331+#: qml/Dash/DashPageHeader.qml:385
177332msgid "Remove from Favorites"
178333msgstr "Desaniciar de favoritos"
179334
180−#: qml/Dash/DashPageHeader.qml:357
335+#: qml/Dash/DashPageHeader.qml:385
181336msgid "Add to Favorites"
182337msgstr "Amestar a favoritos"
183338
184−#: qml/Dash/FiltersPopover.qml:60
339+#: qml/Dash/FiltersPopover.qml:61
185340msgid "Refine your results"
186341msgstr "Refina los resultaos"
187342
188−#: qml/Dash/FiltersPopover.qml:69
343+#: qml/Dash/FiltersPopover.qml:70
189344msgid "Reset"
190345msgstr "Reafitar"
191346
192−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:774
347+#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
193348msgid "Show less"
194349msgstr "Ver menos"
195350
196−#: qml/Dash/GenericScopeView.qml:579
351+#: qml/Dash/GenericScopeView.qml:545
197352msgid "Show all"
198353msgstr "Ver too"
199354
200−#: qml/Dash/GenericScopeView.qml:636
355+#: qml/Dash/GenericScopeView.qml:576
201356msgctxt "Label: Hint for dash search line edit"
202357msgid "Search"
203358msgstr "Guetar"
204359
205−#: qml/Dash/PageHeaderExtraPanel.qml:56
360+#: qml/Dash/PageHeaderExtraPanel.qml:57
206361msgid "Recent Searches"
207362msgstr "Guetes recién"
208363
209−#: qml/Dash/PageHeaderExtraPanel.qml:67
364+#: qml/Dash/PageHeaderExtraPanel.qml:68
210365msgid "Clear All"
211366msgstr "Llimpiar too"
212367
213−#: qml/Dash/Previews/PreviewActionCombo.qml:35
368+#: qml/Dash/Previews/PreviewActionCombo.qml:36
214369msgid "More..."
215370msgstr "Más…"
216371
217−#: qml/Dash/Previews/PreviewActionCombo.qml:35
372+#: qml/Dash/Previews/PreviewActionCombo.qml:36
218373msgid "Less..."
219374msgstr "Menos…"
220375
221−#: qml/Dash/Previews/PreviewCommentInput.qml:68
222−#: qml/Dash/Previews/PreviewRatingInput.qml:175
376+#: qml/Dash/Previews/PreviewCommentInput.qml:83
377+#: qml/Dash/Previews/PreviewRatingInput.qml:202
223378msgid "Send"
224379msgstr "Unviar"
225380
226−#: qml/Dash/Previews/PreviewRatingInput.qml:82
381+#: qml/Dash/Previews/PreviewRatingInput.qml:109
227382msgid "Rate this"
228383msgstr "Valorar esto"
229384
230−#: qml/Dash/Previews/PreviewRatingInput.qml:157
385+#: qml/Dash/Previews/PreviewRatingInput.qml:184
231386msgid "Add a review"
232387msgstr "Amestar una reseña"
233388
234−#: qml/Dash/Previews/PreviewSharing.qml:66
235−msgid "Preview Share Item"
236−msgstr "Entever l'elementu compartíu"
237−
238−#: qml/Dash/PullToRefreshScopeStyle.qml:55
389+#: qml/Dash/PullToRefreshScopeStyle.qml:56
239390msgid "Pull to refresh…"
240391msgstr "Tira p'anovar..."
241392
242−#: qml/Dash/PullToRefreshScopeStyle.qml:60
393+#: qml/Dash/PullToRefreshScopeStyle.qml:61
243394msgid "Release to refresh…"
244395msgstr "Sueltar p'anovar..."
245396
@@ -247,15 +398,15 @@ msgstr "Sueltar p'anovar..."
247398msgid "Enable location data"
248399msgstr "Habilitar datos d'allugamientu"
249400
250−#: qml/Dash/ScopesList.qml:55
401+#: qml/Dash/ScopesList.qml:57
251402msgid "Manage"
252403msgstr "Xestionar"
253404
254−#: qml/Dash/ScopesList.qml:101
405+#: qml/Dash/ScopesList.qml:104
255406msgid "Home"
256407msgstr "Aniciu"
257408
258−#: qml/Dash/ScopesList.qml:102
409+#: qml/Dash/ScopesList.qml:105
259410msgid "Also installed"
260411msgstr "Tamién instalaos"
261412
@@ -267,76 +418,57 @@ msgstr ""
267418"El preséu agora ta coneutáu con una pantalla esterna. Usa esta pantalla como "
268419"touch pad pa interactuar col punteru."
269420
270−#: qml/Greeter/CoverPage.qml:118
421+#: qml/Greeter/CoverPage.qml:127
271422msgid "Unlock"
272423msgstr "Desbloquiar"
273424
274−#: qml/Greeter/LoginList.qml:239
275−msgid "Retry"
276−msgstr "Reintentar"
277−
278−#: qml/Greeter/LoginList.qml:240
279−msgid "Tap to unlock"
280−msgstr "Calca pa desbloquiar"
281−
282−#: qml/Greeter/NarrowView.qml:54
283−msgid "Sorry, incorrect passphrase."
284−msgstr "Perdón, fras de pasu incorreuta"
285−
286−#: qml/Greeter/NarrowView.qml:55
287−msgid "Sorry, incorrect passcode."
288−msgstr "Perdón, códigu de pasu incorreutu."
289−
290−#: qml/Greeter/NarrowView.qml:56
291−msgid "This will be your last attempt."
292−msgstr "Esti sedra'l to caberu intentu"
425+#: qml/Greeter/DelayedLockscreen.qml:43
426+msgid "Device Locked"
427+msgstr "Preséu bloquiáu"
293428
294−#: qml/Greeter/NarrowView.qml:58
295−msgid ""
296−"If passphrase is entered incorrectly, your phone will conduct a factory "
297−"reset and all personal data will be deleted."
298−msgstr ""
299−"Si s'inxerta la fras de pasu incorreutamente, el to teléfonu va reafitase y "
300−"van desaniciase tolos datos personales."
429+#: qml/Greeter/DelayedLockscreen.qml:58
430+msgid "You have been locked out due to too many failed passphrase attempts."
431+msgstr "Quedasti bloquiáu polos escesivos intentos fallíos de fras de pasu."
301432
302−#: qml/Greeter/NarrowView.qml:59
303−msgid ""
304−"If passcode is entered incorrectly, your phone will conduct a factory reset "
305−"and all personal data will be deleted."
433+#: qml/Greeter/DelayedLockscreen.qml:59
434+msgid "You have been locked out due to too many failed passcode attempts."
306435msgstr ""
307−"Si s'inxerta'l códigu de pasu incorreutamente, el to teléfonu va reafitase y "
308−"van desaniciase tolos datos personales."
436+"Quedasti bloquiáu polos escesivos intentos fallíos de códigu de pasu."
309437
310−#: qml/Greeter/NarrowView.qml:116
438+#: qml/Greeter/DelayedLockscreen.qml:68
311439#, qt-format
312−msgid "Enter %1"
313−msgstr "Introduz %1"
440+msgid "Please wait %1 minute and then try again…"
441+msgid_plural "Please wait %1 minutes and then try again…"
442+msgstr[0] "Por favor, espera %1 minutu y vuelvi a intentalo…"
443+msgstr[1] "Por favor, espera %1 minutos y vuelvi a intentalo…"
314444
315−#: qml/Greeter/NarrowView.qml:117
316−msgid "Enter passphrase"
317−msgstr "Introduz la fras de pasu"
445+#: qml/Greeter/Greeter.qml:596
446+msgid "Try again"
447+msgstr "Tentar otra vuelta"
318448
319−#: qml/Greeter/NarrowView.qml:118
320−msgid "Enter passcode"
321−msgstr "Introduz el códigu de pasu"
449+#: qml/Greeter/LoginList.qml:70
450+msgid "Passphrase"
451+msgstr "Fras de pasu"
322452
323−#: qml/Greeter/NarrowView.qml:119
324−#, qt-format
325−msgid "Sorry, incorrect %1"
326−msgstr "Sentímoslo, %1 incorreutu"
453+#: qml/Greeter/LoginList.qml:71
454+msgid "Passcode"
455+msgstr "Códigu de pasu"
456+
457+#: qml/Greeter/LoginList.qml:98
458+msgid "Retry"
459+msgstr "Reintentar"
327460
328−#: qml/Greeter/NarrowView.qml:120
329−msgid "Sorry, incorrect passphrase"
330−msgstr "Sentímoslo, contraseña incorreuta"
461+#: qml/Greeter/LoginList.qml:99
462+msgid "Log In"
463+msgstr "Aniciar sesión"
331464
332−#: qml/Greeter/NarrowView.qml:121
333−msgctxt "passphrase"
334−msgid "Please re-enter"
335−msgstr "Vuelve a escribila"
465+#: qml/Greeter/NarrowView.qml:252
466+msgid "Emergency"
467+msgstr "Emerxencia"
336468
337−#: qml/Greeter/NarrowView.qml:122
338−msgid "Sorry, incorrect passcode"
339−msgstr "Sentímoslo, códigu de pasu incorreutu"
469+#: qml/Greeter/SessionsList.qml:122
470+msgid "Select desktop environment"
471+msgstr "Esbillar entornu d'escritoriu"
340472
341473#: qml/Notifications/NotificationMenuItemFactory.qml:124
342474msgid "Show password"
@@ -350,62 +482,62 @@ msgstr "Toca pa tornar a la llamada..."
350482msgid "Conference"
351483msgstr "Conferencia"
352484
353−#: qml/Panel/Indicators/MenuItemFactory.qml:762
485+#: qml/Panel/Indicators/MenuItemFactory.qml:847
354486msgid "Nothing is playing"
355487msgstr "Nun ta reproduciéndose nada"
356488
357−#: qml/Panel/Indicators/MenuItemFactory.qml:891
489+#: qml/Panel/Indicators/MenuItemFactory.qml:975
358490#, qt-format
359491msgid "%1 hour"
360492msgid_plural "%1 hours"
361493msgstr[0] "%1 hora"
362494msgstr[1] "%1 hores"
363495
364−#: qml/Panel/Indicators/MenuItemFactory.qml:895
496+#: qml/Panel/Indicators/MenuItemFactory.qml:979
365497#, qt-format
366498msgid "%1 minute"
367499msgid_plural "%1 minutes"
368500msgstr[0] "%1 minutu"
369501msgstr[1] "%1 minutos"
370502
371−#: qml/Panel/Indicators/MenuItemFactory.qml:900
503+#: qml/Panel/Indicators/MenuItemFactory.qml:984
372504#, qt-format
373505msgid "%1 second"
374506msgid_plural "%1 seconds"
375507msgstr[0] "%1 segundu"
376508msgstr[1] "%1 segundos"
377509
378−#: qml/Panel/Indicators/MenuItemFactory.qml:903
510+#: qml/Panel/Indicators/MenuItemFactory.qml:987
379511msgid "0 seconds"
380512msgstr "0 segundos"
381513
382514#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
383−#: qml/Panel/Indicators/MenuItemFactory.qml:905
515+#: qml/Panel/Indicators/MenuItemFactory.qml:989
384516#, qt-format
385517msgid "%1 remaining"
386518msgstr "Queden %1"
387519
388−#: qml/Panel/Indicators/MenuItemFactory.qml:911
520+#: qml/Panel/Indicators/MenuItemFactory.qml:995
389521msgid "In queue…"
390522msgstr "Na cola..."
391523
392−#: qml/Panel/Indicators/MenuItemFactory.qml:915
524+#: qml/Panel/Indicators/MenuItemFactory.qml:999
393525msgid "Downloading"
394526msgstr "Baxando"
395527
396−#: qml/Panel/Indicators/MenuItemFactory.qml:917
528+#: qml/Panel/Indicators/MenuItemFactory.qml:1001
397529msgid "Paused, tap to resume"
398530msgstr "Posáu, toca pa reanudar"
399531
400−#: qml/Panel/Indicators/MenuItemFactory.qml:919
532+#: qml/Panel/Indicators/MenuItemFactory.qml:1003
401533msgid "Canceled"
402534msgstr "Encaboxáu"
403535
404−#: qml/Panel/Indicators/MenuItemFactory.qml:921
536+#: qml/Panel/Indicators/MenuItemFactory.qml:1005
405537msgid "Finished"
406538msgstr "Finó"
407539
408−#: qml/Panel/Indicators/MenuItemFactory.qml:923
540+#: qml/Panel/Indicators/MenuItemFactory.qml:1007
409541msgid "Failed, tap to retry"
410542msgstr "Falló, toca pa reintentar"
411543
@@ -425,95 +557,85 @@ msgctxt "Button: Call back on phone"
425557msgid "Call back"
426558msgstr "Devolver llamada"
427559
428−#: qml/Stages/SideStage.qml:76
560+#: qml/Stage/SideStage.qml:76
429561msgid "Drag using 3 fingers any application from one window to the other"
430562msgstr "Abasnar cualquier aplicación d'una ventana a otra usando 3 deos"
431563
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
564+#: qml/Tutorial/TutorialLeftLong.qml:49
453565msgid "Long swipe from the left edge to open the Today scope"
454566msgstr "Eslizamientu llargu dende'l berbesu izquierdu pa ver el scope Güei"
455567
456568#: 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"
569+msgid "Short swipe from the left edge to open the launcher"
570+msgstr "Barríu curtiu dende'l berbesu izquierdu p'abrir el llanzador"
459571
460572#: qml/Tutorial/TutorialRight.qml:55
461573msgid "Push your mouse against the right edge to view your open apps"
462574msgstr "Emburria'l mur escontra'l berbesu drechu pa ver les apps abiertes"
463575
464576#: qml/Tutorial/TutorialRight.qml:56
465−msgid "Short or long swipe from the right edge to view your open apps"
466−msgstr ""
467−"Eslizamientu curtiu o llargu dende'l berbesu drechu pa ver les apps abiertes"
577+msgid "Swipe from the right edge to view your open apps"
578+msgstr "Barríu dende'l berbesu drechu pa ver les apps abiertes"
468579
469580#: qml/Tutorial/TutorialTop.qml:53
470−msgid "Swipe from the top right edge to open the notification bar"
581+msgid "Swipe from the top edge to access notifications and quick settings"
471582msgstr ""
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"
583+"Barríu dende'l berbesu superior pa tener accesu a los avisos y configuración "
584+"nel intre"
477585
478586#: qml/Wizard/Page.qml:54
479587msgctxt "Button: Go back one page in the Wizard"
480588msgid "Back"
481589msgstr "Atrás"
482590
483−#: qml/Wizard/Pages/10-welcome.qml:27
591+#: qml/Wizard/Pages/10-welcome.qml:28
484592msgid "Language"
485593msgstr "Llingua"
486594
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:270
489−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
595+#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
596+#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
597+#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
598+#: qml/Wizard/Pages/70-passwd-type.qml:145
490599#: qml/Wizard/Pages/75-report-check.qml:84
491−#: qml/Wizard/Pages/passcode-desktop.qml:124
492−#: qml/Wizard/Pages/password-set.qml:141
600+#: qml/Wizard/Pages/passcode-desktop.qml:142
601+#: qml/Wizard/Pages/password-set.qml:142
493602msgid "Next"
494603msgstr "Siguiente"
495604
496−#: qml/Wizard/Pages/30-wifi.qml:29
605+#: qml/Wizard/Pages/20-keyboard.qml:31
606+msgid "Select Keyboard"
607+msgstr "Escoyer tecláu"
608+
609+#: qml/Wizard/Pages/20-keyboard.qml:71
610+msgid "Keyboard language"
611+msgstr "Llingua del tecláu"
612+
613+#: qml/Wizard/Pages/20-keyboard.qml:93
614+msgid "Keyboard layout"
615+msgstr "Distribución del tecláu"
616+
617+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
618+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
619+#: qml/Wizard/Pages/sim.qml:101
620+msgid "Skip"
621+msgstr "Saltar"
622+
623+#: qml/Wizard/Pages/30-wifi.qml:31
497624msgid "Connect to Wi‑Fi"
498625msgstr "Coneutase al WiFi"
499626
500−#: qml/Wizard/Pages/30-wifi.qml:130
627+#: qml/Wizard/Pages/30-wifi.qml:132
501628msgid "Connected"
502629msgstr "Coneutáu"
503630
504−#: qml/Wizard/Pages/30-wifi.qml:163
631+#: qml/Wizard/Pages/30-wifi.qml:165
505632msgid "Available Wi-Fi networks"
506633msgstr "Redes Wi-Fi disponibles"
507634
508−#: qml/Wizard/Pages/30-wifi.qml:164
635+#: qml/Wizard/Pages/30-wifi.qml:166
509636msgid "No available Wi-Fi networks"
510637msgstr "Nun hai redes Wi-Fi disponibles"
511638
512−#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
513−#: qml/Wizard/Pages/sim.qml:101
514−msgid "Skip"
515−msgstr "Saltar"
516−
517639#: qml/Wizard/Pages/40-location.qml:27
518640msgid "Location Services"
519641msgstr "Servicios d'allugamientu"
@@ -548,11 +670,11 @@ msgstr "Nun usar l'allugamientu"
548670msgid "You can change it later in System Settings."
549671msgstr "Pues camudalo sero na Configuración del Sistema."
550672
551−#: qml/Wizard/Pages/50-timezone.qml:29
673+#: qml/Wizard/Pages/50-timezone.qml:30
552674msgid "Time Zone"
553675msgstr "Estaya horaria"
554676
555−#: qml/Wizard/Pages/50-timezone.qml:181
677+#: qml/Wizard/Pages/50-timezone.qml:182
556678msgid "Enter your city"
557679msgstr "Escribe la ciudá"
558680
@@ -564,21 +686,21 @@ msgstr "Personaliza'l preséu"
564686msgid "Preferred Name"
565687msgstr "Nome preferíu"
566688
567−#: qml/Wizard/Pages/70-passwd-type.qml:39
689+#: qml/Wizard/Pages/70-passwd-type.qml:40
568690msgid "Lock Screen"
569691msgstr "Bloquiar pantalla"
570692
571−#: qml/Wizard/Pages/70-passwd-type.qml:101
693+#: qml/Wizard/Pages/70-passwd-type.qml:102
572694msgctxt "Label: Type of security method"
573695msgid "Create new password"
574696msgstr "Crear contraseña nueva"
575697
576−#: qml/Wizard/Pages/70-passwd-type.qml:103
698+#: qml/Wizard/Pages/70-passwd-type.qml:104
577699msgctxt "Label: Type of security method"
578700msgid "Create passcode (numbers only)"
579701msgstr "Crear códigu d'accesu (sólo númberos)"
580702
581−#: qml/Wizard/Pages/70-passwd-type.qml:105
703+#: qml/Wizard/Pages/70-passwd-type.qml:106
582704msgctxt "Label: Type of security method"
583705msgid "No lock code"
584706msgstr "Ensin códigu de bloquéu"
@@ -601,6 +723,37 @@ msgstr ""
601723msgid "Privacy policy"
602724msgstr "Política d'intimidá"
603725
726+#: qml/Wizard/Pages/77-system-update.qml:28
727+msgid "Update Device"
728+msgstr "Anovar preséu"
729+
730+#: qml/Wizard/Pages/77-system-update.qml:55
731+msgid ""
732+"There is a system update available and ready to install. Afterwards, the "
733+"device will automatically restart."
734+msgstr ""
735+"Hai un anovamientu del sistema disponible y preparáu pa instalar. Darréu, el "
736+"preséu reaniciará de mou automáticu."
737+
738+#: qml/Wizard/Pages/77-system-update.qml:76
739+msgctxt "string identifying name of the update"
740+msgid "Ubuntu system"
741+msgstr "Sistema Ubuntu"
742+
743+#: qml/Wizard/Pages/77-system-update.qml:83
744+#, qt-format
745+msgctxt "version of the system update"
746+msgid "Version %1"
747+msgstr "Versión %1"
748+
749+#: qml/Wizard/Pages/77-system-update.qml:102
750+msgid "This could take a few minutes..."
751+msgstr "Esto podría tardar dellos minutos..."
752+
753+#: qml/Wizard/Pages/77-system-update.qml:116
754+msgid "Install and restart now"
755+msgstr "Instalar y reaniciar agora"
756+
604757#: qml/Wizard/Pages/80-finished.qml:89
605758msgid "Welcome to Ubuntu"
606759msgstr "Bienveníu/a a Ubuntu"
@@ -619,7 +772,7 @@ msgstr "Términos y condiciones"
619772
620773#: qml/Wizard/Pages/here-terms.qml:69
621774msgid "Your device uses positioning technologies provided by HERE."
622−msgstr ""
775+msgstr "El preséu usa teunoloxíes de posición qu'ufre HERE."
623776
624777#: qml/Wizard/Pages/here-terms.qml:81
625778msgid ""
@@ -627,92 +780,97 @@ msgid ""
627780"collects information about nearby cell towers and Wi-Fi hotspots around your "
628781"current location whenever your position is being found."
629782msgstr ""
783+"Pa ufrir los servicios de posición y ameyorar la so calidá, HERE collecha "
784+"información de les antenes celulares y puntos d'accesu Wi-Fi cercanos al to "
785+"allugamientu actual siempre que se conoza la to posición."
630786
631787#: qml/Wizard/Pages/here-terms.qml:93
632788msgid ""
633789"The information collected is used to analyze the service and to improve the "
634790"use of service, but not to identify you personally."
635791msgstr ""
792+"La información collechada úsase p'analizar el serviciu y ameyorar l'usu del "
793+"serviciu, non pa identificate personalmente."
636794
637795#: qml/Wizard/Pages/here-terms.qml:106
638796#, qt-format
639797msgid "By continuing, you agree to the HERE platform %1 and %2."
640−msgstr ""
798+msgstr "Al siguir, aceutes %1 y %2 de la plataforma HERE."
641799
642800#: qml/Wizard/Pages/here-terms.qml:107
643801msgid "Service Terms"
644−msgstr ""
802+msgstr "Términos del serviciu"
645803
646804#: qml/Wizard/Pages/passcode-confirm.qml:43
647−#: qml/Wizard/Pages/passcode-desktop.qml:80
805+#: qml/Wizard/Pages/passcode-desktop.qml:97
648806msgid "Confirm passcode"
649807msgstr "Confirmar códigu de pasu"
650808
651809#: qml/Wizard/Pages/passcode-confirm.qml:45
652810msgid "Incorrect passcode."
653−msgstr ""
811+msgstr "Códigu de pasu incorreutu."
654812
655813#: qml/Wizard/Pages/passcode-confirm.qml:45
656814msgctxt "Enter the passcode again"
657815msgid "Please re-enter."
658−msgstr ""
816+msgstr "Vuelve a escribilu."
659817
660−#: qml/Wizard/Pages/passcode-desktop.qml:30
818+#: qml/Wizard/Pages/passcode-desktop.qml:31
661819msgid "Lock Screen Passcode"
662−msgstr ""
820+msgstr "Códigu de pasu de bloquéu de pantalla"
663821
664−#: qml/Wizard/Pages/passcode-desktop.qml:56
822+#: qml/Wizard/Pages/passcode-desktop.qml:61
665823msgid "Enter 4 numbers to setup your passcode"
666−msgstr ""
824+msgstr "Escribi 4 númberos pa configurar el códigu de pasu"
667825
668−#: qml/Wizard/Pages/passcode-desktop.qml:65
826+#: qml/Wizard/Pages/passcode-desktop.qml:77
669827#: qml/Wizard/Pages/passcode-set.qml:54
670828msgid "Choose passcode"
671−msgstr ""
829+msgstr "Escueyi'l códigu de pasu"
672830
673−#: qml/Wizard/Pages/passcode-desktop.qml:105
831+#: qml/Wizard/Pages/passcode-desktop.qml:127
674832msgid "Passcode too short"
675−msgstr ""
833+msgstr "Códigu de pasu curtiu enforma"
676834
677−#: qml/Wizard/Pages/passcode-desktop.qml:107
835+#: qml/Wizard/Pages/passcode-desktop.qml:129
678836msgid "Passcodes match"
679−msgstr ""
837+msgstr "Los códigos de pasu casen"
680838
681−#: qml/Wizard/Pages/passcode-desktop.qml:109
839+#: qml/Wizard/Pages/passcode-desktop.qml:131
682840msgid "Passcodes do not match"
683−msgstr ""
841+msgstr "Los códigos de pasu nun casen"
684842
685843#: qml/Wizard/Pages/passcode-set.qml:62
686844msgid "Passcode must be 4 characters long"
687−msgstr ""
845+msgstr "El códigu de pasu tien de tener 4 caráuteres de llargo"
688846
689−#: qml/Wizard/Pages/password-set.qml:30
847+#: qml/Wizard/Pages/password-set.qml:31
690848msgid "Lock Screen Password"
691−msgstr ""
849+msgstr "Contraseña del Bloquéu de pantalla"
692850
693−#: qml/Wizard/Pages/password-set.qml:61
851+#: qml/Wizard/Pages/password-set.qml:62
694852msgid "Enter at least 8 characters"
695−msgstr ""
853+msgstr "Escribe polo menos 8 caráuteres"
696854
697−#: qml/Wizard/Pages/password-set.qml:73
855+#: qml/Wizard/Pages/password-set.qml:74
698856msgid "Choose password"
699−msgstr ""
857+msgstr "Escueye la contraseña"
700858
701−#: qml/Wizard/Pages/password-set.qml:103
859+#: qml/Wizard/Pages/password-set.qml:104
702860msgid "Confirm password"
703861msgstr "Confirmar contraseña"
704862
705863#: qml/Wizard/Pages/sim.qml:27
706864msgid "No SIM card installed"
707−msgstr ""
865+msgstr "Nun ta instalada nenguna tarxeta SIM"
708866
709867#: qml/Wizard/Pages/sim.qml:54
710868msgid "SIM card added"
711−msgstr ""
869+msgstr "Amestóse tarxeta SIM"
712870
713871#: qml/Wizard/Pages/sim.qml:55
714872msgid "You must restart the device to access the mobile network."
715−msgstr ""
873+msgstr "Tienes de reaniciar el preséu pa tener accesu a la rede móvil."
716874
717875#: qml/Wizard/Pages/sim.qml:59
718876msgid "Restart"
@@ -720,33 +878,37 @@ msgstr "Reaniciar"
720878
721879#: qml/Wizard/Pages/sim.qml:78
722880msgid "You won’t be able to make calls or use text messaging without a SIM."
723−msgstr ""
881+msgstr "Nun podrás facer llamaes nin usar mensaxería de testu sin una SIM."
724882
725883#: qml/Wizard/Pages/sim.qml:90
726884msgid "To proceed with no SIM tap Skip."
727−msgstr ""
885+msgstr "Pa siguir ensin SIM toca Saltar."
728886
729887#: qml/Wizard/PasswordMeter.qml:87
730−msgid "Passwords match"
731−msgstr ""
888+msgid "Password too short"
889+msgstr "Contraseña curtia enforma"
732890
733891#: qml/Wizard/PasswordMeter.qml:89
892+msgid "Passwords match"
893+msgstr "Les contraseñes concasen"
894+
895+#: qml/Wizard/PasswordMeter.qml:91
734896msgid "Passwords do not match"
735−msgstr ""
897+msgstr "Les contraseñes nun concasen"
736898
737−#: qml/Wizard/PasswordMeter.qml:93
899+#: qml/Wizard/PasswordMeter.qml:95
738900msgid "Strong password"
739901msgstr "Contraseña fuerte"
740902
741−#: qml/Wizard/PasswordMeter.qml:95
903+#: qml/Wizard/PasswordMeter.qml:97
742904msgid "Fair password"
743905msgstr "Contraseña aceutable"
744906
745−#: qml/Wizard/PasswordMeter.qml:97
907+#: qml/Wizard/PasswordMeter.qml:99
746908msgid "Weak password"
747909msgstr "Contraseña feble"
748910
749−#: qml/Wizard/PasswordMeter.qml:99
911+#: qml/Wizard/PasswordMeter.qml:101
750912msgid "Very weak password"
751913msgstr "Contraseña feble enforma"
752914
@@ -846,9 +1008,19 @@ msgstr "Contraseña feble enforma"
8461008#~ msgid "Store"
8471009#~ msgstr "Tienda"
8481010
1011+#, qt-format
1012+#~ msgid "Sorry, incorrect %1"
1013+#~ msgstr "Sentímoslo, %1 incorreutu"
1014+
1015+#~ msgid "Sorry, incorrect passphrase"
1016+#~ msgstr "Sentímoslo, contraseña incorreuta"
1017+
8491018#~ msgid "Roaming"
8501019#~ msgstr "Roaming"
8511020
1021+#~ msgid "Sorry, incorrect passcode"
1022+#~ msgstr "Sentímoslo, códigu de pasu incorreutu"
1023+
8521024#~ msgid "Manage Scopes"
8531025#~ msgstr "Xestionar ámbitos"
8541026
@@ -914,6 +1086,9 @@ msgstr "Contraseña feble enforma"
9141086#~ msgid "Reboot"
9151087#~ msgstr "Reaniciar"
9161088
1089+#~ msgid "Tap to unlock"
1090+#~ msgstr "Calca pa desbloquiar"
1091+
9171092#~ msgid "These are the shortcuts to favorite apps"
9181093#~ msgstr "Estos son los atayos a les aplicaciones favorites"
9191094
@@ -931,9 +1106,42 @@ msgstr "Contraseña feble enforma"
9311106#~ msgid "Shut down"
9321107#~ msgstr "Apagáu"
9331108
1109+#~ msgid "Sorry, incorrect passphrase."
1110+#~ msgstr "Perdón, fras de pasu incorreuta"
1111+
1112+#, qt-format
1113+#~ msgid "Enter %1"
1114+#~ msgstr "Introduz %1"
1115+
1116+#~ msgid "Sorry, incorrect passcode."
1117+#~ msgstr "Perdón, códigu de pasu incorreutu."
1118+
1119+#~ msgid "Enter passcode"
1120+#~ msgstr "Introduz el códigu de pasu"
1121+
1122+#~ msgid "Enter passphrase"
1123+#~ msgstr "Introduz la fras de pasu"
1124+
9341125#~ msgid "Please re-enter"
9351126#~ msgstr "Por favor, reintroduzla"
9361127
1128+#~ msgid ""
1129+#~ "If passcode is entered incorrectly, your phone will conduct a factory reset "
1130+#~ "and all personal data will be deleted."
1131+#~ msgstr ""
1132+#~ "Si s'inxerta'l códigu de pasu incorreutamente, el to teléfonu va reafitase y "
1133+#~ "van desaniciase tolos datos personales."
1134+
1135+#~ msgid ""
1136+#~ "If passphrase is entered incorrectly, your phone will conduct a factory "
1137+#~ "reset and all personal data will be deleted."
1138+#~ msgstr ""
1139+#~ "Si s'inxerta la fras de pasu incorreutamente, el to teléfonu va reafitase y "
1140+#~ "van desaniciase tolos datos personales."
1141+
1142+#~ msgid "This will be your last attempt."
1143+#~ msgstr "Esti sedra'l to caberu intentu"
1144+
9371145#~ msgid "This action does different things for different apps"
9381146#~ msgstr "Esta aición fai coses distintes p'aplicaciones estremaes"
9391147
@@ -1065,8 +1273,41 @@ msgstr "Contraseña feble enforma"
10651273#~ msgid "Tomorrow %l:%M %p"
10661274#~ msgstr "Mañana %l:%M %p"
10671275
1276+#~ msgctxt "passphrase"
1277+#~ msgid "Please re-enter"
1278+#~ msgstr "Vuelve a escribila"
1279+
10681280#~ msgid "%a %d %b %H:%M"
10691281#~ msgstr "%a %b %d %H:%M"
10701282
10711283#~ msgid "Call back"
10721284#~ msgstr "Devolver llamada"
1285+
1286+#~ msgid "Swipe up for recent calls"
1287+#~ msgstr "Eslizar pa llamaes recién"
1288+
1289+#~ msgid "Swipe up for favorite calculations"
1290+#~ msgstr "Eslizar pa los cálculos favoritos"
1291+
1292+#~ msgid "Swipe up to add a contact"
1293+#~ msgstr "Eslizar p'amestar un contactu"
1294+
1295+#~ msgid "Swipe from the left edge to open the launcher"
1296+#~ msgstr "Eslizar dende'l berbesu izquierdu p'abrir el llanzador"
1297+
1298+#~ msgid "Swipe from the top right edge to open the notification bar"
1299+#~ msgstr ""
1300+#~ "Esliza dende'l berbesu superior drechu p'abrir la barra de notificaciones"
1301+
1302+#~ msgid "Swipe from the top edge to open the notification bar"
1303+#~ msgstr "Esliza dende'l berbesu superior p'abrir la barra de notificaciones"
1304+
1305+#~ msgid "Short or long swipe from the right edge to view your open apps"
1306+#~ msgstr ""
1307+#~ "Eslizamientu curtiu o llargu dende'l berbesu drechu pa ver les apps abiertes"
1308+
1309+#~ msgid "Swipe up to manage the app"
1310+#~ msgstr "Eslizar p'alministrar la app"
1311+
1312+#~ msgid "Swipe up to create a message"
1313+#~ msgstr "Eslizar pa crear un mensaxe"
po/az.po+382−197
@@ -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-27 13:54+0000\n"
10+"POT-Creation-Date: 2016-11-16 10:44+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,120 +15,272 @@ 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-06-02 06:20+0000\n"
19−"X-Generator: Launchpad (build 18053)\n"
18+"X-Launchpad-Export-Date: 2016-11-23 06:34+0000\n"
19+"X-Generator: Launchpad (build 18269)\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
39−msgid "Device Locked"
40−msgstr ""
41−
42−#: qml/Components/DelayedLockscreen.qml:64
43−msgid "You have been locked out due to too many failed passphrase attempts."
44−msgstr ""
45−
46−#: qml/Components/DelayedLockscreen.qml:65
47−msgid "You have been locked out due to too many failed passcode attempts."
48−msgstr ""
49−
50−#: qml/Components/DelayedLockscreen.qml:74
51−#, qt-format
52−msgid "Please wait %1 minute and then try again…"
53−msgid_plural "Please wait %1 minutes and then try again…"
54−msgstr[0] ""
55−msgstr[1] ""
56−
57−#: qml/Components/Dialogs.qml:144
38+#: qml/Components/Dialogs.qml:149
5839msgctxt "Title: Lock/Log out dialog"
5940msgid "Log out"
6041msgstr ""
6142
62−#: qml/Components/Dialogs.qml:145
43+#: qml/Components/Dialogs.qml:150
6344msgid "Are you sure you want to log out?"
6445msgstr "Çıxmaq istәdiyinizdәn әminsiniz?"
6546
66−#: qml/Components/Dialogs.qml:147
47+#: qml/Components/Dialogs.qml:152
6748msgctxt "Button: Lock the system"
6849msgid "Lock"
6950msgstr ""
7051
71−#: qml/Components/Dialogs.qml:154
52+#: qml/Components/Dialogs.qml:159
7253msgctxt "Button: Log out from the system"
7354msgid "Log Out"
7455msgstr ""
7556
76−#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
77−#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
57+#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
58+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
59+#: qml/Wizard/Pages/passcode-confirm.qml:32
7860#: qml/Wizard/Pages/passcode-set.qml:32
7961msgid "Cancel"
8062msgstr "İmtina"
8163
82−#: qml/Components/Dialogs.qml:173
64+#: qml/Components/Dialogs.qml:178
8365msgctxt "Title: Reboot dialog"
8466msgid "Reboot"
8567msgstr ""
8668
87−#: qml/Components/Dialogs.qml:174
69+#: qml/Components/Dialogs.qml:179
8870msgid "Are you sure you want to reboot?"
8971msgstr "Yenidәn başlatmaq istәdiyinizә әminsiniz?"
9072
91−#: qml/Components/Dialogs.qml:176
73+#: qml/Components/Dialogs.qml:181
9274msgid "No"
9375msgstr "Yox"
9476
95−#: qml/Components/Dialogs.qml:182
77+#: qml/Components/Dialogs.qml:187
9678msgid "Yes"
9779msgstr "Hə"
9880
99−#: qml/Components/Dialogs.qml:197
81+#: qml/Components/Dialogs.qml:202
10082msgctxt "Title: Power off/Restart dialog"
10183msgid "Power"
10284msgstr ""
10385
104−#: qml/Components/Dialogs.qml:198
86+#: qml/Components/Dialogs.qml:203
10587msgid ""
10688"Are you sure you would like\n"
10789"to power off?"
10890msgstr ""
10991
110−#: qml/Components/Dialogs.qml:200
92+#: qml/Components/Dialogs.qml:205
11193msgctxt "Button: Power off the system"
11294msgid "Power off"
11395msgstr ""
11496
115−#: qml/Components/Dialogs.qml:209
97+#: qml/Components/Dialogs.qml:214
11698msgctxt "Button: Restart the system"
11799msgid "Restart"
118100msgstr ""
119101
120−#: qml/Components/Lockscreen.qml:231
102+#: qml/Components/KeyboardShortcutsOverlay.qml:41
103+msgid "Keyboard Shortcuts"
104+msgstr ""
105+
106+#: qml/Components/KeyboardShortcutsOverlay.qml:55
107+msgid "Unity 8"
108+msgstr ""
109+
110+#: qml/Components/KeyboardShortcutsOverlay.qml:62
111+msgid "PrtScr"
112+msgstr ""
113+
114+#: qml/Components/KeyboardShortcutsOverlay.qml:67
115+msgid "Takes a screenshot."
116+msgstr ""
117+
118+#: qml/Components/KeyboardShortcutsOverlay.qml:75
119+msgid "Alt + PrtScr"
120+msgstr ""
121+
122+#: qml/Components/KeyboardShortcutsOverlay.qml:80
123+msgid "Takes a screenshot of a window."
124+msgstr ""
125+
126+#: qml/Components/KeyboardShortcutsOverlay.qml:88
127+msgid "Super + Space"
128+msgstr ""
129+
130+#: qml/Components/KeyboardShortcutsOverlay.qml:93
131+msgid "Switches to next keyboard layout."
132+msgstr ""
133+
134+#: qml/Components/KeyboardShortcutsOverlay.qml:101
135+msgid "Super + Shift + Space"
136+msgstr ""
137+
138+#: qml/Components/KeyboardShortcutsOverlay.qml:106
139+msgid "Switches to previous keyboard layout."
140+msgstr ""
141+
142+#: qml/Components/KeyboardShortcutsOverlay.qml:118
143+msgid "Launcher"
144+msgstr ""
145+
146+#: qml/Components/KeyboardShortcutsOverlay.qml:125
147+msgid "Super (Hold)"
148+msgstr ""
149+
150+#: qml/Components/KeyboardShortcutsOverlay.qml:130
151+msgid "Opens the launcher, displays shortcuts."
152+msgstr ""
153+
154+#: qml/Components/KeyboardShortcutsOverlay.qml:138
155+msgid "Alt + F1"
156+msgstr ""
157+
158+#: qml/Components/KeyboardShortcutsOverlay.qml:143
159+msgid "Opens launcher keyboard navigation mode."
160+msgstr ""
161+
162+#: qml/Components/KeyboardShortcutsOverlay.qml:151
163+msgid "Super + Tab"
164+msgstr ""
165+
166+#: qml/Components/KeyboardShortcutsOverlay.qml:156
167+msgid "Switches applications via the launcher."
168+msgstr ""
169+
170+#: qml/Components/KeyboardShortcutsOverlay.qml:164
171+msgid "Super + 0 to 9"
172+msgstr ""
173+
174+#: qml/Components/KeyboardShortcutsOverlay.qml:169
175+msgid "Same as clicking on a launcher icon."
176+msgstr ""
177+
178+#: qml/Components/KeyboardShortcutsOverlay.qml:181
179+msgid "Scopes"
180+msgstr ""
181+
182+#: qml/Components/KeyboardShortcutsOverlay.qml:188
183+msgid "Super (Tap)"
184+msgstr ""
185+
186+#: qml/Components/KeyboardShortcutsOverlay.qml:193
187+msgid "Opens the Scopes home."
188+msgstr ""
189+
190+#: qml/Components/KeyboardShortcutsOverlay.qml:209
191+msgid "Switching"
192+msgstr ""
193+
194+#: qml/Components/KeyboardShortcutsOverlay.qml:216
195+msgid "Alt + Tab"
196+msgstr ""
197+
198+#: qml/Components/KeyboardShortcutsOverlay.qml:221
199+msgid "Switches between applications."
200+msgstr ""
201+
202+#: qml/Components/KeyboardShortcutsOverlay.qml:229
203+msgid "Super + W"
204+msgstr ""
205+
206+#: qml/Components/KeyboardShortcutsOverlay.qml:234
207+msgid "Opens the desktop spread."
208+msgstr ""
209+
210+#: qml/Components/KeyboardShortcutsOverlay.qml:242
211+msgid "Cursor Left or Right"
212+msgstr ""
213+
214+#: qml/Components/KeyboardShortcutsOverlay.qml:247
215+msgid "Moves the focus."
216+msgstr ""
217+
218+#: qml/Components/KeyboardShortcutsOverlay.qml:259
219+msgid "Windows"
220+msgstr ""
221+
222+#: qml/Components/KeyboardShortcutsOverlay.qml:266
223+msgid "Ctrl + Super + D"
224+msgstr ""
225+
226+#: qml/Components/KeyboardShortcutsOverlay.qml:271
227+msgid "Minimizes all windows."
228+msgstr ""
229+
230+#: qml/Components/KeyboardShortcutsOverlay.qml:279
231+msgid "Ctrl + Super + Up"
232+msgstr ""
233+
234+#: qml/Components/KeyboardShortcutsOverlay.qml:284
235+msgid "Maximizes the current window."
236+msgstr ""
237+
238+#: qml/Components/KeyboardShortcutsOverlay.qml:292
239+msgid "Ctrl + Super + Down"
240+msgstr ""
241+
242+#: qml/Components/KeyboardShortcutsOverlay.qml:297
243+msgid "Minimizes or restores the current window."
244+msgstr ""
245+
246+#: qml/Components/KeyboardShortcutsOverlay.qml:305
247+msgid "Ctrl + Super + Left or Right"
248+msgstr ""
249+
250+#: qml/Components/KeyboardShortcutsOverlay.qml:310
251+msgid "Semi-maximizes the current window."
252+msgstr ""
253+
254+#: qml/Components/KeyboardShortcutsOverlay.qml:318
255+msgid "Alt + F4"
256+msgstr ""
257+
258+#: qml/Components/KeyboardShortcutsOverlay.qml:323
259+msgid "Closes the current window."
260+msgstr ""
261+
262+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
121263msgid "Return to Call"
122264msgstr ""
123265
124−#: qml/Components/Lockscreen.qml:231
266+#: qml/Components/Lockscreen.qml:212
125267msgid "Emergency Call"
126268msgstr "Zərurət zəngi"
127269
128−#: qml/Components/Lockscreen.qml:263
270+#: qml/Components/Lockscreen.qml:244
129271msgid "OK"
130272msgstr "Oldu"
131273
274+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
275+#, qt-format
276+msgid "%1:%2:%3"
277+msgstr ""
278+
279+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
280+#, qt-format
281+msgid "%1:%2"
282+msgstr ""
283+
132284#: qml/Components/ModeSwitchWarningDialog.qml:32
133285msgid "Apps may have unsaved data:"
134286msgstr ""
@@ -155,88 +307,88 @@ msgstr ""
155307msgid "Close all"
156308msgstr ""
157309
158−#: qml/Dash/DashPageHeader.qml:333
310+#: qml/Components/SharingPicker.qml:54
311+msgid "Preview Share Item"
312+msgstr ""
313+
314+#: qml/Dash/DashPageHeader.qml:361
159315msgctxt "Button: Open the Ubuntu Store"
160316msgid "Store"
161317msgstr ""
162318
163−#: qml/Dash/DashPageHeader.qml:340
319+#: qml/Dash/DashPageHeader.qml:368
164320msgctxt "Button: Start a search in the current dash scope"
165321msgid "Search"
166322msgstr ""
167323
168−#: qml/Dash/DashPageHeader.qml:350
324+#: qml/Dash/DashPageHeader.qml:378
169325msgctxt "Button: Show the current dash scope settings"
170326msgid "Settings"
171327msgstr ""
172328
173−#: qml/Dash/DashPageHeader.qml:357
329+#: qml/Dash/DashPageHeader.qml:385
174330msgid "Remove from Favorites"
175331msgstr "Seçilmişlәrdәn çıxart"
176332
177−#: qml/Dash/DashPageHeader.qml:357
333+#: qml/Dash/DashPageHeader.qml:385
178334msgid "Add to Favorites"
179335msgstr "Seçilmişlәrә әlavә et"
180336
181−#: qml/Dash/FiltersPopover.qml:60
337+#: qml/Dash/FiltersPopover.qml:61
182338msgid "Refine your results"
183339msgstr ""
184340
185−#: qml/Dash/FiltersPopover.qml:69
341+#: qml/Dash/FiltersPopover.qml:70
186342msgid "Reset"
187343msgstr ""
188344
189−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:774
345+#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
190346msgid "Show less"
191347msgstr ""
192348
193−#: qml/Dash/GenericScopeView.qml:579
349+#: qml/Dash/GenericScopeView.qml:545
194350msgid "Show all"
195351msgstr ""
196352
197−#: qml/Dash/GenericScopeView.qml:636
353+#: qml/Dash/GenericScopeView.qml:576
198354msgctxt "Label: Hint for dash search line edit"
199355msgid "Search"
200356msgstr ""
201357
202−#: qml/Dash/PageHeaderExtraPanel.qml:56
358+#: qml/Dash/PageHeaderExtraPanel.qml:57
203359msgid "Recent Searches"
204360msgstr ""
205361
206−#: qml/Dash/PageHeaderExtraPanel.qml:67
362+#: qml/Dash/PageHeaderExtraPanel.qml:68
207363msgid "Clear All"
208364msgstr ""
209365
210−#: qml/Dash/Previews/PreviewActionCombo.qml:35
366+#: qml/Dash/Previews/PreviewActionCombo.qml:36
211367msgid "More..."
212368msgstr "Daha çox..."
213369
214−#: qml/Dash/Previews/PreviewActionCombo.qml:35
370+#: qml/Dash/Previews/PreviewActionCombo.qml:36
215371msgid "Less..."
216372msgstr "Az..."
217373
218−#: qml/Dash/Previews/PreviewCommentInput.qml:68
219−#: qml/Dash/Previews/PreviewRatingInput.qml:175
374+#: qml/Dash/Previews/PreviewCommentInput.qml:83
375+#: qml/Dash/Previews/PreviewRatingInput.qml:202
220376msgid "Send"
221377msgstr "Göndər"
222378
223−#: qml/Dash/Previews/PreviewRatingInput.qml:82
379+#: qml/Dash/Previews/PreviewRatingInput.qml:109
224380msgid "Rate this"
225381msgstr "Qiymәtlәndir"
226382
227−#: qml/Dash/Previews/PreviewRatingInput.qml:157
383+#: qml/Dash/Previews/PreviewRatingInput.qml:184
228384msgid "Add a review"
229385msgstr "Rəy yaz"
230386
231−#: qml/Dash/Previews/PreviewSharing.qml:66
232−msgid "Preview Share Item"
233−msgstr ""
234−
235−#: qml/Dash/PullToRefreshScopeStyle.qml:55
387+#: qml/Dash/PullToRefreshScopeStyle.qml:56
236388msgid "Pull to refresh…"
237389msgstr ""
238390
239−#: qml/Dash/PullToRefreshScopeStyle.qml:60
391+#: qml/Dash/PullToRefreshScopeStyle.qml:61
240392msgid "Release to refresh…"
241393msgstr ""
242394
@@ -244,15 +396,15 @@ msgstr ""
244396msgid "Enable location data"
245397msgstr ""
246398
247−#: qml/Dash/ScopesList.qml:55
399+#: qml/Dash/ScopesList.qml:57
248400msgid "Manage"
249401msgstr ""
250402
251−#: qml/Dash/ScopesList.qml:101
403+#: qml/Dash/ScopesList.qml:104
252404msgid "Home"
253405msgstr ""
254406
255−#: qml/Dash/ScopesList.qml:102
407+#: qml/Dash/ScopesList.qml:105
256408msgid "Also installed"
257409msgstr ""
258410
@@ -262,75 +414,55 @@ msgid ""
262414"touch pad to interact with the pointer."
263415msgstr ""
264416
265−#: qml/Greeter/CoverPage.qml:118
417+#: qml/Greeter/CoverPage.qml:127
266418msgid "Unlock"
267419msgstr ""
268420
269−#: qml/Greeter/LoginList.qml:239
270−msgid "Retry"
421+#: qml/Greeter/DelayedLockscreen.qml:43
422+msgid "Device Locked"
271423msgstr ""
272424
273−#: qml/Greeter/LoginList.qml:240
274−msgid "Tap to unlock"
425+#: qml/Greeter/DelayedLockscreen.qml:58
426+msgid "You have been locked out due to too many failed passphrase attempts."
275427msgstr ""
276428
277−#: qml/Greeter/NarrowView.qml:54
278−msgid "Sorry, incorrect passphrase."
279−msgstr "Bağışlayın, açar söz yanlışdır."
280−
281−#: qml/Greeter/NarrowView.qml:55
282−msgid "Sorry, incorrect passcode."
283−msgstr "Təəssüf ki, açar kod yanlışdır."
429+#: qml/Greeter/DelayedLockscreen.qml:59
430+msgid "You have been locked out due to too many failed passcode attempts."
431+msgstr ""
284432
285−#: qml/Greeter/NarrowView.qml:56
286−msgid "This will be your last attempt."
287−msgstr "Bu sizin son cəhdiniz olacaq."
433+#: qml/Greeter/DelayedLockscreen.qml:68
434+#, qt-format
435+msgid "Please wait %1 minute and then try again…"
436+msgid_plural "Please wait %1 minutes and then try again…"
437+msgstr[0] ""
438+msgstr[1] ""
288439
289−#: qml/Greeter/NarrowView.qml:58
290−msgid ""
291−"If passphrase is entered incorrectly, your phone will conduct a factory "
292−"reset and all personal data will be deleted."
440+#: qml/Greeter/Greeter.qml:596
441+msgid "Try again"
293442msgstr ""
294−"Əgər açar söz yanlış daxil edilibsə, onda telefonunuz fabrika parametrlərinə "
295−"geri qayıdacaq və bütün şəxsi məlumatlarınız silinəcək."
296443
297−#: qml/Greeter/NarrowView.qml:59
298−msgid ""
299−"If passcode is entered incorrectly, your phone will conduct a factory reset "
300−"and all personal data will be deleted."
444+#: qml/Greeter/LoginList.qml:70
445+msgid "Passphrase"
301446msgstr ""
302−"Əgər açar kod yanlış daxil edilibsə, onda telefonunuz fabrika parametrlərinə "
303−"geri qayıdacaq və bütün şəxsi məlumatlarınız silinəcək."
304447
305−#: qml/Greeter/NarrowView.qml:116
306−#, qt-format
307−msgid "Enter %1"
448+#: qml/Greeter/LoginList.qml:71
449+msgid "Passcode"
308450msgstr ""
309451
310−#: qml/Greeter/NarrowView.qml:117
311−msgid "Enter passphrase"
452+#: qml/Greeter/LoginList.qml:98
453+msgid "Retry"
312454msgstr ""
313455
314−#: qml/Greeter/NarrowView.qml:118
315−msgid "Enter passcode"
456+#: qml/Greeter/LoginList.qml:99
457+msgid "Log In"
316458msgstr ""
317459
318−#: qml/Greeter/NarrowView.qml:119
319−#, qt-format
320−msgid "Sorry, incorrect %1"
321−msgstr "Bağışlayın, %1 yanlışdır"
322−
323−#: qml/Greeter/NarrowView.qml:120
324−msgid "Sorry, incorrect passphrase"
325−msgstr "Bağışlayın, açar söz yanlışdır"
326−
327−#: qml/Greeter/NarrowView.qml:121
328−msgctxt "passphrase"
329−msgid "Please re-enter"
460+#: qml/Greeter/NarrowView.qml:252
461+msgid "Emergency"
330462msgstr ""
331463
332−#: qml/Greeter/NarrowView.qml:122
333−msgid "Sorry, incorrect passcode"
464+#: qml/Greeter/SessionsList.qml:122
465+msgid "Select desktop environment"
334466msgstr ""
335467
336468#: qml/Notifications/NotificationMenuItemFactory.qml:124
@@ -345,62 +477,62 @@ msgstr "Zəngə qayıtmaq üçün toxunun..."
345477msgid "Conference"
346478msgstr "Konfrans"
347479
348−#: qml/Panel/Indicators/MenuItemFactory.qml:762
480+#: qml/Panel/Indicators/MenuItemFactory.qml:847
349481msgid "Nothing is playing"
350482msgstr ""
351483
352−#: qml/Panel/Indicators/MenuItemFactory.qml:891
484+#: qml/Panel/Indicators/MenuItemFactory.qml:975
353485#, qt-format
354486msgid "%1 hour"
355487msgid_plural "%1 hours"
356488msgstr[0] ""
357489msgstr[1] ""
358490
359−#: qml/Panel/Indicators/MenuItemFactory.qml:895
491+#: qml/Panel/Indicators/MenuItemFactory.qml:979
360492#, qt-format
361493msgid "%1 minute"
362494msgid_plural "%1 minutes"
363495msgstr[0] ""
364496msgstr[1] ""
365497
366−#: qml/Panel/Indicators/MenuItemFactory.qml:900
498+#: qml/Panel/Indicators/MenuItemFactory.qml:984
367499#, qt-format
368500msgid "%1 second"
369501msgid_plural "%1 seconds"
370502msgstr[0] ""
371503msgstr[1] ""
372504
373−#: qml/Panel/Indicators/MenuItemFactory.qml:903
505+#: qml/Panel/Indicators/MenuItemFactory.qml:987
374506msgid "0 seconds"
375507msgstr ""
376508
377509#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
378−#: qml/Panel/Indicators/MenuItemFactory.qml:905
510+#: qml/Panel/Indicators/MenuItemFactory.qml:989
379511#, qt-format
380512msgid "%1 remaining"
381513msgstr ""
382514
383−#: qml/Panel/Indicators/MenuItemFactory.qml:911
515+#: qml/Panel/Indicators/MenuItemFactory.qml:995
384516msgid "In queue…"
385517msgstr "Növbədədir..."
386518
387−#: qml/Panel/Indicators/MenuItemFactory.qml:915
519+#: qml/Panel/Indicators/MenuItemFactory.qml:999
388520msgid "Downloading"
389521msgstr "Endirilir"
390522
391−#: qml/Panel/Indicators/MenuItemFactory.qml:917
523+#: qml/Panel/Indicators/MenuItemFactory.qml:1001
392524msgid "Paused, tap to resume"
393525msgstr "Dayandırıldı. Davam etmək üçün toxunun"
394526
395−#: qml/Panel/Indicators/MenuItemFactory.qml:919
527+#: qml/Panel/Indicators/MenuItemFactory.qml:1003
396528msgid "Canceled"
397529msgstr "İmtina edildi"
398530
399−#: qml/Panel/Indicators/MenuItemFactory.qml:921
531+#: qml/Panel/Indicators/MenuItemFactory.qml:1005
400532msgid "Finished"
401533msgstr "Bitdi"
402534
403−#: qml/Panel/Indicators/MenuItemFactory.qml:923
535+#: qml/Panel/Indicators/MenuItemFactory.qml:1007
404536msgid "Failed, tap to retry"
405537msgstr "Alınmadı. Yenidәn cәhd etmək üçün toxunun"
406538
@@ -420,36 +552,16 @@ msgctxt "Button: Call back on phone"
420552msgid "Call back"
421553msgstr ""
422554
423−#: qml/Stages/SideStage.qml:76
555+#: qml/Stage/SideStage.qml:76
424556msgid "Drag using 3 fingers any application from one window to the other"
425557msgstr ""
426558
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
559+#: qml/Tutorial/TutorialLeftLong.qml:49
448560msgid "Long swipe from the left edge to open the Today scope"
449561msgstr ""
450562
451563#: qml/Tutorial/TutorialLeft.qml:47
452−msgid "Swipe from the left edge to open the launcher"
564+msgid "Short swipe from the left edge to open the launcher"
453565msgstr ""
454566
455567#: qml/Tutorial/TutorialRight.qml:55
@@ -457,15 +569,11 @@ msgid "Push your mouse against the right edge to view your open apps"
457569msgstr ""
458570
459571#: qml/Tutorial/TutorialRight.qml:56
460−msgid "Short or long swipe from the right edge to view your open apps"
572+msgid "Swipe from the right edge to view your open apps"
461573msgstr ""
462574
463575#: 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"
576+msgid "Swipe from the top edge to access notifications and quick settings"
469577msgstr ""
470578
471579#: qml/Wizard/Page.qml:54
@@ -473,40 +581,54 @@ msgctxt "Button: Go back one page in the Wizard"
473581msgid "Back"
474582msgstr ""
475583
476−#: qml/Wizard/Pages/10-welcome.qml:27
584+#: qml/Wizard/Pages/10-welcome.qml:28
477585msgid "Language"
478586msgstr ""
479587
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:270
482−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
588+#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
589+#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
590+#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
591+#: qml/Wizard/Pages/70-passwd-type.qml:145
483592#: qml/Wizard/Pages/75-report-check.qml:84
484−#: qml/Wizard/Pages/passcode-desktop.qml:124
485−#: qml/Wizard/Pages/password-set.qml:141
593+#: qml/Wizard/Pages/passcode-desktop.qml:142
594+#: qml/Wizard/Pages/password-set.qml:142
486595msgid "Next"
487596msgstr ""
488597
489−#: qml/Wizard/Pages/30-wifi.qml:29
598+#: qml/Wizard/Pages/20-keyboard.qml:31
599+msgid "Select Keyboard"
600+msgstr ""
601+
602+#: qml/Wizard/Pages/20-keyboard.qml:71
603+msgid "Keyboard language"
604+msgstr ""
605+
606+#: qml/Wizard/Pages/20-keyboard.qml:93
607+msgid "Keyboard layout"
608+msgstr ""
609+
610+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
611+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
612+#: qml/Wizard/Pages/sim.qml:101
613+msgid "Skip"
614+msgstr ""
615+
616+#: qml/Wizard/Pages/30-wifi.qml:31
490617msgid "Connect to Wi‑Fi"
491618msgstr ""
492619
493−#: qml/Wizard/Pages/30-wifi.qml:130
620+#: qml/Wizard/Pages/30-wifi.qml:132
494621msgid "Connected"
495622msgstr ""
496623
497−#: qml/Wizard/Pages/30-wifi.qml:163
624+#: qml/Wizard/Pages/30-wifi.qml:165
498625msgid "Available Wi-Fi networks"
499626msgstr ""
500627
501−#: qml/Wizard/Pages/30-wifi.qml:164
628+#: qml/Wizard/Pages/30-wifi.qml:166
502629msgid "No available Wi-Fi networks"
503630msgstr ""
504631
505−#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
506−#: qml/Wizard/Pages/sim.qml:101
507−msgid "Skip"
508−msgstr ""
509−
510632#: qml/Wizard/Pages/40-location.qml:27
511633msgid "Location Services"
512634msgstr ""
@@ -539,11 +661,11 @@ msgstr ""
539661msgid "You can change it later in System Settings."
540662msgstr ""
541663
542−#: qml/Wizard/Pages/50-timezone.qml:29
664+#: qml/Wizard/Pages/50-timezone.qml:30
543665msgid "Time Zone"
544666msgstr ""
545667
546−#: qml/Wizard/Pages/50-timezone.qml:181
668+#: qml/Wizard/Pages/50-timezone.qml:182
547669msgid "Enter your city"
548670msgstr ""
549671
@@ -555,21 +677,21 @@ msgstr ""
555677msgid "Preferred Name"
556678msgstr ""
557679
558−#: qml/Wizard/Pages/70-passwd-type.qml:39
680+#: qml/Wizard/Pages/70-passwd-type.qml:40
559681msgid "Lock Screen"
560682msgstr ""
561683
562−#: qml/Wizard/Pages/70-passwd-type.qml:101
684+#: qml/Wizard/Pages/70-passwd-type.qml:102
563685msgctxt "Label: Type of security method"
564686msgid "Create new password"
565687msgstr ""
566688
567−#: qml/Wizard/Pages/70-passwd-type.qml:103
689+#: qml/Wizard/Pages/70-passwd-type.qml:104
568690msgctxt "Label: Type of security method"
569691msgid "Create passcode (numbers only)"
570692msgstr ""
571693
572−#: qml/Wizard/Pages/70-passwd-type.qml:105
694+#: qml/Wizard/Pages/70-passwd-type.qml:106
573695msgctxt "Label: Type of security method"
574696msgid "No lock code"
575697msgstr ""
@@ -590,6 +712,35 @@ msgstr ""
590712msgid "Privacy policy"
591713msgstr ""
592714
715+#: qml/Wizard/Pages/77-system-update.qml:28
716+msgid "Update Device"
717+msgstr ""
718+
719+#: qml/Wizard/Pages/77-system-update.qml:55
720+msgid ""
721+"There is a system update available and ready to install. Afterwards, the "
722+"device will automatically restart."
723+msgstr ""
724+
725+#: qml/Wizard/Pages/77-system-update.qml:76
726+msgctxt "string identifying name of the update"
727+msgid "Ubuntu system"
728+msgstr ""
729+
730+#: qml/Wizard/Pages/77-system-update.qml:83
731+#, qt-format
732+msgctxt "version of the system update"
733+msgid "Version %1"
734+msgstr ""
735+
736+#: qml/Wizard/Pages/77-system-update.qml:102
737+msgid "This could take a few minutes..."
738+msgstr ""
739+
740+#: qml/Wizard/Pages/77-system-update.qml:116
741+msgid "Install and restart now"
742+msgstr ""
743+
593744#: qml/Wizard/Pages/80-finished.qml:89
594745msgid "Welcome to Ubuntu"
595746msgstr ""
@@ -633,7 +784,7 @@ msgid "Service Terms"
633784msgstr ""
634785
635786#: qml/Wizard/Pages/passcode-confirm.qml:43
636−#: qml/Wizard/Pages/passcode-desktop.qml:80
787+#: qml/Wizard/Pages/passcode-desktop.qml:97
637788msgid "Confirm passcode"
638789msgstr ""
639790
@@ -646,28 +797,28 @@ msgctxt "Enter the passcode again"
646797msgid "Please re-enter."
647798msgstr ""
648799
649−#: qml/Wizard/Pages/passcode-desktop.qml:30
800+#: qml/Wizard/Pages/passcode-desktop.qml:31
650801msgid "Lock Screen Passcode"
651802msgstr ""
652803
653−#: qml/Wizard/Pages/passcode-desktop.qml:56
804+#: qml/Wizard/Pages/passcode-desktop.qml:61
654805msgid "Enter 4 numbers to setup your passcode"
655806msgstr ""
656807
657−#: qml/Wizard/Pages/passcode-desktop.qml:65
808+#: qml/Wizard/Pages/passcode-desktop.qml:77
658809#: qml/Wizard/Pages/passcode-set.qml:54
659810msgid "Choose passcode"
660811msgstr ""
661812
662−#: qml/Wizard/Pages/passcode-desktop.qml:105
813+#: qml/Wizard/Pages/passcode-desktop.qml:127
663814msgid "Passcode too short"
664815msgstr ""
665816
666−#: qml/Wizard/Pages/passcode-desktop.qml:107
817+#: qml/Wizard/Pages/passcode-desktop.qml:129
667818msgid "Passcodes match"
668819msgstr ""
669820
670−#: qml/Wizard/Pages/passcode-desktop.qml:109
821+#: qml/Wizard/Pages/passcode-desktop.qml:131
671822msgid "Passcodes do not match"
672823msgstr ""
673824
@@ -675,19 +826,19 @@ msgstr ""
675826msgid "Passcode must be 4 characters long"
676827msgstr ""
677828
678−#: qml/Wizard/Pages/password-set.qml:30
829+#: qml/Wizard/Pages/password-set.qml:31
679830msgid "Lock Screen Password"
680831msgstr ""
681832
682−#: qml/Wizard/Pages/password-set.qml:61
833+#: qml/Wizard/Pages/password-set.qml:62
683834msgid "Enter at least 8 characters"
684835msgstr ""
685836
686−#: qml/Wizard/Pages/password-set.qml:73
837+#: qml/Wizard/Pages/password-set.qml:74
687838msgid "Choose password"
688839msgstr ""
689840
690−#: qml/Wizard/Pages/password-set.qml:103
841+#: qml/Wizard/Pages/password-set.qml:104
691842msgid "Confirm password"
692843msgstr ""
693844
@@ -716,26 +867,30 @@ msgid "To proceed with no SIM tap Skip."
716867msgstr ""
717868
718869#: qml/Wizard/PasswordMeter.qml:87
719−msgid "Passwords match"
870+msgid "Password too short"
720871msgstr ""
721872
722873#: qml/Wizard/PasswordMeter.qml:89
874+msgid "Passwords match"
875+msgstr ""
876+
877+#: qml/Wizard/PasswordMeter.qml:91
723878msgid "Passwords do not match"
724879msgstr ""
725880
726−#: qml/Wizard/PasswordMeter.qml:93
881+#: qml/Wizard/PasswordMeter.qml:95
727882msgid "Strong password"
728883msgstr ""
729884
730−#: qml/Wizard/PasswordMeter.qml:95
885+#: qml/Wizard/PasswordMeter.qml:97
731886msgid "Fair password"
732887msgstr ""
733888
734−#: qml/Wizard/PasswordMeter.qml:97
889+#: qml/Wizard/PasswordMeter.qml:99
735890msgid "Weak password"
736891msgstr ""
737892
738−#: qml/Wizard/PasswordMeter.qml:99
893+#: qml/Wizard/PasswordMeter.qml:101
739894msgid "Very weak password"
740895msgstr ""
741896
@@ -794,6 +949,26 @@ msgstr ""
794949#~ msgid "Roaming"
795950#~ msgstr "Rominq"
796951
952+#~ msgid "Sorry, incorrect passcode."
953+#~ msgstr "Təəssüf ki, açar kod yanlışdır."
954+
955+#~ msgid "This will be your last attempt."
956+#~ msgstr "Bu sizin son cəhdiniz olacaq."
957+
958+#~ msgid ""
959+#~ "If passcode is entered incorrectly, your phone will conduct a factory reset "
960+#~ "and all personal data will be deleted."
961+#~ msgstr ""
962+#~ "Əgər açar kod yanlış daxil edilibsə, onda telefonunuz fabrika parametrlərinə "
963+#~ "geri qayıdacaq və bütün şəxsi məlumatlarınız silinəcək."
964+
965+#~ msgid ""
966+#~ "If passphrase is entered incorrectly, your phone will conduct a factory "
967+#~ "reset and all personal data will be deleted."
968+#~ msgstr ""
969+#~ "Əgər açar söz yanlış daxil edilibsə, onda telefonunuz fabrika parametrlərinə "
970+#~ "geri qayıdacaq və bütün şəxsi məlumatlarınız silinəcək."
971+
797972#~ msgid "Log out"
798973#~ msgstr "Çıxış"
799974
@@ -833,3 +1008,13 @@ msgstr ""
8331008
8341009#~ msgid "Type or say a command"
8351010#~ msgstr "Bir әmr söyləyin və ya yazın"
1011+
1012+#~ msgid "Sorry, incorrect passphrase"
1013+#~ msgstr "Bağışlayın, açar söz yanlışdır"
1014+
1015+#, qt-format
1016+#~ msgid "Sorry, incorrect %1"
1017+#~ msgstr "Bağışlayın, %1 yanlışdır"
1018+
1019+#~ msgid "Sorry, incorrect passphrase."
1020+#~ msgstr "Bağışlayın, açar söz yanlışdır."
po/be.po+413−208
@@ -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-27 13:54+0000\n"
10+"POT-Creation-Date: 2016-11-16 10:44+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,97 +16,75 @@ 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-06-02 06:20+0000\n"
20−"X-Generator: Launchpad (build 18053)\n"
19+"X-Launchpad-Export-Date: 2016-11-23 06:34+0000\n"
20+"X-Generator: Launchpad (build 18269)\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
40−msgid "Device Locked"
41−msgstr "Прылада заблакаваная"
42−
43−#: qml/Components/DelayedLockscreen.qml:64
44−msgid "You have been locked out due to too many failed passphrase attempts."
45−msgstr ""
46−"Вы былі заблакаваныя з-за занадта вялікай колькасці няўдалых спробаў."
47−
48−#: qml/Components/DelayedLockscreen.qml:65
49−msgid "You have been locked out due to too many failed passcode attempts."
50−msgstr ""
51−"Вы былі заблакаваныя з-за занадта вялікай колькасці няўдалых спробаў уводу "
52−"кода доступу."
53−
54−#: qml/Components/DelayedLockscreen.qml:74
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] "Пачакайце %1 хвіліну і паўтарыце спробу…"
59−msgstr[1] "Пачакайце %1 хвіліны і паўтарыце спробу…"
60−msgstr[2] "Пачакайце %1 хвілін і паўтарыце спробу…"
61−
62−#: qml/Components/Dialogs.qml:144
39+#: qml/Components/Dialogs.qml:149
6340msgctxt "Title: Lock/Log out dialog"
6441msgid "Log out"
6542msgstr "Выйсці"
6643
67−#: qml/Components/Dialogs.qml:145
44+#: qml/Components/Dialogs.qml:150
6845msgid "Are you sure you want to log out?"
6946msgstr "Вы ўпэўненыя, што хочаце выйсці?"
7047
71−#: qml/Components/Dialogs.qml:147
48+#: qml/Components/Dialogs.qml:152
7249msgctxt "Button: Lock the system"
7350msgid "Lock"
7451msgstr "Заблакаваць"
7552
76−#: qml/Components/Dialogs.qml:154
53+#: qml/Components/Dialogs.qml:159
7754msgctxt "Button: Log out from the system"
7855msgid "Log Out"
7956msgstr "Выйсці"
8057
81−#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
82−#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
58+#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
59+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
60+#: qml/Wizard/Pages/passcode-confirm.qml:32
8361#: qml/Wizard/Pages/passcode-set.qml:32
8462msgid "Cancel"
8563msgstr "Скасаваць"
8664
87−#: qml/Components/Dialogs.qml:173
65+#: qml/Components/Dialogs.qml:178
8866msgctxt "Title: Reboot dialog"
8967msgid "Reboot"
9068msgstr "Перазагрузіць"
9169
92−#: qml/Components/Dialogs.qml:174
70+#: qml/Components/Dialogs.qml:179
9371msgid "Are you sure you want to reboot?"
9472msgstr "Вы ўпэўнены, што жадаеце перазагрузіць?"
9573
96−#: qml/Components/Dialogs.qml:176
74+#: qml/Components/Dialogs.qml:181
9775msgid "No"
9876msgstr "Не"
9977
100−#: qml/Components/Dialogs.qml:182
78+#: qml/Components/Dialogs.qml:187
10179msgid "Yes"
10280msgstr "Так"
10381
104−#: qml/Components/Dialogs.qml:197
82+#: qml/Components/Dialogs.qml:202
10583msgctxt "Title: Power off/Restart dialog"
10684msgid "Power"
10785msgstr "Сілкаванне"
10886
109−#: qml/Components/Dialogs.qml:198
87+#: qml/Components/Dialogs.qml:203
11088msgid ""
11189"Are you sure you would like\n"
11290"to power off?"
@@ -114,28 +92,198 @@ msgstr ""
11492"Вы ўпэўнены, што хочаце\n"
11593"выключыць камп'ютэр?"
11694
117−#: qml/Components/Dialogs.qml:200
95+#: qml/Components/Dialogs.qml:205
11896msgctxt "Button: Power off the system"
11997msgid "Power off"
12098msgstr "Выключыць"
12199
122−#: qml/Components/Dialogs.qml:209
100+#: qml/Components/Dialogs.qml:214
123101msgctxt "Button: Restart the system"
124102msgid "Restart"
125103msgstr "Перазапуск"
126104
127−#: qml/Components/Lockscreen.qml:231
105+#: qml/Components/KeyboardShortcutsOverlay.qml:41
106+msgid "Keyboard Shortcuts"
107+msgstr ""
108+
109+#: qml/Components/KeyboardShortcutsOverlay.qml:55
110+msgid "Unity 8"
111+msgstr ""
112+
113+#: qml/Components/KeyboardShortcutsOverlay.qml:62
114+msgid "PrtScr"
115+msgstr ""
116+
117+#: qml/Components/KeyboardShortcutsOverlay.qml:67
118+msgid "Takes a screenshot."
119+msgstr ""
120+
121+#: qml/Components/KeyboardShortcutsOverlay.qml:75
122+msgid "Alt + PrtScr"
123+msgstr ""
124+
125+#: qml/Components/KeyboardShortcutsOverlay.qml:80
126+msgid "Takes a screenshot of a window."
127+msgstr ""
128+
129+#: qml/Components/KeyboardShortcutsOverlay.qml:88
130+msgid "Super + Space"
131+msgstr ""
132+
133+#: qml/Components/KeyboardShortcutsOverlay.qml:93
134+msgid "Switches to next keyboard layout."
135+msgstr ""
136+
137+#: qml/Components/KeyboardShortcutsOverlay.qml:101
138+msgid "Super + Shift + Space"
139+msgstr ""
140+
141+#: qml/Components/KeyboardShortcutsOverlay.qml:106
142+msgid "Switches to previous keyboard layout."
143+msgstr ""
144+
145+#: qml/Components/KeyboardShortcutsOverlay.qml:118
146+msgid "Launcher"
147+msgstr ""
148+
149+#: qml/Components/KeyboardShortcutsOverlay.qml:125
150+msgid "Super (Hold)"
151+msgstr ""
152+
153+#: qml/Components/KeyboardShortcutsOverlay.qml:130
154+msgid "Opens the launcher, displays shortcuts."
155+msgstr ""
156+
157+#: qml/Components/KeyboardShortcutsOverlay.qml:138
158+msgid "Alt + F1"
159+msgstr ""
160+
161+#: qml/Components/KeyboardShortcutsOverlay.qml:143
162+msgid "Opens launcher keyboard navigation mode."
163+msgstr ""
164+
165+#: qml/Components/KeyboardShortcutsOverlay.qml:151
166+msgid "Super + Tab"
167+msgstr ""
168+
169+#: qml/Components/KeyboardShortcutsOverlay.qml:156
170+msgid "Switches applications via the launcher."
171+msgstr ""
172+
173+#: qml/Components/KeyboardShortcutsOverlay.qml:164
174+msgid "Super + 0 to 9"
175+msgstr ""
176+
177+#: qml/Components/KeyboardShortcutsOverlay.qml:169
178+msgid "Same as clicking on a launcher icon."
179+msgstr ""
180+
181+#: qml/Components/KeyboardShortcutsOverlay.qml:181
182+msgid "Scopes"
183+msgstr ""
184+
185+#: qml/Components/KeyboardShortcutsOverlay.qml:188
186+msgid "Super (Tap)"
187+msgstr ""
188+
189+#: qml/Components/KeyboardShortcutsOverlay.qml:193
190+msgid "Opens the Scopes home."
191+msgstr ""
192+
193+#: qml/Components/KeyboardShortcutsOverlay.qml:209
194+msgid "Switching"
195+msgstr ""
196+
197+#: qml/Components/KeyboardShortcutsOverlay.qml:216
198+msgid "Alt + Tab"
199+msgstr ""
200+
201+#: qml/Components/KeyboardShortcutsOverlay.qml:221
202+msgid "Switches between applications."
203+msgstr ""
204+
205+#: qml/Components/KeyboardShortcutsOverlay.qml:229
206+msgid "Super + W"
207+msgstr ""
208+
209+#: qml/Components/KeyboardShortcutsOverlay.qml:234
210+msgid "Opens the desktop spread."
211+msgstr ""
212+
213+#: qml/Components/KeyboardShortcutsOverlay.qml:242
214+msgid "Cursor Left or Right"
215+msgstr ""
216+
217+#: qml/Components/KeyboardShortcutsOverlay.qml:247
218+msgid "Moves the focus."
219+msgstr ""
220+
221+#: qml/Components/KeyboardShortcutsOverlay.qml:259
222+msgid "Windows"
223+msgstr ""
224+
225+#: qml/Components/KeyboardShortcutsOverlay.qml:266
226+msgid "Ctrl + Super + D"
227+msgstr ""
228+
229+#: qml/Components/KeyboardShortcutsOverlay.qml:271
230+msgid "Minimizes all windows."
231+msgstr ""
232+
233+#: qml/Components/KeyboardShortcutsOverlay.qml:279
234+msgid "Ctrl + Super + Up"
235+msgstr ""
236+
237+#: qml/Components/KeyboardShortcutsOverlay.qml:284
238+msgid "Maximizes the current window."
239+msgstr ""
240+
241+#: qml/Components/KeyboardShortcutsOverlay.qml:292
242+msgid "Ctrl + Super + Down"
243+msgstr ""
244+
245+#: qml/Components/KeyboardShortcutsOverlay.qml:297
246+msgid "Minimizes or restores the current window."
247+msgstr ""
248+
249+#: qml/Components/KeyboardShortcutsOverlay.qml:305
250+msgid "Ctrl + Super + Left or Right"
251+msgstr ""
252+
253+#: qml/Components/KeyboardShortcutsOverlay.qml:310
254+msgid "Semi-maximizes the current window."
255+msgstr ""
256+
257+#: qml/Components/KeyboardShortcutsOverlay.qml:318
258+msgid "Alt + F4"
259+msgstr ""
260+
261+#: qml/Components/KeyboardShortcutsOverlay.qml:323
262+msgid "Closes the current window."
263+msgstr ""
264+
265+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
128266msgid "Return to Call"
129267msgstr "Вярнуцца да выкліку"
130268
131−#: qml/Components/Lockscreen.qml:231
269+#: qml/Components/Lockscreen.qml:212
132270msgid "Emergency Call"
133271msgstr "Терміновы выклік"
134272
135−#: qml/Components/Lockscreen.qml:263
273+#: qml/Components/Lockscreen.qml:244
136274msgid "OK"
137275msgstr "Добра"
138276
277+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
278+#, qt-format
279+msgid "%1:%2:%3"
280+msgstr ""
281+
282+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
283+#, qt-format
284+msgid "%1:%2"
285+msgstr ""
286+
139287#: qml/Components/ModeSwitchWarningDialog.qml:32
140288msgid "Apps may have unsaved data:"
141289msgstr "Прылады могуць мець незахованыя дадзеныя:"
@@ -162,88 +310,88 @@ msgstr "Перападлучыцца зараз!"
162310msgid "Close all"
163311msgstr "Зачыніць усё"
164312
165−#: qml/Dash/DashPageHeader.qml:333
313+#: qml/Components/SharingPicker.qml:54
314+msgid "Preview Share Item"
315+msgstr "Праглядзець элемент"
316+
317+#: qml/Dash/DashPageHeader.qml:361
166318msgctxt "Button: Open the Ubuntu Store"
167319msgid "Store"
168320msgstr "Крама"
169321
170−#: qml/Dash/DashPageHeader.qml:340
322+#: qml/Dash/DashPageHeader.qml:368
171323msgctxt "Button: Start a search in the current dash scope"
172324msgid "Search"
173325msgstr "Пошук"
174326
175−#: qml/Dash/DashPageHeader.qml:350
327+#: qml/Dash/DashPageHeader.qml:378
176328msgctxt "Button: Show the current dash scope settings"
177329msgid "Settings"
178330msgstr "Налады"
179331
180−#: qml/Dash/DashPageHeader.qml:357
332+#: qml/Dash/DashPageHeader.qml:385
181333msgid "Remove from Favorites"
182334msgstr "Выдаліць з абранага"
183335
184−#: qml/Dash/DashPageHeader.qml:357
336+#: qml/Dash/DashPageHeader.qml:385
185337msgid "Add to Favorites"
186338msgstr "Дадаць да абранага"
187339
188−#: qml/Dash/FiltersPopover.qml:60
340+#: qml/Dash/FiltersPopover.qml:61
189341msgid "Refine your results"
190342msgstr ""
191343
192−#: qml/Dash/FiltersPopover.qml:69
344+#: qml/Dash/FiltersPopover.qml:70
193345msgid "Reset"
194346msgstr ""
195347
196−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:774
348+#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
197349msgid "Show less"
198350msgstr ""
199351
200−#: qml/Dash/GenericScopeView.qml:579
352+#: qml/Dash/GenericScopeView.qml:545
201353msgid "Show all"
202354msgstr ""
203355
204−#: qml/Dash/GenericScopeView.qml:636
356+#: qml/Dash/GenericScopeView.qml:576
205357msgctxt "Label: Hint for dash search line edit"
206358msgid "Search"
207359msgstr "Пошук"
208360
209−#: qml/Dash/PageHeaderExtraPanel.qml:56
361+#: qml/Dash/PageHeaderExtraPanel.qml:57
210362msgid "Recent Searches"
211363msgstr ""
212364
213−#: qml/Dash/PageHeaderExtraPanel.qml:67
365+#: qml/Dash/PageHeaderExtraPanel.qml:68
214366msgid "Clear All"
215367msgstr ""
216368
217−#: qml/Dash/Previews/PreviewActionCombo.qml:35
369+#: qml/Dash/Previews/PreviewActionCombo.qml:36
218370msgid "More..."
219371msgstr "Болей…"
220372
221−#: qml/Dash/Previews/PreviewActionCombo.qml:35
373+#: qml/Dash/Previews/PreviewActionCombo.qml:36
222374msgid "Less..."
223375msgstr "Менш..."
224376
225−#: qml/Dash/Previews/PreviewCommentInput.qml:68
226−#: qml/Dash/Previews/PreviewRatingInput.qml:175
377+#: qml/Dash/Previews/PreviewCommentInput.qml:83
378+#: qml/Dash/Previews/PreviewRatingInput.qml:202
227379msgid "Send"
228380msgstr "Адправіць"
229381
230−#: qml/Dash/Previews/PreviewRatingInput.qml:82
382+#: qml/Dash/Previews/PreviewRatingInput.qml:109
231383msgid "Rate this"
232384msgstr "Ацаніць"
233385
234−#: qml/Dash/Previews/PreviewRatingInput.qml:157
386+#: qml/Dash/Previews/PreviewRatingInput.qml:184
235387msgid "Add a review"
236388msgstr "Дадаць рэцэнзію"
237389
238−#: qml/Dash/Previews/PreviewSharing.qml:66
239−msgid "Preview Share Item"
240−msgstr "Праглядзець элемент"
241−
242−#: qml/Dash/PullToRefreshScopeStyle.qml:55
390+#: qml/Dash/PullToRefreshScopeStyle.qml:56
243391msgid "Pull to refresh…"
244392msgstr "Пацягніце для абнаўлення..."
245393
246−#: qml/Dash/PullToRefreshScopeStyle.qml:60
394+#: qml/Dash/PullToRefreshScopeStyle.qml:61
247395msgid "Release to refresh…"
248396msgstr "Адпусціце для абнаўлення..."
249397
@@ -251,15 +399,15 @@ msgstr "Адпусціце для абнаўлення..."
251399msgid "Enable location data"
252400msgstr "Уключыць дадзеныя аб месцазнаходжанні"
253401
254−#: qml/Dash/ScopesList.qml:55
402+#: qml/Dash/ScopesList.qml:57
255403msgid "Manage"
256404msgstr "Кіраванне"
257405
258−#: qml/Dash/ScopesList.qml:101
406+#: qml/Dash/ScopesList.qml:104
259407msgid "Home"
260408msgstr "Хатняя папка"
261409
262−#: qml/Dash/ScopesList.qml:102
410+#: qml/Dash/ScopesList.qml:105
263411msgid "Also installed"
264412msgstr "Таксама ўсталявана"
265413
@@ -269,76 +417,60 @@ msgid ""
269417"touch pad to interact with the pointer."
270418msgstr ""
271419
272−#: qml/Greeter/CoverPage.qml:118
420+#: qml/Greeter/CoverPage.qml:127
273421msgid "Unlock"
274422msgstr "Разблакаваць"
275423
276−#: qml/Greeter/LoginList.qml:239
277−msgid "Retry"
278−msgstr "Паспрабаваць зноў"
279−
280−#: qml/Greeter/LoginList.qml:240
281−msgid "Tap to unlock"
282−msgstr "Націсніце, каб разблакаваць"
283−
284−#: qml/Greeter/NarrowView.qml:54
285−msgid "Sorry, incorrect passphrase."
286−msgstr "Даруйце, няслушны пароль."
287−
288−#: qml/Greeter/NarrowView.qml:55
289−msgid "Sorry, incorrect passcode."
290−msgstr "Даруйце, няслушны код."
291−
292−#: qml/Greeter/NarrowView.qml:56
293−msgid "This will be your last attempt."
294−msgstr "Апошняя спроба."
424+#: qml/Greeter/DelayedLockscreen.qml:43
425+msgid "Device Locked"
426+msgstr "Прылада заблакаваная"
295427
296−#: qml/Greeter/NarrowView.qml:58
297−msgid ""
298−"If passphrase is entered incorrectly, your phone will conduct a factory "
299−"reset and all personal data will be deleted."
428+#: qml/Greeter/DelayedLockscreen.qml:58
429+msgid "You have been locked out due to too many failed passphrase attempts."
300430msgstr ""
301−"Калі ўведзены пароль неправільны, Ваш тэлефон зробіць агульны скід налад і "
302−"ўсе асабістыя дадзеныя будуць выдалены."
431+"Вы былі заблакаваныя з-за занадта вялікай колькасці няўдалых спробаў."
303432
304−#: qml/Greeter/NarrowView.qml:59
305−msgid ""
306−"If passcode is entered incorrectly, your phone will conduct a factory reset "
307−"and all personal data will be deleted."
433+#: qml/Greeter/DelayedLockscreen.qml:59
434+msgid "You have been locked out due to too many failed passcode attempts."
308435msgstr ""
309−"Калі ўведзены код неправільны, Ваш тэлефон зробіць агульны скід налад і ўсе "
310−"асабістыя дадзеныя будуць выдалены."
436+"Вы былі заблакаваныя з-за занадта вялікай колькасці няўдалых спробаў уводу "
437+"кода доступу."
311438
312−#: qml/Greeter/NarrowView.qml:116
439+#: qml/Greeter/DelayedLockscreen.qml:68
313440#, qt-format
314−msgid "Enter %1"
315−msgstr "Увядзіце %1"
441+msgid "Please wait %1 minute and then try again…"
442+msgid_plural "Please wait %1 minutes and then try again…"
443+msgstr[0] "Пачакайце %1 хвіліну і паўтарыце спробу…"
444+msgstr[1] "Пачакайце %1 хвіліны і паўтарыце спробу…"
445+msgstr[2] "Пачакайце %1 хвілін і паўтарыце спробу…"
316446
317−#: qml/Greeter/NarrowView.qml:117
318−msgid "Enter passphrase"
319−msgstr "Увядзіце пароль"
447+#: qml/Greeter/Greeter.qml:596
448+msgid "Try again"
449+msgstr ""
320450
321−#: qml/Greeter/NarrowView.qml:118
322−msgid "Enter passcode"
323−msgstr "Увядзіце код"
451+#: qml/Greeter/LoginList.qml:70
452+msgid "Passphrase"
453+msgstr ""
324454
325−#: qml/Greeter/NarrowView.qml:119
326−#, qt-format
327−msgid "Sorry, incorrect %1"
328−msgstr "Даруйце, некарэктны %1"
455+#: qml/Greeter/LoginList.qml:71
456+msgid "Passcode"
457+msgstr ""
329458
330−#: qml/Greeter/NarrowView.qml:120
331−msgid "Sorry, incorrect passphrase"
332−msgstr "Даруйце, някарэктны пароль"
459+#: qml/Greeter/LoginList.qml:98
460+msgid "Retry"
461+msgstr "Паспрабаваць зноў"
333462
334−#: qml/Greeter/NarrowView.qml:121
335−msgctxt "passphrase"
336−msgid "Please re-enter"
337−msgstr "Калі ласка, паўтарыце ўвод"
463+#: qml/Greeter/LoginList.qml:99
464+msgid "Log In"
465+msgstr ""
338466
339−#: qml/Greeter/NarrowView.qml:122
340−msgid "Sorry, incorrect passcode"
341−msgstr "Даруйце, некарэктны код"
467+#: qml/Greeter/NarrowView.qml:252
468+msgid "Emergency"
469+msgstr ""
470+
471+#: qml/Greeter/SessionsList.qml:122
472+msgid "Select desktop environment"
473+msgstr ""
342474
343475#: qml/Notifications/NotificationMenuItemFactory.qml:124
344476msgid "Show password"
@@ -352,11 +484,11 @@ msgstr "Націсніце, каб вярнуцца да выкліку..."
352484msgid "Conference"
353485msgstr "Канферэнцыя"
354486
355−#: qml/Panel/Indicators/MenuItemFactory.qml:762
487+#: qml/Panel/Indicators/MenuItemFactory.qml:847
356488msgid "Nothing is playing"
357489msgstr "Нічога не грае"
358490
359−#: qml/Panel/Indicators/MenuItemFactory.qml:891
491+#: qml/Panel/Indicators/MenuItemFactory.qml:975
360492#, qt-format
361493msgid "%1 hour"
362494msgid_plural "%1 hours"
@@ -364,7 +496,7 @@ msgstr[0] "%1 гадзіна"
364496msgstr[1] "%1 гадзіны"
365497msgstr[2] "%1 гадзінаў"
366498
367−#: qml/Panel/Indicators/MenuItemFactory.qml:895
499+#: qml/Panel/Indicators/MenuItemFactory.qml:979
368500#, qt-format
369501msgid "%1 minute"
370502msgid_plural "%1 minutes"
@@ -372,7 +504,7 @@ msgstr[0] "%1 хвіліна"
372504msgstr[1] "%1 хвіліны"
373505msgstr[2] "%1 хвілінаў"
374506
375−#: qml/Panel/Indicators/MenuItemFactory.qml:900
507+#: qml/Panel/Indicators/MenuItemFactory.qml:984
376508#, qt-format
377509msgid "%1 second"
378510msgid_plural "%1 seconds"
@@ -380,37 +512,37 @@ msgstr[0] "%1 секунда"
380512msgstr[1] "%1 секунды"
381513msgstr[2] "%1 секундаў"
382514
383−#: qml/Panel/Indicators/MenuItemFactory.qml:903
515+#: qml/Panel/Indicators/MenuItemFactory.qml:987
384516msgid "0 seconds"
385517msgstr "0 секунд"
386518
387519#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
388−#: qml/Panel/Indicators/MenuItemFactory.qml:905
520+#: qml/Panel/Indicators/MenuItemFactory.qml:989
389521#, qt-format
390522msgid "%1 remaining"
391523msgstr "%1 засталося"
392524
393−#: qml/Panel/Indicators/MenuItemFactory.qml:911
525+#: qml/Panel/Indicators/MenuItemFactory.qml:995
394526msgid "In queue…"
395527msgstr "У чарзе..."
396528
397−#: qml/Panel/Indicators/MenuItemFactory.qml:915
529+#: qml/Panel/Indicators/MenuItemFactory.qml:999
398530msgid "Downloading"
399531msgstr "Запампоўка"
400532
401−#: qml/Panel/Indicators/MenuItemFactory.qml:917
533+#: qml/Panel/Indicators/MenuItemFactory.qml:1001
402534msgid "Paused, tap to resume"
403535msgstr "Прыпынена, націсніце для працягу"
404536
405−#: qml/Panel/Indicators/MenuItemFactory.qml:919
537+#: qml/Panel/Indicators/MenuItemFactory.qml:1003
406538msgid "Canceled"
407539msgstr "Скасавана"
408540
409−#: qml/Panel/Indicators/MenuItemFactory.qml:921
541+#: qml/Panel/Indicators/MenuItemFactory.qml:1005
410542msgid "Finished"
411543msgstr "Скончана"
412544
413−#: qml/Panel/Indicators/MenuItemFactory.qml:923
545+#: qml/Panel/Indicators/MenuItemFactory.qml:1007
414546msgid "Failed, tap to retry"
415547msgstr "Не атрымалася, націсніце, каб паўтарыць спробу"
416548
@@ -430,36 +562,16 @@ msgctxt "Button: Call back on phone"
430562msgid "Call back"
431563msgstr "Патэлефанаваць"
432564
433−#: qml/Stages/SideStage.qml:76
565+#: qml/Stage/SideStage.qml:76
434566msgid "Drag using 3 fingers any application from one window to the other"
435567msgstr ""
436568
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
569+#: qml/Tutorial/TutorialLeftLong.qml:49
458570msgid "Long swipe from the left edge to open the Today scope"
459571msgstr ""
460572
461573#: qml/Tutorial/TutorialLeft.qml:47
462−msgid "Swipe from the left edge to open the launcher"
574+msgid "Short swipe from the left edge to open the launcher"
463575msgstr ""
464576
465577#: qml/Tutorial/TutorialRight.qml:55
@@ -467,15 +579,11 @@ msgid "Push your mouse against the right edge to view your open apps"
467579msgstr ""
468580
469581#: qml/Tutorial/TutorialRight.qml:56
470−msgid "Short or long swipe from the right edge to view your open apps"
582+msgid "Swipe from the right edge to view your open apps"
471583msgstr ""
472584
473585#: 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"
586+msgid "Swipe from the top edge to access notifications and quick settings"
479587msgstr ""
480588
481589#: qml/Wizard/Page.qml:54
@@ -483,40 +591,54 @@ msgctxt "Button: Go back one page in the Wizard"
483591msgid "Back"
484592msgstr "Вярнуцца"
485593
486−#: qml/Wizard/Pages/10-welcome.qml:27
594+#: qml/Wizard/Pages/10-welcome.qml:28
487595msgid "Language"
488596msgstr ""
489597
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:270
492−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
598+#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
599+#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
600+#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
601+#: qml/Wizard/Pages/70-passwd-type.qml:145
493602#: qml/Wizard/Pages/75-report-check.qml:84
494−#: qml/Wizard/Pages/passcode-desktop.qml:124
495−#: qml/Wizard/Pages/password-set.qml:141
603+#: qml/Wizard/Pages/passcode-desktop.qml:142
604+#: qml/Wizard/Pages/password-set.qml:142
496605msgid "Next"
497606msgstr ""
498607
499−#: qml/Wizard/Pages/30-wifi.qml:29
608+#: qml/Wizard/Pages/20-keyboard.qml:31
609+msgid "Select Keyboard"
610+msgstr ""
611+
612+#: qml/Wizard/Pages/20-keyboard.qml:71
613+msgid "Keyboard language"
614+msgstr ""
615+
616+#: qml/Wizard/Pages/20-keyboard.qml:93
617+msgid "Keyboard layout"
618+msgstr ""
619+
620+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
621+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
622+#: qml/Wizard/Pages/sim.qml:101
623+msgid "Skip"
624+msgstr "Прапусціць"
625+
626+#: qml/Wizard/Pages/30-wifi.qml:31
500627msgid "Connect to Wi‑Fi"
501628msgstr "Злучыцца з Wi-Fi"
502629
503−#: qml/Wizard/Pages/30-wifi.qml:130
630+#: qml/Wizard/Pages/30-wifi.qml:132
504631msgid "Connected"
505632msgstr ""
506633
507−#: qml/Wizard/Pages/30-wifi.qml:163
634+#: qml/Wizard/Pages/30-wifi.qml:165
508635msgid "Available Wi-Fi networks"
509636msgstr ""
510637
511−#: qml/Wizard/Pages/30-wifi.qml:164
638+#: qml/Wizard/Pages/30-wifi.qml:166
512639msgid "No available Wi-Fi networks"
513640msgstr ""
514641
515−#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
516−#: qml/Wizard/Pages/sim.qml:101
517−msgid "Skip"
518−msgstr "Прапусціць"
519−
520642#: qml/Wizard/Pages/40-location.qml:27
521643msgid "Location Services"
522644msgstr ""
@@ -549,11 +671,11 @@ msgstr ""
549671msgid "You can change it later in System Settings."
550672msgstr ""
551673
552−#: qml/Wizard/Pages/50-timezone.qml:29
674+#: qml/Wizard/Pages/50-timezone.qml:30
553675msgid "Time Zone"
554676msgstr ""
555677
556−#: qml/Wizard/Pages/50-timezone.qml:181
678+#: qml/Wizard/Pages/50-timezone.qml:182
557679msgid "Enter your city"
558680msgstr ""
559681
@@ -565,21 +687,21 @@ msgstr ""
565687msgid "Preferred Name"
566688msgstr ""
567689
568−#: qml/Wizard/Pages/70-passwd-type.qml:39
690+#: qml/Wizard/Pages/70-passwd-type.qml:40
569691msgid "Lock Screen"
570692msgstr ""
571693
572−#: qml/Wizard/Pages/70-passwd-type.qml:101
694+#: qml/Wizard/Pages/70-passwd-type.qml:102
573695msgctxt "Label: Type of security method"
574696msgid "Create new password"
575697msgstr ""
576698
577−#: qml/Wizard/Pages/70-passwd-type.qml:103
699+#: qml/Wizard/Pages/70-passwd-type.qml:104
578700msgctxt "Label: Type of security method"
579701msgid "Create passcode (numbers only)"
580702msgstr ""
581703
582−#: qml/Wizard/Pages/70-passwd-type.qml:105
704+#: qml/Wizard/Pages/70-passwd-type.qml:106
583705msgctxt "Label: Type of security method"
584706msgid "No lock code"
585707msgstr ""
@@ -600,6 +722,35 @@ msgstr ""
600722msgid "Privacy policy"
601723msgstr ""
602724
725+#: qml/Wizard/Pages/77-system-update.qml:28
726+msgid "Update Device"
727+msgstr ""
728+
729+#: qml/Wizard/Pages/77-system-update.qml:55
730+msgid ""
731+"There is a system update available and ready to install. Afterwards, the "
732+"device will automatically restart."
733+msgstr ""
734+
735+#: qml/Wizard/Pages/77-system-update.qml:76
736+msgctxt "string identifying name of the update"
737+msgid "Ubuntu system"
738+msgstr ""
739+
740+#: qml/Wizard/Pages/77-system-update.qml:83
741+#, qt-format
742+msgctxt "version of the system update"
743+msgid "Version %1"
744+msgstr ""
745+
746+#: qml/Wizard/Pages/77-system-update.qml:102
747+msgid "This could take a few minutes..."
748+msgstr ""
749+
750+#: qml/Wizard/Pages/77-system-update.qml:116
751+msgid "Install and restart now"
752+msgstr ""
753+
603754#: qml/Wizard/Pages/80-finished.qml:89
604755msgid "Welcome to Ubuntu"
605756msgstr ""
@@ -643,7 +794,7 @@ msgid "Service Terms"
643794msgstr ""
644795
645796#: qml/Wizard/Pages/passcode-confirm.qml:43
646−#: qml/Wizard/Pages/passcode-desktop.qml:80
797+#: qml/Wizard/Pages/passcode-desktop.qml:97
647798msgid "Confirm passcode"
648799msgstr "Пацвердзіце код-пароль"
649800
@@ -656,28 +807,28 @@ msgctxt "Enter the passcode again"
656807msgid "Please re-enter."
657808msgstr ""
658809
659−#: qml/Wizard/Pages/passcode-desktop.qml:30
810+#: qml/Wizard/Pages/passcode-desktop.qml:31
660811msgid "Lock Screen Passcode"
661812msgstr ""
662813
663−#: qml/Wizard/Pages/passcode-desktop.qml:56
814+#: qml/Wizard/Pages/passcode-desktop.qml:61
664815msgid "Enter 4 numbers to setup your passcode"
665816msgstr ""
666817
667−#: qml/Wizard/Pages/passcode-desktop.qml:65
818+#: qml/Wizard/Pages/passcode-desktop.qml:77
668819#: qml/Wizard/Pages/passcode-set.qml:54
669820msgid "Choose passcode"
670821msgstr ""
671822
672−#: qml/Wizard/Pages/passcode-desktop.qml:105
823+#: qml/Wizard/Pages/passcode-desktop.qml:127
673824msgid "Passcode too short"
674825msgstr ""
675826
676−#: qml/Wizard/Pages/passcode-desktop.qml:107
827+#: qml/Wizard/Pages/passcode-desktop.qml:129
677828msgid "Passcodes match"
678829msgstr ""
679830
680−#: qml/Wizard/Pages/passcode-desktop.qml:109
831+#: qml/Wizard/Pages/passcode-desktop.qml:131
681832msgid "Passcodes do not match"
682833msgstr ""
683834
@@ -685,19 +836,19 @@ msgstr ""
685836msgid "Passcode must be 4 characters long"
686837msgstr ""
687838
688−#: qml/Wizard/Pages/password-set.qml:30
839+#: qml/Wizard/Pages/password-set.qml:31
689840msgid "Lock Screen Password"
690841msgstr ""
691842
692−#: qml/Wizard/Pages/password-set.qml:61
843+#: qml/Wizard/Pages/password-set.qml:62
693844msgid "Enter at least 8 characters"
694845msgstr ""
695846
696−#: qml/Wizard/Pages/password-set.qml:73
847+#: qml/Wizard/Pages/password-set.qml:74
697848msgid "Choose password"
698849msgstr ""
699850
700−#: qml/Wizard/Pages/password-set.qml:103
851+#: qml/Wizard/Pages/password-set.qml:104
701852msgid "Confirm password"
702853msgstr ""
703854
@@ -726,26 +877,30 @@ msgid "To proceed with no SIM tap Skip."
726877msgstr ""
727878
728879#: qml/Wizard/PasswordMeter.qml:87
729−msgid "Passwords match"
880+msgid "Password too short"
730881msgstr ""
731882
732883#: qml/Wizard/PasswordMeter.qml:89
884+msgid "Passwords match"
885+msgstr ""
886+
887+#: qml/Wizard/PasswordMeter.qml:91
733888msgid "Passwords do not match"
734889msgstr ""
735890
736−#: qml/Wizard/PasswordMeter.qml:93
891+#: qml/Wizard/PasswordMeter.qml:95
737892msgid "Strong password"
738893msgstr ""
739894
740−#: qml/Wizard/PasswordMeter.qml:95
895+#: qml/Wizard/PasswordMeter.qml:97
741896msgid "Fair password"
742897msgstr ""
743898
744−#: qml/Wizard/PasswordMeter.qml:97
899+#: qml/Wizard/PasswordMeter.qml:99
745900msgid "Weak password"
746901msgstr ""
747902
748−#: qml/Wizard/PasswordMeter.qml:99
903+#: qml/Wizard/PasswordMeter.qml:101
749904msgid "Very weak password"
750905msgstr ""
751906
@@ -791,6 +946,20 @@ msgstr ""
791946#~ msgid "Type or say a command"
792947#~ msgstr "Напішыце або вымавіце каманду"
793948
949+#, qt-format
950+#~ msgid "Enter %1"
951+#~ msgstr "Увядзіце %1"
952+
953+#, qt-format
954+#~ msgid "Sorry, incorrect %1"
955+#~ msgstr "Даруйце, некарэктны %1"
956+
957+#~ msgid "Enter passcode"
958+#~ msgstr "Увядзіце код"
959+
960+#~ msgid "This will be your last attempt."
961+#~ msgstr "Апошняя спроба."
962+
794963#~ msgid "Log out"
795964#~ msgstr "Выйсці"
796965
@@ -926,6 +1095,12 @@ msgstr ""
9261095#~ "Вы толькі што асвоілі асноўная жэсты і можаце пачаць выкарыстоўваць "
9271096#~ "тэлефон<br><br>Дакраніцеся да экрана, каб пачаць"
9281097
1098+#~ msgid "Enter passphrase"
1099+#~ msgstr "Увядзіце пароль"
1100+
1101+#~ msgid "Sorry, incorrect passcode."
1102+#~ msgstr "Даруйце, няслушны код."
1103+
9291104#~ msgid "Please re-enter"
9301105#~ msgstr "Калі ласка, паўтарыце ўвод"
9311106
@@ -957,6 +1132,9 @@ msgstr ""
9571132#~ msgid "Reboot"
9581133#~ msgstr "Перазагрузіць"
9591134
1135+#~ msgid "Tap to unlock"
1136+#~ msgstr "Націсніце, каб разблакаваць"
1137+
9601138#~ msgid "Swipe up from the bottom edge."
9611139#~ msgstr "Правесці уверх ад ніжняга краю."
9621140
@@ -1016,6 +1194,9 @@ msgstr ""
10161194#~ msgid "Numbers and letters"
10171195#~ msgstr "Літары і лічбы"
10181196
1197+#~ msgid "Sorry, incorrect passphrase."
1198+#~ msgstr "Даруйце, няслушны пароль."
1199+
10191200#~ msgid "Without it, you won’t be able to make calls or use text messaging."
10201201#~ msgstr "Без яе Вы не зможаце тэлефанаваць ці адпраўляць паведамленні."
10211202
@@ -1056,5 +1237,29 @@ msgstr ""
10561237#~ msgid "%H:%M"
10571238#~ msgstr "%H:%M"
10581239
1240+#~ msgctxt "passphrase"
1241+#~ msgid "Please re-enter"
1242+#~ msgstr "Калі ласка, паўтарыце ўвод"
1243+
10591244#~ msgid "Call back"
10601245#~ msgstr "Зваротны выклік"
1246+
1247+#~ msgid "Sorry, incorrect passphrase"
1248+#~ msgstr "Даруйце, някарэктны пароль"
1249+
1250+#~ msgid "Sorry, incorrect passcode"
1251+#~ msgstr "Даруйце, некарэктны код"
1252+
1253+#~ msgid ""
1254+#~ "If passcode is entered incorrectly, your phone will conduct a factory reset "
1255+#~ "and all personal data will be deleted."
1256+#~ msgstr ""
1257+#~ "Калі ўведзены код неправільны, Ваш тэлефон зробіць агульны скід налад і ўсе "
1258+#~ "асабістыя дадзеныя будуць выдалены."
1259+
1260+#~ msgid ""
1261+#~ "If passphrase is entered incorrectly, your phone will conduct a factory "
1262+#~ "reset and all personal data will be deleted."
1263+#~ msgstr ""
1264+#~ "Калі ўведзены пароль неправільны, Ваш тэлефон зробіць агульны скід налад і "
1265+#~ "ўсе асабістыя дадзеныя будуць выдалены."
po/bg.po+351−192
@@ -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-27 13:54+0000\n"
10+"POT-Creation-Date: 2016-11-16 10:44+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,93 +15,75 @@ 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-06-02 06:20+0000\n"
19−"X-Generator: Launchpad (build 18053)\n"
18+"X-Launchpad-Export-Date: 2016-11-23 06:34+0000\n"
19+"X-Generator: Launchpad (build 18269)\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
39−msgid "Device Locked"
40−msgstr ""
41−
42−#: qml/Components/DelayedLockscreen.qml:64
43−msgid "You have been locked out due to too many failed passphrase attempts."
44−msgstr ""
45−
46−#: qml/Components/DelayedLockscreen.qml:65
47−msgid "You have been locked out due to too many failed passcode attempts."
48−msgstr ""
49−
50−#: qml/Components/DelayedLockscreen.qml:74
51−#, qt-format
52−msgid "Please wait %1 minute and then try again…"
53−msgid_plural "Please wait %1 minutes and then try again…"
54−msgstr[0] ""
55−msgstr[1] ""
56−
57−#: qml/Components/Dialogs.qml:144
38+#: qml/Components/Dialogs.qml:149
5839msgctxt "Title: Lock/Log out dialog"
5940msgid "Log out"
6041msgstr ""
6142
62−#: qml/Components/Dialogs.qml:145
43+#: qml/Components/Dialogs.qml:150
6344msgid "Are you sure you want to log out?"
6445msgstr ""
6546
66−#: qml/Components/Dialogs.qml:147
47+#: qml/Components/Dialogs.qml:152
6748msgctxt "Button: Lock the system"
6849msgid "Lock"
6950msgstr ""
7051
71−#: qml/Components/Dialogs.qml:154
52+#: qml/Components/Dialogs.qml:159
7253msgctxt "Button: Log out from the system"
7354msgid "Log Out"
7455msgstr ""
7556
76−#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
77−#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
57+#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
58+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
59+#: qml/Wizard/Pages/passcode-confirm.qml:32
7860#: qml/Wizard/Pages/passcode-set.qml:32
7961msgid "Cancel"
8062msgstr ""
8163
82−#: qml/Components/Dialogs.qml:173
64+#: qml/Components/Dialogs.qml:178
8365msgctxt "Title: Reboot dialog"
8466msgid "Reboot"
8567msgstr ""
8668
87−#: qml/Components/Dialogs.qml:174
69+#: qml/Components/Dialogs.qml:179
8870msgid "Are you sure you want to reboot?"
8971msgstr ""
9072
91−#: qml/Components/Dialogs.qml:176
73+#: qml/Components/Dialogs.qml:181
9274msgid "No"
9375msgstr ""
9476
95−#: qml/Components/Dialogs.qml:182
77+#: qml/Components/Dialogs.qml:187
9678msgid "Yes"
9779msgstr ""
9880
99−#: qml/Components/Dialogs.qml:197
81+#: qml/Components/Dialogs.qml:202
10082msgctxt "Title: Power off/Restart dialog"
10183msgid "Power"
10284msgstr ""
10385
104−#: qml/Components/Dialogs.qml:198
86+#: qml/Components/Dialogs.qml:203
10587msgid ""
10688"Are you sure you would like\n"
10789"to power off?"
@@ -109,28 +91,198 @@ msgstr ""
10991"Искате ли да \n"
11092"изключите захранването на устройството?"
11193
112−#: qml/Components/Dialogs.qml:200
94+#: qml/Components/Dialogs.qml:205
11395msgctxt "Button: Power off the system"
11496msgid "Power off"
11597msgstr ""
11698
117−#: qml/Components/Dialogs.qml:209
99+#: qml/Components/Dialogs.qml:214
118100msgctxt "Button: Restart the system"
119101msgid "Restart"
120102msgstr ""
121103
122−#: qml/Components/Lockscreen.qml:231
104+#: qml/Components/KeyboardShortcutsOverlay.qml:41
105+msgid "Keyboard Shortcuts"
106+msgstr ""
107+
108+#: qml/Components/KeyboardShortcutsOverlay.qml:55
109+msgid "Unity 8"
110+msgstr ""
111+
112+#: qml/Components/KeyboardShortcutsOverlay.qml:62
113+msgid "PrtScr"
114+msgstr ""
115+
116+#: qml/Components/KeyboardShortcutsOverlay.qml:67
117+msgid "Takes a screenshot."
118+msgstr ""
119+
120+#: qml/Components/KeyboardShortcutsOverlay.qml:75
121+msgid "Alt + PrtScr"
122+msgstr ""
123+
124+#: qml/Components/KeyboardShortcutsOverlay.qml:80
125+msgid "Takes a screenshot of a window."
126+msgstr ""
127+
128+#: qml/Components/KeyboardShortcutsOverlay.qml:88
129+msgid "Super + Space"
130+msgstr ""
131+
132+#: qml/Components/KeyboardShortcutsOverlay.qml:93
133+msgid "Switches to next keyboard layout."
134+msgstr ""
135+
136+#: qml/Components/KeyboardShortcutsOverlay.qml:101
137+msgid "Super + Shift + Space"
138+msgstr ""
139+
140+#: qml/Components/KeyboardShortcutsOverlay.qml:106
141+msgid "Switches to previous keyboard layout."
142+msgstr ""
143+
144+#: qml/Components/KeyboardShortcutsOverlay.qml:118
145+msgid "Launcher"
146+msgstr ""
147+
148+#: qml/Components/KeyboardShortcutsOverlay.qml:125
149+msgid "Super (Hold)"
150+msgstr ""
151+
152+#: qml/Components/KeyboardShortcutsOverlay.qml:130
153+msgid "Opens the launcher, displays shortcuts."
154+msgstr ""
155+
156+#: qml/Components/KeyboardShortcutsOverlay.qml:138
157+msgid "Alt + F1"
158+msgstr ""
159+
160+#: qml/Components/KeyboardShortcutsOverlay.qml:143
161+msgid "Opens launcher keyboard navigation mode."
162+msgstr ""
163+
164+#: qml/Components/KeyboardShortcutsOverlay.qml:151
165+msgid "Super + Tab"
166+msgstr ""
167+
168+#: qml/Components/KeyboardShortcutsOverlay.qml:156
169+msgid "Switches applications via the launcher."
170+msgstr ""
171+
172+#: qml/Components/KeyboardShortcutsOverlay.qml:164
173+msgid "Super + 0 to 9"
174+msgstr ""
175+
176+#: qml/Components/KeyboardShortcutsOverlay.qml:169
177+msgid "Same as clicking on a launcher icon."
178+msgstr ""
179+
180+#: qml/Components/KeyboardShortcutsOverlay.qml:181
181+msgid "Scopes"
182+msgstr ""
183+
184+#: qml/Components/KeyboardShortcutsOverlay.qml:188
185+msgid "Super (Tap)"
186+msgstr ""
187+
188+#: qml/Components/KeyboardShortcutsOverlay.qml:193
189+msgid "Opens the Scopes home."
190+msgstr ""
191+
192+#: qml/Components/KeyboardShortcutsOverlay.qml:209
193+msgid "Switching"
194+msgstr ""
195+
196+#: qml/Components/KeyboardShortcutsOverlay.qml:216
197+msgid "Alt + Tab"
198+msgstr ""
199+
200+#: qml/Components/KeyboardShortcutsOverlay.qml:221
201+msgid "Switches between applications."
202+msgstr ""
203+
204+#: qml/Components/KeyboardShortcutsOverlay.qml:229
205+msgid "Super + W"
206+msgstr ""
207+
208+#: qml/Components/KeyboardShortcutsOverlay.qml:234
209+msgid "Opens the desktop spread."
210+msgstr ""
211+
212+#: qml/Components/KeyboardShortcutsOverlay.qml:242
213+msgid "Cursor Left or Right"
214+msgstr ""
215+
216+#: qml/Components/KeyboardShortcutsOverlay.qml:247
217+msgid "Moves the focus."
218+msgstr ""
219+
220+#: qml/Components/KeyboardShortcutsOverlay.qml:259
221+msgid "Windows"
222+msgstr ""
223+
224+#: qml/Components/KeyboardShortcutsOverlay.qml:266
225+msgid "Ctrl + Super + D"
226+msgstr ""
227+
228+#: qml/Components/KeyboardShortcutsOverlay.qml:271
229+msgid "Minimizes all windows."
230+msgstr ""
231+
232+#: qml/Components/KeyboardShortcutsOverlay.qml:279
233+msgid "Ctrl + Super + Up"
234+msgstr ""
235+
236+#: qml/Components/KeyboardShortcutsOverlay.qml:284
237+msgid "Maximizes the current window."
238+msgstr ""
239+
240+#: qml/Components/KeyboardShortcutsOverlay.qml:292
241+msgid "Ctrl + Super + Down"
242+msgstr ""
243+
244+#: qml/Components/KeyboardShortcutsOverlay.qml:297
245+msgid "Minimizes or restores the current window."
246+msgstr ""
247+
248+#: qml/Components/KeyboardShortcutsOverlay.qml:305
249+msgid "Ctrl + Super + Left or Right"
250+msgstr ""
251+
252+#: qml/Components/KeyboardShortcutsOverlay.qml:310
253+msgid "Semi-maximizes the current window."
254+msgstr ""
255+
256+#: qml/Components/KeyboardShortcutsOverlay.qml:318
257+msgid "Alt + F4"
258+msgstr ""
259+
260+#: qml/Components/KeyboardShortcutsOverlay.qml:323
261+msgid "Closes the current window."
262+msgstr ""
263+
264+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
123265msgid "Return to Call"
124266msgstr ""
125267
126−#: qml/Components/Lockscreen.qml:231
268+#: qml/Components/Lockscreen.qml:212
127269msgid "Emergency Call"
128270msgstr "Спешно повикване"
129271
130−#: qml/Components/Lockscreen.qml:263
272+#: qml/Components/Lockscreen.qml:244
131273msgid "OK"
132274msgstr ""
133275
276+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
277+#, qt-format
278+msgid "%1:%2:%3"
279+msgstr ""
280+
281+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
282+#, qt-format
283+msgid "%1:%2"
284+msgstr ""
285+
134286#: qml/Components/ModeSwitchWarningDialog.qml:32
135287msgid "Apps may have unsaved data:"
136288msgstr ""
@@ -157,88 +309,88 @@ msgstr ""
157309msgid "Close all"
158310msgstr ""
159311
160−#: qml/Dash/DashPageHeader.qml:333
312+#: qml/Components/SharingPicker.qml:54
313+msgid "Preview Share Item"
314+msgstr ""
315+
316+#: qml/Dash/DashPageHeader.qml:361
161317msgctxt "Button: Open the Ubuntu Store"
162318msgid "Store"
163319msgstr ""
164320
165−#: qml/Dash/DashPageHeader.qml:340
321+#: qml/Dash/DashPageHeader.qml:368
166322msgctxt "Button: Start a search in the current dash scope"
167323msgid "Search"
168324msgstr ""
169325
170−#: qml/Dash/DashPageHeader.qml:350
326+#: qml/Dash/DashPageHeader.qml:378
171327msgctxt "Button: Show the current dash scope settings"
172328msgid "Settings"
173329msgstr ""
174330
175−#: qml/Dash/DashPageHeader.qml:357
331+#: qml/Dash/DashPageHeader.qml:385
176332msgid "Remove from Favorites"
177333msgstr ""
178334
179−#: qml/Dash/DashPageHeader.qml:357
335+#: qml/Dash/DashPageHeader.qml:385
180336msgid "Add to Favorites"
181337msgstr ""
182338
183−#: qml/Dash/FiltersPopover.qml:60
339+#: qml/Dash/FiltersPopover.qml:61
184340msgid "Refine your results"
185341msgstr ""
186342
187−#: qml/Dash/FiltersPopover.qml:69
343+#: qml/Dash/FiltersPopover.qml:70
188344msgid "Reset"
189345msgstr ""
190346
191−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:774
347+#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
192348msgid "Show less"
193349msgstr ""
194350
195−#: qml/Dash/GenericScopeView.qml:579
351+#: qml/Dash/GenericScopeView.qml:545
196352msgid "Show all"
197353msgstr ""
198354
199−#: qml/Dash/GenericScopeView.qml:636
355+#: qml/Dash/GenericScopeView.qml:576
200356msgctxt "Label: Hint for dash search line edit"
201357msgid "Search"
202358msgstr ""
203359
204−#: qml/Dash/PageHeaderExtraPanel.qml:56
360+#: qml/Dash/PageHeaderExtraPanel.qml:57
205361msgid "Recent Searches"
206362msgstr ""
207363
208−#: qml/Dash/PageHeaderExtraPanel.qml:67
364+#: qml/Dash/PageHeaderExtraPanel.qml:68
209365msgid "Clear All"
210366msgstr ""
211367
212−#: qml/Dash/Previews/PreviewActionCombo.qml:35
368+#: qml/Dash/Previews/PreviewActionCombo.qml:36
213369msgid "More..."
214370msgstr ""
215371
216−#: qml/Dash/Previews/PreviewActionCombo.qml:35
372+#: qml/Dash/Previews/PreviewActionCombo.qml:36
217373msgid "Less..."
218374msgstr "По-малко..."
219375
220−#: qml/Dash/Previews/PreviewCommentInput.qml:68
221−#: qml/Dash/Previews/PreviewRatingInput.qml:175
376+#: qml/Dash/Previews/PreviewCommentInput.qml:83
377+#: qml/Dash/Previews/PreviewRatingInput.qml:202
222378msgid "Send"
223379msgstr "Изпрати"
224380
225−#: qml/Dash/Previews/PreviewRatingInput.qml:82
381+#: qml/Dash/Previews/PreviewRatingInput.qml:109
226382msgid "Rate this"
227383msgstr "Оценете това"
228384
229−#: qml/Dash/Previews/PreviewRatingInput.qml:157
385+#: qml/Dash/Previews/PreviewRatingInput.qml:184
230386msgid "Add a review"
231387msgstr "Добави отзив"
232388
233−#: qml/Dash/Previews/PreviewSharing.qml:66
234−msgid "Preview Share Item"
235−msgstr ""
236−
237−#: qml/Dash/PullToRefreshScopeStyle.qml:55
389+#: qml/Dash/PullToRefreshScopeStyle.qml:56
238390msgid "Pull to refresh…"
239391msgstr ""
240392
241−#: qml/Dash/PullToRefreshScopeStyle.qml:60
393+#: qml/Dash/PullToRefreshScopeStyle.qml:61
242394msgid "Release to refresh…"
243395msgstr ""
244396
@@ -246,15 +398,15 @@ msgstr ""
246398msgid "Enable location data"
247399msgstr ""
248400
249−#: qml/Dash/ScopesList.qml:55
401+#: qml/Dash/ScopesList.qml:57
250402msgid "Manage"
251403msgstr ""
252404
253−#: qml/Dash/ScopesList.qml:101
405+#: qml/Dash/ScopesList.qml:104
254406msgid "Home"
255407msgstr ""
256408
257−#: qml/Dash/ScopesList.qml:102
409+#: qml/Dash/ScopesList.qml:105
258410msgid "Also installed"
259411msgstr ""
260412
@@ -264,71 +416,55 @@ msgid ""
264416"touch pad to interact with the pointer."
265417msgstr ""
266418
267−#: qml/Greeter/CoverPage.qml:118
419+#: qml/Greeter/CoverPage.qml:127
268420msgid "Unlock"
269421msgstr ""
270422
271−#: qml/Greeter/LoginList.qml:239
272−msgid "Retry"
273−msgstr ""
274−
275−#: qml/Greeter/LoginList.qml:240
276−msgid "Tap to unlock"
277−msgstr ""
278−
279−#: qml/Greeter/NarrowView.qml:54
280−msgid "Sorry, incorrect passphrase."
281−msgstr ""
282−
283−#: qml/Greeter/NarrowView.qml:55
284−msgid "Sorry, incorrect passcode."
285−msgstr ""
286−
287−#: qml/Greeter/NarrowView.qml:56
288−msgid "This will be your last attempt."
423+#: qml/Greeter/DelayedLockscreen.qml:43
424+msgid "Device Locked"
289425msgstr ""
290426
291−#: qml/Greeter/NarrowView.qml:58
292−msgid ""
293−"If passphrase is entered incorrectly, your phone will conduct a factory "
294−"reset and all personal data will be deleted."
427+#: qml/Greeter/DelayedLockscreen.qml:58
428+msgid "You have been locked out due to too many failed passphrase attempts."
295429msgstr ""
296430
297−#: qml/Greeter/NarrowView.qml:59
298−msgid ""
299−"If passcode is entered incorrectly, your phone will conduct a factory reset "
300−"and all personal data will be deleted."
431+#: qml/Greeter/DelayedLockscreen.qml:59
432+msgid "You have been locked out due to too many failed passcode attempts."
301433msgstr ""
302434
303−#: qml/Greeter/NarrowView.qml:116
435+#: qml/Greeter/DelayedLockscreen.qml:68
304436#, qt-format
305−msgid "Enter %1"
437+msgid "Please wait %1 minute and then try again…"
438+msgid_plural "Please wait %1 minutes and then try again…"
439+msgstr[0] ""
440+msgstr[1] ""
441+
442+#: qml/Greeter/Greeter.qml:596
443+msgid "Try again"
306444msgstr ""
307445
308−#: qml/Greeter/NarrowView.qml:117
309−msgid "Enter passphrase"
446+#: qml/Greeter/LoginList.qml:70
447+msgid "Passphrase"
310448msgstr ""
311449
312−#: qml/Greeter/NarrowView.qml:118
313−msgid "Enter passcode"
450+#: qml/Greeter/LoginList.qml:71
451+msgid "Passcode"
314452msgstr ""
315453
316−#: qml/Greeter/NarrowView.qml:119
317−#, qt-format
318−msgid "Sorry, incorrect %1"
454+#: qml/Greeter/LoginList.qml:98
455+msgid "Retry"
319456msgstr ""
320457
321−#: qml/Greeter/NarrowView.qml:120
322−msgid "Sorry, incorrect passphrase"
458+#: qml/Greeter/LoginList.qml:99
459+msgid "Log In"
323460msgstr ""
324461
325−#: qml/Greeter/NarrowView.qml:121
326−msgctxt "passphrase"
327−msgid "Please re-enter"
462+#: qml/Greeter/NarrowView.qml:252
463+msgid "Emergency"
328464msgstr ""
329465
330−#: qml/Greeter/NarrowView.qml:122
331−msgid "Sorry, incorrect passcode"
466+#: qml/Greeter/SessionsList.qml:122
467+msgid "Select desktop environment"
332468msgstr ""
333469
334470#: qml/Notifications/NotificationMenuItemFactory.qml:124
@@ -343,62 +479,62 @@ msgstr ""
343479msgid "Conference"
344480msgstr ""
345481
346−#: qml/Panel/Indicators/MenuItemFactory.qml:762
482+#: qml/Panel/Indicators/MenuItemFactory.qml:847
347483msgid "Nothing is playing"
348484msgstr ""
349485
350−#: qml/Panel/Indicators/MenuItemFactory.qml:891
486+#: qml/Panel/Indicators/MenuItemFactory.qml:975
351487#, qt-format
352488msgid "%1 hour"
353489msgid_plural "%1 hours"
354490msgstr[0] ""
355491msgstr[1] ""
356492
357−#: qml/Panel/Indicators/MenuItemFactory.qml:895
493+#: qml/Panel/Indicators/MenuItemFactory.qml:979
358494#, qt-format
359495msgid "%1 minute"
360496msgid_plural "%1 minutes"
361497msgstr[0] ""
362498msgstr[1] ""
363499
364−#: qml/Panel/Indicators/MenuItemFactory.qml:900
500+#: qml/Panel/Indicators/MenuItemFactory.qml:984
365501#, qt-format
366502msgid "%1 second"
367503msgid_plural "%1 seconds"
368504msgstr[0] ""
369505msgstr[1] ""
370506
371−#: qml/Panel/Indicators/MenuItemFactory.qml:903
507+#: qml/Panel/Indicators/MenuItemFactory.qml:987
372508msgid "0 seconds"
373509msgstr ""
374510
375511#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
376−#: qml/Panel/Indicators/MenuItemFactory.qml:905
512+#: qml/Panel/Indicators/MenuItemFactory.qml:989
377513#, qt-format
378514msgid "%1 remaining"
379515msgstr ""
380516
381−#: qml/Panel/Indicators/MenuItemFactory.qml:911
517+#: qml/Panel/Indicators/MenuItemFactory.qml:995
382518msgid "In queue…"
383519msgstr ""
384520
385−#: qml/Panel/Indicators/MenuItemFactory.qml:915
521+#: qml/Panel/Indicators/MenuItemFactory.qml:999
386522msgid "Downloading"
387523msgstr ""
388524
389−#: qml/Panel/Indicators/MenuItemFactory.qml:917
525+#: qml/Panel/Indicators/MenuItemFactory.qml:1001
390526msgid "Paused, tap to resume"
391527msgstr ""
392528
393−#: qml/Panel/Indicators/MenuItemFactory.qml:919
529+#: qml/Panel/Indicators/MenuItemFactory.qml:1003
394530msgid "Canceled"
395531msgstr ""
396532
397−#: qml/Panel/Indicators/MenuItemFactory.qml:921
533+#: qml/Panel/Indicators/MenuItemFactory.qml:1005
398534msgid "Finished"
399535msgstr ""
400536
401−#: qml/Panel/Indicators/MenuItemFactory.qml:923
537+#: qml/Panel/Indicators/MenuItemFactory.qml:1007
402538msgid "Failed, tap to retry"
403539msgstr ""
404540
@@ -418,36 +554,16 @@ msgctxt "Button: Call back on phone"
418554msgid "Call back"
419555msgstr ""
420556
421−#: qml/Stages/SideStage.qml:76
557+#: qml/Stage/SideStage.qml:76
422558msgid "Drag using 3 fingers any application from one window to the other"
423559msgstr ""
424560
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
561+#: qml/Tutorial/TutorialLeftLong.qml:49
446562msgid "Long swipe from the left edge to open the Today scope"
447563msgstr ""
448564
449565#: qml/Tutorial/TutorialLeft.qml:47
450−msgid "Swipe from the left edge to open the launcher"
566+msgid "Short swipe from the left edge to open the launcher"
451567msgstr ""
452568
453569#: qml/Tutorial/TutorialRight.qml:55
@@ -455,15 +571,11 @@ msgid "Push your mouse against the right edge to view your open apps"
455571msgstr ""
456572
457573#: qml/Tutorial/TutorialRight.qml:56
458−msgid "Short or long swipe from the right edge to view your open apps"
574+msgid "Swipe from the right edge to view your open apps"
459575msgstr ""
460576
461577#: 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"
578+msgid "Swipe from the top edge to access notifications and quick settings"
467579msgstr ""
468580
469581#: qml/Wizard/Page.qml:54
@@ -471,40 +583,54 @@ msgctxt "Button: Go back one page in the Wizard"
471583msgid "Back"
472584msgstr ""
473585
474−#: qml/Wizard/Pages/10-welcome.qml:27
586+#: qml/Wizard/Pages/10-welcome.qml:28
475587msgid "Language"
476588msgstr ""
477589
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:270
480−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
590+#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
591+#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
592+#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
593+#: qml/Wizard/Pages/70-passwd-type.qml:145
481594#: qml/Wizard/Pages/75-report-check.qml:84
482−#: qml/Wizard/Pages/passcode-desktop.qml:124
483−#: qml/Wizard/Pages/password-set.qml:141
595+#: qml/Wizard/Pages/passcode-desktop.qml:142
596+#: qml/Wizard/Pages/password-set.qml:142
484597msgid "Next"
485598msgstr ""
486599
487−#: qml/Wizard/Pages/30-wifi.qml:29
600+#: qml/Wizard/Pages/20-keyboard.qml:31
601+msgid "Select Keyboard"
602+msgstr ""
603+
604+#: qml/Wizard/Pages/20-keyboard.qml:71
605+msgid "Keyboard language"
606+msgstr ""
607+
608+#: qml/Wizard/Pages/20-keyboard.qml:93
609+msgid "Keyboard layout"
610+msgstr ""
611+
612+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
613+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
614+#: qml/Wizard/Pages/sim.qml:101
615+msgid "Skip"
616+msgstr ""
617+
618+#: qml/Wizard/Pages/30-wifi.qml:31
488619msgid "Connect to Wi‑Fi"
489620msgstr ""
490621
491−#: qml/Wizard/Pages/30-wifi.qml:130
622+#: qml/Wizard/Pages/30-wifi.qml:132
492623msgid "Connected"
493624msgstr ""
494625
495−#: qml/Wizard/Pages/30-wifi.qml:163
626+#: qml/Wizard/Pages/30-wifi.qml:165
496627msgid "Available Wi-Fi networks"
497628msgstr ""
498629
499−#: qml/Wizard/Pages/30-wifi.qml:164
630+#: qml/Wizard/Pages/30-wifi.qml:166
500631msgid "No available Wi-Fi networks"
501632msgstr ""
502633
503−#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
504−#: qml/Wizard/Pages/sim.qml:101
505−msgid "Skip"
506−msgstr ""
507−
508634#: qml/Wizard/Pages/40-location.qml:27
509635msgid "Location Services"
510636msgstr ""
@@ -537,11 +663,11 @@ msgstr ""
537663msgid "You can change it later in System Settings."
538664msgstr ""
539665
540−#: qml/Wizard/Pages/50-timezone.qml:29
666+#: qml/Wizard/Pages/50-timezone.qml:30
541667msgid "Time Zone"
542668msgstr ""
543669
544−#: qml/Wizard/Pages/50-timezone.qml:181
670+#: qml/Wizard/Pages/50-timezone.qml:182
545671msgid "Enter your city"
546672msgstr ""
547673
@@ -553,21 +679,21 @@ msgstr ""
553679msgid "Preferred Name"
554680msgstr ""
555681
556−#: qml/Wizard/Pages/70-passwd-type.qml:39
682+#: qml/Wizard/Pages/70-passwd-type.qml:40
557683msgid "Lock Screen"
558684msgstr ""
559685
560−#: qml/Wizard/Pages/70-passwd-type.qml:101
686+#: qml/Wizard/Pages/70-passwd-type.qml:102
561687msgctxt "Label: Type of security method"
562688msgid "Create new password"
563689msgstr ""
564690
565−#: qml/Wizard/Pages/70-passwd-type.qml:103
691+#: qml/Wizard/Pages/70-passwd-type.qml:104
566692msgctxt "Label: Type of security method"
567693msgid "Create passcode (numbers only)"
568694msgstr ""
569695
570−#: qml/Wizard/Pages/70-passwd-type.qml:105
696+#: qml/Wizard/Pages/70-passwd-type.qml:106
571697msgctxt "Label: Type of security method"
572698msgid "No lock code"
573699msgstr ""
@@ -588,6 +714,35 @@ msgstr ""
588714msgid "Privacy policy"
589715msgstr ""
590716
717+#: qml/Wizard/Pages/77-system-update.qml:28
718+msgid "Update Device"
719+msgstr ""
720+
721+#: qml/Wizard/Pages/77-system-update.qml:55
722+msgid ""
723+"There is a system update available and ready to install. Afterwards, the "
724+"device will automatically restart."
725+msgstr ""
726+
727+#: qml/Wizard/Pages/77-system-update.qml:76
728+msgctxt "string identifying name of the update"
729+msgid "Ubuntu system"
730+msgstr ""
731+
732+#: qml/Wizard/Pages/77-system-update.qml:83
733+#, qt-format
734+msgctxt "version of the system update"
735+msgid "Version %1"
736+msgstr ""
737+
738+#: qml/Wizard/Pages/77-system-update.qml:102
739+msgid "This could take a few minutes..."
740+msgstr ""
741+
742+#: qml/Wizard/Pages/77-system-update.qml:116
743+msgid "Install and restart now"
744+msgstr ""
745+
591746#: qml/Wizard/Pages/80-finished.qml:89
592747msgid "Welcome to Ubuntu"
593748msgstr ""
@@ -631,7 +786,7 @@ msgid "Service Terms"
631786msgstr ""
632787
633788#: qml/Wizard/Pages/passcode-confirm.qml:43
634−#: qml/Wizard/Pages/passcode-desktop.qml:80
789+#: qml/Wizard/Pages/passcode-desktop.qml:97
635790msgid "Confirm passcode"
636791msgstr ""
637792
@@ -644,28 +799,28 @@ msgctxt "Enter the passcode again"
644799msgid "Please re-enter."
645800msgstr ""
646801
647−#: qml/Wizard/Pages/passcode-desktop.qml:30
802+#: qml/Wizard/Pages/passcode-desktop.qml:31
648803msgid "Lock Screen Passcode"
649804msgstr ""
650805
651−#: qml/Wizard/Pages/passcode-desktop.qml:56
806+#: qml/Wizard/Pages/passcode-desktop.qml:61
652807msgid "Enter 4 numbers to setup your passcode"
653808msgstr ""
654809
655−#: qml/Wizard/Pages/passcode-desktop.qml:65
810+#: qml/Wizard/Pages/passcode-desktop.qml:77
656811#: qml/Wizard/Pages/passcode-set.qml:54
657812msgid "Choose passcode"
658813msgstr ""
659814
660−#: qml/Wizard/Pages/passcode-desktop.qml:105
815+#: qml/Wizard/Pages/passcode-desktop.qml:127
661816msgid "Passcode too short"
662817msgstr ""
663818
664−#: qml/Wizard/Pages/passcode-desktop.qml:107
819+#: qml/Wizard/Pages/passcode-desktop.qml:129
665820msgid "Passcodes match"
666821msgstr ""
667822
668−#: qml/Wizard/Pages/passcode-desktop.qml:109
823+#: qml/Wizard/Pages/passcode-desktop.qml:131
669824msgid "Passcodes do not match"
670825msgstr ""
671826
@@ -673,19 +828,19 @@ msgstr ""
673828msgid "Passcode must be 4 characters long"
674829msgstr ""
675830
676−#: qml/Wizard/Pages/password-set.qml:30
831+#: qml/Wizard/Pages/password-set.qml:31
677832msgid "Lock Screen Password"
678833msgstr ""
679834
680−#: qml/Wizard/Pages/password-set.qml:61
835+#: qml/Wizard/Pages/password-set.qml:62
681836msgid "Enter at least 8 characters"
682837msgstr ""
683838
684−#: qml/Wizard/Pages/password-set.qml:73
839+#: qml/Wizard/Pages/password-set.qml:74
685840msgid "Choose password"
686841msgstr ""
687842
688−#: qml/Wizard/Pages/password-set.qml:103
843+#: qml/Wizard/Pages/password-set.qml:104
689844msgid "Confirm password"
690845msgstr ""
691846
@@ -714,26 +869,30 @@ msgid "To proceed with no SIM tap Skip."
714869msgstr ""
715870
716871#: qml/Wizard/PasswordMeter.qml:87
717−msgid "Passwords match"
872+msgid "Password too short"
718873msgstr ""
719874
720875#: qml/Wizard/PasswordMeter.qml:89
876+msgid "Passwords match"
877+msgstr ""
878+
879+#: qml/Wizard/PasswordMeter.qml:91
721880msgid "Passwords do not match"
722881msgstr ""
723882
724−#: qml/Wizard/PasswordMeter.qml:93
883+#: qml/Wizard/PasswordMeter.qml:95
725884msgid "Strong password"
726885msgstr ""
727886
728−#: qml/Wizard/PasswordMeter.qml:95
887+#: qml/Wizard/PasswordMeter.qml:97
729888msgid "Fair password"
730889msgstr ""
731890
732−#: qml/Wizard/PasswordMeter.qml:97
891+#: qml/Wizard/PasswordMeter.qml:99
733892msgid "Weak password"
734893msgstr ""
735894
736−#: qml/Wizard/PasswordMeter.qml:99
895+#: qml/Wizard/PasswordMeter.qml:101
737896msgid "Very weak password"
738897msgstr ""
739898
po/bn.po+407−202
@@ -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-27 13:54+0000\n"
10+"POT-Creation-Date: 2016-11-16 10:44+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,93 +15,75 @@ 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-06-02 06:20+0000\n"
19−"X-Generator: Launchpad (build 18053)\n"
18+"X-Launchpad-Export-Date: 2016-11-23 06:34+0000\n"
19+"X-Generator: Launchpad (build 18269)\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
39−msgid "Device Locked"
40−msgstr "ডিভাইসটি লক করা"
41−
42−#: qml/Components/DelayedLockscreen.qml:64
43−msgid "You have been locked out due to too many failed passphrase attempts."
44−msgstr "অধিকবার পাসফ্রেজ ভুল দেওয়ার কারনে আপনার আইডি লক করা হয়েছে"
45−
46−#: qml/Components/DelayedLockscreen.qml:65
47−msgid "You have been locked out due to too many failed passcode attempts."
48−msgstr "অধিকবার পাসকোড ভুল করার কারনে আপনার আইডি লক করা হয়েছে"
49−
50−#: qml/Components/DelayedLockscreen.qml:74
51−#, qt-format
52−msgid "Please wait %1 minute and then try again…"
53−msgid_plural "Please wait %1 minutes and then try again…"
54−msgstr[0] "অনুগ্রহ করে %1 মিনিট অপেক্ষা করুন এবং পরবর্তীতে চেষ্টা করুন..."
55−msgstr[1] "অনুগ্রহ করে %1 মিনিট অপেক্ষা করুন এবং পরবর্তীতে চেষ্টা করুন..."
56−
57−#: qml/Components/Dialogs.qml:144
38+#: qml/Components/Dialogs.qml:149
5839msgctxt "Title: Lock/Log out dialog"
5940msgid "Log out"
6041msgstr ""
6142
62−#: qml/Components/Dialogs.qml:145
43+#: qml/Components/Dialogs.qml:150
6344msgid "Are you sure you want to log out?"
6445msgstr "আপনি কি লগ আউট করতে চান?"
6546
66−#: qml/Components/Dialogs.qml:147
47+#: qml/Components/Dialogs.qml:152
6748msgctxt "Button: Lock the system"
6849msgid "Lock"
6950msgstr "লক করুন"
7051
71−#: qml/Components/Dialogs.qml:154
52+#: qml/Components/Dialogs.qml:159
7253msgctxt "Button: Log out from the system"
7354msgid "Log Out"
7455msgstr ""
7556
76−#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
77−#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
57+#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
58+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
59+#: qml/Wizard/Pages/passcode-confirm.qml:32
7860#: qml/Wizard/Pages/passcode-set.qml:32
7961msgid "Cancel"
8062msgstr "বাতিল"
8163
82−#: qml/Components/Dialogs.qml:173
64+#: qml/Components/Dialogs.qml:178
8365msgctxt "Title: Reboot dialog"
8466msgid "Reboot"
8567msgstr "পুনরায় চালু"
8668
87−#: qml/Components/Dialogs.qml:174
69+#: qml/Components/Dialogs.qml:179
8870msgid "Are you sure you want to reboot?"
8971msgstr "আপনি কি পুনরায় চালু করতে চান?"
9072
91−#: qml/Components/Dialogs.qml:176
73+#: qml/Components/Dialogs.qml:181
9274msgid "No"
9375msgstr "না"
9476
95−#: qml/Components/Dialogs.qml:182
77+#: qml/Components/Dialogs.qml:187
9678msgid "Yes"
9779msgstr "হ্যাঁ"
9880
99−#: qml/Components/Dialogs.qml:197
81+#: qml/Components/Dialogs.qml:202
10082msgctxt "Title: Power off/Restart dialog"
10183msgid "Power"
10284msgstr ""
10385
104−#: qml/Components/Dialogs.qml:198
86+#: qml/Components/Dialogs.qml:203
10587msgid ""
10688"Are you sure you would like\n"
10789"to power off?"
@@ -109,28 +91,198 @@ msgstr ""
10991"আপনি নিশ্চিত যে আপনি\n"
11092"বন্ধ করতে চান?"
11193
112−#: qml/Components/Dialogs.qml:200
94+#: qml/Components/Dialogs.qml:205
11395msgctxt "Button: Power off the system"
11496msgid "Power off"
11597msgstr "বন্ধ করুন"
11698
117−#: qml/Components/Dialogs.qml:209
99+#: qml/Components/Dialogs.qml:214
118100msgctxt "Button: Restart the system"
119101msgid "Restart"
120102msgstr "পুনরায় চালু"
121103
122−#: qml/Components/Lockscreen.qml:231
104+#: qml/Components/KeyboardShortcutsOverlay.qml:41
105+msgid "Keyboard Shortcuts"
106+msgstr ""
107+
108+#: qml/Components/KeyboardShortcutsOverlay.qml:55
109+msgid "Unity 8"
110+msgstr ""
111+
112+#: qml/Components/KeyboardShortcutsOverlay.qml:62
113+msgid "PrtScr"
114+msgstr ""
115+
116+#: qml/Components/KeyboardShortcutsOverlay.qml:67
117+msgid "Takes a screenshot."
118+msgstr ""
119+
120+#: qml/Components/KeyboardShortcutsOverlay.qml:75
121+msgid "Alt + PrtScr"
122+msgstr ""
123+
124+#: qml/Components/KeyboardShortcutsOverlay.qml:80
125+msgid "Takes a screenshot of a window."
126+msgstr ""
127+
128+#: qml/Components/KeyboardShortcutsOverlay.qml:88
129+msgid "Super + Space"
130+msgstr ""
131+
132+#: qml/Components/KeyboardShortcutsOverlay.qml:93
133+msgid "Switches to next keyboard layout."
134+msgstr ""
135+
136+#: qml/Components/KeyboardShortcutsOverlay.qml:101
137+msgid "Super + Shift + Space"
138+msgstr ""
139+
140+#: qml/Components/KeyboardShortcutsOverlay.qml:106
141+msgid "Switches to previous keyboard layout."
142+msgstr ""
143+
144+#: qml/Components/KeyboardShortcutsOverlay.qml:118
145+msgid "Launcher"
146+msgstr ""
147+
148+#: qml/Components/KeyboardShortcutsOverlay.qml:125
149+msgid "Super (Hold)"
150+msgstr ""
151+
152+#: qml/Components/KeyboardShortcutsOverlay.qml:130
153+msgid "Opens the launcher, displays shortcuts."
154+msgstr ""
155+
156+#: qml/Components/KeyboardShortcutsOverlay.qml:138
157+msgid "Alt + F1"
158+msgstr ""
159+
160+#: qml/Components/KeyboardShortcutsOverlay.qml:143
161+msgid "Opens launcher keyboard navigation mode."
162+msgstr ""
163+
164+#: qml/Components/KeyboardShortcutsOverlay.qml:151
165+msgid "Super + Tab"
166+msgstr ""
167+
168+#: qml/Components/KeyboardShortcutsOverlay.qml:156
169+msgid "Switches applications via the launcher."
170+msgstr ""
171+
172+#: qml/Components/KeyboardShortcutsOverlay.qml:164
173+msgid "Super + 0 to 9"
174+msgstr ""
175+
176+#: qml/Components/KeyboardShortcutsOverlay.qml:169
177+msgid "Same as clicking on a launcher icon."
178+msgstr ""
179+
180+#: qml/Components/KeyboardShortcutsOverlay.qml:181
181+msgid "Scopes"
182+msgstr ""
183+
184+#: qml/Components/KeyboardShortcutsOverlay.qml:188
185+msgid "Super (Tap)"
186+msgstr ""
187+
188+#: qml/Components/KeyboardShortcutsOverlay.qml:193
189+msgid "Opens the Scopes home."
190+msgstr ""
191+
192+#: qml/Components/KeyboardShortcutsOverlay.qml:209
193+msgid "Switching"
194+msgstr ""
195+
196+#: qml/Components/KeyboardShortcutsOverlay.qml:216
197+msgid "Alt + Tab"
198+msgstr ""
199+
200+#: qml/Components/KeyboardShortcutsOverlay.qml:221
201+msgid "Switches between applications."
202+msgstr ""
203+
204+#: qml/Components/KeyboardShortcutsOverlay.qml:229
205+msgid "Super + W"
206+msgstr ""
207+
208+#: qml/Components/KeyboardShortcutsOverlay.qml:234
209+msgid "Opens the desktop spread."
210+msgstr ""
211+
212+#: qml/Components/KeyboardShortcutsOverlay.qml:242
213+msgid "Cursor Left or Right"
214+msgstr ""
215+
216+#: qml/Components/KeyboardShortcutsOverlay.qml:247
217+msgid "Moves the focus."
218+msgstr ""
219+
220+#: qml/Components/KeyboardShortcutsOverlay.qml:259
221+msgid "Windows"
222+msgstr ""
223+
224+#: qml/Components/KeyboardShortcutsOverlay.qml:266
225+msgid "Ctrl + Super + D"
226+msgstr ""
227+
228+#: qml/Components/KeyboardShortcutsOverlay.qml:271
229+msgid "Minimizes all windows."
230+msgstr ""
231+
232+#: qml/Components/KeyboardShortcutsOverlay.qml:279
233+msgid "Ctrl + Super + Up"
234+msgstr ""
235+
236+#: qml/Components/KeyboardShortcutsOverlay.qml:284
237+msgid "Maximizes the current window."
238+msgstr ""
239+
240+#: qml/Components/KeyboardShortcutsOverlay.qml:292
241+msgid "Ctrl + Super + Down"
242+msgstr ""
243+
244+#: qml/Components/KeyboardShortcutsOverlay.qml:297
245+msgid "Minimizes or restores the current window."
246+msgstr ""
247+
248+#: qml/Components/KeyboardShortcutsOverlay.qml:305
249+msgid "Ctrl + Super + Left or Right"
250+msgstr ""
251+
252+#: qml/Components/KeyboardShortcutsOverlay.qml:310
253+msgid "Semi-maximizes the current window."
254+msgstr ""
255+
256+#: qml/Components/KeyboardShortcutsOverlay.qml:318
257+msgid "Alt + F4"
258+msgstr ""
259+
260+#: qml/Components/KeyboardShortcutsOverlay.qml:323
261+msgid "Closes the current window."
262+msgstr ""
263+
264+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
123265msgid "Return to Call"
124266msgstr "কল এ ফিরে যান"
125267
126−#: qml/Components/Lockscreen.qml:231
268+#: qml/Components/Lockscreen.qml:212
127269msgid "Emergency Call"
128270msgstr "জরুরী কল"
129271
130−#: qml/Components/Lockscreen.qml:263
272+#: qml/Components/Lockscreen.qml:244
131273msgid "OK"
132274msgstr "ঠিক আছে"
133275
276+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
277+#, qt-format
278+msgid "%1:%2:%3"
279+msgstr ""
280+
281+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
282+#, qt-format
283+msgid "%1:%2"
284+msgstr ""
285+
134286#: qml/Components/ModeSwitchWarningDialog.qml:32
135287msgid "Apps may have unsaved data:"
136288msgstr ""
@@ -157,88 +309,88 @@ msgstr ""
157309msgid "Close all"
158310msgstr ""
159311
160−#: qml/Dash/DashPageHeader.qml:333
312+#: qml/Components/SharingPicker.qml:54
313+msgid "Preview Share Item"
314+msgstr ""
315+
316+#: qml/Dash/DashPageHeader.qml:361
161317msgctxt "Button: Open the Ubuntu Store"
162318msgid "Store"
163319msgstr "স্টোর"
164320
165−#: qml/Dash/DashPageHeader.qml:340
321+#: qml/Dash/DashPageHeader.qml:368
166322msgctxt "Button: Start a search in the current dash scope"
167323msgid "Search"
168324msgstr "খুঁজুন"
169325
170−#: qml/Dash/DashPageHeader.qml:350
326+#: qml/Dash/DashPageHeader.qml:378
171327msgctxt "Button: Show the current dash scope settings"
172328msgid "Settings"
173329msgstr "সেটিংস"
174330
175−#: qml/Dash/DashPageHeader.qml:357
331+#: qml/Dash/DashPageHeader.qml:385
176332msgid "Remove from Favorites"
177333msgstr "পছন্দ থেকে মুছে ফেলুন"
178334
179−#: qml/Dash/DashPageHeader.qml:357
335+#: qml/Dash/DashPageHeader.qml:385
180336msgid "Add to Favorites"
181337msgstr "পছন্দতে যোগ করুন"
182338
183−#: qml/Dash/FiltersPopover.qml:60
339+#: qml/Dash/FiltersPopover.qml:61
184340msgid "Refine your results"
185341msgstr ""
186342
187−#: qml/Dash/FiltersPopover.qml:69
343+#: qml/Dash/FiltersPopover.qml:70
188344msgid "Reset"
189345msgstr ""
190346
191−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:774
347+#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
192348msgid "Show less"
193349msgstr ""
194350
195−#: qml/Dash/GenericScopeView.qml:579
351+#: qml/Dash/GenericScopeView.qml:545
196352msgid "Show all"
197353msgstr ""
198354
199−#: qml/Dash/GenericScopeView.qml:636
355+#: qml/Dash/GenericScopeView.qml:576
200356msgctxt "Label: Hint for dash search line edit"
201357msgid "Search"
202358msgstr "খুঁজুন"
203359
204−#: qml/Dash/PageHeaderExtraPanel.qml:56
360+#: qml/Dash/PageHeaderExtraPanel.qml:57
205361msgid "Recent Searches"
206362msgstr ""
207363
208−#: qml/Dash/PageHeaderExtraPanel.qml:67
364+#: qml/Dash/PageHeaderExtraPanel.qml:68
209365msgid "Clear All"
210366msgstr ""
211367
212−#: qml/Dash/Previews/PreviewActionCombo.qml:35
368+#: qml/Dash/Previews/PreviewActionCombo.qml:36
213369msgid "More..."
214370msgstr "আরো..."
215371
216−#: qml/Dash/Previews/PreviewActionCombo.qml:35
372+#: qml/Dash/Previews/PreviewActionCombo.qml:36
217373msgid "Less..."
218374msgstr "কম..."
219375
220−#: qml/Dash/Previews/PreviewCommentInput.qml:68
221−#: qml/Dash/Previews/PreviewRatingInput.qml:175
376+#: qml/Dash/Previews/PreviewCommentInput.qml:83
377+#: qml/Dash/Previews/PreviewRatingInput.qml:202
222378msgid "Send"
223379msgstr "পাঠান"
224380
225−#: qml/Dash/Previews/PreviewRatingInput.qml:82
381+#: qml/Dash/Previews/PreviewRatingInput.qml:109
226382msgid "Rate this"
227383msgstr "রেটিং দিন"
228384
229−#: qml/Dash/Previews/PreviewRatingInput.qml:157
385+#: qml/Dash/Previews/PreviewRatingInput.qml:184
230386msgid "Add a review"
231387msgstr "আপনার মতামত দিন"
232388
233−#: qml/Dash/Previews/PreviewSharing.qml:66
234−msgid "Preview Share Item"
235−msgstr ""
236−
237−#: qml/Dash/PullToRefreshScopeStyle.qml:55
389+#: qml/Dash/PullToRefreshScopeStyle.qml:56
238390msgid "Pull to refresh…"
239391msgstr "রিফ্রেশ করার জন্য টানুন"
240392
241−#: qml/Dash/PullToRefreshScopeStyle.qml:60
393+#: qml/Dash/PullToRefreshScopeStyle.qml:61
242394msgid "Release to refresh…"
243395msgstr "রিফ্রেশ করার জন্য ছেড়ে দিন"
244396
@@ -246,15 +398,15 @@ msgstr "রিফ্রেশ করার জন্য ছেড়ে দিন"
246398msgid "Enable location data"
247399msgstr "অবস্থান নির্ণয় চালু করুন"
248400
249−#: qml/Dash/ScopesList.qml:55
401+#: qml/Dash/ScopesList.qml:57
250402msgid "Manage"
251403msgstr "ব্যবস্থাপনা"
252404
253−#: qml/Dash/ScopesList.qml:101
405+#: qml/Dash/ScopesList.qml:104
254406msgid "Home"
255407msgstr ""
256408
257−#: qml/Dash/ScopesList.qml:102
409+#: qml/Dash/ScopesList.qml:105
258410msgid "Also installed"
259411msgstr "আরও ইন্সটল করা রয়েছে..."
260412
@@ -264,73 +416,56 @@ msgid ""
264416"touch pad to interact with the pointer."
265417msgstr ""
266418
267−#: qml/Greeter/CoverPage.qml:118
419+#: qml/Greeter/CoverPage.qml:127
268420msgid "Unlock"
269421msgstr "লক খুলুন"
270422
271−#: qml/Greeter/LoginList.qml:239
272−msgid "Retry"
273−msgstr ""
274−
275−#: qml/Greeter/LoginList.qml:240
276−msgid "Tap to unlock"
277−msgstr "লক খোলার জন্য চাপ দিন"
423+#: qml/Greeter/DelayedLockscreen.qml:43
424+msgid "Device Locked"
425+msgstr "ডিভাইসটি লক করা"
278426
279−#: qml/Greeter/NarrowView.qml:54
280−msgid "Sorry, incorrect passphrase."
281−msgstr "দুঃখিত, পাসওয়ার্ডটি ভুল হয়েছে।"
427+#: qml/Greeter/DelayedLockscreen.qml:58
428+msgid "You have been locked out due to too many failed passphrase attempts."
429+msgstr "অধিকবার পাসফ্রেজ ভুল দেওয়ার কারনে আপনার আইডি লক করা হয়েছে"
282430
283−#: qml/Greeter/NarrowView.qml:55
284−msgid "Sorry, incorrect passcode."
285−msgstr "দুঃখিত, পাসকোডটি ভুল হয়েছে।"
431+#: qml/Greeter/DelayedLockscreen.qml:59
432+msgid "You have been locked out due to too many failed passcode attempts."
433+msgstr "অধিকবার পাসকোড ভুল করার কারনে আপনার আইডি লক করা হয়েছে"
286434
287−#: qml/Greeter/NarrowView.qml:56
288−msgid "This will be your last attempt."
289−msgstr "এটিই আপনার সর্বশেষ সুযোগ।"
435+#: qml/Greeter/DelayedLockscreen.qml:68
436+#, qt-format
437+msgid "Please wait %1 minute and then try again…"
438+msgid_plural "Please wait %1 minutes and then try again…"
439+msgstr[0] "অনুগ্রহ করে %1 মিনিট অপেক্ষা করুন এবং পরবর্তীতে চেষ্টা করুন..."
440+msgstr[1] "অনুগ্রহ করে %1 মিনিট অপেক্ষা করুন এবং পরবর্তীতে চেষ্টা করুন..."
290441
291−#: qml/Greeter/NarrowView.qml:58
292−msgid ""
293−"If passphrase is entered incorrectly, your phone will conduct a factory "
294−"reset and all personal data will be deleted."
442+#: qml/Greeter/Greeter.qml:596
443+msgid "Try again"
295444msgstr ""
296−"ভুল পাসওয়ার্ড প্রদান করলে, আপনার ফোনটিতে থাকা সকল ব্যক্তিগত তথ্য মুছে যাবে।"
297−
298−#: qml/Greeter/NarrowView.qml:59
299−msgid ""
300−"If passcode is entered incorrectly, your phone will conduct a factory reset "
301−"and all personal data will be deleted."
302−msgstr "ভুল পাসকোড প্রদান করলে, আপনার ফোনটির সকল ব্যক্তিগত তথ্য মুছে যাবে।"
303−
304−#: qml/Greeter/NarrowView.qml:116
305−#, qt-format
306−msgid "Enter %1"
307−msgstr "%1 লিখুন"
308445
309−#: qml/Greeter/NarrowView.qml:117
310−msgid "Enter passphrase"
311−msgstr "পাসওয়ার্ড লিখুন"
446+#: qml/Greeter/LoginList.qml:70
447+msgid "Passphrase"
448+msgstr ""
312449
313−#: qml/Greeter/NarrowView.qml:118
314−msgid "Enter passcode"
315−msgstr "পাসকোড লিখুন"
450+#: qml/Greeter/LoginList.qml:71
451+msgid "Passcode"
452+msgstr ""
316453
317−#: qml/Greeter/NarrowView.qml:119
318−#, qt-format
319−msgid "Sorry, incorrect %1"
320−msgstr "দুঃখিত, %1 ভুল হয়েছে"
454+#: qml/Greeter/LoginList.qml:98
455+msgid "Retry"
456+msgstr ""
321457
322−#: qml/Greeter/NarrowView.qml:120
323−msgid "Sorry, incorrect passphrase"
324−msgstr "দুঃখিত, পাসওয়ার্ড ভুল হয়েছে"
458+#: qml/Greeter/LoginList.qml:99
459+msgid "Log In"
460+msgstr ""
325461
326−#: qml/Greeter/NarrowView.qml:121
327−msgctxt "passphrase"
328−msgid "Please re-enter"
329−msgstr "অনুগ্রহ করে আবার লিখুন"
462+#: qml/Greeter/NarrowView.qml:252
463+msgid "Emergency"
464+msgstr ""
330465
331−#: qml/Greeter/NarrowView.qml:122
332−msgid "Sorry, incorrect passcode"
333−msgstr "দুঃখিত, পাসকোড ভুল হয়েছে"
466+#: qml/Greeter/SessionsList.qml:122
467+msgid "Select desktop environment"
468+msgstr ""
334469
335470#: qml/Notifications/NotificationMenuItemFactory.qml:124
336471msgid "Show password"
@@ -344,62 +479,62 @@ msgstr "কলে ফিরে যেতে চাপ দিন..."
344479msgid "Conference"
345480msgstr "কনফারেন্স"
346481
347−#: qml/Panel/Indicators/MenuItemFactory.qml:762
482+#: qml/Panel/Indicators/MenuItemFactory.qml:847
348483msgid "Nothing is playing"
349484msgstr "কোন কিছু বাজছে না।"
350485
351−#: qml/Panel/Indicators/MenuItemFactory.qml:891
486+#: qml/Panel/Indicators/MenuItemFactory.qml:975
352487#, qt-format
353488msgid "%1 hour"
354489msgid_plural "%1 hours"
355490msgstr[0] "%1 ঘণ্টা"
356491msgstr[1] "%1 ঘণ্টা"
357492
358−#: qml/Panel/Indicators/MenuItemFactory.qml:895
493+#: qml/Panel/Indicators/MenuItemFactory.qml:979
359494#, qt-format
360495msgid "%1 minute"
361496msgid_plural "%1 minutes"
362497msgstr[0] "%1 মিনিট"
363498msgstr[1] "%1 মিনিট"
364499
365−#: qml/Panel/Indicators/MenuItemFactory.qml:900
500+#: qml/Panel/Indicators/MenuItemFactory.qml:984
366501#, qt-format
367502msgid "%1 second"
368503msgid_plural "%1 seconds"
369504msgstr[0] "%1 সেকেন্ড"
370505msgstr[1] "%1 সেকেন্ড"
371506
372−#: qml/Panel/Indicators/MenuItemFactory.qml:903
507+#: qml/Panel/Indicators/MenuItemFactory.qml:987
373508msgid "0 seconds"
374509msgstr "0 সেকেন্ড"
375510
376511#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
377−#: qml/Panel/Indicators/MenuItemFactory.qml:905
512+#: qml/Panel/Indicators/MenuItemFactory.qml:989
378513#, qt-format
379514msgid "%1 remaining"
380515msgstr "%1 বাকি"
381516
382−#: qml/Panel/Indicators/MenuItemFactory.qml:911
517+#: qml/Panel/Indicators/MenuItemFactory.qml:995
383518msgid "In queue…"
384519msgstr "অপেক্ষায় রয়েছে..."
385520
386−#: qml/Panel/Indicators/MenuItemFactory.qml:915
521+#: qml/Panel/Indicators/MenuItemFactory.qml:999
387522msgid "Downloading"
388523msgstr "ডাউনলোড হচ্ছে"
389524
390−#: qml/Panel/Indicators/MenuItemFactory.qml:917
525+#: qml/Panel/Indicators/MenuItemFactory.qml:1001
391526msgid "Paused, tap to resume"
392527msgstr "থামানো, শুরু করতে চাপ দিন"
393528
394−#: qml/Panel/Indicators/MenuItemFactory.qml:919
529+#: qml/Panel/Indicators/MenuItemFactory.qml:1003
395530msgid "Canceled"
396531msgstr "বাতিল হয়েছে"
397532
398−#: qml/Panel/Indicators/MenuItemFactory.qml:921
533+#: qml/Panel/Indicators/MenuItemFactory.qml:1005
399534msgid "Finished"
400535msgstr "শেষ"
401536
402−#: qml/Panel/Indicators/MenuItemFactory.qml:923
537+#: qml/Panel/Indicators/MenuItemFactory.qml:1007
403538msgid "Failed, tap to retry"
404539msgstr "ব্যার্থ হয়েছে, পুনরায় চেষ্টা করতে চাপ দিন"
405540
@@ -419,36 +554,16 @@ msgctxt "Button: Call back on phone"
419554msgid "Call back"
420555msgstr "কল ব্যাক"
421556
422−#: qml/Stages/SideStage.qml:76
557+#: qml/Stage/SideStage.qml:76
423558msgid "Drag using 3 fingers any application from one window to the other"
424559msgstr ""
425560
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
561+#: qml/Tutorial/TutorialLeftLong.qml:49
447562msgid "Long swipe from the left edge to open the Today scope"
448563msgstr ""
449564
450565#: qml/Tutorial/TutorialLeft.qml:47
451−msgid "Swipe from the left edge to open the launcher"
566+msgid "Short swipe from the left edge to open the launcher"
452567msgstr ""
453568
454569#: qml/Tutorial/TutorialRight.qml:55
@@ -456,15 +571,11 @@ msgid "Push your mouse against the right edge to view your open apps"
456571msgstr ""
457572
458573#: qml/Tutorial/TutorialRight.qml:56
459−msgid "Short or long swipe from the right edge to view your open apps"
574+msgid "Swipe from the right edge to view your open apps"
460575msgstr ""
461576
462577#: 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"
578+msgid "Swipe from the top edge to access notifications and quick settings"
468579msgstr ""
469580
470581#: qml/Wizard/Page.qml:54
@@ -472,40 +583,54 @@ msgctxt "Button: Go back one page in the Wizard"
472583msgid "Back"
473584msgstr ""
474585
475−#: qml/Wizard/Pages/10-welcome.qml:27
586+#: qml/Wizard/Pages/10-welcome.qml:28
476587msgid "Language"
477588msgstr ""
478589
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:270
481−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
590+#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
591+#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
592+#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
593+#: qml/Wizard/Pages/70-passwd-type.qml:145
482594#: qml/Wizard/Pages/75-report-check.qml:84
483−#: qml/Wizard/Pages/passcode-desktop.qml:124
484−#: qml/Wizard/Pages/password-set.qml:141
595+#: qml/Wizard/Pages/passcode-desktop.qml:142
596+#: qml/Wizard/Pages/password-set.qml:142
485597msgid "Next"
486598msgstr ""
487599
488−#: qml/Wizard/Pages/30-wifi.qml:29
600+#: qml/Wizard/Pages/20-keyboard.qml:31
601+msgid "Select Keyboard"
602+msgstr ""
603+
604+#: qml/Wizard/Pages/20-keyboard.qml:71
605+msgid "Keyboard language"
606+msgstr ""
607+
608+#: qml/Wizard/Pages/20-keyboard.qml:93
609+msgid "Keyboard layout"
610+msgstr ""
611+
612+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
613+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
614+#: qml/Wizard/Pages/sim.qml:101
615+msgid "Skip"
616+msgstr "এড়িয়ে যান"
617+
618+#: qml/Wizard/Pages/30-wifi.qml:31
489619msgid "Connect to Wi‑Fi"
490620msgstr ""
491621
492−#: qml/Wizard/Pages/30-wifi.qml:130
622+#: qml/Wizard/Pages/30-wifi.qml:132
493623msgid "Connected"
494624msgstr ""
495625
496−#: qml/Wizard/Pages/30-wifi.qml:163
626+#: qml/Wizard/Pages/30-wifi.qml:165
497627msgid "Available Wi-Fi networks"
498628msgstr ""
499629
500−#: qml/Wizard/Pages/30-wifi.qml:164
630+#: qml/Wizard/Pages/30-wifi.qml:166
501631msgid "No available Wi-Fi networks"
502632msgstr ""
503633
504−#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
505−#: qml/Wizard/Pages/sim.qml:101
506−msgid "Skip"
507−msgstr "এড়িয়ে যান"
508−
509634#: qml/Wizard/Pages/40-location.qml:27
510635msgid "Location Services"
511636msgstr ""
@@ -538,11 +663,11 @@ msgstr ""
538663msgid "You can change it later in System Settings."
539664msgstr ""
540665
541−#: qml/Wizard/Pages/50-timezone.qml:29
666+#: qml/Wizard/Pages/50-timezone.qml:30
542667msgid "Time Zone"
543668msgstr ""
544669
545−#: qml/Wizard/Pages/50-timezone.qml:181
670+#: qml/Wizard/Pages/50-timezone.qml:182
546671msgid "Enter your city"
547672msgstr ""
548673
@@ -554,21 +679,21 @@ msgstr ""
554679msgid "Preferred Name"
555680msgstr ""
556681
557−#: qml/Wizard/Pages/70-passwd-type.qml:39
682+#: qml/Wizard/Pages/70-passwd-type.qml:40
558683msgid "Lock Screen"
559684msgstr ""
560685
561−#: qml/Wizard/Pages/70-passwd-type.qml:101
686+#: qml/Wizard/Pages/70-passwd-type.qml:102
562687msgctxt "Label: Type of security method"
563688msgid "Create new password"
564689msgstr ""
565690
566−#: qml/Wizard/Pages/70-passwd-type.qml:103
691+#: qml/Wizard/Pages/70-passwd-type.qml:104
567692msgctxt "Label: Type of security method"
568693msgid "Create passcode (numbers only)"
569694msgstr ""
570695
571−#: qml/Wizard/Pages/70-passwd-type.qml:105
696+#: qml/Wizard/Pages/70-passwd-type.qml:106
572697msgctxt "Label: Type of security method"
573698msgid "No lock code"
574699msgstr ""
@@ -589,6 +714,35 @@ msgstr ""
589714msgid "Privacy policy"
590715msgstr ""
591716
717+#: qml/Wizard/Pages/77-system-update.qml:28
718+msgid "Update Device"
719+msgstr ""
720+
721+#: qml/Wizard/Pages/77-system-update.qml:55
722+msgid ""
723+"There is a system update available and ready to install. Afterwards, the "
724+"device will automatically restart."
725+msgstr ""
726+
727+#: qml/Wizard/Pages/77-system-update.qml:76
728+msgctxt "string identifying name of the update"
729+msgid "Ubuntu system"
730+msgstr ""
731+
732+#: qml/Wizard/Pages/77-system-update.qml:83
733+#, qt-format
734+msgctxt "version of the system update"
735+msgid "Version %1"
736+msgstr ""
737+
738+#: qml/Wizard/Pages/77-system-update.qml:102
739+msgid "This could take a few minutes..."
740+msgstr ""
741+
742+#: qml/Wizard/Pages/77-system-update.qml:116
743+msgid "Install and restart now"
744+msgstr ""
745+
592746#: qml/Wizard/Pages/80-finished.qml:89
593747msgid "Welcome to Ubuntu"
594748msgstr ""
@@ -632,7 +786,7 @@ msgid "Service Terms"
632786msgstr ""
633787
634788#: qml/Wizard/Pages/passcode-confirm.qml:43
635−#: qml/Wizard/Pages/passcode-desktop.qml:80
789+#: qml/Wizard/Pages/passcode-desktop.qml:97
636790msgid "Confirm passcode"
637791msgstr ""
638792
@@ -645,28 +799,28 @@ msgctxt "Enter the passcode again"
645799msgid "Please re-enter."
646800msgstr ""
647801
648−#: qml/Wizard/Pages/passcode-desktop.qml:30
802+#: qml/Wizard/Pages/passcode-desktop.qml:31
649803msgid "Lock Screen Passcode"
650804msgstr ""
651805
652−#: qml/Wizard/Pages/passcode-desktop.qml:56
806+#: qml/Wizard/Pages/passcode-desktop.qml:61
653807msgid "Enter 4 numbers to setup your passcode"
654808msgstr ""
655809
656−#: qml/Wizard/Pages/passcode-desktop.qml:65
810+#: qml/Wizard/Pages/passcode-desktop.qml:77
657811#: qml/Wizard/Pages/passcode-set.qml:54
658812msgid "Choose passcode"
659813msgstr ""
660814
661−#: qml/Wizard/Pages/passcode-desktop.qml:105
815+#: qml/Wizard/Pages/passcode-desktop.qml:127
662816msgid "Passcode too short"
663817msgstr ""
664818
665−#: qml/Wizard/Pages/passcode-desktop.qml:107
819+#: qml/Wizard/Pages/passcode-desktop.qml:129
666820msgid "Passcodes match"
667821msgstr ""
668822
669−#: qml/Wizard/Pages/passcode-desktop.qml:109
823+#: qml/Wizard/Pages/passcode-desktop.qml:131
670824msgid "Passcodes do not match"
671825msgstr ""
672826
@@ -674,19 +828,19 @@ msgstr ""
674828msgid "Passcode must be 4 characters long"
675829msgstr ""
676830
677−#: qml/Wizard/Pages/password-set.qml:30
831+#: qml/Wizard/Pages/password-set.qml:31
678832msgid "Lock Screen Password"
679833msgstr ""
680834
681−#: qml/Wizard/Pages/password-set.qml:61
835+#: qml/Wizard/Pages/password-set.qml:62
682836msgid "Enter at least 8 characters"
683837msgstr ""
684838
685−#: qml/Wizard/Pages/password-set.qml:73
839+#: qml/Wizard/Pages/password-set.qml:74
686840msgid "Choose password"
687841msgstr ""
688842
689−#: qml/Wizard/Pages/password-set.qml:103
843+#: qml/Wizard/Pages/password-set.qml:104
690844msgid "Confirm password"
691845msgstr ""
692846
@@ -715,26 +869,30 @@ msgid "To proceed with no SIM tap Skip."
715869msgstr ""
716870
717871#: qml/Wizard/PasswordMeter.qml:87
718−msgid "Passwords match"
872+msgid "Password too short"
719873msgstr ""
720874
721875#: qml/Wizard/PasswordMeter.qml:89
876+msgid "Passwords match"
877+msgstr ""
878+
879+#: qml/Wizard/PasswordMeter.qml:91
722880msgid "Passwords do not match"
723881msgstr ""
724882
725−#: qml/Wizard/PasswordMeter.qml:93
883+#: qml/Wizard/PasswordMeter.qml:95
726884msgid "Strong password"
727885msgstr ""
728886
729−#: qml/Wizard/PasswordMeter.qml:95
887+#: qml/Wizard/PasswordMeter.qml:97
730888msgid "Fair password"
731889msgstr ""
732890
733−#: qml/Wizard/PasswordMeter.qml:97
891+#: qml/Wizard/PasswordMeter.qml:99
734892msgid "Weak password"
735893msgstr ""
736894
737−#: qml/Wizard/PasswordMeter.qml:99
895+#: qml/Wizard/PasswordMeter.qml:101
738896msgid "Very weak password"
739897msgstr ""
740898
@@ -748,6 +906,19 @@ msgstr ""
748906#~ msgid "See less"
749907#~ msgstr "কম দেখুন"
750908
909+#~ msgid "Sorry, incorrect passcode."
910+#~ msgstr "দুঃখিত, পাসকোডটি ভুল হয়েছে।"
911+
912+#~ msgid "This will be your last attempt."
913+#~ msgstr "এটিই আপনার সর্বশেষ সুযোগ।"
914+
915+#, qt-format
916+#~ msgid "Sorry, incorrect %1"
917+#~ msgstr "দুঃখিত, %1 ভুল হয়েছে"
918+
919+#~ msgid "Sorry, incorrect passcode"
920+#~ msgstr "দুঃখিত, পাসকোড ভুল হয়েছে"
921+
751922#~ msgid "This action does different things for different apps"
752923#~ msgstr "এই কাজটি বিভিন্ন অ্যাপের জন্য ভিন্ন ভিন্ন ভাবে কাজ করে।"
753924
@@ -849,9 +1020,36 @@ msgstr ""
8491020#~ msgid "Roaming"
8501021#~ msgstr "রোমিং"
8511022
1023+#~ msgid "Enter passphrase"
1024+#~ msgstr "পাসওয়ার্ড লিখুন"
1025+
1026+#~ msgid "Sorry, incorrect passphrase"
1027+#~ msgstr "দুঃখিত, পাসওয়ার্ড ভুল হয়েছে"
1028+
1029+#, qt-format
1030+#~ msgid "Enter %1"
1031+#~ msgstr "%1 লিখুন"
1032+
1033+#~ msgid "Sorry, incorrect passphrase."
1034+#~ msgstr "দুঃখিত, পাসওয়ার্ডটি ভুল হয়েছে।"
1035+
8521036#~ msgid "Please re-enter"
8531037#~ msgstr "অনুগ্রহ করে আবার লিখুন"
8541038
1039+#~ msgid "Enter passcode"
1040+#~ msgstr "পাসকোড লিখুন"
1041+
1042+#~ msgid ""
1043+#~ "If passcode is entered incorrectly, your phone will conduct a factory reset "
1044+#~ "and all personal data will be deleted."
1045+#~ msgstr "ভুল পাসকোড প্রদান করলে, আপনার ফোনটির সকল ব্যক্তিগত তথ্য মুছে যাবে।"
1046+
1047+#~ msgid ""
1048+#~ "If passphrase is entered incorrectly, your phone will conduct a factory "
1049+#~ "reset and all personal data will be deleted."
1050+#~ msgstr ""
1051+#~ "ভুল পাসওয়ার্ড প্রদান করলে, আপনার ফোনটিতে থাকা সকল ব্যক্তিগত তথ্য মুছে যাবে।"
1052+
8551053#~ msgctxt "Button: Shut down the system"
8561054#~ msgid "Shut down"
8571055#~ msgstr "বন্ধ করুন"
@@ -860,6 +1058,13 @@ msgstr ""
8601058#~ msgid "Shut down"
8611059#~ msgstr "বন্ধ করুন"
8621060
1061+#~ msgid "Tap to unlock"
1062+#~ msgstr "লক খোলার জন্য চাপ দিন"
1063+
1064+#~ msgctxt "passphrase"
1065+#~ msgid "Please re-enter"
1066+#~ msgstr "অনুগ্রহ করে আবার লিখুন"
1067+
8631068#~ msgid "Let’s get started."
8641069#~ msgstr "আসুন শুরু করা যাক।"
8651070
po/br.po+426−214
@@ -7,105 +7,83 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-05-27 13:54+0000\n"
11−"PO-Revision-Date: 2016-04-27 12:20+0000\n"
10+"POT-Creation-Date: 2016-11-16 10:44+0000\n"
11+"PO-Revision-Date: 2016-08-29 11:37+0000\n"
1212"Last-Translator: Fohanno Thierry <thierry.fohanno@ofis-bzh.org>\n"
1313"Language-Team: Breton <br@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2016-06-02 06:20+0000\n"
19−"X-Generator: Launchpad (build 18053)\n"
18+"X-Launchpad-Export-Date: 2016-11-23 06:34+0000\n"
19+"X-Generator: Launchpad (build 18269)\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
39−msgid "Device Locked"
40−msgstr "Benveg prennet"
41−
42−#: qml/Components/DelayedLockscreen.qml:64
43−msgid "You have been locked out due to too many failed passphrase attempts."
44−msgstr ""
45−"Prennet eo bet ho penveg abalamour da re a daolioù-esae c'hwitet evit merkañ "
46−"ho frazenn-dremen."
47−
48−#: qml/Components/DelayedLockscreen.qml:65
49−msgid "You have been locked out due to too many failed passcode attempts."
50−msgstr ""
51−"Prennet eo bet ho penveg abalamour da re a daolioù-esae evit merkañ ho kod-"
52−"tremen."
53−
54−#: qml/Components/DelayedLockscreen.qml:74
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] "Gortozit %1 vunutenn, mar plij, hag esaeit en-dro..."
59−msgstr[1] "Gortozit %1 a vunutoù, mar plij, hag esaeit en-dro..."
60−
61−#: qml/Components/Dialogs.qml:144
38+#: qml/Components/Dialogs.qml:149
6239msgctxt "Title: Lock/Log out dialog"
6340msgid "Log out"
6441msgstr "Digevreañ"
6542
66−#: qml/Components/Dialogs.qml:145
43+#: qml/Components/Dialogs.qml:150
6744msgid "Are you sure you want to log out?"
6845msgstr "Ha sur oc'h e fell deoc'h digevreañ ?"
6946
70−#: qml/Components/Dialogs.qml:147
47+#: qml/Components/Dialogs.qml:152
7148msgctxt "Button: Lock the system"
7249msgid "Lock"
7350msgstr "Prennañ"
7451
75−#: qml/Components/Dialogs.qml:154
52+#: qml/Components/Dialogs.qml:159
7653msgctxt "Button: Log out from the system"
7754msgid "Log Out"
7855msgstr "Digevreañ"
7956
80−#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
81−#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
57+#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
58+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
59+#: qml/Wizard/Pages/passcode-confirm.qml:32
8260#: qml/Wizard/Pages/passcode-set.qml:32
8361msgid "Cancel"
8462msgstr "Nullañ"
8563
86−#: qml/Components/Dialogs.qml:173
64+#: qml/Components/Dialogs.qml:178
8765msgctxt "Title: Reboot dialog"
8866msgid "Reboot"
8967msgstr "Adloc'hañ"
9068
91−#: qml/Components/Dialogs.qml:174
69+#: qml/Components/Dialogs.qml:179
9270msgid "Are you sure you want to reboot?"
9371msgstr "Ha sur oc'h e fell deoc'h adloc'hañ ?"
9472
95−#: qml/Components/Dialogs.qml:176
73+#: qml/Components/Dialogs.qml:181
9674msgid "No"
9775msgstr "N'on ket"
9876
99−#: qml/Components/Dialogs.qml:182
77+#: qml/Components/Dialogs.qml:187
10078msgid "Yes"
10179msgstr "Ya"
10280
103−#: qml/Components/Dialogs.qml:197
81+#: qml/Components/Dialogs.qml:202
10482msgctxt "Title: Power off/Restart dialog"
10583msgid "Power"
10684msgstr "Enaouiñ"
10785
108−#: qml/Components/Dialogs.qml:198
86+#: qml/Components/Dialogs.qml:203
10987msgid ""
11088"Are you sure you would like\n"
11189"to power off?"
@@ -113,28 +91,198 @@ msgstr ""
11391"Ha sur oc'h e fell deoc'h\n"
11492"troc'hañ an tredan ?"
11593
116−#: qml/Components/Dialogs.qml:200
94+#: qml/Components/Dialogs.qml:205
11795msgctxt "Button: Power off the system"
11896msgid "Power off"
11997msgstr "Lazhañ"
12098
121−#: qml/Components/Dialogs.qml:209
99+#: qml/Components/Dialogs.qml:214
122100msgctxt "Button: Restart the system"
123101msgid "Restart"
124102msgstr "Adloc'hañ"
125103
126−#: qml/Components/Lockscreen.qml:231
104+#: qml/Components/KeyboardShortcutsOverlay.qml:41
105+msgid "Keyboard Shortcuts"
106+msgstr "Berradennoù klavier"
107+
108+#: qml/Components/KeyboardShortcutsOverlay.qml:55
109+msgid "Unity 8"
110+msgstr "Unity 8"
111+
112+#: qml/Components/KeyboardShortcutsOverlay.qml:62
113+msgid "PrtScr"
114+msgstr "Moulsk"
115+
116+#: qml/Components/KeyboardShortcutsOverlay.qml:67
117+msgid "Takes a screenshot."
118+msgstr "Tapout ur skeudenn eus ar skramm"
119+
120+#: qml/Components/KeyboardShortcutsOverlay.qml:75
121+msgid "Alt + PrtScr"
122+msgstr ""
123+
124+#: qml/Components/KeyboardShortcutsOverlay.qml:80
125+msgid "Takes a screenshot of a window."
126+msgstr "Tapout ur skeudenn eus ur prenestr"
127+
128+#: qml/Components/KeyboardShortcutsOverlay.qml:88
129+msgid "Super + Space"
130+msgstr ""
131+
132+#: qml/Components/KeyboardShortcutsOverlay.qml:93
133+msgid "Switches to next keyboard layout."
134+msgstr ""
135+
136+#: qml/Components/KeyboardShortcutsOverlay.qml:101
137+msgid "Super + Shift + Space"
138+msgstr ""
139+
140+#: qml/Components/KeyboardShortcutsOverlay.qml:106
141+msgid "Switches to previous keyboard layout."
142+msgstr ""
143+
144+#: qml/Components/KeyboardShortcutsOverlay.qml:118
145+msgid "Launcher"
146+msgstr "Lañser"
147+
148+#: qml/Components/KeyboardShortcutsOverlay.qml:125
149+msgid "Super (Hold)"
150+msgstr ""
151+
152+#: qml/Components/KeyboardShortcutsOverlay.qml:130
153+msgid "Opens the launcher, displays shortcuts."
154+msgstr "Digeriñ al lañser, diskouez ar berradurioù"
155+
156+#: qml/Components/KeyboardShortcutsOverlay.qml:138
157+msgid "Alt + F1"
158+msgstr "Erl + F1"
159+
160+#: qml/Components/KeyboardShortcutsOverlay.qml:143
161+msgid "Opens launcher keyboard navigation mode."
162+msgstr ""
163+
164+#: qml/Components/KeyboardShortcutsOverlay.qml:151
165+msgid "Super + Tab"
166+msgstr ""
167+
168+#: qml/Components/KeyboardShortcutsOverlay.qml:156
169+msgid "Switches applications via the launcher."
170+msgstr ""
171+
172+#: qml/Components/KeyboardShortcutsOverlay.qml:164
173+msgid "Super + 0 to 9"
174+msgstr ""
175+
176+#: qml/Components/KeyboardShortcutsOverlay.qml:169
177+msgid "Same as clicking on a launcher icon."
178+msgstr "Ar memes tra ha klikañ war un arlun lañser"
179+
180+#: qml/Components/KeyboardShortcutsOverlay.qml:181
181+msgid "Scopes"
182+msgstr "Kefluskerioù enklask"
183+
184+#: qml/Components/KeyboardShortcutsOverlay.qml:188
185+msgid "Super (Tap)"
186+msgstr ""
187+
188+#: qml/Components/KeyboardShortcutsOverlay.qml:193
189+msgid "Opens the Scopes home."
190+msgstr "Digeriñ pajenn degemer ar c'hefluskerioù enklask."
191+
192+#: qml/Components/KeyboardShortcutsOverlay.qml:209
193+msgid "Switching"
194+msgstr "Cheñch"
195+
196+#: qml/Components/KeyboardShortcutsOverlay.qml:216
197+msgid "Alt + Tab"
198+msgstr "Erl + Taolenn"
199+
200+#: qml/Components/KeyboardShortcutsOverlay.qml:221
201+msgid "Switches between applications."
202+msgstr ""
203+
204+#: qml/Components/KeyboardShortcutsOverlay.qml:229
205+msgid "Super + W"
206+msgstr ""
207+
208+#: qml/Components/KeyboardShortcutsOverlay.qml:234
209+msgid "Opens the desktop spread."
210+msgstr ""
211+
212+#: qml/Components/KeyboardShortcutsOverlay.qml:242
213+msgid "Cursor Left or Right"
214+msgstr ""
215+
216+#: qml/Components/KeyboardShortcutsOverlay.qml:247
217+msgid "Moves the focus."
218+msgstr ""
219+
220+#: qml/Components/KeyboardShortcutsOverlay.qml:259
221+msgid "Windows"
222+msgstr "Windows"
223+
224+#: qml/Components/KeyboardShortcutsOverlay.qml:266
225+msgid "Ctrl + Super + D"
226+msgstr ""
227+
228+#: qml/Components/KeyboardShortcutsOverlay.qml:271
229+msgid "Minimizes all windows."
230+msgstr "Bihanaat an holl brenestroù."
231+
232+#: qml/Components/KeyboardShortcutsOverlay.qml:279
233+msgid "Ctrl + Super + Up"
234+msgstr ""
235+
236+#: qml/Components/KeyboardShortcutsOverlay.qml:284
237+msgid "Maximizes the current window."
238+msgstr ""
239+
240+#: qml/Components/KeyboardShortcutsOverlay.qml:292
241+msgid "Ctrl + Super + Down"
242+msgstr ""
243+
244+#: qml/Components/KeyboardShortcutsOverlay.qml:297
245+msgid "Minimizes or restores the current window."
246+msgstr ""
247+
248+#: qml/Components/KeyboardShortcutsOverlay.qml:305
249+msgid "Ctrl + Super + Left or Right"
250+msgstr ""
251+
252+#: qml/Components/KeyboardShortcutsOverlay.qml:310
253+msgid "Semi-maximizes the current window."
254+msgstr ""
255+
256+#: qml/Components/KeyboardShortcutsOverlay.qml:318
257+msgid "Alt + F4"
258+msgstr "Erl + F4"
259+
260+#: qml/Components/KeyboardShortcutsOverlay.qml:323
261+msgid "Closes the current window."
262+msgstr ""
263+
264+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
127265msgid "Return to Call"
128266msgstr "Distreiñ d'ar bellgomzadenn"
129267
130−#: qml/Components/Lockscreen.qml:231
268+#: qml/Components/Lockscreen.qml:212
131269msgid "Emergency Call"
132270msgstr "Pellgomzadenn vallus"
133271
134−#: qml/Components/Lockscreen.qml:263
272+#: qml/Components/Lockscreen.qml:244
135273msgid "OK"
136274msgstr "Mat eo"
137275
276+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
277+#, qt-format
278+msgid "%1:%2:%3"
279+msgstr "%1:%2:%3"
280+
281+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
282+#, qt-format
283+msgid "%1:%2"
284+msgstr "%1:%2"
285+
138286#: qml/Components/ModeSwitchWarningDialog.qml:32
139287msgid "Apps may have unsaved data:"
140288msgstr "Roadennoù ha n'int ket enrollet a c'hall bezañ gant an arloadoù :"
@@ -164,88 +312,88 @@ msgstr "Adkevreañ bremañ !"
164312msgid "Close all"
165313msgstr "Serriñ pep tra"
166314
167−#: qml/Dash/DashPageHeader.qml:333
315+#: qml/Components/SharingPicker.qml:54
316+msgid "Preview Share Item"
317+msgstr "Rakwelet an elfenn lodet"
318+
319+#: qml/Dash/DashPageHeader.qml:361
168320msgctxt "Button: Open the Ubuntu Store"
169321msgid "Store"
170322msgstr "Stal"
171323
172−#: qml/Dash/DashPageHeader.qml:340
324+#: qml/Dash/DashPageHeader.qml:368
173325msgctxt "Button: Start a search in the current dash scope"
174326msgid "Search"
175327msgstr "Klask"
176328
177−#: qml/Dash/DashPageHeader.qml:350
329+#: qml/Dash/DashPageHeader.qml:378
178330msgctxt "Button: Show the current dash scope settings"
179331msgid "Settings"
180332msgstr "Arventennoù"
181333
182−#: qml/Dash/DashPageHeader.qml:357
334+#: qml/Dash/DashPageHeader.qml:385
183335msgid "Remove from Favorites"
184336msgstr "Lemel eus ar sinedoù"
185337
186−#: qml/Dash/DashPageHeader.qml:357
338+#: qml/Dash/DashPageHeader.qml:385
187339msgid "Add to Favorites"
188340msgstr "Ouzhpennañ d'ar sinedoù"
189341
190−#: qml/Dash/FiltersPopover.qml:60
342+#: qml/Dash/FiltersPopover.qml:61
191343msgid "Refine your results"
192344msgstr "Purañ ho tisoc'hoù"
193345
194−#: qml/Dash/FiltersPopover.qml:69
346+#: qml/Dash/FiltersPopover.qml:70
195347msgid "Reset"
196348msgstr "Adderaouekaat"
197349
198−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:774
350+#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
199351msgid "Show less"
200−msgstr ""
352+msgstr "Diskouez nebeutoc'h"
201353
202−#: qml/Dash/GenericScopeView.qml:579
354+#: qml/Dash/GenericScopeView.qml:545
203355msgid "Show all"
204−msgstr ""
356+msgstr "Diskouez pep tra"
205357
206−#: qml/Dash/GenericScopeView.qml:636
358+#: qml/Dash/GenericScopeView.qml:576
207359msgctxt "Label: Hint for dash search line edit"
208360msgid "Search"
209361msgstr "Klask"
210362
211−#: qml/Dash/PageHeaderExtraPanel.qml:56
363+#: qml/Dash/PageHeaderExtraPanel.qml:57
212364msgid "Recent Searches"
213365msgstr "Enklaskoù graet nevez zo"
214366
215−#: qml/Dash/PageHeaderExtraPanel.qml:67
367+#: qml/Dash/PageHeaderExtraPanel.qml:68
216368msgid "Clear All"
217369msgstr "Diverkañ pep tra"
218370
219−#: qml/Dash/Previews/PreviewActionCombo.qml:35
371+#: qml/Dash/Previews/PreviewActionCombo.qml:36
220372msgid "More..."
221373msgstr "Muioc'h..."
222374
223−#: qml/Dash/Previews/PreviewActionCombo.qml:35
375+#: qml/Dash/Previews/PreviewActionCombo.qml:36
224376msgid "Less..."
225377msgstr "Nebeutoc'h..."
226378
227−#: qml/Dash/Previews/PreviewCommentInput.qml:68
228−#: qml/Dash/Previews/PreviewRatingInput.qml:175
379+#: qml/Dash/Previews/PreviewCommentInput.qml:83
380+#: qml/Dash/Previews/PreviewRatingInput.qml:202
229381msgid "Send"
230382msgstr "Kas"
231383
232−#: qml/Dash/Previews/PreviewRatingInput.qml:82
384+#: qml/Dash/Previews/PreviewRatingInput.qml:109
233385msgid "Rate this"
234386msgstr "Priziit an dra-mañ"
235387
236−#: qml/Dash/Previews/PreviewRatingInput.qml:157
388+#: qml/Dash/Previews/PreviewRatingInput.qml:184
237389msgid "Add a review"
238390msgstr "Ouzhpennañ un ali"
239391
240−#: qml/Dash/Previews/PreviewSharing.qml:66
241−msgid "Preview Share Item"
242−msgstr "Rakwelet an elfenn lodet"
243−
244−#: qml/Dash/PullToRefreshScopeStyle.qml:55
392+#: qml/Dash/PullToRefreshScopeStyle.qml:56
245393msgid "Pull to refresh…"
246394msgstr "Tennañ evit freskaat..."
247395
248−#: qml/Dash/PullToRefreshScopeStyle.qml:60
396+#: qml/Dash/PullToRefreshScopeStyle.qml:61
249397msgid "Release to refresh…"
250398msgstr "Lezel da vont evit freskaat..."
251399
@@ -253,15 +401,15 @@ msgstr "Lezel da vont evit freskaat..."
253401msgid "Enable location data"
254402msgstr "Gweredekaat ar roadennoù lec'hiañ"
255403
256−#: qml/Dash/ScopesList.qml:55
404+#: qml/Dash/ScopesList.qml:57
257405msgid "Manage"
258406msgstr "Merañ"
259407
260−#: qml/Dash/ScopesList.qml:101
408+#: qml/Dash/ScopesList.qml:104
261409msgid "Home"
262410msgstr "Er gêr"
263411
264−#: qml/Dash/ScopesList.qml:102
412+#: qml/Dash/ScopesList.qml:105
265413msgid "Also installed"
266414msgstr "Staliet ivez"
267415
@@ -271,76 +419,60 @@ msgid ""
271419"touch pad to interact with the pointer."
272420msgstr ""
273421
274−#: qml/Greeter/CoverPage.qml:118
422+#: qml/Greeter/CoverPage.qml:127
275423msgid "Unlock"
276424msgstr "Dibrennañ"
277425
278−#: qml/Greeter/LoginList.qml:239
279−msgid "Retry"
280−msgstr "Esaeañ en-dro"
281−
282−#: qml/Greeter/LoginList.qml:240
283−msgid "Tap to unlock"
284−msgstr "Pouezañ evit dibrennañ"
285−
286−#: qml/Greeter/NarrowView.qml:54
287−msgid "Sorry, incorrect passphrase."
288−msgstr "Siwazh, frazenn-dremen direizh"
289−
290−#: qml/Greeter/NarrowView.qml:55
291−msgid "Sorry, incorrect passcode."
292−msgstr "Siwazh, kod-tremen direizh"
293−
294−#: qml/Greeter/NarrowView.qml:56
295−msgid "This will be your last attempt."
296−msgstr "Ho taol-esae diwezhañ e vo."
426+#: qml/Greeter/DelayedLockscreen.qml:43
427+msgid "Device Locked"
428+msgstr "Benveg prennet"
297429
298−#: qml/Greeter/NarrowView.qml:58
299−msgid ""
300−"If passphrase is entered incorrectly, your phone will conduct a factory "
301−"reset and all personal data will be deleted."
430+#: qml/Greeter/DelayedLockscreen.qml:58
431+msgid "You have been locked out due to too many failed passphrase attempts."
302432msgstr ""
303−"Ma vez ebarzhet ur frazenn-dremen direizh, e vo adderaouekaet ho pellgomzer "
304−"gant arventennoù al labouradeg hag e vo diverket an holl roadennoù personel"
433+"Prennet eo bet ho penveg abalamour da re a daolioù-esae c'hwitet evit merkañ "
434+"ho frazenn-dremen."
305435
306−#: qml/Greeter/NarrowView.qml:59
307−msgid ""
308−"If passcode is entered incorrectly, your phone will conduct a factory reset "
309−"and all personal data will be deleted."
436+#: qml/Greeter/DelayedLockscreen.qml:59
437+msgid "You have been locked out due to too many failed passcode attempts."
310438msgstr ""
311−"Ma vez ebarzhet ur c'hod-tremen direizh, e vo adderaouekaet ho pellgomzer "
312−"gant arventennoù al labouradeg hag e vo diverket an holl roadennoù personel."
439+"Prennet eo bet ho penveg abalamour da re a daolioù-esae evit merkañ ho kod-"
440+"tremen."
313441
314−#: qml/Greeter/NarrowView.qml:116
442+#: qml/Greeter/DelayedLockscreen.qml:68
315443#, qt-format
316−msgid "Enter %1"
317−msgstr "Merkañ %1"
444+msgid "Please wait %1 minute and then try again…"
445+msgid_plural "Please wait %1 minutes and then try again…"
446+msgstr[0] "Gortozit %1 vunutenn, mar plij, hag esaeit en-dro..."
447+msgstr[1] "Gortozit %1 a vunutoù, mar plij, hag esaeit en-dro..."
318448
319−#: qml/Greeter/NarrowView.qml:117
320−msgid "Enter passphrase"
321−msgstr "Merkañ ar frazenn-dremen"
449+#: qml/Greeter/Greeter.qml:596
450+msgid "Try again"
451+msgstr "Esaeañ adarre"
322452
323−#: qml/Greeter/NarrowView.qml:118
324−msgid "Enter passcode"
325−msgstr "Merkañ ar c'hod-tremen"
453+#: qml/Greeter/LoginList.qml:70
454+msgid "Passphrase"
455+msgstr "Lavarenn-dremen"
326456
327−#: qml/Greeter/NarrowView.qml:119
328−#, qt-format
329−msgid "Sorry, incorrect %1"
330−msgstr "Siwazh, %1 direizh"
457+#: qml/Greeter/LoginList.qml:71
458+msgid "Passcode"
459+msgstr "Kod-tremen"
331460
332−#: qml/Greeter/NarrowView.qml:120
333−msgid "Sorry, incorrect passphrase"
334−msgstr "Siwazh, frazenn-dremen direizh"
461+#: qml/Greeter/LoginList.qml:98
462+msgid "Retry"
463+msgstr "Esaeañ en-dro"
464+
465+#: qml/Greeter/LoginList.qml:99
466+msgid "Log In"
467+msgstr "Kevreañ"
335468
336−#: qml/Greeter/NarrowView.qml:121
337−msgctxt "passphrase"
338−msgid "Please re-enter"
339−msgstr "Adverkañ, mar plij"
469+#: qml/Greeter/NarrowView.qml:252
470+msgid "Emergency"
471+msgstr ""
340472
341−#: qml/Greeter/NarrowView.qml:122
342−msgid "Sorry, incorrect passcode"
343−msgstr "Digarezit, kod-tremen direizh"
473+#: qml/Greeter/SessionsList.qml:122
474+msgid "Select desktop environment"
475+msgstr ""
344476
345477#: qml/Notifications/NotificationMenuItemFactory.qml:124
346478msgid "Show password"
@@ -354,62 +486,62 @@ msgstr "Touchit evit distreiñ d'ar bellgomzadenn..."
354486msgid "Conference"
355487msgstr "Kendiviz"
356488
357−#: qml/Panel/Indicators/MenuItemFactory.qml:762
489+#: qml/Panel/Indicators/MenuItemFactory.qml:847
358490msgid "Nothing is playing"
359491msgstr "Ne lenner netra bremañ"
360492
361−#: qml/Panel/Indicators/MenuItemFactory.qml:891
493+#: qml/Panel/Indicators/MenuItemFactory.qml:975
362494#, qt-format
363495msgid "%1 hour"
364496msgid_plural "%1 hours"
365497msgstr[0] "%1 eur"
366498msgstr[1] "%1 eur"
367499
368−#: qml/Panel/Indicators/MenuItemFactory.qml:895
500+#: qml/Panel/Indicators/MenuItemFactory.qml:979
369501#, qt-format
370502msgid "%1 minute"
371503msgid_plural "%1 minutes"
372504msgstr[0] "%1 vunutenn"
373505msgstr[1] "%1 vunutenn"
374506
375−#: qml/Panel/Indicators/MenuItemFactory.qml:900
507+#: qml/Panel/Indicators/MenuItemFactory.qml:984
376508#, qt-format
377509msgid "%1 second"
378510msgid_plural "%1 seconds"
379511msgstr[0] "%1 eilenn"
380512msgstr[1] "%1 eilenn"
381513
382−#: qml/Panel/Indicators/MenuItemFactory.qml:903
514+#: qml/Panel/Indicators/MenuItemFactory.qml:987
383515msgid "0 seconds"
384516msgstr "0 eilenn"
385517
386518#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
387−#: qml/Panel/Indicators/MenuItemFactory.qml:905
519+#: qml/Panel/Indicators/MenuItemFactory.qml:989
388520#, qt-format
389521msgid "%1 remaining"
390522msgstr "%1 o chom"
391523
392−#: qml/Panel/Indicators/MenuItemFactory.qml:911
524+#: qml/Panel/Indicators/MenuItemFactory.qml:995
393525msgid "In queue…"
394526msgstr "El lostennad..."
395527
396−#: qml/Panel/Indicators/MenuItemFactory.qml:915
528+#: qml/Panel/Indicators/MenuItemFactory.qml:999
397529msgid "Downloading"
398530msgstr "O pellgargañ"
399531
400−#: qml/Panel/Indicators/MenuItemFactory.qml:917
532+#: qml/Panel/Indicators/MenuItemFactory.qml:1001
401533msgid "Paused, tap to resume"
402534msgstr "Ehanet, touchit evit adkregiñ"
403535
404−#: qml/Panel/Indicators/MenuItemFactory.qml:919
536+#: qml/Panel/Indicators/MenuItemFactory.qml:1003
405537msgid "Canceled"
406538msgstr "Nullet"
407539
408−#: qml/Panel/Indicators/MenuItemFactory.qml:921
540+#: qml/Panel/Indicators/MenuItemFactory.qml:1005
409541msgid "Finished"
410542msgstr "Echu"
411543
412−#: qml/Panel/Indicators/MenuItemFactory.qml:923
544+#: qml/Panel/Indicators/MenuItemFactory.qml:1007
413545msgid "Failed, tap to retry"
414546msgstr "C'hwitet, touchit evit adkregiñ"
415547
@@ -429,52 +561,29 @@ msgctxt "Button: Call back on phone"
429561msgid "Call back"
430562msgstr "Gervel en-dro"
431563
432−#: qml/Stages/SideStage.qml:76
564+#: qml/Stage/SideStage.qml:76
433565msgid "Drag using 3 fingers any application from one window to the other"
434566msgstr ""
435567
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
568+#: qml/Tutorial/TutorialLeftLong.qml:49
457569msgid "Long swipe from the left edge to open the Today scope"
458570msgstr ""
459571
460572#: qml/Tutorial/TutorialLeft.qml:47
461−msgid "Swipe from the left edge to open the launcher"
573+msgid "Short swipe from the left edge to open the launcher"
462574msgstr ""
463575
464576#: qml/Tutorial/TutorialRight.qml:55
465577msgid "Push your mouse against the right edge to view your open apps"
466578msgstr ""
579+"Dilec'hiit ho logodenn betek ar bord dehoù evit gwelet hoc'h arloadoù digor"
467580
468581#: qml/Tutorial/TutorialRight.qml:56
469−msgid "Short or long swipe from the right edge to view your open apps"
582+msgid "Swipe from the right edge to view your open apps"
470583msgstr ""
471584
472585#: 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"
586+msgid "Swipe from the top edge to access notifications and quick settings"
478587msgstr ""
479588
480589#: qml/Wizard/Page.qml:54
@@ -482,40 +591,54 @@ msgctxt "Button: Go back one page in the Wizard"
482591msgid "Back"
483592msgstr "Distreiñ"
484593
485−#: qml/Wizard/Pages/10-welcome.qml:27
594+#: qml/Wizard/Pages/10-welcome.qml:28
486595msgid "Language"
487596msgstr "Yezh"
488597
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:270
491−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
598+#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
599+#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
600+#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
601+#: qml/Wizard/Pages/70-passwd-type.qml:145
492602#: qml/Wizard/Pages/75-report-check.qml:84
493−#: qml/Wizard/Pages/passcode-desktop.qml:124
494−#: qml/Wizard/Pages/password-set.qml:141
603+#: qml/Wizard/Pages/passcode-desktop.qml:142
604+#: qml/Wizard/Pages/password-set.qml:142
495605msgid "Next"
496606msgstr "War-lerc'h"
497607
498−#: qml/Wizard/Pages/30-wifi.qml:29
608+#: qml/Wizard/Pages/20-keyboard.qml:31
609+msgid "Select Keyboard"
610+msgstr "Diuzañ ar c'hlavier"
611+
612+#: qml/Wizard/Pages/20-keyboard.qml:71
613+msgid "Keyboard language"
614+msgstr "Yezh ar c'hlavier"
615+
616+#: qml/Wizard/Pages/20-keyboard.qml:93
617+msgid "Keyboard layout"
618+msgstr "Aozadur ar c'hlavier"
619+
620+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
621+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
622+#: qml/Wizard/Pages/sim.qml:101
623+msgid "Skip"
624+msgstr "Tremen hebiou"
625+
626+#: qml/Wizard/Pages/30-wifi.qml:31
499627msgid "Connect to Wi‑Fi"
500628msgstr "Kevreañ ouzh ar Wi-Fi"
501629
502−#: qml/Wizard/Pages/30-wifi.qml:130
630+#: qml/Wizard/Pages/30-wifi.qml:132
503631msgid "Connected"
504632msgstr "Kevreet"
505633
506−#: qml/Wizard/Pages/30-wifi.qml:163
634+#: qml/Wizard/Pages/30-wifi.qml:165
507635msgid "Available Wi-Fi networks"
508636msgstr "Rouedadoù Wi-Fi da gaout"
509637
510−#: qml/Wizard/Pages/30-wifi.qml:164
638+#: qml/Wizard/Pages/30-wifi.qml:166
511639msgid "No available Wi-Fi networks"
512640msgstr "N'eus ket rouedadoù Wi-Fi da gaout"
513641
514−#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
515−#: qml/Wizard/Pages/sim.qml:101
516−msgid "Skip"
517−msgstr "Tremen hebiou"
518−
519642#: qml/Wizard/Pages/40-location.qml:27
520643msgid "Location Services"
521644msgstr "Servijoù lec'hiañ"
@@ -546,13 +669,13 @@ msgstr "Arabat implijout ma lec'h"
546669
547670#: qml/Wizard/Pages/40-location.qml:260
548671msgid "You can change it later in System Settings."
549−msgstr ""
672+msgstr "Gallout a rit cheñch se diwezhatoc'h en arventennoù ar reizhiad."
550673
551−#: qml/Wizard/Pages/50-timezone.qml:29
674+#: qml/Wizard/Pages/50-timezone.qml:30
552675msgid "Time Zone"
553676msgstr "Gwerzhid-eur"
554677
555−#: qml/Wizard/Pages/50-timezone.qml:181
678+#: qml/Wizard/Pages/50-timezone.qml:182
556679msgid "Enter your city"
557680msgstr "Skrivit ho kêr"
558681
@@ -564,21 +687,21 @@ msgstr "Personelaat ho penveg"
564687msgid "Preferred Name"
565688msgstr ""
566689
567−#: qml/Wizard/Pages/70-passwd-type.qml:39
690+#: qml/Wizard/Pages/70-passwd-type.qml:40
568691msgid "Lock Screen"
569692msgstr "Prennañ ar skramm"
570693
571−#: qml/Wizard/Pages/70-passwd-type.qml:101
694+#: qml/Wizard/Pages/70-passwd-type.qml:102
572695msgctxt "Label: Type of security method"
573696msgid "Create new password"
574697msgstr "Krouiñ ur ger-tremen nevez"
575698
576−#: qml/Wizard/Pages/70-passwd-type.qml:103
699+#: qml/Wizard/Pages/70-passwd-type.qml:104
577700msgctxt "Label: Type of security method"
578701msgid "Create passcode (numbers only)"
579702msgstr "Krouiñ ur c'hod (difroù hepken)"
580703
581−#: qml/Wizard/Pages/70-passwd-type.qml:105
704+#: qml/Wizard/Pages/70-passwd-type.qml:106
582705msgctxt "Label: Type of security method"
583706msgid "No lock code"
584707msgstr "N'eus kod prennañ ebet"
@@ -599,6 +722,35 @@ msgstr ""
599722msgid "Privacy policy"
600723msgstr "Reolennoù buhez prevez"
601724
725+#: qml/Wizard/Pages/77-system-update.qml:28
726+msgid "Update Device"
727+msgstr "Hizivaat ar benveg"
728+
729+#: qml/Wizard/Pages/77-system-update.qml:55
730+msgid ""
731+"There is a system update available and ready to install. Afterwards, the "
732+"device will automatically restart."
733+msgstr ""
734+
735+#: qml/Wizard/Pages/77-system-update.qml:76
736+msgctxt "string identifying name of the update"
737+msgid "Ubuntu system"
738+msgstr "Reizhiad Ubuntu"
739+
740+#: qml/Wizard/Pages/77-system-update.qml:83
741+#, qt-format
742+msgctxt "version of the system update"
743+msgid "Version %1"
744+msgstr "Stumm %1"
745+
746+#: qml/Wizard/Pages/77-system-update.qml:102
747+msgid "This could take a few minutes..."
748+msgstr "Gallout a ra padout un nebeud munutennoù..."
749+
750+#: qml/Wizard/Pages/77-system-update.qml:116
751+msgid "Install and restart now"
752+msgstr "Staliañ hag adloc'hañ bremañ"
753+
602754#: qml/Wizard/Pages/80-finished.qml:89
603755msgid "Welcome to Ubuntu"
604756msgstr "Donemat en Ubuntu"
@@ -642,7 +794,7 @@ msgid "Service Terms"
642794msgstr "Divizoù servij"
643795
644796#: qml/Wizard/Pages/passcode-confirm.qml:43
645−#: qml/Wizard/Pages/passcode-desktop.qml:80
797+#: qml/Wizard/Pages/passcode-desktop.qml:97
646798msgid "Confirm passcode"
647799msgstr "Kadarnaat ar c'hod-tremen"
648800
@@ -655,28 +807,28 @@ msgctxt "Enter the passcode again"
655807msgid "Please re-enter."
656808msgstr "Skrivit adarre, mar plij."
657809
658−#: qml/Wizard/Pages/passcode-desktop.qml:30
810+#: qml/Wizard/Pages/passcode-desktop.qml:31
659811msgid "Lock Screen Passcode"
660812msgstr "Kod da brennañ ar skramm"
661813
662−#: qml/Wizard/Pages/passcode-desktop.qml:56
814+#: qml/Wizard/Pages/passcode-desktop.qml:61
663815msgid "Enter 4 numbers to setup your passcode"
664816msgstr "Skrivit 4 sifr evit lakaat ho kod"
665817
666−#: qml/Wizard/Pages/passcode-desktop.qml:65
818+#: qml/Wizard/Pages/passcode-desktop.qml:77
667819#: qml/Wizard/Pages/passcode-set.qml:54
668820msgid "Choose passcode"
669821msgstr "Choaz ur c'hod"
670822
671−#: qml/Wizard/Pages/passcode-desktop.qml:105
823+#: qml/Wizard/Pages/passcode-desktop.qml:127
672824msgid "Passcode too short"
673825msgstr "Kod re verr"
674826
675−#: qml/Wizard/Pages/passcode-desktop.qml:107
827+#: qml/Wizard/Pages/passcode-desktop.qml:129
676828msgid "Passcodes match"
677829msgstr "klotañ a ra ar c'hodoù an eil gant egile"
678830
679−#: qml/Wizard/Pages/passcode-desktop.qml:109
831+#: qml/Wizard/Pages/passcode-desktop.qml:131
680832msgid "Passcodes do not match"
681833msgstr "Ne glot ket ar c'hodoù an eil gant egile"
682834
@@ -684,19 +836,19 @@ msgstr "Ne glot ket ar c'hodoù an eil gant egile"
684836msgid "Passcode must be 4 characters long"
685837msgstr "4 arouezenn a rank bezañ ar c'hod"
686838
687−#: qml/Wizard/Pages/password-set.qml:30
839+#: qml/Wizard/Pages/password-set.qml:31
688840msgid "Lock Screen Password"
689841msgstr "Ger-tremen da brennañ ar skramm"
690842
691−#: qml/Wizard/Pages/password-set.qml:61
843+#: qml/Wizard/Pages/password-set.qml:62
692844msgid "Enter at least 8 characters"
693845msgstr "Skrivit 8 arouezenn da vihanañ"
694846
695−#: qml/Wizard/Pages/password-set.qml:73
847+#: qml/Wizard/Pages/password-set.qml:74
696848msgid "Choose password"
697849msgstr "Choaz ur ger-tremen"
698850
699−#: qml/Wizard/Pages/password-set.qml:103
851+#: qml/Wizard/Pages/password-set.qml:104
700852msgid "Confirm password"
701853msgstr "Kadarnaat ar ger-tremen"
702854
@@ -710,7 +862,7 @@ msgstr "Lakaet ez eus bet ur gartenn SIM"
710862
711863#: qml/Wizard/Pages/sim.qml:55
712864msgid "You must restart the device to access the mobile network."
713−msgstr ""
865+msgstr "Ret eo deoc'h adloc'hañ ar benveg evit mont d'ar rouedad hezoug."
714866
715867#: qml/Wizard/Pages/sim.qml:59
716868msgid "Restart"
@@ -718,33 +870,37 @@ msgstr "Adloc'hañ"
718870
719871#: qml/Wizard/Pages/sim.qml:78
720872msgid "You won’t be able to make calls or use text messaging without a SIM."
721−msgstr ""
873+msgstr "Ne c'halloc'h ket pellgomz na kas kemennadennoù hep kartenn SIM."
722874
723875#: qml/Wizard/Pages/sim.qml:90
724876msgid "To proceed with no SIM tap Skip."
725877msgstr ""
726878
727879#: qml/Wizard/PasswordMeter.qml:87
880+msgid "Password too short"
881+msgstr "Re verr eo ar ger-tremen"
882+
883+#: qml/Wizard/PasswordMeter.qml:89
728884msgid "Passwords match"
729885msgstr "Klotañ a ra ar gerioù-tremen an eil gant egile"
730886
731−#: qml/Wizard/PasswordMeter.qml:89
887+#: qml/Wizard/PasswordMeter.qml:91
732888msgid "Passwords do not match"
733889msgstr "Ne glot ket ar gerioù-tremen"
734890
735−#: qml/Wizard/PasswordMeter.qml:93
891+#: qml/Wizard/PasswordMeter.qml:95
736892msgid "Strong password"
737893msgstr "Ger-tremen sur"
738894
739−#: qml/Wizard/PasswordMeter.qml:95
895+#: qml/Wizard/PasswordMeter.qml:97
740896msgid "Fair password"
741897msgstr "Ger-tremen reizh"
742898
743−#: qml/Wizard/PasswordMeter.qml:97
899+#: qml/Wizard/PasswordMeter.qml:99
744900msgid "Weak password"
745901msgstr "Ger-tremen diasur"
746902
747−#: qml/Wizard/PasswordMeter.qml:99
903+#: qml/Wizard/PasswordMeter.qml:101
748904msgid "Very weak password"
749905msgstr "Ger-tremen diasur-kenañ"
750906
@@ -823,6 +979,9 @@ msgstr "Ger-tremen diasur-kenañ"
823979#~ msgid "Done"
824980#~ msgstr "Graet eo"
825981
982+#~ msgid "Sorry, incorrect passphrase"
983+#~ msgstr "Siwazh, frazenn-dremen direizh"
984+
826985#~ msgid "All"
827986#~ msgstr "An holl anezho"
828987
@@ -835,6 +994,33 @@ msgstr "Ger-tremen diasur-kenañ"
835994#~ msgid "Favorites"
836995#~ msgstr "Gwellañ deuet"
837996
997+#, qt-format
998+#~ msgid "Sorry, incorrect %1"
999+#~ msgstr "Siwazh, %1 direizh"
1000+
1001+#~ msgid "Sorry, incorrect passphrase."
1002+#~ msgstr "Siwazh, frazenn-dremen direizh"
1003+
1004+#~ msgid "Sorry, incorrect passcode."
1005+#~ msgstr "Siwazh, kod-tremen direizh"
1006+
1007+#~ msgid ""
1008+#~ "If passcode is entered incorrectly, your phone will conduct a factory reset "
1009+#~ "and all personal data will be deleted."
1010+#~ msgstr ""
1011+#~ "Ma vez ebarzhet ur c'hod-tremen direizh, e vo adderaouekaet ho pellgomzer "
1012+#~ "gant arventennoù al labouradeg hag e vo diverket an holl roadennoù personel."
1013+
1014+#~ msgid ""
1015+#~ "If passphrase is entered incorrectly, your phone will conduct a factory "
1016+#~ "reset and all personal data will be deleted."
1017+#~ msgstr ""
1018+#~ "Ma vez ebarzhet ur frazenn-dremen direizh, e vo adderaouekaet ho pellgomzer "
1019+#~ "gant arventennoù al labouradeg hag e vo diverket an holl roadennoù personel"
1020+
1021+#~ msgid "This will be your last attempt."
1022+#~ msgstr "Ho taol-esae diwezhañ e vo."
1023+
8381024#~ msgid "Power"
8391025#~ msgstr "Tredan"
8401026
@@ -853,12 +1039,25 @@ msgstr "Ger-tremen diasur-kenañ"
8531039#~ msgid "Settings"
8541040#~ msgstr "Arventennoù"
8551041
1042+#~ msgid "Sorry, incorrect passcode"
1043+#~ msgstr "Digarezit, kod-tremen direizh"
1044+
8561045#~ msgid "Manage Scopes"
8571046#~ msgstr "Merañ ar c'hefluskerioù enklask"
8581047
1048+#, qt-format
1049+#~ msgid "Enter %1"
1050+#~ msgstr "Merkañ %1"
1051+
1052+#~ msgid "Enter passphrase"
1053+#~ msgstr "Merkañ ar frazenn-dremen"
1054+
8591055#~ msgid "Please re-enter"
8601056#~ msgstr "Adverkañ, mar plij"
8611057
1058+#~ msgid "Enter passcode"
1059+#~ msgstr "Merkañ ar c'hod-tremen"
1060+
8621061#~ msgid "Lock security"
8631062#~ msgstr "Surentez ar prennañ"
8641063
@@ -965,6 +1164,9 @@ msgstr "Ger-tremen diasur-kenañ"
9651164#~ msgid "%1 〉"
9661165#~ msgstr "%1 〉"
9671166
1167+#~ msgid "Tap to unlock"
1168+#~ msgstr "Pouezañ evit dibrennañ"
1169+
9681170#~ msgid "This action does different things for different apps"
9691171#~ msgstr "An ober-mañ a ra meur a dra evit meur a arload"
9701172
@@ -1070,5 +1272,15 @@ msgstr "Ger-tremen diasur-kenañ"
10701272#~ msgid "Tomorrow %H:%M"
10711273#~ msgstr "Warc'hoazh %H:%M"
10721274
1275+#~ msgctxt "passphrase"
1276+#~ msgid "Please re-enter"
1277+#~ msgstr "Adverkañ, mar plij"
1278+
10731279#~ msgid "Call back"
10741280#~ msgstr "Gervel en-dro"
1281+
1282+#~ msgid "Swipe up to add a contact"
1283+#~ msgstr "Riklit d'an nec'h evit ouzhpennañ un darempred"
1284+
1285+#~ msgid "Swipe up to create a message"
1286+#~ msgstr "Riklit d'an nec'h evit krouiñ ur gemennadenn"
po/bs.po+410−205
@@ -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-27 13:54+0000\n"
10+"POT-Creation-Date: 2016-11-16 10:44+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,94 +16,75 @@ 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-06-02 06:20+0000\n"
20−"X-Generator: Launchpad (build 18053)\n"
19+"X-Launchpad-Export-Date: 2016-11-23 06:34+0000\n"
20+"X-Generator: Launchpad (build 18269)\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
40−msgid "Device Locked"
41−msgstr "Uređaj zaključan"
42−
43−#: qml/Components/DelayedLockscreen.qml:64
44−msgid "You have been locked out due to too many failed passphrase attempts."
45−msgstr "Izbačeni ste zbog previše neuspjelih pokušaja unosa pristupne fraze."
46−
47−#: qml/Components/DelayedLockscreen.qml:65
48−msgid "You have been locked out due to too many failed passcode attempts."
49−msgstr "Izbačeni ste zbog previše neuspjelih pokušaja unosa pristupnog koda."
50−
51−#: qml/Components/DelayedLockscreen.qml:74
52−#, qt-format
53−msgid "Please wait %1 minute and then try again…"
54−msgid_plural "Please wait %1 minutes and then try again…"
55−msgstr[0] "Molim pričekajte %1 minutu i onda pokušajte ponovo..."
56−msgstr[1] "Molim pričekajte %1 minute i onda pokušajte ponovo..."
57−msgstr[2] "Molim pričekajte %1 minuta i onda pokušajte ponovo"
58−
59−#: qml/Components/Dialogs.qml:144
39+#: qml/Components/Dialogs.qml:149
6040msgctxt "Title: Lock/Log out dialog"
6141msgid "Log out"
6242msgstr "Odjavite se"
6343
64−#: qml/Components/Dialogs.qml:145
44+#: qml/Components/Dialogs.qml:150
6545msgid "Are you sure you want to log out?"
6646msgstr "Da li ste sigurni da se želite odjaviti?"
6747
68−#: qml/Components/Dialogs.qml:147
48+#: qml/Components/Dialogs.qml:152
6949msgctxt "Button: Lock the system"
7050msgid "Lock"
7151msgstr "Zaključaj"
7252
73−#: qml/Components/Dialogs.qml:154
53+#: qml/Components/Dialogs.qml:159
7454msgctxt "Button: Log out from the system"
7555msgid "Log Out"
7656msgstr "Odjavi se"
7757
78−#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
79−#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
58+#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
59+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
60+#: qml/Wizard/Pages/passcode-confirm.qml:32
8061#: qml/Wizard/Pages/passcode-set.qml:32
8162msgid "Cancel"
8263msgstr "Otkaži"
8364
84−#: qml/Components/Dialogs.qml:173
65+#: qml/Components/Dialogs.qml:178
8566msgctxt "Title: Reboot dialog"
8667msgid "Reboot"
8768msgstr "Ponovo pokreni"
8869
89−#: qml/Components/Dialogs.qml:174
70+#: qml/Components/Dialogs.qml:179
9071msgid "Are you sure you want to reboot?"
9172msgstr "Da li ste sigurni da želite ponovo pokrenuti?"
9273
93−#: qml/Components/Dialogs.qml:176
74+#: qml/Components/Dialogs.qml:181
9475msgid "No"
9576msgstr "Ne"
9677
97−#: qml/Components/Dialogs.qml:182
78+#: qml/Components/Dialogs.qml:187
9879msgid "Yes"
9980msgstr "Da"
10081
101−#: qml/Components/Dialogs.qml:197
82+#: qml/Components/Dialogs.qml:202
10283msgctxt "Title: Power off/Restart dialog"
10384msgid "Power"
10485msgstr "Napajanje"
10586
106−#: qml/Components/Dialogs.qml:198
87+#: qml/Components/Dialogs.qml:203
10788msgid ""
10889"Are you sure you would like\n"
10990"to power off?"
@@ -111,28 +92,198 @@ msgstr ""
11192"Da li ste sigurni da želite\n"
11293"isključiti?"
11394
114−#: qml/Components/Dialogs.qml:200
95+#: qml/Components/Dialogs.qml:205
11596msgctxt "Button: Power off the system"
11697msgid "Power off"
11798msgstr "Isključi"
11899
119−#: qml/Components/Dialogs.qml:209
100+#: qml/Components/Dialogs.qml:214
120101msgctxt "Button: Restart the system"
121102msgid "Restart"
122103msgstr "Restartuj"
123104
124−#: qml/Components/Lockscreen.qml:231
105+#: qml/Components/KeyboardShortcutsOverlay.qml:41
106+msgid "Keyboard Shortcuts"
107+msgstr ""
108+
109+#: qml/Components/KeyboardShortcutsOverlay.qml:55
110+msgid "Unity 8"
111+msgstr ""
112+
113+#: qml/Components/KeyboardShortcutsOverlay.qml:62
114+msgid "PrtScr"
115+msgstr ""
116+
117+#: qml/Components/KeyboardShortcutsOverlay.qml:67
118+msgid "Takes a screenshot."
119+msgstr ""
120+
121+#: qml/Components/KeyboardShortcutsOverlay.qml:75
122+msgid "Alt + PrtScr"
123+msgstr ""
124+
125+#: qml/Components/KeyboardShortcutsOverlay.qml:80
126+msgid "Takes a screenshot of a window."
127+msgstr ""
128+
129+#: qml/Components/KeyboardShortcutsOverlay.qml:88
130+msgid "Super + Space"
131+msgstr ""
132+
133+#: qml/Components/KeyboardShortcutsOverlay.qml:93
134+msgid "Switches to next keyboard layout."
135+msgstr ""
136+
137+#: qml/Components/KeyboardShortcutsOverlay.qml:101
138+msgid "Super + Shift + Space"
139+msgstr ""
140+
141+#: qml/Components/KeyboardShortcutsOverlay.qml:106
142+msgid "Switches to previous keyboard layout."
143+msgstr ""
144+
145+#: qml/Components/KeyboardShortcutsOverlay.qml:118
146+msgid "Launcher"
147+msgstr ""
148+
149+#: qml/Components/KeyboardShortcutsOverlay.qml:125
150+msgid "Super (Hold)"
151+msgstr ""
152+
153+#: qml/Components/KeyboardShortcutsOverlay.qml:130
154+msgid "Opens the launcher, displays shortcuts."
155+msgstr ""
156+
157+#: qml/Components/KeyboardShortcutsOverlay.qml:138
158+msgid "Alt + F1"
159+msgstr ""
160+
161+#: qml/Components/KeyboardShortcutsOverlay.qml:143
162+msgid "Opens launcher keyboard navigation mode."
163+msgstr ""
164+
165+#: qml/Components/KeyboardShortcutsOverlay.qml:151
166+msgid "Super + Tab"
167+msgstr ""
168+
169+#: qml/Components/KeyboardShortcutsOverlay.qml:156
170+msgid "Switches applications via the launcher."
171+msgstr ""
172+
173+#: qml/Components/KeyboardShortcutsOverlay.qml:164
174+msgid "Super + 0 to 9"
175+msgstr ""
176+
177+#: qml/Components/KeyboardShortcutsOverlay.qml:169
178+msgid "Same as clicking on a launcher icon."
179+msgstr ""
180+
181+#: qml/Components/KeyboardShortcutsOverlay.qml:181
182+msgid "Scopes"
183+msgstr ""
184+
185+#: qml/Components/KeyboardShortcutsOverlay.qml:188
186+msgid "Super (Tap)"
187+msgstr ""
188+
189+#: qml/Components/KeyboardShortcutsOverlay.qml:193
190+msgid "Opens the Scopes home."
191+msgstr ""
192+
193+#: qml/Components/KeyboardShortcutsOverlay.qml:209
194+msgid "Switching"
195+msgstr ""
196+
197+#: qml/Components/KeyboardShortcutsOverlay.qml:216
198+msgid "Alt + Tab"
199+msgstr ""
200+
201+#: qml/Components/KeyboardShortcutsOverlay.qml:221
202+msgid "Switches between applications."
203+msgstr ""
204+
205+#: qml/Components/KeyboardShortcutsOverlay.qml:229
206+msgid "Super + W"
207+msgstr ""
208+
209+#: qml/Components/KeyboardShortcutsOverlay.qml:234
210+msgid "Opens the desktop spread."
211+msgstr ""
212+
213+#: qml/Components/KeyboardShortcutsOverlay.qml:242
214+msgid "Cursor Left or Right"
215+msgstr ""
216+
217+#: qml/Components/KeyboardShortcutsOverlay.qml:247
218+msgid "Moves the focus."
219+msgstr ""
220+
221+#: qml/Components/KeyboardShortcutsOverlay.qml:259
222+msgid "Windows"
223+msgstr ""
224+
225+#: qml/Components/KeyboardShortcutsOverlay.qml:266
226+msgid "Ctrl + Super + D"
227+msgstr ""
228+
229+#: qml/Components/KeyboardShortcutsOverlay.qml:271
230+msgid "Minimizes all windows."
231+msgstr ""
232+
233+#: qml/Components/KeyboardShortcutsOverlay.qml:279
234+msgid "Ctrl + Super + Up"
235+msgstr ""
236+
237+#: qml/Components/KeyboardShortcutsOverlay.qml:284
238+msgid "Maximizes the current window."
239+msgstr ""
240+
241+#: qml/Components/KeyboardShortcutsOverlay.qml:292
242+msgid "Ctrl + Super + Down"
243+msgstr ""
244+
245+#: qml/Components/KeyboardShortcutsOverlay.qml:297
246+msgid "Minimizes or restores the current window."
247+msgstr ""
248+
249+#: qml/Components/KeyboardShortcutsOverlay.qml:305
250+msgid "Ctrl + Super + Left or Right"
251+msgstr ""
252+
253+#: qml/Components/KeyboardShortcutsOverlay.qml:310
254+msgid "Semi-maximizes the current window."
255+msgstr ""
256+
257+#: qml/Components/KeyboardShortcutsOverlay.qml:318
258+msgid "Alt + F4"
259+msgstr ""
260+
261+#: qml/Components/KeyboardShortcutsOverlay.qml:323
262+msgid "Closes the current window."
263+msgstr ""
264+
265+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
125266msgid "Return to Call"
126267msgstr "Povratak na Poziv"
127268
128−#: qml/Components/Lockscreen.qml:231
269+#: qml/Components/Lockscreen.qml:212
129270msgid "Emergency Call"
130271msgstr "Hitan Poziv"
131272
132−#: qml/Components/Lockscreen.qml:263
273+#: qml/Components/Lockscreen.qml:244
133274msgid "OK"
134275msgstr "U redu"
135276
277+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
278+#, qt-format
279+msgid "%1:%2:%3"
280+msgstr ""
281+
282+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
283+#, qt-format
284+msgid "%1:%2"
285+msgstr ""
286+
136287#: qml/Components/ModeSwitchWarningDialog.qml:32
137288msgid "Apps may have unsaved data:"
138289msgstr "Aplikacije možda imaju podataka koji nisu sačuvani:"
@@ -161,88 +312,88 @@ msgstr "Ponovo poveži sada"
161312msgid "Close all"
162313msgstr "Zatvori sve"
163314
164−#: qml/Dash/DashPageHeader.qml:333
315+#: qml/Components/SharingPicker.qml:54
316+msgid "Preview Share Item"
317+msgstr "Pogledaj stavku koja se dijeli"
318+
319+#: qml/Dash/DashPageHeader.qml:361
165320msgctxt "Button: Open the Ubuntu Store"
166321msgid "Store"
167322msgstr "Trgovina"
168323
169−#: qml/Dash/DashPageHeader.qml:340
324+#: qml/Dash/DashPageHeader.qml:368
170325msgctxt "Button: Start a search in the current dash scope"
171326msgid "Search"
172327msgstr "Pretraživanje"
173328
174−#: qml/Dash/DashPageHeader.qml:350
329+#: qml/Dash/DashPageHeader.qml:378
175330msgctxt "Button: Show the current dash scope settings"
176331msgid "Settings"
177332msgstr "Podešavanja"
178333
179−#: qml/Dash/DashPageHeader.qml:357
334+#: qml/Dash/DashPageHeader.qml:385
180335msgid "Remove from Favorites"
181336msgstr "Ukloni iz Omiljenih"
182337
183−#: qml/Dash/DashPageHeader.qml:357
338+#: qml/Dash/DashPageHeader.qml:385
184339msgid "Add to Favorites"
185340msgstr "Dodaj u Omiljene"
186341
187−#: qml/Dash/FiltersPopover.qml:60
342+#: qml/Dash/FiltersPopover.qml:61
188343msgid "Refine your results"
189344msgstr ""
190345
191−#: qml/Dash/FiltersPopover.qml:69
346+#: qml/Dash/FiltersPopover.qml:70
192347msgid "Reset"
193348msgstr ""
194349
195−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:774
350+#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
196351msgid "Show less"
197352msgstr ""
198353
199−#: qml/Dash/GenericScopeView.qml:579
354+#: qml/Dash/GenericScopeView.qml:545
200355msgid "Show all"
201356msgstr ""
202357
203−#: qml/Dash/GenericScopeView.qml:636
358+#: qml/Dash/GenericScopeView.qml:576
204359msgctxt "Label: Hint for dash search line edit"
205360msgid "Search"
206361msgstr "Pretraži"
207362
208−#: qml/Dash/PageHeaderExtraPanel.qml:56
363+#: qml/Dash/PageHeaderExtraPanel.qml:57
209364msgid "Recent Searches"
210365msgstr ""
211366
212−#: qml/Dash/PageHeaderExtraPanel.qml:67
367+#: qml/Dash/PageHeaderExtraPanel.qml:68
213368msgid "Clear All"
214369msgstr ""
215370
216−#: qml/Dash/Previews/PreviewActionCombo.qml:35
371+#: qml/Dash/Previews/PreviewActionCombo.qml:36
217372msgid "More..."
218373msgstr "Više..."
219374
220−#: qml/Dash/Previews/PreviewActionCombo.qml:35
375+#: qml/Dash/Previews/PreviewActionCombo.qml:36
221376msgid "Less..."
222377msgstr "Manje..."
223378
224−#: qml/Dash/Previews/PreviewCommentInput.qml:68
225−#: qml/Dash/Previews/PreviewRatingInput.qml:175
379+#: qml/Dash/Previews/PreviewCommentInput.qml:83
380+#: qml/Dash/Previews/PreviewRatingInput.qml:202
226381msgid "Send"
227382msgstr "Pošalji"
228383
229−#: qml/Dash/Previews/PreviewRatingInput.qml:82
384+#: qml/Dash/Previews/PreviewRatingInput.qml:109
230385msgid "Rate this"
231386msgstr "Ocijeni ovo"
232387
233−#: qml/Dash/Previews/PreviewRatingInput.qml:157
388+#: qml/Dash/Previews/PreviewRatingInput.qml:184
234389msgid "Add a review"
235390msgstr "Dodaj recenziju"
236391
237−#: qml/Dash/Previews/PreviewSharing.qml:66
238−msgid "Preview Share Item"
239−msgstr "Pogledaj stavku koja se dijeli"
240−
241−#: qml/Dash/PullToRefreshScopeStyle.qml:55
392+#: qml/Dash/PullToRefreshScopeStyle.qml:56
242393msgid "Pull to refresh…"
243394msgstr "Povući za osvježavanje..."
244395
245−#: qml/Dash/PullToRefreshScopeStyle.qml:60
396+#: qml/Dash/PullToRefreshScopeStyle.qml:61
246397msgid "Release to refresh…"
247398msgstr "Pustiti za osvježavanje..."
248399
@@ -250,15 +401,15 @@ msgstr "Pustiti za osvježavanje..."
250401msgid "Enable location data"
251402msgstr "Omogućiti podatke o lokaciji"
252403
253−#: qml/Dash/ScopesList.qml:55
404+#: qml/Dash/ScopesList.qml:57
254405msgid "Manage"
255406msgstr "Upravljanje"
256407
257−#: qml/Dash/ScopesList.qml:101
408+#: qml/Dash/ScopesList.qml:104
258409msgid "Home"
259410msgstr "Početna"
260411
261−#: qml/Dash/ScopesList.qml:102
412+#: qml/Dash/ScopesList.qml:105
262413msgid "Also installed"
263414msgstr "Također instalirano"
264415
@@ -268,76 +419,57 @@ msgid ""
268419"touch pad to interact with the pointer."
269420msgstr ""
270421
271−#: qml/Greeter/CoverPage.qml:118
422+#: qml/Greeter/CoverPage.qml:127
272423msgid "Unlock"
273424msgstr "Otključaj"
274425
275−#: qml/Greeter/LoginList.qml:239
276−msgid "Retry"
277−msgstr "Ponovi"
278−
279−#: qml/Greeter/LoginList.qml:240
280−msgid "Tap to unlock"
281−msgstr "Kucnite za otključavanje"
426+#: qml/Greeter/DelayedLockscreen.qml:43
427+msgid "Device Locked"
428+msgstr "Uređaj zaključan"
282429
283−#: qml/Greeter/NarrowView.qml:54
284−msgid "Sorry, incorrect passphrase."
285−msgstr "Izvinite, pogrešna pristupna fraza."
430+#: qml/Greeter/DelayedLockscreen.qml:58
431+msgid "You have been locked out due to too many failed passphrase attempts."
432+msgstr "Izbačeni ste zbog previše neuspjelih pokušaja unosa pristupne fraze."
286433
287−#: qml/Greeter/NarrowView.qml:55
288−msgid "Sorry, incorrect passcode."
289−msgstr "Izvinite, pogrešan pristupni kod."
434+#: qml/Greeter/DelayedLockscreen.qml:59
435+msgid "You have been locked out due to too many failed passcode attempts."
436+msgstr "Izbačeni ste zbog previše neuspjelih pokušaja unosa pristupnog koda."
290437
291−#: qml/Greeter/NarrowView.qml:56
292−msgid "This will be your last attempt."
293−msgstr "Ovo će biti vaš posljednji pokušaj."
438+#: qml/Greeter/DelayedLockscreen.qml:68
439+#, qt-format
440+msgid "Please wait %1 minute and then try again…"
441+msgid_plural "Please wait %1 minutes and then try again…"
442+msgstr[0] "Molim pričekajte %1 minutu i onda pokušajte ponovo..."
443+msgstr[1] "Molim pričekajte %1 minute i onda pokušajte ponovo..."
444+msgstr[2] "Molim pričekajte %1 minuta i onda pokušajte ponovo"
294445
295−#: qml/Greeter/NarrowView.qml:58
296−msgid ""
297−"If passphrase is entered incorrectly, your phone will conduct a factory "
298−"reset and all personal data will be deleted."
446+#: qml/Greeter/Greeter.qml:596
447+msgid "Try again"
299448msgstr ""
300−"Ako je pristupna fraza unesena pogrešno, vaš telefon će sprovesti reset na "
301−"fabričke postavke i svi osobni podaci će biti izbrisani."
302449
303−#: qml/Greeter/NarrowView.qml:59
304−msgid ""
305−"If passcode is entered incorrectly, your phone will conduct a factory reset "
306−"and all personal data will be deleted."
450+#: qml/Greeter/LoginList.qml:70
451+msgid "Passphrase"
307452msgstr ""
308−"Ako je pristupni kod unesen netačno, vaš telefon će sprovesti reset na "
309−"fabričke postavke i svi osobni podaci će biti izbrisani."
310−
311−#: qml/Greeter/NarrowView.qml:116
312−#, qt-format
313−msgid "Enter %1"
314−msgstr "Unesite %1"
315−
316−#: qml/Greeter/NarrowView.qml:117
317−msgid "Enter passphrase"
318−msgstr "Unesite propusnu frazu"
319453
320−#: qml/Greeter/NarrowView.qml:118
321−msgid "Enter passcode"
322−msgstr "Unesite pristupni kod"
454+#: qml/Greeter/LoginList.qml:71
455+msgid "Passcode"
456+msgstr ""
323457
324−#: qml/Greeter/NarrowView.qml:119
325−#, qt-format
326−msgid "Sorry, incorrect %1"
327−msgstr "Izvinite, netačno %1"
458+#: qml/Greeter/LoginList.qml:98
459+msgid "Retry"
460+msgstr "Ponovi"
328461
329−#: qml/Greeter/NarrowView.qml:120
330−msgid "Sorry, incorrect passphrase"
331−msgstr "Izvinite, netačna propusna fraza"
462+#: qml/Greeter/LoginList.qml:99
463+msgid "Log In"
464+msgstr ""
332465
333−#: qml/Greeter/NarrowView.qml:121
334−msgctxt "passphrase"
335−msgid "Please re-enter"
336−msgstr "Molim ponovo unesite"
466+#: qml/Greeter/NarrowView.qml:252
467+msgid "Emergency"
468+msgstr ""
337469
338−#: qml/Greeter/NarrowView.qml:122
339−msgid "Sorry, incorrect passcode"
340−msgstr "Izvinite, netačan pristupni kod"
470+#: qml/Greeter/SessionsList.qml:122
471+msgid "Select desktop environment"
472+msgstr ""
341473
342474#: qml/Notifications/NotificationMenuItemFactory.qml:124
343475msgid "Show password"
@@ -351,11 +483,11 @@ msgstr "Kucnite da uzvratite poziv..."
351483msgid "Conference"
352484msgstr "Savjetovanje"
353485
354−#: qml/Panel/Indicators/MenuItemFactory.qml:762
486+#: qml/Panel/Indicators/MenuItemFactory.qml:847
355487msgid "Nothing is playing"
356488msgstr "Ništa nije pokrenuto"
357489
358−#: qml/Panel/Indicators/MenuItemFactory.qml:891
490+#: qml/Panel/Indicators/MenuItemFactory.qml:975
359491#, qt-format
360492msgid "%1 hour"
361493msgid_plural "%1 hours"
@@ -363,7 +495,7 @@ msgstr[0] "%1 sat"
363495msgstr[1] "%1 sata"
364496msgstr[2] "%1 sati"
365497
366−#: qml/Panel/Indicators/MenuItemFactory.qml:895
498+#: qml/Panel/Indicators/MenuItemFactory.qml:979
367499#, qt-format
368500msgid "%1 minute"
369501msgid_plural "%1 minutes"
@@ -371,7 +503,7 @@ msgstr[0] "%1 minut"
371503msgstr[1] "%1 minuta"
372504msgstr[2] "%1 minuta"
373505
374−#: qml/Panel/Indicators/MenuItemFactory.qml:900
506+#: qml/Panel/Indicators/MenuItemFactory.qml:984
375507#, qt-format
376508msgid "%1 second"
377509msgid_plural "%1 seconds"
@@ -379,37 +511,37 @@ msgstr[0] "%1 sekunda"
379511msgstr[1] "%1 sekunde"
380512msgstr[2] "%1 sekundi"
381513
382−#: qml/Panel/Indicators/MenuItemFactory.qml:903
514+#: qml/Panel/Indicators/MenuItemFactory.qml:987
383515msgid "0 seconds"
384516msgstr "0 sekundi"
385517
386518#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
387−#: qml/Panel/Indicators/MenuItemFactory.qml:905
519+#: qml/Panel/Indicators/MenuItemFactory.qml:989
388520#, qt-format
389521msgid "%1 remaining"
390522msgstr "%1 preostalo"
391523
392−#: qml/Panel/Indicators/MenuItemFactory.qml:911
524+#: qml/Panel/Indicators/MenuItemFactory.qml:995
393525msgid "In queue…"
394526msgstr "U red..."
395527
396−#: qml/Panel/Indicators/MenuItemFactory.qml:915
528+#: qml/Panel/Indicators/MenuItemFactory.qml:999
397529msgid "Downloading"
398530msgstr "Preuzimanje"
399531
400−#: qml/Panel/Indicators/MenuItemFactory.qml:917
532+#: qml/Panel/Indicators/MenuItemFactory.qml:1001
401533msgid "Paused, tap to resume"
402534msgstr "Pauzirano, kucnuti za nastavak"
403535
404−#: qml/Panel/Indicators/MenuItemFactory.qml:919
536+#: qml/Panel/Indicators/MenuItemFactory.qml:1003
405537msgid "Canceled"
406538msgstr "Otkazano"
407539
408−#: qml/Panel/Indicators/MenuItemFactory.qml:921
540+#: qml/Panel/Indicators/MenuItemFactory.qml:1005
409541msgid "Finished"
410542msgstr "Završeno"
411543
412−#: qml/Panel/Indicators/MenuItemFactory.qml:923
544+#: qml/Panel/Indicators/MenuItemFactory.qml:1007
413545msgid "Failed, tap to retry"
414546msgstr "Neuspjelo, kucnuti za ponavljanje"
415547
@@ -429,36 +561,16 @@ msgctxt "Button: Call back on phone"
429561msgid "Call back"
430562msgstr "Uzvrati poziv"
431563
432−#: qml/Stages/SideStage.qml:76
564+#: qml/Stage/SideStage.qml:76
433565msgid "Drag using 3 fingers any application from one window to the other"
434566msgstr ""
435567
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
568+#: qml/Tutorial/TutorialLeftLong.qml:49
457569msgid "Long swipe from the left edge to open the Today scope"
458570msgstr ""
459571
460572#: qml/Tutorial/TutorialLeft.qml:47
461−msgid "Swipe from the left edge to open the launcher"
573+msgid "Short swipe from the left edge to open the launcher"
462574msgstr ""
463575
464576#: qml/Tutorial/TutorialRight.qml:55
@@ -466,15 +578,11 @@ msgid "Push your mouse against the right edge to view your open apps"
466578msgstr ""
467579
468580#: qml/Tutorial/TutorialRight.qml:56
469−msgid "Short or long swipe from the right edge to view your open apps"
581+msgid "Swipe from the right edge to view your open apps"
470582msgstr ""
471583
472584#: 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"
585+msgid "Swipe from the top edge to access notifications and quick settings"
478586msgstr ""
479587
480588#: qml/Wizard/Page.qml:54
@@ -482,40 +590,54 @@ msgctxt "Button: Go back one page in the Wizard"
482590msgid "Back"
483591msgstr "Nazad"
484592
485−#: qml/Wizard/Pages/10-welcome.qml:27
593+#: qml/Wizard/Pages/10-welcome.qml:28
486594msgid "Language"
487595msgstr ""
488596
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:270
491−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
597+#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
598+#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
599+#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
600+#: qml/Wizard/Pages/70-passwd-type.qml:145
492601#: qml/Wizard/Pages/75-report-check.qml:84
493−#: qml/Wizard/Pages/passcode-desktop.qml:124
494−#: qml/Wizard/Pages/password-set.qml:141
602+#: qml/Wizard/Pages/passcode-desktop.qml:142
603+#: qml/Wizard/Pages/password-set.qml:142
495604msgid "Next"
496605msgstr ""
497606
498−#: qml/Wizard/Pages/30-wifi.qml:29
607+#: qml/Wizard/Pages/20-keyboard.qml:31
608+msgid "Select Keyboard"
609+msgstr ""
610+
611+#: qml/Wizard/Pages/20-keyboard.qml:71
612+msgid "Keyboard language"
613+msgstr ""
614+
615+#: qml/Wizard/Pages/20-keyboard.qml:93
616+msgid "Keyboard layout"
617+msgstr ""
618+
619+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
620+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
621+#: qml/Wizard/Pages/sim.qml:101
622+msgid "Skip"
623+msgstr "Preskočite"
624+
625+#: qml/Wizard/Pages/30-wifi.qml:31
499626msgid "Connect to Wi‑Fi"
500627msgstr "Povezati na Wi-Fi"
501628
502−#: qml/Wizard/Pages/30-wifi.qml:130
629+#: qml/Wizard/Pages/30-wifi.qml:132
503630msgid "Connected"
504631msgstr ""
505632
506−#: qml/Wizard/Pages/30-wifi.qml:163
633+#: qml/Wizard/Pages/30-wifi.qml:165
507634msgid "Available Wi-Fi networks"
508635msgstr ""
509636
510−#: qml/Wizard/Pages/30-wifi.qml:164
637+#: qml/Wizard/Pages/30-wifi.qml:166
511638msgid "No available Wi-Fi networks"
512639msgstr ""
513640
514−#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
515−#: qml/Wizard/Pages/sim.qml:101
516−msgid "Skip"
517−msgstr "Preskočite"
518−
519641#: qml/Wizard/Pages/40-location.qml:27
520642msgid "Location Services"
521643msgstr ""
@@ -548,11 +670,11 @@ msgstr ""
548670msgid "You can change it later in System Settings."
549671msgstr ""
550672
551−#: qml/Wizard/Pages/50-timezone.qml:29
673+#: qml/Wizard/Pages/50-timezone.qml:30
552674msgid "Time Zone"
553675msgstr ""
554676
555−#: qml/Wizard/Pages/50-timezone.qml:181
677+#: qml/Wizard/Pages/50-timezone.qml:182
556678msgid "Enter your city"
557679msgstr ""
558680
@@ -564,21 +686,21 @@ msgstr ""
564686msgid "Preferred Name"
565687msgstr ""
566688
567−#: qml/Wizard/Pages/70-passwd-type.qml:39
689+#: qml/Wizard/Pages/70-passwd-type.qml:40
568690msgid "Lock Screen"
569691msgstr ""
570692
571−#: qml/Wizard/Pages/70-passwd-type.qml:101
693+#: qml/Wizard/Pages/70-passwd-type.qml:102
572694msgctxt "Label: Type of security method"
573695msgid "Create new password"
574696msgstr ""
575697
576−#: qml/Wizard/Pages/70-passwd-type.qml:103
698+#: qml/Wizard/Pages/70-passwd-type.qml:104
577699msgctxt "Label: Type of security method"
578700msgid "Create passcode (numbers only)"
579701msgstr ""
580702
581−#: qml/Wizard/Pages/70-passwd-type.qml:105
703+#: qml/Wizard/Pages/70-passwd-type.qml:106
582704msgctxt "Label: Type of security method"
583705msgid "No lock code"
584706msgstr ""
@@ -599,6 +721,35 @@ msgstr ""
599721msgid "Privacy policy"
600722msgstr ""
601723
724+#: qml/Wizard/Pages/77-system-update.qml:28
725+msgid "Update Device"
726+msgstr ""
727+
728+#: qml/Wizard/Pages/77-system-update.qml:55
729+msgid ""
730+"There is a system update available and ready to install. Afterwards, the "
731+"device will automatically restart."
732+msgstr ""
733+
734+#: qml/Wizard/Pages/77-system-update.qml:76
735+msgctxt "string identifying name of the update"
736+msgid "Ubuntu system"
737+msgstr ""
738+
739+#: qml/Wizard/Pages/77-system-update.qml:83
740+#, qt-format
741+msgctxt "version of the system update"
742+msgid "Version %1"
743+msgstr ""
744+
745+#: qml/Wizard/Pages/77-system-update.qml:102
746+msgid "This could take a few minutes..."
747+msgstr ""
748+
749+#: qml/Wizard/Pages/77-system-update.qml:116
750+msgid "Install and restart now"
751+msgstr ""
752+
602753#: qml/Wizard/Pages/80-finished.qml:89
603754msgid "Welcome to Ubuntu"
604755msgstr ""
@@ -642,7 +793,7 @@ msgid "Service Terms"
642793msgstr ""
643794
644795#: qml/Wizard/Pages/passcode-confirm.qml:43
645−#: qml/Wizard/Pages/passcode-desktop.qml:80
796+#: qml/Wizard/Pages/passcode-desktop.qml:97
646797msgid "Confirm passcode"
647798msgstr "Potvrdi pristupni kod"
648799
@@ -655,28 +806,28 @@ msgctxt "Enter the passcode again"
655806msgid "Please re-enter."
656807msgstr ""
657808
658−#: qml/Wizard/Pages/passcode-desktop.qml:30
809+#: qml/Wizard/Pages/passcode-desktop.qml:31
659810msgid "Lock Screen Passcode"
660811msgstr ""
661812
662−#: qml/Wizard/Pages/passcode-desktop.qml:56
813+#: qml/Wizard/Pages/passcode-desktop.qml:61
663814msgid "Enter 4 numbers to setup your passcode"
664815msgstr ""
665816
666−#: qml/Wizard/Pages/passcode-desktop.qml:65
817+#: qml/Wizard/Pages/passcode-desktop.qml:77
667818#: qml/Wizard/Pages/passcode-set.qml:54
668819msgid "Choose passcode"
669820msgstr ""
670821
671−#: qml/Wizard/Pages/passcode-desktop.qml:105
822+#: qml/Wizard/Pages/passcode-desktop.qml:127
672823msgid "Passcode too short"
673824msgstr ""
674825
675−#: qml/Wizard/Pages/passcode-desktop.qml:107
826+#: qml/Wizard/Pages/passcode-desktop.qml:129
676827msgid "Passcodes match"
677828msgstr ""
678829
679−#: qml/Wizard/Pages/passcode-desktop.qml:109
830+#: qml/Wizard/Pages/passcode-desktop.qml:131
680831msgid "Passcodes do not match"
681832msgstr ""
682833
@@ -684,19 +835,19 @@ msgstr ""
684835msgid "Passcode must be 4 characters long"
685836msgstr ""
686837
687−#: qml/Wizard/Pages/password-set.qml:30
838+#: qml/Wizard/Pages/password-set.qml:31
688839msgid "Lock Screen Password"
689840msgstr ""
690841
691−#: qml/Wizard/Pages/password-set.qml:61
842+#: qml/Wizard/Pages/password-set.qml:62
692843msgid "Enter at least 8 characters"
693844msgstr ""
694845
695−#: qml/Wizard/Pages/password-set.qml:73
846+#: qml/Wizard/Pages/password-set.qml:74
696847msgid "Choose password"
697848msgstr ""
698849
699−#: qml/Wizard/Pages/password-set.qml:103
850+#: qml/Wizard/Pages/password-set.qml:104
700851msgid "Confirm password"
701852msgstr ""
702853
@@ -725,26 +876,30 @@ msgid "To proceed with no SIM tap Skip."
725876msgstr ""
726877
727878#: qml/Wizard/PasswordMeter.qml:87
728−msgid "Passwords match"
879+msgid "Password too short"
729880msgstr ""
730881
731882#: qml/Wizard/PasswordMeter.qml:89
883+msgid "Passwords match"
884+msgstr ""
885+
886+#: qml/Wizard/PasswordMeter.qml:91
732887msgid "Passwords do not match"
733888msgstr ""
734889
735−#: qml/Wizard/PasswordMeter.qml:93
890+#: qml/Wizard/PasswordMeter.qml:95
736891msgid "Strong password"
737892msgstr ""
738893
739−#: qml/Wizard/PasswordMeter.qml:95
894+#: qml/Wizard/PasswordMeter.qml:97
740895msgid "Fair password"
741896msgstr ""
742897
743−#: qml/Wizard/PasswordMeter.qml:97
898+#: qml/Wizard/PasswordMeter.qml:99
744899msgid "Weak password"
745900msgstr ""
746901
747−#: qml/Wizard/PasswordMeter.qml:99
902+#: qml/Wizard/PasswordMeter.qml:101
748903msgid "Very weak password"
749904msgstr ""
750905
@@ -773,9 +928,55 @@ msgstr ""
773928#~ msgid "See less"
774929#~ msgstr "Pogledati manje"
775930
931+#~ msgid "Tap to unlock"
932+#~ msgstr "Kucnite za otključavanje"
933+
934+#~ msgid "Sorry, incorrect passphrase."
935+#~ msgstr "Izvinite, pogrešna pristupna fraza."
936+
937+#, qt-format
938+#~ msgid "Enter %1"
939+#~ msgstr "Unesite %1"
940+
941+#~ msgid "Sorry, incorrect passphrase"
942+#~ msgstr "Izvinite, netačna propusna fraza"
943+
944+#, qt-format
945+#~ msgid "Sorry, incorrect %1"
946+#~ msgstr "Izvinite, netačno %1"
947+
948+#~ msgid "Sorry, incorrect passcode."
949+#~ msgstr "Izvinite, pogrešan pristupni kod."
950+
951+#~ msgid "Enter passphrase"
952+#~ msgstr "Unesite propusnu frazu"
953+
776954#~ msgid "Please re-enter"
777955#~ msgstr "Molimo ponovo unesite"
778956
957+#~ msgid "Enter passcode"
958+#~ msgstr "Unesite pristupni kod"
959+
960+#~ msgid ""
961+#~ "If passcode is entered incorrectly, your phone will conduct a factory reset "
962+#~ "and all personal data will be deleted."
963+#~ msgstr ""
964+#~ "Ako je pristupni kod unesen netačno, vaš telefon će sprovesti reset na "
965+#~ "fabričke postavke i svi osobni podaci će biti izbrisani."
966+
967+#~ msgid ""
968+#~ "If passphrase is entered incorrectly, your phone will conduct a factory "
969+#~ "reset and all personal data will be deleted."
970+#~ msgstr ""
971+#~ "Ako je pristupna fraza unesena pogrešno, vaš telefon će sprovesti reset na "
972+#~ "fabričke postavke i svi osobni podaci će biti izbrisani."
973+
974+#~ msgid "This will be your last attempt."
975+#~ msgstr "Ovo će biti vaš posljednji pokušaj."
976+
977+#~ msgid "Sorry, incorrect passcode"
978+#~ msgstr "Izvinite, netačan pristupni kod"
979+
779980#~ msgid "This action does different things for different apps"
780981#~ msgstr "Ova radnja čini različite stvari za različite aplikacije"
781982
@@ -958,3 +1159,7 @@ msgstr ""
9581159#~ msgctxt "Button: Reboot the system"
9591160#~ msgid "Reboot"
9601161#~ msgstr "Ponovo pokreni"
1162+
1163+#~ msgctxt "passphrase"
1164+#~ msgid "Please re-enter"
1165+#~ msgstr "Molim ponovo unesite"
po/ca.po+528−266
@@ -7,105 +7,83 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-05-27 13:54+0000\n"
11−"PO-Revision-Date: 2015-07-04 09:48+0000\n"
12−"Last-Translator: David Planella <david.planella@ubuntu.com>\n"
10+"POT-Creation-Date: 2016-11-16 10:44+0000\n"
11+"PO-Revision-Date: 2016-11-11 06:30+0000\n"
12+"Last-Translator: Walter Garcia-Fontes <walter.garcia@upf.edu>\n"
1313"Language-Team: Catalan <ca@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-06-02 06:20+0000\n"
19−"X-Generator: Launchpad (build 18053)\n"
18+"X-Launchpad-Export-Date: 2016-11-23 06:34+0000\n"
19+"X-Generator: Launchpad (build 18269)\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
39−msgid "Device Locked"
40−msgstr "Dispositiu bloquejat"
41−
42−#: qml/Components/DelayedLockscreen.qml:64
43−msgid "You have been locked out due to too many failed passphrase attempts."
44−msgstr ""
45−"Se us ha bloquejat l'accés al dispositiu. Heu sobrepassat el nombre "
46−"d'intents d'introducció de la contrasenya."
47−
48−#: qml/Components/DelayedLockscreen.qml:65
49−msgid "You have been locked out due to too many failed passcode attempts."
50−msgstr ""
51−"Se us ha bloquejat l'accés al dispositiu. Heu sobrepassat el nombre "
52−"d'intents d'introducció del codi d'accés."
53−
54−#: qml/Components/DelayedLockscreen.qml:74
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] "Espereu %1 minut i torneu-ho a intentar..."
59−msgstr[1] "Espereu %1 minuts i torneu-ho a intentar..."
60−
61−#: qml/Components/Dialogs.qml:144
38+#: qml/Components/Dialogs.qml:149
6239msgctxt "Title: Lock/Log out dialog"
6340msgid "Log out"
6441msgstr "Surt"
6542
66−#: qml/Components/Dialogs.qml:145
43+#: qml/Components/Dialogs.qml:150
6744msgid "Are you sure you want to log out?"
6845msgstr "Segur que voleu sortir?"
6946
70−#: qml/Components/Dialogs.qml:147
47+#: qml/Components/Dialogs.qml:152
7148msgctxt "Button: Lock the system"
7249msgid "Lock"
7350msgstr "Bloca"
7451
75−#: qml/Components/Dialogs.qml:154
52+#: qml/Components/Dialogs.qml:159
7653msgctxt "Button: Log out from the system"
7754msgid "Log Out"
7855msgstr "Surt"
7956
80−#: qml/Components/Dialogs.qml:161 qml/Components/Dialogs.qml:217
81−#: qml/Dash/DashPageHeader.qml:295 qml/Wizard/Pages/passcode-confirm.qml:32
57+#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
58+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
59+#: qml/Wizard/Pages/passcode-confirm.qml:32
8260#: qml/Wizard/Pages/passcode-set.qml:32
8361msgid "Cancel"
8462msgstr "Cancel·la"
8563
86−#: qml/Components/Dialogs.qml:173
64+#: qml/Components/Dialogs.qml:178
8765msgctxt "Title: Reboot dialog"
8866msgid "Reboot"
8967msgstr "Reinicia"
9068
91−#: qml/Components/Dialogs.qml:174
69+#: qml/Components/Dialogs.qml:179
9270msgid "Are you sure you want to reboot?"
9371msgstr "Segur que voleu reiniciar?"
9472
95−#: qml/Components/Dialogs.qml:176
73+#: qml/Components/Dialogs.qml:181
9674msgid "No"
9775msgstr "No"
9876
99−#: qml/Components/Dialogs.qml:182
77+#: qml/Components/Dialogs.qml:187
10078msgid "Yes"
10179msgstr "Sí"
10280
103−#: qml/Components/Dialogs.qml:197
81+#: qml/Components/Dialogs.qml:202
10482msgctxt "Title: Power off/Restart dialog"
10583msgid "Power"
10684msgstr "Energia"
10785
108−#: qml/Components/Dialogs.qml:198
86+#: qml/Components/Dialogs.qml:203
10987msgid ""
11088"Are you sure you would like\n"
11189"to power off?"
@@ -113,28 +91,198 @@ msgstr ""
11391"Segur que voleu\n"
11492"apagar?"
11593
116−#: qml/Components/Dialogs.qml:200
94+#: qml/Components/Dialogs.qml:205
11795msgctxt "Button: Power off the system"
11896msgid "Power off"
11997msgstr "Apaga"
12098
121−#: qml/Components/Dialogs.qml:209
99+#: qml/Components/Dialogs.qml:214
122100msgctxt "Button: Restart the system"
123101msgid "Restart"
124102msgstr "Reinicia"
125103
126−#: qml/Components/Lockscreen.qml:231
104+#: qml/Components/KeyboardShortcutsOverlay.qml:41
105+msgid "Keyboard Shortcuts"
106+msgstr "Dreceres de teclat"
107+
108+#: qml/Components/KeyboardShortcutsOverlay.qml:55
109+msgid "Unity 8"
110+msgstr "Unity 8"
111+
112+#: qml/Components/KeyboardShortcutsOverlay.qml:62
113+msgid "PrtScr"
114+msgstr "ImprPant"
115+
116+#: qml/Components/KeyboardShortcutsOverlay.qml:67
117+msgid "Takes a screenshot."
118+msgstr "Crea una captura de pantalla"
119+
120+#: qml/Components/KeyboardShortcutsOverlay.qml:75
121+msgid "Alt + PrtScr"
122+msgstr "Alt + ImprPant"
123+
124+#: qml/Components/KeyboardShortcutsOverlay.qml:80
125+msgid "Takes a screenshot of a window."
126+msgstr "Crea una captura de pantalla d'una finestra"
127+
128+#: qml/Components/KeyboardShortcutsOverlay.qml:88
129+msgid "Super + Space"
130+msgstr "Super + Espai"
131+
132+#: qml/Components/KeyboardShortcutsOverlay.qml:93
133+msgid "Switches to next keyboard layout."
134+msgstr "Canvia a la següent disposició de teclat."
135+
136+#: qml/Components/KeyboardShortcutsOverlay.qml:101
137+msgid "Super + Shift + Space"
138+msgstr "Super + Maj + Espai"
139+
140+#: qml/Components/KeyboardShortcutsOverlay.qml:106
141+msgid "Switches to previous keyboard layout."
142+msgstr "Canvia a la disposició prèvia de teclat."
143+
144+#: qml/Components/KeyboardShortcutsOverlay.qml:118
145+msgid "Launcher"
146+msgstr "Llançador"
147+
148+#: qml/Components/KeyboardShortcutsOverlay.qml:125
149+msgid "Super (Hold)"
150+msgstr "Super (Mantingut)"
151+
152+#: qml/Components/KeyboardShortcutsOverlay.qml:130
153+msgid "Opens the launcher, displays shortcuts."
154+msgstr "Obre el llançador, mostre les dreceres."
155+
156+#: qml/Components/KeyboardShortcutsOverlay.qml:138
157+msgid "Alt + F1"
158+msgstr "Alt + F1"
159+
160+#: qml/Components/KeyboardShortcutsOverlay.qml:143
161+msgid "Opens launcher keyboard navigation mode."
162+msgstr "Obre el mode de navegació de teclat del llançador."
163+
164+#: qml/Components/KeyboardShortcutsOverlay.qml:151
165+msgid "Super + Tab"
166+msgstr "Super + Tab"
167+
168+#: qml/Components/KeyboardShortcutsOverlay.qml:156
169+msgid "Switches applications via the launcher."
170+msgstr "Commuta les aplicacions mitjançant el llançador."
171+
172+#: qml/Components/KeyboardShortcutsOverlay.qml:164
173+msgid "Super + 0 to 9"
174+msgstr "Super + 0 a 9"
175+
176+#: qml/Components/KeyboardShortcutsOverlay.qml:169
177+msgid "Same as clicking on a launcher icon."
178+msgstr "El mateix que clicar sobre una icona del llançador."
179+
180+#: qml/Components/KeyboardShortcutsOverlay.qml:181
181+msgid "Scopes"
182+msgstr "Lents"
183+
184+#: qml/Components/KeyboardShortcutsOverlay.qml:188
185+msgid "Super (Tap)"
186+msgstr "Super (Toc)"
187+
188+#: qml/Components/KeyboardShortcutsOverlay.qml:193
189+msgid "Opens the Scopes home."
190+msgstr "Obre la pàgina d'inici dels lents."
191+
192+#: qml/Components/KeyboardShortcutsOverlay.qml:209
193+msgid "Switching"
194+msgstr "Commutació"
195+
196+#: qml/Components/KeyboardShortcutsOverlay.qml:216
197+msgid "Alt + Tab"
198+msgstr "Alt + Tab"
199+
200+#: qml/Components/KeyboardShortcutsOverlay.qml:221
201+msgid "Switches between applications."
202+msgstr "Commuta entre aplicacions."
203+
204+#: qml/Components/KeyboardShortcutsOverlay.qml:229
205+msgid "Super + W"
206+msgstr "Super + W"
207+
208+#: qml/Components/KeyboardShortcutsOverlay.qml:234
209+msgid "Opens the desktop spread."
210+msgstr "Obre la distribució de l'escriptori."
211+
212+#: qml/Components/KeyboardShortcutsOverlay.qml:242
213+msgid "Cursor Left or Right"
214+msgstr "Cursor dreta o esquerra"
215+
216+#: qml/Components/KeyboardShortcutsOverlay.qml:247
217+msgid "Moves the focus."
218+msgstr "Mou el focus"
219+
220+#: qml/Components/KeyboardShortcutsOverlay.qml:259
221+msgid "Windows"
222+msgstr "Finestres"
223+
224+#: qml/Components/KeyboardShortcutsOverlay.qml:266
225+msgid "Ctrl + Super + D"
226+msgstr "Ctrl + Super + D"
227+
228+#: qml/Components/KeyboardShortcutsOverlay.qml:271
229+msgid "Minimizes all windows."
230+msgstr "Minimitza totes les finestres."
231+
232+#: qml/Components/KeyboardShortcutsOverlay.qml:279
233+msgid "Ctrl + Super + Up"
234+msgstr "Ctrl + Super + Amunt"
235+
236+#: qml/Components/KeyboardShortcutsOverlay.qml:284
237+msgid "Maximizes the current window."
238+msgstr "Maximitza la finestra actual."
239+
240+#: qml/Components/KeyboardShortcutsOverlay.qml:292
241+msgid "Ctrl + Super + Down"
242+msgstr "Ctrl + Super + Avall"
243+
244+#: qml/Components/KeyboardShortcutsOverlay.qml:297
245+msgid "Minimizes or restores the current window."
246+msgstr "Minimitza o restaura la finestra actual."
247+
248+#: qml/Components/KeyboardShortcutsOverlay.qml:305
249+msgid "Ctrl + Super + Left or Right"
250+msgstr "Ctrl + Super + Esquerra o Dreta"
251+
252+#: qml/Components/KeyboardShortcutsOverlay.qml:310
253+msgid "Semi-maximizes the current window."
254+msgstr "Semi-maximitza la finestra actual."
255+
256+#: qml/Components/KeyboardShortcutsOverlay.qml:318
257+msgid "Alt + F4"
258+msgstr "Alt + F4"
259+
260+#: qml/Components/KeyboardShortcutsOverlay.qml:323
261+msgid "Closes the current window."
262+msgstr "Tanca la finestra actual."
263+
264+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
127265msgid "Return to Call"
128266msgstr "Torna a la trucada"
129267
130−#: qml/Components/Lockscreen.qml:231
268+#: qml/Components/Lockscreen.qml:212
131269msgid "Emergency Call"
132270msgstr "Trucada d'emergència"
133271
134−#: qml/Components/Lockscreen.qml:263
272+#: qml/Components/Lockscreen.qml:244
135273msgid "OK"
136274msgstr "D'acord"
137275
276+#: qml/Components/MediaServices/VideoPlayerControls.qml:44
277+#, qt-format
278+msgid "%1:%2:%3"
279+msgstr "%1:%2:%3"
280+
281+#: qml/Components/MediaServices/VideoPlayerControls.qml:49
282+#, qt-format
283+msgid "%1:%2"
284+msgstr "%1:%2"
285+
138286#: qml/Components/ModeSwitchWarningDialog.qml:32
139287msgid "Apps may have unsaved data:"
140288msgstr "Pot ser que aquestes aplicacions no hagin desat les dades:"
@@ -144,6 +292,8 @@ msgctxt ""
144292"Re-dock means connect the device again to an external screen/mouse/keyboard"
145293msgid "Re-dock, save your work and close these apps to continue."
146294msgstr ""
295+"Torneu a acoblar, deseu la vostra feina i tanqueu aquestes aplicacions abans "
296+"de continuar."
147297
148298#: qml/Components/ModeSwitchWarningDialog.qml:63
149299msgid "Or force close now (unsaved data will be lost)."
@@ -161,88 +311,88 @@ msgstr "Torna a connectar"
161311msgid "Close all"
162312msgstr "Tanca-ho tot"
163313
164−#: qml/Dash/DashPageHeader.qml:333
314+#: qml/Components/SharingPicker.qml:54
315+msgid "Preview Share Item"
316+msgstr "Previsualitzeu l'element a compartir"
317+
318+#: qml/Dash/DashPageHeader.qml:361
165319msgctxt "Button: Open the Ubuntu Store"
166320msgid "Store"
167321msgstr "Botiga"
168322
169−#: qml/Dash/DashPageHeader.qml:340
323+#: qml/Dash/DashPageHeader.qml:368
170324msgctxt "Button: Start a search in the current dash scope"
171325msgid "Search"
172326msgstr "Cerca"
173327
174−#: qml/Dash/DashPageHeader.qml:350
328+#: qml/Dash/DashPageHeader.qml:378
175329msgctxt "Button: Show the current dash scope settings"
176330msgid "Settings"
177331msgstr "Paràmetres"
178332
179−#: qml/Dash/DashPageHeader.qml:357
333+#: qml/Dash/DashPageHeader.qml:385
180334msgid "Remove from Favorites"
181335msgstr "Suprimeix dels preferits"
182336
183−#: qml/Dash/DashPageHeader.qml:357
337+#: qml/Dash/DashPageHeader.qml:385
184338msgid "Add to Favorites"
185339msgstr "Afegeix als preferits"
186340
187−#: qml/Dash/FiltersPopover.qml:60
341+#: qml/Dash/FiltersPopover.qml:61
188342msgid "Refine your results"
189−msgstr ""
343+msgstr "Refineu els resultats"
190344
191−#: qml/Dash/FiltersPopover.qml:69
345+#: qml/Dash/FiltersPopover.qml:70
192346msgid "Reset"
193−msgstr ""
347+msgstr "Restableix"
194348
195−#: qml/Dash/GenericScopeView.qml:579 qml/Dash/GenericScopeView.qml:774
349+#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
196350msgid "Show less"
197−msgstr ""
351+msgstr "Mostra menys"
198352
199−#: qml/Dash/GenericScopeView.qml:579
353+#: qml/Dash/GenericScopeView.qml:545
200354msgid "Show all"
201−msgstr ""
355+msgstr "Mostra-ho tot"
202356
203−#: qml/Dash/GenericScopeView.qml:636
357+#: qml/Dash/GenericScopeView.qml:576
204358msgctxt "Label: Hint for dash search line edit"
205359msgid "Search"
206360msgstr "Cerca"
207361
208−#: qml/Dash/PageHeaderExtraPanel.qml:56
362+#: qml/Dash/PageHeaderExtraPanel.qml:57
209363msgid "Recent Searches"
210364msgstr "Cerques recents"
211365
212−#: qml/Dash/PageHeaderExtraPanel.qml:67
366+#: qml/Dash/PageHeaderExtraPanel.qml:68
213367msgid "Clear All"
214368msgstr "Neteja-ho tot"
215369
216−#: qml/Dash/Previews/PreviewActionCombo.qml:35
370+#: qml/Dash/Previews/PreviewActionCombo.qml:36
217371msgid "More..."
218372msgstr "Més..."
219373
220−#: qml/Dash/Previews/PreviewActionCombo.qml:35
374+#: qml/Dash/Previews/PreviewActionCombo.qml:36
221375msgid "Less..."
222376msgstr "Menys..."
223377
224−#: qml/Dash/Previews/PreviewCommentInput.qml:68
225−#: qml/Dash/Previews/PreviewRatingInput.qml:175
378+#: qml/Dash/Previews/PreviewCommentInput.qml:83
379+#: qml/Dash/Previews/PreviewRatingInput.qml:202
226380msgid "Send"
227381msgstr "Envia"
228382
229−#: qml/Dash/Previews/PreviewRatingInput.qml:82
383+#: qml/Dash/Previews/PreviewRatingInput.qml:109
230384msgid "Rate this"
231385msgstr "Puntueu-ho"
232386
233−#: qml/Dash/Previews/PreviewRatingInput.qml:157
387+#: qml/Dash/Previews/PreviewRatingInput.qml:184
234388msgid "Add a review"
235389msgstr "Afegiu una ressenya"
236390
237−#: qml/Dash/Previews/PreviewSharing.qml:66
238−msgid "Preview Share Item"
239−msgstr ""
240−
241−#: qml/Dash/PullToRefreshScopeStyle.qml:55
391+#: qml/Dash/PullToRefreshScopeStyle.qml:56
242392msgid "Pull to refresh…"
243393msgstr "Estireu per actualitzar..."
244394
245−#: qml/Dash/PullToRefreshScopeStyle.qml:60
395+#: qml/Dash/PullToRefreshScopeStyle.qml:61
246396msgid "Release to refresh…"
247397msgstr "Deixeu anar per actualitzar..."
248398
@@ -250,15 +400,15 @@ msgstr "Deixeu anar per actualitzar..."
250400msgid "Enable location data"
251401msgstr "Habilita les dades d'ubicació"
252402
253−#: qml/Dash/ScopesList.qml:55
403+#: qml/Dash/ScopesList.qml:57
254404msgid "Manage"
255405msgstr "Gestiona"
256406
257−#: qml/Dash/ScopesList.qml:101
407+#: qml/Dash/ScopesList.qml:104
258408msgid "Home"
259409msgstr "Inici"
260410
261−#: qml/Dash/ScopesList.qml:102
411+#: qml/Dash/ScopesList.qml:105
262412msgid "Also installed"
263413msgstr "També instal·lat"
264414
@@ -267,79 +417,63 @@ msgid ""
267417"Your device is now connected to an external display. Use this screen as a "
268418"touch pad to interact with the pointer."
269419msgstr ""
420+"El vostre dispositiu està ara connectat a un monitor extern. Useu aquesta "
421+"pantalla com a ratolí tàctil per interaccionar amb el cursor."
270422
271−#: qml/Greeter/CoverPage.qml:118
423+#: qml/Greeter/CoverPage.qml:127
272424msgid "Unlock"
273425msgstr "Desbloca"
274426
275−#: qml/Greeter/LoginList.qml:239
276−msgid "Retry"
277−msgstr "Torna-ho a provar"
278−
279−#: qml/Greeter/LoginList.qml:240
280−msgid "Tap to unlock"
281−msgstr "Feu un toc per desblocar"
282−
283−#: qml/Greeter/NarrowView.qml:54
284−msgid "Sorry, incorrect passphrase."
285−msgstr "La contrasenya és incorrecta"
286−
287−#: qml/Greeter/NarrowView.qml:55
288−msgid "Sorry, incorrect passcode."
289−msgstr "El codi d'accés no és correcte"
290−
291−#: qml/Greeter/NarrowView.qml:56
292−msgid "This will be your last attempt."
293−msgstr "Aquest serà el darrer intent."
427+#: qml/Greeter/DelayedLockscreen.qml:43
428+msgid "Device Locked"
429+msgstr "Dispositiu bloquejat"
294430
295−#: qml/Greeter/NarrowView.qml:58
296−msgid ""
297−"If passphrase is entered incorrectly, your phone will conduct a factory "
298−"reset and all personal data will be deleted."
431+#: qml/Greeter/DelayedLockscreen.qml:58
432+msgid "You have been locked out due to too many failed passphrase attempts."
299433msgstr ""
300−"Si la contrasenya s'introdueix de manera incorrecta, el telèfon es "
301−"reinicialitzarà a l'estat de fàbrica i se suprimiran totes les dades "
302−"personals."
434+"Se us ha bloquejat l'accés al dispositiu. Heu sobrepassat el nombre "
435+"d'intents d'introducció de la contrasenya."
303436
304−#: qml/Greeter/NarrowView.qml:59
305−msgid ""
306−"If passcode is entered incorrectly, your phone will conduct a factory reset "
307−"and all personal data will be deleted."
437+#: qml/Greeter/DelayedLockscreen.qml:59
438+msgid "You have been locked out due to too many failed passcode attempts."
308439msgstr ""
309−"Si el codi d'accés s'introdueix de manera incorrecta, el telèfon es "
310−"reinicialitzarà a l'estat de fàbrica i se suprimiran totes les dades "
311−"personals."
440+"Se us ha bloquejat l'accés al dispositiu. Heu sobrepassat el nombre "
441+"d'intents d'introducció del codi d'accés."
312442
313−#: qml/Greeter/NarrowView.qml:116
443+#: qml/Greeter/DelayedLockscreen.qml:68
314444#, qt-format
315−msgid "Enter %1"
316−msgstr "Introduïu: %1"
445+msgid "Please wait %1 minute and then try again…"
446+msgid_plural "Please wait %1 minutes and then try again…"
447+msgstr[0] "Espereu %1 minut i torneu-ho a intentar..."
448+msgstr[1] "Espereu %1 minuts i torneu-ho a intentar..."
317449
318−#: qml/Greeter/NarrowView.qml:117
319−msgid "Enter passphrase"
320−msgstr "Introduïu la contrasenya"
450+#: qml/Greeter/Greeter.qml:596
451+msgid "Try again"
452+msgstr "Torna-ho a provar"
321453
322−#: qml/Greeter/NarrowView.qml:118
323−msgid "Enter passcode"
324−msgstr "Introduïu el codi d'accés"
454+#: qml/Greeter/LoginList.qml:70
455+msgid "Passphrase"
456+msgstr "Contrasenya"
325457
326−#: qml/Greeter/NarrowView.qml:119
327−#, qt-format
328−msgid "Sorry, incorrect %1"
329−msgstr "Incorrecte (%1)"
458+#: qml/Greeter/LoginList.qml:71
459+msgid "Passcode"
460+msgstr "Codi d'accés"
461+
462+#: qml/Greeter/LoginList.qml:98
463+msgid "Retry"
464+msgstr "Torna-ho a provar"
330465
331−#: qml/Greeter/NarrowView.qml:120
332−msgid "Sorry, incorrect passphrase"
333−msgstr "La contrasenya no és correcta"
466+#: qml/Greeter/LoginList.qml:99
467+msgid "Log In"
468+msgstr "Inici de sessió"
334469
335−#: qml/Greeter/NarrowView.qml:121
336−msgctxt "passphrase"
337−msgid "Please re-enter"
338−msgstr "Torneu-ho a introduir"
470+#: qml/Greeter/NarrowView.qml:252
471+msgid "Emergency"
472+msgstr "Emergència"
339473
340−#: qml/Greeter/NarrowView.qml:122
341−msgid "Sorry, incorrect passcode"
342−msgstr "El codi d'accés no és correcte"
474+#: qml/Greeter/SessionsList.qml:122
475+msgid "Select desktop environment"
476+msgstr "Seleccioneu l'entorn d'escriptori"
343477
344478#: qml/Notifications/NotificationMenuItemFactory.qml:124
345479msgid "Show password"
@@ -353,62 +487,62 @@ msgstr "Feu un toc per tornar a la trucada..."
353487msgid "Conference"
354488msgstr "Conferència"
355489
356−#: qml/Panel/Indicators/MenuItemFactory.qml:762
490+#: qml/Panel/Indicators/MenuItemFactory.qml:847
357491msgid "Nothing is playing"
358492msgstr "No s'està reproduint res"
359493
360−#: qml/Panel/Indicators/MenuItemFactory.qml:891
494+#: qml/Panel/Indicators/MenuItemFactory.qml:975
361495#, qt-format
362496msgid "%1 hour"
363497msgid_plural "%1 hours"
364498msgstr[0] "%1 hora"
365499msgstr[1] "%1 hores"
366500
367−#: qml/Panel/Indicators/MenuItemFactory.qml:895
501+#: qml/Panel/Indicators/MenuItemFactory.qml:979
368502#, qt-format
369503msgid "%1 minute"
370504msgid_plural "%1 minutes"
371505msgstr[0] "%1 minut"
372506msgstr[1] "%1 minuts"
373507
374−#: qml/Panel/Indicators/MenuItemFactory.qml:900
508+#: qml/Panel/Indicators/MenuItemFactory.qml:984
375509#, qt-format
376510msgid "%1 second"
377511msgid_plural "%1 seconds"
378512msgstr[0] "%1 segon"
379513msgstr[1] "%1 segons"
380514
381−#: qml/Panel/Indicators/MenuItemFactory.qml:903
515+#: qml/Panel/Indicators/MenuItemFactory.qml:987
382516msgid "0 seconds"
383517msgstr "0 segons"
384518
385519#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
386−#: qml/Panel/Indicators/MenuItemFactory.qml:905
520+#: qml/Panel/Indicators/MenuItemFactory.qml:989
387521#, qt-format
388522msgid "%1 remaining"
389523msgstr "Resta %1"
390524
391−#: qml/Panel/Indicators/MenuItemFactory.qml:911
525+#: qml/Panel/Indicators/MenuItemFactory.qml:995
392526msgid "In queue…"
393527msgstr "A la cua..."
394528
395−#: qml/Panel/Indicators/MenuItemFactory.qml:915
529+#: qml/Panel/Indicators/MenuItemFactory.qml:999
396530msgid "Downloading"
397531msgstr "S'està baixant"
398532
399−#: qml/Panel/Indicators/MenuItemFactory.qml:917
533+#: qml/Panel/Indicators/MenuItemFactory.qml:1001
400534msgid "Paused, tap to resume"
401535msgstr "En pausa, feu un toc per continuar"
402536
403−#: qml/Panel/Indicators/MenuItemFactory.qml:919
537+#: qml/Panel/Indicators/MenuItemFactory.qml:1003
404538msgid "Canceled"
405539msgstr "S'ha cancel·lat"
406540
407−#: qml/Panel/Indicators/MenuItemFactory.qml:921
541+#: qml/Panel/Indicators/MenuItemFactory.qml:1005
408542msgid "Finished"
409543msgstr "S'ha finalitzat"
410544
411−#: qml/Panel/Indicators/MenuItemFactory.qml:923
545+#: qml/Panel/Indicators/MenuItemFactory.qml:1007
412546msgid "Failed, tap to retry"
413547msgstr "Ha fallat, feu un toc per tornar-ho a intentar"
414548
@@ -428,187 +562,219 @@ msgctxt "Button: Call back on phone"
428562msgid "Call back"
429563msgstr "Retorna la trucada"
430564
431−#: qml/Stages/SideStage.qml:76
565+#: qml/Stage/SideStage.qml:76
432566msgid "Drag using 3 fingers any application from one window to the other"
433567msgstr ""
568+"Arrossegueu usant 3 dits qualsevol aplicació d'una finestra a una altra"
434569
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
570+#: qml/Tutorial/TutorialLeftLong.qml:49
456571msgid "Long swipe from the left edge to open the Today scope"
457572msgstr ""
573+"Feu una lliscada llarga des de la vora esquerra per obrir l'àmbit Avui"
458574
459575#: qml/Tutorial/TutorialLeft.qml:47
460−msgid "Swipe from the left edge to open the launcher"
576+msgid "Short swipe from the left edge to open the launcher"
461577msgstr ""
578+"Passeu el dit breument des de la vora esquerra per obrir el llançador"
462579
463580#: qml/Tutorial/TutorialRight.qml:55
464581msgid "Push your mouse against the right edge to view your open apps"
465582msgstr ""
583+"Empenyeu el ratolí contra la vora dreta per veure les vostres aplicacions "
584+"obertes"
466585
467586#: qml/Tutorial/TutorialRight.qml:56
468−msgid "Short or long swipe from the right edge to view your open apps"
587+msgid "Swipe from the right edge to view your open apps"
469588msgstr ""
589+"Passeu el dit des de la vora dreta per veure les vostres aplicacions obertes"
470590
471591#: 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"
592+msgid "Swipe from the top edge to access notifications and quick settings"
477593msgstr ""
594+"Passeu el dit des de la vora superior per accedir les notificacions i les "
595+"configuracions ràpides"
478596
479597#: qml/Wizard/Page.qml:54
480598msgctxt "Button: Go back one page in the Wizard"
481599msgid "Back"
482600msgstr "Enrere"
483601
484−#: qml/Wizard/Pages/10-welcome.qml:27
602+#: qml/Wizard/Pages/10-welcome.qml:28
485603msgid "Language"
486−msgstr ""
604+msgstr "Llengua"
487605
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:270
490−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/70-passwd-type.qml:144
606+#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
607+#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
608+#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
609+#: qml/Wizard/Pages/70-passwd-type.qml:145
491610#: qml/Wizard/Pages/75-report-check.qml:84
492−#: qml/Wizard/Pages/passcode-desktop.qml:124
493−#: qml/Wizard/Pages/password-set.qml:141
611+#: qml/Wizard/Pages/passcode-desktop.qml:142
612+#: qml/Wizard/Pages/password-set.qml:142
494613msgid "Next"
495−msgstr ""
614+msgstr "Següent"
615+
616+#: qml/Wizard/Pages/20-keyboard.qml:31
617+msgid "Select Keyboard"
618+msgstr "Seleccioneu el teclat"
619+
620+#: qml/Wizard/Pages/20-keyboard.qml:71
621+msgid "Keyboard language"
622+msgstr "Llengua del teclat"
623+
624+#: qml/Wizard/Pages/20-keyboard.qml:93
625+msgid "Keyboard layout"
626+msgstr "Disposició del teclat"
627+
628+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
629+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
630+#: qml/Wizard/Pages/sim.qml:101
631+msgid "Skip"
632+msgstr "Omet"
496633
497−#: qml/Wizard/Pages/30-wifi.qml:29
634+#: qml/Wizard/Pages/30-wifi.qml:31
498635msgid "Connect to Wi‑Fi"
499636msgstr "Connecta't a la Wi-Fi"
500637
501−#: qml/Wizard/Pages/30-wifi.qml:130
638+#: qml/Wizard/Pages/30-wifi.qml:132
502639msgid "Connected"
503−msgstr ""
640+msgstr "Connectat"
504641
505−#: qml/Wizard/Pages/30-wifi.qml:163
642+#: qml/Wizard/Pages/30-wifi.qml:165
506643msgid "Available Wi-Fi networks"
507−msgstr ""
644+msgstr "Xarxes Wi-Fi disponibles"
508645
509−#: qml/Wizard/Pages/30-wifi.qml:164
646+#: qml/Wizard/Pages/30-wifi.qml:166
510647msgid "No available Wi-Fi networks"
511−msgstr ""
512−
513−#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/60-account.qml:65
514−#: qml/Wizard/Pages/sim.qml:101
515−msgid "Skip"
516−msgstr "Omet"
648+msgstr "No hi ha xarxes Wi-Fi disponibles"
517649
518650#: qml/Wizard/Pages/40-location.qml:27
519651msgid "Location Services"
520−msgstr ""
652+msgstr "Serveis d'ubicació"
521653
522654#: qml/Wizard/Pages/40-location.qml:83
523655msgid ""
524656"Use GPS, Wi-Fi hotspots and mobile network anonymously to detect location "
525657"(recommended)"
526658msgstr ""
659+"Usa anònimament el GPS, punts d'accés Wi-Fi i la xarxa mòbil per detectar la "
660+"ubicació (recomanat)"
527661
528662#: qml/Wizard/Pages/40-location.qml:105
529663#, qt-format
530664msgid "By selecting this option you agree to the Nokia HERE %1."
531−msgstr ""
665+msgstr "Seleccionant aquesta opció esteu d'acord amb el Nokia HERE %1."
532666
533667#: qml/Wizard/Pages/40-location.qml:106
534668msgctxt "part of: Nokia HERE terms and conditions"
535669msgid "terms and conditions"
536−msgstr ""
670+msgstr "termes i condicions"
537671
538672#: qml/Wizard/Pages/40-location.qml:160
539673msgid "GPS only"
540−msgstr ""
674+msgstr "Sols GPS"
541675
542676#: qml/Wizard/Pages/40-location.qml:214
543677msgid "Don't use my location"
544−msgstr ""
678+msgstr "No usis la meva ubicació"
545679
546680#: qml/Wizard/Pages/40-location.qml:260
547681msgid "You can change it later in System Settings."
548−msgstr ""
682+msgstr "Podeu canviar-ho més tard a Paràmetres del sistema."
549683
550−#: qml/Wizard/Pages/50-timezone.qml:29
684+#: qml/Wizard/Pages/50-timezone.qml:30
551685msgid "Time Zone"
552−msgstr ""
686+msgstr "Fus horari"
553687
554−#: qml/Wizard/Pages/50-timezone.qml:181
688+#: qml/Wizard/Pages/50-timezone.qml:182
555689msgid "Enter your city"
556−msgstr ""
690+msgstr "Entreu la vostra ciutat"
557691
558692#: qml/Wizard/Pages/60-account.qml:24
559693msgid "Personalize Your Device"
560−msgstr ""
694+msgstr "Personalitzeu el vostre dispositiu"
561695
562696#: qml/Wizard/Pages/60-account.qml:48
563697msgid "Preferred Name"
564−msgstr ""
698+msgstr "Nom preferit"
565699
566−#: qml/Wizard/Pages/70-passwd-type.qml:39
700+#: qml/Wizard/Pages/70-passwd-type.qml:40
567701msgid "Lock Screen"
568−msgstr ""
702+msgstr "Bloca la pantalla"
569703
570−#: qml/Wizard/Pages/70-passwd-type.qml:101
704+#: qml/Wizard/Pages/70-passwd-type.qml:102
571705msgctxt "Label: Type of security method"
572706msgid "Create new password"
573−msgstr ""
707+msgstr "Crea una contrasenya nova"
574708
575−#: qml/Wizard/Pages/70-passwd-type.qml:103
709+#: qml/Wizard/Pages/70-passwd-type.qml:104
576710msgctxt "Label: Type of security method"
577711msgid "Create passcode (numbers only)"
578−msgstr ""
712+msgstr "Creeu un codi d'accés (sols números)"
579713
580−#: qml/Wizard/Pages/70-passwd-type.qml:105
714+#: qml/Wizard/Pages/70-passwd-type.qml:106
581715msgctxt "Label: Type of security method"
582716msgid "No lock code"
583−msgstr ""
717+msgstr "No hi ha codi de bloqueig"
584718
585719#: qml/Wizard/Pages/75-report-check.qml:26 qml/Wizard/Pages/here-terms.qml:108
586720msgid "Privacy Policy"
587−msgstr ""
721+msgstr "Política de privacitat"
588722
589723#: qml/Wizard/Pages/75-report-check.qml:26
590724msgid "Help Us Improve"
591−msgstr ""
725+msgstr "Ajudeu-nos a millorar"
592726
593727#: qml/Wizard/Pages/75-report-check.qml:59
594728msgid "Improve system performance by sending us crashes and error reports."
595729msgstr ""
730+"Milloreu el rendiment del sistema enviant-nos informes de fallades i errors."
596731
597732#: qml/Wizard/Pages/75-report-check.qml:60
598733msgid "Privacy policy"
734+msgstr "Política de privacitat"
735+
736+#: qml/Wizard/Pages/77-system-update.qml:28
737+msgid "Update Device"
738+msgstr "Actualitza el dispositiu"
739+
740+#: qml/Wizard/Pages/77-system-update.qml:55
741+msgid ""
742+"There is a system update available and ready to install. Afterwards, the "
743+"device will automatically restart."
599744msgstr ""
745+"Hi ha una actualització del sistema disponible i llesta per instal·lar. "
746+"Després, el dispositiu es reiniciarà automàticament."
747+
748+#: qml/Wizard/Pages/77-system-update.qml:76
749+msgctxt "string identifying name of the update"
750+msgid "Ubuntu system"
751+msgstr "Sistema de l'Ubuntu"
752+
753+#: qml/Wizard/Pages/77-system-update.qml:83
754+#, qt-format
755+msgctxt "version of the system update"
756+msgid "Version %1"
757+msgstr "Versió %1"
758+
759+#: qml/Wizard/Pages/77-system-update.qml:102
760+msgid "This could take a few minutes..."
761+msgstr "Això pot trigar uns pocs minuts..."
762+
763+#: qml/Wizard/Pages/77-system-update.qml:116
764+msgid "Install and restart now"
765+msgstr "Instal·la i reinicia ara"
600766
601767#: qml/Wizard/Pages/80-finished.qml:89
602768msgid "Welcome to Ubuntu"
603−msgstr ""
769+msgstr "Us donem la benvinguda a l'Ubuntu"
604770
605771#: qml/Wizard/Pages/80-finished.qml:104
606772msgid "You are ready to use your device now"
607−msgstr ""
773+msgstr "Ara ja esteu a punt per usar el vostre dispositiu"
608774
609775#: qml/Wizard/Pages/80-finished.qml:124
610776msgid "Get Started"
611−msgstr ""
777+msgstr "Introducció"
612778
613779#: qml/Wizard/Pages/here-terms.qml:25
614780msgid "Terms & Conditions"
@@ -617,6 +783,7 @@ msgstr "Condicions generals"
617783#: qml/Wizard/Pages/here-terms.qml:69
618784msgid "Your device uses positioning technologies provided by HERE."
619785msgstr ""
786+"El vostre dispositiu usa tecnologies de posicionament proveïdes per HERE."
620787
621788#: qml/Wizard/Pages/here-terms.qml:81
622789msgid ""
@@ -624,92 +791,98 @@ msgid ""
624791"collects information about nearby cell towers and Wi-Fi hotspots around your "
625792"current location whenever your position is being found."
626793msgstr ""
794+"Per proveir-vos de serveis de posicionament i per millorar la seva qualitat, "
795+"HERE recull informació sobre torres de telefonia mòbil i punts d'accés Wi-Fi "
796+"al voltant de la vostra ubicació actual sempre que s'està buscant la vostra "
797+"posició."
627798
628799#: qml/Wizard/Pages/here-terms.qml:93
629800msgid ""
630801"The information collected is used to analyze the service and to improve the "
631802"use of service, but not to identify you personally."
632803msgstr ""
804+"La informació recollida s'usa per analitzar el servei i per millorar l'ús "
805+"del servei, però no per identificar-vos personalment."
633806
634807#: qml/Wizard/Pages/here-terms.qml:106
635808#, qt-format
636809msgid "By continuing, you agree to the HERE platform %1 and %2."
637−msgstr ""
810+msgstr "En continuar, esteu d'acord amb la plataforma HERE %1 i %2."
638811
639812#: qml/Wizard/Pages/here-terms.qml:107
640813msgid "Service Terms"
641−msgstr ""
814+msgstr "Termes del servei"
642815
643816#: qml/Wizard/Pages/passcode-confirm.qml:43
644−#: qml/Wizard/Pages/passcode-desktop.qml:80
817+#: qml/Wizard/Pages/passcode-desktop.qml:97
645818msgid "Confirm passcode"
646819msgstr "Confirmeu el codi d'accés"
647820
648821#: qml/Wizard/Pages/passcode-confirm.qml:45
649822msgid "Incorrect passcode."
650−msgstr ""
823+msgstr "Codi d'accés incorrecte."
651824
652825#: qml/Wizard/Pages/passcode-confirm.qml:45
653826msgctxt "Enter the passcode again"
654827msgid "Please re-enter."
655−msgstr ""
828+msgstr "Si us plau torneu a introduir-lo."
656829
657−#: qml/Wizard/Pages/passcode-desktop.qml:30
830+#: qml/Wizard/Pages/passcode-desktop.qml:31
658831msgid "Lock Screen Passcode"
659−msgstr ""
832+msgstr "Codi d'accés al bloqueig de pantalla"
660833
661−#: qml/Wizard/Pages/passcode-desktop.qml:56
834+#: qml/Wizard/Pages/passcode-desktop.qml:61
662835msgid "Enter 4 numbers to setup your passcode"
663−msgstr ""
836+msgstr "Entreu 4 números per establir el codi d'accés"
664837
665−#: qml/Wizard/Pages/passcode-desktop.qml:65
838+#: qml/Wizard/Pages/passcode-desktop.qml:77
666839#: qml/Wizard/Pages/passcode-set.qml:54
667840msgid "Choose passcode"
668−msgstr ""
841+msgstr "Trieu el codi d'accés"
669842
670−#: qml/Wizard/Pages/passcode-desktop.qml:105
843+#: qml/Wizard/Pages/passcode-desktop.qml:127
671844msgid "Passcode too short"
672−msgstr ""
845+msgstr "El codi d'accés és massa curt"
673846
674−#: qml/Wizard/Pages/passcode-desktop.qml:107
847+#: qml/Wizard/Pages/passcode-desktop.qml:129
675848msgid "Passcodes match"
676−msgstr ""
849+msgstr "Els codis d'accés concorden"
677850
678−#: qml/Wizard/Pages/passcode-desktop.qml:109
851+#: qml/Wizard/Pages/passcode-desktop.qml:131
679852msgid "Passcodes do not match"
680−msgstr ""
853+msgstr "Els codis d'accés no concorden"
681854
682855#: qml/Wizard/Pages/passcode-set.qml:62
683856msgid "Passcode must be 4 characters long"
684−msgstr ""
857+msgstr "El codi d'accés ha de tenir una longitud de 4 caràcters"
685858
686−#: qml/Wizard/Pages/password-set.qml:30
859+#: qml/Wizard/Pages/password-set.qml:31
687860msgid "Lock Screen Password"
688−msgstr ""
861+msgstr "Contrasenya de bloqueig de pantalla"
689862
690−#: qml/Wizard/Pages/password-set.qml:61
863+#: qml/Wizard/Pages/password-set.qml:62
691864msgid "Enter at least 8 characters"
692−msgstr ""
865+msgstr "Entreu almenys 8 caràcters"
693866
694−#: qml/Wizard/Pages/password-set.qml:73
867+#: qml/Wizard/Pages/password-set.qml:74
695868msgid "Choose password"
696−msgstr ""
869+msgstr "Escolliu la contrasenya"
697870
698−#: qml/Wizard/Pages/password-set.qml:103
871+#: qml/Wizard/Pages/password-set.qml:104
699872msgid "Confirm password"
700−msgstr ""
873+msgstr "Confirmeu la contrasenya"
701874
702875#: qml/Wizard/Pages/sim.qml:27
703876msgid "No SIM card installed"
704−msgstr ""
877+msgstr "No hi cap SIM instal·lada"
705878
706879#: qml/Wizard/Pages/sim.qml:54
707880msgid "SIM card added"
708−msgstr ""
881+msgstr "S'ha afegit una targeta SIM"
709882
710883#: qml/Wizard/Pages/sim.qml:55
711884msgid "You must restart the device to access the mobile network."
712−msgstr ""
885+msgstr "Heu de reiniciar el dispositiu per accedir a la xarxa mòbil."
713886
714887#: qml/Wizard/Pages/sim.qml:59
715888msgid "Restart"
@@ -717,35 +890,39 @@ msgstr "Reinicia"
717890
718891#: qml/Wizard/Pages/sim.qml:78
719892msgid "You won’t be able to make calls or use text messaging without a SIM."
720−msgstr ""
893+msgstr "No podreu fer trucades o usar la missatgeria de text sense una SIM."
721894
722895#: qml/Wizard/Pages/sim.qml:90
723896msgid "To proceed with no SIM tap Skip."
724−msgstr ""
897+msgstr "Per procedir sense cap SIM toqueu Omet."
725898
726899#: qml/Wizard/PasswordMeter.qml:87
727−msgid "Passwords match"
728−msgstr ""
900+msgid "Password too short"
901+msgstr "La contrasenya es massa curta"
729902
730903#: qml/Wizard/PasswordMeter.qml:89
904+msgid "Passwords match"
905+msgstr "Les contrasenyes coincideixen"
906+
907+#: qml/Wizard/PasswordMeter.qml:91
731908msgid "Passwords do not match"
732−msgstr ""
909+msgstr "Les contrasenyes no coincideixen"
733910
734−#: qml/Wizard/PasswordMeter.qml:93
911+#: qml/Wizard/PasswordMeter.qml:95
735912msgid "Strong password"
736−msgstr ""
913+msgstr "La contrasenya és forta"
737914
738−#: qml/Wizard/PasswordMeter.qml:95
915+#: qml/Wizard/PasswordMeter.qml:97
739916msgid "Fair password"
740−msgstr ""
917+msgstr "La contrasenya és acceptable"
741918
742−#: qml/Wizard/PasswordMeter.qml:97
919+#: qml/Wizard/PasswordMeter.qml:99
743920msgid "Weak password"
744−msgstr ""
921+msgstr "La contrasenya és dèbil"
745922
746−#: qml/Wizard/PasswordMeter.qml:99
923+#: qml/Wizard/PasswordMeter.qml:101
747924msgid "Very weak password"
748−msgstr ""
925+msgstr "La contrasenya és molt dèbil"
749926
750927#~ msgid "Confirm"
751928#~ msgstr "Confirma"
@@ -826,12 +1003,33 @@ msgstr ""
8261003#~ msgid "Roaming"
8271004#~ msgstr "Itinerància"
8281005
1006+#~ msgid "Sorry, incorrect passphrase."
1007+#~ msgstr "La contrasenya és incorrecta"
1008+
1009+#~ msgid ""
1010+#~ "If passphrase is entered incorrectly, your phone will conduct a factory "
1011+#~ "reset and all personal data will be deleted."
1012+#~ msgstr ""
1013+#~ "Si la contrasenya s'introdueix de manera incorrecta, el telèfon es "
1014+#~ "reinicialitzarà a l'estat de fàbrica i se suprimiran totes les dades "
1015+#~ "personals."
1016+
1017+#~ msgid "This will be your last attempt."
1018+#~ msgstr "Aquest serà el darrer intent."
1019+
8291020#~ msgid "Favorites"
8301021#~ msgstr "Preferides"
8311022
8321023#~ msgid "All"
8331024#~ msgstr "Totes"
8341025
1026+#, qt-format
1027+#~ msgid "Sorry, incorrect %1"
1028+#~ msgstr "Incorrecte (%1)"
1029+
1030+#~ msgid "Sorry, incorrect passphrase"
1031+#~ msgstr "La contrasenya no és correcta"
1032+
8351033#~ msgid "Log out"
8361034#~ msgstr "Surt"
8371035
@@ -844,6 +1042,9 @@ msgstr ""
8441042#~ msgid "Power"
8451043#~ msgstr "Energia"
8461044
1045+#~ msgid "Sorry, incorrect passcode"
1046+#~ msgstr "El codi d'accés no és correcte"
1047+
8471048#~ msgid "Power off"
8481049#~ msgstr "Apaga"
8491050
@@ -853,12 +1054,33 @@ msgstr ""
8531054#~ msgid "Shut down"
8541055#~ msgstr "Apaga"
8551056
1057+#~ msgid "Sorry, incorrect passcode."
1058+#~ msgstr "El codi d'accés no és correcte"
1059+
1060+#~ msgid ""
1061+#~ "If passcode is entered incorrectly, your phone will conduct a factory reset "
1062+#~ "and all personal data will be deleted."
1063+#~ msgstr ""
1064+#~ "Si el codi d'accés s'introdueix de manera incorrecta, el telèfon es "
1065+#~ "reinicialitzarà a l'estat de fàbrica i se suprimiran totes les dades "
1066+#~ "personals."
1067+
1068+#~ msgid "Enter passphrase"
1069+#~ msgstr "Introduïu la contrasenya"
1070+
8561071#~ msgid "Please re-enter"
8571072#~ msgstr "Torneu-ho a introduir"
8581073
1074+#~ msgid "Enter passcode"
1075+#~ msgstr "Introduïu el codi d'accés"
1076+
8591077#~ msgid "Manage Scopes"
8601078#~ msgstr "Gestioneu les lents"
8611079
1080+#, qt-format
1081+#~ msgid "Enter %1"
1082+#~ msgstr "Introduïu: %1"
1083+
8621084#~ msgid "Add a SIM card and restart your device"
8631085#~ msgstr "Afegiu una targeta SIM i reinicieu el dispositiu"
8641086
@@ -978,6 +1200,9 @@ msgstr ""
9781200#~ msgid "Open special menus"
9791201#~ msgstr "Obre els menús especials"
9801202
1203+#~ msgid "Tap to unlock"
1204+#~ msgstr "Feu un toc per desblocar"
1205+
9811206#~ msgid "To view open apps"
9821207#~ msgstr "Per veure les aplicacions obertes"
9831208
@@ -1071,5 +1296,42 @@ msgstr ""
10711296#~ msgid "%l:%M %p"
10721297#~ msgstr "%l∶%M %p"
10731298
1299+#~ msgctxt "passphrase"
1300+#~ msgid "Please re-enter"
1301+#~ msgstr "Torneu-ho a introduir"
1302+
10741303#~ msgid "Call back"
10751304#~ msgstr "Retorna la trucada"
1305+
1306+#~ msgid "Swipe up for recent calls"
1307+#~ msgstr "Llisqueu cap amunt per a trucades recents"
1308+
1309+#~ msgid "Swipe up for favorite calculations"
1310+#~ msgstr "Llisqueu cap amunt per als càlculs favorits"
1311+
1312+#~ msgid "Swipe up to create a message"
1313+#~ msgstr "Llisqueu cap amunt per crear un missatge"
1314+
1315+#~ msgid "Swipe from the left edge to open the launcher"
1316+#~ msgstr "Llisqueu des de la vora esquerra per obrir el llançador"
1317+
1318+#~ msgid "Swipe from the top right edge to open the notification bar"
1319+#~ msgstr ""
1320+#~ "Llisqueu des de la vora superior dreta per obrir la barra de notificacions"
1321+
1322+#~ msgid "Swipe from the top edge to open the notification bar"
1323+#~ msgstr "Llisqueu des de la vora superior per obrir la barra de notificacions"
1324+
1325+#~ msgid "Hover your mouse on the right edge to view your open apps"
1326+#~ msgstr "Passeu el ratolí a la vora dreta per veure les aplicacions obertes"
1327+
1328+#~ msgid "Short or long swipe from the right edge to view your open apps"
1329+#~ msgstr ""
1330+#~ "Feu una lliscada llarga o curta des de la vora dreta per veure les "
1331+#~ "aplicacions obertes"
1332+
1333+#~ msgid "Swipe up to manage the app"
1334+#~ msgstr "Llisqueu cap amunt per gestionar l'aplicació"
1335+
1336+#~ msgid "Swipe up to add a contact"
1337+#~ msgstr "Llisqueu per afegir un contacte"
po/ca@valencia.po+407−209

This diff is too big to show here.

po/ce.po+351−192

This diff is too big to show here.

po/ckb.po+351−192

This diff is too big to show here.

po/co.po+454−214

This diff is too big to show here.

po/cs.po+407−206

This diff is too big to show here.

po/cy.po+413−208

This diff is too big to show here.

po/da.po+408−207

This diff is too big to show here.

po/de.po+470−234

This diff is too big to show here.

po/el.po+414−209

This diff is too big to show here.

po/en_AU.po+439−207

This diff is too big to show here.

po/en_GB.po+444−210

This diff is too big to show here.

po/eo.po+353−194

This diff is too big to show here.

po/es.po+449−213

This diff is too big to show here.

po/eu.po+412−207

This diff is too big to show here.

po/fa.po+447−212

This diff is too big to show here.

po/fi.po+445−211

This diff is too big to show here.

po/fo.po+442−265

This diff is too big to show here.

po/fr.po+455−218

This diff is too big to show here.

po/ga.po+410−205

This diff is too big to show here.

po/gd.po+457−218

This diff is too big to show here.

po/gl.po+445−209

This diff is too big to show here.

po/gv.po+357−198

This diff is too big to show here.

po/he.po+373−196

This diff is too big to show here.

po/hi.po+351−192

This diff is too big to show here.

po/hr.po+446−212

This diff is too big to show here.

po/hu.po+446−211

This diff is too big to show here.

po/hy.po+389−201

This diff is too big to show here.

po/ia.po+446−210

This diff is too big to show here.

po/id.po+401−203

This diff is too big to show here.

po/is.po+404−206

This diff is too big to show here.

po/it.po+451−215

This diff is too big to show here.

po/ja.po+398−200

This diff is too big to show here.

po/km.po+389−201

This diff is too big to show here.

po/kn.po+351−192

This diff is too big to show here.

po/ko.po+406−201

This diff is too big to show here.

po/ku.po+386−198

This diff is too big to show here.

po/ky.po+351−192

This diff is too big to show here.

po/lo.po+351−192

This diff is too big to show here.

po/lt.po+351−192

This diff is too big to show here.

po/lv.po+410−205

This diff is too big to show here.

po/ml.po+351−192

This diff is too big to show here.

po/mr.po+351−192

This diff is too big to show here.

po/ms.po+447−210

This diff is too big to show here.

po/my.po+352−193

This diff is too big to show here.

po/nb.po+447−213

This diff is too big to show here.

po/ne.po+352−193

This diff is too big to show here.

po/nl.po+515−270

This diff is too big to show here.

po/nn.po+351−192

This diff is too big to show here.

po/oc.po+480−261

This diff is too big to show here.

po/or.po+351−192

This diff is too big to show here.

po/pa.po+404−203

This diff is too big to show here.

po/pl.po+451−215

This diff is too big to show here.

po/pt.po+450−214

This diff is too big to show here.

po/pt_BR.po+411−206

This diff is too big to show here.

po/ro.po+410−209

This diff is too big to show here.

po/ru.po+440−217

This diff is too big to show here.

po/shn.po+351−192

This diff is too big to show here.

po/si.po+351−192

This diff is too big to show here.

po/sk.po+450−216

This diff is too big to show here.

po/sl.po+441−209

This diff is too big to show here.

po/sq.po+372−195

This diff is too big to show here.

po/sr.po+447−212

This diff is too big to show here.

po/sv.po+449−214

This diff is too big to show here.

po/sw.po+406−205

This diff is too big to show here.

po/ta.po+351−192

This diff is too big to show here.

po/te.po+351−192

This diff is too big to show here.

po/th.po+351−192

This diff is too big to show here.

po/tr.po+497−273

This diff is too big to show here.

po/ug.po+427−222

This diff is too big to show here.

po/uk.po+457−215

This diff is too big to show here.

po/unity8.pot+350−191

This diff is too big to show here.

po/ur.po+351−192

This diff is too big to show here.

po/uz.po+351−192

This diff is too big to show here.

po/vi.po+351−192

This diff is too big to show here.

po/wo.po+409−204

This diff is too big to show here.

po/xh.po+351−192

This diff is too big to show here.

po/zh_CN.po+445−213

This diff is too big to show here.

po/zh_HK.po+351−192

This diff is too big to show here.

po/zh_TW.po+418−213

This diff is too big to show here.

qml/CMakeLists.txt+1−1

This diff is too big to show here.

qml/Components/BlurLayer.qml+10−40

This diff is too big to show here.

qml/Components/Carousel.qml+1−2

This diff is too big to show here.

qml/Components/Dialogs.qml+13−8

This diff is too big to show here.

qml/Components/EdgeBarrier.qml+2

This diff is too big to show here.

qml/Components/FadingLabel.qmlnew file+42

This diff is too big to show here.

qml/Components/Flickable.qmlnew file+24

This diff is too big to show here.

qml/Components/FloatingFlickable.qml+4

This diff is too big to show here.

qml/Components/GridView.qmlnew file+24

This diff is too big to show here.

qml/Components/InputMethod.qml+8−44

This diff is too big to show here.

qml/Components/KeyboardShortcutsOverlay.qmlnew file+334

This diff is too big to show here.

qml/Components/KeymapSwitcher.qml+27−1

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.pngdeleted

Binary file not shown.

qml/Components/ListView.qmlnew file+24

This diff is too big to show here.

qml/Components/Lockscreen.qml+1−20

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/NotificationAudio.qml+20−3

This diff is too big to show here.

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

This diff is too big to show here.

qml/Components/PhysicalKeysMapper.qml+2−22

This diff is too big to show here.

qml/Components/ResponsiveGridView.qml+1

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

This diff is too big to show here.

qml/Components/Wallpaper.qmlnew file+44

This diff is too big to show here.

qml/Components/WallpaperResolver.qml+24−38

This diff is too big to show here.

qml/Components/WindowControlButtons.qml+25−27

This diff is too big to show here.

qml/Components/ZoomableImage.qml+1−1

This diff is too big to show here.

qml/Components/flickableUtils.jsnew file+28

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

This diff is too big to show here.

qml/Dash/CardGrid.qml+4−4

This diff is too big to show here.

qml/Dash/CardTool.qml+75−18

This diff is too big to show here.

qml/Dash/Dash.qml+1−1

This diff is too big to show here.

qml/Dash/DashApplication.qml+16−5

This diff is too big to show here.

qml/Dash/DashBackground.qml+2−11

This diff is too big to show here.

qml/Dash/DashContent.qml−2

This diff is too big to show here.

qml/Dash/DashNavigation.qml+1

This diff is too big to show here.

qml/Dash/DashNavigationList.qml+48−45

This diff is too big to show here.

qml/Dash/DashPageHeader.qml+67−71

This diff is too big to show here.

qml/Components/ListItems/Header.qml → qml/Dash/DashSectionHeader.qmlrenamed+21−21

This diff is too big to show here.

qml/Dash/Filters/FilterExpandableWidget.qml+1

This diff is too big to show here.

qml/Dash/Filters/FilterOptionSelector.qml+2

This diff is too big to show here.

qml/Dash/FiltersPopover.qml+1

This diff is too big to show here.

qml/Dash/GenericScopeView.qml+14−73

This diff is too big to show here.

qml/Dash/PageHeaderExtraPanel.qml+2

This diff is too big to show here.

qml/Dash/Previews/Preview.qml+36−7

This diff is too big to show here.

qml/Dash/Previews/PreviewActionCombo.qml+13−2

This diff is too big to show here.

qml/Dash/Previews/PreviewActions.qml+3−2

This diff is too big to show here.

qml/Dash/Previews/PreviewAudioPlayback.qml+10−9

This diff is too big to show here.

qml/Dash/Previews/PreviewComment.qml+3

This diff is too big to show here.

qml/Dash/Previews/PreviewCommentInput.qml+15

This diff is too big to show here.

qml/Dash/Previews/PreviewHeader.qml+5−3

This diff is too big to show here.

qml/Dash/Previews/PreviewIconActions.qml+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+112

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/PreviewProgress.qml+6−3

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

This diff is too big to show here.

qml/Dash/Previews/PreviewRatingSingleDisplay.qml+12−9

This diff is too big to show here.

qml/Components/ListItems/ThinDivider.qml → qml/Dash/Previews/PreviewSingleton/PreviewSingleton.qmlrenamed+5−10

This diff is too big to show here.

qml/Dash/Previews/PreviewSingleton/qmldirnew file+1

This diff is too big to show here.

qml/Dash/Previews/PreviewTable.qml+8−2

This diff is too big to show here.

qml/Dash/Previews/PreviewTextSummary.qml+7−2

This diff is too big to show here.

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

This diff is too big to show here.

qml/Dash/Previews/PreviewWidget.qml+5−2

This diff is too big to show here.

qml/Dash/Previews/PreviewWidgetFactory.qml+13−3

This diff is too big to show here.

qml/Dash/Previews/PreviewZoomableImage.qml+2−1

This diff is too big to show here.

qml/Dash/PullToRefreshScopeStyle.qml+1

This diff is too big to show here.

qml/Dash/ScopeListView.qml+4−2

This diff is too big to show here.

qml/Dash/ScopesList.qml+3

This diff is too big to show here.

qml/Dash/ScopesListCategory.qml+3−2

This diff is too big to show here.

qml/Dash/graphics/dash_divider_top_darkgrad@27.pngdeleted

Binary file not shown.

qml/Dash/graphics/dash_divider_top_lightgrad@27.pngdeleted

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.pngdeleted

Binary file not shown.

qml/Dash/graphics/overview_hint@30.pngnew file

Binary file not shown.

qml/Dash/graphics/pagination_dot_off@30.pngdeleted

Binary file not shown.

qml/Dash/graphics/pagination_dot_on@30.pngdeleted

Binary file not shown.

qml/Dash/graphics/paper.pngdeleted

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/Greeter/Circle.qmlnew file+57

This diff is too big to show here.

qml/Greeter/Clock.qml−2

This diff is too big to show here.

qml/Greeter/CoverPage.qml+29−7

This diff is too big to show here.

qml/Components/DelayedLockscreen.qml → qml/Greeter/DelayedLockscreen.qmlrenamed+6−14

This diff is too big to show here.

qml/Greeter/FullLightDMImpl.qmlnew file+30

This diff is too big to show here.

qml/Greeter/Greeter.qml+242−84

This diff is too big to show here.

qml/Greeter/GreeterPrompt.qmlnew file+228

This diff is too big to show here.

qml/Greeter/Infographics.qml+44−23

This diff is too big to show here.

qml/Greeter/IntegratedLightDMImpl.qml+3−2

This diff is too big to show here.

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

This diff is too big to show here.

qml/Greeter/LoginAreaContainer.qmlnew file+38

This diff is too big to show here.

qml/Greeter/LoginList.qml+157−87

This diff is too big to show here.

qml/Greeter/NarrowView.qml+155−52

This diff is too big to show here.

qml/Greeter/SessionIcon.qmlnew file+47

This diff is too big to show here.

qml/Greeter/SessionsList.qmlnew file+187

This diff is too big to show here.

qml/Greeter/WideView.qml+112−34

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.pngdeleted

Binary file not shown.

qml/Greeter/graphics/session_icons/gnome_badge.pngnew file

Binary file not shown.

qml/Greeter/graphics/session_icons/kde_badge.pngnew file

Binary file not shown.

qml/Greeter/graphics/session_icons/recovery_console_badge.pngnew file

Binary file not shown.

qml/Greeter/graphics/session_icons/ubuntu_badge.pngnew file

Binary file not shown.

qml/Greeter/graphics/session_icons/unknown_badge.pngnew file

Binary file not shown.

qml/Greeter/qmldirnew file+1

This diff is too big to show here.

qml/Launcher/Launcher.qml+2

This diff is too big to show here.

qml/Launcher/LauncherDelegate.qml+4−8

This diff is too big to show here.

qml/Launcher/LauncherPanel.qml+14−7

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

This diff is too big to show here.

qml/Notifications/NotificationMenuItemFactory.qml−3

This diff is too big to show here.

qml/Notifications/Notifications.qml+14−24

This diff is too big to show here.

qml/Notifications/ShapedIcon.qml+1

This diff is too big to show here.

qml/OrientedShell.qml+10−3

This diff is too big to show here.

qml/Panel/IndicatorItemRow.qml+13−2

This diff is too big to show here.

qml/Panel/IndicatorPage.qml+1

This diff is too big to show here.

qml/Panel/Indicators/MenuItemFactory.qml+161−88

This diff is too big to show here.

qml/Panel/Indicators/client/IndicatorRepresentation.qml+27−23

This diff is too big to show here.

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

This diff is too big to show here.

qml/Panel/Indicators/client/IndicatorsList.qml+19−17

This diff is too big to show here.

qml/Panel/Indicators/client/IndicatorsTree.qml+6−8

This diff is too big to show here.

qml/Panel/IndicatorsMenu.qml+3−1

This diff is too big to show here.

qml/Panel/Panel.qml+16−17

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/RotationStates.qml−6

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+231−184

This diff is too big to show here.

qml/Stages/AbstractStage.qml → qml/Stage/AbstractStage.qmlrenamed

The content is the same.

qml/Stages/ApplicationWindow.qml → qml/Stage/ApplicationWindow.qmlrenamed+45−46

This diff is too big to show here.

qml/Stage/DecoratedWindow.qmlnew file+266

This diff is too big to show here.

qml/Stages/DesktopSpread.qml → qml/Stage/DesktopSpread.qmlrenamed

The content is the same.

qml/Stages/DesktopSpreadDelegate.qml → qml/Stage/DesktopSpreadDelegate.qmlrenamed

The content is the same.

qml/Stage/FakeMaximizeDelegate.qmlnew file+233

This diff is too big to show here.

qml/Stages/MainViewStyle.qml → qml/Stage/MainViewStyle.qmlrenamed

The content is the same.

qml/Stage/MoveHandler.qmlnew file+180

This diff is too big to show here.

qml/Stages/OrientationChangeAnimation.qml → qml/Stage/OrientationChangeAnimation.qmlrenamed+30−6

This diff is too big to show here.

qml/Stages/PhoneStage.qml → qml/Stage/PhoneStage.qmlrenamed

The content is the same.

qml/Stages/PromptSurfaceAnimations.qml → qml/Stage/PromptSurfaceAnimations.qmlrenamed+2−3

This diff is too big to show here.

qml/Components/UbuntuShapeForItem.qml → qml/Stage/ResizeGrip.qmlrenamed+21−22

This diff is too big to show here.

qml/Stages/ShimStage.qml → qml/Stage/ShimStage.qmlrenamed

The content is the same.

qml/Stages/SideStage.qml → qml/Stage/SideStage.qmlrenamed

The content is the same.

qml/Stages/Splash.qml → qml/Stage/Splash.qmlrenamed+3−6

This diff is too big to show here.

qml/Stage/Spread/BezierCurve.qmlnew file+45

This diff is too big to show here.

qml/Stage/Spread/KeySpline.jsnew file+66

This diff is too big to show here.

qml/Stage/Spread/MathUtils.jsnew file+95

This diff is too big to show here.

qml/Stage/Spread/OpacityMask.qmlnew file+82

This diff is too big to show here.

qml/Stage/Spread/Spread.qmlnew file+162

This diff is too big to show here.

qml/Stage/Spread/SpreadDelegateInputArea.qmlnew file+189

This diff is too big to show here.

qml/Stage/Spread/SpreadMaths.qmlnew file+78

This diff is too big to show here.

qml/Stage/Spread/StagedRightEdgeMaths.qmlnew file+174

This diff is too big to show here.

qml/Stage/Spread/WindowedRightEdgeMaths.qmlnew file+81

This diff is too big to show here.

qml/Stage/Spread/cubic-bezier.jsnew file+39

This diff is too big to show here.

qml/Stages/SpreadDelegate.qml → qml/Stage/SpreadDelegate.qmlrenamed

The content is the same.

qml/Stages/SpreadMaths.qml → qml/Stage/SpreadMaths.qmlrenamed

The content is the same.

qml/Stage/Stage.qmlnew file+1945

This diff is too big to show here.

qml/Stage/StageMaths.qmlnew file+79

This diff is too big to show here.

qml/Stages/StagedFullscreenPolicy.qml → qml/Stage/StagedFullscreenPolicy.qmlrenamed

The content is the same.

qml/Stages/SurfaceContainer.qml → qml/Stage/SurfaceContainer.qmlrenamed+5−52

This diff is too big to show here.

qml/Stages/TabletSideStageTouchGesture.qml → qml/Stage/TabletSideStageTouchGesture.qmlrenamed+3

This diff is too big to show here.

qml/Stages/TabletStage.qml → qml/Stage/TabletStage.qmlrenamed

The content is the same.

qml/Stages/TopLevelSurfaceRepeater.qml → qml/Stage/TopLevelSurfaceRepeater.qmlrenamed+16−1

This diff is too big to show here.

qml/Stages/TransformedSpreadDelegate.qml → qml/Stage/TransformedSpreadDelegate.qmlrenamed

The content is the same.

qml/Stages/TransformedTabletSpreadDelegate.qml → qml/Stage/TransformedTabletSpreadDelegate.qmlrenamed

The content is the same.

qml/Stage/WindowControlsOverlay.qmlnew file+257

This diff is too big to show here.

qml/Stages/WindowDecoration.qml → qml/Stage/WindowDecoration.qmlrenamed+24−33

This diff is too big to show here.

qml/Stage/WindowInfoItem.qmlnew file+53

This diff is too big to show here.

qml/Stages/WindowResizeArea.qml → qml/Stage/WindowResizeArea.qmlrenamed+51−61

This diff is too big to show here.

qml/Stages/WindowedFullscreenPolicy.qml → qml/Stage/WindowedFullscreenPolicy.qmlrenamed

The content is the same.

qml/Stage/graphics/PageHeaderBaseDividerBottom@18.pngnew file

Binary file not shown.

qml/Stage/graphics/PageHeaderBaseDividerLight@18.pngnew file

Binary file not shown.

qml/Stages/graphics/PageHeaderBaseDividerLight@18.sci → qml/Stage/graphics/PageHeaderBaseDividerLight@18.scirenamed

The content is the same.

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

Binary file not shown.

qml/Stage/graphics/arrows.pngnew file

Binary file not shown.

qml/Stages/graphics/sidestage_drag.svg → qml/Stage/graphics/sidestage_drag.svgrenamed

The content is the same.

qml/Stage/graphics/sidestage_handle@20.pngnew file

Binary file not shown.

qml/Stages/graphics/sidestage_handle@20.sci → qml/Stage/graphics/sidestage_handle@20.scirenamed

The content is the same.

qml/Stages/graphics/sidestage_open.svg → qml/Stage/graphics/sidestage_open.svgrenamed

The content is the same.

qml/Stages/graphics/window-close.svg → qml/Stage/graphics/window-close.svgrenamed

The content is the same.

qml/Stages/DecoratedWindow.qmldeleted−109

This diff is too big to show here.

qml/Stages/DesktopStage.qmldeleted−684

This diff is too big to show here.

qml/Stages/graphics/PageHeaderBaseDividerBottom@18.pngdeleted

Binary file not shown.

qml/Stages/graphics/PageHeaderBaseDividerLight@18.pngdeleted

Binary file not shown.

qml/Stages/graphics/dropshadow2gu@30.pngdeleted

Binary file not shown.

qml/Stages/graphics/sidestage_handle@20.pngdeleted

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

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/Page.qml+1−1

This diff is too big to show here.

qml/Wizard/Pages/10-welcome.qml+20−5

This diff is too big to show here.

qml/Wizard/Pages/20-keyboard.qmlnew file+161

This diff is too big to show here.

qml/Wizard/Pages/30-wifi.qml+11−5

This diff is too big to show here.

qml/Wizard/Pages/50-timezone.qml+1

This diff is too big to show here.

qml/Wizard/Pages/70-passwd-type.qml+1

This diff is too big to show here.

qml/Wizard/Pages/77-system-update.qmlnew file+156

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

This diff is too big to show here.

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

This diff is too big to show here.

qml/Wizard/Pages/passcode-set.qml+2−2

This diff is too big to show here.

qml/Wizard/Pages/password-set.qml+1

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/Wizard/WizardItemSelector.qmlnew file+129

This diff is too big to show here.

qml/graphics/dropshadow2gu@30.pngnew file

Binary file not shown.

qml/Stages/graphics/dropshadow2gu@30.sci → qml/graphics/dropshadow2gu@30.scirenamed

The content is the same.

qml/graphics/dropshadow_left@20.png

Binary file not shown.

qml/graphics/dropshadow_right@20.png

Binary file not shown.

qml/graphics/phone_background.jpgdeleted

Binary file not shown.

qml/graphics/tablet_background.jpgdeleted

Binary file not shown.

run.shdeleted−70

This diff is too big to show here.

run_on_device.shdeleted−164

This diff is too big to show here.

src/CMakeLists.txt−4

This diff is too big to show here.

src/Dash/main.cpp+32−22

This diff is too big to show here.

src/Panel/Indicators/client/indicatorsclient.cpp+10−8

This diff is too big to show here.

src/Panel/Indicators/client/indicatorsclient.h−2

This diff is too big to show here.

src/SecondaryWindow.cpp+1−1

This diff is too big to show here.

src/ShellApplication.cpp+11−1

This diff is too big to show here.

src/UnixSignalHandler.cpp+3−5

This diff is too big to show here.

src/main.cpp+12−1

This diff is too big to show here.

tests/CMakeLists.txt+14−13

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.pngdeleted

Binary file not shown.

tests/graphics/applicationIcons/dash@18.pngnew file

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/imports/check_imports.py+58

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/AccountsService/AccountsService.h+20−1

This diff is too big to show here.

tests/mocks/AccountsService/AccountsService.qmltypesdeleted−41

This diff is too big to show here.

tests/mocks/AccountsService/CMakeLists.txt+14

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Biometryd/MockBiometryd.cppnew file+43

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.

tests/mocks/Biometryd/MockObserver.cppnew file+22

This diff is too big to show here.

tests/mocks/Biometryd/MockObserver.hnew file+37

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.

tests/mocks/Biometryd/plugin.cppnew file+41

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Cursor/Cursor.qml+12−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+34−1

This diff is too big to show here.

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

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

The content is the same.

tests/mocks/LightDM/IntegratedLightDM/QLightDM/SessionsModelnew file+17

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

This diff is too big to show here.

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

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

This diff is too big to show here.

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

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+83

This diff is too big to show here.

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

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+43−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−103

This diff is too big to show here.

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

This diff is too big to show here.

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

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/SessionBroadcast/CMakeLists.txtnew file+8

This diff is too big to show here.

tests/mocks/SessionBroadcast/SessionBroadcast.cppnew file+34

This diff is too big to show here.

tests/mocks/SessionBroadcast/SessionBroadcast.hnew file+39

This diff is too big to show here.

tests/mocks/SessionBroadcast/plugin.cppnew file+31

This diff is too big to show here.

tests/mocks/SessionBroadcast/plugin.hnew file+32

This diff is too big to show here.

tests/mocks/SessionBroadcast/qmldirnew file+2

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/DownloadDaemonListener/MockDownloadTracker.cpp+3−1

This diff is too big to show here.

tests/mocks/Ubuntu/DownloadDaemonListener/MockDownloadTracker.h+2−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/MockSystemImage.cpp+24−1

This diff is too big to show here.

tests/mocks/Ubuntu/SystemImage/MockSystemImage.h+22−2

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/Telephony/MockTelepathyHelper.cpp+27

This diff is too big to show here.

tests/mocks/Ubuntu/Telephony/MockTelepathyHelper.h+22

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+31−37

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Unity/Application/ApplicationManager.cpp+20−11

This diff is too big to show here.

tests/mocks/Unity/Application/CMakeLists.txt−1

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurface.cpp+27

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurface.h+12

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurfaceItem.cpp+50−10

This diff is too big to show here.

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

This diff is too big to show here.

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

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.cppdeleted−58

This diff is too big to show here.

tests/mocks/Unity/Application/UbuntuKeyboardInfo.hdeleted−57

This diff is too big to show here.

tests/mocks/Unity/Application/VirtualKeyboard.cpp+22−1

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Unity/Application/plugin.cpp−8

This diff is too big to show here.

tests/mocks/Unity/Application/resources/MirSurfaceItem.qml+2−5

This diff is too big to show here.

tests/mocks/Unity/Application/resources/VirtualKeyboard.qml+1−6

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

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/Indicators/IndicatorsModel.qml+71−6

This diff is too big to show here.

tests/mocks/Unity/Indicators/fakeindicatorsmodeldata.jsnew file+1311

This diff is too big to show here.

tests/mocks/Unity/Indicators/fakeplugin.cpp+2

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

This diff is too big to show here.

tests/mocks/Unity/Notifications/MockNotification.h+5

This diff is too big to show here.

tests/mocks/Unity/Notifications/MockNotificationModel.cpp+4−6

This diff is too big to show here.

tests/mocks/Unity/Notifications/MockNotificationModel.h+2−4

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/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+16−8

This diff is too big to show here.

tests/mocks/Unity/fake_previewwidgetmodel.cpp+18−10

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Unity/fake_scope.h+1

This diff is too big to show here.

tests/mocks/Unity/fake_scopes.cpp+1

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

This diff is too big to show here.

tests/mocks/Utils/URLDispatcher.cppnew file+38

This diff is too big to show here.

tests/mocks/Utils/URLDispatcher.hnew file+47

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/constants.cpp+2−1

This diff is too big to show here.

tests/mocks/Utils/constants.h+5−5

This diff is too big to show here.

tests/mocks/Utils/plugin.cpp+2

This diff is too big to show here.

tests/mocks/Utils/windowstatestorage.cpp+4−4

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Wizard/MockSystem.cpp+8

This diff is too big to show here.

tests/mocks/Wizard/MockSystem.h+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/Wizard/mockplugin.cpp+2

This diff is too big to show here.

tests/mocks/libusermetrics/UserMetrics.cpp+33−13

This diff is too big to show here.

tests/mocks/libusermetrics/UserMetrics.h+2

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

This diff is too big to show here.

tests/plugins/Cursor/tst_Cursor.qml+8−1

This diff is too big to show here.

tests/plugins/Dash/cardcreator/1.res+27−40

This diff is too big to show here.

tests/plugins/Dash/cardcreator/1.res.cardcreator+12−37

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Dash/cardcreator/10.res+8−9

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Dash/cardcreator/11.res+31−44

This diff is too big to show here.

tests/plugins/Dash/cardcreator/11.res.cardcreator+13−38

This diff is too big to show here.

tests/plugins/Dash/cardcreator/12.res+26−39

This diff is too big to show here.

tests/plugins/Dash/cardcreator/12.res.cardcreator+11−36

This diff is too big to show here.

tests/plugins/Dash/cardcreator/2.res+8−9

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Dash/cardcreator/3.res+18−32

This diff is too big to show here.

tests/plugins/Dash/cardcreator/3.res.cardcreator+13−29

This diff is too big to show here.

tests/plugins/Dash/cardcreator/4.res+15−14

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Dash/cardcreator/5.res+19−34

This diff is too big to show here.

tests/plugins/Dash/cardcreator/5.res.cardcreator+13−30

This diff is too big to show here.

tests/plugins/Dash/cardcreator/6.res+14−13

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Dash/cardcreator/7.res+8−9

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Dash/cardcreator/8.res+16−15

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Dash/cardcreator/9.res+17−16

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Dash/horizontaljournaltest.cpp+1−1

This diff is too big to show here.

tests/plugins/Dash/listviewwithpageheadersectionexternalmodeltest.cpp+4−4

This diff is too big to show here.

tests/plugins/Dash/listviewwithpageheadersectiontest.cpp+61−55

This diff is too big to show here.

tests/plugins/Dash/listviewwithpageheadertest.cpp+31−1

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Dash/verticaljournaltest.cpp+63−1

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/ImageCache/CMakeLists.txtnew file+20

This diff is too big to show here.

tests/plugins/ImageCache/graphics/wide.jpgnew file

Binary file not shown.

tests/plugins/ImageCache/test.cppnew file+214

This diff is too big to show here.

qml/Components/Circle.qml → tests/plugins/ImageCache/test.qmlrenamed+6−5

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

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+128

This diff is too big to show here.

tests/plugins/IntegratedLightDM/usersmodel.cpp → tests/plugins/LightDM/IntegratedLightDM/usersmodel.cpprenamed+2−2

This diff is too big to show here.

tests/plugins/SessionBroadcast/BroadcastServer.cppnew file+33

This diff is too big to show here.

tests/plugins/SessionBroadcast/BroadcastServer.hnew file+40

This diff is too big to show here.

tests/plugins/SessionBroadcast/CMakeLists.txtnew file+45

This diff is too big to show here.

tests/plugins/SessionBroadcast/interfaces.xmlnew file+18

This diff is too big to show here.

tests/plugins/SessionBroadcast/server.cppnew file+37

This diff is too big to show here.

tests/plugins/SessionBroadcast/sessionbroadcasttest.cppnew file+111

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/GestureTest.h+4−5

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Unity/Launcher/CMakeLists.txt+13−21

This diff is too big to show here.

tests/plugins/Unity/Launcher/abs-icon.desktop → tests/plugins/Unity/Launcher/applications/abs-icon.desktoprenamed+1

This diff is too big to show here.

tests/plugins/Unity/Launcher/click-icon.desktop → tests/plugins/Unity/Launcher/applications/click-icon.desktoprenamed+1

This diff is too big to show here.

tests/plugins/Unity/Launcher/click-icon.svg → tests/plugins/Unity/Launcher/applications/click-icon.svgrenamed

The content is the same.

tests/plugins/Unity/Launcher/no-name.desktop → tests/plugins/Unity/Launcher/applications/no-name.desktoprenamed+1

This diff is too big to show here.

tests/plugins/Unity/Launcher/rel-icon.desktop → tests/plugins/Unity/Launcher/applications/rel-icon.desktoprenamed+1

This diff is too big to show here.

tests/plugins/Unity/Launcher/rel-icon.svg → tests/plugins/Unity/Launcher/applications/rel-icon.svgrenamed

The content is the same.

tests/plugins/Unity/Launcher/launchermodeltest.cpp+62−26

This diff is too big to show here.

tests/plugins/Unity/Launcher/no-icon.desktopdeleted−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−1

This diff is too big to show here.

tests/plugins/Utils/CMakeLists.txt+9

This diff is too big to show here.

tests/plugins/Utils/URLDispatcherTest.cppnew file+78

This diff is too big to show here.

tests/plugins/Wizard/tst_pagelist.cpp+30−1

This diff is too big to show here.

tests/qmltests/CMakeLists.txt+21−19

This diff is too big to show here.

tests/qmltests/Components/CMakeLists.txt+1

This diff is too big to show here.

tests/qmltests/Components/tst_Carousel.qml−1

This diff is too big to show here.

tests/qmltests/Components/tst_DragHandle.cpp+2−2

This diff is too big to show here.

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

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

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/Components/tst_WallpaperResolver.qml+21−35

This diff is too big to show here.

tests/qmltests/Components/tst_ZoomableImage.qml+1−1

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_Preview.qml+23−6

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewActions.qml+33−2

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewAudioPlayback.qml+8−10

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewCommentInput.qml+28

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewExpandable.qml+26−7

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewIconActions.qml+1−1

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewImageGallery.qml+6−6

This diff is too big to show here.

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

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_PreviewProgress.qml+14−1

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewRatingEdit.qml+3

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewRatingInput.qml+32

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewTable.qml+22−1

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewTextSummary.qml+2−2

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewZoomableImage.qml+12−7

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

This diff is too big to show here.

tests/qmltests/Dash/tst_CardCarousel.qml+24

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/Dash/tst_Dash.qml+103−82

This diff is too big to show here.

tests/qmltests/Dash/tst_DashContent.qml+56−14

This diff is too big to show here.

tests/qmltests/Dash/tst_DashPageHeader.qml+46−5

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+67−35

This diff is too big to show here.

tests/qmltests/Greeter/TestView.qml+14−6

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/Greeter/tst_Infographics.qml+78−14

This diff is too big to show here.

tests/qmltests/Greeter/tst_NarrowView.qml+70−14

This diff is too big to show here.

tests/qmltests/Greeter/tst_WideView.qml+261−41

This diff is too big to show here.

tests/qmltests/Launcher/tst_Launcher.qml+110−16

This diff is too big to show here.

tests/qmltests/Notifications/Notification.qml+1

This diff is too big to show here.

tests/qmltests/Notifications/tst_Notifications.qml+79−29

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/Notifications/tst_SwipeToAct.qml+4−18

This diff is too big to show here.

tests/qmltests/Notifications/tst_VisualSnapDecisionsQueue.qml+7−23

This diff is too big to show here.

tests/qmltests/Panel/Indicators/tst_MenuItemFactory.qml+61−13

This diff is too big to show here.

tests/qmltests/Panel/tst_IndicatorItem.qml+4−3

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/Panel/tst_IndicatorPage.qml+1−3

This diff is too big to show here.

tests/qmltests/Panel/tst_IndicatorsBar.qml+3−3

This diff is too big to show here.

tests/qmltests/Panel/tst_IndicatorsMenu.qml+33−4

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/Stages/ApplicationCheckBox.qml → tests/qmltests/Stage/ApplicationCheckBox.qmlrenamed+1−1

This diff is too big to show here.

tests/qmltests/Stages/SizeHintField.qml → tests/qmltests/Stage/SizeHintField.qmlrenamed

The content is the same.

tests/qmltests/Stages/SurfaceManagerControls.qml → tests/qmltests/Stage/SurfaceManagerControls.qmlrenamed+1−1

This diff is too big to show here.

tests/qmltests/Stages/SurfaceManagerField.qml → tests/qmltests/Stage/SurfaceManagerField.qmlrenamed

The content is the same.

tests/qmltests/Stages/tst_ApplicationWindow.qml → tests/qmltests/Stage/tst_ApplicationWindow.qmlrenamed+40−12

This diff is too big to show here.

tests/qmltests/Stage/tst_DecoratedWindow.qmlnew file+232

This diff is too big to show here.

tests/qmltests/Stages/tst_DesktopStage.qml → tests/qmltests/Stage/tst_DesktopStage.qmlrenamed+160−25

This diff is too big to show here.

tests/qmltests/Stages/tst_PhoneStage.qml → tests/qmltests/Stage/tst_PhoneStage.qmlrenamed+149−211

This diff is too big to show here.

tests/qmltests/Stages/tst_Splash.qml → tests/qmltests/Stage/tst_Splash.qmlrenamed+16−2

This diff is too big to show here.

tests/qmltests/Stages/tst_SpreadDelegate.qml → tests/qmltests/Stage/tst_SpreadDelegate.qmlrenamed

The content is the same.

tests/qmltests/Stages/tst_SurfaceContainer.qml → tests/qmltests/Stage/tst_SurfaceContainer.qmlrenamed+2−2

This diff is too big to show here.

tests/qmltests/Stages/tst_TabletStage.qml → tests/qmltests/Stage/tst_TabletStage.qmlrenamed+221−225

This diff is too big to show here.

tests/qmltests/Stages/tst_WindowResizeArea.qml → tests/qmltests/Stage/tst_WindowResizeArea.qmlrenamed+59−45

This diff is too big to show here.

tests/qmltests/Tutorial/tst_Tutorial.qml+176−210

This diff is too big to show here.

tests/qmltests/UnityLogo.png

Binary file not shown.

tests/qmltests/Wizard/tst_Wizard.qml+47−2

This diff is too big to show here.

tests/qmltests/tst_DisabledScreenNotice.qml+1−1

This diff is too big to show here.

tests/qmltests/tst_OrientedShell.qml+133−245

This diff is too big to show here.

tests/qmltests/tst_Shell.qml+533−208

This diff is too big to show here.

tests/qmltests/tst_ShellWithPin.qml+61−57

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/utils/modules/Unity/Test/CMakeLists.txt+1−1

This diff is too big to show here.

tests/utils/modules/Unity/Test/MouseTouchEmulationCheckbox.qml+4

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/TouchEventSequenceWrapper.cpp+8−3

This diff is too big to show here.

tests/utils/modules/Unity/Test/TouchEventSequenceWrapper.h+4−2

This diff is too big to show here.

tests/utils/modules/Unity/Test/UnityTestCase.qml+2−2

This diff is too big to show here.

tests/utils/modules/Unity/Test/testutil.cpp+32−4

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/registry-tracker.cpp+2−2

This diff is too big to show here.

tools/scopetool.cpp+6−2

This diff is too big to show here.