on xenial help sign in
Merge trunk
commit04276acaf3b18d6cab02ad68c72eb4e06b9dbed0 authorLars Uebernickel <lars.uebernickel@canonical.com> dateMon 20 Oct 2014, 14:23 (12 years ago) parenta9db4f31ff2631
428 files changed+22583−10700
CMakeLists.txt+7−2 CODING+4 build.sh+1 cmake/modules/QmlTest.cmake+25−4 data/unity8-dash.desktop.in+3−3 data/unity8-filewatcher.conf+8 data/unity8.conf+5−1 data/unity8.desktop.in+1−1 debian/changelog+347 debian/control+12−10 debian/unity8-private.install+2 debian/unity8.install+1 libs/CMakeLists.txt+1 libs/UbuntuGestures/CMakeLists.txt+40 libs/UbuntuGestures/CandidateInactivityTimer.cpp+41 libs/UbuntuGestures/CandidateInactivityTimer.h+49 libs/UbuntuGestures/DebugHelpers.cpp+68 libs/UbuntuGestures/DebugHelpers.h+29 libs/UbuntuGestures/Pool.h+134 libs/UbuntuGestures/Timer.cpp+109 libs/UbuntuGestures/Timer.h+105 libs/UbuntuGestures/TouchOwnershipEvent.cpp+35 libs/UbuntuGestures/TouchOwnershipEvent.h+50 libs/UbuntuGestures/TouchRegistry.cpp+500 libs/UbuntuGestures/TouchRegistry.h+182 plugins/Ubuntu/Gestures/UbuntuGesturesGlobal.h → libs/UbuntuGestures/UbuntuGesturesGlobal.h+1−1 libs/UbuntuGestures/UnownedTouchEvent.cpp+39 libs/UbuntuGestures/UnownedTouchEvent.h+45 plugins/AccountsService/AccountsService.cpp+38 plugins/AccountsService/AccountsService.h+14 plugins/AccountsService/AccountsService.qmltypes+1 plugins/Dash/CardAttributes.qml+1−1 plugins/Dash/CardCreator.js+20−21 plugins/Dash/CroppedImageMinimumSourceSize.qml+38 plugins/Dash/listviewwithpageheader.cpp+37−13 plugins/Dash/listviewwithpageheader.h+9−1 plugins/Dash/qmldir+2−1 plugins/LightDM/DBusGreeter.cpp+5 plugins/LightDM/DBusGreeter.h+1−1 plugins/LightDM/DBusGreeterList.h−1 plugins/LightDM/Greeter.h+1 plugins/LightDM/LightDM.qmltypes+2 plugins/Lights/Lights.cpp+1−2 plugins/Lights/android-hardware.h+23 plugins/Powerd/Powerd.cpp+16−2 plugins/Powerd/Powerd.h+8−1 plugins/Powerd/Powerd.qmltypes+3−3 plugins/Ubuntu/Gestures/AxisVelocityCalculator.h+2−2 plugins/Ubuntu/Gestures/CMakeLists.txt+24−5 plugins/Ubuntu/Gestures/Direction.h+2−2 plugins/Ubuntu/Gestures/DirectionalDragArea.cpp+317−191 plugins/Ubuntu/Gestures/DirectionalDragArea.h+37−29 plugins/Ubuntu/Gestures/TimeSource.h+2−2 plugins/Ubuntu/Gestures/TouchGate.cpp+347 plugins/Ubuntu/Gestures/TouchGate.h+126 plugins/Ubuntu/Gestures/UbuntuGesturesQmlGlobal.h+23 plugins/Ubuntu/Gestures/plugin.cpp+3−1 plugins/Ubuntu/Gestures/plugin.h+1−1 plugins/Ubuntu/Gestures/qmldir+1−1 plugins/Ubuntu/Payments/Payments.cpp+21−1 plugins/Ubuntu/Payments/Payments.h+4 plugins/Ubuntu/SystemImage/SystemImage.qmltypes+2 plugins/Unity/DashCommunicator/CMakeLists.txt+8−2 plugins/Unity/DashCommunicator/dashcommunicator.cpp+22−13 plugins/Unity/DashCommunicator/dashcommunicator.h+17−7 plugins/Unity/DashCommunicator/dashcommunicatorservice.h+1−1 plugins/Unity/DashCommunicator/dashconnection.cpp+33 plugins/Unity/DashCommunicator/dashconnection.h+34 plugins/Unity/DashCommunicator/dbusdashcommunicatorservice.cpp+2−2 plugins/Unity/DashCommunicator/dbusdashcommunicatorservice.h+2−2 plugins/Unity/Indicators/CMakeLists.txt−9 plugins/Unity/Indicators/Indicators.qmltypes+6−4 plugins/Unity/Indicators/plugin.cpp−2 plugins/Unity/Indicators/resources/artwork/messaging/default_app.svg−42 plugins/Unity/Indicators/resources/artwork/messaging/default_contact.png plugins/Unity/Indicators/resources/indicators.qrc−6 plugins/Unity/Launcher/CMakeLists.txt+7−5 plugins/Unity/Launcher/backend/launcherbackend.cpp−584 plugins/Unity/Launcher/backend/launcherbackend.h−196 plugins/Unity/Launcher/dbusinterface.cpp+232 plugins/Unity/Launcher/dbusinterface.h+50 plugins/Unity/Launcher/desktopfilehandler.cpp+151 plugins/Unity/Launcher/desktopfilehandler.h+56 plugins/Unity/Launcher/gsettings.cpp+66 plugins/Unity/Launcher/gsettings.h+37 plugins/Unity/Launcher/launcheritem.cpp+31 plugins/Unity/Launcher/launcheritem.h+19−20 plugins/Unity/Launcher/launchermodel.cpp+88−15 plugins/Unity/Launcher/launchermodel.h+15−8 plugins/Unity/Launcher/common/quicklistentry.cpp → plugins/Unity/Launcher/quicklistentry.cpp plugins/Unity/Launcher/common/quicklistentry.h → plugins/Unity/Launcher/quicklistentry.h plugins/Unity/Launcher/quicklistmodel.h+1−1 plugins/Unity/Session/CMakeLists.txt+7 plugins/Unity/Session/orientationlock.cpp+74 plugins/Unity/Session/orientationlock.h+60 plugins/Unity/Session/plugin.cpp+8−4 plugins/Utils/CMakeLists.txt+1 plugins/Utils/plugin.cpp+2 plugins/Utils/relativetimeformatter.cpp+268 plugins/Utils/relativetimeformatter.h+34 plugins/Utils/timeformatter.cpp+6−1 plugins/Utils/timeformatter.h+3−1 plugins/Utils/windowkeysfilter.cpp+1 po/am.po+122−99 po/ar.po+89−72 po/ast.po+133−104 po/az.po+125−112 po/be.po+361 po/bg.po+87−71 po/br.po+116−97 po/bs.po+88−71 po/ca.po+121−101 po/ca@valencia.po+380 po/ckb.po+87−71 po/cs.po+87−71 po/da.po+88−72 po/de.po+113−98 po/el.po+89−76 po/en_AU.po+108−99 po/en_GB.po+113−98 po/eo.po+87−71 po/es.po+121−102 po/eu.po+137−108 po/fa.po+93−83 po/fi.po+114−97 po/fo.po+87−71 po/fr.po+119−100 po/gd.po+133−102 po/gl.po+112−99 po/he.po+89−79 po/hi.po+87−71 po/hr.po+88−71 po/hu.po+108−99 po/hy.po+87−71 po/id.po+87−71 po/is.po+129−101 po/it.po+111−96 po/ja.po+116−100 po/km.po+111−93 po/kn.po+87−71 po/ko.po+136−124 po/ku.po+373 po/ky.po+87−71 po/lo.po+87−71 po/lt.po+89−72 po/lv.po+99−86 po/ml.po+87−71 po/mr.po+87−71 po/ms.po+87−71 po/my.po+87−71 po/nb.po+115−98 po/nl.po+117−98 po/pa.po+362 po/pl.po+89−72 po/pt.po+112−97 po/pt_BR.po+97−84 po/ro.po+120−97 po/ru.po+110−96 po/shn.po+87−71 po/si.po+87−71 po/sl.po+115−97 po/sq.po+87−71 po/sr.po+157−126 po/sv.po+127−102 po/sw.po+87−71 po/ta.po+87−71 po/te.po+88−72 po/th.po+245−105 po/tr.po+112−89 po/ug.po+132−105 po/uk.po+118−97 po/unity8.pot+80−65 po/vi.po+87−71 po/xh.po+87−71 po/zh_CN.po+89−79 po/zh_HK.po+88−72 po/zh_TW.po+120−105 qml/Components/Background.qml+1−1 qml/Components/Carousel.qml+2−3 qml/Components/DelayedLockscreen.qml+92 qml/Components/Dialogs.qml+10 qml/Components/DragHandle.qml+2−2 qml/Components/EdgeDragArea.qml+2 qml/Components/Flickables/Flickable.qml+23 qml/Components/Flickables/GridView.qml+25 qml/Components/Flickables/ListView.qml+25 qml/Components/Flickables/ListViewWithPageHeader.qml+23 qml/Components/Header.qml+27 qml/Components/InputMethod.qml+13 qml/Components/LazyImage.qml+1 qml/Components/ListItems/Base.qml−125 qml/Components/ListItems/Highlight.qml−46 qml/Components/Lockscreen.qml+129−103 qml/Components/PassphraseLockscreen.qml+96−43 qml/Components/PinLockscreen.qml+11−5 qml/Components/ResponsiveGridView.qml+7−2 qml/Components/ResponsiveVerticalJournal.qml+3−2 qml/Components/ZoomableImage.qml+2−2 qml/Dash/CardCarousel.qml+1−1 qml/Dash/CardGrid.qml+3−2 qml/Dash/CardHorizontalList.qml+4−3 qml/Dash/CardTool.qml+20−15 qml/Dash/CardVerticalJournal.qml+3−2 qml/Dash/Dash.qml+44−11 qml/Dash/DashApplication.qml+2−8 qml/Dash/DashCategoryBase.qml+62 qml/Dash/DashContent.qml+9−4 qml/Dash/DashNavigation.qml+3−3 qml/Dash/DashNavigationButton.qml+2−1 qml/Dash/DashNavigationList.qml+2−1 qml/Dash/DashRenderer.qml+9−4 qml/Dash/GenericScopeView.qml+161−54 qml/Dash/PageHeader.qml+25−18 qml/Dash/PreviewListView.qml+4−5 qml/Dash/Previews/Preview.qml+2−1 qml/Dash/Previews/PreviewHeader.qml+13−1 qml/Dash/Previews/PreviewImageGallery.qml+123−19 qml/Dash/Previews/PreviewPayments.qml+8 qml/Dash/Previews/PreviewTextSummary.qml+1−1 qml/Dash/PullToRefreshScopeStyle.qml+82 qml/Dash/ScopeListView.qml+4−6 qml/Dash/ScopeSettingsPage.qml+3−1 qml/Dash/ScopesOverview.qml+16−2 qml/Dash/ScopesOverviewAll.qml+4−1 qml/Dash/ScopesOverviewFavorites.qml+5−3 qml/Dash/graphics/checkers.png qml/Dash/graphics/pixel.png qml/Greeter/Greeter.qml+14−2 qml/Greeter/GreeterContent.qml+15 qml/Greeter/LoginList.qml+21−8 qml/Hud/Hud.qml+2−1 qml/Hud/HudParametrizedActionsPage.qml+2−1 qml/Launcher/Launcher.qml+5−3 qml/Launcher/LauncherDelegate.qml+24−35 qml/Launcher/LauncherPanel.qml+9−15 qml/Notifications/Notification.qml+135−48 qml/Notifications/NotificationMenuItemFactory.qml+81−5 qml/Notifications/Notifications.qml+3−2 qml/Panel/ActiveCallHint.qml+1−1 qml/Panel/IndicatorItem.qml+6 qml/Panel/IndicatorRow.qml+2−1 qml/Panel/Indicators.qml+2−13 qml/Panel/Indicators/DefaultIndicatorPage.qml+10−50 qml/Panel/Indicators/IndicatorBase.qml+1 qml/Panel/Indicators/IndicatorDelegate.qml+2−10 qml/Panel/Indicators/IndicatorsLight.qml+4−7 qml/Panel/Indicators/MenuItemFactory.qml+176−50 qml/Panel/Indicators/MessageMenuItemFactory.qml+156−171 qml/Panel/Indicators/RemoveBackground.qml−55 qml/Panel/Indicators/VisibleIndicators.qml+1 qml/Panel/Indicators/client/IndicatorsClient.qml+4 qml/Panel/Indicators/client/IndicatorsList.qml+2−1 qml/Panel/Indicators/client/IndicatorsTree.qml+2−1 qml/Panel/MenuContent.qml+95−112 qml/Shell.qml+211−78 qml/Stages/Animations/BaseSurfaceAnimation.qml → qml/Stages/Animations/BaseSessionAnimation.qml+23−20 qml/Stages/Animations/DarkenAndFadeInAnimation.qml−48 qml/Stages/Animations/SwipeFromBottomAnimation.qml+24−19 qml/Stages/Animations/SwipeUpAnimation.qml−49 qml/Stages/ApplicationWindow.qml+58−79 qml/Stages/MainViewStyle.qml+79 qml/Stages/PageHeadStyle.qml+76 qml/Stages/PhoneStage.qml+41−9 qml/Stages/SessionContainer.qml+138 qml/Stages/Splash.qml+107−13 qml/Stages/SpreadDelegate.qml+3 qml/Stages/SurfaceContainer.qml+55−64 qml/Stages/TabletStage.qml+22−1 qml/Stages/TransformedTabletSpreadDelegate.qml+2−1 qml/Stages/WaitingDots.qml−76 qml/Stages/graphics/PageHeaderBaseDividerBottom@18.png qml/Stages/graphics/PageHeaderBaseDividerLight@18.png qml/Stages/graphics/PageHeaderBaseDividerLight@18.sci+5 qml/Stages/graphics/background_paper@27.png run_on_device.sh+42−41 src/CMakeLists.txt+7 src/Dash/CMakeLists.txt+8 src/Dash/main.cpp+23−2 src/Panel/CMakeLists.txt+2 src/libunity8-private/CMakeLists.txt+25 src/libunity8-private/abstractdbusservicemonitor.cpp+87 src/libunity8-private/abstractdbusservicemonitor.h+66 src/main.cpp+6 tests/CMakeLists.txt+1 tests/autopilot/unity8/application_lifecycle/tests/test_application_lifecycle.py+4−2 tests/autopilot/unity8/indicators/tests/test_indicators.py+2−2 tests/autopilot/unity8/process_helpers.py+12−17 tests/autopilot/unity8/shell/emulators/dash.py+5−5 tests/autopilot/unity8/shell/emulators/greeter.py+4−1 tests/autopilot/unity8/shell/tests/__init__.py+4−21 tests/autopilot/unity8/shell/tests/test_lock_screen.py+11−10 tests/autopilot/unity8/shell/tests/test_notifications.py+61−97 tests/libs/CMakeLists.txt+1 tests/libs/UbuntuGestures/CMakeLists.txt+20 tests/libs/UbuntuGestures/tst_TouchRegistry.cpp+803 tests/mocks/AccountsService/AccountsService.cpp+29−3 tests/mocks/AccountsService/AccountsService.h+17 tests/mocks/AccountsService/AccountsService.qmltypes+1 tests/mocks/HudClient/fake_libhud_client.cpp+8−1 tests/mocks/LightDM/LightDM.qmltypes+2 tests/mocks/Powerd/Powerd.cpp+15−1 tests/mocks/Powerd/Powerd.h+8−1 tests/mocks/Powerd/Powerd.qmltypes+3−3 tests/mocks/QtMultimedia/audio.cpp+1−1 tests/mocks/Ubuntu/CMakeLists.txt+1 tests/mocks/Ubuntu/Connectivity/CMakeLists.txt+10 tests/mocks/Ubuntu/Connectivity/networking-status.cpp+64 tests/mocks/Ubuntu/Connectivity/networking-status.h+73 tests/mocks/Ubuntu/Connectivity/plugin.cpp+46 tests/mocks/Ubuntu/Connectivity/plugin.h+35 tests/mocks/Ubuntu/Connectivity/qmldir+2 tests/mocks/Ubuntu/Payments/MockPayments.cpp+12−7 tests/mocks/Ubuntu/Payments/MockPayments.h+2 tests/mocks/Ubuntu/SystemImage/SystemImage.qmltypes+3−1 tests/mocks/Ubuntu/Telephony/MockCallEntry.cpp+26−1 tests/mocks/Ubuntu/Telephony/MockCallEntry.h+9−1 tests/mocks/Unity/Application/Application.qmltypes+115−70 tests/mocks/Unity/Application/ApplicationDBusAdaptor.cpp−81 tests/mocks/Unity/Application/ApplicationInfo.cpp+36−85 tests/mocks/Unity/Application/ApplicationInfo.h+18−23 tests/mocks/Unity/Application/ApplicationManager.cpp+35−16 tests/mocks/Unity/Application/ApplicationManager.h+7−4 tests/mocks/Unity/Application/ApplicationTestInterface.cpp+117 tests/mocks/Unity/Application/ApplicationDBusAdaptor.h → tests/mocks/Unity/Application/ApplicationTestInterface.h+13−11 tests/mocks/Unity/Application/CMakeLists.txt+8−2 tests/mocks/Unity/Application/MirSurfaceItem.cpp+44−94 tests/mocks/Unity/Application/MirSurfaceItem.h+49−32 tests/mocks/Unity/Application/MirSurfaceItem.qml+12−14 tests/mocks/Unity/Application/MirSurfaceItemModel.h+35 tests/mocks/Unity/Application/ObjectListModel.h+106 tests/mocks/Unity/Application/Session.cpp+174 tests/mocks/Unity/Application/Session.h+90 tests/mocks/Unity/Application/SessionManager.cpp+55 tests/mocks/Unity/Application/SessionManager.h+44 tests/mocks/Unity/Application/SessionModel.h+35 tests/mocks/Unity/Application/SurfaceManager.cpp+20−7 tests/mocks/Unity/Application/SurfaceManager.h+6−2 tests/mocks/Unity/Application/UbuntuKeyboardInfo.cpp+28 tests/mocks/Unity/Application/UbuntuKeyboardInfo.h+60 tests/mocks/Unity/Application/plugin.cpp+44−4 tests/mocks/Unity/DashCommunicator/dashcommunicatorservice.cpp+2−2 tests/mocks/Unity/DashCommunicator/dashcommunicatorservice.h+2−2 tests/mocks/Unity/Indicators/FakeMenuPage.qml−10 tests/mocks/Unity/Indicators/Indicators.qmltypes+20 tests/mocks/Unity/Launcher/CMakeLists.txt+1−1 tests/mocks/Unity/Launcher/MockLauncherItem.cpp+14 tests/mocks/Unity/Launcher/MockLauncherItem.h+18−17 tests/mocks/Unity/Launcher/MockLauncherModel.cpp+11 tests/mocks/Unity/Unity.qmltypes+30−2 tests/mocks/Unity/fake_categories.cpp+95−136 tests/mocks/Unity/fake_categories.h+7−12 tests/mocks/Unity/fake_resultsmodel.cpp+9 tests/mocks/Unity/fake_resultsmodel.h+3 tests/mocks/Unity/fake_scope.cpp+28−6 tests/mocks/Unity/fake_scope.h+8−1 tests/mocks/Unity/fake_scopes.cpp+1 tests/mocks/libusermetrics/UserMetrics.cpp+2−2 tests/plugins/Dash/CMakeLists.txt+3−3 tests/plugins/Dash/cardcreator/1.res+9−8 tests/plugins/Dash/cardcreator/2.res+10−13 tests/plugins/Dash/cardcreator/3.res+12−12 tests/plugins/Dash/cardcreator/4.res+8−11 tests/plugins/Dash/cardcreator/5.res+14−14 tests/plugins/Dash/cardcreator/6.res+8−10 tests/plugins/Dash/cardcreator/7.res+12−15 tests/plugins/Dash/listviewwithpageheadertest.cpp+39 tests/plugins/Dash/listviewwithpageheadertest.qml+1 tests/plugins/Dash/listviewwithpageheadertestsection.qml+1 tests/plugins/Dash/listviewwithpageheadertestsectionexternalmodel.qml+1 tests/plugins/Ubuntu/Gestures/CMakeLists.txt+10−3 tests/plugins/Ubuntu/Gestures/RightwardsLauncher.qml+3 qml/Stages/Dot.qml → tests/plugins/Ubuntu/Gestures/touchGateExample.qml+7−5 tests/plugins/Ubuntu/Gestures/tst_DirectionalDragArea.cpp+491−14 tests/plugins/Ubuntu/Gestures/tst_DirectionalDragArea.qml+1 tests/plugins/Ubuntu/Gestures/tst_TouchGate.cpp+345 tests/plugins/Unity/Launcher/CMakeLists.txt+10−25 tests/plugins/Unity/Launcher/gsettings.cpp+40 tests/plugins/Unity/Launcher/gsettings.h+38 tests/plugins/Unity/Launcher/launcherbackendtest.cpp−239 tests/plugins/Unity/Launcher/launchermodeltest.cpp+89−2 tests/plugins/Utils/CMakeLists.txt+2−3 tests/plugins/Utils/timeformattertest.cpp+104−7 tests/qmltests/CMakeLists.txt+4−1 tests/qmltests/Components/CMakeLists.txt+3−2 tests/qmltests/Components/tst_DragHandle.cpp+12−15 tests/qmltests/Components/tst_DragHandle/HorizontalShowable.qml+1−1 tests/qmltests/Components/tst_DragHandle/VerticalShowable.qml+1−1 tests/qmltests/Greeter/tst_Lockscreen.qml → tests/qmltests/Components/tst_Lockscreen.qml+31−51 tests/qmltests/Dash/CardHelpers.js+1−12 tests/qmltests/Dash/Previews/tst_PreviewHeader.qml+4−2 tests/qmltests/Dash/Previews/tst_PreviewImageGallery.qml+51−1 tests/qmltests/Dash/Previews/tst_PreviewPayments.qml+88−9 tests/qmltests/Dash/tst_Card.qml+29−3 tests/qmltests/Dash/tst_CardTool.qml+28−20 tests/qmltests/Dash/tst_Dash.qml+25−41 tests/qmltests/Dash/tst_DashContent.qml+14−1 tests/qmltests/Dash/tst_GenericScopeView.qml+157−7 tests/qmltests/Dash/tst_PreviewListView.qml+29−1 tests/qmltests/Greeter/tst_MultiGreeter.qml+2−2 tests/qmltests/Greeter/tst_SingleGreeter.qml+1−1 tests/qmltests/Launcher/tst_Launcher.qml+120−102 tests/qmltests/Notifications/tst_Notifications.qml+60−18 tests/qmltests/Panel/Indicators/tst_DefaultIndicatorPage.qml+3−23 tests/qmltests/Panel/Indicators/tst_MenuItemFactory.qml+56−16 tests/qmltests/Panel/Indicators/tst_MessageMenuItemFactory.qml+43−53 tests/qmltests/Panel/tst_ActiveCallHint.qml+20−7 tests/qmltests/Panel/tst_Indicators.qml+10−10 tests/qmltests/Panel/tst_MenuContent.qml+14−56 tests/qmltests/Stages/RecursingChildSessionControl.qml+142 tests/qmltests/Stages/tst_ApplicationWindow.qml+114−44 tests/qmltests/Stages/tst_PhoneStage.qml+78−2 tests/qmltests/Stages/tst_SessionContainer.qml+330 tests/qmltests/Stages/tst_Splash.qml+117 tests/qmltests/Stages/tst_SurfaceContainer.qml+53−43 tests/qmltests/Components/tst_DragHandle/UnityLogo.png → tests/qmltests/UnityLogo.png tests/qmltests/tst_Shell.qml+270−48 tests/qmltests/tst_ShellWithPin.qml+171−36 tests/qmltests/tst_TabletShell.qml+297 tests/uqmlscene/CMakeLists.txt+2 tests/uqmlscene/README+3−1 tests/uqmlscene/main.cpp+9 tests/utils/modules/Unity/Test/CMakeLists.txt+2 tests/utils/modules/Unity/Test/UnityTestCase.qml+23−2 tests/utils/modules/Unity/Test/testutil.cpp+41−2 tests/utils/modules/Unity/Test/testutil.h+3−1 tools/registry-tracker.cpp+6 tools/scopetool.cpp+3 tools/unlock-device+14−19
CMakeLists.txt+7−2
@@ -58,19 +58,20 @@ find_package(Qt5DBus 5.2 REQUIRED)
5858include(GNUInstallDirs)
5959
6060set(SHELL_APP_DIR ${CMAKE_INSTALL_DATADIR}/unity8)
61+set(SHELL_PRIVATE_LIBDIR ${CMAKE_INSTALL_LIBDIR}/unity8)
6162
6263execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=plugindir_suffix unity-shell-api OUTPUT_VARIABLE SHELL_INSTALL_QML OUTPUT_STRIP_TRAILING_WHITESPACE)
6364if(SHELL_INSTALL_QML STREQUAL "")
6465 message(FATAL_ERROR "Could not determine plugin installation dir.")
6566endif()
6667
68+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
69+
6770execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=plugindir unity-shell-api OUTPUT_VARIABLE SHELL_PLUGINDIR OUTPUT_STRIP_TRAILING_WHITESPACE)
6871if(SHELL_PLUGINDIR STREQUAL "")
6972 message(FATAL_ERROR "Could not determine plugin import dir.")
7073endif()
7174
72−set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
73−
7475set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fno-permissive -pedantic -Wall -Wextra")
7576
7677if ("${CMAKE_BUILD_TYPE}" STREQUAL "release" OR "${CMAKE_BUILD_TYPE}" STREQUAL "relwithdebinfo")
@@ -87,6 +88,9 @@ endif()
8788# "signals" and "slots"
8889add_definitions(-DQT_NO_KEYWORDS)
8990
91+# Save a few container detach and conversions
92+add_definitions(-DQT_STRICT_ITERATORS)
93+
9094# Tests
9195include(CTest)
9296enable_testing()
@@ -106,6 +110,7 @@ include_directories(
106110
107111# add subdirectories to build
108112add_subdirectory(include)
113+add_subdirectory(libs)
109114add_subdirectory(src)
110115add_subdirectory(tools)
111116add_subdirectory(qml)
CODING+4
@@ -154,6 +154,10 @@ So, for the DragHandle component that would be:
154154
155155$ make testDragHandle
156156
157+To run the tests for a single component/class under gdb (so you can catch SEGFAULTS)
158+
159+$ make gdbtestComponentName
160+
157161To run a test application that allow you to manually test or to simply try out
158162a given component:
159163
build.sh+1
@@ -51,6 +51,7 @@ install_dependencies() {
5151 qtdeclarative5-ubuntu-settings-components \
5252 qtdeclarative5-ubuntu-telephony0.1 \
5353 qtdeclarative5-ubuntu-thumbnailer0.1 \
54+ qml-module-ubuntu-connectivity \
5455 unity-notifications-impl \
5556 ubuntu-mobile-icons \
5657 unity-scope-home \
cmake/modules/QmlTest.cmake+25−4
@@ -12,6 +12,7 @@
1212# Two targets will be created:
1313# - testComponentName - Runs the test with qmltestrunner
1414# - tryComponentName - Runs the test with uqmlscene, for manual interaction
15+# - gdbtestComponentName - Runs the test with qmltestrunner under gdb
1516#
1617# To change/set a default value for the whole test suite, prior to calling add_qml_test, set:
1718# qmltest_DEFAULT_NO_ADD_TEST (default: FALSE)
@@ -27,11 +28,14 @@ endif()
2728
2829set(qmlscene_exe ${CMAKE_BINARY_DIR}/tests/uqmlscene/uqmlscene)
2930
31+set(test_env UNITY_TESTING=1)
32+
3033macro(add_manual_qml_test SUBPATH COMPONENT_NAME)
3134 set(options NO_ADD_TEST NO_TARGETS)
3235 set(multi_value_keywords IMPORT_PATHS TARGETS PROPERTIES ENVIRONMENT)
3336
3437 cmake_parse_arguments(qmltest "${options}" "" "${multi_value_keywords}" ${ARGN})
38+ cmake_parse_arguments(qmltest_default "${options}" "" "${multi_value_keywords}" ${qmltest_DEFAULT_PROPERTIES})
3539
3640 set(qmlscene_TARGET try${COMPONENT_NAME})
3741 set(qmltest_FILE ${SUBPATH}/tst_${COMPONENT_NAME})
@@ -49,8 +53,12 @@ macro(add_manual_qml_test SUBPATH COMPONENT_NAME)
4953 endforeach(IMPORT_PATH)
5054 endif()
5155
56+ if("${qmltest_ENVIRONMENT}" STREQUAL "")
57+ set(qmltest_ENVIRONMENT "${qmltest_default_ENVIRONMENT}")
58+ endif()
59+
5260 set(qmlscene_command
53− env ${qmltest_ENVIRONMENT}
61+ env ${test_env} ${qmltest_ENVIRONMENT}
5462 ${qmlscene_exe} -qmljsdebugger=port:3768 ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
5563 ${qmlscene_imports}
5664 )
@@ -71,8 +79,10 @@ macro(add_qml_test_internal SUBPATH COMPONENT_NAME ITERATIONS)
7179 set(multi_value_keywords IMPORT_PATHS TARGETS PROPERTIES ENVIRONMENT)
7280
7381 cmake_parse_arguments(qmltest "${options}" "" "${multi_value_keywords}" ${ARGN})
82+ cmake_parse_arguments(qmltest_default "${options}" "" "${multi_value_keywords}" ${qmltest_DEFAULT_PROPERTIES})
7483
7584 set(qmltest_TARGET test${COMPONENT_NAME})
85+ set(qmltest_gdb_TARGET gdbtest${COMPONENT_NAME})
7686 set(qmltest_xvfb_TARGET xvfbtest${COMPONENT_NAME})
7787 set(qmltest_FILE ${SUBPATH}/tst_${COMPONENT_NAME})
7888
@@ -102,8 +112,12 @@ macro(add_qml_test_internal SUBPATH COMPONENT_NAME ITERATIONS)
102112 set(ITERATIONS_STRING "")
103113 endif()
104114
115+ if("${qmltest_ENVIRONMENT}" STREQUAL "")
116+ set(qmltest_ENVIRONMENT "${qmltest_default_ENVIRONMENT}")
117+ endif()
118+
105119 set(qmltest_command
106− env ${qmltest_ENVIRONMENT} UNITY_TESTING=1
120+ env ${test_env} ${qmltest_ENVIRONMENT}
107121 ${qmltestrunner_exe} -input ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
108122 ${qmltestrunner_imports}
109123 ${ITERATIONS_STRING}
@@ -117,7 +131,7 @@ macro(add_qml_test_internal SUBPATH COMPONENT_NAME ITERATIONS)
117131 set(LD_PRELOAD_PATH "LD_PRELOAD=/usr/lib/${ARCH_TRIPLET}/mesa/libGL.so.1")
118132 endif()
119133 set(qmltest_xvfb_command
120− env ${qmltest_ENVIRONMENT} ${LD_PRELOAD_PATH} UNITY_TESTING=1
134+ env ${test_env} ${qmltest_ENVIRONMENT} ${LD_PRELOAD_PATH}
121135 xvfb-run --server-args "-screen 0 1024x768x24" --auto-servernum
122136 ${qmltestrunner_exe} -input ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
123137 ${qmltestrunner_imports}
@@ -126,12 +140,18 @@ macro(add_qml_test_internal SUBPATH COMPONENT_NAME ITERATIONS)
126140 ${function_ARGS}
127141 )
128142
143+ set(qmltest_gdb_command
144+ env ${test_env} ${qmltest_ENVIRONMENT} ${LD_PRELOAD_PATH}
145+ gdb -e ${qmltestrunner_exe} -ex \"run -input ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml ${qmltestrunner_imports} ${ITERATIONS_STRING}\"
146+ )
147+
129148 add_qmltest_target(${qmltest_TARGET} "${qmltest_command}" TRUE ${qmltest_NO_ADD_TEST})
130149 add_qmltest_target(${qmltest_xvfb_TARGET} "${qmltest_xvfb_command}" ${qmltest_NO_TARGETS} TRUE)
150+ add_qmltest_target(${qmltest_gdb_TARGET} "${qmltest_gdb_command}" TRUE TRUE)
131151 add_manual_qml_test(${SUBPATH} ${COMPONENT_NAME} ${ARGN})
132152endmacro(add_qml_test_internal)
133153
134−macro(add_binary_qml_test CLASS_NAME LD_PATH DEPS)
154+macro(add_binary_qml_test CLASS_NAME LD_PATH DEPS ENVVAR)
135155 set(testCommand
136156 LD_LIBRARY_PATH=${LD_PATH}
137157 ${CMAKE_CURRENT_BINARY_DIR}/${CLASS_NAME}TestExec
@@ -148,6 +168,7 @@ macro(add_binary_qml_test CLASS_NAME LD_PATH DEPS)
148168 endif()
149169 set(xvfbtestCommand
150170 ${LD_PRELOAD_PATH}
171+ ${ENVVAR}
151172 LD_LIBRARY_PATH=${LD_PATH}
152173 xvfb-run --server-args "-screen 0 1024x768x24" --auto-servernum
153174 ${CMAKE_CURRENT_BINARY_DIR}/${CLASS_NAME}TestExec
data/unity8-dash.desktop.in+3−3
@@ -1,9 +1,9 @@
11[Desktop Entry]
22Type=Application
3−Name=Unity 8 Dash
4−Comment=The converged Unity shell dash
3+Name=Scopes
4+Comment=An interface for using the Scopes system
55Exec=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@/unity8-dash
66Terminal=false
7−Icon=unity8
7+Icon=
88NoDisplay=true
99X-Ubuntu-Touch=true
data/unity8-filewatcher.confnew file+8
@@ -0,0 +1,8 @@
1+description "File system watcher for unity8"
2+author "Michael Zanetti <michael.zanetti@canonical.com>"
3+
4+# Workaround for bug 1360208. ~ and * in one expression doesn't work currently
5+start on (file FILE=/home/phablet/.local/share/applications/*.desktop) or (file FILE=/usr/share/applications/*.desktop)
6+
7+exec dbus-send --type=method_call --dest=com.canonical.Unity.Launcher /com/canonical/Unity/Launcher com.canonical.Unity.Launcher.Refresh
8+
data/unity8.conf+5−1
@@ -34,11 +34,15 @@ pre-start script
3434 gdbus call --session --dest org.freedesktop.DBus --object-path /org/freedesktop/DBus --method org.freedesktop.DBus.UpdateActivationEnvironment "@a{ss} {'MIR_SOCKET': '$MIR_SERVER_FILE'}"
3535 fi
3636
37− # Remove the socket if still there
37+ # Remove the normal and trusted sockets if still there
3838 if [ -S "$MIR_SERVER_FILE" ]; then
3939 rm "$MIR_SERVER_FILE"
4040 fi
4141
42+ if [ -S "${MIR_SERVER_FILE}_trusted" ]; then
43+ rm "${MIR_SERVER_FILE}_trusted"
44+ fi
45+
4246 initctl set-env --global MIR_SERVER_PROMPT_FILE=1
4347
4448 initctl emit --no-wait indicator-services-start
data/unity8.desktop.in+1−1
@@ -4,6 +4,6 @@ Name=Unity 8
44Comment=The converged Unity shell
55Exec=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@/unity8
66Terminal=false
7−Icon=unity8
7+Icon=
88NoDisplay=true
99X-Ubuntu-Touch=true
debian/changelog+347
@@ -1,3 +1,350 @@
1+unity8 (8.00+14.10.20141013.2-0ubuntu1) utopic; urgency=low
2+
3+ [ Michael Terry ]
4+ * Don't show initial lockscreen during the edge demo. The user just
5+ set up their phone with a password, it's pointless to ask them
6+ again. (LP: #1358283)
7+ * Distinguish between incoming calls and other dialer-app opens. (LP:
8+ #1378218) (LP: #1378218)
9+
10+ [ Andrea Cimitan ]
11+ * Fix flickable speed to be resolution independent, by subclassing
12+ components (LP: #1348557)
13+
14+ [ Michał Sawicz ]
15+ * Fix the ShellWithPin test and some functionality.
16+
17+ [ Albert Astals ]
18+ * Move Base.qml to DashCategoryBase
19+ * Fix first item positioning when m_clipItem->y() is not 0 (LP:
20+ #1251597)
21+ * Fix some small qml warnings
22+
23+ [ Daniel d'Andrada ]
24+ * Add touch ownership logic on top of qt input handling
25+
26+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Mon, 13 Oct 2014 15:43:03 +0000
27+
28+unity8 (8.00+14.10.20141009.4-0ubuntu1) utopic; urgency=low
29+
30+ [ Michał Sawicz ]
31+ * Rename datetime indicator in test
32+
33+ [ Albert Astals ]
34+ * Close overview temp scope on show dash (LP: #1373819)
35+ * Enable QT_STRICT_ITERATORS
36+ * Make Base not clickable, since we don't use it in anywhere clickable
37+ (we only use it for Category delegates in the LVWPH) (LP: #1300709)
38+ * Hide preview if it was visible when going to a scope (LP: #1374548)
39+ * Remove contentScale variable
40+
41+ [ Andrea Cimitan ]
42+ * Fix card implicitHeight when summary is declared, but its text is
43+ empty. Also fixes vertical journal height and clipping (LP:
44+ #1362160)
45+ * Redesign for pinned apps. Remove thindivider on top of ubuntu dash
46+ button (not needed anymore) (LP: #1377100)
47+
48+ [ Ying-Chun Liu ]
49+ * Fix run_on_device.sh to let it run again.
50+
51+ [ Nick Dedekind ]
52+ * Fixed indicator menu bindings to server toggle value broken by user
53+ interaction. (LP: #1336715)
54+ * Force rendering so we don't get stuck in "waitForRendering" loop in
55+ tests.
56+
57+ [ Daniel d'Andrada ]
58+ * PhoneStage: focus the new topmost app after the current one closes
59+ itself (LP: #1375267)
60+
61+ [ Michael Terry ]
62+ * Fix some security issues with the tablet greeter, which allowed the
63+ lockscreen to be bypassed. (LP: #1367715) (LP: #1367715)
64+
65+ [ Michael Zanetti ]
66+ * scale down errorText label if necessary (LP: #1378848)
67+
68+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Thu, 09 Oct 2014 14:05:54 +0000
69+
70+unity8 (8.00+14.10.20141008-0ubuntu1) utopic; urgency=low
71+
72+ [ Michael Zanetti ]
73+ * Dual SIM pin unlocking. Hook up the UI to the backend. (LP:
74+ #1267135)
75+
76+ [ Antti Kaijanmäki ]
77+ * Dual SIM pin unlocking. Hook up the UI to the backend. (LP:
78+ #1267135)
79+
80+ [ Ubuntu daily release ]
81+ * New rebuild forced
82+
83+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Wed, 08 Oct 2014 09:41:32 +0000
84+
85+unity8 (8.00+14.10.20141006-0ubuntu1) utopic; urgency=low
86+
87+ [ Andrea Cimitan ]
88+ * Tweak card header to match the spec
89+ * Add preview image slideshow (LP: #1351537)
90+
91+ [ Michał Sawicz ]
92+ * Cache more things in memory, so flicking scopes should be faster
93+ (LP: #1336724)
94+ * Tweak card header to match the spec
95+ * Save texture memory by limiting sourceSize (LP: #1338430)
96+
97+ [ Ying-Chun Liu ]
98+ * Add attributes to Preview. (LP: #1282460)
99+
100+ [ Albert Astals ]
101+ * Update pot
102+ * Cache more things in memory, so flicking scopes should be faster
103+ (LP: #1336724)
104+ * Save texture memory by limiting sourceSize (LP: #1338430)
105+ * Clip the settings list
106+ * Fix unlocking from the left again
107+ * Add wait_ makes tests more reliable
108+
109+ [ Michael Zanetti ]
110+ * fix fading out the launcher instead of sliding it out on left-edge
111+ minimizing an app.
112+ * Make the DashCommunicator async and more flexible to handle a
113+ lifecycle-suspended dash (LP: #1339883)
114+
115+ [ Michael Terry ]
116+ * Retry unlock-device script if it fails, as there is always a risk of
117+ a small race with boot-up. (LP: #1370644)
118+ * Add pull-to-refresh functionality to scopes. (LP: #1368336)
119+
120+ [ CI bot ]
121+ * Resync trunk
122+
123+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Mon, 06 Oct 2014 08:03:23 +0000
124+
125+unity8 (8.00+14.10.20140930.2-0ubuntu1) utopic; urgency=low
126+
127+ [ Alexandros Frantzis ]
128+ * Remove stale trusted socket before starting unity8 from upstart (LP:
129+ #1371597) (LP: #1371597)
130+
131+ [ CI bot ]
132+ * Resync trunk
133+
134+ [ Andrea Cimitan ]
135+ * Move activity indicator on top of keyboard (LP: #1354519)
136+
137+ [ Gerry Boland ]
138+ * Cleanup: Remove unused member and fix small syntax error in
139+ OrientationLock
140+
141+ [ josharenson ]
142+ * Fix lp:1367894 by correcting how the minute value is calculated in
143+ the panel. (LP: #1367894)
144+
145+ [ Nick Dedekind ]
146+ * Fixed DefaultIndicatorPage test. Fixed warnings from test.
147+
148+ [ Ying-Chun Liu ]
149+ * Remove maxLineCount in preview. (LP: 1328513) (LP: #1328513)
150+
151+ [ Michael Terry ]
152+ * Fix some code that accidentally landed in trunk before it got
153+ cleaned up. The current code just has some duplication to it that
154+ should be unified.
155+ * Implement latest visual designs for passphrase lockscreen.
156+ * Make it easier to use the Lockscreen component from the welcome
157+ wizard.
158+ * Limit how much memory we reserve for the greeter background image,
159+ allowing giant images to appear correctly.
160+
161+ [ Daniel d'Andrada ]
162+ * Add gdbTestComponentName build targets
163+
164+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Tue, 30 Sep 2014 16:57:28 +0000
165+
166+unity8 (8.00+14.10.20140926-0ubuntu1) utopic; urgency=low
167+
168+ [ CI bot ]
169+ * Resync trunk
170+
171+ [ Nick Dedekind ]
172+ * Visual changes for indicator RTM polishing (LP: #1329289)
173+
174+ [ Ubuntu daily release ]
175+ * New rebuild forced
176+
177+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Fri, 26 Sep 2014 19:12:39 +0000
178+
179+unity8 (8.00+14.10.20140923-0ubuntu1) utopic; urgency=low
180+
181+ [ Michael Zanetti ]
182+ * fix swiping away the launcher from the left edge
183+ * fix indicators AP test
184+
185+ [ Florian Boucault ]
186+ * New Splash screen implementation that fakes real app
187+
188+ [ Albert Astals ]
189+ * We need this in build-depends so that qmluitests pass in CI
190+
191+ [ Daniel d'Andrada ]
192+ * New Splash screen implementation that fakes real app
193+
194+ [ Michael Terry ]
195+ * Fix LC_ALL and test harder by making both manual runs of
196+ timeformattertest and the whole test suite use the same locale
197+ settings.
198+
199+ [ CI bot ]
200+ * Resync trunk
201+
202+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Tue, 23 Sep 2014 09:26:18 +0000
203+
204+unity8 (8.00+14.10.20140918.3-0ubuntu1) utopic; urgency=low
205+
206+ [ Michał Sawicz ]
207+ * Add -windowgeometry option to the Dash and drop any user-visible
208+ mentions of Dash
209+ * Dash: Fix issue when expanding a category and collapsing another one
210+ at the same time.
211+
212+ [ Albert Astals ]
213+ * Dash: Fix issue when expanding a category and collapsing another one
214+ at the same time.
215+ * Make the categoryView invisible when we are in the preview mode (LP:
216+ #1341205)
217+ * Pixel pushing in the dash header (LP: #1365929)
218+
219+ [ Ying-Chun Liu ]
220+ * Re-add restart button for power menu. (LP: 1358197) (LP: #1358197)
221+
222+ [ Marcus Tomlinson ]
223+ * Don't show a preview if a null response is returned from
224+ scope.preview(result)
225+
226+ [ Mirco Müller ]
227+ * Don't limit the number of text-lines for body-text. (LP: #1369438)
228+
229+ [ Michael Zanetti ]
230+ * Don't hide launcher when nothing happens on long left edge swipes
231+ (LP: #1357333)
232+ * Rework LauncherBackend
233+
234+ [ Michael Terry ]
235+ * When running qmluitests, make sure that they use LANGUAGE=C, fixing
236+ a test failure when running locally in the US.
237+
238+ [ Daniel d'Andrada ]
239+ * Some ApplicationWindow test improvements
240+
241+ [ Rodney Dawes ]
242+ * Check purchase state to determine if purchase was cancelled and hide
243+ progress. (LP: #1362622)
244+
245+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Thu, 18 Sep 2014 21:26:42 +0000
246+
247+unity8 (8.00+14.10.20140918-0ubuntu1) utopic; urgency=low
248+
249+ [ Michael Zanetti ]
250+ * Focus first app if there are already some running when we're
251+ starting up (LP: #1339883)
252+
253+ [ Michał Sawicz ]
254+ * Don't play empty urls in Notification.qml
255+
256+ [ Daniel d'Andrada ]
257+ * Improve tst_Shell
258+ * Build without any warnings
259+ * Make tst_Card work from outside the source tree (LP:1359201) (LP:
260+ #1359201)
261+
262+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Thu, 18 Sep 2014 09:44:06 +0000
263+
264+unity8 (8.00+14.10.20140910.1-0ubuntu1) utopic; urgency=low
265+
266+ [ Pete Woods ]
267+ * Disable OEM and Click scopes when system scopes are disabled
268+
269+ [ CI bot ]
270+ * Resync trunk
271+
272+ [ Pawel Stolowski ]
273+ * Set UNITY_SCOPES_NO_FAVORITES environment variable to make scopes
274+ plugin ignore favorite scopes and fix basic functionality of unity-
275+ scope-tool.
276+
277+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Wed, 10 Sep 2014 08:53:57 +0000
278+
279+unity8 (8.00+14.10.20140908.1-0ubuntu1) utopic; urgency=low
280+
281+ [ Michał Sawicz ]
282+ * Use a single white pixel instead of the heavier checkers image.
283+ * Add support to unlock-device for the new adbd coming down the
284+ pipeline. Also fix autopilot tests and run scripts for that.
285+ * Make LVWPH non interactive while on header animation
286+ * Improve references to scope/scopeStyle in PreviewListView and
287+ PageHeader, add tests.
288+
289+ [ Nick Dedekind ]
290+ * Support for nested prompt session. (LP: #1358388)
291+
292+ [ Albert Astals ]
293+ * Remove unused hasAttributes variable
294+ * Disable dash overview if in temp scope preview
295+ * Block mouse events under scope overview bottombar (LP: #1362206)
296+ * Fix regression in focus handling due to SDK change
297+ * Fix warning 'Background.qml:81:21: Unable to assign bool to QUrl'
298+ * Fix launcher internationalization
299+ * Make swipe and home button press in the launcher dismiss the
300+ overview
301+ * GSV: Use proper variable since altnav renames
302+ * Fix some "Cannot read property 'luminance' of null" warnings
303+ * Make LVWPH non interactive while on header animation
304+
305+ [ Mirco Müller ]
306+ * Implemented the needed visual updates on notifications requested by
307+ Design for RTM. (LP: #1348092)
308+
309+ [ Michael Terry ]
310+ * Don't show greeter when screen turns off during a call, even if
311+ proximity sensor isn't active. (LP: #1347001)
312+ * Add support to unlock-device for the new adbd coming down the
313+ pipeline. Also fix autopilot tests and run scripts for that.
314+
315+ [ Michael Zanetti ]
316+ * open the application when clicking on the title entry in the
317+ quicklist (LP: #1336380)
318+ * Don't animate x while dragging apps from the left edge (LP:
319+ #1360105)
320+
321+ [ Diego Sarmentero ]
322+ * Reset button state on cancel (LP: #1362622)
323+
324+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Mon, 08 Sep 2014 14:16:42 +0000
325+
326+unity8 (8.00+14.10.20140903.1-0ubuntu1) utopic; urgency=low
327+
328+ [ Nick Dedekind ]
329+ * Support for nested prompt session. (LP: #1358388)
330+
331+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Wed, 03 Sep 2014 07:58:49 +0000
332+
333+unity8 (8.00+14.10.20140828.1-0ubuntu1) utopic; urgency=low
334+
335+ [ Michael Terry ]
336+ * Reverse default for the user option "allow launcher/panel in greeter
337+ when locked." And allow that property to be controlled by an
338+ AccountsService property. (LP: #1358340) (LP: #1358340)
339+ * With recent password support, we want to be able to unlock the
340+ device even with a password set. And we need to be able to do this
341+ once the new adbd lands. So I've added a DBus command to hide the
342+ greeter. This should be secure because all apps are constrained and
343+ if you're on the local session bus unconstrained, you already have
344+ access to anything you want.
345+
346+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Thu, 28 Aug 2014 20:06:41 +0000
347+
1348unity8 (8.00+14.10.20140827.2-0ubuntu1) utopic; urgency=low
2349
3350 [ Michał Sawicz ]
debian/control+12−10
@@ -7,6 +7,7 @@ Build-Depends: cmake,
77 debhelper (>= 9),
88 doxyqml,
99 graphviz,
10+ gsettings-ubuntu-schemas (>= 0.0.2+14.10.20140815),
1011# We rely on C++11 features, and to prevent from ABI breaks
1112# in libstdc++ causing us issues, we explicitly select a G++
1213# version.
@@ -24,7 +25,7 @@ Build-Depends: cmake,
2425 libpulse-dev,
2526 libqmenumodel-dev (>= 0.2.8),
2627 libqt5xmlpatterns5-dev,
27− libunity-api-dev (>= 7.89),
28+ libunity-api-dev (>= 7.92),
2829 libusermetricsoutput1-dev,
2930 libxcb1-dev,
3031 pkg-config,
@@ -44,7 +45,7 @@ Build-Depends: cmake,
4445 qtdeclarative5-dev-tools,
4546 qtdeclarative5-private-dev (>= 5.2.1),
4647 qtdeclarative5-qtmultimedia-plugin,
47− qtdeclarative5-ubuntu-settings-components (>= 0.3),
48+ qtdeclarative5-ubuntu-settings-components (>= 0.4),
4849 qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 1.1.1239) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 1.1.1239),
4950 ttf-ubuntu-font-family,
5051Standards-Version: 3.9.4
@@ -85,9 +86,9 @@ Depends: gsettings-desktop-schemas,
8586 qmenumodel-qml (>= 0.2.8),
8687 qml-module-qtquick-xmllistmodel,
8788 qtdeclarative5-gsettings1.0,
88− qtdeclarative5-qtmir-plugin (>= 0.4.1),
89+ qtdeclarative5-qtmir-plugin (>= 0.4.4),
8990 qtdeclarative5-ubuntu-telephony0.1,
90− unity-launcher-impl-3,
91+ unity-launcher-impl-4,
9192 unity8-common (= ${source:Version}),
9293 unity8-private (= ${binary:Version}),
9394 unity8-private | unity-launcher-impl,
@@ -107,12 +108,12 @@ Description: Unity 8 shell
107108Package: unity8-common
108109Architecture: all
109110Depends: qml-module-qtquick-layouts,
110− qtdeclarative5-ubuntu-settings-components (>= 0.3),
111+ qtdeclarative5-ubuntu-settings-components (>= 0.4),
111112 qtdeclarative5-ubuntu-thumbnailer0.1 | ubuntu-thumbnailer-impl,
112113 qtdeclarative5-ubuntu-ui-toolkit-plugin (>= 1.1.1239) | qtdeclarative5-ubuntu-ui-toolkit-plugin-gles (>= 1.1.1239),
113114 qtdeclarative5-unity-notifications-plugin (>= 0.1.2) | unity-notifications-impl,
114115 ubuntu-thumbnailer-impl-0,
115− unity-application-impl-3,
116+ unity-application-impl-4,
116117 unity-notifications-impl-3,
117118 unity-plugin-scopes | unity-scopes-impl,
118119 unity-scopes-impl-4,
@@ -159,7 +160,7 @@ Pre-Depends: ${misc:Pre-Depends},
159160Depends: ${misc:Depends},
160161 ${shlibs:Depends},
161162Provides: unity-application-impl,
162− unity-application-impl-3,
163+ unity-application-impl-4,
163164Description: Fake environment for running Unity 8 shell
164165 Provides fake implementations of some QML modules used by Unity 8 shell
165166 (e.g Ubuntu.Application) so that you can run it in a sandboxed environment.
@@ -168,15 +169,16 @@ Package: unity8-private
168169Architecture: any
169170Multi-Arch: same
170171Pre-Depends: ${misc:Pre-Depends},
171−Depends: accountsservice-ubuntu-schemas,
172+Depends: accountsservice-ubuntu-schemas (>= 0.0.3),
172173 gsettings-ubuntu-schemas (>= 0.0.2+14.10.20140815),
173174 libhardware2,
174− libunity-core-6.0-9,
175+ unity-schemas (>= 7.3.1+14.10.20140915),
175176 pay-service,
177+ qml-module-ubuntu-connectivity,
176178 ${misc:Depends},
177179 ${shlibs:Depends},
178180Provides: unity-launcher-impl,
179− unity-launcher-impl-3,
181+ unity-launcher-impl-4,
180182Description: Unity 8 private libs
181183 The Unity 8 shell is the primary user interface for Ubuntu devices.
182184 .
debian/unity8-private.install+2
@@ -1,3 +1,4 @@
1+usr/lib/*/libunity8-private.*
12usr/lib/*/unity8/qml/AccountsService
23usr/lib/*/unity8/qml/Dash
34usr/lib/*/unity8/qml/HudClient
@@ -8,5 +9,6 @@ usr/lib/*/unity8/qml/SessionBroadcast
89usr/lib/*/unity8/qml/Ubuntu
910usr/lib/*/unity8/qml/Unity
1011usr/lib/*/unity8/qml/Utils
12+usr/lib/*/unity8/libUbuntuGestures*
1113usr/share/accountsservice/interfaces
1214usr/share/dbus-1/interfaces
debian/unity8.install+1
@@ -1,5 +1,6 @@
11data/unity8.conf usr/share/upstart/sessions/
22data/unity8-dash.conf usr/share/upstart/sessions/
3+data/unity8-filewatcher.conf usr/share/upstart/sessions/
34usr/bin/unity8
45usr/bin/unity8-dash
56usr/share/applications/unity8.desktop
libs/CMakeLists.txtnew file+1
@@ -0,0 +1 @@
1+add_subdirectory(UbuntuGestures)
libs/UbuntuGestures/CMakeLists.txtnew file+40
@@ -0,0 +1,40 @@
1+# in order to include Qt's private headers
2+remove_definitions(-DQT_NO_KEYWORDS)
3+
4+set(UbuntuGestures_SOURCES
5+ CandidateInactivityTimer.cpp
6+ DebugHelpers.cpp
7+ Timer.cpp
8+ TouchOwnershipEvent.cpp
9+ TouchRegistry.cpp
10+ UnownedTouchEvent.cpp
11+)
12+
13+add_definitions(-DUBUNTUGESTURES_LIBRARY)
14+
15+add_library(UbuntuGestures SHARED ${UbuntuGestures_SOURCES})
16+
17+qt5_use_modules(UbuntuGestures Core Quick)
18+
19+# So that Foo.cpp can #include "Foo.moc"
20+include_directories(${CMAKE_CURRENT_BINARY_DIR})
21+
22+install(TARGETS UbuntuGestures
23+ DESTINATION ${SHELL_PRIVATE_LIBDIR})
24+
25+
26+# There's no cmake var for v8 include path :-/ so create one
27+LIST(GET Qt5Core_INCLUDE_DIRS 0 QtCoreDir0)
28+if(${Qt5Core_VERSION_STRING} VERSION_LESS "5.1.0")
29+ SET(Qt5V8_PRIVATE_INCLUDE_DIR ${QtCoreDir0}/../QtV8/${Qt5Core_VERSION_STRING}/QtV8)
30+else()
31+ SET(Qt5V8_PRIVATE_INCLUDE_DIR ${QtCoreDir0}/QtV8/${Qt5Core_VERSION_STRING}/QtV8)
32+endif()
33+
34+# DANGER! DANGER! Using Qt's private API!
35+include_directories(
36+ ${Qt5Qml_PRIVATE_INCLUDE_DIRS}
37+ ${Qt5Quick_INCLUDE_DIRS}
38+ ${Qt5Quick_PRIVATE_INCLUDE_DIRS}
39+ ${Qt5V8_PRIVATE_INCLUDE_DIR}
40+)
libs/UbuntuGestures/CandidateInactivityTimer.cppnew file+41
@@ -0,0 +1,41 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "CandidateInactivityTimer.h"
18+
19+namespace UbuntuGestures {
20+
21+CandidateInactivityTimer::CandidateInactivityTimer(int touchId, QQuickItem *candidate,
22+ AbstractTimerFactory &timerFactory, QObject *parent)
23+ : QObject(parent)
24+ , m_touchId(touchId)
25+ , m_candidate(candidate)
26+{
27+ m_timer = timerFactory.createTimer(this);
28+ connect(m_timer, &AbstractTimer::timeout,
29+ this, &CandidateInactivityTimer::onTimeout);
30+ m_timer->setInterval(durationMs);
31+ m_timer->setSingleShot(true);
32+ m_timer->start();
33+}
34+
35+void CandidateInactivityTimer::onTimeout()
36+{
37+ qWarning("[TouchRegistry] Candidate for touch %d defaulted!", m_touchId);
38+ Q_EMIT candidateDefaulted(m_touchId, m_candidate);
39+}
40+
41+} // namespace UbuntuGestures
libs/UbuntuGestures/CandidateInactivityTimer.hnew file+49
@@ -0,0 +1,49 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef UBUNTUGESTURES_CANDIDATE_INACTIVITY_TIMER_H
18+#define UBUNTUGESTURES_CANDIDATE_INACTIVITY_TIMER_H
19+
20+#include <QObject>
21+
22+class QQuickItem;
23+
24+#include "Timer.h"
25+
26+namespace UbuntuGestures {
27+
28+class UBUNTUGESTURES_EXPORT CandidateInactivityTimer : public QObject {
29+ Q_OBJECT
30+public:
31+ CandidateInactivityTimer(int touchId, QQuickItem *candidate,
32+ AbstractTimerFactory &timerFactory,
33+ QObject *parent = nullptr);
34+
35+ const int durationMs = 350;
36+
37+Q_SIGNALS:
38+ void candidateDefaulted(int touchId, QQuickItem *candidate);
39+private Q_SLOTS:
40+ void onTimeout();
41+private:
42+ AbstractTimer *m_timer;
43+ int m_touchId;
44+ QQuickItem *m_candidate;
45+};
46+
47+} // namespace UbuntuGestures
48+
49+#endif // UBUNTUGESTURES_CANDIDATE_INACTIVITY_TIMER_H
libs/UbuntuGestures/DebugHelpers.cppnew file+68
@@ -0,0 +1,68 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "DebugHelpers.h"
18+#include <QTouchEvent>
19+
20+QString touchPointStateToString(Qt::TouchPointState state)
21+{
22+ switch (state) {
23+ case Qt::TouchPointPressed:
24+ return QString("pressed");
25+ case Qt::TouchPointMoved:
26+ return QString("moved");
27+ case Qt::TouchPointStationary:
28+ return QString("stationary");
29+ case Qt::TouchPointReleased:
30+ return QString("released");
31+ default:
32+ return QString("INVALID_STATE");
33+ }
34+}
35+
36+QString touchEventToString(const QTouchEvent *ev)
37+{
38+ QString message;
39+
40+ switch (ev->type()) {
41+ case QEvent::TouchBegin:
42+ message.append("TouchBegin ");
43+ break;
44+ case QEvent::TouchUpdate:
45+ message.append("TouchUpdate ");
46+ break;
47+ case QEvent::TouchEnd:
48+ message.append("TouchEnd ");
49+ break;
50+ case QEvent::TouchCancel:
51+ message.append("TouchCancel ");
52+ break;
53+ default:
54+ message.append("INVALID_TOUCH_EVENT_TYPE ");
55+ }
56+
57+ foreach(const QTouchEvent::TouchPoint& touchPoint, ev->touchPoints()) {
58+ message.append(
59+ QString("(id:%1, state:%2, scenePos:(%3,%4)) ")
60+ .arg(touchPoint.id())
61+ .arg(touchPointStateToString(touchPoint.state()))
62+ .arg(touchPoint.scenePos().x())
63+ .arg(touchPoint.scenePos().y())
64+ );
65+ }
66+
67+ return message;
68+}
libs/UbuntuGestures/DebugHelpers.hnew file+29
@@ -0,0 +1,29 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef UBUNTUGESTURES_DEBUG_HELPER_H
18+#define UBUNTUGESTURES_DEBUG_HELPER_H
19+
20+#include <QString>
21+
22+#include "UbuntuGesturesGlobal.h"
23+
24+class QTouchEvent;
25+
26+UBUNTUGESTURES_EXPORT QString touchPointStateToString(Qt::TouchPointState state);
27+UBUNTUGESTURES_EXPORT QString touchEventToString(const QTouchEvent *ev);
28+
29+#endif // UBUNTUGESTURES_DEBUG_HELPER_H
libs/UbuntuGestures/Pool.hnew file+134
@@ -0,0 +1,134 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef UBUNTUGESTURES_POOL_H
18+#define UBUNTUGESTURES_POOL_H
19+
20+#include <QVector>
21+
22+#include "UbuntuGesturesGlobal.h"
23+
24+/*
25+ An object pool.
26+ Avoids unnecessary creations/initializations and deletions/destructions of items. Useful
27+ in a scenario where items are created and destroyed very frequently but the total number
28+ of items at any given time remains small. They're stored in a unordered fashion.
29+
30+ To be used in Pool, ItemType needs to have the following methods:
31+
32+ - ItemType();
33+
34+ A constructor that takes no parameters. An object contructed with it must return false if
35+ isValid() is called.
36+
37+ - bool isValid() const;
38+
39+ Returns wheter the object holds a valid , "filled" state or is empty.
40+ Used by Pool to check if the slot occupied by this object is actually available.
41+
42+ - void reset();
43+
44+ Resets the object to its initial, empty, state. After calling this method, isValid() must
45+ return false.
46+ */
47+template <class ItemType> class Pool
48+{
49+public:
50+ Pool() : m_lastUsedIndex(-1) {
51+ }
52+
53+ class Iterator {
54+ public:
55+ Iterator() : index(-1), item(nullptr) {}
56+ Iterator(int index, ItemType *item)
57+ : index(index), item(item) {}
58+
59+ ItemType *operator->() const { return item; }
60+ ItemType &operator*() const { return *item; }
61+ ItemType &value() const { return *item; }
62+
63+ Iterator &operator= (const Iterator& other) {
64+ index = other.index;
65+ item = other.item;
66+
67+ // by convention, always return *this
68+ return *this;
69+ }
70+
71+ operator bool() const { return item != nullptr; }
72+
73+ int index;
74+ ItemType *item;
75+ };
76+
77+ Iterator &end() const { return Iterator(); }
78+
79+ ItemType &getEmptySlot() {
80+ Q_ASSERT(m_lastUsedIndex < m_slots.size());
81+
82+ // Look for an in-between vacancy first
83+ for (int i = 0; i < m_lastUsedIndex; ++i) {
84+ ItemType &item = m_slots[i];
85+ if (!item.isValid()) {
86+ return item;
87+ }
88+ }
89+
90+ ++m_lastUsedIndex;
91+ if (m_lastUsedIndex >= m_slots.size()) {
92+ m_slots.resize(m_lastUsedIndex + 1);
93+ }
94+
95+ return m_slots[m_lastUsedIndex];
96+ }
97+
98+ void freeSlot(Iterator &iterator) {
99+ m_slots[iterator.index].reset();
100+ if (iterator.index == m_lastUsedIndex) {
101+ do {
102+ --m_lastUsedIndex;
103+ } while (m_lastUsedIndex >= 0 && !m_slots.at(m_lastUsedIndex).isValid());
104+ }
105+ }
106+
107+ // Iterates through all valid items (i.e. the occupied slots)
108+ // calling the given function, with the option of ending the loop early.
109+ //
110+ // bool Func(Iterator& item)
111+ //
112+ // Returning true means it wants to continue the "for" loop, false
113+ // terminates the loop.
114+ template<typename Func> void forEach(Func func) {
115+ Iterator it;
116+ for (it.index = 0; it.index <= m_lastUsedIndex; ++it.index) {
117+ it.item = &m_slots[it.index];
118+ if (!it.item->isValid())
119+ continue;
120+
121+ if (!func(it))
122+ break;
123+ }
124+ }
125+
126+ bool isEmpty() const { return m_lastUsedIndex == -1; }
127+
128+
129+private:
130+ QVector<ItemType> m_slots;
131+ int m_lastUsedIndex;
132+};
133+
134+#endif // UBUNTUGESTURES_POOL_H
libs/UbuntuGestures/Timer.cppnew file+109
@@ -0,0 +1,109 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "Timer.h"
18+
19+namespace UbuntuGestures {
20+
21+Timer::Timer(QObject *parent) : AbstractTimer(parent)
22+{
23+ m_timer.setSingleShot(false);
24+ connect(&m_timer, &QTimer::timeout, this, &AbstractTimer::timeout);
25+}
26+
27+int Timer::interval() const
28+{
29+ return m_timer.interval();
30+}
31+
32+void Timer::setInterval(int msecs)
33+{
34+ m_timer.setInterval(msecs);
35+}
36+
37+void Timer::start()
38+{
39+ m_timer.start();
40+ AbstractTimer::start();
41+}
42+
43+void Timer::stop()
44+{
45+ m_timer.stop();
46+ AbstractTimer::stop();
47+}
48+
49+bool Timer::isSingleShot() const
50+{
51+ return m_timer.isSingleShot();
52+}
53+
54+void Timer::setSingleShot(bool value)
55+{
56+ m_timer.setSingleShot(value);
57+}
58+
59+/////////////////////////////////// FakeTimer //////////////////////////////////
60+
61+FakeTimer::FakeTimer(QObject *parent)
62+ : UbuntuGestures::AbstractTimer(parent)
63+ , m_interval(0)
64+ , m_singleShot(false)
65+{
66+}
67+
68+int FakeTimer::interval() const
69+{
70+ return m_interval;
71+}
72+
73+void FakeTimer::setInterval(int msecs)
74+{
75+ m_interval = msecs;
76+}
77+
78+bool FakeTimer::isSingleShot() const
79+{
80+ return m_singleShot;
81+}
82+
83+void FakeTimer::setSingleShot(bool value)
84+{
85+ m_singleShot = value;
86+}
87+
88+/////////////////////////////////// FakeTimerFactory //////////////////////////////////
89+
90+AbstractTimer *FakeTimerFactory::createTimer(QObject *parent)
91+{
92+ FakeTimer *fakeTimer = new FakeTimer(parent);
93+
94+ timers.append(fakeTimer);
95+
96+ return fakeTimer;
97+}
98+
99+void FakeTimerFactory::makeRunningTimersTimeout()
100+{
101+ for (int i = 0; i < timers.count(); ++i) {
102+ FakeTimer *timer = timers[i].data();
103+ if (timer && timer->isRunning()) {
104+ timer->emitTimeout();
105+ }
106+ }
107+}
108+
109+} // namespace UbuntuGestures
libs/UbuntuGestures/Timer.hnew file+105
@@ -0,0 +1,105 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef UBUNTUGESTURES_TIMER_H
18+#define UBUNTUGESTURES_TIMER_H
19+
20+#include "UbuntuGesturesGlobal.h"
21+
22+#include <QObject>
23+#include <QPointer>
24+#include <QTimer>
25+
26+namespace UbuntuGestures {
27+
28+/* Defines an interface for a Timer. Useful for tests. */
29+class UBUNTUGESTURES_EXPORT AbstractTimer : public QObject
30+{
31+ Q_OBJECT
32+public:
33+ AbstractTimer(QObject *parent) : QObject(parent), m_isRunning(false) {}
34+ virtual int interval() const = 0;
35+ virtual void setInterval(int msecs) = 0;
36+ virtual void start() { m_isRunning = true; }
37+ virtual void stop() { m_isRunning = false; }
38+ bool isRunning() const { return m_isRunning; }
39+ virtual bool isSingleShot() const = 0;
40+ virtual void setSingleShot(bool value) = 0;
41+Q_SIGNALS:
42+ void timeout();
43+private:
44+ bool m_isRunning;
45+};
46+
47+/* Essentially a QTimer wrapper */
48+class UBUNTUGESTURES_EXPORT Timer : public AbstractTimer
49+{
50+ Q_OBJECT
51+public:
52+ Timer(QObject *parent = nullptr);
53+
54+ int interval() const override;
55+ void setInterval(int msecs) override;
56+ void start() override;
57+ void stop() override;
58+ bool isSingleShot() const override;
59+ void setSingleShot(bool value) override;
60+private:
61+ QTimer m_timer;
62+};
63+
64+/* For tests */
65+class UBUNTUGESTURES_EXPORT FakeTimer : public AbstractTimer
66+{
67+ Q_OBJECT
68+public:
69+ FakeTimer(QObject *parent = nullptr);
70+
71+ virtual void emitTimeout() { Q_EMIT timeout(); }
72+
73+ int interval() const override;
74+ void setInterval(int msecs) override;
75+ bool isSingleShot() const override;
76+ void setSingleShot(bool value) override;
77+private:
78+ int m_interval;
79+ bool m_singleShot;
80+};
81+
82+class UBUNTUGESTURES_EXPORT AbstractTimerFactory
83+{
84+public:
85+ virtual ~AbstractTimerFactory() {}
86+ virtual AbstractTimer *createTimer(QObject *parent = nullptr) = 0;
87+};
88+
89+class UBUNTUGESTURES_EXPORT TimerFactory : public AbstractTimerFactory
90+{
91+public:
92+ AbstractTimer *createTimer(QObject *parent = nullptr) override { return new Timer(parent); }
93+};
94+
95+class UBUNTUGESTURES_EXPORT FakeTimerFactory : public AbstractTimerFactory
96+{
97+public:
98+ AbstractTimer *createTimer(QObject *parent = nullptr) override;
99+ void makeRunningTimersTimeout();
100+ QList<QPointer<FakeTimer>> timers;
101+};
102+
103+} // namespace UbuntuGestures
104+
105+#endif // UBUNTUGESTURES_TIMER_H
libs/UbuntuGestures/TouchOwnershipEvent.cppnew file+35
@@ -0,0 +1,35 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "TouchOwnershipEvent.h"
18+
19+QEvent::Type TouchOwnershipEvent::m_touchOwnershipType = (QEvent::Type)-1;
20+
21+TouchOwnershipEvent::TouchOwnershipEvent(int touchId, bool gained)
22+ : QEvent(touchOwnershipEventType())
23+ , m_touchId(touchId)
24+ , m_gained(gained)
25+{
26+}
27+
28+QEvent::Type TouchOwnershipEvent::touchOwnershipEventType()
29+{
30+ if (m_touchOwnershipType == (QEvent::Type)-1) {
31+ m_touchOwnershipType = (QEvent::Type)registerEventType();
32+ }
33+
34+ return m_touchOwnershipType;
35+}
libs/UbuntuGestures/TouchOwnershipEvent.hnew file+50
@@ -0,0 +1,50 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef UBUNTU_TOUCHOWNERSHIPEVENT_H
18+#define UBUNTU_TOUCHOWNERSHIPEVENT_H
19+
20+#include <QEvent>
21+#include "UbuntuGesturesGlobal.h"
22+
23+/*
24+ When an item get an ownership event for a touch it can grab/steal that touch
25+ with a clean conscience.
26+ */
27+class UBUNTUGESTURES_EXPORT TouchOwnershipEvent : public QEvent
28+{
29+public:
30+ TouchOwnershipEvent(int touchId, bool gained);
31+
32+ static Type touchOwnershipEventType();
33+
34+ /*
35+ Whether ownership was gained (true) or lost (false)
36+ */
37+ bool gained() const { return m_gained; }
38+
39+ /*
40+ Id of the touch whose ownership was granted.
41+ */
42+ int touchId() const { return m_touchId; }
43+
44+private:
45+ static Type m_touchOwnershipType;
46+ int m_touchId;
47+ bool m_gained;
48+};
49+
50+#endif // UBUNTU_TOUCHOWNERSHIPEVENT_H
libs/UbuntuGestures/TouchRegistry.cppnew file+500
@@ -0,0 +1,500 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "TouchRegistry.h"
18+
19+#include <QCoreApplication>
20+#include <QDebug>
21+
22+#pragma GCC diagnostic push
23+#pragma GCC diagnostic ignored "-pedantic"
24+#include <private/qquickitem_p.h>
25+#pragma GCC diagnostic pop
26+
27+#include "CandidateInactivityTimer.h"
28+#include "Timer.h"
29+#include "TouchOwnershipEvent.h"
30+#include "UnownedTouchEvent.h"
31+
32+#define TOUCHREGISTRY_DEBUG 0
33+
34+#if TOUCHREGISTRY_DEBUG
35+ #include "DebugHelpers.h"
36+ #define UG_DEBUG qDebug() << "[TouchRegistry]"
37+#endif // TOUCHREGISTRY_DEBUG
38+
39+using namespace UbuntuGestures;
40+
41+TouchRegistry *TouchRegistry::m_instance = nullptr;
42+
43+TouchRegistry::TouchRegistry(QObject *parent)
44+ : TouchRegistry(parent, new TimerFactory)
45+{
46+}
47+
48+TouchRegistry::TouchRegistry(QObject *parent, AbstractTimerFactory *timerFactory)
49+ : QObject(parent)
50+ , m_inDispatchLoop(false)
51+ , m_timerFactory(timerFactory)
52+{
53+ if (m_instance == nullptr) {
54+ m_instance = this;
55+ } else {
56+ qFatal("Cannot have more than one instance of TouchRegistry. It must be a singleton.");
57+ }
58+}
59+
60+TouchRegistry::~TouchRegistry()
61+{
62+ Q_ASSERT(m_instance != nullptr);
63+ m_instance = nullptr;
64+ delete m_timerFactory;
65+}
66+
67+void TouchRegistry::update(const QTouchEvent *event)
68+{
69+ #if TOUCHREGISTRY_DEBUG
70+ UG_DEBUG << "got" << qPrintable(touchEventToString(event));
71+ #endif
72+
73+ const QList<QTouchEvent::TouchPoint> &touchPoints = event->touchPoints();
74+ for (int i = 0; i < touchPoints.count(); ++i) {
75+ const QTouchEvent::TouchPoint &touchPoint = touchPoints.at(i);
76+ if (touchPoint.state() == Qt::TouchPointPressed) {
77+ TouchInfo &touchInfo = m_touchInfoPool.getEmptySlot();
78+ touchInfo.init(touchPoint.id());
79+ } else if (touchPoint.state() == Qt::TouchPointReleased) {
80+ Pool<TouchInfo>::Iterator touchInfo = findTouchInfo(touchPoint.id());
81+
82+ touchInfo->physicallyEnded = true;
83+ }
84+ }
85+
86+ deliverTouchUpdatesToUndecidedCandidatesAndWatchers(event);
87+
88+ freeEndedTouchInfos();
89+}
90+
91+void TouchRegistry::deliverTouchUpdatesToUndecidedCandidatesAndWatchers(const QTouchEvent *event)
92+{
93+ // TODO: Look into how we could optimize this whole thing.
94+ // Although it's not really a problem as we should have at most two candidates
95+ // for each point and there should not be many active points at any given moment.
96+ // But having three nested for-loops does scare.
97+
98+ // TODO: Don't send it to the object that is already receiving the regular event
99+ // because QQuickWindow is sending it to him (i.e., he's the touch owner from Qt's point of view)
100+ // Problem is, we cannnot easily get this information.
101+
102+ const QList<QTouchEvent::TouchPoint> &updatedTouchPoints = event->touchPoints();
103+
104+ // Maps an item to the touches in this event he should be informed about.
105+ // E.g.: a QTouchEvent might have three touches but a given item might be interested in only
106+ // one of them. So he will get a UnownedTouchEvent from this QTouchEvent containing only that
107+ // touch point.
108+ QMap<QQuickItem*, QList<int>> touchIdsForItems;
109+
110+ // Build touchIdsForItems
111+ m_touchInfoPool.forEach([&](Pool<TouchInfo>::Iterator &touchInfo) {
112+ if (touchInfo->isOwned() && touchInfo->watchers.isEmpty())
113+ return true;
114+
115+ for (int j = 0; j < updatedTouchPoints.count(); ++j) {
116+ if (updatedTouchPoints[j].id() == touchInfo->id) {
117+ if (!touchInfo->isOwned()) {
118+ for (int i = 0; i < touchInfo->candidates.count(); ++i) {
119+ CandidateInfo &candidate = touchInfo->candidates[i];
120+ Q_ASSERT(!candidate.item.isNull());
121+ touchIdsForItems[candidate.item.data()].append(touchInfo->id);
122+ }
123+ }
124+
125+ const QList<QPointer<QQuickItem>> &watchers = touchInfo->watchers;
126+ for (int i = 0; i < watchers.count(); ++i) {
127+ if (!watchers[i].isNull()) {
128+ touchIdsForItems[watchers[i].data()].append(touchInfo->id);
129+ }
130+ }
131+
132+ return true;
133+ }
134+ }
135+
136+ return true;
137+ });
138+
139+ // TODO: Consider what happens if an item calls any of TouchRegistry's public methods
140+ // from the event handler callback.
141+ m_inDispatchLoop = true;
142+ auto it = touchIdsForItems.constBegin();
143+ while (it != touchIdsForItems.constEnd()) {
144+ QQuickItem *item = it.key();
145+ const QList<int> &touchIds = it.value();
146+ dispatchPointsToItem(event, touchIds, item);
147+ ++it;
148+ };
149+ m_inDispatchLoop = false;
150+}
151+
152+void TouchRegistry::freeEndedTouchInfos()
153+{
154+ m_touchInfoPool.forEach([&](Pool<TouchInfo>::Iterator &touchInfo) {
155+ if (touchInfo->ended()) {
156+ m_touchInfoPool.freeSlot(touchInfo);
157+ }
158+ return true;
159+ });
160+}
161+
162+/*
163+ Extracts the touches with the given touchIds from event and send them in a
164+ UnownedTouchEvent to the given item
165+ */
166+void TouchRegistry::dispatchPointsToItem(const QTouchEvent *event, const QList<int> &touchIds,
167+ QQuickItem *item)
168+{
169+ Qt::TouchPointStates touchPointStates = 0;
170+ QList<QTouchEvent::TouchPoint> touchPoints;
171+
172+ const QList<QTouchEvent::TouchPoint> &allTouchPoints = event->touchPoints();
173+
174+ QTransform windowToCandidateTransform = QQuickItemPrivate::get(item)->windowToItemTransform();
175+ QMatrix4x4 windowToCandidateMatrix(windowToCandidateTransform);
176+
177+ for (int i = 0; i < allTouchPoints.count(); ++i) {
178+ const QTouchEvent::TouchPoint &originalTouchPoint = allTouchPoints[i];
179+ if (touchIds.contains(originalTouchPoint.id())) {
180+ QTouchEvent::TouchPoint touchPoint = originalTouchPoint;
181+
182+ translateTouchPointFromScreenToWindowCoords(touchPoint);
183+
184+ // Set the point's local coordinates to that of the item
185+ touchPoint.setRect(windowToCandidateTransform.mapRect(touchPoint.sceneRect()));
186+ touchPoint.setStartPos(windowToCandidateTransform.map(touchPoint.startScenePos()));
187+ touchPoint.setLastPos(windowToCandidateTransform.map(touchPoint.lastScenePos()));
188+ touchPoint.setVelocity(windowToCandidateMatrix.mapVector(touchPoint.velocity()).toVector2D());
189+
190+ touchPoints.append(touchPoint);
191+ touchPointStates |= touchPoint.state();
192+ }
193+ }
194+
195+ QTouchEvent *eventForItem = new QTouchEvent(event->type(),
196+ event->device(),
197+ event->modifiers(),
198+ touchPointStates,
199+ touchPoints);
200+ eventForItem->setWindow(event->window());
201+ eventForItem->setTimestamp(event->timestamp());
202+ eventForItem->setTarget(event->target());
203+
204+ UnownedTouchEvent unownedTouchEvent(eventForItem);
205+
206+ #if TOUCHREGISTRY_DEBUG
207+ UG_DEBUG << "Sending unowned" << qPrintable(touchEventToString(eventForItem))
208+ << "to" << item;
209+ #endif
210+
211+ QCoreApplication::sendEvent(item, &unownedTouchEvent);
212+}
213+
214+void TouchRegistry::translateTouchPointFromScreenToWindowCoords(QTouchEvent::TouchPoint &touchPoint)
215+{
216+ touchPoint.setScreenRect(touchPoint.sceneRect());
217+ touchPoint.setStartScreenPos(touchPoint.startScenePos());
218+ touchPoint.setLastScreenPos(touchPoint.lastScenePos());
219+
220+ touchPoint.setSceneRect(touchPoint.rect());
221+ touchPoint.setStartScenePos(touchPoint.startPos());
222+ touchPoint.setLastScenePos(touchPoint.lastPos());
223+}
224+
225+bool TouchRegistry::eventFilter(QObject *watched, QEvent *event)
226+{
227+ Q_UNUSED(watched);
228+
229+ switch (event->type()) {
230+ case QEvent::TouchBegin:
231+ case QEvent::TouchUpdate:
232+ case QEvent::TouchEnd:
233+ case QEvent::TouchCancel:
234+ update(static_cast<QTouchEvent*>(event));
235+ break;
236+ default:
237+ // do nothing
238+ break;
239+ }
240+
241+ // Do not filter out the event. i.e., let it be handled further as
242+ // we're just monitoring events
243+ return false;
244+}
245+
246+void TouchRegistry::addCandidateOwnerForTouch(int id, QQuickItem *candidate)
247+{
248+ #if TOUCHREGISTRY_DEBUG
249+ UG_DEBUG << "addCandidateOwnerForTouch id" << id << "candidate" << candidate;
250+ #endif
251+
252+ Pool<TouchInfo>::Iterator touchInfo = findTouchInfo(id);
253+ if (!touchInfo) { qFatal("TouchRegistry: Failed to find TouchInfo"); }
254+
255+ if (touchInfo->isOwned()) {
256+ qWarning("TouchRegistry: trying to add candidate owner for a touch that's already owned");
257+ return;
258+ }
259+
260+ // TODO: Check if candidate already exists
261+
262+ CandidateInfo candidateInfo;
263+ candidateInfo.undecided = true;
264+ candidateInfo.item = candidate;
265+ candidateInfo.inactivityTimer = new CandidateInactivityTimer(id, candidate,
266+ *m_timerFactory,
267+ this);
268+ connect(candidateInfo.inactivityTimer, &CandidateInactivityTimer::candidateDefaulted,
269+ this, &TouchRegistry::rejectCandidateOwnerForTouch);
270+
271+ touchInfo->candidates.append(candidateInfo);
272+}
273+
274+void TouchRegistry::addTouchWatcher(int touchId, QQuickItem *watcher)
275+{
276+ #if TOUCHREGISTRY_DEBUG
277+ UG_DEBUG << "addTouchWatcher id" << touchId << "watcher" << watcher;
278+ #endif
279+
280+ Pool<TouchInfo>::Iterator touchInfo = findTouchInfo(touchId);
281+ if (!touchInfo) { qFatal("TouchRegistry: Failed to find TouchInfo"); }
282+
283+ // TODO: Check if watcher already exists
284+
285+ touchInfo->watchers.append(watcher);
286+}
287+
288+void TouchRegistry::removeCandidateOwnerForTouch(int id, QQuickItem *candidate)
289+{
290+ #if TOUCHREGISTRY_DEBUG
291+ UG_DEBUG << "removeCandidateOwnerForTouch id" << id << "candidate" << candidate;
292+ #endif
293+
294+ Pool<TouchInfo>::Iterator touchInfo = findTouchInfo(id);
295+ if (!touchInfo) { qFatal("TouchRegistry: Failed to find TouchInfo"); }
296+
297+ int indexRemoved = -1;
298+
299+ // TODO: check if the candidate is in fact the owner of the touch
300+
301+ for (int i = 0; i < touchInfo->candidates.count() && indexRemoved == -1; ++i) {
302+ CandidateInfo &candidateInfo = touchInfo->candidates[i];
303+ if (candidateInfo.item == candidate) {
304+ Q_ASSERT(i > 0 || candidateInfo.undecided);
305+ if (i == 0 && !candidateInfo.undecided) {
306+ qCritical("TouchRegistry: touch owner is being removed.");
307+ }
308+ delete candidateInfo.inactivityTimer;
309+ candidateInfo.inactivityTimer = nullptr;
310+ touchInfo->candidates.removeAt(i);
311+ indexRemoved = i;
312+ }
313+ }
314+
315+ if (indexRemoved == 0) {
316+ // the top candidate has been removed. if the new top candidate
317+ // wants the touch let him know he's now the owner.
318+ if (touchInfo->isOwned()) {
319+ touchInfo->notifyCandidatesOfOwnershipResolution();
320+ }
321+ }
322+
323+ if (!m_inDispatchLoop && touchInfo->ended()) {
324+ m_touchInfoPool.freeSlot(touchInfo);
325+ }
326+}
327+
328+void TouchRegistry::requestTouchOwnership(int id, QQuickItem *candidate)
329+{
330+ #if TOUCHREGISTRY_DEBUG
331+ UG_DEBUG << "requestTouchOwnership id " << id << "candidate" << candidate;
332+ #endif
333+
334+ Pool<TouchInfo>::Iterator touchInfo = findTouchInfo(id);
335+ if (!touchInfo) { qFatal("TouchRegistry: Failed to find TouchInfo"); }
336+
337+ Q_ASSERT(!touchInfo->isOwned());
338+
339+ int candidateIndex = -1;
340+ for (int i = 0; i < touchInfo->candidates.count(); ++i) {
341+ CandidateInfo &candidateInfo = touchInfo->candidates[i];
342+ if (candidateInfo.item == candidate) {
343+ candidateInfo.undecided = false;
344+ delete candidateInfo.inactivityTimer;
345+ candidateInfo.inactivityTimer = nullptr;
346+ candidateIndex = i;
347+ break;
348+ }
349+ }
350+
351+ // add it as a candidate if not present yet
352+ if (candidateIndex < 0) {
353+ CandidateInfo candidateInfo;
354+ candidateInfo.undecided = false;
355+ candidateInfo.item = candidate;
356+ candidateInfo.inactivityTimer = nullptr;
357+ touchInfo->candidates.append(candidateInfo);
358+ // it's the last one
359+ candidateIndex = touchInfo->candidates.count() - 1;
360+ }
361+
362+ // If it's the top candidate it means it's now the owner. Let
363+ // it know about it.
364+ if (candidateIndex == 0) {
365+ touchInfo->notifyCandidatesOfOwnershipResolution();
366+ }
367+}
368+
369+Pool<TouchRegistry::TouchInfo>::Iterator TouchRegistry::findTouchInfo(int id)
370+{
371+ Pool<TouchInfo>::Iterator touchInfo;
372+
373+ m_touchInfoPool.forEach([&](Pool<TouchInfo>::Iterator &someTouchInfo) -> bool {
374+ if (someTouchInfo->id == id) {
375+ touchInfo = someTouchInfo;
376+ return false;
377+ } else {
378+ return true;
379+ }
380+ });
381+
382+ return touchInfo;
383+}
384+
385+
386+void TouchRegistry::rejectCandidateOwnerForTouch(int id, QQuickItem *candidate)
387+{
388+ // NB: It's technically possible that candidate is a dangling pointer at this point.
389+ // Although that would most likely be due to a bug in our code.
390+ // In any case, only dereference it after it's confirmed that it indeed exists.
391+
392+ #if TOUCHREGISTRY_DEBUG
393+ UG_DEBUG << "rejectCandidateOwnerForTouch id" << id << "candidate" << (void*)candidate;
394+ #endif
395+
396+ Pool<TouchInfo>::Iterator touchInfo = findTouchInfo(id);
397+ if (!touchInfo) {
398+ #if TOUCHREGISTRY_DEBUG
399+ UG_DEBUG << "Failed to find TouchInfo for id" << id;
400+ #endif
401+ return;
402+ }
403+
404+ int rejectedCandidateIndex = -1;
405+
406+ // Check if the given candidate is valid and still undecided
407+ for (int i = 0; i < touchInfo->candidates.count() && rejectedCandidateIndex == -1; ++i) {
408+ CandidateInfo &candidateInfo = touchInfo->candidates[i];
409+ if (candidateInfo.item == candidate) {
410+ Q_ASSERT(i > 0 || candidateInfo.undecided);
411+ if (i == 0 && !candidateInfo.undecided) {
412+ qCritical() << "TouchRegistry: Can't reject item (" << (void*)candidate
413+ << ") as it already owns touch" << id;
414+ return;
415+ } else {
416+ // we found the guy and it's all fine.
417+ rejectedCandidateIndex = i;
418+ }
419+ }
420+ }
421+
422+ // If we reached this point it's because the given candidate exists and is indeed undecided.
423+
424+ Q_ASSERT(rejectedCandidateIndex >= 0 && rejectedCandidateIndex < touchInfo->candidates.size());
425+
426+ {
427+ TouchOwnershipEvent lostOwnershipEvent(id, false /*gained*/);
428+ QCoreApplication::sendEvent(candidate, &lostOwnershipEvent);
429+ }
430+
431+ touchInfo->candidates.removeAt(rejectedCandidateIndex);
432+
433+ if (rejectedCandidateIndex == 0) {
434+ // the top candidate has been removed. if the new top candidate
435+ // wants the touch let him know he's now the owner.
436+ if (touchInfo->isOwned()) {
437+ touchInfo->notifyCandidatesOfOwnershipResolution();
438+ }
439+ }
440+}
441+
442+////////////////////////////////////// TouchRegistry::TouchInfo ////////////////////////////////////
443+
444+TouchRegistry::TouchInfo::TouchInfo(int id)
445+{
446+ init(id);
447+}
448+
449+void TouchRegistry::TouchInfo::reset()
450+{
451+ id = -1;
452+
453+ for (int i = 0; i < candidates.count(); ++i) {
454+ CandidateInfo &candidate = candidates[i];
455+ delete candidate.inactivityTimer;
456+ candidate.inactivityTimer.clear(); // shoundn't be needed but anyway...
457+ }
458+}
459+
460+void TouchRegistry::TouchInfo::init(int id)
461+{
462+ this->id = id;
463+ physicallyEnded = false;
464+ candidates.clear();
465+ watchers.clear();
466+}
467+
468+bool TouchRegistry::TouchInfo::isOwned() const
469+{
470+ return !candidates.isEmpty() && !candidates.first().undecided;
471+}
472+
473+bool TouchRegistry::TouchInfo::ended() const
474+{
475+ Q_ASSERT(isValid());
476+ return physicallyEnded && (isOwned() || candidates.isEmpty());
477+}
478+
479+void TouchRegistry::TouchInfo::notifyCandidatesOfOwnershipResolution()
480+{
481+ Q_ASSERT(isOwned());
482+
483+ #if TOUCHREGISTRY_DEBUG
484+ UG_DEBUG << "sending TouchOwnershipEvent(id =" << id
485+ << " gained) to candidate" << candidates[0].item;
486+ #endif
487+
488+ TouchOwnershipEvent gainedOwnershipEvent(id, true /*gained*/);
489+ QCoreApplication::sendEvent(candidates[0].item, &gainedOwnershipEvent);
490+
491+
492+ TouchOwnershipEvent lostOwnershipEvent(id, false /*gained*/);
493+ for (int i = 1; i < candidates.count(); ++i) {
494+ #if TOUCHREGISTRY_DEBUG
495+ UG_DEBUG << "sending TouchWonershipEvent(id =" << id << " lost) to candidate"
496+ << candidates[i].item;
497+ #endif
498+ QCoreApplication::sendEvent(candidates[i].item, &lostOwnershipEvent);
499+ }
500+}
libs/UbuntuGestures/TouchRegistry.hnew file+182
@@ -0,0 +1,182 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef UNITY_TOUCHREGISTRY_H
18+#define UNITY_TOUCHREGISTRY_H
19+
20+#include <QQuickItem>
21+#include <QObject>
22+#include <QPointer>
23+#include <QTouchEvent>
24+#include <QVector>
25+
26+#include "UbuntuGesturesGlobal.h"
27+#include "CandidateInactivityTimer.h"
28+#include "Pool.h"
29+
30+namespace UbuntuGestures {
31+ class AbstractTimerFactory;
32+}
33+
34+/*
35+ Where the ownership of touches is registered.
36+
37+ Singleton used for adding a touch point ownership model analogous to the one
38+ described in the XInput 2.2 protocol[1] on top of the existing input dispatch logic in QQuickWindow.
39+
40+ It provides a much more flexible and powerful way of dealing with pointer ownership than the existing
41+ mechanisms in Qt. Namely QQuickItem::grabTouchPoints, QuickItem::keepTouchGrab,
42+ QQuickItem::setFiltersChildMouseEvents, QQuickItem::ungrabTouchPoints and QQuickItem::touchUngrabEvent.
43+
44+ Usage:
45+
46+ 1- An item receives a a new touch point. If he's not sure whether he wants it yet, he calls:
47+ TouchRegistry::instance()->addCandidateOwnerForTouch(touchId, this);
48+ touchEvent->ignore();
49+ Ignoring the event is crucial so that it can be seen by other interested parties, which will
50+ behave similarly.
51+
52+ 2- That item will then start receiving UnownedTouchEvents for that touch from step 1. Once he's
53+ made a decision he calls either:
54+ TouchRegistry::instance()->requestTouchOwnership(touchId, this);
55+ If he wants the touch point or:
56+ TouchRegistry::instance()->removeCandidateOwnerForTouch(touchId, this);
57+  if he does not want it.
58+
59+ Candidates are put in a priority queue. The first one to call addCandidateOwnerForTouch() will
60+ take precedence over the others for receiving ownership over the touch point (from now on called
61+ simply top-candidate).
62+
63+ If the top-candidate calls requestTouchOwnership() he will immediately receive a
64+ TouchOwnershipEvent(gained=true) for that touch point. He can then safely call
65+ QQuickItem::grabTouchPoints to actually get the owned touch points. The other candidates
66+ will receive TouchOwnershipEvent(gained=false) and will no longer receive UnownedTouchEvents
67+ for that touch point. They will have to undo whatever action they were performing with that
68+ touch point.
69+
70+ But if the top-candidate calls removeCandidateOwnerForTouch() instead, he's popped from the
71+ candidacy queue and ownership is given to the new top-most candidate if he has already
72+ made his decision, that is.
73+
74+ The TouchRegistry cannot enforce the results of this pointer ownership negotiation (i.e.,
75+ who gets to grab the touch points) as that would clash with QQuickWindow's input event
76+ dispatching logic. The candidates have to respect the decision and grab the touch points
77+ themselves.
78+
79+ If an item wants ownership over touches as soon as he receives the TouchBegin for them, his step 1
80+ would be instead:
81+ TouchRegistry::instance()->requestTouchOwnership(touchId, this);
82+ return true;
83+ He would then be notified once ownership has been granted to him, from which point onwards he could
84+ safely assume other TouchRegistry users wouldn't snatch this touch away from him.
85+
86+ Items oblivious to TouchRegistry will lose their touch points without warning, just like in plain Qt.
87+
88+ [1] - http://www.x.org/releases/X11R7.7/doc/inputproto/XI2proto.txt (see multitouch-ownership)
89+ */
90+class UBUNTUGESTURES_EXPORT TouchRegistry : public QObject
91+{
92+ Q_OBJECT
93+public:
94+ TouchRegistry(QObject *parent = nullptr);
95+ // Useful for tests, where you should feed a fake timer
96+ TouchRegistry(QObject *parent, UbuntuGestures::AbstractTimerFactory *timerFactory);
97+
98+ virtual ~TouchRegistry();
99+
100+ // Returns a pointer to the application's TouchRegistry instance.
101+ // If no instance has been allocated, null is returned.
102+ static TouchRegistry *instance() { return m_instance; }
103+
104+ void update(const QTouchEvent *event);
105+
106+ // Calls update() if the given event is a QTouchEvent
107+ bool eventFilter(QObject *watched, QEvent *event) override;
108+
109+ // An item that might later request ownership over the given touch point.
110+ // He will be kept informed about that touch point through UnownedTouchEvents
111+ // All candidates must eventually decide whether they want to own the touch point
112+ // or not. That decision is informed through requestTouchOwnership() or
113+ // removeCandidateOwnerForTouch()
114+ void addCandidateOwnerForTouch(int id, QQuickItem *candidate);
115+
116+ // The same as rejecting ownership of a touch
117+ void removeCandidateOwnerForTouch(int id, QQuickItem *candidate);
118+
119+ // The candidate object wants to be the owner of the touch with the given id.
120+ // If he's currently the oldest/top-most candidate, he will get an ownership
121+ // event immediately. If not, he will get ownership if (or once) he becomes the
122+ // top-most candidate.
123+ void requestTouchOwnership(int id, QQuickItem *candidate);
124+
125+ // An item that has no interest (effective or potential) in owning a touch point
126+ // but would nonetheless like to be kept up-to-date on its state.
127+ void addTouchWatcher(int touchId, QQuickItem *watcherItem);
128+
129+private Q_SLOTS:
130+ void rejectCandidateOwnerForTouch(int id, QQuickItem *candidate);
131+
132+private:
133+ class CandidateInfo {
134+ public:
135+ bool undecided;
136+ // TODO: Prune candidates that become null and resolve ownership accordingly.
137+ QPointer<QQuickItem> item;
138+ QPointer<UbuntuGestures::CandidateInactivityTimer> inactivityTimer;
139+ };
140+
141+ class TouchInfo {
142+ public:
143+ TouchInfo() : id(-1) {}
144+ TouchInfo(int id);
145+ bool isValid() const { return id >= 0; }
146+ void reset();
147+ void init(int id);
148+ int id;
149+ bool physicallyEnded;
150+ bool isOwned() const;
151+ bool ended() const;
152+ void notifyCandidatesOfOwnershipResolution();
153+
154+ // TODO optimize storage (s/QList/Pool)
155+ QList<CandidateInfo> candidates;
156+ QList<QPointer<QQuickItem>> watchers;
157+ };
158+
159+ Pool<TouchInfo>::Iterator findTouchInfo(int id);
160+
161+ void deliverTouchUpdatesToUndecidedCandidatesAndWatchers(const QTouchEvent *event);
162+
163+ static void translateTouchPointFromScreenToWindowCoords(QTouchEvent::TouchPoint &touchPoint);
164+
165+ static void dispatchPointsToItem(const QTouchEvent *event, const QList<int> &touchIds,
166+ QQuickItem *item);
167+ void freeEndedTouchInfos();
168+
169+ Pool<TouchInfo> m_touchInfoPool;
170+
171+ // the singleton instance
172+ static TouchRegistry *m_instance;
173+
174+ bool m_inDispatchLoop;
175+
176+ UbuntuGestures::AbstractTimerFactory *m_timerFactory;
177+
178+ friend class tst_TouchRegistry;
179+ friend class tst_DirectionalDragArea;
180+};
181+
182+#endif // UNITY_TOUCHREGISTRY_H
plugins/Ubuntu/Gestures/UbuntuGesturesGlobal.h → libs/UbuntuGestures/UbuntuGesturesGlobal.hrenamed+1−1
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2014 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
libs/UbuntuGestures/UnownedTouchEvent.cppnew file+39
@@ -0,0 +1,39 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "UnownedTouchEvent.h"
18+
19+QEvent::Type UnownedTouchEvent::m_unownedTouchEventType = (QEvent::Type)-1;
20+
21+UnownedTouchEvent::UnownedTouchEvent(QTouchEvent *touchEvent)
22+ : QEvent(unownedTouchEventType())
23+ , m_touchEvent(touchEvent)
24+{
25+}
26+
27+QEvent::Type UnownedTouchEvent::unownedTouchEventType()
28+{
29+ if (m_unownedTouchEventType == (QEvent::Type)-1) {
30+ m_unownedTouchEventType = (QEvent::Type)registerEventType();
31+ }
32+
33+ return m_unownedTouchEventType;
34+}
35+
36+QTouchEvent *UnownedTouchEvent::touchEvent()
37+{
38+ return m_touchEvent.data();
39+}
libs/UbuntuGestures/UnownedTouchEvent.hnew file+45
@@ -0,0 +1,45 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef UBUNTU_UNOWNEDTOUCHEVENT_H
18+#define UBUNTU_UNOWNEDTOUCHEVENT_H
19+
20+#include <QTouchEvent>
21+#include <QScopedPointer>
22+#include "UbuntuGesturesGlobal.h"
23+
24+/*
25+ A touch event with touch points that do not belong the item receiving it.
26+
27+ See TouchRegistry::addCandidateOwnerForTouch and TouchRegistry::addTouchWatcher
28+ */
29+class UBUNTUGESTURES_EXPORT UnownedTouchEvent : public QEvent
30+{
31+public:
32+ UnownedTouchEvent(QTouchEvent *touchEvent);
33+ static Type unownedTouchEventType();
34+
35+ // TODO: It might be cleaner to store the information directly in UnownedTouchEvent
36+ // instead of carrying around a synthesized QTouchEvent. But the latter option
37+ // is very convenient.
38+ QTouchEvent *touchEvent();
39+
40+private:
41+ static Type m_unownedTouchEventType;
42+ QScopedPointer<QTouchEvent> m_touchEvent;
43+};
44+
45+#endif // UBUNTU_UNOWNEDTOUCHEVENT_H
plugins/AccountsService/AccountsService.cpp+38
@@ -26,6 +26,8 @@ AccountsService::AccountsService(QObject* parent)
2626 m_service(new AccountsServiceDBusAdaptor(this)),
2727 m_user(qgetenv("USER")),
2828 m_demoEdges(false),
29+ m_enableLauncherWhileLocked(false),
30+ m_enableIndicatorsWhileLocked(false),
2931 m_statsWelcomeScreen(false),
3032 m_passwordDisplayHint(Keyboard),
3133 m_failedLogins(0)
@@ -47,6 +49,8 @@ void AccountsService::setUser(const QString &user)
4749 Q_EMIT userChanged();
4850
4951 updateDemoEdges();
52+ updateEnableLauncherWhileLocked();
53+ updateEnableIndicatorsWhileLocked();
5054 updateBackgroundFile();
5155 updateStatsWelcomeScreen();
5256 updatePasswordDisplayHint();
@@ -64,6 +68,16 @@ void AccountsService::setDemoEdges(bool demoEdges)
6468 m_service->setUserProperty(m_user, "com.canonical.unity.AccountsService", "demo-edges", demoEdges);
6569}
6670
71+bool AccountsService::enableLauncherWhileLocked() const
72+{
73+ return m_enableLauncherWhileLocked;
74+}
75+
76+bool AccountsService::enableIndicatorsWhileLocked() const
77+{
78+ return m_enableIndicatorsWhileLocked;
79+}
80+
6781QString AccountsService::backgroundFile() const
6882{
6983 return m_backgroundFile;
@@ -88,6 +102,24 @@ void AccountsService::updateDemoEdges()
88102 }
89103}
90104
105+void AccountsService::updateEnableLauncherWhileLocked()
106+{
107+ auto enableLauncherWhileLocked = m_service->getUserProperty(m_user, "com.ubuntu.AccountsService.SecurityPrivacy", "EnableLauncherWhileLocked").toBool();
108+ if (m_enableLauncherWhileLocked != enableLauncherWhileLocked) {
109+ m_enableLauncherWhileLocked = enableLauncherWhileLocked;
110+ Q_EMIT enableLauncherWhileLockedChanged();
111+ }
112+}
113+
114+void AccountsService::updateEnableIndicatorsWhileLocked()
115+{
116+ auto enableIndicatorsWhileLocked = m_service->getUserProperty(m_user, "com.ubuntu.AccountsService.SecurityPrivacy", "EnableIndicatorsWhileLocked").toBool();
117+ if (m_enableIndicatorsWhileLocked != enableIndicatorsWhileLocked) {
118+ m_enableIndicatorsWhileLocked = enableIndicatorsWhileLocked;
119+ Q_EMIT enableIndicatorsWhileLockedChanged();
120+ }
121+}
122+
91123void AccountsService::updateBackgroundFile()
92124{
93125 auto backgroundFile = m_service->getUserProperty(m_user, "org.freedesktop.Accounts.User", "BackgroundFile").toString();
@@ -157,6 +189,12 @@ void AccountsService::propertiesChanged(const QString &user, const QString &inte
157189 if (changed.contains("PasswordDisplayHint")) {
158190 updatePasswordDisplayHint();
159191 }
192+ if (changed.contains("EnableLauncherWhileLocked")) {
193+ updateEnableLauncherWhileLocked();
194+ }
195+ if (changed.contains("EnableIndicatorsWhileLocked")) {
196+ updateEnableIndicatorsWhileLocked();
197+ }
160198 }
161199}
162200
plugins/AccountsService/AccountsService.h+14
@@ -36,6 +36,12 @@ class AccountsService: public QObject
3636 READ demoEdges
3737 WRITE setDemoEdges
3838 NOTIFY demoEdgesChanged)
39+ Q_PROPERTY (bool enableLauncherWhileLocked
40+ READ enableLauncherWhileLocked
41+ NOTIFY enableLauncherWhileLockedChanged)
42+ Q_PROPERTY (bool enableIndicatorsWhileLocked
43+ READ enableIndicatorsWhileLocked
44+ NOTIFY enableIndicatorsWhileLockedChanged)
3945 Q_PROPERTY (QString backgroundFile
4046 READ backgroundFile
4147 NOTIFY backgroundFileChanged)
@@ -62,6 +68,8 @@ public:
6268 void setUser(const QString &user);
6369 bool demoEdges() const;
6470 void setDemoEdges(bool demoEdges);
71+ bool enableLauncherWhileLocked() const;
72+ bool enableIndicatorsWhileLocked() const;
6573 QString backgroundFile() const;
6674 bool statsWelcomeScreen() const;
6775 PasswordDisplayHint passwordDisplayHint() const;
@@ -71,6 +79,8 @@ public:
7179Q_SIGNALS:
7280 void userChanged();
7381 void demoEdgesChanged();
82+ void enableLauncherWhileLockedChanged();
83+ void enableIndicatorsWhileLockedChanged();
7484 void backgroundFileChanged();
7585 void statsWelcomeScreenChanged();
7686 void passwordDisplayHintChanged();
@@ -82,6 +92,8 @@ private Q_SLOTS:
8292
8393private:
8494 void updateDemoEdges();
95+ void updateEnableLauncherWhileLocked();
96+ void updateEnableIndicatorsWhileLocked();
8597 void updateBackgroundFile();
8698 void updateStatsWelcomeScreen();
8799 void updatePasswordDisplayHint();
@@ -90,6 +102,8 @@ private:
90102 AccountsServiceDBusAdaptor *m_service;
91103 QString m_user;
92104 bool m_demoEdges;
105+ bool m_enableLauncherWhileLocked;
106+ bool m_enableIndicatorsWhileLocked;
93107 QString m_backgroundFile;
94108 bool m_statsWelcomeScreen;
95109 PasswordDisplayHint m_passwordDisplayHint;
plugins/AccountsService/AccountsService.qmltypes+1
@@ -26,5 +26,6 @@ Module {
2626 Property { name: "backgroundFile"; type: "string"; isReadonly: true }
2727 Property { name: "statsWelcomeScreen"; type: "bool"; isReadonly: true }
2828 Property { name: "passwordDisplayHint"; type: "PasswordDisplayHint"; isReadonly: true }
29+ Property { name: "failedLogins"; type: "uint" }
2930 }
3031}
plugins/Dash/CardAttributes.qml+1−1
@@ -57,7 +57,7 @@ GridLayout {
5757 text: "value" in modelData && modelData["value"] || "";
5858 elide: Text.ElideRight
5959 maximumLineCount: 1
60− font.weight: "style" in modelData && modelData["style"] == "highlighted" ? Font.DemiBold : Font.Light
60+ font.weight: "style" in modelData && modelData["style"] === "highlighted" ? Font.Bold : Font.Light
6161 fontSize: "small"
6262 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale)
6363 color: grid.color
plugins/Dash/CardCreator.js+20−21
@@ -78,16 +78,17 @@ var kArtShapeHolderCode = 'Item { \n\
7878 width = root.fixedArtShapeSize.width; \n\
7979 height = root.fixedArtShapeSize.height; \n\
8080 } else { \n\
81− width = Qt.binding(function() { return !visible ? 0 : image.width }); \n\
82− height = Qt.binding(function() { return !visible ? 0 : image.height }); \n\
81+ width = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.width }); \n\
82+ height = Qt.binding(function() { return image.status !== Image.Ready ? 0 : image.height }); \n\
8383 } \n\
8484 } \n\
85− image: Image { \n\
85+ image: CroppedImageMinimumSourceSize { \n\
8686 objectName: "artImage"; \n\
87− source: cardData && cardData["art"] || ""; \n\
87+ property bool doLoadSource: !NetworkingStatus.limitedBandwith; \n\
88+ source: { if (root.visible) doLoadSource = true; return doLoadSource && cardData && cardData["art"] || ""; } \n\
8889 cache: true; \n\
8990 asynchronous: root.asynchronous; \n\
90− fillMode: Image.PreserveAspectCrop; \n\
91+ visible: false; \n\
9192 width: %2; \n\
9293 height: %3; \n\
9394 } \n\
@@ -190,16 +191,14 @@ var kMascotShapeLoaderCode = 'Loader { \n\
190191
191192// %1 is used as anchors of mascotImage
192193// %2 is used as visible of mascotImage
193−var kMascotImageCode = 'Image { \n\
194+var kMascotImageCode = 'CroppedImageMinimumSourceSize { \n\
194195 id: mascotImage; \n\
195196 objectName: "mascotImage"; \n\
196197 anchors { %1 } \n\
197− readonly property int maxSize: Math.max(width, height) * 4; \n\
198− source: cardData && cardData["mascot"] || ""; \n\
198+ property bool doLoadSource: !NetworkingStatus.limitedBandwith; \n\
199+ source: { if (root.visible) doLoadSource = true; return doLoadSource && cardData && cardData["mascot"] || ""; } \n\
199200 width: units.gu(6); \n\
200201 height: units.gu(5.625); \n\
201− sourceSize { width: maxSize; height: maxSize } \n\
202− fillMode: Image.PreserveAspectCrop; \n\
203202 horizontalAlignment: Image.AlignHCenter; \n\
204203 verticalAlignment: Image.AlignVCenter; \n\
205204 visible: %2; \n\
@@ -220,13 +219,13 @@ var kTitleLabelCode = 'Label { \n\
220219 color: %2; \n\
221220 visible: showHeader %3; \n\
222221 text: root.title; \n\
223− font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal; \n\
224− horizontalAlignment: root.headerAlignment; \n\
222+ font.weight: cardData && cardData["subtitle"] ? Font.DemiBold : Font.Normal; \n\
223+ horizontalAlignment: root.titleAlignment; \n\
225224 }\n';
226225
227226// %1 is used as extra anchors of emblemIcon
228227// %2 is used as color of emblemIcon
229−var kEmblemIconCode = 'Icon { \n\
228+var kEmblemIconCode = 'StatusIcon { \n\
230229 id: emblemIcon; \n\
231230 objectName: "emblemIcon"; \n\
232231 anchors { \n\
@@ -236,7 +235,6 @@ var kEmblemIconCode = 'Icon { \n\
236235 } \n\
237236 source: cardData && cardData["emblem"] || ""; \n\
238237 color: %2; \n\
239− width: height; \n\
240238 height: source != "" ? titleLabel.font.pixelSize : 0; \n\
241239 }\n';
242240
@@ -258,13 +256,12 @@ var kSubtitleLabelCode = 'Label { \n\
258256 anchors { %1 } \n\
259257 anchors.topMargin: units.dp(2); \n\
260258 elide: Text.ElideRight; \n\
261− fontSize: "small"; \n\
259+ fontSize: "x-small"; \n\
262260 font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale); \n\
263261 color: %2; \n\
264262 visible: titleLabel.visible && titleLabel.text; \n\
265263 text: cardData && cardData["subtitle"] || ""; \n\
266264 font.weight: Font.Light; \n\
267− horizontalAlignment: root.headerAlignment; \n\
268265 }\n';
269266
270267// %1 is used as anchors of attributesRow
@@ -310,7 +307,7 @@ function cardString(template, components) {
310307 property var artShapeBorderSource: undefined; \n\
311308 property real fontScale: 1.0; \n\
312309 property var scopeStyle: null; \n\
313− property int headerAlignment: Text.AlignLeft; \n\
310+ property int titleAlignment: Text.AlignLeft; \n\
314311 property int fixedHeaderHeight: -1; \n\
315312 property size fixedArtShapeSize: Qt.size(-1, -1); \n\
316313 readonly property string title: cardData && cardData["title"] || ""; \n\
@@ -436,18 +433,18 @@ function cardString(template, components) {
436433 mascotShapeCode = kMascotShapeLoaderCode.arg(mascotAnchors);
437434 }
438435
439− var mascotImageVisible = useMascotShape ? 'false' : 'showHeader';
436+ var mascotImageVisible = useMascotShape ? 'false' : 'showHeader && resized';
440437 mascotCode = kMascotImageCode.arg(mascotAnchors).arg(mascotImageVisible);
441438 }
442439
443− var summaryColorWithBackground = 'backgroundLoader.active && backgroundLoader.item && root.scopeStyle ? root.scopeStyle.getTextColor(backgroundLoader.item.luminance) : (backgroundLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white")';
440+ var summaryColorWithBackground = 'backgroundLoader.active && backgroundLoader.item && root.scopeStyle ? root.scopeStyle.getTextColor(backgroundLoader.item.luminance) : (backgroundLoader.item && backgroundLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white")';
444441
445442 var hasTitleContainer = hasTitle && (hasEmblem || (hasMascot && (hasSubtitle || hasAttributes)));
446443 var titleSubtitleCode = '';
447444 if (hasTitle) {
448445 var titleColor;
449446 if (headerAsOverlay) {
450− titleColor = 'root.scopeStyle ? root.scopeStyle.getTextColor(overlayLoader.item.luminance) : (overlayLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white")';
447+ titleColor = 'root.scopeStyle && overlayLoader.item ? root.scopeStyle.getTextColor(overlayLoader.item.luminance) : (overlayLoader.item && overlayLoader.item.luminance > 0.7 ? Theme.palette.normal.baseText : "white")';
451448 } else if (hasSummary) {
452449 titleColor = 'summary.color';
453450 } else if (hasBackground) {
@@ -627,7 +624,7 @@ function cardString(template, components) {
627624
628625 var implicitHeight = 'implicitHeight: ';
629626 if (hasSummary) {
630− implicitHeight += 'summary.y + summary.height + (summary.text ? units.gu(1) : 0);\n';
627+ implicitHeight += 'summary.y + summary.height + units.gu(1);\n';
631628 } else if (hasHeaderRow) {
632629 implicitHeight += 'row.y + row.height + units.gu(1);\n';
633630 } else if (hasMascot) {
@@ -655,6 +652,8 @@ function cardString(template, components) {
655652function createCardComponent(parent, template, components) {
656653 var imports = 'import QtQuick 2.2; \n\
657654 import Ubuntu.Components 1.1; \n\
655+ import Ubuntu.Settings.Components 0.1; \n\
656+ import Ubuntu.Connectivity 1.0; \n\
658657 import Dash 0.1;\n\
659658 import Utils 0.1;\n';
660659 var card = cardString(template, components);
plugins/Dash/CroppedImageMinimumSourceSize.qmlnew file+38
@@ -0,0 +1,38 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.3
18+
19+Image {
20+ property bool resized: false
21+ property bool resizing: false
22+ fillMode: Image.PreserveAspectCrop
23+ visible: resized
24+ onSourceSizeChanged: {
25+ if (!resized && !resizing) {
26+ resizing = true;
27+ var ar = width / height;
28+ var ssar = sourceSize.width / sourceSize.height;
29+ if (ar > ssar) {
30+ sourceSize = Qt.size(width, 0);
31+ } else {
32+ sourceSize = Qt.size(0, height);
33+ }
34+ resizing = false;
35+ resized = true;
36+ }
37+ }
38+}
plugins/Dash/listviewwithpageheader.cpp+37−13
@@ -104,8 +104,6 @@
104104#pragma GCC diagnostic pop
105105// #include <private/qquickrectangle_p.h>
106106
107−static const qreal bufferRatio = 0.5;
108−
109107qreal ListViewWithPageHeader::ListItem::height() const
110108{
111109 return m_item->height() + (m_sectionItem ? m_sectionItem->height() : 0);
@@ -158,6 +156,7 @@ ListViewWithPageHeader::ListViewWithPageHeader()
158156 , m_forceNoClip(false)
159157 , m_inLayout(false)
160158 , m_inContentHeightKeepHeaderShown(false)
159+ , m_cacheBuffer(0)
161160{
162161 m_clipItem = new QQuickItem(contentItem());
163162// m_clipItem = new QQuickRectangle(contentItem());
@@ -172,7 +171,7 @@ ListViewWithPageHeader::ListViewWithPageHeader()
172171 connect(this, SIGNAL(contentWidthChanged()), this, SLOT(onContentWidthChanged()));
173172 connect(this, SIGNAL(contentHeightChanged()), this, SLOT(onContentHeightChanged()));
174173 connect(this, SIGNAL(heightChanged()), this, SLOT(onHeightChanged()));
175− connect(m_contentYAnimation, SIGNAL(stopped()), this, SLOT(onShowHeaderAnimationFinished()));
174+ connect(m_contentYAnimation, SIGNAL(runningChanged(bool)), this, SLOT(contentYAnimationRunningChanged(bool)));
176175
177176 setFlickableDirection(VerticalFlick);
178177}
@@ -335,6 +334,20 @@ qreal ListViewWithPageHeader::headerItemShownHeight() const
335334 return m_headerItemShownHeight;
336335}
337336
337+qreal ListViewWithPageHeader::cacheBuffer() const
338+{
339+ return m_cacheBuffer;
340+}
341+
342+void ListViewWithPageHeader::setCacheBuffer(qreal cacheBuffer)
343+{
344+ if (cacheBuffer != m_cacheBuffer) {
345+ m_cacheBuffer = cacheBuffer;
346+ Q_EMIT cacheBufferChanged();
347+ polish();
348+ }
349+}
350+
338351void ListViewWithPageHeader::positionAtBeginning()
339352{
340353 if (m_delegateModel->count() <= 0)
@@ -356,8 +369,7 @@ void ListViewWithPageHeader::positionAtBeginning()
356369 // Create the subsequent items
357370 int modelIndex = 1;
358371 qreal pos = item->y() + item->height();
359− const qreal buffer = height() * bufferRatio;
360− const qreal bufferTo = height() + buffer;
372+ const qreal bufferTo = height() + m_cacheBuffer;
361373 while (modelIndex < m_delegateModel->count() && pos <= bufferTo) {
362374 if (!(item = createItem(modelIndex, false)))
363375 break;
@@ -409,6 +421,16 @@ void ListViewWithPageHeader::showHeader()
409421 }
410422}
411423
424+int ListViewWithPageHeader::firstCreatedIndex() const
425+{
426+ return m_firstVisibleIndex;
427+}
428+
429+int ListViewWithPageHeader::createdItemCount() const
430+{
431+ return m_visibleItems.count();
432+}
433+
412434QQuickItem *ListViewWithPageHeader::item(int modelIndex) const
413435{
414436 ListItem *item = itemAtIndex(modelIndex);
@@ -520,7 +542,7 @@ void ListViewWithPageHeader::adjustHeader(qreal diff)
520542 // (but the header was not shown by it's own position)
521543 // or the header is partially shown and we are not doing a maximizeVisibleArea either
522544 const bool scrolledUp = m_previousContentY > contentY();
523− const bool notRebounding = contentY() + height() < contentHeight();
545+ const bool notRebounding = qRound(contentY() + height()) < qRound(contentHeight());
524546 const bool notShownByItsOwn = contentY() + diff >= m_headerItem->y() + m_headerItem->height();
525547 const bool maximizeVisibleAreaRunning = m_contentYAnimation->isRunning() && contentYAnimationType == ContentYAnimationMaximizeVisibleArea;
526548
@@ -593,11 +615,10 @@ void ListViewWithPageHeader::refill()
593615 return;
594616 }
595617
596− const qreal buffer = height() * bufferRatio;
597618 const qreal from = contentY();
598619 const qreal to = from + height();
599− const qreal bufferFrom = from - buffer;
600− const qreal bufferTo = to + buffer;
620+ const qreal bufferFrom = from - m_cacheBuffer;
621+ const qreal bufferTo = to + m_cacheBuffer;
601622
602623 bool added = addVisibleItems(from, to, false);
603624 bool removed = removeNonVisibleItems(bufferFrom, bufferTo);
@@ -830,7 +851,7 @@ ListViewWithPageHeader::ListItem *ListViewWithPageHeader::createItem(int modelIn
830851 if (nextItem) {
831852 listItem->setY(nextItem->y() - listItem->height());
832853 } else if (modelIndex == 0) {
833− listItem->setY(m_headerItem ? m_headerItem->height() : 0);
854+ listItem->setY(-m_clipItem->y() + (m_headerItem ? m_headerItem->height() : 0));
834855 } else if (!m_visibleItems.isEmpty()) {
835856 lostItem = true;
836857 }
@@ -1056,10 +1077,13 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
10561077 m_contentHeightDirty = true;
10571078}
10581079
1059−void ListViewWithPageHeader::onShowHeaderAnimationFinished()
1080+void ListViewWithPageHeader::contentYAnimationRunningChanged(bool running)
10601081{
1061− m_contentHeightDirty = true;
1062− polish();
1082+ setInteractive(!running);
1083+ if (!running) {
1084+ m_contentHeightDirty = true;
1085+ polish();
1086+ }
10631087}
10641088
10651089void ListViewWithPageHeader::itemGeometryChanged(QQuickItem * /*item*/, const QRectF &newGeometry, const QRectF &oldGeometry)
plugins/Dash/listviewwithpageheader.h+9−1
@@ -54,6 +54,7 @@ class ListViewWithPageHeader : public QQuickFlickable, public QQuickItemChangeLi
5454 Q_PROPERTY(bool forceNoClip READ forceNoClip WRITE setForceNoClip NOTIFY forceNoClipChanged)
5555 Q_PROPERTY(int stickyHeaderHeight READ stickyHeaderHeight NOTIFY stickyHeaderHeightChanged)
5656 Q_PROPERTY(qreal headerItemShownHeight READ headerItemShownHeight NOTIFY headerItemShownHeightChanged)
57+ Q_PROPERTY(qreal cacheBuffer READ cacheBuffer WRITE setCacheBuffer NOTIFY cacheBufferChanged)
5758
5859 friend class ListViewWithPageHeaderTest;
5960 friend class ListViewWithPageHeaderTestSection;
@@ -84,8 +85,13 @@ public:
8485 int stickyHeaderHeight() const;
8586 qreal headerItemShownHeight() const;
8687
88+ qreal cacheBuffer() const;
89+ void setCacheBuffer(qreal cacheBuffer);
90+
8791 Q_INVOKABLE void positionAtBeginning();
8892 Q_INVOKABLE void showHeader();
93+ Q_INVOKABLE int firstCreatedIndex() const;
94+ Q_INVOKABLE int createdItemCount() const;
8995 Q_INVOKABLE QQuickItem *item(int modelIndex) const;
9096
9197 // The index has to be created for this to try to do something
@@ -103,6 +109,7 @@ Q_SIGNALS:
103109 void forceNoClipChanged();
104110 void stickyHeaderHeightChanged();
105111 void headerItemShownHeightChanged();
112+ void cacheBufferChanged();
106113
107114protected:
108115 void componentComplete() override;
@@ -118,7 +125,7 @@ private Q_SLOTS:
118125 void onContentWidthChanged();
119126 void onHeightChanged();
120127 void onModelUpdated(const QQmlChangeSet &changeSet, bool reset);
121− void onShowHeaderAnimationFinished();
128+ void contentYAnimationRunningChanged(bool running);
122129
123130private:
124131 class ListItem
@@ -197,6 +204,7 @@ private:
197204 bool m_forceNoClip;
198205 bool m_inLayout;
199206 bool m_inContentHeightKeepHeaderShown;
207+ qreal m_cacheBuffer;
200208
201209 // Qt 5.0 doesn't like releasing the items just after itemCreated
202210 // so we delay the releasing until the next updatePolish
plugins/Dash/qmldir+2−1
@@ -3,4 +3,5 @@ plugin Dash-qml
33typeinfo Dash.qmltypes
44singleton CardCreatorCache 0.1 CardCreatorCache.qml
55ScopeStyle 0.1 ScopeStyle.qml
6−CardAttributes 0.1 CardAttributes.qml
6+CardAttributes 0.1 CardAttributes.qml
7+CroppedImageMinimumSourceSize 0.1 CroppedImageMinimumSourceSize.qml
plugins/LightDM/DBusGreeter.cpp+5
@@ -39,6 +39,11 @@ void DBusGreeter::ShowGreeter()
3939 return Q_EMIT m_greeter->showGreeter();
4040}
4141
42+void DBusGreeter::HideGreeter()
43+{
44+ return Q_EMIT m_greeter->hideGreeter();
45+}
46+
4247void DBusGreeter::isActiveChangedHandler()
4348{
4449 notifyPropertyChanged("IsActive", isActive());
plugins/LightDM/DBusGreeter.h+1−1
@@ -21,7 +21,6 @@
2121#include <QObject>
2222
2323class Greeter;
24−class QDBusInterface;
2524
2625/** This is an internal class used to talk with the indicators.
2726 */
@@ -38,6 +37,7 @@ public:
3837
3938 bool isActive() const;
4039 Q_SCRIPTABLE void ShowGreeter(); // temporary, until we split the greeter again
40+ Q_SCRIPTABLE void HideGreeter(); // temporary, until we split the greeter again
4141
4242Q_SIGNALS:
4343 void isActiveChanged();
plugins/LightDM/DBusGreeterList.h−1
@@ -21,7 +21,6 @@
2121#include <QObject>
2222
2323class Greeter;
24−class QDBusInterface;
2524
2625/** This is an internal class used to talk with the indicators.
2726 */
plugins/LightDM/Greeter.h+1
@@ -62,6 +62,7 @@ Q_SIGNALS:
6262 void isAuthenticatedChanged();
6363 void promptlessChanged();
6464 void showGreeter();
65+ void hideGreeter();
6566
6667 // This signal is emitted by external agents like indicators, and the UI
6768 // should switch to this user if possible.
plugins/LightDM/LightDM.qmltypes+2
@@ -27,6 +27,7 @@ Module {
2727 name: "showPrompt"
2828 Parameter { name: "text"; type: "string" }
2929 Parameter { name: "isSecret"; type: "bool" }
30+ Parameter { name: "isDefaultPrompt"; type: "bool" }
3031 }
3132 Signal { name: "authenticationComplete" }
3233 Signal {
@@ -34,6 +35,7 @@ Module {
3435 Parameter { name: "user"; type: "string" }
3536 }
3637 Signal { name: "isActiveChanged" }
38+ Signal { name: "isAuthenticatedChanged" }
3739 Signal { name: "showGreeter" }
3840 Signal {
3941 name: "requestAuthenticationUser"
plugins/Lights/Lights.cpp+1−2
@@ -20,8 +20,7 @@
2020#include <QtCore/QDebug>
2121
2222extern "C" {
23−#include <hardware/hardware.h>
24−#include <hardware/lights.h>
23+#include "android-hardware.h"
2524#include <string.h>
2625}
2726
plugins/Lights/android-hardware.hnew file+23
@@ -0,0 +1,23 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ */
17+
18+// The purpose of this header wrapper is just to avoid having warnings being reported on
19+// code from external header files, as we can't do anything about them.
20+#pragma GCC system_header
21+
22+#include <hardware/hardware.h>
23+#include <hardware/lights.h>
plugins/Powerd/Powerd.cpp+16−2
@@ -39,7 +39,8 @@ void dimTimeoutChanged(GSettings *settings, const gchar *key, QDBusInterface *un
3939
4040Powerd::Powerd(QObject* parent)
4141 : QObject(parent),
42− unityScreen(nullptr)
42+ unityScreen(nullptr),
43+ cachedStatus(Status::On)
4344{
4445 unityScreen = new QDBusInterface("com.canonical.Unity.Screen",
4546 "/com/canonical/Unity/Screen",
@@ -51,7 +52,7 @@ Powerd::Powerd(QObject* parent)
5152 "com.canonical.Unity.Screen",
5253 "DisplayPowerStateChange",
5354 this,
54− SIGNAL(displayPowerStateChange(int, int)));
55+ SLOT(handleDisplayPowerStateChange(int, int)));
5556
5657 systemSettings = g_settings_new("com.ubuntu.touch.system");
5758 g_signal_connect(systemSettings, "changed::auto-brightness", G_CALLBACK(autoBrightnessChanged), unityScreen);
@@ -67,3 +68,16 @@ Powerd::~Powerd()
6768 g_signal_handlers_disconnect_by_data(systemSettings, unityScreen);
6869 g_object_unref(systemSettings);
6970}
71+
72+Powerd::Status Powerd::status() const
73+{
74+ return cachedStatus;
75+}
76+
77+void Powerd::handleDisplayPowerStateChange(int status, int reason)
78+{
79+ if (cachedStatus != (Status)status) {
80+ cachedStatus = (Status)status;
81+ Q_EMIT statusChanged((DisplayStateChangeReason)reason);
82+ }
83+}
plugins/Powerd/Powerd.h+8−1
@@ -29,6 +29,7 @@ class Powerd: public QObject
2929 Q_OBJECT
3030 Q_ENUMS(Status)
3131 Q_ENUMS(DisplayStateChangeReason)
32+ Q_PROPERTY(Status status READ status NOTIFY statusChanged)
3233
3334public:
3435 enum DisplayStateChangeReason {
@@ -46,12 +47,18 @@ public:
4647 explicit Powerd(QObject *parent = 0);
4748 ~Powerd();
4849
50+ Status status() const;
51+
4952Q_SIGNALS:
50− void displayPowerStateChange(int status, int reason);
53+ void statusChanged(DisplayStateChangeReason reason);
54+
55+private Q_SLOTS:
56+ void handleDisplayPowerStateChange(int status, int reason);
5157
5258private:
5359 QDBusInterface *unityScreen;
5460 GSettings *systemSettings;
61+ Status cachedStatus;
5562};
5663
5764#endif
plugins/Powerd/Powerd.qmltypes+3−3
@@ -30,10 +30,10 @@ Module {
3030 "On": 1
3131 }
3232 }
33+ Property { name: "status"; type: "Status"; isReadonly: true }
3334 Signal {
34− name: "displayPowerStateChange"
35− Parameter { name: "status"; type: "int" }
36− Parameter { name: "reason"; type: "int" }
35+ name: "statusChanged"
36+ Parameter { name: "reason"; type: "DisplayStateChangeReason" }
3737 }
3838 }
3939}
plugins/Ubuntu/Gestures/AxisVelocityCalculator.h+2−2
@@ -21,7 +21,7 @@
2121#ifndef VELOCITY_CALCULATOR_H
2222#define VELOCITY_CALCULATOR_H
2323
24−#include "UbuntuGesturesGlobal.h"
24+#include "UbuntuGesturesQmlGlobal.h"
2525#include <stdint.h>
2626#include <QtCore/QObject>
2727#include "TimeSource.h"
@@ -49,7 +49,7 @@
4949 }
5050 }
5151 */
52−class UBUNTUGESTURES_EXPORT AxisVelocityCalculator : public QObject
52+class UBUNTUGESTURESQML_EXPORT AxisVelocityCalculator : public QObject
5353{
5454 Q_OBJECT
5555
plugins/Ubuntu/Gestures/CMakeLists.txt+24−5
@@ -1,19 +1,38 @@
1−set(UbuntuGestureQml_SOURCES
1+# in order to include Qt's private headers
2+remove_definitions(-DQT_NO_KEYWORDS)
3+
4+set(UbuntuGesturesQml_SOURCES
25 plugin.cpp
36 AxisVelocityCalculator.cpp
47 Direction.cpp
58 DirectionalDragArea.cpp
69 PressedOutsideNotifier.cpp
710 TimeSource.cpp
11+ TouchGate.cpp
812)
913
10−add_definitions(-DUBUNTUGESTURES_LIBRARY)
14+add_definitions(-DUBUNTUGESTURESQML_LIBRARY)
1115
12−add_library(UbuntuGestureQml MODULE ${UbuntuGestureQml_SOURCES})
16+add_library(UbuntuGesturesQml MODULE ${UbuntuGesturesQml_SOURCES})
17+target_link_libraries(UbuntuGesturesQml UbuntuGestures)
1318
14−qt5_use_modules(UbuntuGestureQml Core Quick)
19+qt5_use_modules(UbuntuGesturesQml Core Quick)
1520
1621# So that Foo.cpp can #include "Foo.moc"
1722include_directories(${CMAKE_CURRENT_BINARY_DIR})
1823
19−add_unity8_plugin(Ubuntu.Gestures 0.1 Ubuntu/Gestures TARGETS UbuntuGestureQml)
24+include_directories(${CMAKE_SOURCE_DIR}/libs/UbuntuGestures)
25+
26+# There's no cmake var for v8 include path :-/ so create one
27+LIST(GET Qt5Core_INCLUDE_DIRS 0 QtCoreDir0)
28+SET(Qt5V8_PRIVATE_INCLUDE_DIR ${QtCoreDir0}/QtV8/${Qt5Core_VERSION_STRING}/QtV8)
29+
30+# DANGER! DANGER! Using Qt's private API!
31+include_directories(
32+ ${Qt5Qml_PRIVATE_INCLUDE_DIRS}
33+ ${Qt5Quick_INCLUDE_DIRS}
34+ ${Qt5Quick_PRIVATE_INCLUDE_DIRS}
35+ ${Qt5V8_PRIVATE_INCLUDE_DIR}
36+)
37+
38+add_unity8_plugin(Ubuntu.Gestures 0.1 Ubuntu/Gestures TARGETS UbuntuGesturesQml)
plugins/Ubuntu/Gestures/Direction.h+2−2
@@ -17,14 +17,14 @@
1717#ifndef DIRECTION_H
1818#define DIRECTION_H
1919
20−#include "UbuntuGesturesGlobal.h"
20+#include "UbuntuGesturesQmlGlobal.h"
2121#include <QObject>
2222
2323/*
2424 A Direction enum wrapper so that we can do things like "direction: Direction.Righwards"
2525 from QML.
2626 */
27−class UBUNTUGESTURES_EXPORT Direction : public QObject {
27+class UBUNTUGESTURESQML_EXPORT Direction : public QObject {
2828 Q_OBJECT
2929 Q_ENUMS(Type)
3030
plugins/Ubuntu/Gestures/DirectionalDragArea.cpp+317−191
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013-2014 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,64 +14,32 @@
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1515 */
1616
17+#define ACTIVETOUCHESINFO_DEBUG 0
18+#define DIRECTIONALDRAGAREA_DEBUG 0
19+
1720#include "DirectionalDragArea.h"
1821
22+#include <QQuickWindow>
1923#include <QtCore/qmath.h>
20−#include <QtCore/QTimer>
2124#include <QDebug>
2225
23−using namespace UbuntuGestures;
26+#pragma GCC diagnostic push
27+#pragma GCC diagnostic ignored "-pedantic"
28+#include <private/qquickwindow_p.h>
29+#pragma GCC diagnostic pop
2430
25−#define DIRECTIONALDRAGAREA_DEBUG 0
31+// local
32+#include "TouchOwnershipEvent.h"
33+#include "TouchRegistry.h"
34+#include "UnownedTouchEvent.h"
35+
36+using namespace UbuntuGestures;
2637
2738#if DIRECTIONALDRAGAREA_DEBUG
2839#define DDA_DEBUG(msg) qDebug("[DDA] " msg)
29−namespace {
30−QString touchPointStateToString(Qt::TouchPointState state) {
31− switch (state) {
32− case Qt::TouchPointPressed:
33− return QString("pressed");
34− case Qt::TouchPointMoved:
35− return QString("moved");
36− case Qt::TouchPointStationary:
37− return QString("stationary");
38− default: // Qt::TouchPointReleased:
39− return QString("released");
40− }
41−}
42−QString touchEventToString(QTouchEvent *ev)
43−{
44− QString message;
45−
46− switch (ev->type()) {
47− case QEvent::TouchBegin:
48− message.append("TouchBegin ");
49− break;
50− case QEvent::TouchUpdate:
51− message.append("TouchUpdate ");
52− break;
53− case QEvent::TouchEnd:
54− message.append("TouchEnd ");
55− break;
56− default: //QEvent::TouchCancel
57− message.append("TouchCancel ");
58− }
59−
60− for (int i=0; i < ev->touchPoints().size(); ++i) {
61−
62− const QTouchEvent::TouchPoint& touchPoint = ev->touchPoints().at(i);
63− message.append(
64− QString("(id:%1, state:%2, scenePos:(%3,%4)) ")
65− .arg(touchPoint.id())
66− .arg(touchPointStateToString(touchPoint.state()))
67− .arg(touchPoint.scenePos().x())
68− .arg(touchPoint.scenePos().y())
69− );
70− }
71−
72− return message;
73−}
40+#include "DebugHelpers.h"
7441
42+namespace {
7543const char *statusToString(DirectionalDragArea::Status status)
7644{
7745 if (status == DirectionalDragArea::WaitingForTouch) {
@@ -88,23 +56,6 @@ const char *statusToString(DirectionalDragArea::Status status)
8856#define DDA_DEBUG(msg) do{}while(0)
8957#endif // DIRECTIONALDRAGAREA_DEBUG
9058
91−// Essentially a QTimer wrapper
92−class RecognitionTimer : public UbuntuGestures::AbstractTimer
93−{
94− Q_OBJECT
95−public:
96− RecognitionTimer(QObject *parent) : UbuntuGestures::AbstractTimer(parent) {
97− m_timer.setSingleShot(false);
98− connect(&m_timer, &QTimer::timeout,
99− this, &UbuntuGestures::AbstractTimer::timeout);
100− }
101− virtual int interval() const { return m_timer.interval(); }
102− virtual void setInterval(int msecs) { m_timer.setInterval(msecs); }
103− virtual void start() { m_timer.start(); UbuntuGestures::AbstractTimer::start(); }
104− virtual void stop() { m_timer.stop(); UbuntuGestures::AbstractTimer::stop(); }
105−private:
106− QTimer m_timer;
107−};
10859
10960DirectionalDragArea::DirectionalDragArea(QQuickItem *parent)
11061 : QQuickItem(parent)
@@ -126,12 +77,14 @@ DirectionalDragArea::DirectionalDragArea(QQuickItem *parent)
12677 , m_timeSource(new RealTimeSource)
12778 , m_activeTouches(m_timeSource)
12879{
129− setRecognitionTimer(new RecognitionTimer(this));
80+ setRecognitionTimer(new Timer(this));
13081 m_recognitionTimer->setInterval(60);
82+ m_recognitionTimer->setSingleShot(false);
13183
13284 m_velocityCalculator = new AxisVelocityCalculator(this);
13385
134− connect(this, &QQuickItem::enabledChanged, this, &DirectionalDragArea::onEnabledChanged);
86+ connect(this, &QQuickItem::enabledChanged, this, &DirectionalDragArea::giveUpIfDisabledOrInvisible);
87+ connect(this, &QQuickItem::visibleChanged, this, &DirectionalDragArea::giveUpIfDisabledOrInvisible);
13588}
13689
13790Direction::Type DirectionalDragArea::direction() const
@@ -214,6 +167,7 @@ void DirectionalDragArea::setRecognitionTimer(UbuntuGestures::AbstractTimer *tim
214167{
215168 int interval = 0;
216169 bool timerWasRunning = false;
170+ bool wasSingleShot = false;
217171
218172 // can be null when called from the constructor
219173 if (m_recognitionTimer) {
@@ -226,6 +180,7 @@ void DirectionalDragArea::setRecognitionTimer(UbuntuGestures::AbstractTimer *tim
226180
227181 m_recognitionTimer = timer;
228182 timer->setInterval(interval);
183+ timer->setSingleShot(wasSingleShot);
229184 connect(timer, &UbuntuGestures::AbstractTimer::timeout,
230185 this, &DirectionalDragArea::checkSpeed);
231186 if (timerWasRunning) {
@@ -280,8 +235,144 @@ qreal DirectionalDragArea::touchSceneY() const
280235 return m_previousScenePos.y();
281236}
282237
238+bool DirectionalDragArea::event(QEvent *event)
239+{
240+ if (event->type() == TouchOwnershipEvent::touchOwnershipEventType()) {
241+ touchOwnershipEvent(static_cast<TouchOwnershipEvent *>(event));
242+ return true;
243+ } else if (event->type() == UnownedTouchEvent::unownedTouchEventType()) {
244+ unownedTouchEvent(static_cast<UnownedTouchEvent *>(event));
245+ return true;
246+ } else {
247+ return QQuickItem::event(event);
248+ }
249+}
250+
251+void DirectionalDragArea::touchOwnershipEvent(TouchOwnershipEvent *event)
252+{
253+ if (event->gained()) {
254+ QVector<int> ids;
255+ ids.append(event->touchId());
256+ DDA_DEBUG("grabbing touch");
257+ grabTouchPoints(ids);
258+
259+ // Work around for Qt bug. If we grab a touch that is being used for mouse pointer
260+ // emulation it will cause the emulation logic to go nuts.
261+ // Thus we have to also grab the mouse in this case.
262+ // TODO: Report bug to Qt
263+ if (window()) {
264+ QQuickWindowPrivate *windowPrivate = QQuickWindowPrivate::get(window());
265+ if (windowPrivate->touchMouseId == event->touchId() && window()->mouseGrabberItem()) {
266+ DDA_DEBUG("removing mouse grabber");
267+ window()->mouseGrabberItem()->ungrabMouse();
268+ }
269+ }
270+ } else {
271+ // We still wanna know when it ends for keeping the composition time window up-to-date
272+ TouchRegistry::instance()->addTouchWatcher(m_touchId, this);
273+
274+ setStatus(WaitingForTouch);
275+ }
276+}
277+
278+void DirectionalDragArea::unownedTouchEvent(UnownedTouchEvent *unownedTouchEvent)
279+{
280+ QTouchEvent *event = unownedTouchEvent->touchEvent();
281+
282+ Q_ASSERT(!event->touchPointStates().testFlag(Qt::TouchPointPressed));
283+
284+ #if DIRECTIONALDRAGAREA_DEBUG
285+ // TODO Consider using qCDebug() when available (Qt 5.2)
286+ qDebug() << "[DDA] Unowned" << m_timeSource->msecsSinceReference()
287+ << qPrintable(touchEventToString(event));
288+ #endif
289+
290+ switch (m_status) {
291+ case WaitingForTouch:
292+ // do nothing
293+ break;
294+ case Undecided:
295+ Q_ASSERT(isEnabled() && isVisible());
296+ unownedTouchEvent_undecided(unownedTouchEvent);
297+ break;
298+ default: // Recognized:
299+ // do nothing
300+ break;
301+ }
302+
303+ m_activeTouches.update(event);
304+}
305+
306+void DirectionalDragArea::unownedTouchEvent_undecided(UnownedTouchEvent *unownedTouchEvent)
307+{
308+ const QTouchEvent::TouchPoint *touchPoint = fetchTargetTouchPoint(unownedTouchEvent->touchEvent());
309+ if (!touchPoint) {
310+ qCritical() << "DirectionalDragArea[status=Undecided]: touch " << m_touchId
311+ << "missing from UnownedTouchEvent without first reaching state Qt::TouchPointReleased. "
312+ "Considering it as released.";
313+
314+ TouchRegistry::instance()->removeCandidateOwnerForTouch(m_touchId, this);
315+ setStatus(WaitingForTouch);
316+ return;
317+ }
318+
319+ const QPointF &touchScenePos = touchPoint->scenePos();
320+
321+ if (touchPoint->state() == Qt::TouchPointReleased) {
322+ // touch has ended before recognition concluded
323+ DDA_DEBUG("Touch has ended before recognition concluded");
324+ TouchRegistry::instance()->removeCandidateOwnerForTouch(m_touchId, this);
325+ emitSignalIfTapped();
326+ setStatus(WaitingForTouch);
327+ return;
328+ }
329+
330+ m_previousDampedScenePos.setX(m_dampedScenePos.x());
331+ m_previousDampedScenePos.setY(m_dampedScenePos.y());
332+ m_dampedScenePos.update(touchScenePos);
333+ updateVelocityCalculator(touchScenePos);
334+
335+ if (!pointInsideAllowedArea()) {
336+ DDA_DEBUG("Rejecting gesture because touch point is outside allowed area.");
337+ TouchRegistry::instance()->removeCandidateOwnerForTouch(m_touchId, this);
338+ // We still wanna know when it ends for keeping the composition time window up-to-date
339+ TouchRegistry::instance()->addTouchWatcher(m_touchId, this);
340+ setStatus(WaitingForTouch);
341+ return;
342+ }
343+
344+ if (!movingInRightDirection()) {
345+ DDA_DEBUG("Rejecting gesture because touch point is moving in the wrong direction.");
346+ TouchRegistry::instance()->removeCandidateOwnerForTouch(m_touchId, this);
347+ // We still wanna know when it ends for keeping the composition time window up-to-date
348+ TouchRegistry::instance()->addTouchWatcher(m_touchId, this);
349+ setStatus(WaitingForTouch);
350+ return;
351+ }
352+
353+ setPreviousPos(touchPoint->pos());
354+ setPreviousScenePos(touchScenePos);
355+
356+ if (isWithinTouchCompositionWindow()) {
357+ // There's still time for some new touch to appear and ruin our party as it would be combined
358+ // with our m_touchId one and therefore deny the possibility of a single-finger gesture.
359+ DDA_DEBUG("Sill within composition window. Let's wait more.");
360+ return;
361+ }
362+
363+ if (movedFarEnough(touchScenePos)) {
364+ TouchRegistry::instance()->requestTouchOwnership(m_touchId, this);
365+ setStatus(Recognized);
366+ } else {
367+ DDA_DEBUG("Didn't move far enough yet. Let's wait more.");
368+ }
369+}
370+
283371void DirectionalDragArea::touchEvent(QTouchEvent *event)
284372{
373+ // TODO: Consider when more than one touch starts in the same event (although it's not possible
374+ // with Mir's android-input). Have to track them all. Consider it a plus/bonus.
375+
285376 #if DIRECTIONALDRAGAREA_DEBUG
286377 // TODO Consider using qCDebug() when available (Qt 5.2)
287378 qDebug() << "[DDA]" << m_timeSource->msecsSinceReference()
@@ -310,29 +401,34 @@ void DirectionalDragArea::touchEvent(QTouchEvent *event)
310401
311402void DirectionalDragArea::touchEvent_absent(QTouchEvent *event)
312403{
404+ // TODO: accept/reject is for the whole event, not per touch id. See how that affects us.
405+
313406 if (!event->touchPointStates().testFlag(Qt::TouchPointPressed)) {
314407 // Nothing to see here. No touch starting in this event.
315408 return;
316409 }
317410
411+ // to be proven wrong, if that's the case
412+ bool allGood = true;
413+
318414 if (isWithinTouchCompositionWindow()) {
319415 // too close to the last touch start. So we consider them as starting roughly at the same time.
320416 // Can't be a single-touch gesture.
321417 #if DIRECTIONALDRAGAREA_DEBUG
322418 qDebug("[DDA] A new touch point came in but we're still within time composition window. Ignoring it.");
323419 #endif
324− return;
420+ allGood = false;
325421 }
326422
327423 const QList<QTouchEvent::TouchPoint> &touchPoints = event->touchPoints();
328424
329425 const QTouchEvent::TouchPoint *newTouchPoint = nullptr;
330− for (int i = 0; i < touchPoints.count(); ++i) {
426+ for (int i = 0; i < touchPoints.count() && allGood; ++i) {
331427 const QTouchEvent::TouchPoint &touchPoint = touchPoints.at(i);
332428 if (touchPoint.state() == Qt::TouchPointPressed) {
333429 if (newTouchPoint) {
334430 // more than one touch starting in this QTouchEvent. Can't be a single-touch gesture
335− return;
431+ allGood = false;
336432 } else {
337433 // that's our candidate
338434 m_touchId = touchPoint.id();
@@ -341,85 +437,61 @@ void DirectionalDragArea::touchEvent_absent(QTouchEvent *event)
341437 }
342438 }
343439
344− Q_ASSERT(newTouchPoint);
440+ if (allGood) {
441+ Q_ASSERT(newTouchPoint);
345442
346− // If we have made this far, we are good to go to the next status.
347−
348− m_startPos = newTouchPoint->pos();
349− m_startScenePos = newTouchPoint->scenePos();
350− m_touchId = newTouchPoint->id();
351− m_dampedScenePos.reset(m_startScenePos);
352− m_velocityCalculator->setTrackedPosition(0.);
353− m_velocityCalculator->reset();
354− m_numSamplesOnLastSpeedCheck = 0;
355− m_silenceTime = 0;
356− setPreviousPos(m_startPos);
357− setPreviousScenePos(m_startScenePos);
358− updateSceneDirectionVector();
359−
360− setStatus(Undecided);
443+ m_startPos = newTouchPoint->pos();
444+ m_startScenePos = newTouchPoint->scenePos();
445+ m_touchId = newTouchPoint->id();
446+ m_dampedScenePos.reset(m_startScenePos);
447+ m_velocityCalculator->setTrackedPosition(0.);
448+ m_velocityCalculator->reset();
449+ m_numSamplesOnLastSpeedCheck = 0;
450+ m_silenceTime = 0;
451+ setPreviousPos(m_startPos);
452+ setPreviousScenePos(m_startScenePos);
453+ updateSceneDirectionVector();
454+
455+ if (recognitionIsDisabled()) {
456+ // Behave like a dumb TouchArea
457+ TouchRegistry::instance()->requestTouchOwnership(m_touchId, this);
458+ setStatus(Recognized);
459+ event->accept();
460+ } else {
461+ // just monitor the touch points for now.
462+ TouchRegistry::instance()->addCandidateOwnerForTouch(m_touchId, this);
463+
464+ setStatus(Undecided);
465+ // Let the item below have it. We will monitor it and grab it later if a gesture
466+ // gets recognized.
467+ event->ignore();
468+ }
469+ } else {
470+ watchPressedTouchPoints(touchPoints);
471+ event->ignore();
472+ }
361473}
362474
363475void DirectionalDragArea::touchEvent_undecided(QTouchEvent *event)
364476{
365− const QTouchEvent::TouchPoint *touchPoint = fetchTargetTouchPoint(event);
477+ Q_ASSERT(event->type() == QEvent::TouchBegin);
478+ Q_ASSERT(fetchTargetTouchPoint(event) == nullptr);
366479
367− if (!touchPoint) {
368− qCritical() << "DirectionalDragArea[status=Undecided]: touch " << m_touchId
369− << "missing from QTouchEvent without first reaching state Qt::TouchPointReleased. "
370− "Considering it as released.";
371− setStatus(WaitingForTouch);
372− return;
373− }
374−
375− const QPointF &touchScenePos = touchPoint->scenePos();
376−
377− if (touchPoint->state() == Qt::TouchPointReleased) {
378− // touch has ended before recognition concluded
379− DDA_DEBUG("Touch has ended before recognition concluded");
380− setStatus(WaitingForTouch);
381− Q_EMIT tapped();
382− return;
383− }
480+ // We're not interested in new touch points. We already have our candidate (m_touchId).
481+ // But we do want to know when those new touches end for keeping the composition time
482+ // window up-to-date
483+ event->ignore();
484+ watchPressedTouchPoints(event->touchPoints());
384485
385486 if (event->touchPointStates().testFlag(Qt::TouchPointPressed) && isWithinTouchCompositionWindow()) {
386487 // multi-finger drags are not accepted
387488 DDA_DEBUG("Multi-finger drags are not accepted");
388− setStatus(WaitingForTouch);
389− return;
390− }
391489
392− m_previousDampedScenePos.setX(m_dampedScenePos.x());
393− m_previousDampedScenePos.setY(m_dampedScenePos.y());
394− m_dampedScenePos.update(touchScenePos);
395− updateVelocityCalculator(touchScenePos);
396−
397− if (!pointInsideAllowedArea()) {
398− DDA_DEBUG("Rejecting gesture because touch point is outside allowed area.");
399− setStatus(WaitingForTouch);
400− return;
401− }
490+ TouchRegistry::instance()->removeCandidateOwnerForTouch(m_touchId, this);
491+ // We still wanna know when it ends for keeping the composition time window up-to-date
492+ TouchRegistry::instance()->addTouchWatcher(m_touchId, this);
402493
403− if (!movingInRightDirection()) {
404− DDA_DEBUG("Rejecting gesture becauuse touch point is moving in the wrong direction.");
405494 setStatus(WaitingForTouch);
406− return;
407− }
408−
409− setPreviousPos(touchPoint->pos());
410− setPreviousScenePos(touchScenePos);
411−
412− if (isWithinTouchCompositionWindow()) {
413− // There's still time for some new touch to appear and ruin our party as it would be combined
414− // with our m_touchId one and therefore deny the possibility of a single-finger gesture.
415− DDA_DEBUG("Sill within composition window. Let's wait more.");
416− return;
417− }
418−
419− if (movedFarEnough(touchScenePos)) {
420− setStatus(Recognized);
421− } else {
422− DDA_DEBUG("Didn't move far enough yet. Let's wait more.");
423495 }
424496}
425497
@@ -437,11 +509,35 @@ void DirectionalDragArea::touchEvent_recognized(QTouchEvent *event)
437509 setPreviousScenePos(touchPoint->scenePos());
438510
439511 if (touchPoint->state() == Qt::TouchPointReleased) {
512+ emitSignalIfTapped();
440513 setStatus(WaitingForTouch);
441514 }
442515 }
443516}
444517
518+void DirectionalDragArea::watchPressedTouchPoints(const QList<QTouchEvent::TouchPoint> &touchPoints)
519+{
520+ for (int i = 0; i < touchPoints.count(); ++i) {
521+ const QTouchEvent::TouchPoint &touchPoint = touchPoints.at(i);
522+ if (touchPoint.state() == Qt::TouchPointPressed) {
523+ TouchRegistry::instance()->addTouchWatcher(touchPoint.id(), this);
524+ }
525+ }
526+}
527+
528+bool DirectionalDragArea::recognitionIsDisabled() const
529+{
530+ return distanceThreshold() <= 0 && compositionTime() <= 0;
531+}
532+
533+void DirectionalDragArea::emitSignalIfTapped()
534+{
535+ qint64 touchDuration = m_timeSource->msecsSinceReference() - m_activeTouches.touchStartTime(m_touchId);
536+ if (touchDuration <= maxTapDuration()) {
537+ Q_EMIT tapped();
538+ }
539+}
540+
445541const QTouchEvent::TouchPoint *DirectionalDragArea::fetchTargetTouchPoint(QTouchEvent *event)
446542{
447543 const QList<QTouchEvent::TouchPoint> &touchPoints = event->touchPoints();
@@ -509,12 +605,16 @@ bool DirectionalDragArea::movedFarEnough(const QPointF &point) const
509605
510606void DirectionalDragArea::checkSpeed()
511607{
608+ Q_ASSERT(m_status == Undecided);
609+
512610 if (m_velocityCalculator->numSamples() >= AxisVelocityCalculator::MIN_SAMPLES_NEEDED) {
513611 qreal speed = qFabs(m_velocityCalculator->calculate());
514612 qreal minSpeedMsecs = m_minSpeed / 1000.0;
515613
516614 if (speed < minSpeedMsecs) {
517615 DDA_DEBUG("Rejecting gesture because it's below minimum speed.");
616+ TouchRegistry::instance()->removeCandidateOwnerForTouch(m_touchId, this);
617+ TouchRegistry::instance()->addTouchWatcher(m_touchId, this);
518618 setStatus(WaitingForTouch);
519619 }
520620 }
@@ -523,7 +623,9 @@ void DirectionalDragArea::checkSpeed()
523623 m_silenceTime += m_recognitionTimer->interval();
524624
525625 if (m_silenceTime > m_maxSilenceTime) {
526− DDA_DEBUG("Rejecting gesture because it's silence time has been exceeded.");
626+ DDA_DEBUG("Rejecting gesture because its silence time has been exceeded.");
627+ TouchRegistry::instance()->removeCandidateOwnerForTouch(m_touchId, this);
628+ TouchRegistry::instance()->addTouchWatcher(m_touchId, this);
527629 setStatus(WaitingForTouch);
528630 }
529631 } else {
@@ -532,10 +634,19 @@ void DirectionalDragArea::checkSpeed()
532634 m_numSamplesOnLastSpeedCheck = m_velocityCalculator->numSamples();
533635}
534636
535−void DirectionalDragArea::onEnabledChanged()
637+void DirectionalDragArea::giveUpIfDisabledOrInvisible()
536638{
537− if (!isEnabled() && m_status != WaitingForTouch) {
538− setStatus(WaitingForTouch);
639+ if (!isEnabled() || !isVisible()) {
640+ if (m_status == Undecided) {
641+ TouchRegistry::instance()->removeCandidateOwnerForTouch(m_touchId, this);
642+ // We still wanna know when it ends for keeping the composition time window up-to-date
643+ TouchRegistry::instance()->addTouchWatcher(m_touchId, this);
644+ }
645+
646+ if (m_status != WaitingForTouch) {
647+ DDA_DEBUG("Resetting status because got disabled or made invisible");
648+ setStatus(WaitingForTouch);
649+ }
539650 }
540651}
541652
@@ -631,7 +742,9 @@ void DirectionalDragArea::updateVelocityCalculator(const QPointF &scenePos)
631742
632743bool DirectionalDragArea::isWithinTouchCompositionWindow()
633744{
634− return !m_activeTouches.isEmpty() &&
745+ return
746+ compositionTime() > 0 &&
747+ !m_activeTouches.isEmpty() &&
635748 m_timeSource->msecsSinceReference() <=
636749 m_activeTouches.mostRecentStartTime() + (qint64)compositionTime();
637750}
@@ -639,18 +752,17 @@ bool DirectionalDragArea::isWithinTouchCompositionWindow()
639752//************************** ActiveTouchesInfo **************************
640753
641754DirectionalDragArea::ActiveTouchesInfo::ActiveTouchesInfo(const SharedTimeSource &timeSource)
642− : m_timeSource(timeSource), m_lastUsedIndex(-1)
755+ : m_timeSource(timeSource)
643756{
644− // Estimate of the maximum number of active touches we might reach.
645− // Not a problem if it ends up being an underestimate as this is just
646− // an optimization.
647− m_vector.resize(3);
648757}
649758
650759void DirectionalDragArea::ActiveTouchesInfo::update(QTouchEvent *event)
651760{
652761 if (!(event->touchPointStates() & (Qt::TouchPointPressed | Qt::TouchPointReleased))) {
653762 // nothing to update
763+ #if ACTIVETOUCHESINFO_DEBUG
764+ qDebug("[DDA::ActiveTouchesInfo] Nothing to Update");
765+ #endif
654766 return;
655767 }
656768
@@ -658,74 +770,88 @@ void DirectionalDragArea::ActiveTouchesInfo::update(QTouchEvent *event)
658770 for (int i = 0; i < touchPoints.count(); ++i) {
659771 const QTouchEvent::TouchPoint &touchPoint = touchPoints.at(i);
660772 if (touchPoint.state() == Qt::TouchPointPressed) {
661− addTouchPoint(touchPoint);
773+ addTouchPoint(touchPoint.id());
662774 } else if (touchPoint.state() == Qt::TouchPointReleased) {
663− removeTouchPoint(touchPoint);
775+ removeTouchPoint(touchPoint.id());
664776 }
665777 }
666778}
667779
668−void DirectionalDragArea::ActiveTouchesInfo::addTouchPoint(const QTouchEvent::TouchPoint &touchPoint)
780+#if ACTIVETOUCHESINFO_DEBUG
781+QString DirectionalDragArea::ActiveTouchesInfo::toString()
669782{
670− ActiveTouchInfo &activeTouchInfo = getEmptySlot();
671− activeTouchInfo.id = touchPoint.id();
672− activeTouchInfo.startTime = m_timeSource->msecsSinceReference();
783+ QString string = "(";
784+
785+ {
786+ QTextStream stream(&string);
787+ m_touchInfoPool.forEach([&](Pool<ActiveTouchInfo>::Iterator &touchInfo) {
788+ stream << "(id=" << touchInfo->id << ",startTime=" << touchInfo->startTime << ")";
789+ return true;
790+ });
791+ }
792+
793+ string.append(")");
794+
795+ return string;
673796}
797+#endif // ACTIVETOUCHESINFO_DEBUG
674798
675−void DirectionalDragArea::ActiveTouchesInfo::removeTouchPoint(const QTouchEvent::TouchPoint &touchPoint)
799+void DirectionalDragArea::ActiveTouchesInfo::addTouchPoint(int touchId)
676800{
677− for (int i = 0; i <= m_lastUsedIndex; ++i) {
678− if (touchPoint.id() == m_vector.at(i).id) {
679− freeSlot(i);
680− return;
681− }
682− }
683− Q_ASSERT(false); // shouldn't reach this point
801+ ActiveTouchInfo &activeTouchInfo = m_touchInfoPool.getEmptySlot();
802+ activeTouchInfo.id = touchId;
803+ activeTouchInfo.startTime = m_timeSource->msecsSinceReference();
804+
805+ #if ACTIVETOUCHESINFO_DEBUG
806+ qDebug() << "[DDA::ActiveTouchesInfo]" << qPrintable(toString());
807+ #endif
684808}
685809
686−DirectionalDragArea::ActiveTouchInfo &DirectionalDragArea::ActiveTouchesInfo::getEmptySlot()
810+qint64 DirectionalDragArea::ActiveTouchesInfo::touchStartTime(int touchId)
687811{
688− Q_ASSERT(m_lastUsedIndex < m_vector.size());
812+ qint64 result = -1;
689813
690− // Look for an in-between vacancy first
691− for (int i = 0; i < m_lastUsedIndex; ++i) {
692− ActiveTouchInfo &activeTouchInfo = m_vector[i];
693− if (!activeTouchInfo.isValid()) {
694− return activeTouchInfo;
814+ m_touchInfoPool.forEach([&](Pool<ActiveTouchInfo>::Iterator &touchInfo) {
815+ if (touchId == touchInfo->id) {
816+ result = touchInfo->startTime;
817+ return false;
818+ } else {
819+ return true;
695820 }
696− }
697−
698− ++m_lastUsedIndex;
699− if (m_lastUsedIndex >= m_vector.size()) {
700− m_vector.resize(m_lastUsedIndex + 1);
701− }
821+ });
702822
703− return m_vector[m_lastUsedIndex];
823+ Q_ASSERT(result != -1);
824+ return result;
704825}
705826
706−void DirectionalDragArea::ActiveTouchesInfo::freeSlot(int index)
827+void DirectionalDragArea::ActiveTouchesInfo::removeTouchPoint(int touchId)
707828{
708− m_vector[index].reset();
709− if (index == m_lastUsedIndex) {
710− do {
711− --m_lastUsedIndex;
712− } while (m_lastUsedIndex >= 0 && !m_vector.at(m_lastUsedIndex).isValid());
713− }
829+ m_touchInfoPool.forEach([&](Pool<ActiveTouchInfo>::Iterator &touchInfo) {
830+ if (touchId == touchInfo->id) {
831+ m_touchInfoPool.freeSlot(touchInfo);
832+ return false;
833+ } else {
834+ return true;
835+ }
836+ });
837+
838+ #if ACTIVETOUCHESINFO_DEBUG
839+ qDebug() << "[DDA::ActiveTouchesInfo]" << qPrintable(toString());
840+ #endif
714841}
715842
716843qint64 DirectionalDragArea::ActiveTouchesInfo::mostRecentStartTime()
717844{
718− Q_ASSERT(m_lastUsedIndex >= 0);
845+ Q_ASSERT(!m_touchInfoPool.isEmpty());
846+
847+ qint64 highestStartTime = -1;
719848
720− qint64 highestStartTime = m_vector.at(0).startTime;
721− int i = 1;
722− do {
723− const ActiveTouchInfo &activeTouchInfo = m_vector.at(i);
724− if (activeTouchInfo.isValid() && activeTouchInfo.startTime > highestStartTime) {
725− highestStartTime = activeTouchInfo.startTime;
849+ m_touchInfoPool.forEach([&](Pool<ActiveTouchInfo>::Iterator &activeTouchInfo) {
850+ if (activeTouchInfo->startTime > highestStartTime) {
851+ highestStartTime = activeTouchInfo->startTime;
726852 }
727− ++i;
728− } while (i < m_lastUsedIndex);
853+ return true;
854+ });
729855
730856 return highestStartTime;
731857}
plugins/Ubuntu/Gestures/DirectionalDragArea.h+37−29
@@ -1,5 +1,5 @@
11/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013,2014 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,27 +19,16 @@
1919
2020#include <QtQuick/QQuickItem>
2121#include "AxisVelocityCalculator.h"
22−#include "UbuntuGesturesGlobal.h"
22+#include "UbuntuGesturesQmlGlobal.h"
2323#include "Damper.h"
2424#include "Direction.h"
2525
26−namespace UbuntuGestures {
27−/* Defines an interface for a Timer. */
28−class UBUNTUGESTURES_EXPORT AbstractTimer : public QObject {
29− Q_OBJECT
30−public:
31− AbstractTimer(QObject *parent) : QObject(parent), m_isRunning(false) {}
32− virtual int interval() const = 0;
33− virtual void setInterval(int msecs) = 0;
34− virtual void start() { m_isRunning = true; };
35− virtual void stop() { m_isRunning = false; }
36− bool isRunning() const { return m_isRunning; }
37−Q_SIGNALS:
38− void timeout();
39−private:
40− bool m_isRunning;
41−};
42−}
26+// lib UbuntuGestures
27+#include <Pool.h>
28+#include <Timer.h>
29+
30+class TouchOwnershipEvent;
31+class UnownedTouchEvent;
4332
4433/*
4534 An area that detects axis-aligned single-finger drag gestures
@@ -50,7 +39,7 @@ private:
5039
5140 See doc/DirectionalDragArea.svg
5241 */
53−class UBUNTUGESTURES_EXPORT DirectionalDragArea : public QQuickItem {
42+class UBUNTUGESTURESQML_EXPORT DirectionalDragArea : public QQuickItem {
5443 Q_OBJECT
5544
5645 // The direction in which the gesture should move in order to be recognized.
@@ -196,6 +185,12 @@ public:
196185 // Useful for testing, where a fake time source can be supplied
197186 void setTimeSource(const UbuntuGestures::SharedTimeSource &timeSource);
198187
188+ bool event(QEvent *e) override;
189+
190+ // Maximum time, in milliseconds, between a press and a release, for a touch
191+ // sequence to be considered a tap.
192+ int maxTapDuration() const { return 300; }
193+
199194Q_SIGNALS:
200195 void directionChanged(Direction::Type direction);
201196 void statusChanged(Status value);
@@ -212,6 +207,10 @@ Q_SIGNALS:
212207 void touchYChanged(qreal value);
213208 void touchSceneXChanged(qreal value);
214209 void touchSceneYChanged(qreal value);
210+
211+ // TODO: I would rather not have such signal as it has nothing to do with drag gestures.
212+ // Remove when no longer used or move its implementation to the QML code that uses it
213+ // See maxTapDuration()
215214 void tapped();
216215
217216protected:
@@ -219,7 +218,7 @@ protected:
219218
220219private Q_SLOTS:
221220 void checkSpeed();
222− void onEnabledChanged();
221+ void giveUpIfDisabledOrInvisible();
223222
224223private:
225224 void touchEvent_absent(QTouchEvent *event);
@@ -238,6 +237,12 @@ private:
238237 // returns the scalar projection between the given vector (in scene coordinates)
239238 // and m_sceneDirectionVector
240239 qreal projectOntoDirectionVector(const QPointF &sceneVector) const;
240+ void touchOwnershipEvent(TouchOwnershipEvent *event);
241+ void unownedTouchEvent(UnownedTouchEvent *event);
242+ void unownedTouchEvent_undecided(UnownedTouchEvent *unownedTouchEvent);
243+ void watchPressedTouchPoints(const QList<QTouchEvent::TouchPoint> &touchPoints);
244+ bool recognitionIsDisabled() const;
245+ void emitSignalIfTapped();
241246
242247 Status m_status;
243248
@@ -283,18 +288,21 @@ private:
283288 public:
284289 ActiveTouchesInfo(const UbuntuGestures::SharedTimeSource &timeSource);
285290 void update(QTouchEvent *event);
286− ActiveTouchInfo &touchInfo(int id);
291+ qint64 touchStartTime(int id);
292+ bool isEmpty() const { return m_touchInfoPool.isEmpty(); }
287293 qint64 mostRecentStartTime();
288294 UbuntuGestures::SharedTimeSource m_timeSource;
289− bool isEmpty() const { return m_lastUsedIndex == -1; }
290295 private:
291− void addTouchPoint(const QTouchEvent::TouchPoint &touchPoint);
292− ActiveTouchInfo &getEmptySlot();
293− void freeSlot(int index);
294− void removeTouchPoint(const QTouchEvent::TouchPoint &touchPoint);
295− QVector<struct ActiveTouchInfo> m_vector;
296− int m_lastUsedIndex;
296+ void addTouchPoint(int touchId);
297+ void removeTouchPoint(int touchId);
298+ #if ACTIVETOUCHESINFO_DEBUG
299+ QString toString();
300+ #endif
301+
302+ Pool<ActiveTouchInfo> m_touchInfoPool;
297303 } m_activeTouches;
304+
305+ friend class tst_DirectionalDragArea;
298306};
299307
300308#endif // DIRECTIONAL_DRAG_AREA_H
plugins/Ubuntu/Gestures/TimeSource.h+2−2
@@ -21,14 +21,14 @@
2121#ifndef UBUNTUGESTURES_TIMESOURCE_H
2222#define UBUNTUGESTURES_TIMESOURCE_H
2323
24−#include "UbuntuGesturesGlobal.h"
24+#include "UbuntuGesturesQmlGlobal.h"
2525#include <QSharedPointer>
2626
2727namespace UbuntuGestures {
2828/*
2929 Interface for a time source.
3030 */
31−class UBUNTUGESTURES_EXPORT TimeSource {
31+class UBUNTUGESTURESQML_EXPORT TimeSource {
3232public:
3333 virtual ~TimeSource() {}
3434 /* Returns the current time in milliseconds since some reference time in the past. */
plugins/Ubuntu/Gestures/TouchGate.cppnew file+347
@@ -0,0 +1,347 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "TouchGate.h"
18+
19+#include <QCoreApplication>
20+#include <QDebug>
21+
22+#include <TouchOwnershipEvent.h>
23+#include <TouchRegistry.h>
24+
25+#pragma GCC diagnostic push
26+#pragma GCC diagnostic ignored "-pedantic"
27+#include <private/qquickitem_p.h>
28+#pragma GCC diagnostic pop
29+
30+#if TOUCHGATE_DEBUG
31+#include <DebugHelpers.h>
32+#endif
33+
34+
35+bool TouchGate::event(QEvent *e)
36+{
37+ if (e->type() == TouchOwnershipEvent::touchOwnershipEventType()) {
38+ touchOwnershipEvent(static_cast<TouchOwnershipEvent *>(e));
39+ return true;
40+ } else {
41+ return QQuickItem::event(e);
42+ }
43+}
44+
45+void TouchGate::touchEvent(QTouchEvent *event)
46+{
47+ #if TOUCHGATE_DEBUG
48+ qDebug() << "[TouchGate] got touch event" << qPrintable(touchEventToString(event));
49+ #endif
50+ event->accept();
51+
52+ const QList<QTouchEvent::TouchPoint> &touchPoints = event->touchPoints();
53+ bool goodToGo = true;
54+ for (int i = 0; i < touchPoints.count(); ++i) {
55+ const QTouchEvent::TouchPoint &touchPoint = touchPoints[i];
56+
57+ if (touchPoint.state() == Qt::TouchPointPressed) {
58+ Q_ASSERT(!m_touchInfoMap.contains(touchPoint.id()));
59+ m_touchInfoMap[touchPoint.id()].ownership = OwnershipRequested;
60+ m_touchInfoMap[touchPoint.id()].ended = false;
61+ TouchRegistry::instance()->requestTouchOwnership(touchPoint.id(), this);
62+ }
63+
64+ goodToGo &= m_touchInfoMap.contains(touchPoint.id())
65+ && m_touchInfoMap[touchPoint.id()].ownership == OwnershipGranted;
66+
67+ if (touchPoint.state() == Qt::TouchPointReleased && m_touchInfoMap.contains(touchPoint.id())) {
68+ m_touchInfoMap[touchPoint.id()].ended = true;
69+ }
70+
71+ }
72+
73+ if (goodToGo) {
74+ if (m_storedEvents.isEmpty()) {
75+ // let it pass through
76+ dispatchTouchEventToTarget(event);
77+ } else {
78+ // Retain the event to ensure TouchGate dispatches them in order.
79+ // Otherwise the current event would come before the stored ones, which are older.
80+ #if TOUCHGATE_DEBUG
81+ qDebug("[TouchGate] Storing event because thouches %s are still pending ownership.",
82+ qPrintable(oldestPendingTouchIdsString()));
83+ #endif
84+ storeTouchEvent(event);
85+ }
86+ } else {
87+ // Retain events that have unowned touches
88+ storeTouchEvent(event);
89+ }
90+}
91+
92+void TouchGate::touchOwnershipEvent(TouchOwnershipEvent *event)
93+{
94+ // TODO: Optimization: batch those actions as TouchOwnershipEvents
95+ // might come one right after the other.
96+
97+ Q_ASSERT(m_touchInfoMap.contains(event->touchId()));
98+
99+ TouchInfo &touchInfo = m_touchInfoMap[event->touchId()];
100+
101+ if (event->gained()) {
102+ #if TOUCHGATE_DEBUG
103+ qDebug() << "[TouchGate] Got ownership of touch " << event->touchId();
104+ #endif
105+ touchInfo.ownership = OwnershipGranted;
106+ } else {
107+ #if TOUCHGATE_DEBUG
108+ qDebug() << "[TouchGate] Lost ownership of touch " << event->touchId();
109+ #endif
110+ m_touchInfoMap.remove(event->touchId());
111+ removeTouchFromStoredEvents(event->touchId());
112+ }
113+
114+ dispatchFullyOwnedEvents();
115+}
116+
117+bool TouchGate::isTouchPointOwned(int touchId) const
118+{
119+ return m_touchInfoMap[touchId].ownership == OwnershipGranted;
120+}
121+
122+void TouchGate::storeTouchEvent(const QTouchEvent *event)
123+{
124+ #if TOUCHGATE_DEBUG
125+ qDebug() << "[TouchGate] Storing" << qPrintable(touchEventToString(event));
126+ #endif
127+
128+ TouchEvent clonedEvent(event);
129+ m_storedEvents.append(std::move(clonedEvent));
130+}
131+
132+void TouchGate::removeTouchFromStoredEvents(int touchId)
133+{
134+ int i = 0;
135+ while (i < m_storedEvents.count()) {
136+ TouchEvent &event = m_storedEvents[i];
137+ bool removed = event.removeTouch(touchId);
138+
139+ if (removed && event.touchPoints.isEmpty()) {
140+ m_storedEvents.removeAt(i);
141+ } else {
142+ ++i;
143+ }
144+ }
145+}
146+
147+void TouchGate::dispatchFullyOwnedEvents()
148+{
149+ while (!m_storedEvents.isEmpty() && eventIsFullyOwned(m_storedEvents.first())) {
150+ TouchEvent event = m_storedEvents.takeFirst();
151+ dispatchTouchEventToTarget(event);
152+ }
153+}
154+
155+#if TOUCHGATE_DEBUG
156+QString TouchGate::oldestPendingTouchIdsString()
157+{
158+ Q_ASSERT(!m_storedEvents.isEmpty());
159+
160+ QString str;
161+
162+ const auto &touchPoints = m_storedEvents.first().touchPoints;
163+ for (int i = 0; i < touchPoints.count(); ++i) {
164+ if (!isTouchPointOwned(touchPoints[i].id())) {
165+ if (!str.isEmpty()) {
166+ str.append(", ");
167+ }
168+ str.append(QString::number(touchPoints[i].id()));
169+ }
170+ }
171+
172+ return str;
173+}
174+#endif
175+
176+bool TouchGate::eventIsFullyOwned(const TouchGate::TouchEvent &event) const
177+{
178+ for (int i = 0; i < event.touchPoints.count(); ++i) {
179+ if (!isTouchPointOwned(event.touchPoints[i].id())) {
180+ return false;
181+ }
182+ }
183+
184+ return true;
185+}
186+
187+void TouchGate::setTargetItem(QQuickItem *item)
188+{
189+ // TODO: changing the target item while dispatch of touch events is taking place will
190+ // create a mess
191+
192+ if (item == m_targetItem.data())
193+ return;
194+
195+ m_targetItem = item;
196+ Q_EMIT targetItemChanged(item);
197+}
198+
199+void TouchGate::dispatchTouchEventToTarget(const TouchEvent &event)
200+{
201+ dispatchTouchEventToTarget(event.eventType,
202+ event.device,
203+ event.modifiers,
204+ event.touchPoints,
205+ event.target,
206+ event.window,
207+ event.timestamp);
208+}
209+
210+void TouchGate::dispatchTouchEventToTarget(QTouchEvent* event)
211+{
212+ dispatchTouchEventToTarget(event->type(),
213+ event->device(),
214+ event->modifiers(),
215+ event->touchPoints(),
216+ event->target(),
217+ event->window(),
218+ event->timestamp());
219+}
220+
221+void TouchGate::dispatchTouchEventToTarget(QEvent::Type eventType,
222+ QTouchDevice *device,
223+ Qt::KeyboardModifiers modifiers,
224+ const QList<QTouchEvent::TouchPoint> &touchPoints,
225+ QObject *target,
226+ QWindow *window,
227+ ulong timestamp)
228+{
229+ removeTouchInfoForEndedTouches(touchPoints);
230+
231+ if (m_targetItem.isNull()) {
232+ qWarning("[TouchGate] Cannot dispatch touch event because target item is null");
233+ return;
234+ }
235+
236+ QQuickItem *targetItem = m_targetItem.data();
237+
238+ if (!targetItem->isEnabled() || !targetItem->isVisible()) {
239+ #if TOUCHGATE_DEBUG
240+ qDebug() << "[TouchGate] Cannot dispatch touch event to" << targetItem
241+ << "because it's disabled or invisible.";
242+ #endif
243+ return;
244+ }
245+
246+ // Map touch points to targetItem coordinates
247+ QList<QTouchEvent::TouchPoint> targetTouchPoints = touchPoints;
248+ transformTouchPoints(targetTouchPoints, QQuickItemPrivate::get(targetItem)->windowToItemTransform());
249+ QTouchEvent *eventForTargetItem = createQTouchEvent(eventType, device, modifiers, targetTouchPoints,
250+ target, window, timestamp);
251+
252+ #if TOUCHGATE_DEBUG
253+ qDebug() << "[TouchGate] dispatching" << qPrintable(touchEventToString(eventForTargetItem))
254+ << "to" << targetItem;
255+ #endif
256+
257+ QCoreApplication::sendEvent(targetItem, eventForTargetItem);
258+
259+ delete eventForTargetItem;
260+}
261+
262+// NB: From QQuickWindow
263+void TouchGate::transformTouchPoints(QList<QTouchEvent::TouchPoint> &touchPoints, const QTransform &transform)
264+{
265+ QMatrix4x4 transformMatrix(transform);
266+ for (int i=0; i<touchPoints.count(); i++) {
267+ QTouchEvent::TouchPoint &touchPoint = touchPoints[i];
268+ touchPoint.setRect(transform.mapRect(touchPoint.sceneRect()));
269+ touchPoint.setStartPos(transform.map(touchPoint.startScenePos()));
270+ touchPoint.setLastPos(transform.map(touchPoint.lastScenePos()));
271+ touchPoint.setVelocity(transformMatrix.mapVector(touchPoint.velocity()).toVector2D());
272+ }
273+}
274+
275+QTouchEvent *TouchGate::createQTouchEvent(QEvent::Type eventType,
276+ QTouchDevice *device,
277+ Qt::KeyboardModifiers modifiers,
278+ const QList<QTouchEvent::TouchPoint> &touchPoints,
279+ QObject *target,
280+ QWindow *window,
281+ ulong timestamp)
282+{
283+ Qt::TouchPointStates eventStates = 0;
284+ for (int i = 0; i < touchPoints.count(); i++)
285+ eventStates |= touchPoints[i].state();
286+ // if all points have the same state, set the event type accordingly
287+ switch (eventStates) {
288+ case Qt::TouchPointPressed:
289+ eventType = QEvent::TouchBegin;
290+ break;
291+ case Qt::TouchPointReleased:
292+ eventType = QEvent::TouchEnd;
293+ break;
294+ default:
295+ eventType = QEvent::TouchUpdate;
296+ break;
297+ }
298+
299+ QTouchEvent *touchEvent = new QTouchEvent(eventType);
300+ touchEvent->setWindow(window);
301+ touchEvent->setTarget(target);
302+ touchEvent->setDevice(device);
303+ touchEvent->setModifiers(modifiers);
304+ touchEvent->setTouchPoints(touchPoints);
305+ touchEvent->setTouchPointStates(eventStates);
306+ touchEvent->setTimestamp(timestamp);
307+ touchEvent->accept();
308+ return touchEvent;
309+}
310+
311+void TouchGate::removeTouchInfoForEndedTouches(const QList<QTouchEvent::TouchPoint> &touchPoints)
312+{
313+ for (int i = 0; i < touchPoints.size(); ++i) {\
314+ const QTouchEvent::TouchPoint &touchPoint = touchPoints.at(i);
315+
316+ if (touchPoint.state() == Qt::TouchPointReleased) {
317+ Q_ASSERT(m_touchInfoMap.contains(touchPoint.id()));
318+ Q_ASSERT(m_touchInfoMap[touchPoint.id()].ended);
319+ Q_ASSERT(m_touchInfoMap[touchPoint.id()].ownership == OwnershipGranted);
320+ m_touchInfoMap.remove(touchPoint.id());
321+ }
322+ }
323+}
324+
325+TouchGate::TouchEvent::TouchEvent(const QTouchEvent *event)
326+ : eventType(event->type())
327+ , device(event->device())
328+ , modifiers(event->modifiers())
329+ , touchPoints(event->touchPoints())
330+ , target(event->target())
331+ , window(event->window())
332+ , timestamp(event->timestamp())
333+{
334+}
335+
336+bool TouchGate::TouchEvent::removeTouch(int touchId)
337+{
338+ bool removed = false;
339+ for (int i = 0; i < touchPoints.count() && !removed; ++i) {
340+ if (touchPoints[i].id() == touchId) {
341+ touchPoints.removeAt(i);
342+ removed = true;
343+ }
344+ }
345+
346+ return removed;
347+}
plugins/Ubuntu/Gestures/TouchGate.hnew file+126
@@ -0,0 +1,126 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef UBUNTU_TOUCH_GATE_H
18+#define UBUNTU_TOUCH_GATE_H
19+
20+#include "UbuntuGesturesQmlGlobal.h"
21+
22+#include <QQuickItem>
23+#include <QList>
24+#include <QPointer>
25+#include <QMap>
26+
27+#define TOUCHGATE_DEBUG 0
28+
29+class TouchOwnershipEvent;
30+
31+/*
32+ Blocks the passage of events until ownership over the related touch points is granted.
33+
34+ Blocked touch events won't be discarded. Instead they will be buffered until ownership
35+ is granted. If ownership is given to another item, the event buffer is cleared.
36+
37+ A TouchGate is useful as a mediator for items that do not understand, or gracefully handle,
38+ touch canceling. By having a TouchGate in front of them you guarantee that only owned touches (i.e.,
39+ touches that won't be canceled later) reaches them.
40+ */
41+class UBUNTUGESTURESQML_EXPORT TouchGate : public QQuickItem {
42+ Q_OBJECT
43+
44+ // Item that's going to receive the touch events that make it through the gate.
45+ Q_PROPERTY(QQuickItem* targetItem READ targetItem WRITE setTargetItem NOTIFY targetItemChanged)
46+
47+public:
48+ bool event(QEvent *e) override;
49+
50+ QQuickItem *targetItem() { return m_targetItem; }
51+ void setTargetItem(QQuickItem *item);
52+
53+Q_SIGNALS:
54+ void targetItemChanged(QQuickItem *item);
55+
56+protected:
57+ void touchEvent(QTouchEvent *event) override;
58+private:
59+ class TouchEvent {
60+ public:
61+ TouchEvent(const QTouchEvent *event);
62+
63+ bool removeTouch(int touchId);
64+
65+ QEvent::Type eventType;
66+ QTouchDevice *device;
67+ Qt::KeyboardModifiers modifiers;
68+ QList<QTouchEvent::TouchPoint> touchPoints;
69+ QObject *target;
70+ QWindow *window;
71+ ulong timestamp;
72+ };
73+
74+ void touchOwnershipEvent(TouchOwnershipEvent *event);
75+ bool isTouchPointOwned(int touchId) const;
76+ void storeTouchEvent(const QTouchEvent *event);
77+ void removeTouchFromStoredEvents(int touchId);
78+ void dispatchFullyOwnedEvents();
79+ bool eventIsFullyOwned(const TouchEvent &event) const;
80+
81+ void dispatchTouchEventToTarget(const TouchEvent &event);
82+ void dispatchTouchEventToTarget(QTouchEvent* event);
83+ void dispatchTouchEventToTarget(
84+ QEvent::Type eventType,
85+ QTouchDevice *device,
86+ Qt::KeyboardModifiers modifiers,
87+ const QList<QTouchEvent::TouchPoint> &touchPoints,
88+ QObject *target,
89+ QWindow *window,
90+ ulong timestamp);
91+
92+ void transformTouchPoints(QList<QTouchEvent::TouchPoint> &touchPoints, const QTransform &transform);
93+ static QTouchEvent *createQTouchEvent(QEvent::Type eventType,
94+ QTouchDevice *device,
95+ Qt::KeyboardModifiers modifiers,
96+ const QList<QTouchEvent::TouchPoint> &touchPoints,
97+ QObject *target,
98+ QWindow *window,
99+ ulong timestamp);
100+ void removeTouchInfoForEndedTouches(const QList<QTouchEvent::TouchPoint> &touchPoints);
101+
102+ #if TOUCHGATE_DEBUG
103+ QString oldestPendingTouchIdsString();
104+ #endif
105+
106+ QList<TouchEvent> m_storedEvents;
107+
108+ enum {
109+ OwnershipUndefined,
110+ OwnershipRequested,
111+ OwnershipGranted,
112+ };
113+ class TouchInfo {
114+ public:
115+ TouchInfo() {ownership = OwnershipUndefined; ended = false;}
116+ int ownership;
117+ bool ended;
118+ };
119+ QMap<int, TouchInfo> m_touchInfoMap;
120+
121+ QPointer<QQuickItem> m_targetItem;
122+
123+ friend class tst_TouchGate;
124+};
125+
126+#endif // UBUNTU_TOUCH_GATE_H
plugins/Ubuntu/Gestures/UbuntuGesturesQmlGlobal.hnew file+23
@@ -0,0 +1,23 @@
1+/*
2+ * Copyright (C) 2013 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include <QtCore/QtGlobal>
18+
19+#if defined(UBUNTUGESTURESQML_LIBRARY)
20+# define UBUNTUGESTURESQML_EXPORT Q_DECL_EXPORT
21+#else
22+# define UBUNTUGESTURESQML_EXPORT Q_DECL_IMPORT
23+#endif
plugins/Ubuntu/Gestures/plugin.cpp+3−1
@@ -19,6 +19,7 @@
1919#include "Direction.h"
2020#include "DirectionalDragArea.h"
2121#include "PressedOutsideNotifier.h"
22+#include "TouchGate.h"
2223
2324#include <qqml.h>
2425
@@ -28,10 +29,11 @@ static QObject* directionSingleton(QQmlEngine* engine, QJSEngine* scriptEngine)
2829 return new Direction;
2930}
3031
31−void UbuntuGestureQmlPlugin::registerTypes(const char *uri)
32+void UbuntuGesturesQmlPlugin::registerTypes(const char *uri)
3233{
3334 qmlRegisterSingletonType<Direction>(uri, 0, 1, "Direction", directionSingleton);
3435 qmlRegisterType<DirectionalDragArea>(uri, 0, 1, "DirectionalDragArea");
3536 qmlRegisterType<AxisVelocityCalculator>(uri, 0, 1, "AxisVelocityCalculator");
3637 qmlRegisterType<PressedOutsideNotifier>(uri, 0, 1, "PressedOutsideNotifier");
38+ qmlRegisterType<TouchGate>(uri, 0, 1, "TouchGate");
3739}
plugins/Ubuntu/Gestures/plugin.h+1−1
@@ -19,7 +19,7 @@
1919
2020#include <QtQml/QQmlExtensionPlugin>
2121
22−class UbuntuGestureQmlPlugin : public QQmlExtensionPlugin
22+class UbuntuGesturesQmlPlugin : public QQmlExtensionPlugin
2323{
2424 Q_OBJECT
2525 Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
plugins/Ubuntu/Gestures/qmldir+1−1
@@ -1,3 +1,3 @@
11module Ubuntu.Gestures
2−plugin UbuntuGestureQml
2+plugin UbuntuGesturesQml
33typeinfo Gestures.qmltypes
plugins/Ubuntu/Payments/Payments.cpp+21−1
@@ -41,13 +41,23 @@ static void observer(PayPackage* /* package */, const char* itemid, PayPackageIt
4141 case PAY_PACKAGE_ITEM_STATUS_PURCHASED:
4242 Q_EMIT self->purchaseCompleted();
4343 break;
44+ case PAY_PACKAGE_ITEM_STATUS_PURCHASING:
45+ self->setPurchasing(true);
46+ break;
47+ case PAY_PACKAGE_ITEM_STATUS_NOT_PURCHASED:
48+ if (self->purchasing()) {
49+ self->setPurchasing(false);
50+ Q_EMIT self->purchaseCancelled();
51+ }
52+ break;
4453 default:
4554 break;
4655 }
4756}
4857
4958Payments::Payments(QObject *parent)
50− : QObject(parent)
59+ : QObject(parent),
60+ m_purchasing(false)
5161{
5262 m_package = pay_package_new("click-scope");
5363 pay_package_item_observer_install(m_package, observer, this);
@@ -80,6 +90,11 @@ QString Payments::formattedPrice() const
8090 return locale.toCurrencyString(m_price, m_currency);
8191}
8292
93+bool Payments::purchasing() const
94+{
95+ return m_purchasing;
96+}
97+
8398void Payments::setCurrency(const QString &currency)
8499{
85100 if(m_currency != currency) {
@@ -112,6 +127,11 @@ void Payments::setStoreItemId(const QString &store_item_id)
112127 pay_package_item_start_verification(m_package, m_store_item_id.toLocal8Bit().data());
113128}
114129
130+void Payments::setPurchasing(bool is_purchasing)
131+{
132+ m_purchasing = is_purchasing;
133+}
134+
115135void Payments::start()
116136{
117137 pay_package_item_start_purchase(m_package, m_store_item_id.toLocal8Bit().data());
plugins/Ubuntu/Payments/Payments.h+4
@@ -39,10 +39,12 @@ public:
3939 double price() const;
4040 QString storeItemId() const;
4141 QString formattedPrice() const;
42+ bool purchasing() const;
4243
4344 void setCurrency(const QString& currency);
4445 void setPrice(const double price);
4546 void setStoreItemId(const QString& store_item_id);
47+ void setPurchasing(bool is_purchasing);
4648 Q_INVOKABLE void start();
4749
4850Q_SIGNALS:
@@ -53,11 +55,13 @@ Q_SIGNALS:
5355
5456 void purchaseError(const QString &error);
5557 void purchaseCompleted();
58+ void purchaseCancelled();
5659
5760private:
5861 QString m_currency;
5962 double m_price;
6063 QString m_store_item_id;
64+ bool m_purchasing;
6165
6266 PayPackage *m_package;
6367};
plugins/Ubuntu/SystemImage/SystemImage.qmltypes+2
@@ -11,6 +11,8 @@ Module {
1111 name: "SystemImage"
1212 prototype: "QObject"
1313 exports: ["Ubuntu.SystemImage/SystemImage 0.1"]
14+ isCreatable: false
15+ isSingleton: true
1416 exportMetaObjectRevisions: [0]
1517 Method { name: "factoryReset" }
1618 }
plugins/Unity/DashCommunicator/CMakeLists.txt+8−2
@@ -1,5 +1,6 @@
11include_directories(
22 ${CMAKE_CURRENT_SOURCE_DIR}
3+ ${libunity8-private_SOURCE_DIR}
34)
45
56set(QMLDASHCOMMUNICATORPLUGIN_SRC
@@ -7,13 +8,18 @@ set(QMLDASHCOMMUNICATORPLUGIN_SRC
78 dbusdashcommunicatorservice.cpp
89 dashcommunicatorservice.cpp
910 dashcommunicator.cpp
10− )
11+ dashconnection.cpp
12+)
1113
1214add_library(DashCommunicator-qml MODULE
1315 ${QMLDASHCOMMUNICATORPLUGIN_SRC}
14− )
16+)
1517
1618qt5_use_modules(DashCommunicator-qml DBus Qml)
1719
20+target_link_libraries(DashCommunicator-qml
21+ unity8-private
22+)
23+
1824# export the qmldir and qmltypes files
1925add_unity8_plugin(Unity.DashCommunicator 0.1 Unity/DashCommunicator TARGETS DashCommunicator-qml)
plugins/Unity/DashCommunicator/dashcommunicator.cpp+22−13
@@ -15,29 +15,38 @@
1515 */
1616
1717#include "dashcommunicator.h"
18+#include "dashconnection.h"
1819
1920#include <QObject>
20−#include <QDBusConnection>
21−#include <QDBusInterface>
22−#include <QDebug>
2321
2422DashCommunicator::DashCommunicator(QObject *parent):
25− QObject(parent)
23+ QThread(parent),
24+ m_dashConnection(nullptr),
25+ m_created(false)
2626{
27+ start();
2728}
2829
29−DashCommunicator::~DashCommunicator()
30+void DashCommunicator::setCurrentScope(const QString &scopeId, bool animate, bool isSwipe)
3031{
32+ m_mutex.lock();
33+ if (m_created) {
34+ QMetaObject::invokeMethod(m_dashConnection, "setCurrentScope",
35+ Q_ARG(QString, scopeId),
36+ Q_ARG(bool, animate),
37+ Q_ARG(bool, isSwipe));
38+ }
39+ m_mutex.unlock();
3140}
3241
33−
34−void DashCommunicator::setCurrentScope(const QString &scopeId, bool animate, bool reset)
42+void DashCommunicator::run()
3543{
36− QDBusConnection connection = QDBusConnection::sessionBus();
37− QDBusInterface dashIface ("com.canonical.UnityDash",
38− "/com/canonical/UnityDash",
39− "",
40− connection);
44+ m_dashConnection = new DashConnection("com.canonical.UnityDash",
45+ "/com/canonical/UnityDash",
46+ "", this);
47+ m_mutex.lock();
48+ m_created = true;
49+ m_mutex.unlock();
4150
42− dashIface.call("SetCurrentScope", scopeId, animate, reset);
51+ exec();
4352}
plugins/Unity/DashCommunicator/dashcommunicator.h+17−7
@@ -17,19 +17,29 @@
1717#ifndef DASHCOMMUNICATOR_H
1818#define DASHCOMMUNICATOR_H
1919
20−#include <QObject>
20+// Qt
21+#include <QThread>
22+#include <QMutex>
2123
22−class DashCommunicator: public QObject
24+class DashConnection;
25+
26+class DashCommunicator: public QThread
2327{
2428 Q_OBJECT
25− Q_CLASSINFO("D-Bus Interface", "com.canonical.Unity.DashCommunicator")
26−
2729public:
28− DashCommunicator(QObject *parent = 0);
29− ~DashCommunicator();
30+ explicit DashCommunicator(QObject *parent = 0);
31+ ~DashCommunicator() = default;
3032
3133public Q_SLOTS:
32− void setCurrentScope(const QString &scopeId, bool animate, bool reset);
34+ void setCurrentScope(const QString &scopeId, bool animate, bool isSwipe);
35+
36+protected:
37+ void run() override;
38+
39+private:
40+ DashConnection *m_dashConnection;
41+ bool m_created;
42+ QMutex m_mutex;
3343};
3444
3545#endif
plugins/Unity/DashCommunicator/dashcommunicatorservice.h+1−1
@@ -29,7 +29,7 @@ public:
2929 ~DashCommunicatorService();
3030
3131Q_SIGNALS:
32− void setCurrentScopeRequested(const QString &scopeId, bool animate, bool reset);
32+ void setCurrentScopeRequested(const QString &scopeId, bool animate, bool isSwipe);
3333
3434private:
3535 DBusDashCommunicatorService *m_dbusService;
plugins/Unity/DashCommunicator/dashconnection.cppnew file+33
@@ -0,0 +1,33 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software: you can redistribute it and/or modify it under
5+ * the terms of the GNU Lesser General Public License version 3, as published by
6+ * the Free Software Foundation.
7+ *
8+ * This program is distributed in the hope that it will be useful, but WITHOUT
9+ * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY,
10+ * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11+ * Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "dashconnection.h"
18+
19+#include <QDBusInterface>
20+#include <QDBusPendingCall>
21+
22+DashConnection::DashConnection(const QString &service, const QString &path, const QString &interface, QObject *parent):
23+ AbstractDBusServiceMonitor(service, path, interface, SessionBus, parent)
24+{
25+
26+}
27+
28+void DashConnection::setCurrentScope(const QString &scopeId, bool animate, bool isSwipe)
29+{
30+ if (dbusInterface()) {
31+ dbusInterface()->asyncCall("SetCurrentScope", scopeId, animate, isSwipe);
32+ }
33+}
plugins/Unity/DashCommunicator/dashconnection.hnew file+34
@@ -0,0 +1,34 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software: you can redistribute it and/or modify it under
5+ * the terms of the GNU Lesser General Public License version 3, as published by
6+ * the Free Software Foundation.
7+ *
8+ * This program is distributed in the hope that it will be useful, but WITHOUT
9+ * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY,
10+ * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11+ * Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef THREADEDDASHCONNECTION_H
18+#define THREADEDDASHCONNECTION_H
19+
20+// local
21+#include "abstractdbusservicemonitor.h"
22+
23+
24+class DashConnection: public AbstractDBusServiceMonitor
25+{
26+ Q_OBJECT
27+public:
28+ DashConnection(const QString &service, const QString &path, const QString &interface, QObject *parent = 0);
29+
30+public Q_SLOTS:
31+ void setCurrentScope(const QString &scopeId, bool animate, bool isSwipe);
32+};
33+
34+#endif
plugins/Unity/DashCommunicator/dbusdashcommunicatorservice.cpp+2−2
@@ -33,7 +33,7 @@ DBusDashCommunicatorService::~DBusDashCommunicatorService()
3333{
3434}
3535
36−void DBusDashCommunicatorService::SetCurrentScope(const QString &scopeId, bool animate, bool reset)
36+void DBusDashCommunicatorService::SetCurrentScope(const QString &scopeId, bool animate, bool isSwipe)
3737{
38− Q_EMIT setCurrentScopeRequested(scopeId, animate, reset);
38+ Q_EMIT setCurrentScopeRequested(scopeId, animate, isSwipe);
3939}
plugins/Unity/DashCommunicator/dbusdashcommunicatorservice.h+2−2
@@ -29,10 +29,10 @@ public:
2929 ~DBusDashCommunicatorService();
3030
3131Q_SIGNALS:
32− void setCurrentScopeRequested(const QString &scopeId, bool animate, bool reset);
32+ void setCurrentScopeRequested(const QString &scopeId, bool animate, bool isSwipe);
3333
3434public Q_SLOTS:
35− Q_SCRIPTABLE void SetCurrentScope(const QString &scopeId, bool animate, bool reset);
35+ Q_SCRIPTABLE void SetCurrentScope(const QString &scopeId, bool animate, bool isSwipe);
3636
3737};
3838
plugins/Unity/Indicators/CMakeLists.txt−9
@@ -30,16 +30,7 @@ set(IndicatorsQML_SOURCES
3030)
3131add_definitions(-DUNITYINDICATORS_LIBRARY)
3232
33−set(IndicatorsQML_RESOURCES
34− resources/indicators.qrc
35−)
36−
37−qt5_add_resources(IndicatorsQML_RESOURCES_RCC
38− ${IndicatorsQML_RESOURCES}
39−)
40−
4133add_library(IndicatorsQml SHARED
42− ${IndicatorsQML_RESOURCES_RCC}
4334 ${IndicatorsQML_SOURCES}
4435)
4536
plugins/Unity/Indicators/Indicators.qmltypes+6−4
@@ -219,12 +219,14 @@ Module {
219219 Method {
220220 name: "model"
221221 type: "UnityMenuModel*"
222− Parameter { name: "path"; type: "string" }
222+ Parameter { name: "bus"; type: "QByteArray" }
223+ Parameter { name: "path"; type: "QByteArray" }
224+ Parameter { name: "actions"; type: "QVariantMap" }
223225 }
224226 Method {
225− name: "registerModel"
226− Parameter { name: "path"; type: "string" }
227− Parameter { name: "menuModel"; type: "UnityMenuModel"; isPointer: true }
227+ name: "contains"
228+ type: "bool"
229+ Parameter { name: "path"; type: "QByteArray" }
228230 }
229231 }
230232 Component {
plugins/Unity/Indicators/plugin.cpp−2
@@ -42,8 +42,6 @@ static QObject* menuModelCacheSingleton(QQmlEngine* engine, QJSEngine* scriptEng
4242
4343void Indicators2Plugin::registerTypes(const char *uri)
4444{
45− Q_INIT_RESOURCE(indicators);
46−
4745 qmlRegisterType<IndicatorsManager>(uri, 0, 1, "IndicatorsManager");
4846 qmlRegisterType<IndicatorsModel>(uri, 0, 1, "IndicatorsModel");
4947 qmlRegisterType<MenuContentActivator>(uri, 0, 1, "MenuContentActivator");
plugins/Unity/Indicators/resources/artwork/messaging/default_app.svgdeleted−42
@@ -1,42 +0,0 @@
1−<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2−<!-- Created with Inkscape (http://www.inkscape.org/) -->
3−<svg id="svg15137" xmlns="http://www.w3.org/2000/svg" height="48" width="48" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink">
4− <defs id="defs15139">
5− <radialGradient id="radialGradient2612" gradientUnits="userSpaceOnUse" cy="4.625" cx="62.625" gradientTransform="matrix(1 0 0 .34118 0 3.0471)" r="10.625">
6− <stop id="stop8840" offset="0"/>
7− <stop id="stop8842" style="stop-opacity:0" offset="1"/>
8− </radialGradient>
9− <linearGradient id="linearGradient15133" y2=".24326" gradientUnits="userSpaceOnUse" x2="62.2" gradientTransform="matrix(2.1499 0 0 2.1499 -110.12 31.935)" y1="-12.489" x1="62.2">
10− <stop id="stop4875" style="stop-color:#fff" offset="0"/>
11− <stop id="stop4877" style="stop-color:#fff;stop-opacity:0" offset="1"/>
12− </linearGradient>
13− <radialGradient id="radialGradient15127" gradientUnits="userSpaceOnUse" cy="-8.7256" cx="62.2" gradientTransform="matrix(2.4129 0 0 2.413 -126.48 34.231)" r="9.7553">
14− <stop id="stop8649" style="stop-color:#8fb1dc" offset="0"/>
15− <stop id="stop8651" style="stop-color:#3465a4" offset="1"/>
16− </radialGradient>
17− <radialGradient id="radialGradient2418" gradientUnits="userSpaceOnUse" cy="24.149" cx="17.814" gradientTransform="matrix(-2.644 0 2.9365e-8 2.5344 78.725 -37.986)" r="9.125">
18− <stop id="stop4847" style="stop-color:#fff" offset="0"/>
19− <stop id="stop4849" style="stop-color:#b6b6b6" offset="1"/>
20− </radialGradient>
21− <radialGradient id="radialGradient5145" gradientUnits="userSpaceOnUse" cy="13.067" cx="23.86" gradientTransform="matrix(-1.5425 0 0 -.84553 60.718 23.829)" r="18.098">
22− <stop id="stop14112" style="stop-color:#557695" offset="0"/>
23− <stop id="stop14114" style="stop-color:#15395c" offset="1"/>
24− </radialGradient>
25− <radialGradient id="radialGradient5147" gradientUnits="userSpaceOnUse" cy="-3.442" cx="62.225" gradientTransform="matrix(1.1035 0 0 1.0265 -4.1555 -1.8158)" r="10.081">
26− <stop id="stop14118" style="stop-color:#9e9e9e" offset="0"/>
27− <stop id="stop14120" style="stop-color:#9e9e9e;stop-opacity:0" offset="1"/>
28− </radialGradient>
29− </defs>
30− <g id="layer1">
31− <path id="path8836" style="opacity:.4;fill-rule:evenodd;fill:url(#radialGradient2612)" d="m73.25 4.625a10.625 3.625 0 1 1 -21.25 0 10.625 3.625 0 1 1 21.25 0z" transform="matrix(2.1647 0 0 2.5637 -111.56 26.85)"/>
32− <g id="g15122" transform="translate(.79042 -.78563)">
33− <path id="path6495" style="stroke:#204a87;fill:url(#radialGradient15127)" d="m43.505 24.387c0 10.99-8.9091 19.899-19.897 19.899-10.989 0-19.898-8.9091-19.898-19.899 0-10.989 8.9086-19.897 19.898-19.897 10.988 0 19.897 8.9081 19.897 19.897z"/>
34− <path id="path6534" style="stroke:url(#radialGradient5147);stroke-width:1.1035;fill:url(#radialGradient5145)" d="m23.726 5.3141c-1.5283 0.12067-3.0328 0.36544-4.4919 0.84567-1.23 0.48843 0.88689-0.42988-0.37486-0.60468-0.75942-0.12994-1.0776 0.65251-1.7561 0.67046-0.7741 0.023841-1.3048 0.71572-2.0319 0.79898-0.26187 1.4432-0.59924-0.56894-0.83949 0.13173 0.19047 0.7212-0.07796 1.1928-0.63582 1.6119-0.60156 0.68249-0.03584 1.2934 0.54212 0.69395 0.2775-0.83446 1.1825-1.7618 2.0655-1.2049 0.8837 0.48448 1.7582 1.6525 2.4938 0.40935-0.75488-0.090735-1.0462-0.73637-1.4079-1.2096-0.40023 0.031761-2.0794-0.32019-1.0059-0.24024 0.5284-0.17249 1.549-0.68558 1.9239-0.66537-0.94013 0.49026 0.35015 0.81268 0.73202 1.2035 0.68671 0.20357 0.99776 1.0757 0.37414 1.527-0.80181 0.4162 0.05573 1.1017 0.221 1.6748 0.12828 0.99827 0.99623 0.43282 1.2716-0.18046 0.39803-1.1153 1.6733-1.0767 2.5958-1.5522 1.008-0.51754 1.0248-0.53575 1.5034 0.20195 0.36764 0.21151 1.5947-0.55825 0.78901-0.929-0.68957 0.03713-1.142 0.46029-0.56364-0.60801 0.13915-0.57404 0.6791-1.3235 0.58092-1.7937-0.662-0.2603-1.324-0.5207-1.986-0.7811zm-9.3732 3.6945c0.35612 0.3643 1.5564 1.0234 1.4368 0.11255-0.14419-0.61744-1.0418-0.62308-1.4368-0.11255zm18.165-0.44471c-0.82412 0.16922-1.6412 0.35467-2.292 0.92363 0.19457 0.7853-0.8341 0.89786-1.2851 1.3281-0.12036 0.25242-0.02467 1.8403 0.51105 1.1573 0.58162-0.77246 0.83368 0.40868 1.4478 0.52687 0.4451-0.14324 0.5002-1.1438 0.33275-1.6043 0.28525-0.46984 0.75058-1.1195 1.3539-1.0659-0.37419 0.57099-0.80163 2.0315 0.3911 1.4345 0.34518-0.006-0.93958 0.75452-1.0166 1.273-0.48258 0.51284-0.9934 0.90587-1.6905 0.50847-0.33355-0.28162-0.50305-1.0992-0.71414-0.17566 0.43341 0.73252-1.089 0.04718-1.0514 1.0356-0.31972 0.61514-0.89623 0.8671-1.563 0.91149 0.24198 0.19141 1.1924 1.3314 0.24953 1.1701-0.60352 0.06628-1.4857 0.40701-1.2414 1.1653-0.27486 0.9444 0.4249 0.70654 0.85522 1.2977 0.70116-0.19916 1.1488-0.62908 1.2634-1.3621 0.65618-0.19273 0.73557-0.93195 1.456-0.91702 0.7182-0.40381 0.88559 0.73738 1.5587 0.82181 0.07058 0.4087-0.33464 1.281 0.45659 0.4693 0.76441-0.55387-0.79512-1.2716-0.30963-1.4066 0.69099 0.22071 0.94006 0.87671 1.051 1.519 0.56306 0.9634 0.70185 0.44404 0.74672-0.40362 0.87723-0.39439 1.1473 1.641 2.3881 1.1397 0.92678 0.19174 0.59949 0.8304-0.01904 1.2203-0.50066 0.47112-1.3382 0.17338-1.9265-0.01558-0.56472-0.27756-1.3196-0.24813-1.6214 0.38347-0.46529-0.21764-0.94642-0.91135-1.4178-1.3118-1.1647-0.5139-2.4314-0.07571-3.5919 0.23946-0.99563 1.1632-2.1949 2.219-2.6236 3.7359-0.62778 0.63853 0.54336 1.0082-0.24392 1.556-0.6428 0.51279 0.10805 1.1629 0.2458 1.7527 0.60445 0.74395 1.6306 3.0723 2.5708 2.1452 0.52705-0.80245 0.81963 0.61582 1.4399-0.30194 0.4952-0.39949 0.9695 0.45802 1.6897 0.14331 0.69372 0.4284 0.56095 1.0433 0.27484 1.6928 0.15583 0.54087 0.93098 0.9344 0.62978 1.6677-0.27366 0.68309 0.58312 1.201 0.41038 1.7987-0.5748 1.1512-0.43928 2.5747 0.09386 3.7157 0.42668 1.0325 0.67699 2.1484 0.64366 3.2692 0.74277 0.2222 1.1367-0.72912 1.8776-0.51313 0.72333 0.09324 0.99191-0.82974 1.5008-1.2158 0.56704-0.46747-0.07223-1.1873 0.82794-1.5185 0.87331-0.42523-1.106-1.0213 0.0152-1.4024 0.46515-0.51761 1.4132-0.69776 1.6008-1.3735-0.33834-1.0398-0.21797-2.1801-0.16738-3.2436 0.32552-0.84167 0.72975-1.6312 1.4262-2.2272 0.28082-0.92669 0.94924-1.7777 0.88942-2.7709-1.6476 0.50399-1.1482-0.21491-0.22962-0.87318 0.63508-0.42199 1.4051-0.84564 1.7006-1.5617 0.14435-0.81048-0.45227-2.1297-1.0079-0.90496-0.24511-0.4707-1.1542-0.71744-1.113-1.3307-0.17659-1.2625 0.34462-0.14427 0.86051 0.10789 1.1146-0.60521 1.6818 1.7766 2.3893 0.35503-0.618-4.471-3.052-8.528-6.34-11.567-0.571-1.0949-0.921 0.75-1.501 0.68-0.464-0.485-1.33-1.1394-0.122-0.914 1.034-0.3028 0.333-0.7027-0.425-0.6842-0.574-0.0697-1.101-0.2706-1.635-0.4789zm-20.56 0.4447c-0.275 1.3534-2.0109 1.1954-2.6162 2.5304-2.9783 3.153-4.8166 7.302-5.32 11.598 0.26584 1.0071 1.1105 1.4908 1.9601 1.9373 0.72184 0.41932 1.7801 0.2342 2.1848 1.1124 0.45187 0.36983 0.93948 1.0997 1.5856 0.87722 0.93664-0.09099 0.36019 0.85823 0.19973 1.3392-0.059277 0.607-0.80778 0.99372-0.52016 1.5778-0.24136 0.66166-0.43304 1.3177 0.10262 1.8906 0.45551 0.83988 0.82632 1.7478 1.6708 2.2751 0.59217 0.49728 1.2625 1.1553 1.0304 1.9974-0.12338 0.68167 0.04306 1.3099 0.3725 1.908-0.11816 0.67146-0.36073 1.3584-0.4105 2.0183 0.87949 0.62206 2.6705 2.0606 2.8031 0.49489 0.50176-0.45161 0.5321-1.1784 1.3743-1.1804 0.3909-0.47777 0.52549-1.2283 0.81706-1.8117-0.42572-0.5384 0.16631-1.3697 0.8046-1.3477 0.81594 0.06128 0.78593-0.89448 1.1111-1.4232-0.0073-0.77224-0.38892-1.6471 0.30542-2.227 0.52242-0.47344 0.46827-1.1675 0.5498-1.8097-1.171-0.7244-2.712-1.0911-3.6386-2.0687-0.18364-0.76504-0.7598-1.0229-1.4925-1.0784-0.30936-0.43256-0.25697-1.4628-0.79753-1.5131-0.69628 0.13369-1.3857 0.24089-1.8917-0.3644-0.573-0.776-1.069 0.2-1.593 0.546-0.492 0.856-1.8683-0.043-1.7038-1.007 0.4839-1.334-1.6425 0.148-0.7699-1.425 0.4151-1.715-0.7067-0.396-1.2952-0.011-0.71822 0.0081-0.98953-0.70747-0.86146-1.3625-0.091117-0.78733 0.48283-1.1877 1.0669-1.5822 0.78161 0.12038 0.97989-0.56085 1.5654-0.4722 0.73603-0.03767 1.0049 0.66782 1.4232 1.1357 0.17514-0.66797-0.18345-1.6152 0.55606-1.9879 0.56414-0.42781 1.137-0.84927 1.2721-1.5904 0.13304-0.77598 1.2893-0.46761 1.4837-1.2526 0.26877-0.8206 1.5114-0.15823 1.7899-0.96804 0.8733-0.82086-0.27242-0.57178-0.89854-0.59806-1.2353 0.12695 0.1228-0.32763 0.58598-0.58155 0.68608 0.09073 1.3195-0.13384 1.9499-0.37629 0.08445 0.85843 0.24597 1.3112 0.68417 0.30788-0.85421-0.20211-0.11618-1.0402-0.95973-1.2614-0.66764 0.04697 0.0066-1.4189-0.81571-1.2577-1.0697 0.70782-0.11401-0.50251-0.9854-0.66347-0.68736-0.74222-0.85436 0.47657-1.2276 0.9183 0.24207 0.84702-0.79095 0.66525-0.97976 1.3606-0.41814 1.2534-0.24143-0.08931-0.74055-0.41035-0.61653-0.24732-1.3592-0.3784-1.3637-1.1899 0.82658-0.60512 2.0667-0.96189 2.5994-1.9148 0.3095-0.74008-0.26215-1.1445-0.96618-1.0889l-0.000005-2e-7zm14.675 1.642c-0.12491 0.65746 0.5475 1.009 0.30788 1.7104-0.21487 0.76842-0.27728 1.3789 0.68289 0.93046 0.99668-0.51183 0.36052-0.90148-0.03867-1.5728-0.27187-0.44613-0.24574-1.275-0.9521-1.0681zm-0.75259 1.0947c-0.79414-0.24012-0.61745 1.4493-0.12164 1.0118 0.7276-0.17916 0.23703-0.5252 0.12164-1.0118zm10.023 8.9969c0.95184 0.84444 1.277 2.0946 1.8858 3.1596 0.90428 0.39972 0.0415 1.0795 0.44521 1.5712 0.84897 0.92228-1.1752 0.24516-0.90606-0.67899-0.1971-1.2139-1.0559-2.044-1.4678-3.1045-0.04294-0.3526-0.38552-0.71788 0.04284-0.94732z"/>
35− <path id="path8655" style="opacity:.4;stroke:url(#linearGradient15133);fill:none" d="m42.409 24.387c0 10.384-8.4184 18.803-18.801 18.803-10.384 0-18.802-8.4184-18.802-18.803 0-10.384 8.418-18.801 18.802-18.801 10.383 0 18.801 8.4175 18.801 18.801z"/>
36− </g>
37− <g id="g2414" transform="matrix(.99991 -.013701 .013701 .99991 -.28870 .53585)">
38− <path id="path3970" style="stroke-linejoin:round;fill-rule:evenodd;stroke:#666;fill:url(#radialGradient2418)" d="m30.5 20.937 17 16.5-7.75 0.25s3.25 6.75 3.25 6.75c1 3-3.5 4.125-4.25 1.875l-3-6.75-5.5 5.875 0.25-24.5z"/>
39− <path id="path4853" style="opacity:.4;stroke:#fff;fill:none" d="m31.657 23.379 13.476 13.186-6.9219 0.27746l3.8721 7.7566c0.40273 1.6501-2.0283 2.4126-2.5071 1.1529l-3.6831-7.845-4.4247 4.7083 0.18907-19.236z"/>
40− </g>
41− </g>
42−</svg>
plugins/Unity/Indicators/resources/artwork/messaging/default_contact.pngdeleted

Binary file not shown.

plugins/Unity/Indicators/resources/indicators.qrcdeleted−6
@@ -1,6 +0,0 @@
1−<RCC>
2− <qresource prefix="/indicators">
3− <file>artwork/messaging/default_contact.png</file>
4− <file>artwork/messaging/default_app.svg</file>
5− </qresource>
6−</RCC>
plugins/Unity/Launcher/CMakeLists.txt+7−5
@@ -1,6 +1,6 @@
11include(FindPkgConfig)
2−pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=3)
3−pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=3)
2+pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=4)
3+pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=5)
44pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
55
66add_definitions(-DSM_BUSNAME=systemBus)
@@ -16,8 +16,10 @@ set(QMLLAUNCHERPLUGIN_SRC
1616 launchermodel.cpp
1717 launcheritem.cpp
1818 quicklistmodel.cpp
19− common/quicklistentry.cpp
20− backend/launcherbackend.cpp
19+ quicklistentry.cpp
20+ dbusinterface.cpp
21+ gsettings.cpp
22+ desktopfilehandler.cpp
2123 ${CMAKE_SOURCE_DIR}/plugins/AccountsService/AccountsServiceDBusAdaptor.cpp
2224 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherItemInterface.h
2325 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherModelInterface.h
@@ -30,6 +32,6 @@ add_library(UnityLauncher-qml MODULE
3032
3133target_link_libraries(UnityLauncher-qml ${GSETTINGS_QT_LDFLAGS})
3234
33−qt5_use_modules(UnityLauncher-qml DBus Qml)
35+qt5_use_modules(UnityLauncher-qml DBus Qml Gui)
3436
3537add_unity8_plugin(Unity.Launcher 0.1 Unity/Launcher TARGETS UnityLauncher-qml)
plugins/Unity/Launcher/backend/launcherbackend.cppdeleted−584
@@ -1,584 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * Authors:
5− * Michael Terry <michael.terry@canonical.com>
6− * Michael Zanetti <michael.zanetti@canonical.com>
7− *
8− * This program is free software; you can redistribute it and/or modify
9− * it under the terms of the GNU General Public License as published by
10− * the Free Software Foundation; version 3.
11− *
12− * This program is distributed in the hope that it will be useful,
13− * but WITHOUT ANY WARRANTY; without even the implied warranty of
14− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15− * GNU General Public License for more details.
16− *
17− * You should have received a copy of the GNU General Public License
18− * along with this program. If not, see <http://www.gnu.org/licenses/>.
19− */
20−
21−#include "AccountsServiceDBusAdaptor.h"
22−#include "launcherbackend.h"
23−
24−#include <QDir>
25−#include <QDBusArgument>
26−#include <QFileInfo>
27−#include <QGSettings>
28−#include <QDebug>
29−#include <QStandardPaths>
30−
31−class LauncherBackendItem
32−{
33−public:
34− QString displayName;
35− QString icon;
36− int count;
37− bool countVisible;
38−};
39−
40−LauncherBackend::LauncherBackend(QObject *parent):
41− QDBusVirtualObject(parent),
42− m_accounts(nullptr)
43−{
44−#ifndef LAUNCHER_TESTING
45− m_accounts = new AccountsServiceDBusAdaptor(this);
46−#endif
47− m_user = qgetenv("USER");
48− syncFromAccounts();
49−
50− /* Set up ourselves on DBus */
51− QDBusConnection con = QDBusConnection::sessionBus();
52− if (!con.registerService("com.canonical.Unity.Launcher")) {
53− qDebug() << "Unable to register launcher name";
54− }
55− if (!con.registerVirtualObject("/com/canonical/Unity/Launcher", this, QDBusConnection::VirtualObjectRegisterOption::SubPath)) {
56− qDebug() << "Unable to register launcher object";
57− }
58−}
59−
60−LauncherBackend::~LauncherBackend()
61−{
62− /* Remove oursevles from DBus */
63− QDBusConnection con = QDBusConnection::sessionBus();
64− con.unregisterService("com.canonical.Unity.Launcher");
65− con.unregisterObject("/com/canonical/Unity/Launcher");
66−
67− /* Clear data */
68− m_storedApps.clear();
69−
70− Q_FOREACH(LauncherBackendItem *item, m_itemCache) {
71− delete item;
72− }
73− m_itemCache.clear();
74−}
75−
76−QStringList LauncherBackend::storedApplications() const
77−{
78− return m_storedApps;
79−}
80−
81−void LauncherBackend::setStoredApplications(const QStringList &appIds)
82−{
83− if (appIds.count() < m_storedApps.count()) {
84− Q_FOREACH(const QString &appId, m_storedApps) {
85− if (!appIds.contains(appId)) {
86− delete m_itemCache.take(appId);
87− }
88− }
89− }
90− m_storedApps = appIds;
91− Q_FOREACH(const QString &appId, appIds) {
92− if (!m_itemCache.contains(appId)) {
93− QString df = findDesktopFile(appId);
94− if (!df.isEmpty()) {
95− LauncherBackendItem *item = parseDesktopFile(df);
96− m_itemCache.insert(appId, item);
97− } else {
98− // Cannot find any data for that app... ignoring it.
99− qWarning() << "cannot find desktop file for" << appId << ". discarding app.";
100− m_storedApps.removeAll(appId);
101− }
102− }
103− }
104− syncToAccounts();
105−}
106−
107−QString LauncherBackend::desktopFile(const QString &appId) const
108−{
109− return findDesktopFile(appId);
110−}
111−
112−QString LauncherBackend::displayName(const QString &appId) const
113−{
114− LauncherBackendItem *item = m_itemCache.value(appId, nullptr);
115− if (item) {
116− return item->displayName;
117− }
118−
119− QString df = findDesktopFile(appId);
120− if (!df.isEmpty()) {
121− LauncherBackendItem *item = parseDesktopFile(df);
122− m_itemCache.insert(appId, item);
123− return item->displayName;
124− }
125−
126− return QString();
127−}
128−
129−QString LauncherBackend::icon(const QString &appId) const
130−{
131− QString iconName;
132− LauncherBackendItem *item = getItem(appId);
133− if (item) {
134− iconName = item->icon;
135− }
136−
137− return iconName;
138−}
139−
140−QList<QuickListEntry> LauncherBackend::quickList(const QString &appId) const
141−{
142− // TODO: Get static (from .desktop file) and dynamic (from the app itself)
143− // entries and return them here. Frontend related entries (like "Pin to launcher")
144− // don't matter here. This is just the backend part.
145− // TODO: emit quickListChanged() when the dynamic part changes
146− Q_UNUSED(appId)
147− return QList<QuickListEntry>();
148−}
149−
150−int LauncherBackend::progress(const QString &appId) const
151−{
152− // TODO: Return value for progress emblem.
153− // TODO: emit progressChanged() when this value changes.
154− Q_UNUSED(appId)
155− return -1;
156−}
157−
158−int LauncherBackend::count(const QString &appId) const
159−{
160− int count = -1;
161− LauncherBackendItem *item = getItem(appId);
162−
163− if (item) {
164− if (item->countVisible) {
165− count = item->count;
166− }
167− }
168−
169− return count;
170−}
171−
172−void LauncherBackend::setCount(const QString &appId, int count) const
173−{
174− LauncherBackendItem *item = getItem(appId);
175−
176− bool emitchange = false;
177− if (item) {
178− emitchange = (item->count != count);
179− item->count = count;
180− }
181−
182− if (emitchange) {
183− /* TODO: This needs to use the accessor to handle the visibility
184− correctly, but when we have the two properties we can just use
185− the local value */
186− Q_EMIT countChanged(appId, this->count(appId));
187− QVariant vcount(item->count);
188− emitPropChangedDbus(appId, "count", vcount);
189− }
190−}
191−
192−bool LauncherBackend::countVisible(const QString &appId) const
193−{
194− bool visible = false;
195− LauncherBackendItem *item = getItem(appId);
196−
197− if (item) {
198− visible = item->countVisible;
199− }
200−
201− return visible;
202−}
203−
204−void LauncherBackend::setCountVisible(const QString &appId, bool visible) const
205−{
206− LauncherBackendItem *item = getItem(appId);
207−
208− bool emitchange = false;
209− if (item) {
210− emitchange = (item->countVisible != visible);
211− item->countVisible = visible;
212− } else {
213− qDebug() << "Unable to find:" << appId;
214− }
215−
216− if (emitchange) {
217− /* TODO: Because we're using visible in determining the
218− count we need to emit a count changed as well */
219− Q_EMIT countChanged(appId, this->count(appId));
220− Q_EMIT countVisibleChanged(appId, item->countVisible);
221− QVariant vCountVisible(item->countVisible);
222− emitPropChangedDbus(appId, "countVisible", vCountVisible);
223− }
224−}
225−
226−void LauncherBackend::setUser(const QString &username)
227−{
228− if (qgetenv("USER") == "lightdm" && m_user != username) {
229− m_user = username;
230− syncFromAccounts();
231− }
232−}
233−
234−void LauncherBackend::triggerQuickListAction(const QString &appId, const QString &quickListId)
235−{
236− // TODO: execute the given quicklist action
237− Q_UNUSED(appId)
238− Q_UNUSED(quickListId)
239−}
240−
241−void LauncherBackend::syncFromAccounts()
242−{
243− QList<QVariantMap> apps;
244− bool defaults = true;
245−
246− m_storedApps.clear();
247−
248− if (m_accounts && !m_user.isEmpty()) {
249− QVariant variant = m_accounts->getUserProperty(m_user, "com.canonical.unity.AccountsService", "launcher-items");
250− if (variant.isValid() && variant.canConvert<QDBusArgument>()) {
251− apps = qdbus_cast<QList<QVariantMap>>(variant.value<QDBusArgument>());
252− defaults = isDefaultsItem(apps);
253− }
254− }
255−
256− if (m_accounts && defaults) { // Checking accounts as it'll be null when !useStorage
257− QGSettings gSettings("com.canonical.Unity.Launcher", "/com/canonical/unity/launcher/");
258− Q_FOREACH(const QString &entry, gSettings.get("favorites").toStringList()) {
259− if (entry.startsWith("application://")) {
260− QString appId = entry;
261− // Transform "application://foobar.desktop" to "application://foobar"
262− appId.remove("application://");
263− if (appId.endsWith(".desktop")) {
264− appId.chop(8);
265− }
266− QString df = findDesktopFile(appId);
267−
268− if (!df.isEmpty()) {
269− m_storedApps << appId;
270−
271− if (!m_itemCache.contains(appId)) {
272− m_itemCache.insert(appId, parseDesktopFile(df));
273− }
274− }
275− }
276− if (entry.startsWith("appid://")) {
277− QString appId = entry;
278− appId.remove("appid://");
279− // Strip hook name and current-user-version in case its there
280−
281− if (appId.split('/').count() != 3) {
282− qWarning() << "ignoring entry " + appId + ". Not a valid appId.";
283− continue;
284− }
285− appId = appId.split('/').first() + "_" + appId.split('/').at(1);
286− QString df = findDesktopFile(appId);
287−
288− if (!df.isEmpty()) {
289− m_storedApps << appId;
290−
291− if (!m_itemCache.contains(appId)) {
292− m_itemCache.insert(appId, parseDesktopFile(df));
293− }
294− }
295− }
296− }
297− } else {
298− for (const QVariant &app: apps) {
299− loadFromVariant(app.toMap());
300− }
301− }
302−}
303−
304−void LauncherBackend::syncToAccounts()
305−{
306− if (m_accounts && !m_user.isEmpty()) {
307− QList<QVariantMap> items;
308−
309− Q_FOREACH(const QString &appId, m_storedApps) {
310− items << itemToVariant(appId);
311− }
312−
313− m_accounts->setUserProperty(m_user, "com.canonical.unity.AccountsService", "launcher-items", QVariant::fromValue(items));
314− }
315−}
316−
317−QString LauncherBackend::findDesktopFile(const QString &appId) const
318−{
319− int dashPos = -1;
320− QString helper = appId;
321−
322− QStringList searchDirs = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation);
323−#ifdef LAUNCHER_TESTING
324− searchDirs << "";
325−#endif
326−
327− do {
328− if (dashPos != -1) {
329− helper = helper.replace(dashPos, 1, '/');
330− }
331−
332− Q_FOREACH(const QString &searchDirName, searchDirs) {
333− QDir searchDir(searchDirName);
334− Q_FOREACH(const QString &desktopFile, searchDir.entryList(QStringList() << "*.desktop")) {
335− if (desktopFile.startsWith(helper)) {
336− QFileInfo fileInfo(searchDir, desktopFile);
337− return fileInfo.absoluteFilePath();
338− }
339− }
340− }
341−
342− dashPos = helper.indexOf("-");
343− } while (dashPos != -1);
344−
345− return QString();
346−}
347−
348−LauncherBackendItem* LauncherBackend::parseDesktopFile(const QString &desktopFile) const
349−{
350− QSettings settings(desktopFile, QSettings::IniFormat);
351−
352− LauncherBackendItem* item = new LauncherBackendItem();
353− item->displayName = settings.value("Desktop Entry/Name").toString();
354−
355− QString iconString = settings.value("Desktop Entry/Icon").toString();
356− QString pathString = settings.value("Desktop Entry/Path").toString();
357− if (QFileInfo(iconString).exists()) {
358− item->icon = QFileInfo(iconString).absoluteFilePath();
359− } else if (QFileInfo(pathString + '/' + iconString).exists()) {
360− item->icon = pathString + '/' + iconString;
361− } else {
362− item->icon = "image://theme/" + iconString;
363− }
364−
365− /* TODO: These should be looked up in a cache somewhere */
366− item->count = 0;
367− item->countVisible = false;
368−
369− return item;
370−}
371−
372−/* Gets an item, and tries to create a new one if we need it to */
373−LauncherBackendItem* LauncherBackend::getItem(const QString &appId) const
374−{
375− LauncherBackendItem *item = m_itemCache.value(appId, nullptr);
376− if (!item) {
377− QString df = findDesktopFile(appId);
378− if (!df.isEmpty()) {
379− item = parseDesktopFile(df);
380− if (item) {
381− m_itemCache[appId] = item;
382− } else {
383− qWarning() << "Unable to parse desktop file for" << appId << "path" << df;
384− }
385− } else {
386− qWarning() << "Unable to find desktop file for:" << appId;
387− }
388− }
389−
390− if (!item)
391− qWarning() << "Unable to find item for: " << appId;
392−
393− return item;
394−}
395−
396−void LauncherBackend::loadFromVariant(const QVariantMap &details)
397−{
398− if (!details.contains("id")) {
399− return;
400− }
401− QString appId = details.value("id").toString();
402−
403− LauncherBackendItem *item = m_itemCache.value(appId, nullptr);
404− if (item) {
405− delete item;
406− }
407−
408− item = new LauncherBackendItem();
409−
410− item->displayName = details.value("name").toString();
411− item->icon = details.value("icon").toString();
412− item->count = details.value("count").toInt();
413− item->countVisible = details.value("countVisible").toBool();
414−
415− m_itemCache.insert(appId, item);
416− m_storedApps.append(appId);
417−}
418−
419−QVariantMap LauncherBackend::itemToVariant(const QString &appId) const
420−{
421− LauncherBackendItem *item = m_itemCache.value(appId);
422− QVariantMap details;
423− details.insert("id", appId);
424− details.insert("name", item->displayName);
425− details.insert("icon", item->icon);
426− details.insert("count", item->count);
427− details.insert("countVisible", item->countVisible);
428− return details;
429−}
430−
431−bool LauncherBackend::isDefaultsItem(const QList<QVariantMap> &apps) const
432−{
433− // To differentiate between an empty list and a list that hasn't been set
434− // yet (and should thus be populated with the defaults), we use a special
435− // list of one item with the 'defaults' field set to true.
436− return (apps.size() == 1 && apps[0].value("defaults").toBool());
437−}
438−
439−bool LauncherBackend::handleMessage(const QDBusMessage& message, const QDBusConnection& connection)
440−{
441− /* Check to make sure we're getting properties on our interface */
442− if (message.type() != QDBusMessage::MessageType::MethodCallMessage) {
443− return false;
444− }
445− if (message.interface() != "org.freedesktop.DBus.Properties") {
446− return false;
447− }
448− if (message.arguments()[0].toString() != "com.canonical.Unity.Launcher.Item") {
449− return false;
450− }
451−
452− /* Break down the path to just the app id */
453− QString pathtemp = message.path();
454− if (!pathtemp.startsWith("/com/canonical/Unity/Launcher/")) {
455− return false;
456− }
457− pathtemp.remove("/com/canonical/Unity/Launcher/");
458− if (pathtemp.indexOf('/') >= 0) {
459− return false;
460− }
461−
462− /* Find ourselves an appid */
463− QString appid = decodeAppId(pathtemp);
464− QVariantList retval;
465−
466− if (message.member() == "Get") {
467− if (message.arguments()[1].toString() == "count") {
468− retval.append(QVariant::fromValue(QDBusVariant(this->count(appid))));
469− } else if (message.arguments()[1].toString() == "countVisible") {
470− retval.append(QVariant::fromValue(QDBusVariant(this->countVisible(appid))));
471− }
472− } else if (message.member() == "Set") {
473− if (message.arguments()[1].toString() == "count") {
474− this->setCount(appid, message.arguments()[2].value<QDBusVariant>().variant().toInt());
475− } else if (message.arguments()[1].toString() == "countVisible") {
476− this->setCountVisible(appid, message.arguments()[2].value<QDBusVariant>().variant().toBool());
477− }
478− } else if (message.member() == "GetAll") {
479− retval.append(this->itemToVariant(appid));
480− } else {
481− return false;
482− }
483−
484− QDBusMessage reply = message.createReply(retval);
485− return connection.send(reply);
486−}
487−
488−QString LauncherBackend::introspect(const QString &path) const
489−{
490− /* This case we should just list the nodes */
491− if (path == "/com/canonical/Unity/Launcher/" || path == "/com/canonical/Unity/Launcher") {
492− QString nodes;
493−
494− Q_FOREACH(const QString &appId, m_itemCache.keys()) {
495− nodes.append("<node name=\"");
496− nodes.append(encodeAppId(appId));
497− nodes.append("\"/>\n");
498− }
499−
500− return nodes;
501− }
502−
503− /* Should not happen, but let's handle it */
504− if (!path.startsWith("/com/canonical/Unity/Launcher")) {
505− return "";
506− }
507−
508− /* Now we should be looking at a node */
509− QString nodeiface =
510− "<interface name=\"com.canonical.Unity.Launcher.Item\">"
511− "<property name=\"count\" type=\"i\" access=\"readwrite\" />"
512− "<property name=\"countVisible\" type=\"b\" access=\"readwrite\" />"
513− "</interface>";
514− return nodeiface;
515−}
516−
517−QString LauncherBackend::decodeAppId(const QString& path)
518−{
519− QByteArray bytes = path.toUtf8();
520− QByteArray decoded;
521−
522− for (int i = 0; i < bytes.size(); ++i) {
523− char chr = bytes.at(i);
524−
525− if (chr == '_') {
526− QString number;
527− number.append(bytes.at(i+1));
528− number.append(bytes.at(i+2));
529−
530− bool okay;
531− char newchar = number.toUInt(&okay, 16);
532− if (okay)
533− decoded.append(newchar);
534−
535− i += 2;
536− } else {
537− decoded.append(chr);
538− }
539− }
540−
541− return QString::fromUtf8(decoded);
542−}
543−
544−QString LauncherBackend::encodeAppId(const QString& appId)
545−{
546− QByteArray bytes = appId.toUtf8();
547− QString encoded;
548−
549− for (int i = 0; i < bytes.size(); ++i) {
550− uchar chr = bytes.at(i);
551−
552− if ((chr >= 'a' && chr <= 'z') ||
553− (chr >= 'A' && chr <= 'Z') ||
554− (chr >= '0' && chr <= '9'&& i != 0)) {
555− encoded.append(chr);
556− } else {
557− QString hexval = QString("_%1").arg(chr, 2, 16, QChar('0'));
558− encoded.append(hexval.toUpper());
559− }
560− }
561−
562− return encoded;
563−}
564−
565−void LauncherBackend::emitPropChangedDbus(const QString& appId, const QString& property, QVariant &value) const
566−{
567− QString path("/com/canonical/Unity/Launcher/");
568− path.append(encodeAppId(appId));
569−
570− QDBusMessage message = QDBusMessage::createSignal(path, "org.freedesktop.DBus.Properties", "PropertiesChanged");
571−
572− QList<QVariant> arguments;
573− QVariantHash changedprops;
574− changedprops[property] = QVariant::fromValue(QDBusVariant(value));
575− QVariantList deletedprops;
576−
577− arguments.append(changedprops);
578− arguments.append(deletedprops);
579−
580− message.setArguments(arguments);
581−
582− QDBusConnection con = QDBusConnection::sessionBus();
583− con.send(message);
584−}
plugins/Unity/Launcher/backend/launcherbackend.hdeleted−196
@@ -1,196 +0,0 @@
1−/* Copyright (C) 2013 Canonical, Ltd.
2− *
3− * Authors:
4− * Michael Zanetti <michael.zanetti@canonical.com>
5− *
6− * This program is free software; you can redistribute it and/or modify
7− * it under the terms of the GNU General Public License as published by
8− * the Free Software Foundation; version 3.
9− *
10− * This program is distributed in the hope that it will be useful,
11− * but WITHOUT ANY WARRANTY; without even the implied warranty of
12− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13− * GNU General Public License for more details.
14− *
15− * You should have received a copy of the GNU General Public License
16− * along with this program. If not, see <http://www.gnu.org/licenses/>.
17− */
18−
19−#ifndef LAUNCHERBACKEND_H
20−#define LAUNCHERBACKEND_H
21−
22−#include "common/quicklistentry.h"
23−
24−#include <QObject>
25−#include <QSettings>
26−#include <QStringList>
27−#include <QDBusVirtualObject>
28−
29−class AccountsServiceDBusAdaptor;
30−
31−/**
32− * @brief An interface that provides all the data needed by the launcher.
33− */
34−
35−class LauncherBackendItem;
36−class LauncherBackendTest;
37−
38−class LauncherBackend : public QDBusVirtualObject
39−{
40− Q_OBJECT
41−
42− friend LauncherBackendTest;
43−
44−public:
45− LauncherBackend(QObject *parent = 0);
46− virtual ~LauncherBackend();
47−
48− /**
49− * @brief Returns a list of stored applications.
50− * @returns A list of application IDs.
51− */
52− QStringList storedApplications() const;
53−
54− /**
55− * @brief Set the list of stored applications.
56− *
57− * Any previously stored information for apps not contained
58− * in the list any more, e.g. the pinned state, will be
59− * discarded.
60− *
61− * @param appIds The new list of stored applications.
62− */
63− void setStoredApplications(const QStringList &appIds);
64−
65− /**
66− * @brief Get the full path to the .desktop file.
67− *
68− * The application does not need to be in the list of stored applications.
69− *
70− * @returns The full path to the .dekstop file.
71− */
72− QString desktopFile(const QString &appId) const;
73−
74− /**
75− * @brief Get the user friendly name of an application.
76− *
77− * The application does not need to be in the list of stored applications.
78− *
79− * @param appId The ID of the application.
80− * @returns The user friendly name of the application.
81− */
82− QString displayName(const QString &appId) const;
83−
84− /**
85− * @brief Get the icon of an application.
86− *
87− * The application does not need to be in the list of stored applications.
88− *
89− * @param appId The ID of the application.
90− * @returns The full path to the icon for the application.
91− */
92− QString icon(const QString &appId) const;
93−
94− /**
95− * @brief Get the QuickList for an application.
96− * @param appId The ID of the application.
97− * @returns A QuickListModelInterface containing the QuickList.
98− */
99− QList<QuickListEntry> quickList(const QString &appId) const;
100−
101− /**
102− * @brief Execute an action from the quickList
103− * @param appId The app ID for which the action was triggered
104− * @param the quicklist ID of the action that was triggered
105− */
106− void triggerQuickListAction(const QString &appId, const QString &entryId);
107−
108− /**
109− * @brief Get the progress for the progress overlay of an application.
110− * @param appId The ID of the application.
111− * @returns The percentage of the overlay progress bar. -1 if no progress bar available.
112− */
113− int progress(const QString &appId) const;
114−
115− /**
116− * @brief Get the count of the count overlay of an application.
117− * @param appId The ID of the application.
118− * @returns The number to be displayed in the overlay. -1 if no count overlay is available.
119− */
120− int count(const QString &appId) const;
121−
122− /**
123− * @brief Set the count on an item
124− * @param appId The ID of the application
125− * @param count Count to show on the application
126− */
127− void setCount(const QString &appId, int count) const;
128−
129− /**
130− * @brief Get whether the count should be visible
131− * @param appId The ID of the application.
132− * @returns Whether to show a count on the launcher
133− */
134− bool countVisible(const QString &appId) const;
135−
136− /**
137− * @brief Set the visibility of the count item
138− * @param appId The ID of the application
139− * @param visible Whether the count should be visible
140− */
141− void setCountVisible(const QString &appId, bool visible) const;
142−
143− /**
144− * @brief Sets the username for which to look up launcher items.
145− * @param username The username to use.
146− */
147− void setUser(const QString &username);
148−
149− /**
150− * @brief Handle a message to an application node
151− * @param message DBus message to handle
152− * @param connection DBus connection that we're using
153− * @returns whether the message was handled
154− */
155− virtual bool handleMessage(const QDBusMessage& message, const QDBusConnection& connection);
156−
157− /**
158− * @brief Get introspection information on the objects we're exporting
159− * @param path the dbus path containing the appid
160− * @returns Introspection information for that node in the tree
161− */
162− virtual QString introspect (const QString &path) const;
163−
164−Q_SIGNALS:
165− void quickListChanged(const QString &appId, const QList<QuickListEntry> &quickList) const;
166− void progressChanged(const QString &appId, int progress) const;
167− void countChanged(const QString &appId, int count) const;
168− void countVisibleChanged(const QString &appId, bool visible) const;
169−
170−private:
171− QString findDesktopFile(const QString &appId) const;
172− LauncherBackendItem* parseDesktopFile(const QString &desktopFile) const;
173−
174− QVariantMap itemToVariant(const QString &appId) const;
175− void loadFromVariant(const QVariantMap &details);
176−
177− bool isDefaultsItem(const QList<QVariantMap> &apps) const;
178− void syncFromAccounts();
179− void syncToAccounts();
180−
181− QList<QString> m_storedApps;
182− mutable QHash<QString, LauncherBackendItem*> m_itemCache;
183−
184− AccountsServiceDBusAdaptor *m_accounts;
185− QString m_user;
186−
187− void emitPropChangedDbus(const QString& appId, const QString& property, QVariant &value) const;
188−
189−protected: /* Protected to allow testing */
190− LauncherBackendItem* getItem(const QString& appId) const;
191−
192− static QString decodeAppId(const QString& path);
193− static QString encodeAppId(const QString& appId);
194−};
195−
196−#endif // LAUNCHERBACKEND_H
plugins/Unity/Launcher/dbusinterface.cppnew file+232
@@ -0,0 +1,232 @@
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 "dbusinterface.h"
21+#include "launchermodel.h"
22+#include "launcheritem.h"
23+
24+#include <QDBusArgument>
25+#include <QDBusConnection>
26+#include <QDBusMessage>
27+#include <QDebug>
28+
29+DBusInterface::DBusInterface(LauncherModel *parent):
30+ QDBusVirtualObject(parent),
31+ m_launcherModel(parent)
32+{
33+ /* Set up ourselves on DBus */
34+ QDBusConnection con = QDBusConnection::sessionBus();
35+ if (!con.registerService("com.canonical.Unity.Launcher")) {
36+ qWarning() << "Unable to register launcher name";
37+ }
38+ if (!con.registerVirtualObject("/com/canonical/Unity/Launcher", this, QDBusConnection::VirtualObjectRegisterOption::SubPath)) {
39+ qWarning() << "Unable to register launcher object";
40+ }
41+}
42+
43+DBusInterface::~DBusInterface()
44+{
45+ /* Remove oursevles from DBus */
46+ QDBusConnection con = QDBusConnection::sessionBus();
47+ con.unregisterService("com.canonical.Unity.Launcher");
48+ con.unregisterObject("/com/canonical/Unity/Launcher");
49+}
50+
51+QString DBusInterface::introspect(const QString &path) const
52+{
53+ /* This case we should just list the nodes */
54+ if (path == "/com/canonical/Unity/Launcher/" || path == "/com/canonical/Unity/Launcher") {
55+ QString nodes;
56+
57+ // Add Refresh to introspect
58+ nodes = "<interface name=\"com.canonical.Unity.Launcher\">"
59+ "<method name=\"Refresh\"/>"
60+ "</interface>";
61+
62+ // Add dynamic properties for launcher emblems
63+ for (int i = 0; i < m_launcherModel->rowCount(); i++) {
64+ nodes.append("<node name=\"");
65+ nodes.append(encodeAppId(m_launcherModel->get(i)->appId()));
66+ nodes.append("\"/>\n");
67+ }
68+ return nodes;
69+ }
70+
71+ /* Should not happen, but let's handle it */
72+ if (!path.startsWith("/com/canonical/Unity/Launcher")) {
73+ return "";
74+ }
75+
76+ /* Now we should be looking at a node */
77+ QString nodeiface =
78+ "<interface name=\"com.canonical.Unity.Launcher.Item\">"
79+ "<property name=\"count\" type=\"i\" access=\"readwrite\" />"
80+ "<property name=\"countVisible\" type=\"b\" access=\"readwrite\" />"
81+ "</interface>";
82+ return nodeiface;
83+}
84+
85+
86+QString DBusInterface::decodeAppId(const QString& path)
87+{
88+ QByteArray bytes = path.toUtf8();
89+ QByteArray decoded;
90+
91+ for (int i = 0; i < bytes.size(); ++i) {
92+ char chr = bytes.at(i);
93+
94+ if (chr == '_') {
95+ QString number;
96+ number.append(bytes.at(i+1));
97+ number.append(bytes.at(i+2));
98+
99+ bool okay;
100+ char newchar = number.toUInt(&okay, 16);
101+ if (okay)
102+ decoded.append(newchar);
103+
104+ i += 2;
105+ } else {
106+ decoded.append(chr);
107+ }
108+ }
109+
110+ return QString::fromUtf8(decoded);
111+}
112+
113+QString DBusInterface::encodeAppId(const QString& appId)
114+{
115+ QByteArray bytes = appId.toUtf8();
116+ QString encoded;
117+
118+ for (int i = 0; i < bytes.size(); ++i) {
119+ uchar chr = bytes.at(i);
120+
121+ if ((chr >= 'a' && chr <= 'z') ||
122+ (chr >= 'A' && chr <= 'Z') ||
123+ (chr >= '0' && chr <= '9'&& i != 0)) {
124+ encoded.append(chr);
125+ } else {
126+ QString hexval = QString("_%1").arg(chr, 2, 16, QChar('0'));
127+ encoded.append(hexval.toUpper());
128+ }
129+ }
130+
131+ return encoded;
132+}
133+
134+bool DBusInterface::handleMessage(const QDBusMessage& message, const QDBusConnection& connection)
135+{
136+ /* Check to make sure we're getting properties on our interface */
137+ if (message.type() != QDBusMessage::MessageType::MethodCallMessage) {
138+ return false;
139+ }
140+
141+ // First handle methods of the Launcher interface
142+ if (message.interface() == "com.canonical.Unity.Launcher") {
143+ if (message.member() == "Refresh") {
144+ QDBusMessage reply = message.createReply();
145+ Q_EMIT refreshCalled();
146+ return connection.send(reply);
147+ }
148+ }
149+
150+ // Now handle dynamic properties (for launcher emblems)
151+ if (message.interface() != "org.freedesktop.DBus.Properties") {
152+ return false;
153+ }
154+
155+ if (message.member() != "GetAll" && message.arguments()[0].toString() != "com.canonical.Unity.Launcher.Item") {
156+ return false;
157+ }
158+
159+ /* Break down the path to just the app id */
160+ QString pathtemp = message.path();
161+ if (!pathtemp.startsWith("/com/canonical/Unity/Launcher/")) {
162+ return false;
163+ }
164+ pathtemp.remove("/com/canonical/Unity/Launcher/");
165+ if (pathtemp.indexOf('/') >= 0) {
166+ return false;
167+ }
168+
169+ /* Find ourselves an appid */
170+ QString appid = decodeAppId(pathtemp);
171+ int index = m_launcherModel->findApplication(appid);
172+ LauncherItem *item = static_cast<LauncherItem*>(m_launcherModel->get(index));
173+
174+ QVariantList retval;
175+ if (message.member() == "Get") {
176+ if (!item) {
177+ return false;
178+ }
179+ if (message.arguments()[1].toString() == "count") {
180+ retval.append(QVariant::fromValue(QDBusVariant(item->count())));
181+ } else if (message.arguments()[1].toString() == "countVisible") {
182+ retval.append(QVariant::fromValue(QDBusVariant(item->countVisible())));
183+ }
184+ } else if (message.member() == "Set") {
185+ if (message.arguments()[1].toString() == "count") {
186+ int newCount = message.arguments()[2].toInt();
187+ if (!item || newCount != item->count()) {
188+ Q_EMIT countChanged(appid, newCount);
189+ emitPropChangedDbus(appid, "count", QVariant(newCount));
190+ }
191+ } else if (message.arguments()[1].toString() == "countVisible") {
192+ bool newVisible = message.arguments()[2].toBool();
193+ if (!item || newVisible != item->countVisible()) {
194+ Q_EMIT countVisibleChanged(appid, newVisible);
195+ emitPropChangedDbus(appid, "countVisible", newVisible);
196+ }
197+ }
198+ } else if (message.member() == "GetAll") {
199+ if (item) {
200+ QVariantMap all;
201+ all.insert("count", item->count());
202+ all.insert("countVisible", item->countVisible());
203+ retval.append(all);
204+ }
205+ } else {
206+ return false;
207+ }
208+
209+ QDBusMessage reply = message.createReply(retval);
210+ return connection.send(reply);
211+}
212+
213+void DBusInterface::emitPropChangedDbus(const QString& appId, const QString& property, const QVariant &value)
214+{
215+ QString path("/com/canonical/Unity/Launcher/");
216+ path.append(encodeAppId(appId));
217+
218+ QDBusMessage message = QDBusMessage::createSignal(path, "org.freedesktop.DBus.Properties", "PropertiesChanged");
219+
220+ QList<QVariant> arguments;
221+ QVariantHash changedprops;
222+ changedprops[property] = QVariant::fromValue(QDBusVariant(value));
223+ QVariantList deletedprops;
224+
225+ arguments.append(changedprops);
226+ arguments.append(deletedprops);
227+
228+ message.setArguments(arguments);
229+
230+ QDBusConnection con = QDBusConnection::sessionBus();
231+ con.send(message);
232+}
plugins/Unity/Launcher/dbusinterface.hnew file+50
@@ -0,0 +1,50 @@
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 "launcheritem.h"
21+
22+#include <QDBusVirtualObject>
23+
24+class LauncherModel;
25+
26+class DBusInterface: public QDBusVirtualObject
27+{
28+ Q_OBJECT
29+public:
30+ DBusInterface(LauncherModel *parent);
31+ ~DBusInterface();
32+
33+ // QDBusVirtualObject implementaition
34+ QString introspect (const QString &path) const override;
35+ bool handleMessage(const QDBusMessage& message, const QDBusConnection& connection) override;
36+
37+Q_SIGNALS:
38+ void countChanged(const QString &appId, int count);
39+ void countVisibleChanged(const QString &appId, bool countVisible);
40+ void refreshCalled();
41+
42+private:
43+ static QString decodeAppId(const QString& path);
44+ static QString encodeAppId(const QString& appId);
45+
46+ void emitPropChangedDbus(const QString& appId, const QString& property, const QVariant &value);
47+
48+ LauncherModel *m_launcherModel;
49+
50+};
plugins/Unity/Launcher/desktopfilehandler.cppnew file+151
@@ -0,0 +1,151 @@
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 << "";
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('/').first() + '/';
84+ helper.remove(QRegExp("^" + path));
85+ }
86+
87+ Q_FOREACH(const QString &searchDirName, searchDirs) {
88+ QDir searchDir(searchDirName + "/" + path);
89+ Q_FOREACH(const QString &desktopFile, searchDir.entryList(QStringList() << "*.desktop")) {
90+ if (desktopFile.startsWith(helper)) {
91+ QFileInfo fileInfo(searchDir, desktopFile);
92+ m_filename = fileInfo.absoluteFilePath();
93+ return;
94+ }
95+ }
96+ }
97+
98+ dashPos = helper.indexOf("-");
99+ } while (dashPos != -1);
100+}
101+
102+QString DesktopFileHandler::displayName() const
103+{
104+ if (!isValid()) {
105+ return QString();
106+ }
107+
108+ QSettings settings(m_filename, QSettings::IniFormat);
109+ settings.beginGroup("Desktop Entry");
110+
111+ // First try to find Name[xx_YY] and Name[xx] in .desktop file
112+ QString locale = QLocale::system().name();
113+ QString shortLocale = locale.split('_').first();
114+
115+ if (locale != shortLocale && settings.contains(QString("Name[%1]").arg(locale))) {
116+ return settings.value(QString("Name[%1]").arg(locale)).toString();
117+ }
118+
119+ if (settings.contains(QString("Name[%1]").arg(shortLocale))) {
120+ return settings.value(QString("Name[%1]").arg(shortLocale)).toString();
121+ }
122+
123+ // No translation found in desktop file. Get the untranslated one and have a go with gettext.
124+ QString displayName = settings.value("Name").toString();
125+
126+ if (settings.contains("X-Ubuntu-Gettext-Domain")) {
127+ const QString domain = settings.value("X-Ubuntu-Gettext-Domain").toString();
128+ return dgettext(domain.toUtf8().constData(), displayName.toUtf8().constData());
129+ }
130+
131+ return displayName;
132+}
133+
134+QString DesktopFileHandler::icon() const
135+{
136+ if (!isValid()) {
137+ return QString();
138+ }
139+
140+ QSettings settings(m_filename, QSettings::IniFormat);
141+ settings.beginGroup("Desktop Entry");
142+ QString iconString = settings.value("Icon").toString();
143+ QString pathString = settings.value("Path").toString();
144+
145+ if (QFileInfo(iconString).exists()) {
146+ return QFileInfo(iconString).absoluteFilePath();
147+ } else if (QFileInfo(pathString + '/' + iconString).exists()) {
148+ return pathString + '/' + iconString;
149+ }
150+ return "image://theme/" + iconString;
151+}
plugins/Unity/Launcher/desktopfilehandler.hnew file+56
@@ -0,0 +1,56 @@
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/gsettings.cppnew file+66
@@ -0,0 +1,66 @@
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 "gsettings.h"
21+
22+#include <QGSettings>
23+#include <QVariant>
24+
25+GSettings::GSettings(QObject *parent):
26+ QObject(parent)
27+{
28+
29+}
30+
31+QStringList GSettings::storedApplications() const
32+{
33+ QStringList storedApps;
34+
35+ QGSettings gSettings("com.canonical.Unity.Launcher", "/com/canonical/unity/launcher/");
36+
37+ Q_FOREACH(const QString &entry, gSettings.get("items").toStringList()) {
38+ if (entry.startsWith("application:///")) {
39+ // convert legacy entries to new world appids
40+ QString appId = entry;
41+ // Transform "application://foobar.desktop" to "foobar"
42+ appId.remove(QRegExp("^application:///"));
43+ appId.remove(QRegExp(".desktop$"));
44+ storedApps << appId;
45+ } else if (entry.startsWith("appid://")) {
46+ QString appId = entry;
47+ appId.remove("appid://");
48+ if (appId.split('/').count() == 3) {
49+ // Strip current-user-version in case its there
50+ appId = appId.split('/').first() + "_" + appId.split('/').at(1);
51+ }
52+ storedApps << appId;
53+ }
54+ }
55+ return storedApps;
56+}
57+
58+void GSettings::setStoredApplications(const QStringList &storedApplications)
59+{
60+ QGSettings gSettings("com.canonical.Unity.Launcher", "/com/canonical/unity/launcher/");
61+ QStringList gSettingsList;
62+ Q_FOREACH(const QString &entry, storedApplications) {
63+ gSettingsList << QString("appid://%1").arg(entry);
64+ }
65+ gSettings.set("items", gSettingsList);
66+}
plugins/Unity/Launcher/gsettings.hnew file+37
@@ -0,0 +1,37 @@
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 GSETTINGS_H
21+#define GSETTINGS_H
22+
23+#include <QObject>
24+#include <QStringList>
25+
26+
27+class GSettings: public QObject
28+{
29+ Q_OBJECT
30+public:
31+ GSettings(QObject *parent = nullptr);
32+
33+ QStringList storedApplications() const;
34+ void setStoredApplications(const QStringList &storedApplications);
35+};
36+
37+#endif
plugins/Unity/Launcher/launcheritem.cpp+31
@@ -32,10 +32,12 @@ LauncherItem::LauncherItem(const QString &appId, const QString &name, const QStr
3232 m_recent(false),
3333 m_progress(-1),
3434 m_count(0),
35+ m_countVisible(false),
3536 m_focused(false),
3637 m_quickList(new QuickListModel(this))
3738{
3839 QuickListEntry nameAction;
40+ nameAction.setActionId("launch_item");
3941 nameAction.setText(m_name);
4042 m_quickList->appendAction(nameAction);
4143 QuickListEntry pinningAction;
@@ -54,11 +56,27 @@ QString LauncherItem::name() const
5456 return m_name;
5557}
5658
59+void LauncherItem::setName(const QString &name)
60+{
61+ if (m_name != name) {
62+ m_name = name;
63+ Q_EMIT nameChanged(name);
64+ }
65+}
66+
5767QString LauncherItem::icon() const
5868{
5969 return m_icon;
6070}
6171
72+void LauncherItem::setIcon(const QString &icon)
73+{
74+ if (m_icon != icon) {
75+ m_icon = icon;
76+ Q_EMIT iconChanged(icon);
77+ }
78+}
79+
6280bool LauncherItem::pinned() const
6381{
6482 return m_pinned;
@@ -128,6 +146,19 @@ void LauncherItem::setCount(int count)
128146 }
129147}
130148
149+bool LauncherItem::countVisible() const
150+{
151+ return m_countVisible;
152+}
153+
154+void LauncherItem::setCountVisible(bool countVisible)
155+{
156+ if (m_countVisible != countVisible) {
157+ m_countVisible = countVisible;
158+ Q_EMIT countVisibleChanged(countVisible);
159+ }
160+}
161+
131162bool LauncherItem::focused() const
132163{
133164 return m_focused;
plugins/Unity/Launcher/launcheritem.h+19−20
@@ -34,34 +34,30 @@ class LauncherItem: public LauncherItemInterface
3434public:
3535 LauncherItem(const QString &appId, const QString &name, const QString &icon, QObject *parent = 0);
3636
37− QString appId() const;
38− QString name() const;
39− QString icon() const;
37+ QString appId() const override;
38+ QString name() const override;
39+ QString icon() const override;
40+ bool pinned() const override;
41+ bool running() const override;
42+ bool recent() const override;
43+ int progress() const override;
44+ int count() const override;
45+ bool countVisible() const override;
46+ bool focused() const override;
47+
48+ unity::shell::launcher::QuickListModelInterface *quickList() const override;
4049
41− bool pinned() const;
50+private:
51+ void setName(const QString &name);
52+ void setIcon(const QString &icon);
4253 void setPinned(bool pinned);
43−
44− bool running() const;
4554 void setRunning(bool running);
46−
47− bool recent() const;
4855 void setRecent(bool recent);
49−
50− int progress() const;
5156 void setProgress(int progress);
52−
53− int count() const;
5457 void setCount(int count);
55−
56− bool focused() const;
58+ void setCountVisible(bool countVisible);
5759 void setFocused(bool focused);
5860
59− unity::shell::launcher::QuickListModelInterface *quickList() const;
60−
61−Q_SIGNALS:
62− void favoriteChanged(bool favorite);
63− void runningChanged(bool running);
64−
6561private:
6662 QString m_appId;
6763 QString m_name;
@@ -71,8 +67,11 @@ private:
7167 bool m_recent;
7268 int m_progress;
7369 int m_count;
70+ bool m_countVisible;
7471 bool m_focused;
7572 QuickListModel *m_quickList;
73+
74+ friend class LauncherModel;
7675};
7776
7877#endif // LAUNCHERITEM_H
plugins/Unity/Launcher/launchermodel.cpp+88−15
@@ -19,26 +19,37 @@
1919
2020#include "launchermodel.h"
2121#include "launcheritem.h"
22−#include "backend/launcherbackend.h"
22+#include "gsettings.h"
23+#include "desktopfilehandler.h"
24+#include "dbusinterface.h"
2325
2426#include <unity/shell/application/ApplicationInfoInterface.h>
2527
28+#include <QDesktopServices>
2629#include <QDebug>
2730
2831using namespace unity::shell::application;
2932
3033LauncherModel::LauncherModel(QObject *parent):
3134 LauncherModelInterface(parent),
32− m_backend(new LauncherBackend(this)),
35+ m_settings(new GSettings(this)),
36+ m_dbusIface(new DBusInterface(this)),
3337 m_appManager(0)
3438{
35− connect(m_backend, SIGNAL(countChanged(QString,int)), SLOT(countChanged(QString,int)));
36− connect(m_backend, SIGNAL(progressChanged(QString,int)), SLOT(progressChanged(QString,int)));
39+ connect(m_dbusIface, &DBusInterface::countChanged, this, &LauncherModel::countChanged);
40+ connect(m_dbusIface, &DBusInterface::countVisibleChanged, this, &LauncherModel::countVisibleChanged);
41+ connect(m_dbusIface, &DBusInterface::refreshCalled, this, &LauncherModel::refresh);
42+
43+ Q_FOREACH (const QString &entry, m_settings->storedApplications()) {
44+ DesktopFileHandler desktopFile(entry);
45+ if (!desktopFile.isValid()) {
46+ qWarning() << "Couldn't find a .desktop file for" << entry << ". Skipping...";
47+ continue;
48+ }
3749
38− Q_FOREACH (const QString &entry, m_backend->storedApplications()) {
3950 LauncherItem *item = new LauncherItem(entry,
40− m_backend->displayName(entry),
41− m_backend->icon(entry),
51+ desktopFile.displayName(),
52+ desktopFile.icon(),
4253 this);
4354 item->setPinned(true);
4455 m_list.append(item);
@@ -72,6 +83,8 @@ QVariant LauncherModel::data(const QModelIndex &index, int role) const
7283 return item->pinned();
7384 case RoleCount:
7485 return item->count();
86+ case RoleCountVisible:
87+ return item->countVisible();
7588 case RoleProgress:
7689 return item->progress();
7790 case RoleFocused:
@@ -138,10 +151,17 @@ void LauncherModel::pin(const QString &appId, int index)
138151 if (index == -1) {
139152 index = m_list.count();
140153 }
154+
155+ DesktopFileHandler desktopFile(appId);
156+ if (!desktopFile.isValid()) {
157+ qWarning() << "Can't pin this application, there is no .destkop file available.";
158+ return;
159+ }
160+
141161 beginInsertRows(QModelIndex(), index, index);
142162 LauncherItem *item = new LauncherItem(appId,
143− m_backend->displayName(appId),
144− m_backend->icon(appId),
163+ desktopFile.displayName(),
164+ desktopFile.icon(),
145165 this);
146166 item->setPinned(true);
147167 m_list.insert(index, item);
@@ -191,28 +211,32 @@ void LauncherModel::quickListActionInvoked(const QString &appId, int actionIndex
191211 } else {
192212 pin(appId);
193213 }
214+ } else if (actionId == "launch_item") {
215+ QDesktopServices::openUrl(getUrlForAppId(appId));
194216
195217 // Nope, we don't know this action, let the backend forward it to the application
196218 } else {
197− m_backend->triggerQuickListAction(appId, actionId);
219+ // TODO: forward quicklist action to app, possibly via m_dbusIface
198220 }
199221 }
200222}
201223
202224void LauncherModel::setUser(const QString &username)
203225{
204− m_backend->setUser(username);
226+ Q_UNUSED(username)
227+ qWarning() << "This backend doesn't support multiple users";
205228}
206229
207230QString LauncherModel::getUrlForAppId(const QString &appId) const
208231{
209232 // appId is either an appId or a legacy app name. Let's find out which
210− if (appId.isEmpty())
233+ if (appId.isEmpty()) {
211234 return QString();
235+ }
212236
213− QString df = m_backend->desktopFile(appId + ".desktop");
214− if (!df.isEmpty())
237+ if (!appId.contains("_")) {
215238 return "application:///" + appId + ".desktop";
239+ }
216240
217241 QStringList parts = appId.split('_');
218242 QString package = parts.value(0);
@@ -272,7 +296,7 @@ void LauncherModel::storeAppList()
272296 appIds << item->appId();
273297 }
274298 }
275− m_backend->setStoredApplications(appIds);
299+ m_settings->setStoredApplications(appIds);
276300}
277301
278302int LauncherModel::findApplication(const QString &appId)
@@ -307,6 +331,55 @@ void LauncherModel::countChanged(const QString &appId, int count)
307331 }
308332}
309333
334+void LauncherModel::countVisibleChanged(const QString &appId, int countVisible)
335+{
336+ int idx = findApplication(appId);
337+ if (idx >= 0) {
338+ LauncherItem *item = m_list.at(idx);
339+ item->setCountVisible(countVisible);
340+ Q_EMIT dataChanged(index(idx), index(idx), QVector<int>() << RoleCountVisible);
341+
342+ // If countVisible goes to false, and the item is neither pinned nor recent we can drop it
343+ if (!countVisible && !item->pinned() && !item->recent()) {
344+ beginRemoveRows(QModelIndex(), idx, idx);
345+ m_list.takeAt(idx)->deleteLater();
346+ endRemoveRows();
347+ }
348+ } else {
349+ // Need to create a new LauncherItem and show the highlight
350+ DesktopFileHandler desktopFile(appId);
351+ if (countVisible && desktopFile.isValid()) {
352+ LauncherItem *item = new LauncherItem(appId,
353+ desktopFile.displayName(),
354+ desktopFile.icon());
355+ item->setCountVisible(true);
356+ beginInsertRows(QModelIndex(), m_list.count(), m_list.count());
357+ m_list.append(item);
358+ endInsertRows();
359+ }
360+ }
361+}
362+
363+void LauncherModel::refresh()
364+{
365+ QList<LauncherItem*> toBeRemoved;
366+ Q_FOREACH (LauncherItem* item, m_list) {
367+ DesktopFileHandler desktopFile(item->appId());
368+ if (!desktopFile.isValid()) {
369+ toBeRemoved << item;
370+ } else {
371+ int idx = m_list.indexOf(item);
372+ item->setName(desktopFile.displayName());
373+ item->setIcon(desktopFile.icon());
374+ Q_EMIT dataChanged(index(idx), index(idx), QVector<int>() << RoleName << RoleIcon);
375+ }
376+ }
377+
378+ Q_FOREACH (LauncherItem* item, toBeRemoved) {
379+ requestRemove(item->appId());
380+ }
381+}
382+
310383void LauncherModel::applicationAdded(const QModelIndex &parent, int row)
311384{
312385 Q_UNUSED(parent);
plugins/Unity/Launcher/launchermodel.h+15−8
@@ -20,15 +20,14 @@
2020#ifndef LAUNCHERMODEL_H
2121#define LAUNCHERMODEL_H
2222
23−// unity-api
2423#include <unity/shell/launcher/LauncherModelInterface.h>
2524#include <unity/shell/application/ApplicationManagerInterface.h>
2625
27−// Qt
2826#include <QAbstractListModel>
2927
3028class LauncherItem;
31−class LauncherBackend;
29+class GSettings;
30+class DBusInterface;
3231
3332using namespace unity::shell::launcher;
3433using namespace unity::shell::application;
@@ -41,14 +40,13 @@ public:
4140 LauncherModel(QObject *parent = 0);
4241 ~LauncherModel();
4342
44− int rowCount(const QModelIndex &parent) const;
43+ int rowCount(const QModelIndex &parent = QModelIndex()) const;
4544
4645 QVariant data(const QModelIndex &index, int role) const;
4746
4847 Q_INVOKABLE unity::shell::launcher::LauncherItemInterface* get(int index) const;
4948 Q_INVOKABLE void move(int oldIndex, int newIndex);
5049 Q_INVOKABLE void pin(const QString &appId, int index = -1);
51− Q_INVOKABLE void requestRemove(const QString &appId);
5250 Q_INVOKABLE void quickListActionInvoked(const QString &appId, int actionIndex);
5351 Q_INVOKABLE void setUser(const QString &username);
5452 Q_INVOKABLE QString getUrlForAppId(const QString &appId) const;
@@ -56,13 +54,19 @@ public:
5654 unity::shell::application::ApplicationManagerInterface* applicationManager() const;
5755 void setApplicationManager(unity::shell::application::ApplicationManagerInterface *appManager);
5856
57+ int findApplication(const QString &appId);
58+
59+public Q_SLOTS:
60+ void requestRemove(const QString &appId);
61+
5962private:
6063 void storeAppList();
61− int findApplication(const QString &appId);
6264
6365private Q_SLOTS:
64− void progressChanged(const QString &appId, int progress);
6566 void countChanged(const QString &appId, int count);
67+ void countVisibleChanged(const QString &appId, int count);
68+ void progressChanged(const QString &appId, int progress);
69+ void refresh();
6670
6771 void applicationAdded(const QModelIndex &parent, int row);
6872 void applicationRemoved(const QModelIndex &parent, int row);
@@ -70,7 +74,10 @@ private Q_SLOTS:
7074
7175private:
7276 QList<LauncherItem*> m_list;
73− LauncherBackend *m_backend;
77+
78+ GSettings *m_settings;
79+ DBusInterface *m_dbusIface;
80+
7481 ApplicationManagerInterface *m_appManager;
7582};
7683
plugins/Unity/Launcher/common/quicklistentry.cpp → plugins/Unity/Launcher/quicklistentry.cpprenamed

The content is the same.

plugins/Unity/Launcher/common/quicklistentry.h → plugins/Unity/Launcher/quicklistentry.hrenamed

The content is the same.

plugins/Unity/Launcher/quicklistmodel.h+1−1
@@ -20,7 +20,7 @@
2020#ifndef QUICKLISTMODEL_H
2121#define QUICKLISTMODEL_H
2222
23−#include "common/quicklistentry.h"
23+#include "quicklistentry.h"
2424
2525#include <unity/shell/launcher/QuickListModelInterface.h>
2626
plugins/Unity/Session/CMakeLists.txt+7
@@ -1,10 +1,16 @@
1+include(FindPkgConfig)
2+
3+pkg_search_module(GIO REQUIRED gio-2.0)
4+
15include_directories(
26 ${CMAKE_CURRENT_SOURCE_DIR}
7+ ${GIO_INCLUDE_DIRS}
38)
49
510set(QMLSESSIONPLUGIN_SRC
611 plugin.cpp
712 dbusunitysessionservice.cpp
13+ orientationlock.cpp
814 )
915
1016add_library(UnitySession-qml MODULE
@@ -12,6 +18,7 @@ add_library(UnitySession-qml MODULE
1218 )
1319
1420qt5_use_modules(UnitySession-qml DBus Qml)
21+target_link_libraries(UnitySession-qml ${GIO_LDFLAGS})
1522
1623# export the qmldir and qmltypes files
1724add_unity8_plugin(Unity.Session 0.1 Unity/Session TARGETS UnitySession-qml)
plugins/Unity/Session/orientationlock.cppnew file+74
@@ -0,0 +1,74 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software: you can redistribute it and/or modify it under
5+ * the terms of the GNU Lesser General Public License version 3, as published by
6+ * the Free Software Foundation.
7+ *
8+ * This program is distributed in the hope that it will be useful, but WITHOUT
9+ * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY,
10+ * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11+ * Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "orientationlock.h"
18+
19+#include <QDBusConnection>
20+#include <QDBusInterface>
21+
22+OrientationLock::OrientationLock(QObject *parent)
23+ : QObject(parent)
24+ , m_enabled(false)
25+ , m_savedOrientation(Qt::PortraitOrientation)
26+{
27+ m_systemSettings = g_settings_new("com.ubuntu.touch.system");
28+ g_signal_connect(m_systemSettings, "changed::rotation-lock",
29+ G_CALLBACK(OrientationLock::onEnabledChangedProxy), this);
30+ m_enabled = g_settings_get_boolean(m_systemSettings, "rotation-lock");
31+}
32+
33+OrientationLock::~OrientationLock()
34+{
35+ g_signal_handlers_disconnect_by_data(m_systemSettings, this);
36+ g_object_unref(m_systemSettings);
37+}
38+
39+bool OrientationLock::enabled() const
40+{
41+ return m_enabled;
42+}
43+
44+Qt::ScreenOrientation OrientationLock::savedOrientation() const
45+{
46+ return m_savedOrientation;
47+}
48+
49+void OrientationLock::onEnabledChangedProxy(GSettings */*settings*/, const gchar */*key*/, gpointer data)
50+{
51+ OrientationLock* _this = static_cast<OrientationLock*>(data);
52+ _this->onEnabledChanged();
53+}
54+
55+void OrientationLock::onEnabledChanged()
56+{
57+ const bool enabled = g_settings_get_boolean(m_systemSettings, "rotation-lock");
58+ if (m_enabled != enabled) {
59+ m_enabled = enabled;
60+ Q_EMIT enabledChanged();
61+ }
62+}
63+
64+void OrientationLock::setSavedOrientation(const Qt::ScreenOrientation orientation)
65+{
66+ if (orientation == m_savedOrientation) {
67+ return;
68+ }
69+
70+ m_savedOrientation = orientation;
71+
72+ //TODO - save value with dbus to persist over sessions
73+ Q_EMIT savedOrientationChanged();
74+}
plugins/Unity/Session/orientationlock.hnew file+60
@@ -0,0 +1,60 @@
1+/*
2+ * Copyright (C) 2014 Canonical, Ltd.
3+ *
4+ * This program is free software: you can redistribute it and/or modify it under
5+ * the terms of the GNU Lesser General Public License version 3, as published by
6+ * the Free Software Foundation.
7+ *
8+ * This program is distributed in the hope that it will be useful, but WITHOUT
9+ * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY,
10+ * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11+ * Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef ORIENTATIONLOCK_H
18+#define ORIENTATIONLOCK_H
19+
20+#include <gio/gio.h>
21+#include <QtCore/QObject>
22+
23+/**
24+ * @brief The OrientationLock class exports orientation lock related properties to QML
25+ * It has two properties:
26+ * - readonly boolean with the Orientation lock property state
27+ * - Qt::ScreenOrientation to save the locked orientation state across Sessions (only relevant if lock is true)
28+ */
29+class OrientationLock : public QObject
30+{
31+ Q_OBJECT
32+
33+ Q_PROPERTY(bool enabled READ enabled NOTIFY enabledChanged)
34+ Q_PROPERTY(Qt::ScreenOrientation savedOrientation READ savedOrientation WRITE setSavedOrientation
35+ NOTIFY savedOrientationChanged)
36+
37+public:
38+ explicit OrientationLock(QObject *parent = 0);
39+ ~OrientationLock();
40+
41+ bool enabled() const;
42+ Qt::ScreenOrientation savedOrientation() const;
43+ void setSavedOrientation(const Qt::ScreenOrientation orientation);
44+
45+Q_SIGNALS:
46+ void enabledChanged();
47+ void savedOrientationChanged();
48+
49+private Q_SLOTS:
50+ static void onEnabledChangedProxy(GSettings *settings, const gchar *key, gpointer data);
51+ void onEnabledChanged();
52+
53+private:
54+ GSettings *m_systemSettings;
55+
56+ bool m_enabled;
57+ Qt::ScreenOrientation m_savedOrientation;
58+};
59+
60+#endif // ORIENTATIONLOCK_H
plugins/Unity/Session/plugin.cpp+8−4
@@ -18,23 +18,27 @@
1818
1919#include "plugin.h"
2020#include "dbusunitysessionservice.h"
21+#include "orientationlock.h"
2122
2223#include <QAbstractItemModel>
2324#include <QDBusConnection>
2425#include <QtQml/qqml.h>
2526
26−static QObject *dbusunitysessionservice_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
27+static QObject *dbusunitysessionservice_provider(QQmlEngine */*engine*/, QJSEngine */*jsEngine*/)
2728{
28− Q_UNUSED(engine)
29− Q_UNUSED(scriptEngine)
30−
3129 return new DBusUnitySessionService();
3230}
3331
32+static QObject *orientationlock_provider(QQmlEngine */*engine*/, QJSEngine */*jsEngine*/)
33+{
34+ return new OrientationLock();
35+}
36+
3437void SessionPlugin::registerTypes(const char *uri)
3538{
3639 qmlRegisterType<QAbstractItemModel>();
3740
3841 Q_ASSERT(uri == QLatin1String("Unity.Session"));
3942 qmlRegisterSingletonType<DBusUnitySessionService>(uri, 0, 1, "DBusUnitySessionService", dbusunitysessionservice_provider);
43+ qmlRegisterSingletonType<OrientationLock>(uri, 0, 1, "OrientationLock", orientationlock_provider);
4044}
plugins/Utils/CMakeLists.txt+1
@@ -13,6 +13,7 @@ include_directories(
1313set(QMLPLUGIN_SRC
1414 qlimitproxymodelqml.cpp
1515 qsortfilterproxymodelqml.cpp
16+ relativetimeformatter.cpp
1617 timeformatter.cpp
1718 unitymenumodelpaths.cpp
1819 windowkeysfilter.cpp
plugins/Utils/plugin.cpp+2
@@ -28,6 +28,7 @@
2828// local
2929#include "qlimitproxymodelqml.h"
3030#include "qsortfilterproxymodelqml.h"
31+#include "relativetimeformatter.h"
3132#include "timeformatter.h"
3233#include "unitymenumodelpaths.h"
3334#include "windowkeysfilter.h"
@@ -44,6 +45,7 @@ void UtilsPlugin::registerTypes(const char *uri)
4445 qmlRegisterType<WindowKeysFilter>(uri, 0, 1, "WindowKeysFilter");
4546 qmlRegisterType<GDateTimeFormatter>(uri, 0, 1, "GDateTimeFormatter");
4647 qmlRegisterType<EasingCurve>(uri, 0, 1, "EasingCurve");
48+ qmlRegisterType<RelativeTimeFormatter>(uri, 0, 1, "RelativeTimeFormatter");
4749}
4850
4951void UtilsPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
plugins/Utils/relativetimeformatter.cppnew file+268
@@ -0,0 +1,268 @@
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 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+// Local
19+#include "relativetimeformatter.h"
20+
21+// Qt
22+#include <QDateTime>
23+
24+// Other
25+#include <glib.h>
26+#include <glib/gi18n.h>
27+#include <locale.h>
28+#include <langinfo.h>
29+#include <string.h>
30+
31+RelativeTimeFormatter::RelativeTimeFormatter(QObject *parent)
32+ : GDateTimeFormatter(parent)
33+{
34+}
35+
36+ /* Check the system locale setting to see if the format is 24-hour
37+ time or 12-hour time */
38+gboolean
39+is_locale_12h(void)
40+{
41+ int i;
42+ static const char *formats_24h[] = {"%H", "%R", "%T", "%OH", "%k", nullptr};
43+ const char* t_fmt = nl_langinfo(T_FMT);
44+
45+ for (i=0; formats_24h[i]!=nullptr; i++)
46+ if (strstr(t_fmt, formats_24h[i]) != nullptr)
47+ return FALSE;
48+
49+ return TRUE;
50+}
51+
52+typedef enum
53+{
54+ DATE_PROXIMITY_YESTERDAY,
55+ DATE_PROXIMITY_TODAY,
56+ DATE_PROXIMITY_TOMORROW,
57+ DATE_PROXIMITY_LAST_WEEK,
58+ DATE_PROXIMITY_NEXT_WEEK,
59+ DATE_PROXIMITY_FAR
60+} date_proximity_t;
61+
62+static date_proximity_t
63+getDateProximity(GDateTime* now, GDateTime* time)
64+{
65+ date_proximity_t prox = DATE_PROXIMITY_FAR;
66+ gint now_year, now_month, now_day;
67+ gint time_year, time_month, time_day;
68+
69+ // does it happen today?
70+ g_date_time_get_ymd(now, &now_year, &now_month, &now_day);
71+ g_date_time_get_ymd(time, &time_year, &time_month, &time_day);
72+ if ((now_year == time_year) && (now_month == time_month) && (now_day == time_day)) {
73+ return DATE_PROXIMITY_TODAY;
74+ }
75+
76+ // did it happen yesterday?
77+ GDateTime* tomorrow = g_date_time_add_days(now, -1);
78+ gint tom_year, tom_month, tom_day;
79+ g_date_time_get_ymd(tomorrow, &tom_year, &tom_month, &tom_day);
80+ g_date_time_unref(tomorrow);
81+ if ((tom_year == time_year) && (tom_month == time_month) && (tom_day == time_day)) {
82+ return DATE_PROXIMITY_YESTERDAY;
83+ }
84+
85+ // does it happen tomorrow?
86+ if (prox == DATE_PROXIMITY_FAR)
87+ {
88+ GDateTime* tomorrow = g_date_time_add_days(now, 1);
89+
90+ gint tom_year, tom_month, tom_day;
91+ g_date_time_get_ymd(tomorrow, &tom_year, &tom_month, &tom_day);
92+ g_date_time_unref(tomorrow);
93+ if ((tom_year == time_year) && (tom_month == time_month) && (tom_day == time_day)) {
94+ return DATE_PROXIMITY_TOMORROW;
95+ }
96+ }
97+
98+ // does it happen this week?
99+ if (prox == DATE_PROXIMITY_FAR) {
100+ if (g_date_time_compare(time, now) < 0) {
101+ GDateTime* last_week = g_date_time_add_days(now, -6);
102+ GDateTime* last_week_bound = g_date_time_new_local(g_date_time_get_year(last_week),
103+ g_date_time_get_month(last_week),
104+ g_date_time_get_day_of_month(last_week),
105+ 0, 0, 0);
106+ if (g_date_time_compare(time, last_week_bound) >= 0)
107+ prox = DATE_PROXIMITY_LAST_WEEK;
108+
109+ g_date_time_unref(last_week);
110+ g_date_time_unref(last_week_bound);
111+ } else {
112+ GDateTime* next_week = g_date_time_add_days(now, 6);
113+ GDateTime* next_week_bound = g_date_time_new_local(g_date_time_get_year(next_week),
114+ g_date_time_get_month(next_week),
115+ g_date_time_get_day_of_month(next_week),
116+ 23, 59, 59.9);
117+ if (g_date_time_compare(time, next_week_bound) <= 0)
118+ prox = DATE_PROXIMITY_NEXT_WEEK;
119+
120+ g_date_time_unref(next_week);
121+ g_date_time_unref(next_week_bound);
122+ }
123+
124+ }
125+
126+ return prox;
127+}
128+
129+const char*
130+dgettext_datetime(const char *text)
131+{
132+ return dgettext("indicator-datetime", text);
133+}
134+
135+/**
136+ * _ a time yesterday should be shown as (e.g. “Yesterday 3:55 PM”)
137+ * _ a time today should be shown as just the time (e.g. “3:55 PM”)
138+ * _ a time tomorrow should be shown as(e.g. “Tomorrow 3:55 PM”)
139+ * _ a time any other day this week should be shown as the short version of the
140+ * day and time (e.g. “Wed 3:55 PM”)
141+ * weekday (e.g. “Friday”)
142+ * _ a time after this week should be shown as the short version of the day,
143+ * date, and time (e.g. “Wed 21 Apr 3:55 PM”)
144+ * _ in addition, when presenting the times of upcoming events, the time should
145+ * be followed by the timezone if it is different from the one the computer
146+ * is currently set to. For example, “Wed 3:55 PM UTC−5”.
147+ *
148+ * TODO - keep inline with indicator-datetime
149+ */
150+char* generate_full_format_string_at_time (GDateTime* now,
151+ GDateTime* then)
152+{
153+ GString* ret = g_string_new (nullptr);
154+
155+ if (then != nullptr) {
156+ const date_proximity_t prox = getDateProximity(now, then);
157+
158+ if (is_locale_12h()) {
159+ switch (prox) {
160+ case DATE_PROXIMITY_YESTERDAY:
161+ /* Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
162+ This format string is used for showing, on a 12-hour clock, times that happen yesterday.
163+ (\u2003 is a unicode em space which is slightly wider than a normal space.)
164+ en_US example: "Yesterday\u2003%l:%M %p" --> "Yesterday 1:00 PM" */
165+ g_string_assign (ret, dgettext_datetime("Yesterday\u2003%l:%M %p"));
166+ break;
167+
168+ case DATE_PROXIMITY_TODAY:
169+ /* Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
170+ This format string is used for showing, on a 12-hour clock, times that happened today.
171+ en_US example: "%l:%M %p" --> "1:00 PM" */
172+ g_string_assign (ret, dgettext_datetime("%l:%M %p"));
173+ break;
174+
175+ case DATE_PROXIMITY_TOMORROW:
176+ /* Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
177+ This format string is used for showing, on a 12-hour clock, events/appointments that happen tomorrow.
178+ (\u2003 is a unicode em space which is slightly wider than a normal space.)
179+ en_US example: "Tomorrow\u2003%l:%M %p" --> "Tomorrow 1:00 PM" */
180+ g_string_assign (ret, dgettext_datetime("Tomorrow\u2003%l:%M %p"));
181+ break;
182+
183+ case DATE_PROXIMITY_LAST_WEEK:
184+ case DATE_PROXIMITY_NEXT_WEEK:
185+ /* Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
186+ This format string is used for showing, on a 12-hour clock, times that happened in the last week.
187+ (\u2003 is a unicode em space which is slightly wider than a normal space.)
188+ en_US example: "%a\u2003%l:%M %p" --> "Fri 1:00 PM" */
189+ g_string_assign (ret, dgettext_datetime("%a\u2003%l:%M %p"));
190+ break;
191+
192+ case DATE_PROXIMITY_FAR:
193+ /* Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
194+ This format string is used for showing, on a 12-hour clock, times that happened before a week from now.
195+ (\u2003 is a unicode em space which is slightly wider than a normal space.)
196+ en_US example: "%a %d %b\u2003%l:%M %p" --> "Fri Oct 31 1:00 PM"
197+ en_GB example: "%a %b %d\u2003%l:%M %p" --> "Fri 31 Oct 1:00 PM" */
198+ g_string_assign (ret, dgettext_datetime("%a %d %b\u2003%l:%M %p"));
199+ break;
200+ }
201+ } else {
202+ switch (prox) {
203+
204+ case DATE_PROXIMITY_YESTERDAY:
205+ /* Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
206+ This format string is used for showing, on a 24-hour clock, times that happen yesterday.
207+ (\u2003 is a unicode em space which is slightly wider than a normal space.)
208+ en_US example: "Yesterday\u2003%l:%M %p" --> "Yesterday 13:00" */
209+ g_string_assign (ret, dgettext_datetime("Yesterday\u2003%H:%M"));
210+ break;
211+
212+ case DATE_PROXIMITY_TODAY:
213+ /* Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
214+ This format string is used for showing, on a 24-hour clock, times that happened today.
215+ en_US example: "%H:%M" --> "13:00" */
216+ g_string_assign (ret, dgettext_datetime("%H:%M"));
217+ break;
218+
219+ case DATE_PROXIMITY_TOMORROW:
220+ /* Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
221+ This format string is used for showing, on a 24-hour clock, events/appointments that happen tomorrow.
222+ (\u2003 is a unicode em space which is slightly wider than a normal space.)
223+ en_US example: "Tomorrow\u2003%l:%M %p" --> "Tomorrow 13:00" */
224+ g_string_assign (ret, dgettext_datetime("Tomorrow\u2003%H:%M"));
225+ break;
226+
227+ case DATE_PROXIMITY_LAST_WEEK:
228+ case DATE_PROXIMITY_NEXT_WEEK:
229+ /* Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
230+ This format string is used for showing, on a 24-hour clock, times that happened in the last week.
231+ (\u2003 is a unicode em space which is slightly wider than a normal space.)
232+ en_US example: "%a\u2003%H:%M" --> "Fri 13:00" */
233+ g_string_assign (ret, dgettext_datetime("%a\u2003%H:%M"));
234+ break;
235+
236+ case DATE_PROXIMITY_FAR:
237+ /* Translators, please edit/rearrange these strftime(3) tokens to suit your locale!
238+ This format string is used for showing, on a 24-hour clock, times that happened before a week from now.
239+ (\u2003 is a unicode em space which is slightly wider than a normal space.)
240+ en_US example: "%a %d %b\u2003%H:%M" --> "Fri Oct 31 13:00"
241+ en_GB example: "%a %b %d\u2003%H:%M" --> "Fri 31 Oct 13:00" */
242+ g_string_assign (ret, dgettext_datetime("%a %d %b\u2003%H:%M"));
243+ break;
244+ }
245+ }
246+ }
247+
248+ return g_string_free (ret, FALSE);
249+}
250+
251+QString RelativeTimeFormatter::format() const
252+{
253+ GDateTime* now = g_date_time_new_from_unix_utc(QDateTime::currentMSecsSinceEpoch() / 1000);
254+ if (!now) { return QString(); }
255+
256+ GDateTime* then = g_date_time_new_from_unix_local(time());
257+ if (!then) { return QString(); }
258+
259+ char* time_format = generate_full_format_string_at_time(now, then);
260+
261+ QString str(QString::fromUtf8(time_format));
262+ g_free(time_format);
263+
264+ g_date_time_unref(now);
265+ g_date_time_unref(then);
266+
267+ return str;
268+}
plugins/Utils/relativetimeformatter.hnew file+34
@@ -0,0 +1,34 @@
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 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 RELATIVETIMEFORMATTER_H
19+#define RELATIVETIMEFORMATTER_H
20+
21+#include "timeformatter.h"
22+
23+// TODO - move this to the sdk
24+// https://blueprints.launchpad.net/ubuntu-ui-toolkit/+spec/time-formatter
25+class RelativeTimeFormatter : public GDateTimeFormatter
26+{
27+ Q_OBJECT
28+public:
29+ RelativeTimeFormatter(QObject *parent = 0);
30+
31+ QString format() const override;
32+};
33+
34+#endif // RELATIVETIMEFORMATTER_H
plugins/Utils/timeformatter.cpp+6−1
@@ -121,6 +121,11 @@ TimeFormatter::TimeFormatter(QObject *parent): QObject(parent)
121121 g_bus_get (G_BUS_TYPE_SYSTEM, priv->cancellable, got_bus, priv);
122122}
123123
124+TimeFormatter::TimeFormatter(const QString &initialFormat, QObject *parent): TimeFormatter(parent)
125+{
126+ priv->format = initialFormat;
127+}
128+
124129TimeFormatter::~TimeFormatter()
125130{
126131 if (priv->system_bus) {
@@ -177,7 +182,7 @@ QString TimeFormatter::formatTime() const
177182}
178183
179184GDateTimeFormatter::GDateTimeFormatter(QObject* parent)
180−: TimeFormatter(parent)
185+: TimeFormatter("%d-%m-%Y %I:%M%p", parent)
181186{
182187}
183188
plugins/Utils/timeformatter.h+3−1
@@ -33,7 +33,7 @@ public:
3333 TimeFormatter(QObject *parent = 0);
3434 virtual ~TimeFormatter();
3535
36− QString format() const;
36+ virtual QString format() const;
3737 QString timeString() const;
3838 qint64 time() const;
3939
@@ -48,6 +48,8 @@ Q_SIGNALS:
4848 void timeChanged(qint64 time);
4949
5050protected:
51+ TimeFormatter(const QString &initialFormat, QObject *parent = 0);
52+
5153 virtual QString formatTime() const;
5254
5355private:
plugins/Utils/windowkeysfilter.cpp+1
@@ -31,6 +31,7 @@ bool WindowKeysFilter::eventFilter(QObject *watched, QEvent *event)
3131{
3232 Q_ASSERT(!m_filteredWindow.isNull());
3333 Q_ASSERT(watched == static_cast<QObject*>(m_filteredWindow.data()));
34+ Q_UNUSED(watched);
3435
3536 if (event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease) {
3637 // Let QML see this event and decide if it does not want it
po/am.po+122−99
@@ -7,78 +7,104 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-08-23 17:14+0000\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
11+"PO-Revision-Date: 2014-10-08 00:48+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"
17−"X-Launchpad-Export-Date: 2014-08-28 06:29+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=2; plural=n > 1;\n"
18+"X-Launchpad-Export-Date: 2014-10-09 06:36+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
2223msgstr "የ መግቢያ ቃል: "
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr "አቋራጭ ማጣበቂያ"
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr "አቋራጭ መለያያ"
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr "አካሉ ተቆልፏል"
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr "ብዙ ጊዜ የተሳሳተ የ ማለፊያ ሀረግ ለማስገባት በ መሞከር ምክንያት ስልኩ ተቆልፏል"
41+
42+#: qml/Components/DelayedLockscreen.qml:63
43+msgid "You have been locked out due to too many failed passcode attempts."
44+msgstr "ብዙ ጊዜ የተሳሳተ የ ማለፊያ ኮድ ለማስገባት በ መሞከር ምክንያት ስልኩ ተቆልፏል"
45+
46+#: qml/Components/DelayedLockscreen.qml:72
47+#, qt-format
48+msgid "Please wait %1 minute and then try again…"
49+msgid_plural "Please wait %1 minutes and then try again…"
50+msgstr[0] "እባክዎን ይቆዩ %1 ደቂቃ እና ከዛ እንደ ገና ይምክሩ…"
51+msgstr[1] "እባክዎን ይቆዩ %1 ደቂቃዎች እና ከዛ እንደ ገና ይምክሩ…"
52+
3353#: qml/Components/Dialogs.qml:70
3454msgid "Log out"
35−msgstr ""
55+msgstr "መውጫ"
3656
3757#: qml/Components/Dialogs.qml:71
3858msgid "Are you sure you want to log out?"
39−msgstr ""
59+msgstr "በእርግጥ መውጣት ይፈልጋሉ?"
4060
4161#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4262#: qml/Components/Dialogs.qml:122
4363msgid "No"
44−msgstr ""
64+msgstr "አይ"
4565
4666#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4767#: qml/Components/Dialogs.qml:129
4868msgid "Yes"
49−msgstr ""
69+msgstr "አዎ"
5070
5171#: qml/Components/Dialogs.qml:94
5272msgid "Shut down"
53−msgstr ""
73+msgstr "ማጥፊያ"
5474
5575#: qml/Components/Dialogs.qml:95
5676msgid "Are you sure you want to shut down?"
57−msgstr ""
77+msgstr "በእርግጥ ማጥፋት ይፈልጋሉ?"
5878
5979#: qml/Components/Dialogs.qml:119
6080msgid "Reboot"
61−msgstr ""
81+msgstr "እንደገና ማስነሻ"
6282
6383#: qml/Components/Dialogs.qml:120
6484msgid "Are you sure you want to reboot?"
65−msgstr ""
85+msgstr "በእርግጥ እንደገና ማስነሳት ይፈልጋሉ?"
6686
6787#: qml/Components/Dialogs.qml:144
6888msgid "Power"
69−msgstr ""
89+msgstr "ሐይል"
7090
7191#: qml/Components/Dialogs.qml:145
7292msgid ""
7393"Are you sure you would like\n"
7494"to power off?"
7595msgstr ""
96+"በእርግጥ ሐይሉን ማጥፋት\n"
97+"ይፈልጋሉ?"
7698
77−#: qml/Components/Dialogs.qml:144
99+#: qml/Components/Dialogs.qml:147
78100msgid "Power off"
79101msgstr "ማጥፊያ"
80102
81−#: qml/Components/Dialogs.qml:162
103+#: qml/Components/Dialogs.qml:157
104+msgid "Restart"
105+msgstr "እንደገና ማስጀመሪያ"
106+
107+#: qml/Components/Dialogs.qml:167
82108msgid "Cancel"
83109msgstr "መሰረዣ"
84110
@@ -127,61 +153,46 @@ msgid ""
127153"You have now mastered the edge gestures and can start using the "
128154"phone<br><br>Tap on the screen to start"
129155msgstr ""
156+"አሁን የ ጠርዝ እንቅስቃሴን አውቀዋል እና መጀመር ይችላሉ ስልኩን መጠቀም <br><br>መመልከቻውን መታ ያድርጉ ለመጀመር"
130157
131−#: qml/Components/Lockscreen.qml:167
132−msgid "Please wait"
133−msgstr "እባክዎን ይቆዩ"
134−
135−#: qml/Components/Lockscreen.qml:172
136−msgid "Too many incorrect attempts"
137−msgstr "በርካታ የተሳሳቱ ሙከራዎች"
138−
139−#: qml/Components/Lockscreen.qml:206
158+#: qml/Components/Lockscreen.qml:220
140159msgid "Emergency Call"
141160msgstr "የ ድንገተኛ ጥሪ"
142161
143−#: qml/Components/Lockscreen.qml:226
162+#: qml/Components/Lockscreen.qml:252
144163msgid "OK"
145164msgstr "እሺ"
146165
147−#: qml/Components/PassphraseLockscreen.qml:61
148−#, qt-format
149−msgid "Hello %1"
150−msgstr "ሰላም %1"
151−
152−#: qml/Components/PassphraseLockscreen.qml:61
153−msgid "Hello"
154−msgstr "ሰላም"
155−
156−#: qml/Dash/GenericScopeView.qml:361
166+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
157167msgid "See less"
158168msgstr "አነስተኛ መመልከቻ"
159169
160−#: qml/Dash/GenericScopeView.qml:361
170+#: qml/Dash/GenericScopeView.qml:434
161171msgid "See all"
162172msgstr "ሁሉንም መመልከቻ"
163173
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
174+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
175+#: qml/Panel/SearchIndicator.qml:27
165176msgid "Search"
166177msgstr "መፈለጊያ"
167178
168−#: qml/Dash/PageHeader.qml:270
179+#: qml/Dash/PageHeader.qml:268
169180msgid "Settings"
170−msgstr ""
181+msgstr "ማሰናጃ"
171182
172−#: qml/Dash/PageHeader.qml:279
183+#: qml/Dash/PageHeader.qml:275
173184msgid "Remove from Favorites"
174−msgstr ""
185+msgstr "ከምወዳቸው ማስወገጃ"
175186
176−#: qml/Dash/PageHeader.qml:279
187+#: qml/Dash/PageHeader.qml:275
177188msgid "Add to Favorites"
178−msgstr ""
189+msgstr "ወደምወዳቸው መጨመሪያ"
179190
180−#: qml/Dash/Previews/PreviewActionCombo.qml:34
191+#: qml/Dash/Previews/PreviewActionCombo.qml:35
181192msgid "More..."
182193msgstr "ተጨማሪ..."
183194
184−#: qml/Dash/Previews/PreviewActionCombo.qml:34
195+#: qml/Dash/Previews/PreviewActionCombo.qml:35
185196msgid "Less..."
186197msgstr "አነስተኛ..."
187198
@@ -197,15 +208,23 @@ msgstr "ግምገማ መጨመሪያ"
197208msgid "Send"
198209msgstr "መላኪያ"
199210
200−#: qml/Dash/ScopesOverview.qml:201
201−msgid "Manage Dash"
202−msgstr ""
211+#: qml/Dash/PullToRefreshScopeStyle.qml:55
212+msgid "Pull to refresh…"
213+msgstr "ይሳቡ ለማነቃቃት…"
214+
215+#: qml/Dash/PullToRefreshScopeStyle.qml:60
216+msgid "Release to refresh…"
217+msgstr "ይልቀቁ ለማነቃቃት…"
203218
204−#: qml/Dash/ScopesOverview.qml:408
219+#: qml/Dash/ScopesOverview.qml:206
220+msgid "Manage Scopes"
221+msgstr "የ ክልል አስተዳዳሪ"
222+
223+#: qml/Dash/ScopesOverview.qml:428
205224msgid "Done"
206225msgstr "ጨርሷል"
207226
208−#: qml/Dash/ScopesOverview.qml:434
227+#: qml/Dash/ScopesOverview.qml:454
209228msgid "Store"
210229msgstr "ማስቀመጫ"
211230
@@ -218,10 +237,10 @@ msgid "All"
218237msgstr "ሁሉንም"
219238
220239#: qml/Greeter/Greeter.qml:157
221−msgid "Swipe to unlock"
222−msgstr "ለመክፈት ይጥረጉ"
240+msgid "Unlock"
241+msgstr "መክፈቻ"
223242
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
243+#: qml/Hud/HudParametrizedActionsPage.qml:139
225244msgid "Confirm"
226245msgstr "ማረጋገጫ"
227246
@@ -241,18 +260,10 @@ msgstr "አሁን ይናገሩ..."
241260msgid "Speaking..."
242261msgstr "በመናገር ላይ..."
243262
244−#: qml/Notifications/NotificationMenuItemFactory.qml:105
263+#: qml/Notifications/NotificationMenuItemFactory.qml:116
245264msgid "Show password"
246265msgstr "የመግቢያ ቃል ማሳያ"
247266
248−#: qml/Notifications/NotificationMenuItemFactory.qml:120
249−msgid "Enter SIM PIN"
250−msgstr ""
251−
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
253−msgid "Sorry, incorrect PIN"
254−msgstr ""
255−
256267#: qml/Panel/ActiveCallHint.qml:77
257268msgid "Tap to return to call..."
258269msgstr "ወደ ጥሪው ለመመለስ መታ ያድርጉ..."
@@ -261,90 +272,102 @@ msgstr "ወደ ጥሪው ለመመለስ መታ ያድርጉ..."
261272msgid "Conference"
262273msgstr "ስብሰባ"
263274
264−#: qml/Panel/Indicators/MenuItemFactory.qml:651
275+#: qml/Panel/Indicators/MenuItemFactory.qml:600
276+msgid "Nothing is playing"
277+msgstr "ምንም አይጫወትም"
278+
279+#: qml/Panel/Indicators/MenuItemFactory.qml:748
265280msgid "In queue…"
266281msgstr "ወረፋ በመጠበቅ ላይ…"
267282
268−#: qml/Panel/Indicators/MenuItemFactory.qml:655
283+#: qml/Panel/Indicators/MenuItemFactory.qml:752
269284msgid "Downloading"
270285msgstr "በማውረድ ላይ"
271286
272−#: qml/Panel/Indicators/MenuItemFactory.qml:657
287+#: qml/Panel/Indicators/MenuItemFactory.qml:754
273288msgid "Paused, tap to resume"
274289msgstr "ማስቆሚያ: ለመቀጠል መታ ያድርጉ"
275290
276−#: qml/Panel/Indicators/MenuItemFactory.qml:659
291+#: qml/Panel/Indicators/MenuItemFactory.qml:756
277292msgid "Canceled"
278293msgstr "ተሰርዟል"
279294
280−#: qml/Panel/Indicators/MenuItemFactory.qml:661
295+#: qml/Panel/Indicators/MenuItemFactory.qml:758
281296msgid "Finished"
282297msgstr "ጨርሷል"
283298
284−#: qml/Panel/Indicators/MenuItemFactory.qml:663
299+#: qml/Panel/Indicators/MenuItemFactory.qml:760
285300msgid "Failed, tap to retry"
286301msgstr "አልተቻለም: እንደገና ለመሞከር መታ ያድርጉ"
287302
288303#: qml/Panel/Indicators/ModemInfoItem.qml:105
289304msgid "Unlock SIM"
290−msgstr ""
305+msgstr "ሲም መክፈቻ"
291306
292307#: qml/Panel/Indicators/RoamingIndication.qml:27
293308msgid "Roaming"
294−msgstr ""
309+msgstr "ማዘዋወሪያ"
295310
296−#: qml/Shell.qml:266
297−msgid "Enter your passphrase"
298−msgstr ""
311+#: qml/Shell.qml:346
312+msgid "Enter passphrase"
313+msgstr "የ ማለፊያ ሀረግ ያስገቡ"
299314
300−#: qml/Shell.qml:267
315+#: qml/Shell.qml:347
301316msgid "Sorry, incorrect passphrase"
302−msgstr ""
317+msgstr "አዝናለሁ የተሳሳተ የማለፊያ ሐረግ"
303318
304−#: qml/Shell.qml:282
305−msgid "Enter your passcode"
306−msgstr ""
319+#: qml/Shell.qml:348
320+msgid "Please re-enter"
321+msgstr "እባክዎን እንደገና-ያስገቡ"
322+
323+#: qml/Shell.qml:350
324+msgid "Enter passcode"
325+msgstr "የ ማለፊያ ኮድ ያስገቡ"
307326
308−#: qml/Shell.qml:283
327+#: qml/Shell.qml:351
309328msgid "Sorry, incorrect passcode"
310−msgstr ""
329+msgstr "አዝናለሁ የተሳሳተ የማለፊያ ኮድ"
311330
312−#: qml/Shell.qml:273
331+#: qml/Shell.qml:354
313332#, qt-format
314−msgid "Enter your %1"
315−msgstr "ያስገቡ የ እርስዎን %1"
333+msgid "Enter %1"
334+msgstr "ማስገቢያ %1"
316335
317−#: qml/Shell.qml:274
336+#: qml/Shell.qml:355
318337#, qt-format
319338msgid "Sorry, incorrect %1"
320339msgstr "አዝናለሁ: የተሳሳተ%1"
321340
322−#: qml/Shell.qml:310
341+#: qml/Shell.qml:390
323342msgid "Sorry, incorrect passphrase."
324−msgstr ""
343+msgstr "አዝናለሁ የተሳሳተ የማለፊያ ሐረግ"
325344
326−#: qml/Shell.qml:311
345+#: qml/Shell.qml:391
327346msgid "Sorry, incorrect passcode."
328−msgstr ""
347+msgstr "አዝናለሁ የተሳሳተ የማለፊያ ኮድ"
329348
330−#: qml/Shell.qml:312
349+#: qml/Shell.qml:392
331350msgid "This will be your last attempt."
332351msgstr "ይህ የመጨረሻ ሙከራዎ ነው"
333352
334−#: qml/Shell.qml:314
353+#: qml/Shell.qml:394
335354msgid ""
336355"If passphrase is entered incorrectly, your phone will conduct a factory "
337356"reset and all personal data will be deleted."
338357msgstr ""
358+"የተሳሳተ የማለፊያ ሐረግ ካስገቡ የ እርስዎ ስልክ ወደ ነበረበት ወደ ፋክቶሪው ዘዴ ይመለሳል: እና የ ግል ዳታ በሙሉ "
359+"ይጠፋል"
339360
340−#: qml/Shell.qml:315
361+#: qml/Shell.qml:395
341362msgid ""
342363"If passcode is entered incorrectly, your phone will conduct a factory reset "
343364"and all personal data will be deleted."
344365msgstr ""
366+"የተሳሳተ የማለፊያ ኮድ ካስገቡ የ እርስዎ ስልክ ወደ ነበረበት ወደ ፋክቶሪው ዘዴ ይመለሳል: እና የ ግል ዳታ በሙሉ "
367+"ይጠፋል"
345368
346−#~ msgid "Restart"
347−#~ msgstr "እንደገና ማስጀመሪያ"
369+#~ msgid "Sorry, incorrect PIN"
370+#~ msgstr "አዝናለሁ የተሳሳተ ፒን"
348371
349−#~ msgid "Are you sure you would like to turn power off?"
350−#~ msgstr "በእርግጥ ሐይሉን ማጥፋት ይፈልጋሉ"
372+#~ msgid "Enter SIM PIN"
373+#~ msgstr "ሲም ፒን ያስገቡ"
po/ar.po+89−72
@@ -7,29 +7,50 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
1111"PO-Revision-Date: 2014-05-22 08:22+0000\n"
1212"Last-Translator: Ibrahim Saed <ibraheem5000@gmail.com>\n"
1313"Language-Team: Arabic <ar@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:29+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= "
18+"3 && n % 100 <= 10 ? 3 : n % 100 >= 11 && n % 100 <= 99 ? 4 : 5;\n"
19+"X-Launchpad-Export-Date: 2014-10-09 06:36+0000\n"
20+"X-Generator: Launchpad (build 17196)\n"
1921
20−#: plugins/LightDM/Greeter.cpp:129
22+#: plugins/LightDM/Greeter.cpp:130
2123msgid "Password: "
2224msgstr ""
2325
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
26+#: plugins/Unity/Launcher/launcheritem.cpp:45
27+#: plugins/Unity/Launcher/launcheritem.cpp:91
2628msgid "Pin shortcut"
2729msgstr ""
2830
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
31+#: plugins/Unity/Launcher/launcheritem.cpp:91
3032msgid "Unpin shortcut"
3133msgstr ""
3234
35+#: qml/Components/DelayedLockscreen.qml:47
36+msgid "Device Locked"
37+msgstr ""
38+
39+#: qml/Components/DelayedLockscreen.qml:62
40+msgid "You have been locked out due to too many failed passphrase attempts."
41+msgstr ""
42+
43+#: qml/Components/DelayedLockscreen.qml:63
44+msgid "You have been locked out due to too many failed passcode attempts."
45+msgstr ""
46+
47+#: qml/Components/DelayedLockscreen.qml:72
48+#, qt-format
49+msgid "Please wait %1 minute and then try again…"
50+msgid_plural "Please wait %1 minutes and then try again…"
51+msgstr[0] ""
52+msgstr[1] ""
53+
3354#: qml/Components/Dialogs.qml:70
3455msgid "Log out"
3556msgstr ""
@@ -74,11 +95,15 @@ msgid ""
7495"to power off?"
7596msgstr ""
7697
77−#: qml/Components/Dialogs.qml:144
98+#: qml/Components/Dialogs.qml:147
7899msgid "Power off"
79100msgstr ""
80101
81−#: qml/Components/Dialogs.qml:162
102+#: qml/Components/Dialogs.qml:157
103+msgid "Restart"
104+msgstr ""
105+
106+#: qml/Components/Dialogs.qml:167
82107msgid "Cancel"
83108msgstr ""
84109
@@ -131,60 +156,44 @@ msgstr ""
131156"أنت الآن بارع في إيماءات الحواف ويمكنك البدء باستخدام هاتفك<br><br>انقر على "
132157"الشاشة للبدء"
133158
134−#: qml/Components/Lockscreen.qml:167
135−msgid "Please wait"
136−msgstr ""
137−
138−#: qml/Components/Lockscreen.qml:172
139−msgid "Too many incorrect attempts"
140−msgstr ""
141−
142−#: qml/Components/Lockscreen.qml:206
159+#: qml/Components/Lockscreen.qml:220
143160msgid "Emergency Call"
144161msgstr "مكالمة طوارئ"
145162
146−#: qml/Components/Lockscreen.qml:226
163+#: qml/Components/Lockscreen.qml:252
147164msgid "OK"
148165msgstr ""
149166
150−#: qml/Components/PassphraseLockscreen.qml:61
151−#, qt-format
152−msgid "Hello %1"
153−msgstr "مرحبا %1"
154−
155−#: qml/Components/PassphraseLockscreen.qml:61
156−msgid "Hello"
157−msgstr "مرحبًا"
158−
159−#: qml/Dash/GenericScopeView.qml:361
167+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
160168msgid "See less"
161169msgstr "شاهد أقل"
162170
163−#: qml/Dash/GenericScopeView.qml:361
171+#: qml/Dash/GenericScopeView.qml:434
164172msgid "See all"
165173msgstr ""
166174
167−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
175+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
176+#: qml/Panel/SearchIndicator.qml:27
168177msgid "Search"
169178msgstr "ابحث"
170179
171−#: qml/Dash/PageHeader.qml:270
180+#: qml/Dash/PageHeader.qml:268
172181msgid "Settings"
173182msgstr ""
174183
175−#: qml/Dash/PageHeader.qml:279
184+#: qml/Dash/PageHeader.qml:275
176185msgid "Remove from Favorites"
177186msgstr ""
178187
179−#: qml/Dash/PageHeader.qml:279
188+#: qml/Dash/PageHeader.qml:275
180189msgid "Add to Favorites"
181190msgstr ""
182191
183−#: qml/Dash/Previews/PreviewActionCombo.qml:34
192+#: qml/Dash/Previews/PreviewActionCombo.qml:35
184193msgid "More..."
185194msgstr "المزيد..."
186195
187−#: qml/Dash/Previews/PreviewActionCombo.qml:34
196+#: qml/Dash/Previews/PreviewActionCombo.qml:35
188197msgid "Less..."
189198msgstr "أقل..."
190199
@@ -200,15 +209,23 @@ msgstr "أضف تعليق"
200209msgid "Send"
201210msgstr "أرسل"
202211
203−#: qml/Dash/ScopesOverview.qml:201
204−msgid "Manage Dash"
212+#: qml/Dash/PullToRefreshScopeStyle.qml:55
213+msgid "Pull to refresh…"
214+msgstr ""
215+
216+#: qml/Dash/PullToRefreshScopeStyle.qml:60
217+msgid "Release to refresh…"
205218msgstr ""
206219
207−#: qml/Dash/ScopesOverview.qml:408
220+#: qml/Dash/ScopesOverview.qml:206
221+msgid "Manage Scopes"
222+msgstr ""
223+
224+#: qml/Dash/ScopesOverview.qml:428
208225msgid "Done"
209226msgstr ""
210227
211−#: qml/Dash/ScopesOverview.qml:434
228+#: qml/Dash/ScopesOverview.qml:454
212229msgid "Store"
213230msgstr ""
214231
@@ -221,10 +238,10 @@ msgid "All"
221238msgstr ""
222239
223240#: qml/Greeter/Greeter.qml:157
224−msgid "Swipe to unlock"
225−msgstr "اسحب لفتح القفل"
241+msgid "Unlock"
242+msgstr ""
226243
227−#: qml/Hud/HudParametrizedActionsPage.qml:132
244+#: qml/Hud/HudParametrizedActionsPage.qml:139
228245msgid "Confirm"
229246msgstr "التأكيد"
230247
@@ -244,18 +261,10 @@ msgstr "تكلم الآن..."
244261msgid "Speaking..."
245262msgstr "تتكلم الآن..."
246263
247−#: qml/Notifications/NotificationMenuItemFactory.qml:105
264+#: qml/Notifications/NotificationMenuItemFactory.qml:116
248265msgid "Show password"
249266msgstr "عرض كلمة السر"
250267
251−#: qml/Notifications/NotificationMenuItemFactory.qml:120
252−msgid "Enter SIM PIN"
253−msgstr ""
254−
255−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
256−msgid "Sorry, incorrect PIN"
257−msgstr ""
258−
259268#: qml/Panel/ActiveCallHint.qml:77
260269msgid "Tap to return to call..."
261270msgstr ""
@@ -264,27 +273,31 @@ msgstr ""
264273msgid "Conference"
265274msgstr ""
266275
267−#: qml/Panel/Indicators/MenuItemFactory.qml:651
276+#: qml/Panel/Indicators/MenuItemFactory.qml:600
277+msgid "Nothing is playing"
278+msgstr ""
279+
280+#: qml/Panel/Indicators/MenuItemFactory.qml:748
268281msgid "In queue…"
269282msgstr ""
270283
271−#: qml/Panel/Indicators/MenuItemFactory.qml:655
284+#: qml/Panel/Indicators/MenuItemFactory.qml:752
272285msgid "Downloading"
273286msgstr ""
274287
275−#: qml/Panel/Indicators/MenuItemFactory.qml:657
288+#: qml/Panel/Indicators/MenuItemFactory.qml:754
276289msgid "Paused, tap to resume"
277290msgstr ""
278291
279−#: qml/Panel/Indicators/MenuItemFactory.qml:659
292+#: qml/Panel/Indicators/MenuItemFactory.qml:756
280293msgid "Canceled"
281294msgstr ""
282295
283−#: qml/Panel/Indicators/MenuItemFactory.qml:661
296+#: qml/Panel/Indicators/MenuItemFactory.qml:758
284297msgid "Finished"
285298msgstr ""
286299
287−#: qml/Panel/Indicators/MenuItemFactory.qml:663
300+#: qml/Panel/Indicators/MenuItemFactory.qml:760
288301msgid "Failed, tap to retry"
289302msgstr ""
290303
@@ -296,51 +309,55 @@ msgstr ""
296309msgid "Roaming"
297310msgstr ""
298311
299−#: qml/Shell.qml:266
300−msgid "Enter your passphrase"
312+#: qml/Shell.qml:346
313+msgid "Enter passphrase"
301314msgstr ""
302315
303−#: qml/Shell.qml:267
316+#: qml/Shell.qml:347
304317msgid "Sorry, incorrect passphrase"
305318msgstr ""
306319
307−#: qml/Shell.qml:282
308−msgid "Enter your passcode"
320+#: qml/Shell.qml:348
321+msgid "Please re-enter"
322+msgstr ""
323+
324+#: qml/Shell.qml:350
325+msgid "Enter passcode"
309326msgstr ""
310327
311−#: qml/Shell.qml:283
328+#: qml/Shell.qml:351
312329msgid "Sorry, incorrect passcode"
313330msgstr ""
314331
315−#: qml/Shell.qml:273
332+#: qml/Shell.qml:354
316333#, qt-format
317−msgid "Enter your %1"
334+msgid "Enter %1"
318335msgstr ""
319336
320−#: qml/Shell.qml:274
337+#: qml/Shell.qml:355
321338#, qt-format
322339msgid "Sorry, incorrect %1"
323340msgstr ""
324341
325−#: qml/Shell.qml:310
342+#: qml/Shell.qml:390
326343msgid "Sorry, incorrect passphrase."
327344msgstr ""
328345
329−#: qml/Shell.qml:311
346+#: qml/Shell.qml:391
330347msgid "Sorry, incorrect passcode."
331348msgstr ""
332349
333−#: qml/Shell.qml:312
350+#: qml/Shell.qml:392
334351msgid "This will be your last attempt."
335352msgstr ""
336353
337−#: qml/Shell.qml:314
354+#: qml/Shell.qml:394
338355msgid ""
339356"If passphrase is entered incorrectly, your phone will conduct a factory "
340357"reset and all personal data will be deleted."
341358msgstr ""
342359
343−#: qml/Shell.qml:315
360+#: qml/Shell.qml:395
344361msgid ""
345362"If passcode is entered incorrectly, your phone will conduct a factory reset "
346363"and all personal data will be deleted."
po/ast.po+133−104
@@ -7,80 +7,107 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-07-25 16:51+0000\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
11+"PO-Revision-Date: 2014-10-09 09:49+0000\n"
1212"Last-Translator: ivarela <ivarela@ubuntu.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"
17−"X-Launchpad-Export-Date: 2014-08-28 06:29+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-10-10 05:23+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
22−msgstr ""
23+msgstr "Contraseña: "
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr "Anclar"
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr "Desanclar"
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr "Preséu bloquiáu"
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr "Quedasti bloquiáu polos escesivos intentos fallíos de frase de pasu."
41+
42+#: qml/Components/DelayedLockscreen.qml:63
43+msgid "You have been locked out due to too many failed passcode attempts."
44+msgstr ""
45+"Quedasti bloquiáu polos escesivos intentos fallíos de códigu de pasu."
46+
47+#: qml/Components/DelayedLockscreen.qml:72
48+#, qt-format
49+msgid "Please wait %1 minute and then try again…"
50+msgid_plural "Please wait %1 minutes and then try again…"
51+msgstr[0] "Espera %1 minutu y vuelvi a intentalo…"
52+msgstr[1] "Espera %1 minutos y vuelvi a intentalo…"
53+
3354#: qml/Components/Dialogs.qml:70
3455msgid "Log out"
35−msgstr ""
56+msgstr "Zarrar sesión"
3657
3758#: qml/Components/Dialogs.qml:71
3859msgid "Are you sure you want to log out?"
39−msgstr ""
60+msgstr "De xuru que quies zarrar la sesión?"
4061
4162#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4263#: qml/Components/Dialogs.qml:122
4364msgid "No"
44−msgstr ""
65+msgstr "Non"
4566
4667#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4768#: qml/Components/Dialogs.qml:129
4869msgid "Yes"
49−msgstr ""
70+msgstr "Sí"
5071
5172#: qml/Components/Dialogs.qml:94
5273msgid "Shut down"
53−msgstr ""
74+msgstr "Apagar"
5475
5576#: qml/Components/Dialogs.qml:95
5677msgid "Are you sure you want to shut down?"
57−msgstr ""
78+msgstr "De xuru que quies apagar?"
5879
5980#: qml/Components/Dialogs.qml:119
6081msgid "Reboot"
61−msgstr ""
82+msgstr "Reaniciar"
6283
6384#: qml/Components/Dialogs.qml:120
6485msgid "Are you sure you want to reboot?"
65−msgstr ""
86+msgstr "De xuru que quies reaniciar?"
6687
6788#: qml/Components/Dialogs.qml:144
6889msgid "Power"
69−msgstr ""
90+msgstr "Enerxía"
7091
7192#: qml/Components/Dialogs.qml:145
7293msgid ""
7394"Are you sure you would like\n"
7495"to power off?"
7596msgstr ""
97+"De xuru que quies\n"
98+"apagar?"
7699
77−#: qml/Components/Dialogs.qml:144
100+#: qml/Components/Dialogs.qml:147
78101msgid "Power off"
79−msgstr ""
102+msgstr "Apagar"
80103
81−#: qml/Components/Dialogs.qml:162
104+#: qml/Components/Dialogs.qml:157
105+msgid "Restart"
106+msgstr "Reaniciar"
107+
108+#: qml/Components/Dialogs.qml:167
82109msgid "Cancel"
83−msgstr ""
110+msgstr "Encaboxar"
84111
85112#: qml/Components/EdgeDemoOverlay.qml:151
86113msgid "Skip intro"
@@ -132,60 +159,44 @@ msgstr ""
132159"Agora yá domines los xestos de los berbesos y pues entamar a usar el "
133160"teléfonu<br><br>Toca la pantalla pa comenzar"
134161
135−#: qml/Components/Lockscreen.qml:167
136−msgid "Please wait"
137−msgstr ""
138−
139−#: qml/Components/Lockscreen.qml:172
140−msgid "Too many incorrect attempts"
141−msgstr ""
142−
143−#: qml/Components/Lockscreen.qml:206
162+#: qml/Components/Lockscreen.qml:220
144163msgid "Emergency Call"
145164msgstr "Llamada d'emerxencia"
146165
147−#: qml/Components/Lockscreen.qml:226
166+#: qml/Components/Lockscreen.qml:252
148167msgid "OK"
149168msgstr "Aceutar"
150169
151−#: qml/Components/PassphraseLockscreen.qml:61
152−#, qt-format
153−msgid "Hello %1"
154−msgstr "Hola %1"
155−
156−#: qml/Components/PassphraseLockscreen.qml:61
157−msgid "Hello"
158−msgstr "Hola"
159−
160−#: qml/Dash/GenericScopeView.qml:361
170+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
161171msgid "See less"
162172msgstr "Ver menos"
163173
164−#: qml/Dash/GenericScopeView.qml:361
174+#: qml/Dash/GenericScopeView.qml:434
165175msgid "See all"
166176msgstr "Ver too"
167177
168−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
178+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
179+#: qml/Panel/SearchIndicator.qml:27
169180msgid "Search"
170181msgstr "Guetar"
171182
172−#: qml/Dash/PageHeader.qml:270
183+#: qml/Dash/PageHeader.qml:268
173184msgid "Settings"
174−msgstr ""
185+msgstr "Axustes"
175186
176−#: qml/Dash/PageHeader.qml:279
187+#: qml/Dash/PageHeader.qml:275
177188msgid "Remove from Favorites"
178−msgstr ""
189+msgstr "Desaniciar de favoritos"
179190
180−#: qml/Dash/PageHeader.qml:279
191+#: qml/Dash/PageHeader.qml:275
181192msgid "Add to Favorites"
182−msgstr ""
193+msgstr "Amestar a favoritos"
183194
184−#: qml/Dash/Previews/PreviewActionCombo.qml:34
195+#: qml/Dash/Previews/PreviewActionCombo.qml:35
185196msgid "More..."
186197msgstr "Más…"
187198
188−#: qml/Dash/Previews/PreviewActionCombo.qml:34
199+#: qml/Dash/Previews/PreviewActionCombo.qml:35
189200msgid "Less..."
190201msgstr "Menos…"
191202
@@ -201,31 +212,39 @@ msgstr "Amestar una reseña"
201212msgid "Send"
202213msgstr "Unviar"
203214
204−#: qml/Dash/ScopesOverview.qml:201
205−msgid "Manage Dash"
206−msgstr ""
215+#: qml/Dash/PullToRefreshScopeStyle.qml:55
216+msgid "Pull to refresh…"
217+msgstr "Tirar p'anovar..."
218+
219+#: qml/Dash/PullToRefreshScopeStyle.qml:60
220+msgid "Release to refresh…"
221+msgstr "Soltar p'anovar..."
207222
208−#: qml/Dash/ScopesOverview.qml:408
223+#: qml/Dash/ScopesOverview.qml:206
224+msgid "Manage Scopes"
225+msgstr "Xestionar ámbitos"
226+
227+#: qml/Dash/ScopesOverview.qml:428
209228msgid "Done"
210−msgstr ""
229+msgstr "Fecho"
211230
212−#: qml/Dash/ScopesOverview.qml:434
231+#: qml/Dash/ScopesOverview.qml:454
213232msgid "Store"
214−msgstr ""
233+msgstr "Tienda"
215234
216235#: qml/Dash/ScopesOverviewTab.qml:36
217236msgid "Favorites"
218−msgstr ""
237+msgstr "Favoritos"
219238
220239#: qml/Dash/ScopesOverviewTab.qml:54
221240msgid "All"
222−msgstr ""
241+msgstr "Too"
223242
224243#: qml/Greeter/Greeter.qml:157
225−msgid "Swipe to unlock"
226−msgstr "Esliza pa desbloquiar"
244+msgid "Unlock"
245+msgstr "Desbloquiar"
227246
228−#: qml/Hud/HudParametrizedActionsPage.qml:132
247+#: qml/Hud/HudParametrizedActionsPage.qml:139
229248msgid "Confirm"
230249msgstr "Confirmar"
231250
@@ -245,18 +264,10 @@ msgstr "Fala agora…"
245264msgid "Speaking..."
246265msgstr "Falando…"
247266
248−#: qml/Notifications/NotificationMenuItemFactory.qml:105
267+#: qml/Notifications/NotificationMenuItemFactory.qml:116
249268msgid "Show password"
250269msgstr "Amosar contraseña"
251270
252−#: qml/Notifications/NotificationMenuItemFactory.qml:120
253−msgid "Enter SIM PIN"
254−msgstr ""
255−
256−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257−msgid "Sorry, incorrect PIN"
258−msgstr ""
259−
260271#: qml/Panel/ActiveCallHint.qml:77
261272msgid "Tap to return to call..."
262273msgstr "Tocar pa tornar a la llamada..."
@@ -265,84 +276,102 @@ msgstr "Tocar pa tornar a la llamada..."
265276msgid "Conference"
266277msgstr "Conferencia"
267278
268−#: qml/Panel/Indicators/MenuItemFactory.qml:651
279+#: qml/Panel/Indicators/MenuItemFactory.qml:600
280+msgid "Nothing is playing"
281+msgstr "Nun hai nada en reproducción"
282+
283+#: qml/Panel/Indicators/MenuItemFactory.qml:748
269284msgid "In queue…"
270285msgstr "N'espera…"
271286
272−#: qml/Panel/Indicators/MenuItemFactory.qml:655
287+#: qml/Panel/Indicators/MenuItemFactory.qml:752
273288msgid "Downloading"
274289msgstr "Baxando"
275290
276−#: qml/Panel/Indicators/MenuItemFactory.qml:657
291+#: qml/Panel/Indicators/MenuItemFactory.qml:754
277292msgid "Paused, tap to resume"
278293msgstr "Posáu, toca pa reanudar"
279294
280−#: qml/Panel/Indicators/MenuItemFactory.qml:659
295+#: qml/Panel/Indicators/MenuItemFactory.qml:756
281296msgid "Canceled"
282297msgstr "Encaboxáu"
283298
284−#: qml/Panel/Indicators/MenuItemFactory.qml:661
299+#: qml/Panel/Indicators/MenuItemFactory.qml:758
285300msgid "Finished"
286301msgstr "Finó"
287302
288−#: qml/Panel/Indicators/MenuItemFactory.qml:663
303+#: qml/Panel/Indicators/MenuItemFactory.qml:760
289304msgid "Failed, tap to retry"
290305msgstr "Falló, toca pa reintentar"
291306
292307#: qml/Panel/Indicators/ModemInfoItem.qml:105
293308msgid "Unlock SIM"
294−msgstr ""
309+msgstr "Desbloquiar SIM"
295310
296311#: qml/Panel/Indicators/RoamingIndication.qml:27
297312msgid "Roaming"
298−msgstr ""
313+msgstr "Roaming"
299314
300−#: qml/Shell.qml:266
301−msgid "Enter your passphrase"
302−msgstr ""
315+#: qml/Shell.qml:346
316+msgid "Enter passphrase"
317+msgstr "Escribi la frase contraseña"
303318
304−#: qml/Shell.qml:267
319+#: qml/Shell.qml:347
305320msgid "Sorry, incorrect passphrase"
306−msgstr ""
321+msgstr "Sentímoslo, contraseña incorreuta"
307322
308−#: qml/Shell.qml:282
309−msgid "Enter your passcode"
310−msgstr ""
323+#: qml/Shell.qml:348
324+msgid "Please re-enter"
325+msgstr "Vuelvi a escribila"
326+
327+#: qml/Shell.qml:350
328+msgid "Enter passcode"
329+msgstr "Escribi'l códigu de pasu"
311330
312−#: qml/Shell.qml:283
331+#: qml/Shell.qml:351
313332msgid "Sorry, incorrect passcode"
314−msgstr ""
333+msgstr "Sentímoslo, códigu de pasu incorreutu"
315334
316−#: qml/Shell.qml:273
335+#: qml/Shell.qml:354
317336#, qt-format
318−msgid "Enter your %1"
319−msgstr ""
337+msgid "Enter %1"
338+msgstr "Escribi %1"
320339
321−#: qml/Shell.qml:274
340+#: qml/Shell.qml:355
322341#, qt-format
323342msgid "Sorry, incorrect %1"
324−msgstr ""
343+msgstr "Sentímoslo, %1 incorreutu"
325344
326−#: qml/Shell.qml:310
345+#: qml/Shell.qml:390
327346msgid "Sorry, incorrect passphrase."
328−msgstr ""
347+msgstr "Fras de pasu incorreuta"
329348
330−#: qml/Shell.qml:311
349+#: qml/Shell.qml:391
331350msgid "Sorry, incorrect passcode."
332−msgstr ""
351+msgstr "Códigu de pasu incorreutu"
333352
334−#: qml/Shell.qml:312
353+#: qml/Shell.qml:392
335354msgid "This will be your last attempt."
336−msgstr ""
355+msgstr "Esti ye'l caberu intentu."
337356
338−#: qml/Shell.qml:314
357+#: qml/Shell.qml:394
339358msgid ""
340359"If passphrase is entered incorrectly, your phone will conduct a factory "
341360"reset and all personal data will be deleted."
342361msgstr ""
362+"Si s'inxerta la fras incorreutamente, el teléfonu va volver a la "
363+"configuración de fábrica y van perdese tolos datos personales."
343364
344−#: qml/Shell.qml:315
365+#: qml/Shell.qml:395
345366msgid ""
346367"If passcode is entered incorrectly, your phone will conduct a factory reset "
347368"and all personal data will be deleted."
348369msgstr ""
370+"Si s'inxerta'l códigu incorreutamente, el teléfonu va volver a la "
371+"configuración de fábrica y van perdese tolos datos personales."
372+
373+#~ msgid "Sorry, incorrect PIN"
374+#~ msgstr "PIN incorreutu"
375+
376+#~ msgid "Enter SIM PIN"
377+#~ msgstr "Escribi'l PIN de la SIM"
po/az.po+125−112
@@ -7,62 +7,82 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-08-26 22:12+0000\n"
12−"Last-Translator: Turan Mahmudov <turan.mahmudov@gmail.com>\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
11+"PO-Revision-Date: 2014-09-03 16:39+0000\n"
12+"Last-Translator: Nicat Məmmədov <n1c4t97@gmail.com>\n"
1313"Language-Team: Azerbaijani <az@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:29+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-10-09 06:36+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
22−msgstr "Parol: "
23+msgstr "Şifrә: "
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr "Pin qısayolu"
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr "Açma qısayolu"
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr ""
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr ""
41+
42+#: qml/Components/DelayedLockscreen.qml:63
43+msgid "You have been locked out due to too many failed passcode attempts."
44+msgstr ""
45+
46+#: qml/Components/DelayedLockscreen.qml:72
47+#, qt-format
48+msgid "Please wait %1 minute and then try again…"
49+msgid_plural "Please wait %1 minutes and then try again…"
50+msgstr[0] ""
51+msgstr[1] ""
52+
3353#: qml/Components/Dialogs.qml:70
3454msgid "Log out"
35−msgstr ""
55+msgstr "Çıxış"
3656
3757#: qml/Components/Dialogs.qml:71
3858msgid "Are you sure you want to log out?"
39−msgstr ""
59+msgstr "Çıxmaq istәdiyinizdәn әminsiniz?"
4060
4161#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4262#: qml/Components/Dialogs.qml:122
4363msgid "No"
44−msgstr ""
64+msgstr "Yox"
4565
4666#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4767#: qml/Components/Dialogs.qml:129
4868msgid "Yes"
49−msgstr ""
69+msgstr "Hə"
5070
5171#: qml/Components/Dialogs.qml:94
5272msgid "Shut down"
53−msgstr ""
73+msgstr "Sistemi Söndür"
5474
5575#: qml/Components/Dialogs.qml:95
5676msgid "Are you sure you want to shut down?"
57−msgstr ""
77+msgstr "Sistemi söndürmәk istәdiyinizә әminsiniz?"
5878
5979#: qml/Components/Dialogs.qml:119
6080msgid "Reboot"
61−msgstr ""
81+msgstr "Yenidən yüklə"
6282
6383#: qml/Components/Dialogs.qml:120
6484msgid "Are you sure you want to reboot?"
65−msgstr ""
85+msgstr "Yenidәn başlatmaq istәdiyinizә әminsiniz?"
6686
6787#: qml/Components/Dialogs.qml:144
6888msgid "Power"
@@ -74,17 +94,21 @@ msgid ""
7494"to power off?"
7595msgstr ""
7696
77−#: qml/Components/Dialogs.qml:144
97+#: qml/Components/Dialogs.qml:147
7898msgid "Power off"
7999msgstr "Söndür"
80100
81−#: qml/Components/Dialogs.qml:162
101+#: qml/Components/Dialogs.qml:157
102+msgid "Restart"
103+msgstr ""
104+
105+#: qml/Components/Dialogs.qml:167
82106msgid "Cancel"
83107msgstr "İmtina"
84108
85109#: qml/Components/EdgeDemoOverlay.qml:151
86110msgid "Skip intro"
87−msgstr "Intro -nu keç"
111+msgstr "Tәqdimatı keç"
88112
89113#: qml/Components/EdgeDemo.qml:112
90114msgid "Right edge"
@@ -92,7 +116,7 @@ msgstr "Sağ Künc"
92116
93117#: qml/Components/EdgeDemo.qml:113
94118msgid "Try swiping from the right edge to unlock the phone"
95−msgstr "Kilidi açmaq üçün sağ küncdən çəkin"
119+msgstr "Kilidi açmaq üçün sağ küncdən sürüşdürün"
96120
97121#: qml/Components/EdgeDemo.qml:144
98122msgid "Top edge"
@@ -100,7 +124,7 @@ msgstr "Yuxarı künc"
100124
101125#: qml/Components/EdgeDemo.qml:145
102126msgid "Try swiping from the top edge to access the indicators"
103−msgstr "Göstəricilərə keçid üçün yuxarı küncdən çəkin"
127+msgstr "Göstəriciləri görmәk üçün yuxarı küncdən sürüşdürün"
104128
105129#: qml/Components/EdgeDemo.qml:170
106130msgid "Close"
@@ -108,7 +132,7 @@ msgstr "Bağla"
108132
109133#: qml/Components/EdgeDemo.qml:171
110134msgid "Swipe up again to close the settings screen"
111−msgstr "Nizamlamalar ekranını bağlamaq üçün yenidən yuxarı çəkin"
135+msgstr "Nizamlamalar ekranını bağlamaq üçün yenidən yuxarı sürüşdürün"
112136
113137#: qml/Components/EdgeDemo.qml:198
114138msgid "Left edge"
@@ -128,69 +152,53 @@ msgid ""
128152"You have now mastered the edge gestures and can start using the "
129153"phone<br><br>Tap on the screen to start"
130154msgstr ""
131−"Siz künc jestlərini mənimsəmisiniz və telefonu istifadə etməyə başlaya "
155+"Siz künc hәrәkәtlәrini öyrәndiniz və telefonu istifadə etməyə başlaya "
132156"bilərsiniz.<br><br>Başlamaq üçün ekrana toxunun"
133157
134−#: qml/Components/Lockscreen.qml:167
135−msgid "Please wait"
136−msgstr "Lütfən gözləyin"
137−
138−#: qml/Components/Lockscreen.qml:172
139−msgid "Too many incorrect attempts"
140−msgstr "Çoxlu yanlış cəhd"
141−
142−#: qml/Components/Lockscreen.qml:206
158+#: qml/Components/Lockscreen.qml:220
143159msgid "Emergency Call"
144160msgstr "Zərurət zəngi"
145161
146−#: qml/Components/Lockscreen.qml:226
162+#: qml/Components/Lockscreen.qml:252
147163msgid "OK"
148−msgstr "ОК"
164+msgstr "Oldu"
149165
150−#: qml/Components/PassphraseLockscreen.qml:61
151−#, qt-format
152−msgid "Hello %1"
153−msgstr "Xoş gördük %1"
154−
155−#: qml/Components/PassphraseLockscreen.qml:61
156−msgid "Hello"
157−msgstr "Xoş gördük"
158−
159−#: qml/Dash/GenericScopeView.qml:361
166+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
160167msgid "See less"
161−msgstr "Daha az gör"
168+msgstr "Daha azını gör"
162169
163−#: qml/Dash/GenericScopeView.qml:361
170+#: qml/Dash/GenericScopeView.qml:434
164171msgid "See all"
165172msgstr "Hamısını gör"
166173
167−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
174+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
175+#: qml/Panel/SearchIndicator.qml:27
168176msgid "Search"
169177msgstr "Axtar"
170178
171−#: qml/Dash/PageHeader.qml:270
179+#: qml/Dash/PageHeader.qml:268
172180msgid "Settings"
173−msgstr ""
181+msgstr "Tənzimləmələr"
174182
175−#: qml/Dash/PageHeader.qml:279
183+#: qml/Dash/PageHeader.qml:275
176184msgid "Remove from Favorites"
177−msgstr ""
185+msgstr "Seçilmişlәrdәn çıxart"
178186
179−#: qml/Dash/PageHeader.qml:279
187+#: qml/Dash/PageHeader.qml:275
180188msgid "Add to Favorites"
181−msgstr ""
189+msgstr "Seçilmişlәrә әlavә et"
182190
183−#: qml/Dash/Previews/PreviewActionCombo.qml:34
191+#: qml/Dash/Previews/PreviewActionCombo.qml:35
184192msgid "More..."
185−msgstr "Ətraflı..."
193+msgstr "Daha çox..."
186194
187−#: qml/Dash/Previews/PreviewActionCombo.qml:34
195+#: qml/Dash/Previews/PreviewActionCombo.qml:35
188196msgid "Less..."
189197msgstr "Az..."
190198
191199#: qml/Dash/Previews/PreviewRatingInput.qml:81
192200msgid "Rate this"
193−msgstr "Qiymət ver"
201+msgstr "Qiymәtlәndir"
194202
195203#: qml/Dash/Previews/PreviewRatingInput.qml:126
196204msgid "Add a review"
@@ -200,17 +208,25 @@ msgstr "Rəy yaz"
200208msgid "Send"
201209msgstr "Göndər"
202210
203−#: qml/Dash/ScopesOverview.qml:201
204−msgid "Manage Dash"
211+#: qml/Dash/PullToRefreshScopeStyle.qml:55
212+msgid "Pull to refresh…"
205213msgstr ""
206214
207−#: qml/Dash/ScopesOverview.qml:408
215+#: qml/Dash/PullToRefreshScopeStyle.qml:60
216+msgid "Release to refresh…"
217+msgstr ""
218+
219+#: qml/Dash/ScopesOverview.qml:206
220+msgid "Manage Scopes"
221+msgstr ""
222+
223+#: qml/Dash/ScopesOverview.qml:428
208224msgid "Done"
209225msgstr "Başa çatdı"
210226
211−#: qml/Dash/ScopesOverview.qml:434
227+#: qml/Dash/ScopesOverview.qml:454
212228msgid "Store"
213−msgstr "Saxla"
229+msgstr ""
214230
215231#: qml/Dash/ScopesOverviewTab.qml:36
216232msgid "Favorites"
@@ -221,16 +237,16 @@ msgid "All"
221237msgstr "Hamısı"
222238
223239#: qml/Greeter/Greeter.qml:157
224−msgid "Swipe to unlock"
225−msgstr "Kilidi açmaq üçün sürüşdürün"
240+msgid "Unlock"
241+msgstr ""
226242
227−#: qml/Hud/HudParametrizedActionsPage.qml:132
243+#: qml/Hud/HudParametrizedActionsPage.qml:139
228244msgid "Confirm"
229245msgstr "Təsdiqlə"
230246
231247#: qml/Hud/Hud.qml:61 qml/Hud/Hud.qml:99 qml/Hud/Hud.qml:372
232248msgid "Type or say a command"
233−msgstr "Əmri söyləyin və ya yazın"
249+msgstr "Bir әmr söyləyin və ya yazın"
234250
235251#: qml/Hud/Hud.qml:84
236252msgid "Loading. Please Wait..."
@@ -244,17 +260,9 @@ msgstr "Danışın..."
244260msgid "Speaking..."
245261msgstr "Danışır..."
246262
247−#: qml/Notifications/NotificationMenuItemFactory.qml:105
263+#: qml/Notifications/NotificationMenuItemFactory.qml:116
248264msgid "Show password"
249−msgstr "Parolu göstər"
250−
251−#: qml/Notifications/NotificationMenuItemFactory.qml:120
252−msgid "Enter SIM PIN"
253−msgstr "SIM PIN kodunuzu daxil edin"
254−
255−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
256−msgid "Sorry, incorrect PIN"
257−msgstr "Təəssüf ki, PIN yanlışdır"
265+msgstr "Şifrәni göstәr"
258266
259267#: qml/Panel/ActiveCallHint.qml:77
260268msgid "Tap to return to call..."
@@ -264,29 +272,33 @@ msgstr "Zəngə qayıtmaq üçün toxunun..."
264272msgid "Conference"
265273msgstr "Konfrans"
266274
267−#: qml/Panel/Indicators/MenuItemFactory.qml:651
275+#: qml/Panel/Indicators/MenuItemFactory.qml:600
276+msgid "Nothing is playing"
277+msgstr ""
278+
279+#: qml/Panel/Indicators/MenuItemFactory.qml:748
268280msgid "In queue…"
269281msgstr "Növbədədir..."
270282
271−#: qml/Panel/Indicators/MenuItemFactory.qml:655
283+#: qml/Panel/Indicators/MenuItemFactory.qml:752
272284msgid "Downloading"
273285msgstr "Endirilir"
274286
275−#: qml/Panel/Indicators/MenuItemFactory.qml:657
287+#: qml/Panel/Indicators/MenuItemFactory.qml:754
276288msgid "Paused, tap to resume"
277−msgstr "Saxlanıldı, davam etmək üçün toxunun"
289+msgstr "Dayandırıldı. Davam etmək üçün toxunun"
278290
279−#: qml/Panel/Indicators/MenuItemFactory.qml:659
291+#: qml/Panel/Indicators/MenuItemFactory.qml:756
280292msgid "Canceled"
281293msgstr "İmtina edildi"
282294
283−#: qml/Panel/Indicators/MenuItemFactory.qml:661
295+#: qml/Panel/Indicators/MenuItemFactory.qml:758
284296msgid "Finished"
285297msgstr "Bitdi"
286298
287−#: qml/Panel/Indicators/MenuItemFactory.qml:663
299+#: qml/Panel/Indicators/MenuItemFactory.qml:760
288300msgid "Failed, tap to retry"
289−msgstr "Alınmadı, davam etmək üçün toxunun"
301+msgstr "Alınmadı. Yenidәn cәhd etmək üçün toxunun"
290302
291303#: qml/Panel/Indicators/ModemInfoItem.qml:105
292304msgid "Unlock SIM"
@@ -296,45 +308,49 @@ msgstr "SIM kilidini aç"
296308msgid "Roaming"
297309msgstr "Rominq"
298310
299−#: qml/Shell.qml:266
300−msgid "Enter your passphrase"
301−msgstr "Açar sözünüzü daxil edin"
311+#: qml/Shell.qml:346
312+msgid "Enter passphrase"
313+msgstr ""
302314
303−#: qml/Shell.qml:267
315+#: qml/Shell.qml:347
304316msgid "Sorry, incorrect passphrase"
305−msgstr "Təəssüf ki, açar söz yanlışdır"
317+msgstr "Bağışlayın, açar söz yanlışdır"
318+
319+#: qml/Shell.qml:348
320+msgid "Please re-enter"
321+msgstr ""
306322
307−#: qml/Shell.qml:282
308−msgid "Enter your passcode"
323+#: qml/Shell.qml:350
324+msgid "Enter passcode"
309325msgstr ""
310326
311−#: qml/Shell.qml:283
327+#: qml/Shell.qml:351
312328msgid "Sorry, incorrect passcode"
313329msgstr ""
314330
315−#: qml/Shell.qml:273
331+#: qml/Shell.qml:354
316332#, qt-format
317−msgid "Enter your %1"
318−msgstr "%1 daxil edin"
333+msgid "Enter %1"
334+msgstr ""
319335
320−#: qml/Shell.qml:274
336+#: qml/Shell.qml:355
321337#, qt-format
322338msgid "Sorry, incorrect %1"
323−msgstr "Təəssüf ki, %1 yanlışdır"
339+msgstr "Bağışlayın, %1 yanlışdır"
324340
325−#: qml/Shell.qml:310
341+#: qml/Shell.qml:390
326342msgid "Sorry, incorrect passphrase."
327−msgstr "Təəssüf ki, açar söz yanlışdır."
343+msgstr "Bağışlayın, açar söz yanlışdır."
328344
329−#: qml/Shell.qml:311
345+#: qml/Shell.qml:391
330346msgid "Sorry, incorrect passcode."
331347msgstr "Təəssüf ki, açar kod yanlışdır."
332348
333−#: qml/Shell.qml:312
349+#: qml/Shell.qml:392
334350msgid "This will be your last attempt."
335351msgstr "Bu sizin son cəhdiniz olacaq."
336352
337−#: qml/Shell.qml:314
353+#: qml/Shell.qml:394
338354msgid ""
339355"If passphrase is entered incorrectly, your phone will conduct a factory "
340356"reset and all personal data will be deleted."
@@ -342,7 +358,7 @@ msgstr ""
342358"Əgər açar söz yanlış daxil edilibsə, onda telefonunuz fabrika parametrlərinə "
343359"geri qayıdacaq və bütün şəxsi məlumatlarınız silinəcək."
344360
345−#: qml/Shell.qml:315
361+#: qml/Shell.qml:395
346362msgid ""
347363"If passcode is entered incorrectly, your phone will conduct a factory reset "
348364"and all personal data will be deleted."
@@ -350,11 +366,8 @@ msgstr ""
350366"Əgər açar kod yanlış daxil edilibsə, onda telefonunuz fabrika parametrlərinə "
351367"geri qayıdacaq və bütün şəxsi məlumatlarınız silinəcək."
352368
353−#~ msgid "Are you sure you would like to turn power off?"
354−#~ msgstr "Söndürmək istədiyinizə əminsiniz?"
355−
356−#~ msgid "Restart"
357−#~ msgstr "Yenidən Başlat"
369+#~ msgid "Enter SIM PIN"
370+#~ msgstr "SIM PIN kodunuzu daxil edin"
358371
359−#~ msgid "Enter your PIN"
360−#~ msgstr "PIN kodunuzu daxil edin"
372+#~ msgid "Sorry, incorrect PIN"
373+#~ msgstr "Bağışlayın, PIN yanlışdır"
po/be.ponew file+361
@@ -0,0 +1,361 @@
1+# Belarusian translation for unity8
2+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
3+# This file is distributed under the same license as the unity8 package.
4+# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
5+#
6+msgid ""
7+msgstr ""
8+"Project-Id-Version: unity8\n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
11+"PO-Revision-Date: 2014-09-24 17:12+0000\n"
12+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13+"Language-Team: Belarusian <be@li.org>\n"
14+"MIME-Version: 1.0\n"
15+"Content-Type: text/plain; charset=UTF-8\n"
16+"Content-Transfer-Encoding: 8bit\n"
17+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
19+"X-Launchpad-Export-Date: 2014-10-09 06:36+0000\n"
20+"X-Generator: Launchpad (build 17196)\n"
21+
22+#: plugins/LightDM/Greeter.cpp:130
23+msgid "Password: "
24+msgstr ""
25+
26+#: plugins/Unity/Launcher/launcheritem.cpp:45
27+#: plugins/Unity/Launcher/launcheritem.cpp:91
28+msgid "Pin shortcut"
29+msgstr ""
30+
31+#: plugins/Unity/Launcher/launcheritem.cpp:91
32+msgid "Unpin shortcut"
33+msgstr ""
34+
35+#: qml/Components/DelayedLockscreen.qml:47
36+msgid "Device Locked"
37+msgstr ""
38+
39+#: qml/Components/DelayedLockscreen.qml:62
40+msgid "You have been locked out due to too many failed passphrase attempts."
41+msgstr ""
42+
43+#: qml/Components/DelayedLockscreen.qml:63
44+msgid "You have been locked out due to too many failed passcode attempts."
45+msgstr ""
46+
47+#: qml/Components/DelayedLockscreen.qml:72
48+#, qt-format
49+msgid "Please wait %1 minute and then try again…"
50+msgid_plural "Please wait %1 minutes and then try again…"
51+msgstr[0] ""
52+msgstr[1] ""
53+
54+#: qml/Components/Dialogs.qml:70
55+msgid "Log out"
56+msgstr ""
57+
58+#: qml/Components/Dialogs.qml:71
59+msgid "Are you sure you want to log out?"
60+msgstr ""
61+
62+#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
63+#: qml/Components/Dialogs.qml:122
64+msgid "No"
65+msgstr ""
66+
67+#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
68+#: qml/Components/Dialogs.qml:129
69+msgid "Yes"
70+msgstr ""
71+
72+#: qml/Components/Dialogs.qml:94
73+msgid "Shut down"
74+msgstr ""
75+
76+#: qml/Components/Dialogs.qml:95
77+msgid "Are you sure you want to shut down?"
78+msgstr ""
79+
80+#: qml/Components/Dialogs.qml:119
81+msgid "Reboot"
82+msgstr ""
83+
84+#: qml/Components/Dialogs.qml:120
85+msgid "Are you sure you want to reboot?"
86+msgstr ""
87+
88+#: qml/Components/Dialogs.qml:144
89+msgid "Power"
90+msgstr ""
91+
92+#: qml/Components/Dialogs.qml:145
93+msgid ""
94+"Are you sure you would like\n"
95+"to power off?"
96+msgstr ""
97+
98+#: qml/Components/Dialogs.qml:147
99+msgid "Power off"
100+msgstr ""
101+
102+#: qml/Components/Dialogs.qml:157
103+msgid "Restart"
104+msgstr ""
105+
106+#: qml/Components/Dialogs.qml:167
107+msgid "Cancel"
108+msgstr ""
109+
110+#: qml/Components/EdgeDemoOverlay.qml:151
111+msgid "Skip intro"
112+msgstr ""
113+
114+#: qml/Components/EdgeDemo.qml:112
115+msgid "Right edge"
116+msgstr ""
117+
118+#: qml/Components/EdgeDemo.qml:113
119+msgid "Try swiping from the right edge to unlock the phone"
120+msgstr ""
121+
122+#: qml/Components/EdgeDemo.qml:144
123+msgid "Top edge"
124+msgstr ""
125+
126+#: qml/Components/EdgeDemo.qml:145
127+msgid "Try swiping from the top edge to access the indicators"
128+msgstr ""
129+
130+#: qml/Components/EdgeDemo.qml:170
131+msgid "Close"
132+msgstr ""
133+
134+#: qml/Components/EdgeDemo.qml:171
135+msgid "Swipe up again to close the settings screen"
136+msgstr ""
137+
138+#: qml/Components/EdgeDemo.qml:198
139+msgid "Left edge"
140+msgstr ""
141+
142+#: qml/Components/EdgeDemo.qml:199
143+msgid "Swipe from the left to reveal the launcher for quick access to apps"
144+msgstr ""
145+
146+#: qml/Components/EdgeDemo.qml:226
147+msgid "Well done"
148+msgstr ""
149+
150+#: qml/Components/EdgeDemo.qml:227
151+msgid ""
152+"You have now mastered the edge gestures and can start using the "
153+"phone<br><br>Tap on the screen to start"
154+msgstr ""
155+
156+#: qml/Components/Lockscreen.qml:220
157+msgid "Emergency Call"
158+msgstr ""
159+
160+#: qml/Components/Lockscreen.qml:252
161+msgid "OK"
162+msgstr ""
163+
164+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
165+msgid "See less"
166+msgstr ""
167+
168+#: qml/Dash/GenericScopeView.qml:434
169+msgid "See all"
170+msgstr ""
171+
172+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
173+#: qml/Panel/SearchIndicator.qml:27
174+msgid "Search"
175+msgstr ""
176+
177+#: qml/Dash/PageHeader.qml:268
178+msgid "Settings"
179+msgstr ""
180+
181+#: qml/Dash/PageHeader.qml:275
182+msgid "Remove from Favorites"
183+msgstr ""
184+
185+#: qml/Dash/PageHeader.qml:275
186+msgid "Add to Favorites"
187+msgstr ""
188+
189+#: qml/Dash/Previews/PreviewActionCombo.qml:35
190+msgid "More..."
191+msgstr ""
192+
193+#: qml/Dash/Previews/PreviewActionCombo.qml:35
194+msgid "Less..."
195+msgstr ""
196+
197+#: qml/Dash/Previews/PreviewRatingInput.qml:81
198+msgid "Rate this"
199+msgstr ""
200+
201+#: qml/Dash/Previews/PreviewRatingInput.qml:126
202+msgid "Add a review"
203+msgstr ""
204+
205+#: qml/Dash/Previews/PreviewRatingInput.qml:166
206+msgid "Send"
207+msgstr ""
208+
209+#: qml/Dash/PullToRefreshScopeStyle.qml:55
210+msgid "Pull to refresh…"
211+msgstr ""
212+
213+#: qml/Dash/PullToRefreshScopeStyle.qml:60
214+msgid "Release to refresh…"
215+msgstr ""
216+
217+#: qml/Dash/ScopesOverview.qml:206
218+msgid "Manage Scopes"
219+msgstr ""
220+
221+#: qml/Dash/ScopesOverview.qml:428
222+msgid "Done"
223+msgstr ""
224+
225+#: qml/Dash/ScopesOverview.qml:454
226+msgid "Store"
227+msgstr ""
228+
229+#: qml/Dash/ScopesOverviewTab.qml:36
230+msgid "Favorites"
231+msgstr ""
232+
233+#: qml/Dash/ScopesOverviewTab.qml:54
234+msgid "All"
235+msgstr ""
236+
237+#: qml/Greeter/Greeter.qml:157
238+msgid "Unlock"
239+msgstr ""
240+
241+#: qml/Hud/HudParametrizedActionsPage.qml:139
242+msgid "Confirm"
243+msgstr ""
244+
245+#: qml/Hud/Hud.qml:61 qml/Hud/Hud.qml:99 qml/Hud/Hud.qml:372
246+msgid "Type or say a command"
247+msgstr ""
248+
249+#: qml/Hud/Hud.qml:84
250+msgid "Loading. Please Wait..."
251+msgstr ""
252+
253+#: qml/Hud/Hud.qml:89
254+msgid "Speak Now..."
255+msgstr ""
256+
257+#: qml/Hud/Hud.qml:94
258+msgid "Speaking..."
259+msgstr ""
260+
261+#: qml/Notifications/NotificationMenuItemFactory.qml:116
262+msgid "Show password"
263+msgstr ""
264+
265+#: qml/Panel/ActiveCallHint.qml:77
266+msgid "Tap to return to call..."
267+msgstr ""
268+
269+#: qml/Panel/ActiveCallHint.qml:90
270+msgid "Conference"
271+msgstr ""
272+
273+#: qml/Panel/Indicators/MenuItemFactory.qml:600
274+msgid "Nothing is playing"
275+msgstr ""
276+
277+#: qml/Panel/Indicators/MenuItemFactory.qml:748
278+msgid "In queue…"
279+msgstr ""
280+
281+#: qml/Panel/Indicators/MenuItemFactory.qml:752
282+msgid "Downloading"
283+msgstr ""
284+
285+#: qml/Panel/Indicators/MenuItemFactory.qml:754
286+msgid "Paused, tap to resume"
287+msgstr ""
288+
289+#: qml/Panel/Indicators/MenuItemFactory.qml:756
290+msgid "Canceled"
291+msgstr ""
292+
293+#: qml/Panel/Indicators/MenuItemFactory.qml:758
294+msgid "Finished"
295+msgstr ""
296+
297+#: qml/Panel/Indicators/MenuItemFactory.qml:760
298+msgid "Failed, tap to retry"
299+msgstr ""
300+
301+#: qml/Panel/Indicators/ModemInfoItem.qml:105
302+msgid "Unlock SIM"
303+msgstr ""
304+
305+#: qml/Panel/Indicators/RoamingIndication.qml:27
306+msgid "Roaming"
307+msgstr ""
308+
309+#: qml/Shell.qml:346
310+msgid "Enter passphrase"
311+msgstr ""
312+
313+#: qml/Shell.qml:347
314+msgid "Sorry, incorrect passphrase"
315+msgstr ""
316+
317+#: qml/Shell.qml:348
318+msgid "Please re-enter"
319+msgstr ""
320+
321+#: qml/Shell.qml:350
322+msgid "Enter passcode"
323+msgstr ""
324+
325+#: qml/Shell.qml:351
326+msgid "Sorry, incorrect passcode"
327+msgstr ""
328+
329+#: qml/Shell.qml:354
330+#, qt-format
331+msgid "Enter %1"
332+msgstr ""
333+
334+#: qml/Shell.qml:355
335+#, qt-format
336+msgid "Sorry, incorrect %1"
337+msgstr ""
338+
339+#: qml/Shell.qml:390
340+msgid "Sorry, incorrect passphrase."
341+msgstr ""
342+
343+#: qml/Shell.qml:391
344+msgid "Sorry, incorrect passcode."
345+msgstr ""
346+
347+#: qml/Shell.qml:392
348+msgid "This will be your last attempt."
349+msgstr ""
350+
351+#: qml/Shell.qml:394
352+msgid ""
353+"If passphrase is entered incorrectly, your phone will conduct a factory "
354+"reset and all personal data will be deleted."
355+msgstr ""
356+
357+#: qml/Shell.qml:395
358+msgid ""
359+"If passcode is entered incorrectly, your phone will conduct a factory reset "
360+"and all personal data will be deleted."
361+msgstr ""
po/bg.po+87−71
@@ -7,29 +7,49 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
1111"PO-Revision-Date: 2014-04-01 14:08+0000\n"
1212"Last-Translator: Atanas Kovachki <Unknown>\n"
1313"Language-Team: Bulgarian <bg@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:29+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-10-09 06:36+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
2223msgstr ""
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr ""
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr ""
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr ""
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr ""
41+
42+#: qml/Components/DelayedLockscreen.qml:63
43+msgid "You have been locked out due to too many failed passcode attempts."
44+msgstr ""
45+
46+#: qml/Components/DelayedLockscreen.qml:72
47+#, qt-format
48+msgid "Please wait %1 minute and then try again…"
49+msgid_plural "Please wait %1 minutes and then try again…"
50+msgstr[0] ""
51+msgstr[1] ""
52+
3353#: qml/Components/Dialogs.qml:70
3454msgid "Log out"
3555msgstr ""
@@ -74,11 +94,15 @@ msgid ""
7494"to power off?"
7595msgstr ""
7696
77−#: qml/Components/Dialogs.qml:144
97+#: qml/Components/Dialogs.qml:147
7898msgid "Power off"
7999msgstr ""
80100
81−#: qml/Components/Dialogs.qml:162
101+#: qml/Components/Dialogs.qml:157
102+msgid "Restart"
103+msgstr ""
104+
105+#: qml/Components/Dialogs.qml:167
82106msgid "Cancel"
83107msgstr ""
84108
@@ -135,60 +159,44 @@ msgid ""
135159"phone<br><br>Tap on the screen to start"
136160msgstr ""
137161
138−#: qml/Components/Lockscreen.qml:167
139−msgid "Please wait"
140−msgstr ""
141−
142−#: qml/Components/Lockscreen.qml:172
143−msgid "Too many incorrect attempts"
144−msgstr ""
145−
146−#: qml/Components/Lockscreen.qml:206
162+#: qml/Components/Lockscreen.qml:220
147163msgid "Emergency Call"
148164msgstr "Спешно повикване"
149165
150−#: qml/Components/Lockscreen.qml:226
166+#: qml/Components/Lockscreen.qml:252
151167msgid "OK"
152168msgstr ""
153169
154−#: qml/Components/PassphraseLockscreen.qml:61
155−#, qt-format
156−msgid "Hello %1"
157−msgstr "Здравей, %1"
158−
159−#: qml/Components/PassphraseLockscreen.qml:61
160−msgid "Hello"
161−msgstr "Здравей"
162−
163−#: qml/Dash/GenericScopeView.qml:361
170+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
164171msgid "See less"
165172msgstr ""
166173
167−#: qml/Dash/GenericScopeView.qml:361
174+#: qml/Dash/GenericScopeView.qml:434
168175msgid "See all"
169176msgstr ""
170177
171−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
178+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
179+#: qml/Panel/SearchIndicator.qml:27
172180msgid "Search"
173181msgstr "Търсене"
174182
175−#: qml/Dash/PageHeader.qml:270
183+#: qml/Dash/PageHeader.qml:268
176184msgid "Settings"
177185msgstr ""
178186
179−#: qml/Dash/PageHeader.qml:279
187+#: qml/Dash/PageHeader.qml:275
180188msgid "Remove from Favorites"
181189msgstr ""
182190
183−#: qml/Dash/PageHeader.qml:279
191+#: qml/Dash/PageHeader.qml:275
184192msgid "Add to Favorites"
185193msgstr ""
186194
187−#: qml/Dash/Previews/PreviewActionCombo.qml:34
195+#: qml/Dash/Previews/PreviewActionCombo.qml:35
188196msgid "More..."
189197msgstr ""
190198
191−#: qml/Dash/Previews/PreviewActionCombo.qml:34
199+#: qml/Dash/Previews/PreviewActionCombo.qml:35
192200msgid "Less..."
193201msgstr "По-малко..."
194202
@@ -204,15 +212,23 @@ msgstr "Добави отзив"
204212msgid "Send"
205213msgstr "Изпрати"
206214
207−#: qml/Dash/ScopesOverview.qml:201
208−msgid "Manage Dash"
215+#: qml/Dash/PullToRefreshScopeStyle.qml:55
216+msgid "Pull to refresh…"
217+msgstr ""
218+
219+#: qml/Dash/PullToRefreshScopeStyle.qml:60
220+msgid "Release to refresh…"
221+msgstr ""
222+
223+#: qml/Dash/ScopesOverview.qml:206
224+msgid "Manage Scopes"
209225msgstr ""
210226
211−#: qml/Dash/ScopesOverview.qml:408
227+#: qml/Dash/ScopesOverview.qml:428
212228msgid "Done"
213229msgstr ""
214230
215−#: qml/Dash/ScopesOverview.qml:434
231+#: qml/Dash/ScopesOverview.qml:454
216232msgid "Store"
217233msgstr ""
218234
@@ -225,10 +241,10 @@ msgid "All"
225241msgstr ""
226242
227243#: qml/Greeter/Greeter.qml:157
228−msgid "Swipe to unlock"
244+msgid "Unlock"
229245msgstr ""
230246
231−#: qml/Hud/HudParametrizedActionsPage.qml:132
247+#: qml/Hud/HudParametrizedActionsPage.qml:139
232248msgid "Confirm"
233249msgstr "Потвърди"
234250
@@ -248,18 +264,10 @@ msgstr "Говорете сега..."
248264msgid "Speaking..."
249265msgstr "Говорете..."
250266
251−#: qml/Notifications/NotificationMenuItemFactory.qml:105
267+#: qml/Notifications/NotificationMenuItemFactory.qml:116
252268msgid "Show password"
253269msgstr "Покажи паролата"
254270
255−#: qml/Notifications/NotificationMenuItemFactory.qml:120
256−msgid "Enter SIM PIN"
257−msgstr ""
258−
259−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
260−msgid "Sorry, incorrect PIN"
261−msgstr ""
262−
263271#: qml/Panel/ActiveCallHint.qml:77
264272msgid "Tap to return to call..."
265273msgstr ""
@@ -268,27 +276,31 @@ msgstr ""
268276msgid "Conference"
269277msgstr ""
270278
271−#: qml/Panel/Indicators/MenuItemFactory.qml:651
279+#: qml/Panel/Indicators/MenuItemFactory.qml:600
280+msgid "Nothing is playing"
281+msgstr ""
282+
283+#: qml/Panel/Indicators/MenuItemFactory.qml:748
272284msgid "In queue…"
273285msgstr ""
274286
275−#: qml/Panel/Indicators/MenuItemFactory.qml:655
287+#: qml/Panel/Indicators/MenuItemFactory.qml:752
276288msgid "Downloading"
277289msgstr ""
278290
279−#: qml/Panel/Indicators/MenuItemFactory.qml:657
291+#: qml/Panel/Indicators/MenuItemFactory.qml:754
280292msgid "Paused, tap to resume"
281293msgstr ""
282294
283−#: qml/Panel/Indicators/MenuItemFactory.qml:659
295+#: qml/Panel/Indicators/MenuItemFactory.qml:756
284296msgid "Canceled"
285297msgstr ""
286298
287−#: qml/Panel/Indicators/MenuItemFactory.qml:661
299+#: qml/Panel/Indicators/MenuItemFactory.qml:758
288300msgid "Finished"
289301msgstr ""
290302
291−#: qml/Panel/Indicators/MenuItemFactory.qml:663
303+#: qml/Panel/Indicators/MenuItemFactory.qml:760
292304msgid "Failed, tap to retry"
293305msgstr ""
294306
@@ -300,51 +312,55 @@ msgstr ""
300312msgid "Roaming"
301313msgstr ""
302314
303−#: qml/Shell.qml:266
304−msgid "Enter your passphrase"
315+#: qml/Shell.qml:346
316+msgid "Enter passphrase"
305317msgstr ""
306318
307−#: qml/Shell.qml:267
319+#: qml/Shell.qml:347
308320msgid "Sorry, incorrect passphrase"
309321msgstr ""
310322
311−#: qml/Shell.qml:282
312−msgid "Enter your passcode"
323+#: qml/Shell.qml:348
324+msgid "Please re-enter"
325+msgstr ""
326+
327+#: qml/Shell.qml:350
328+msgid "Enter passcode"
313329msgstr ""
314330
315−#: qml/Shell.qml:283
331+#: qml/Shell.qml:351
316332msgid "Sorry, incorrect passcode"
317333msgstr ""
318334
319−#: qml/Shell.qml:273
335+#: qml/Shell.qml:354
320336#, qt-format
321−msgid "Enter your %1"
337+msgid "Enter %1"
322338msgstr ""
323339
324−#: qml/Shell.qml:274
340+#: qml/Shell.qml:355
325341#, qt-format
326342msgid "Sorry, incorrect %1"
327343msgstr ""
328344
329−#: qml/Shell.qml:310
345+#: qml/Shell.qml:390
330346msgid "Sorry, incorrect passphrase."
331347msgstr ""
332348
333−#: qml/Shell.qml:311
349+#: qml/Shell.qml:391
334350msgid "Sorry, incorrect passcode."
335351msgstr ""
336352
337−#: qml/Shell.qml:312
353+#: qml/Shell.qml:392
338354msgid "This will be your last attempt."
339355msgstr ""
340356
341−#: qml/Shell.qml:314
357+#: qml/Shell.qml:394
342358msgid ""
343359"If passphrase is entered incorrectly, your phone will conduct a factory "
344360"reset and all personal data will be deleted."
345361msgstr ""
346362
347−#: qml/Shell.qml:315
363+#: qml/Shell.qml:395
348364msgid ""
349365"If passcode is entered incorrectly, your phone will conduct a factory reset "
350366"and all personal data will be deleted."
po/br.po+116−97
@@ -7,78 +7,108 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-08-26 08:28+0000\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
11+"PO-Revision-Date: 2014-10-07 07:03+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"
17−"X-Launchpad-Export-Date: 2014-08-28 06:29+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=2; plural=n > 1;\n"
18+"X-Launchpad-Export-Date: 2014-10-09 06:36+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
2223msgstr "Ger-tremen : "
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr "Spilhennañ ar verradenn"
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr "Dispilhennañ ar verradenn"
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr "Benveg prennet"
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr ""
41+"Prennet eo bet ho penveg abalamour da re a daolioù-esae c'hwitet evit merkañ "
42+"ho frazenn-dremen."
43+
44+#: qml/Components/DelayedLockscreen.qml:63
45+msgid "You have been locked out due to too many failed passcode attempts."
46+msgstr ""
47+"Prennet eo bet ho penveg abalamour da re a daolioù-esae evit merkañ ho kod-"
48+"tremen."
49+
50+#: qml/Components/DelayedLockscreen.qml:72
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] "Gortozit %1 vunutenn, mar plij, hag esaeit en-dro..."
55+msgstr[1] "Gortozit %1 a vunutoù, mar plij, hag esaeit en-dro..."
56+
3357#: qml/Components/Dialogs.qml:70
3458msgid "Log out"
35−msgstr ""
59+msgstr "Digevreañ"
3660
3761#: qml/Components/Dialogs.qml:71
3862msgid "Are you sure you want to log out?"
39−msgstr ""
63+msgstr "Ha sur oc'h e fell deoc'h digevreañ ?"
4064
4165#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4266#: qml/Components/Dialogs.qml:122
4367msgid "No"
44−msgstr ""
68+msgstr "N'on ket"
4569
4670#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4771#: qml/Components/Dialogs.qml:129
4872msgid "Yes"
49−msgstr ""
73+msgstr "Ya"
5074
5175#: qml/Components/Dialogs.qml:94
5276msgid "Shut down"
53−msgstr ""
77+msgstr "Lazhañ ar benveg"
5478
5579#: qml/Components/Dialogs.qml:95
5680msgid "Are you sure you want to shut down?"
57−msgstr ""
81+msgstr "Ha sur oc'h e fell deoc'h lazhañ ar benveg ?"
5882
5983#: qml/Components/Dialogs.qml:119
6084msgid "Reboot"
61−msgstr ""
85+msgstr "Adloc'hañ"
6286
6387#: qml/Components/Dialogs.qml:120
6488msgid "Are you sure you want to reboot?"
65−msgstr ""
89+msgstr "Ha sur oc'h e fell deoc'h adloc'hañ ?"
6690
6791#: qml/Components/Dialogs.qml:144
6892msgid "Power"
69−msgstr ""
93+msgstr "Tredan"
7094
7195#: qml/Components/Dialogs.qml:145
7296msgid ""
7397"Are you sure you would like\n"
7498"to power off?"
7599msgstr ""
100+"Ha sur oc'h e fell deoc'h\n"
101+"troc'hañ an tredan ?"
76102
77−#: qml/Components/Dialogs.qml:144
103+#: qml/Components/Dialogs.qml:147
78104msgid "Power off"
79105msgstr "Lazhañ"
80106
81−#: qml/Components/Dialogs.qml:162
107+#: qml/Components/Dialogs.qml:157
108+msgid "Restart"
109+msgstr "Adloc'hañ"
110+
111+#: qml/Components/Dialogs.qml:167
82112msgid "Cancel"
83113msgstr "Nullañ"
84114
@@ -135,60 +165,44 @@ msgstr ""
135165"Mestroniañ a rit ar jestroù ha gallout a rit kregiñ da implijout ar "
136166"pellgomzer<br><br>Touchit d'ar skramm evit kregiñ ganti"
137167
138−#: qml/Components/Lockscreen.qml:167
139−msgid "Please wait"
140−msgstr "Gortozit, mar plij"
141−
142−#: qml/Components/Lockscreen.qml:172
143−msgid "Too many incorrect attempts"
144−msgstr "Re a daolioù-esae direizh"
145−
146−#: qml/Components/Lockscreen.qml:206
168+#: qml/Components/Lockscreen.qml:220
147169msgid "Emergency Call"
148170msgstr "Pellgomzadenn vallus"
149171
150−#: qml/Components/Lockscreen.qml:226
172+#: qml/Components/Lockscreen.qml:252
151173msgid "OK"
152174msgstr "Mat eo"
153175
154−#: qml/Components/PassphraseLockscreen.qml:61
155−#, qt-format
156−msgid "Hello %1"
157−msgstr "Demat %1"
158−
159−#: qml/Components/PassphraseLockscreen.qml:61
160−msgid "Hello"
161−msgstr "Demat"
162−
163−#: qml/Dash/GenericScopeView.qml:361
176+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
164177msgid "See less"
165178msgstr "Gwelet nebeutoc'h"
166179
167−#: qml/Dash/GenericScopeView.qml:361
180+#: qml/Dash/GenericScopeView.qml:434
168181msgid "See all"
169182msgstr "Gwelet pep tra"
170183
171−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
184+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
185+#: qml/Panel/SearchIndicator.qml:27
172186msgid "Search"
173187msgstr "Klask"
174188
175−#: qml/Dash/PageHeader.qml:270
189+#: qml/Dash/PageHeader.qml:268
176190msgid "Settings"
177−msgstr ""
191+msgstr "Arventennoù"
178192
179−#: qml/Dash/PageHeader.qml:279
193+#: qml/Dash/PageHeader.qml:275
180194msgid "Remove from Favorites"
181−msgstr ""
195+msgstr "Lemel eus ar sinedoù"
182196
183−#: qml/Dash/PageHeader.qml:279
197+#: qml/Dash/PageHeader.qml:275
184198msgid "Add to Favorites"
185−msgstr ""
199+msgstr "Ouzhpennañ d'ar sinedoù"
186200
187−#: qml/Dash/Previews/PreviewActionCombo.qml:34
201+#: qml/Dash/Previews/PreviewActionCombo.qml:35
188202msgid "More..."
189203msgstr "Muioc'h..."
190204
191−#: qml/Dash/Previews/PreviewActionCombo.qml:34
205+#: qml/Dash/Previews/PreviewActionCombo.qml:35
192206msgid "Less..."
193207msgstr "Nebeutoc'h..."
194208
@@ -204,15 +218,23 @@ msgstr "Ouzhpennañ un ali"
204218msgid "Send"
205219msgstr "Kas"
206220
207−#: qml/Dash/ScopesOverview.qml:201
208−msgid "Manage Dash"
209−msgstr "Merañ an daolenn-vourzh"
221+#: qml/Dash/PullToRefreshScopeStyle.qml:55
222+msgid "Pull to refresh…"
223+msgstr "Tennañ evit freskaat..."
224+
225+#: qml/Dash/PullToRefreshScopeStyle.qml:60
226+msgid "Release to refresh…"
227+msgstr "Lezel da vont evit freskaat..."
210228
211−#: qml/Dash/ScopesOverview.qml:408
229+#: qml/Dash/ScopesOverview.qml:206
230+msgid "Manage Scopes"
231+msgstr "Merañ ar c'hefluskerioù enklask"
232+
233+#: qml/Dash/ScopesOverview.qml:428
212234msgid "Done"
213235msgstr "Graet eo"
214236
215−#: qml/Dash/ScopesOverview.qml:434
237+#: qml/Dash/ScopesOverview.qml:454
216238msgid "Store"
217239msgstr "Enrollañ"
218240
@@ -225,10 +247,10 @@ msgid "All"
225247msgstr "An holl anezho"
226248
227249#: qml/Greeter/Greeter.qml:157
228−msgid "Swipe to unlock"
229−msgstr "Riklañ evit dibrennañ"
250+msgid "Unlock"
251+msgstr "Dibrennañ"
230252
231−#: qml/Hud/HudParametrizedActionsPage.qml:132
253+#: qml/Hud/HudParametrizedActionsPage.qml:139
232254msgid "Confirm"
233255msgstr "Kadarnaat"
234256
@@ -248,18 +270,10 @@ msgstr "Komzit bremañ..."
248270msgid "Speaking..."
249271msgstr "O komz..."
250272
251−#: qml/Notifications/NotificationMenuItemFactory.qml:105
273+#: qml/Notifications/NotificationMenuItemFactory.qml:116
252274msgid "Show password"
253275msgstr "Diskouez ar ger-tremen"
254276
255−#: qml/Notifications/NotificationMenuItemFactory.qml:120
256−msgid "Enter SIM PIN"
257−msgstr "Ebarzhit kod PIN ar gartenn SIM"
258−
259−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
260−msgid "Sorry, incorrect PIN"
261−msgstr "Siwazh, kod PIN direizh"
262−
263277#: qml/Panel/ActiveCallHint.qml:77
264278msgid "Tap to return to call..."
265279msgstr "Touchit evit distreiñ d'ar bellgomzadenn..."
@@ -268,27 +282,31 @@ msgstr "Touchit evit distreiñ d'ar bellgomzadenn..."
268282msgid "Conference"
269283msgstr "Kendiviz"
270284
271−#: qml/Panel/Indicators/MenuItemFactory.qml:651
285+#: qml/Panel/Indicators/MenuItemFactory.qml:600
286+msgid "Nothing is playing"
287+msgstr "Ne lenner netra bremañ"
288+
289+#: qml/Panel/Indicators/MenuItemFactory.qml:748
272290msgid "In queue…"
273291msgstr "El lostennad..."
274292
275−#: qml/Panel/Indicators/MenuItemFactory.qml:655
293+#: qml/Panel/Indicators/MenuItemFactory.qml:752
276294msgid "Downloading"
277295msgstr "O pellgargañ"
278296
279−#: qml/Panel/Indicators/MenuItemFactory.qml:657
297+#: qml/Panel/Indicators/MenuItemFactory.qml:754
280298msgid "Paused, tap to resume"
281299msgstr "Ehanet, touchit evit adkregiñ"
282300
283−#: qml/Panel/Indicators/MenuItemFactory.qml:659
301+#: qml/Panel/Indicators/MenuItemFactory.qml:756
284302msgid "Canceled"
285303msgstr "Nullet"
286304
287−#: qml/Panel/Indicators/MenuItemFactory.qml:661
305+#: qml/Panel/Indicators/MenuItemFactory.qml:758
288306msgid "Finished"
289307msgstr "Echu"
290308
291−#: qml/Panel/Indicators/MenuItemFactory.qml:663
309+#: qml/Panel/Indicators/MenuItemFactory.qml:760
292310msgid "Failed, tap to retry"
293311msgstr "C'hwitet, touchit evit adkregiñ"
294312
@@ -300,45 +318,49 @@ msgstr "Dibrennañ ar gartenn SIM"
300318msgid "Roaming"
301319msgstr "O kantren"
302320
303−#: qml/Shell.qml:266
304−msgid "Enter your passphrase"
305−msgstr "Ebarzhit ho frazenn-dremen"
321+#: qml/Shell.qml:346
322+msgid "Enter passphrase"
323+msgstr "Merkañ ar frazenn-dremen"
306324
307−#: qml/Shell.qml:267
325+#: qml/Shell.qml:347
308326msgid "Sorry, incorrect passphrase"
309327msgstr "Siwazh, frazenn-dremen direizh"
310328
311−#: qml/Shell.qml:282
312−msgid "Enter your passcode"
313−msgstr ""
329+#: qml/Shell.qml:348
330+msgid "Please re-enter"
331+msgstr "Adverkañ, mar plij"
332+
333+#: qml/Shell.qml:350
334+msgid "Enter passcode"
335+msgstr "Merkañ ar c'hod-tremen"
314336
315−#: qml/Shell.qml:283
337+#: qml/Shell.qml:351
316338msgid "Sorry, incorrect passcode"
317−msgstr ""
339+msgstr "Digarezit, kod-tremen direizh"
318340
319−#: qml/Shell.qml:273
341+#: qml/Shell.qml:354
320342#, qt-format
321−msgid "Enter your %1"
322−msgstr "Ebarzhit ho %1"
343+msgid "Enter %1"
344+msgstr "Merkañ %1"
323345
324−#: qml/Shell.qml:274
346+#: qml/Shell.qml:355
325347#, qt-format
326348msgid "Sorry, incorrect %1"
327349msgstr "Siwazh, %1 direizh"
328350
329−#: qml/Shell.qml:310
351+#: qml/Shell.qml:390
330352msgid "Sorry, incorrect passphrase."
331353msgstr "Siwazh, frazenn-dremen direizh"
332354
333−#: qml/Shell.qml:311
355+#: qml/Shell.qml:391
334356msgid "Sorry, incorrect passcode."
335357msgstr "Siwazh, kod-tremen direizh"
336358
337−#: qml/Shell.qml:312
359+#: qml/Shell.qml:392
338360msgid "This will be your last attempt."
339361msgstr "Ho taol-esae diwezhañ e vo."
340362
341−#: qml/Shell.qml:314
363+#: qml/Shell.qml:394
342364msgid ""
343365"If passphrase is entered incorrectly, your phone will conduct a factory "
344366"reset and all personal data will be deleted."
@@ -346,7 +368,7 @@ msgstr ""
346368"Ma vez ebarzhet ur frazenn-dremen direizh, e vo adderaouekaet ho pellgomzer "
347369"gant arventennoù al labouradeg hag e vo diverket an holl roadennoù personel"
348370
349−#: qml/Shell.qml:315
371+#: qml/Shell.qml:395
350372msgid ""
351373"If passcode is entered incorrectly, your phone will conduct a factory reset "
352374"and all personal data will be deleted."
@@ -354,11 +376,8 @@ msgstr ""
354376"Ma vez ebarzhet ur c'hod-tremen direizh, e vo adderaouekaet ho pellgomzer "
355377"gant arventennoù al labouradeg hag e vo diverket an holl roadennoù personel."
356378
357−#~ msgid "Are you sure you would like to turn power off?"
358−#~ msgstr "Ha sur oc'h e fell deoc'h lazhañ ar benveg ?"
359−
360−#~ msgid "Restart"
361−#~ msgstr "Adloc'hañ"
379+#~ msgid "Sorry, incorrect PIN"
380+#~ msgstr "Siwazh, kod PIN direizh"
362381
363−#~ msgid "Enter your PIN"
364−#~ msgstr "Ebarzhit ho kod PIN"
382+#~ msgid "Enter SIM PIN"
383+#~ msgstr "Ebarzhit kod PIN ar gartenn SIM"
po/bs.po+88−71
@@ -7,29 +7,50 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
1111"PO-Revision-Date: 2014-01-16 22:33+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Bosnian <bs@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:29+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19+"X-Launchpad-Export-Date: 2014-10-09 06:36+0000\n"
20+"X-Generator: Launchpad (build 17196)\n"
1921
20−#: plugins/LightDM/Greeter.cpp:129
22+#: plugins/LightDM/Greeter.cpp:130
2123msgid "Password: "
2224msgstr ""
2325
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
26+#: plugins/Unity/Launcher/launcheritem.cpp:45
27+#: plugins/Unity/Launcher/launcheritem.cpp:91
2628msgid "Pin shortcut"
2729msgstr ""
2830
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
31+#: plugins/Unity/Launcher/launcheritem.cpp:91
3032msgid "Unpin shortcut"
3133msgstr ""
3234
35+#: qml/Components/DelayedLockscreen.qml:47
36+msgid "Device Locked"
37+msgstr ""
38+
39+#: qml/Components/DelayedLockscreen.qml:62
40+msgid "You have been locked out due to too many failed passphrase attempts."
41+msgstr ""
42+
43+#: qml/Components/DelayedLockscreen.qml:63
44+msgid "You have been locked out due to too many failed passcode attempts."
45+msgstr ""
46+
47+#: qml/Components/DelayedLockscreen.qml:72
48+#, qt-format
49+msgid "Please wait %1 minute and then try again…"
50+msgid_plural "Please wait %1 minutes and then try again…"
51+msgstr[0] ""
52+msgstr[1] ""
53+
3354#: qml/Components/Dialogs.qml:70
3455msgid "Log out"
3556msgstr ""
@@ -74,11 +95,15 @@ msgid ""
7495"to power off?"
7596msgstr ""
7697
77−#: qml/Components/Dialogs.qml:144
98+#: qml/Components/Dialogs.qml:147
7899msgid "Power off"
79100msgstr ""
80101
81−#: qml/Components/Dialogs.qml:162
102+#: qml/Components/Dialogs.qml:157
103+msgid "Restart"
104+msgstr ""
105+
106+#: qml/Components/Dialogs.qml:167
82107msgid "Cancel"
83108msgstr ""
84109
@@ -128,60 +153,44 @@ msgid ""
128153"phone<br><br>Tap on the screen to start"
129154msgstr ""
130155
131−#: qml/Components/Lockscreen.qml:167
132−msgid "Please wait"
133−msgstr ""
134−
135−#: qml/Components/Lockscreen.qml:172
136−msgid "Too many incorrect attempts"
137−msgstr ""
138−
139−#: qml/Components/Lockscreen.qml:206
156+#: qml/Components/Lockscreen.qml:220
140157msgid "Emergency Call"
141158msgstr ""
142159
143−#: qml/Components/Lockscreen.qml:226
160+#: qml/Components/Lockscreen.qml:252
144161msgid "OK"
145162msgstr ""
146163
147−#: qml/Components/PassphraseLockscreen.qml:61
148−#, qt-format
149−msgid "Hello %1"
150−msgstr ""
151−
152−#: qml/Components/PassphraseLockscreen.qml:61
153−msgid "Hello"
154−msgstr ""
155−
156−#: qml/Dash/GenericScopeView.qml:361
164+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
157165msgid "See less"
158166msgstr ""
159167
160−#: qml/Dash/GenericScopeView.qml:361
168+#: qml/Dash/GenericScopeView.qml:434
161169msgid "See all"
162170msgstr ""
163171
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
172+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
173+#: qml/Panel/SearchIndicator.qml:27
165174msgid "Search"
166175msgstr ""
167176
168−#: qml/Dash/PageHeader.qml:270
177+#: qml/Dash/PageHeader.qml:268
169178msgid "Settings"
170179msgstr ""
171180
172−#: qml/Dash/PageHeader.qml:279
181+#: qml/Dash/PageHeader.qml:275
173182msgid "Remove from Favorites"
174183msgstr ""
175184
176−#: qml/Dash/PageHeader.qml:279
185+#: qml/Dash/PageHeader.qml:275
177186msgid "Add to Favorites"
178187msgstr ""
179188
180−#: qml/Dash/Previews/PreviewActionCombo.qml:34
189+#: qml/Dash/Previews/PreviewActionCombo.qml:35
181190msgid "More..."
182191msgstr ""
183192
184−#: qml/Dash/Previews/PreviewActionCombo.qml:34
193+#: qml/Dash/Previews/PreviewActionCombo.qml:35
185194msgid "Less..."
186195msgstr ""
187196
@@ -197,15 +206,23 @@ msgstr ""
197206msgid "Send"
198207msgstr ""
199208
200−#: qml/Dash/ScopesOverview.qml:201
201−msgid "Manage Dash"
209+#: qml/Dash/PullToRefreshScopeStyle.qml:55
210+msgid "Pull to refresh…"
211+msgstr ""
212+
213+#: qml/Dash/PullToRefreshScopeStyle.qml:60
214+msgid "Release to refresh…"
215+msgstr ""
216+
217+#: qml/Dash/ScopesOverview.qml:206
218+msgid "Manage Scopes"
202219msgstr ""
203220
204−#: qml/Dash/ScopesOverview.qml:408
221+#: qml/Dash/ScopesOverview.qml:428
205222msgid "Done"
206223msgstr ""
207224
208−#: qml/Dash/ScopesOverview.qml:434
225+#: qml/Dash/ScopesOverview.qml:454
209226msgid "Store"
210227msgstr ""
211228
@@ -218,10 +235,10 @@ msgid "All"
218235msgstr ""
219236
220237#: qml/Greeter/Greeter.qml:157
221−msgid "Swipe to unlock"
238+msgid "Unlock"
222239msgstr ""
223240
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
241+#: qml/Hud/HudParametrizedActionsPage.qml:139
225242msgid "Confirm"
226243msgstr ""
227244
@@ -241,18 +258,10 @@ msgstr ""
241258msgid "Speaking..."
242259msgstr ""
243260
244−#: qml/Notifications/NotificationMenuItemFactory.qml:105
261+#: qml/Notifications/NotificationMenuItemFactory.qml:116
245262msgid "Show password"
246263msgstr ""
247264
248−#: qml/Notifications/NotificationMenuItemFactory.qml:120
249−msgid "Enter SIM PIN"
250−msgstr ""
251−
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
253−msgid "Sorry, incorrect PIN"
254−msgstr ""
255−
256265#: qml/Panel/ActiveCallHint.qml:77
257266msgid "Tap to return to call..."
258267msgstr ""
@@ -261,27 +270,31 @@ msgstr ""
261270msgid "Conference"
262271msgstr ""
263272
264−#: qml/Panel/Indicators/MenuItemFactory.qml:651
273+#: qml/Panel/Indicators/MenuItemFactory.qml:600
274+msgid "Nothing is playing"
275+msgstr ""
276+
277+#: qml/Panel/Indicators/MenuItemFactory.qml:748
265278msgid "In queue…"
266279msgstr ""
267280
268−#: qml/Panel/Indicators/MenuItemFactory.qml:655
281+#: qml/Panel/Indicators/MenuItemFactory.qml:752
269282msgid "Downloading"
270283msgstr ""
271284
272−#: qml/Panel/Indicators/MenuItemFactory.qml:657
285+#: qml/Panel/Indicators/MenuItemFactory.qml:754
273286msgid "Paused, tap to resume"
274287msgstr ""
275288
276−#: qml/Panel/Indicators/MenuItemFactory.qml:659
289+#: qml/Panel/Indicators/MenuItemFactory.qml:756
277290msgid "Canceled"
278291msgstr ""
279292
280−#: qml/Panel/Indicators/MenuItemFactory.qml:661
293+#: qml/Panel/Indicators/MenuItemFactory.qml:758
281294msgid "Finished"
282295msgstr ""
283296
284−#: qml/Panel/Indicators/MenuItemFactory.qml:663
297+#: qml/Panel/Indicators/MenuItemFactory.qml:760
285298msgid "Failed, tap to retry"
286299msgstr ""
287300
@@ -293,51 +306,55 @@ msgstr ""
293306msgid "Roaming"
294307msgstr ""
295308
296−#: qml/Shell.qml:266
297−msgid "Enter your passphrase"
309+#: qml/Shell.qml:346
310+msgid "Enter passphrase"
298311msgstr ""
299312
300−#: qml/Shell.qml:267
313+#: qml/Shell.qml:347
301314msgid "Sorry, incorrect passphrase"
302315msgstr ""
303316
304−#: qml/Shell.qml:282
305−msgid "Enter your passcode"
317+#: qml/Shell.qml:348
318+msgid "Please re-enter"
319+msgstr ""
320+
321+#: qml/Shell.qml:350
322+msgid "Enter passcode"
306323msgstr ""
307324
308−#: qml/Shell.qml:283
325+#: qml/Shell.qml:351
309326msgid "Sorry, incorrect passcode"
310327msgstr ""
311328
312−#: qml/Shell.qml:273
329+#: qml/Shell.qml:354
313330#, qt-format
314−msgid "Enter your %1"
331+msgid "Enter %1"
315332msgstr ""
316333
317−#: qml/Shell.qml:274
334+#: qml/Shell.qml:355
318335#, qt-format
319336msgid "Sorry, incorrect %1"
320337msgstr ""
321338
322−#: qml/Shell.qml:310
339+#: qml/Shell.qml:390
323340msgid "Sorry, incorrect passphrase."
324341msgstr ""
325342
326−#: qml/Shell.qml:311
343+#: qml/Shell.qml:391
327344msgid "Sorry, incorrect passcode."
328345msgstr ""
329346
330−#: qml/Shell.qml:312
347+#: qml/Shell.qml:392
331348msgid "This will be your last attempt."
332349msgstr ""
333350
334−#: qml/Shell.qml:314
351+#: qml/Shell.qml:394
335352msgid ""
336353"If passphrase is entered incorrectly, your phone will conduct a factory "
337354"reset and all personal data will be deleted."
338355msgstr ""
339356
340−#: qml/Shell.qml:315
357+#: qml/Shell.qml:395
341358msgid ""
342359"If passcode is entered incorrectly, your phone will conduct a factory reset "
343360"and all personal data will be deleted."
po/ca.po+121−101
@@ -7,78 +7,108 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-08-27 14:23+0000\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
11+"PO-Revision-Date: 2014-10-07 10:51+0000\n"
1212"Last-Translator: David Planella <david.planella@ubuntu.com>\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"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-10-09 06:36+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
2223msgstr "Contrasenya: "
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr "Enganxa la drecera"
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr "Desenganxa la drecera"
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr "Dispositiu bloquejat"
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr ""
41+"Se us ha bloquejat l'accés al dispositiu. Heu sobrepassat el nombre "
42+"d'intents d'introducció de la contrasenya."
43+
44+#: qml/Components/DelayedLockscreen.qml:63
45+msgid "You have been locked out due to too many failed passcode attempts."
46+msgstr ""
47+"Se us ha bloquejat l'accés al dispositiu. Heu sobrepassat el nombre "
48+"d'intents d'introducció del codi d'accés."
49+
50+#: qml/Components/DelayedLockscreen.qml:72
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] "Espereu %1 minut i torneu-ho a intentar..."
55+msgstr[1] "Espereu %1 minuts i torneu-ho a intentar..."
56+
3357#: qml/Components/Dialogs.qml:70
3458msgid "Log out"
35−msgstr ""
59+msgstr "Surt"
3660
3761#: qml/Components/Dialogs.qml:71
3862msgid "Are you sure you want to log out?"
39−msgstr ""
63+msgstr "Segur que voleu sortir?"
4064
4165#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4266#: qml/Components/Dialogs.qml:122
4367msgid "No"
44−msgstr ""
68+msgstr "No"
4569
4670#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4771#: qml/Components/Dialogs.qml:129
4872msgid "Yes"
49−msgstr ""
73+msgstr "Sí"
5074
5175#: qml/Components/Dialogs.qml:94
5276msgid "Shut down"
53−msgstr ""
77+msgstr "Apaga"
5478
5579#: qml/Components/Dialogs.qml:95
5680msgid "Are you sure you want to shut down?"
57−msgstr ""
81+msgstr "Segur que voleu apagar?"
5882
5983#: qml/Components/Dialogs.qml:119
6084msgid "Reboot"
61−msgstr ""
85+msgstr "Reinicia"
6286
6387#: qml/Components/Dialogs.qml:120
6488msgid "Are you sure you want to reboot?"
65−msgstr ""
89+msgstr "Segur que voleu reiniciar?"
6690
6791#: qml/Components/Dialogs.qml:144
6892msgid "Power"
69−msgstr ""
93+msgstr "Energia"
7094
7195#: qml/Components/Dialogs.qml:145
7296msgid ""
7397"Are you sure you would like\n"
7498"to power off?"
7599msgstr ""
100+"Segur que voleu\n"
101+"apagar?"
76102
77−#: qml/Components/Dialogs.qml:144
103+#: qml/Components/Dialogs.qml:147
78104msgid "Power off"
79−msgstr "Apaga'l"
105+msgstr "Apaga"
80106
81−#: qml/Components/Dialogs.qml:162
107+#: qml/Components/Dialogs.qml:157
108+msgid "Restart"
109+msgstr "Reinicia"
110+
111+#: qml/Components/Dialogs.qml:167
82112msgid "Cancel"
83113msgstr "Cancel·la"
84114
@@ -136,60 +166,44 @@ msgstr ""
136166"Ja heu après com utilitzar els gestos de les vores per fer servir el "
137167"telèfon<br><br>Feu un toc a la pantalla per començar"
138168
139−#: qml/Components/Lockscreen.qml:167
140−msgid "Please wait"
141−msgstr "Espereu"
142−
143−#: qml/Components/Lockscreen.qml:172
144−msgid "Too many incorrect attempts"
145−msgstr "Massa intents incorrectes"
146−
147−#: qml/Components/Lockscreen.qml:206
169+#: qml/Components/Lockscreen.qml:220
148170msgid "Emergency Call"
149171msgstr "Trucada d'emergència"
150172
151−#: qml/Components/Lockscreen.qml:226
173+#: qml/Components/Lockscreen.qml:252
152174msgid "OK"
153175msgstr "D'acord"
154176
155−#: qml/Components/PassphraseLockscreen.qml:61
156−#, qt-format
157−msgid "Hello %1"
158−msgstr "Hola %1"
159−
160−#: qml/Components/PassphraseLockscreen.qml:61
161−msgid "Hello"
162−msgstr "Hola"
163−
164−#: qml/Dash/GenericScopeView.qml:361
177+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
165178msgid "See less"
166179msgstr "Mostra'n menys"
167180
168−#: qml/Dash/GenericScopeView.qml:361
181+#: qml/Dash/GenericScopeView.qml:434
169182msgid "See all"
170183msgstr "Mostra-ho tot"
171184
172−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
185+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
186+#: qml/Panel/SearchIndicator.qml:27
173187msgid "Search"
174188msgstr "Cerca"
175189
176−#: qml/Dash/PageHeader.qml:270
190+#: qml/Dash/PageHeader.qml:268
177191msgid "Settings"
178−msgstr ""
192+msgstr "Paràmetres"
179193
180−#: qml/Dash/PageHeader.qml:279
194+#: qml/Dash/PageHeader.qml:275
181195msgid "Remove from Favorites"
182−msgstr ""
196+msgstr "Suprimeix dels preferits"
183197
184−#: qml/Dash/PageHeader.qml:279
198+#: qml/Dash/PageHeader.qml:275
185199msgid "Add to Favorites"
186−msgstr ""
200+msgstr "Afegeix als preferits"
187201
188−#: qml/Dash/Previews/PreviewActionCombo.qml:34
202+#: qml/Dash/Previews/PreviewActionCombo.qml:35
189203msgid "More..."
190204msgstr "Més..."
191205
192−#: qml/Dash/Previews/PreviewActionCombo.qml:34
206+#: qml/Dash/Previews/PreviewActionCombo.qml:35
193207msgid "Less..."
194208msgstr "Menys..."
195209
@@ -205,15 +219,23 @@ msgstr "Afegiu una ressenya"
205219msgid "Send"
206220msgstr "Envia"
207221
208−#: qml/Dash/ScopesOverview.qml:201
209−msgid "Manage Dash"
210−msgstr "Gestiona el tauler"
222+#: qml/Dash/PullToRefreshScopeStyle.qml:55
223+msgid "Pull to refresh…"
224+msgstr "Estireu per actualitzar..."
225+
226+#: qml/Dash/PullToRefreshScopeStyle.qml:60
227+msgid "Release to refresh…"
228+msgstr "Deixeu anar per actualitzar..."
229+
230+#: qml/Dash/ScopesOverview.qml:206
231+msgid "Manage Scopes"
232+msgstr "Gestioneu les lents"
211233
212−#: qml/Dash/ScopesOverview.qml:408
234+#: qml/Dash/ScopesOverview.qml:428
213235msgid "Done"
214236msgstr "Fet"
215237
216−#: qml/Dash/ScopesOverview.qml:434
238+#: qml/Dash/ScopesOverview.qml:454
217239msgid "Store"
218240msgstr "Botiga"
219241
@@ -226,10 +248,10 @@ msgid "All"
226248msgstr "Totes"
227249
228250#: qml/Greeter/Greeter.qml:157
229−msgid "Swipe to unlock"
230−msgstr "Feu lliscar el dit per desbloquejar"
251+msgid "Unlock"
252+msgstr "Desbloca"
231253
232−#: qml/Hud/HudParametrizedActionsPage.qml:132
254+#: qml/Hud/HudParametrizedActionsPage.qml:139
233255msgid "Confirm"
234256msgstr "Confirma"
235257
@@ -249,18 +271,10 @@ msgstr "Parleu..."
249271msgid "Speaking..."
250272msgstr "S'està parlant..."
251273
252−#: qml/Notifications/NotificationMenuItemFactory.qml:105
274+#: qml/Notifications/NotificationMenuItemFactory.qml:116
253275msgid "Show password"
254276msgstr "Mostra la contrasenya"
255277
256−#: qml/Notifications/NotificationMenuItemFactory.qml:120
257−msgid "Enter SIM PIN"
258−msgstr "Introduïu el PIN de la tarjeta SIM"
259−
260−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
261−msgid "Sorry, incorrect PIN"
262−msgstr "El PIN no és correcte"
263−
264278#: qml/Panel/ActiveCallHint.qml:77
265279msgid "Tap to return to call..."
266280msgstr "Feu un toc per tornar a la trucada..."
@@ -269,27 +283,31 @@ msgstr "Feu un toc per tornar a la trucada..."
269283msgid "Conference"
270284msgstr "Conferència"
271285
272−#: qml/Panel/Indicators/MenuItemFactory.qml:651
286+#: qml/Panel/Indicators/MenuItemFactory.qml:600
287+msgid "Nothing is playing"
288+msgstr "No s'està reproduint res"
289+
290+#: qml/Panel/Indicators/MenuItemFactory.qml:748
273291msgid "In queue…"
274292msgstr "A la cua..."
275293
276−#: qml/Panel/Indicators/MenuItemFactory.qml:655
294+#: qml/Panel/Indicators/MenuItemFactory.qml:752
277295msgid "Downloading"
278296msgstr "S'està baixant"
279297
280−#: qml/Panel/Indicators/MenuItemFactory.qml:657
298+#: qml/Panel/Indicators/MenuItemFactory.qml:754
281299msgid "Paused, tap to resume"
282300msgstr "En pausa, feu un toc per continuar"
283301
284−#: qml/Panel/Indicators/MenuItemFactory.qml:659
302+#: qml/Panel/Indicators/MenuItemFactory.qml:756
285303msgid "Canceled"
286304msgstr "S'ha cancel·lat"
287305
288−#: qml/Panel/Indicators/MenuItemFactory.qml:661
306+#: qml/Panel/Indicators/MenuItemFactory.qml:758
289307msgid "Finished"
290308msgstr "S'ha finalitzat"
291309
292−#: qml/Panel/Indicators/MenuItemFactory.qml:663
310+#: qml/Panel/Indicators/MenuItemFactory.qml:760
293311msgid "Failed, tap to retry"
294312msgstr "Ha fallat, feu un toc per tornar-ho a intentar"
295313
@@ -301,45 +319,49 @@ msgstr "Desbloca la SIM"
301319msgid "Roaming"
302320msgstr "Itinerància"
303321
304−#: qml/Shell.qml:266
305−msgid "Enter your passphrase"
306−msgstr "Escriviu la contrasenya"
322+#: qml/Shell.qml:346
323+msgid "Enter passphrase"
324+msgstr "Introduïu la contrasenya"
307325
308−#: qml/Shell.qml:267
326+#: qml/Shell.qml:347
309327msgid "Sorry, incorrect passphrase"
310328msgstr "La contrasenya no és correcta"
311329
312−#: qml/Shell.qml:282
313−msgid "Enter your passcode"
314−msgstr ""
330+#: qml/Shell.qml:348
331+msgid "Please re-enter"
332+msgstr "Torneu-ho a introduir"
333+
334+#: qml/Shell.qml:350
335+msgid "Enter passcode"
336+msgstr "Introduïu el codi d'accés"
315337
316−#: qml/Shell.qml:283
338+#: qml/Shell.qml:351
317339msgid "Sorry, incorrect passcode"
318−msgstr ""
340+msgstr "El codi d'accés no és correcte"
319341
320−#: qml/Shell.qml:273
342+#: qml/Shell.qml:354
321343#, qt-format
322−msgid "Enter your %1"
323−msgstr "Introduïu la %1"
344+msgid "Enter %1"
345+msgstr "Introduïu: %1"
324346
325−#: qml/Shell.qml:274
347+#: qml/Shell.qml:355
326348#, qt-format
327349msgid "Sorry, incorrect %1"
328350msgstr "Incorrecte (%1)"
329351
330−#: qml/Shell.qml:310
352+#: qml/Shell.qml:390
331353msgid "Sorry, incorrect passphrase."
332354msgstr "La contrasenya és incorrecta"
333355
334−#: qml/Shell.qml:311
356+#: qml/Shell.qml:391
335357msgid "Sorry, incorrect passcode."
336−msgstr "La clau és incorrecta"
358+msgstr "El codi d'accés no és correcte"
337359
338−#: qml/Shell.qml:312
360+#: qml/Shell.qml:392
339361msgid "This will be your last attempt."
340362msgstr "Aquest serà el darrer intent."
341363
342−#: qml/Shell.qml:314
364+#: qml/Shell.qml:394
343365msgid ""
344366"If passphrase is entered incorrectly, your phone will conduct a factory "
345367"reset and all personal data will be deleted."
@@ -348,19 +370,17 @@ msgstr ""
348370"reinicialitzarà a l'estat de fàbrica i se suprimiran totes les dades "
349371"personals."
350372
351−#: qml/Shell.qml:315
373+#: qml/Shell.qml:395
352374msgid ""
353375"If passcode is entered incorrectly, your phone will conduct a factory reset "
354376"and all personal data will be deleted."
355377msgstr ""
356−"Si la clau s'introdueix de manera incorrecta, el telèfon es reinicialitzarà "
357−"a l'estat de fàbrica i se suprimiran totes les dades personals."
358−
359−#~ msgid "Are you sure you would like to turn power off?"
360−#~ msgstr "Segur que voleu apagar el dispositiu?"
378+"Si el codi d'accés s'introdueix de manera incorrecta, el telèfon es "
379+"reinicialitzarà a l'estat de fàbrica i se suprimiran totes les dades "
380+"personals."
361381
362−#~ msgid "Restart"
363−#~ msgstr "Reinicia'l"
382+#~ msgid "Sorry, incorrect PIN"
383+#~ msgstr "El PIN no és correcte"
364384
365−#~ msgid "Enter your PIN"
366−#~ msgstr "Escriviu el PIN"
385+#~ msgid "Enter SIM PIN"
386+#~ msgstr "Introduïu el PIN de la targeta SIM"
po/ca@valencia.ponew file+380
@@ -0,0 +1,380 @@
1+# Catalan translation for unity8
2+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
3+# This file is distributed under the same license as the unity8 package.
4+# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
5+#
6+msgid ""
7+msgstr ""
8+"Project-Id-Version: unity8\n"
9+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
11+"PO-Revision-Date: 2014-10-15 14:39+0000\n"
12+"Last-Translator: Pau Iranzo <Unknown>\n"
13+"Language-Team: Catalan <ca@li.org>\n"
14+"MIME-Version: 1.0\n"
15+"Content-Type: text/plain; charset=UTF-8\n"
16+"Content-Transfer-Encoding: 8bit\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-10-16 05:44+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
20+
21+#: plugins/LightDM/Greeter.cpp:130
22+msgid "Password: "
23+msgstr "Contrasenya: "
24+
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
27+msgid "Pin shortcut"
28+msgstr "Apega la drecera"
29+
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
31+msgid "Unpin shortcut"
32+msgstr "Desenganxa la drecera"
33+
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr "Dispositiu bloquejat"
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr ""
41+"Se vos ha bloquejat l'accés al dispositiu. Heu sobrepassat el nombre "
42+"d'intents d'introducció de la contrasenya."
43+
44+#: qml/Components/DelayedLockscreen.qml:63
45+msgid "You have been locked out due to too many failed passcode attempts."
46+msgstr ""
47+"Se vos ha bloquejat l'accés al dispositiu. Heu sobrepassat el nombre "
48+"d'intents d'introducció del codi d'accés."
49+
50+#: qml/Components/DelayedLockscreen.qml:72
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] "Espereu %1 minut i torneu-ho a intentar..."
55+msgstr[1] "Espereu %1 minuts i torneu-ho a intentar..."
56+
57+#: qml/Components/Dialogs.qml:70
58+msgid "Log out"
59+msgstr "Ix"
60+
61+#: qml/Components/Dialogs.qml:71
62+msgid "Are you sure you want to log out?"
63+msgstr "Segur que voleu eixir?"
64+
65+#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
66+#: qml/Components/Dialogs.qml:122
67+msgid "No"
68+msgstr "No"
69+
70+#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
71+#: qml/Components/Dialogs.qml:129
72+msgid "Yes"
73+msgstr "Sí"
74+
75+#: qml/Components/Dialogs.qml:94
76+msgid "Shut down"
77+msgstr "Apaga"
78+
79+#: qml/Components/Dialogs.qml:95
80+msgid "Are you sure you want to shut down?"
81+msgstr "Segur que voleu apagar?"
82+
83+#: qml/Components/Dialogs.qml:119
84+msgid "Reboot"
85+msgstr "Reinicia"
86+
87+#: qml/Components/Dialogs.qml:120
88+msgid "Are you sure you want to reboot?"
89+msgstr "Segur que voleu reiniciar?"
90+
91+#: qml/Components/Dialogs.qml:144
92+msgid "Power"
93+msgstr "Energia"
94+
95+#: qml/Components/Dialogs.qml:145
96+msgid ""
97+"Are you sure you would like\n"
98+"to power off?"
99+msgstr ""
100+"Segur que voleu\n"
101+"apagar?"
102+
103+#: qml/Components/Dialogs.qml:147
104+msgid "Power off"
105+msgstr "Apaga"
106+
107+#: qml/Components/Dialogs.qml:157
108+msgid "Restart"
109+msgstr "Reinicia"
110+
111+#: qml/Components/Dialogs.qml:167
112+msgid "Cancel"
113+msgstr "Cancel·la"
114+
115+#: qml/Components/EdgeDemoOverlay.qml:151
116+msgid "Skip intro"
117+msgstr "Omet la introducció"
118+
119+#: qml/Components/EdgeDemo.qml:112
120+msgid "Right edge"
121+msgstr "Vora dreta"
122+
123+#: qml/Components/EdgeDemo.qml:113
124+msgid "Try swiping from the right edge to unlock the phone"
125+msgstr ""
126+"Proveu de lliscar el dit des de la vora dreta per desblocar el telèfon"
127+
128+#: qml/Components/EdgeDemo.qml:144
129+msgid "Top edge"
130+msgstr "Vora superior"
131+
132+#: qml/Components/EdgeDemo.qml:145
133+msgid "Try swiping from the top edge to access the indicators"
134+msgstr ""
135+"Proveu de lliscar el dit des de la vora superior per accedir als indicadors"
136+
137+#: qml/Components/EdgeDemo.qml:170
138+msgid "Close"
139+msgstr "Tanca"
140+
141+#: qml/Components/EdgeDemo.qml:171
142+msgid "Swipe up again to close the settings screen"
143+msgstr ""
144+"Llisqueu el dit cap amunt una altra vegada per tancar la pantalla de "
145+"configuració"
146+
147+#: qml/Components/EdgeDemo.qml:198
148+msgid "Left edge"
149+msgstr "Vora esquerra"
150+
151+#: qml/Components/EdgeDemo.qml:199
152+msgid "Swipe from the left to reveal the launcher for quick access to apps"
153+msgstr ""
154+"Llisqueu el dit des de la vora esquerra per mostrar el llançador i accedir "
155+"ràpidament a les aplicacions"
156+
157+#: qml/Components/EdgeDemo.qml:226
158+msgid "Well done"
159+msgstr "Enhorabona!"
160+
161+#: qml/Components/EdgeDemo.qml:227
162+msgid ""
163+"You have now mastered the edge gestures and can start using the "
164+"phone<br><br>Tap on the screen to start"
165+msgstr ""
166+"Ja heu aprés com utilitzar els gestos de les vores per fer servir el "
167+"telèfon<br><br>Feu un toc a la pantalla per començar"
168+
169+#: qml/Components/Lockscreen.qml:220
170+msgid "Emergency Call"
171+msgstr "Cridada d'emergència"
172+
173+#: qml/Components/Lockscreen.qml:252
174+msgid "OK"
175+msgstr "D'acord"
176+
177+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
178+msgid "See less"
179+msgstr "Mostra'n menys"
180+
181+#: qml/Dash/GenericScopeView.qml:434
182+msgid "See all"
183+msgstr "Mostra-ho tot"
184+
185+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
186+#: qml/Panel/SearchIndicator.qml:27
187+msgid "Search"
188+msgstr "Cerca"
189+
190+#: qml/Dash/PageHeader.qml:268
191+msgid "Settings"
192+msgstr "Paràmetres"
193+
194+#: qml/Dash/PageHeader.qml:275
195+msgid "Remove from Favorites"
196+msgstr "Suprimeix dels preferits"
197+
198+#: qml/Dash/PageHeader.qml:275
199+msgid "Add to Favorites"
200+msgstr "Afig als preferits"
201+
202+#: qml/Dash/Previews/PreviewActionCombo.qml:35
203+msgid "More..."
204+msgstr "Més..."
205+
206+#: qml/Dash/Previews/PreviewActionCombo.qml:35
207+msgid "Less..."
208+msgstr "Menys..."
209+
210+#: qml/Dash/Previews/PreviewRatingInput.qml:81
211+msgid "Rate this"
212+msgstr "Puntueu-ho"
213+
214+#: qml/Dash/Previews/PreviewRatingInput.qml:126
215+msgid "Add a review"
216+msgstr "Afegiu una ressenya"
217+
218+#: qml/Dash/Previews/PreviewRatingInput.qml:166
219+msgid "Send"
220+msgstr "Envia"
221+
222+#: qml/Dash/PullToRefreshScopeStyle.qml:55
223+msgid "Pull to refresh…"
224+msgstr "Estireu per actualitzar..."
225+
226+#: qml/Dash/PullToRefreshScopeStyle.qml:60
227+msgid "Release to refresh…"
228+msgstr "Deixeu anar per actualitzar..."
229+
230+#: qml/Dash/ScopesOverview.qml:206
231+msgid "Manage Scopes"
232+msgstr "Gestioneu les lents"
233+
234+#: qml/Dash/ScopesOverview.qml:428
235+msgid "Done"
236+msgstr "Fet"
237+
238+#: qml/Dash/ScopesOverview.qml:454
239+msgid "Store"
240+msgstr "Botiga"
241+
242+#: qml/Dash/ScopesOverviewTab.qml:36
243+msgid "Favorites"
244+msgstr "Preferides"
245+
246+#: qml/Dash/ScopesOverviewTab.qml:54
247+msgid "All"
248+msgstr "Totes"
249+
250+#: qml/Greeter/Greeter.qml:157
251+msgid "Unlock"
252+msgstr "Desbloca"
253+
254+#: qml/Hud/HudParametrizedActionsPage.qml:139
255+msgid "Confirm"
256+msgstr "Confirma"
257+
258+#: qml/Hud/Hud.qml:61 qml/Hud/Hud.qml:99 qml/Hud/Hud.qml:372
259+msgid "Type or say a command"
260+msgstr "Escriviu o pronuncieu una orde"
261+
262+#: qml/Hud/Hud.qml:84
263+msgid "Loading. Please Wait..."
264+msgstr "S'està carregant. Espereu-vos un moment..."
265+
266+#: qml/Hud/Hud.qml:89
267+msgid "Speak Now..."
268+msgstr "Parleu..."
269+
270+#: qml/Hud/Hud.qml:94
271+msgid "Speaking..."
272+msgstr "S'està parlant..."
273+
274+#: qml/Notifications/NotificationMenuItemFactory.qml:116
275+msgid "Show password"
276+msgstr "Mostra la contrasenya"
277+
278+#: qml/Panel/ActiveCallHint.qml:77
279+msgid "Tap to return to call..."
280+msgstr "Feu un toc per tornar a la cridada..."
281+
282+#: qml/Panel/ActiveCallHint.qml:90
283+msgid "Conference"
284+msgstr "Conferència"
285+
286+#: qml/Panel/Indicators/MenuItemFactory.qml:600
287+msgid "Nothing is playing"
288+msgstr "No s'està reproduint res"
289+
290+#: qml/Panel/Indicators/MenuItemFactory.qml:748
291+msgid "In queue…"
292+msgstr "A la cua..."
293+
294+#: qml/Panel/Indicators/MenuItemFactory.qml:752
295+msgid "Downloading"
296+msgstr "S'està baixant"
297+
298+#: qml/Panel/Indicators/MenuItemFactory.qml:754
299+msgid "Paused, tap to resume"
300+msgstr "En pausa, feu un toc per continuar"
301+
302+#: qml/Panel/Indicators/MenuItemFactory.qml:756
303+msgid "Canceled"
304+msgstr "S'ha cancel·lat"
305+
306+#: qml/Panel/Indicators/MenuItemFactory.qml:758
307+msgid "Finished"
308+msgstr "S'ha finalitzat"
309+
310+#: qml/Panel/Indicators/MenuItemFactory.qml:760
311+msgid "Failed, tap to retry"
312+msgstr "Ha fallat, feu un toc per tornar-ho a intentar"
313+
314+#: qml/Panel/Indicators/ModemInfoItem.qml:105
315+msgid "Unlock SIM"
316+msgstr "Desbloca la SIM"
317+
318+#: qml/Panel/Indicators/RoamingIndication.qml:27
319+msgid "Roaming"
320+msgstr "Itinerància"
321+
322+#: qml/Shell.qml:346
323+msgid "Enter passphrase"
324+msgstr "Introduïu la contrasenya"
325+
326+#: qml/Shell.qml:347
327+msgid "Sorry, incorrect passphrase"
328+msgstr "La contrasenya no és correcta"
329+
330+#: qml/Shell.qml:348
331+msgid "Please re-enter"
332+msgstr "Torneu-ho a introduir"
333+
334+#: qml/Shell.qml:350
335+msgid "Enter passcode"
336+msgstr "Introduïu el codi d'accés"
337+
338+#: qml/Shell.qml:351
339+msgid "Sorry, incorrect passcode"
340+msgstr "El codi d'accés no és correcte"
341+
342+#: qml/Shell.qml:354
343+#, qt-format
344+msgid "Enter %1"
345+msgstr "Introduïu: %1"
346+
347+#: qml/Shell.qml:355
348+#, qt-format
349+msgid "Sorry, incorrect %1"
350+msgstr "Incorrecte (%1)"
351+
352+#: qml/Shell.qml:390
353+msgid "Sorry, incorrect passphrase."
354+msgstr "La contrasenya és incorrecta"
355+
356+#: qml/Shell.qml:391
357+msgid "Sorry, incorrect passcode."
358+msgstr "El codi d'accés no és correcte"
359+
360+#: qml/Shell.qml:392
361+msgid "This will be your last attempt."
362+msgstr "Este serà el darrer intent."
363+
364+#: qml/Shell.qml:394
365+msgid ""
366+"If passphrase is entered incorrectly, your phone will conduct a factory "
367+"reset and all personal data will be deleted."
368+msgstr ""
369+"Si la contrasenya s'introdueix de manera incorrecta, el telèfon es "
370+"reinicialitzarà a l'estat de fàbrica i se suprimiran totes les dades "
371+"personals."
372+
373+#: qml/Shell.qml:395
374+msgid ""
375+"If passcode is entered incorrectly, your phone will conduct a factory reset "
376+"and all personal data will be deleted."
377+msgstr ""
378+"Si el codi d'accés s'introdueix de manera incorrecta, el telèfon es "
379+"reinicialitzarà a l'estat de fàbrica i se suprimiran totes les dades "
380+"personals."
po/ckb.po+87−71
@@ -7,29 +7,49 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
1111"PO-Revision-Date: 2014-01-21 11:05+0000\n"
1212"Last-Translator: Aras <aras.noori@gmail.com>\n"
1313"Language-Team: Kurdish (Sorani) <ckb@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-10-09 06:37+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
2223msgstr ""
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr ""
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr ""
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr ""
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr ""
41+
42+#: qml/Components/DelayedLockscreen.qml:63
43+msgid "You have been locked out due to too many failed passcode attempts."
44+msgstr ""
45+
46+#: qml/Components/DelayedLockscreen.qml:72
47+#, qt-format
48+msgid "Please wait %1 minute and then try again…"
49+msgid_plural "Please wait %1 minutes and then try again…"
50+msgstr[0] ""
51+msgstr[1] ""
52+
3353#: qml/Components/Dialogs.qml:70
3454msgid "Log out"
3555msgstr ""
@@ -74,11 +94,15 @@ msgid ""
7494"to power off?"
7595msgstr ""
7696
77−#: qml/Components/Dialogs.qml:144
97+#: qml/Components/Dialogs.qml:147
7898msgid "Power off"
7999msgstr ""
80100
81−#: qml/Components/Dialogs.qml:162
101+#: qml/Components/Dialogs.qml:157
102+msgid "Restart"
103+msgstr ""
104+
105+#: qml/Components/Dialogs.qml:167
82106msgid "Cancel"
83107msgstr ""
84108
@@ -128,60 +152,44 @@ msgid ""
128152"phone<br><br>Tap on the screen to start"
129153msgstr ""
130154
131−#: qml/Components/Lockscreen.qml:167
132−msgid "Please wait"
133−msgstr ""
134−
135−#: qml/Components/Lockscreen.qml:172
136−msgid "Too many incorrect attempts"
137−msgstr ""
138−
139−#: qml/Components/Lockscreen.qml:206
155+#: qml/Components/Lockscreen.qml:220
140156msgid "Emergency Call"
141157msgstr "هێڵی فریاگوزاری"
142158
143−#: qml/Components/Lockscreen.qml:226
159+#: qml/Components/Lockscreen.qml:252
144160msgid "OK"
145161msgstr ""
146162
147−#: qml/Components/PassphraseLockscreen.qml:61
148−#, qt-format
149−msgid "Hello %1"
150−msgstr "سڵاو %1"
151−
152−#: qml/Components/PassphraseLockscreen.qml:61
153−msgid "Hello"
154−msgstr "سڵاو"
155−
156−#: qml/Dash/GenericScopeView.qml:361
163+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
157164msgid "See less"
158165msgstr ""
159166
160−#: qml/Dash/GenericScopeView.qml:361
167+#: qml/Dash/GenericScopeView.qml:434
161168msgid "See all"
162169msgstr ""
163170
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
171+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
172+#: qml/Panel/SearchIndicator.qml:27
165173msgid "Search"
166174msgstr "گەڕان"
167175
168−#: qml/Dash/PageHeader.qml:270
176+#: qml/Dash/PageHeader.qml:268
169177msgid "Settings"
170178msgstr ""
171179
172−#: qml/Dash/PageHeader.qml:279
180+#: qml/Dash/PageHeader.qml:275
173181msgid "Remove from Favorites"
174182msgstr ""
175183
176−#: qml/Dash/PageHeader.qml:279
184+#: qml/Dash/PageHeader.qml:275
177185msgid "Add to Favorites"
178186msgstr ""
179187
180−#: qml/Dash/Previews/PreviewActionCombo.qml:34
188+#: qml/Dash/Previews/PreviewActionCombo.qml:35
181189msgid "More..."
182190msgstr ""
183191
184−#: qml/Dash/Previews/PreviewActionCombo.qml:34
192+#: qml/Dash/Previews/PreviewActionCombo.qml:35
185193msgid "Less..."
186194msgstr ""
187195
@@ -197,15 +205,23 @@ msgstr "پێداچوونەوە زۆر بکە"
197205msgid "Send"
198206msgstr "ناردن"
199207
200−#: qml/Dash/ScopesOverview.qml:201
201−msgid "Manage Dash"
208+#: qml/Dash/PullToRefreshScopeStyle.qml:55
209+msgid "Pull to refresh…"
210+msgstr ""
211+
212+#: qml/Dash/PullToRefreshScopeStyle.qml:60
213+msgid "Release to refresh…"
214+msgstr ""
215+
216+#: qml/Dash/ScopesOverview.qml:206
217+msgid "Manage Scopes"
202218msgstr ""
203219
204−#: qml/Dash/ScopesOverview.qml:408
220+#: qml/Dash/ScopesOverview.qml:428
205221msgid "Done"
206222msgstr ""
207223
208−#: qml/Dash/ScopesOverview.qml:434
224+#: qml/Dash/ScopesOverview.qml:454
209225msgid "Store"
210226msgstr ""
211227
@@ -218,10 +234,10 @@ msgid "All"
218234msgstr ""
219235
220236#: qml/Greeter/Greeter.qml:157
221−msgid "Swipe to unlock"
237+msgid "Unlock"
222238msgstr ""
223239
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
240+#: qml/Hud/HudParametrizedActionsPage.qml:139
225241msgid "Confirm"
226242msgstr "پشتڕاستکردنەوە"
227243
@@ -241,18 +257,10 @@ msgstr "ئێستا قسە بکە"
241257msgid "Speaking..."
242258msgstr "قسە دەکات..."
243259
244−#: qml/Notifications/NotificationMenuItemFactory.qml:105
260+#: qml/Notifications/NotificationMenuItemFactory.qml:116
245261msgid "Show password"
246262msgstr "تێپەڕەوشە پیشان بدە"
247263
248−#: qml/Notifications/NotificationMenuItemFactory.qml:120
249−msgid "Enter SIM PIN"
250−msgstr ""
251−
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
253−msgid "Sorry, incorrect PIN"
254−msgstr ""
255−
256264#: qml/Panel/ActiveCallHint.qml:77
257265msgid "Tap to return to call..."
258266msgstr ""
@@ -261,27 +269,31 @@ msgstr ""
261269msgid "Conference"
262270msgstr ""
263271
264−#: qml/Panel/Indicators/MenuItemFactory.qml:651
272+#: qml/Panel/Indicators/MenuItemFactory.qml:600
273+msgid "Nothing is playing"
274+msgstr ""
275+
276+#: qml/Panel/Indicators/MenuItemFactory.qml:748
265277msgid "In queue…"
266278msgstr ""
267279
268−#: qml/Panel/Indicators/MenuItemFactory.qml:655
280+#: qml/Panel/Indicators/MenuItemFactory.qml:752
269281msgid "Downloading"
270282msgstr ""
271283
272−#: qml/Panel/Indicators/MenuItemFactory.qml:657
284+#: qml/Panel/Indicators/MenuItemFactory.qml:754
273285msgid "Paused, tap to resume"
274286msgstr ""
275287
276−#: qml/Panel/Indicators/MenuItemFactory.qml:659
288+#: qml/Panel/Indicators/MenuItemFactory.qml:756
277289msgid "Canceled"
278290msgstr ""
279291
280−#: qml/Panel/Indicators/MenuItemFactory.qml:661
292+#: qml/Panel/Indicators/MenuItemFactory.qml:758
281293msgid "Finished"
282294msgstr ""
283295
284−#: qml/Panel/Indicators/MenuItemFactory.qml:663
296+#: qml/Panel/Indicators/MenuItemFactory.qml:760
285297msgid "Failed, tap to retry"
286298msgstr ""
287299
@@ -293,51 +305,55 @@ msgstr ""
293305msgid "Roaming"
294306msgstr ""
295307
296−#: qml/Shell.qml:266
297−msgid "Enter your passphrase"
308+#: qml/Shell.qml:346
309+msgid "Enter passphrase"
298310msgstr ""
299311
300−#: qml/Shell.qml:267
312+#: qml/Shell.qml:347
301313msgid "Sorry, incorrect passphrase"
302314msgstr ""
303315
304−#: qml/Shell.qml:282
305−msgid "Enter your passcode"
316+#: qml/Shell.qml:348
317+msgid "Please re-enter"
318+msgstr ""
319+
320+#: qml/Shell.qml:350
321+msgid "Enter passcode"
306322msgstr ""
307323
308−#: qml/Shell.qml:283
324+#: qml/Shell.qml:351
309325msgid "Sorry, incorrect passcode"
310326msgstr ""
311327
312−#: qml/Shell.qml:273
328+#: qml/Shell.qml:354
313329#, qt-format
314−msgid "Enter your %1"
330+msgid "Enter %1"
315331msgstr ""
316332
317−#: qml/Shell.qml:274
333+#: qml/Shell.qml:355
318334#, qt-format
319335msgid "Sorry, incorrect %1"
320336msgstr ""
321337
322−#: qml/Shell.qml:310
338+#: qml/Shell.qml:390
323339msgid "Sorry, incorrect passphrase."
324340msgstr ""
325341
326−#: qml/Shell.qml:311
342+#: qml/Shell.qml:391
327343msgid "Sorry, incorrect passcode."
328344msgstr ""
329345
330−#: qml/Shell.qml:312
346+#: qml/Shell.qml:392
331347msgid "This will be your last attempt."
332348msgstr ""
333349
334−#: qml/Shell.qml:314
350+#: qml/Shell.qml:394
335351msgid ""
336352"If passphrase is entered incorrectly, your phone will conduct a factory "
337353"reset and all personal data will be deleted."
338354msgstr ""
339355
340−#: qml/Shell.qml:315
356+#: qml/Shell.qml:395
341357msgid ""
342358"If passcode is entered incorrectly, your phone will conduct a factory reset "
343359"and all personal data will be deleted."
po/cs.po+87−71
@@ -7,29 +7,49 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
1111"PO-Revision-Date: 2014-01-08 10:11+0000\n"
1212"Last-Translator: Tadeáš Pařík <tadeas.parik@gmail.com>\n"
1313"Language-Team: Czech <cs@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
18+"X-Launchpad-Export-Date: 2014-10-09 06:36+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
2223msgstr ""
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr ""
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr ""
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr ""
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr ""
41+
42+#: qml/Components/DelayedLockscreen.qml:63
43+msgid "You have been locked out due to too many failed passcode attempts."
44+msgstr ""
45+
46+#: qml/Components/DelayedLockscreen.qml:72
47+#, qt-format
48+msgid "Please wait %1 minute and then try again…"
49+msgid_plural "Please wait %1 minutes and then try again…"
50+msgstr[0] ""
51+msgstr[1] ""
52+
3353#: qml/Components/Dialogs.qml:70
3454msgid "Log out"
3555msgstr ""
@@ -74,11 +94,15 @@ msgid ""
7494"to power off?"
7595msgstr ""
7696
77−#: qml/Components/Dialogs.qml:144
97+#: qml/Components/Dialogs.qml:147
7898msgid "Power off"
7999msgstr ""
80100
81−#: qml/Components/Dialogs.qml:162
101+#: qml/Components/Dialogs.qml:157
102+msgid "Restart"
103+msgstr ""
104+
105+#: qml/Components/Dialogs.qml:167
82106msgid "Cancel"
83107msgstr ""
84108
@@ -128,60 +152,44 @@ msgid ""
128152"phone<br><br>Tap on the screen to start"
129153msgstr ""
130154
131−#: qml/Components/Lockscreen.qml:167
132−msgid "Please wait"
133−msgstr ""
134−
135−#: qml/Components/Lockscreen.qml:172
136−msgid "Too many incorrect attempts"
137−msgstr ""
138−
139−#: qml/Components/Lockscreen.qml:206
155+#: qml/Components/Lockscreen.qml:220
140156msgid "Emergency Call"
141157msgstr "Tísňové volání"
142158
143−#: qml/Components/Lockscreen.qml:226
159+#: qml/Components/Lockscreen.qml:252
144160msgid "OK"
145161msgstr ""
146162
147−#: qml/Components/PassphraseLockscreen.qml:61
148−#, qt-format
149−msgid "Hello %1"
150−msgstr "Ahoj %1"
151−
152−#: qml/Components/PassphraseLockscreen.qml:61
153−msgid "Hello"
154−msgstr "Ahoj"
155−
156−#: qml/Dash/GenericScopeView.qml:361
163+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
157164msgid "See less"
158165msgstr ""
159166
160−#: qml/Dash/GenericScopeView.qml:361
167+#: qml/Dash/GenericScopeView.qml:434
161168msgid "See all"
162169msgstr ""
163170
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
171+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
172+#: qml/Panel/SearchIndicator.qml:27
165173msgid "Search"
166174msgstr "Hledat"
167175
168−#: qml/Dash/PageHeader.qml:270
176+#: qml/Dash/PageHeader.qml:268
169177msgid "Settings"
170178msgstr ""
171179
172−#: qml/Dash/PageHeader.qml:279
180+#: qml/Dash/PageHeader.qml:275
173181msgid "Remove from Favorites"
174182msgstr ""
175183
176−#: qml/Dash/PageHeader.qml:279
184+#: qml/Dash/PageHeader.qml:275
177185msgid "Add to Favorites"
178186msgstr ""
179187
180−#: qml/Dash/Previews/PreviewActionCombo.qml:34
188+#: qml/Dash/Previews/PreviewActionCombo.qml:35
181189msgid "More..."
182190msgstr ""
183191
184−#: qml/Dash/Previews/PreviewActionCombo.qml:34
192+#: qml/Dash/Previews/PreviewActionCombo.qml:35
185193msgid "Less..."
186194msgstr ""
187195
@@ -197,15 +205,23 @@ msgstr "Přidat recenzi"
197205msgid "Send"
198206msgstr "Odeslat"
199207
200−#: qml/Dash/ScopesOverview.qml:201
201−msgid "Manage Dash"
208+#: qml/Dash/PullToRefreshScopeStyle.qml:55
209+msgid "Pull to refresh…"
210+msgstr ""
211+
212+#: qml/Dash/PullToRefreshScopeStyle.qml:60
213+msgid "Release to refresh…"
214+msgstr ""
215+
216+#: qml/Dash/ScopesOverview.qml:206
217+msgid "Manage Scopes"
202218msgstr ""
203219
204−#: qml/Dash/ScopesOverview.qml:408
220+#: qml/Dash/ScopesOverview.qml:428
205221msgid "Done"
206222msgstr ""
207223
208−#: qml/Dash/ScopesOverview.qml:434
224+#: qml/Dash/ScopesOverview.qml:454
209225msgid "Store"
210226msgstr ""
211227
@@ -218,10 +234,10 @@ msgid "All"
218234msgstr ""
219235
220236#: qml/Greeter/Greeter.qml:157
221−msgid "Swipe to unlock"
237+msgid "Unlock"
222238msgstr ""
223239
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
240+#: qml/Hud/HudParametrizedActionsPage.qml:139
225241msgid "Confirm"
226242msgstr "Potvrdit"
227243
@@ -241,18 +257,10 @@ msgstr "Mluvte..."
241257msgid "Speaking..."
242258msgstr "Mluvte..."
243259
244−#: qml/Notifications/NotificationMenuItemFactory.qml:105
260+#: qml/Notifications/NotificationMenuItemFactory.qml:116
245261msgid "Show password"
246262msgstr "Zobrazit heslo"
247263
248−#: qml/Notifications/NotificationMenuItemFactory.qml:120
249−msgid "Enter SIM PIN"
250−msgstr ""
251−
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
253−msgid "Sorry, incorrect PIN"
254−msgstr ""
255−
256264#: qml/Panel/ActiveCallHint.qml:77
257265msgid "Tap to return to call..."
258266msgstr ""
@@ -261,27 +269,31 @@ msgstr ""
261269msgid "Conference"
262270msgstr ""
263271
264−#: qml/Panel/Indicators/MenuItemFactory.qml:651
272+#: qml/Panel/Indicators/MenuItemFactory.qml:600
273+msgid "Nothing is playing"
274+msgstr ""
275+
276+#: qml/Panel/Indicators/MenuItemFactory.qml:748
265277msgid "In queue…"
266278msgstr ""
267279
268−#: qml/Panel/Indicators/MenuItemFactory.qml:655
280+#: qml/Panel/Indicators/MenuItemFactory.qml:752
269281msgid "Downloading"
270282msgstr ""
271283
272−#: qml/Panel/Indicators/MenuItemFactory.qml:657
284+#: qml/Panel/Indicators/MenuItemFactory.qml:754
273285msgid "Paused, tap to resume"
274286msgstr ""
275287
276−#: qml/Panel/Indicators/MenuItemFactory.qml:659
288+#: qml/Panel/Indicators/MenuItemFactory.qml:756
277289msgid "Canceled"
278290msgstr ""
279291
280−#: qml/Panel/Indicators/MenuItemFactory.qml:661
292+#: qml/Panel/Indicators/MenuItemFactory.qml:758
281293msgid "Finished"
282294msgstr ""
283295
284−#: qml/Panel/Indicators/MenuItemFactory.qml:663
296+#: qml/Panel/Indicators/MenuItemFactory.qml:760
285297msgid "Failed, tap to retry"
286298msgstr ""
287299
@@ -293,51 +305,55 @@ msgstr ""
293305msgid "Roaming"
294306msgstr ""
295307
296−#: qml/Shell.qml:266
297−msgid "Enter your passphrase"
308+#: qml/Shell.qml:346
309+msgid "Enter passphrase"
298310msgstr ""
299311
300−#: qml/Shell.qml:267
312+#: qml/Shell.qml:347
301313msgid "Sorry, incorrect passphrase"
302314msgstr ""
303315
304−#: qml/Shell.qml:282
305−msgid "Enter your passcode"
316+#: qml/Shell.qml:348
317+msgid "Please re-enter"
318+msgstr ""
319+
320+#: qml/Shell.qml:350
321+msgid "Enter passcode"
306322msgstr ""
307323
308−#: qml/Shell.qml:283
324+#: qml/Shell.qml:351
309325msgid "Sorry, incorrect passcode"
310326msgstr ""
311327
312−#: qml/Shell.qml:273
328+#: qml/Shell.qml:354
313329#, qt-format
314−msgid "Enter your %1"
330+msgid "Enter %1"
315331msgstr ""
316332
317−#: qml/Shell.qml:274
333+#: qml/Shell.qml:355
318334#, qt-format
319335msgid "Sorry, incorrect %1"
320336msgstr ""
321337
322−#: qml/Shell.qml:310
338+#: qml/Shell.qml:390
323339msgid "Sorry, incorrect passphrase."
324340msgstr ""
325341
326−#: qml/Shell.qml:311
342+#: qml/Shell.qml:391
327343msgid "Sorry, incorrect passcode."
328344msgstr ""
329345
330−#: qml/Shell.qml:312
346+#: qml/Shell.qml:392
331347msgid "This will be your last attempt."
332348msgstr ""
333349
334−#: qml/Shell.qml:314
350+#: qml/Shell.qml:394
335351msgid ""
336352"If passphrase is entered incorrectly, your phone will conduct a factory "
337353"reset and all personal data will be deleted."
338354msgstr ""
339355
340−#: qml/Shell.qml:315
356+#: qml/Shell.qml:395
341357msgid ""
342358"If passcode is entered incorrectly, your phone will conduct a factory reset "
343359"and all personal data will be deleted."
po/da.po+88−72
@@ -8,29 +8,49 @@ msgid ""
88msgstr ""
99"Project-Id-Version: unity8\n"
1010"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
11−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
1212"PO-Revision-Date: 2014-07-30 12:37+0000\n"
1313"Last-Translator: Ask Hjorth Larsen <asklarsen@gmail.com>\n"
1414"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
1515"MIME-Version: 1.0\n"
1616"Content-Type: text/plain; charset=UTF-8\n"
1717"Content-Transfer-Encoding: 8bit\n"
18−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
19−"X-Generator: Launchpad (build 17174)\n"
18+"Plural-Forms: nplurals=2; plural=n != 1;\n"
19+"X-Launchpad-Export-Date: 2014-10-09 06:36+0000\n"
20+"X-Generator: Launchpad (build 17196)\n"
2021
21−#: plugins/LightDM/Greeter.cpp:129
22+#: plugins/LightDM/Greeter.cpp:130
2223msgid "Password: "
2324msgstr ""
2425
25−#: plugins/Unity/Launcher/launcheritem.cpp:43
26−#: plugins/Unity/Launcher/launcheritem.cpp:73
26+#: plugins/Unity/Launcher/launcheritem.cpp:45
27+#: plugins/Unity/Launcher/launcheritem.cpp:91
2728msgid "Pin shortcut"
2829msgstr "Fastgør genvej"
2930
30−#: plugins/Unity/Launcher/launcheritem.cpp:73
31+#: plugins/Unity/Launcher/launcheritem.cpp:91
3132msgid "Unpin shortcut"
3233msgstr "Gør genvej flytbar"
3334
35+#: qml/Components/DelayedLockscreen.qml:47
36+msgid "Device Locked"
37+msgstr ""
38+
39+#: qml/Components/DelayedLockscreen.qml:62
40+msgid "You have been locked out due to too many failed passphrase attempts."
41+msgstr ""
42+
43+#: qml/Components/DelayedLockscreen.qml:63
44+msgid "You have been locked out due to too many failed passcode attempts."
45+msgstr ""
46+
47+#: qml/Components/DelayedLockscreen.qml:72
48+#, qt-format
49+msgid "Please wait %1 minute and then try again…"
50+msgid_plural "Please wait %1 minutes and then try again…"
51+msgstr[0] ""
52+msgstr[1] ""
53+
3454#: qml/Components/Dialogs.qml:70
3555msgid "Log out"
3656msgstr ""
@@ -75,11 +95,15 @@ msgid ""
7595"to power off?"
7696msgstr ""
7797
78−#: qml/Components/Dialogs.qml:144
98+#: qml/Components/Dialogs.qml:147
7999msgid "Power off"
80100msgstr ""
81101
82−#: qml/Components/Dialogs.qml:162
102+#: qml/Components/Dialogs.qml:157
103+msgid "Restart"
104+msgstr ""
105+
106+#: qml/Components/Dialogs.qml:167
83107msgid "Cancel"
84108msgstr ""
85109
@@ -131,60 +155,44 @@ msgstr ""
131155"Du mestrer nu kantbevægelserne og kan begynde at bruge telefonen<br><br>Tryk "
132156"på skærmen for at starte"
133157
134−#: qml/Components/Lockscreen.qml:167
135−msgid "Please wait"
136−msgstr ""
137−
138−#: qml/Components/Lockscreen.qml:172
139−msgid "Too many incorrect attempts"
140−msgstr ""
141−
142−#: qml/Components/Lockscreen.qml:206
158+#: qml/Components/Lockscreen.qml:220
143159msgid "Emergency Call"
144160msgstr "Nødopkald"
145161
146−#: qml/Components/Lockscreen.qml:226
162+#: qml/Components/Lockscreen.qml:252
147163msgid "OK"
148164msgstr "O.k."
149165
150−#: qml/Components/PassphraseLockscreen.qml:61
151−#, qt-format
152−msgid "Hello %1"
153−msgstr "Hej %1"
154−
155−#: qml/Components/PassphraseLockscreen.qml:61
156−msgid "Hello"
157−msgstr "Hej"
158−
159−#: qml/Dash/GenericScopeView.qml:361
166+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
160167msgid "See less"
161168msgstr "Vis mindre"
162169
163−#: qml/Dash/GenericScopeView.qml:361
170+#: qml/Dash/GenericScopeView.qml:434
164171msgid "See all"
165172msgstr "Se alle"
166173
167−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
174+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
175+#: qml/Panel/SearchIndicator.qml:27
168176msgid "Search"
169177msgstr "Søg"
170178
171−#: qml/Dash/PageHeader.qml:270
179+#: qml/Dash/PageHeader.qml:268
172180msgid "Settings"
173181msgstr ""
174182
175−#: qml/Dash/PageHeader.qml:279
183+#: qml/Dash/PageHeader.qml:275
176184msgid "Remove from Favorites"
177185msgstr ""
178186
179−#: qml/Dash/PageHeader.qml:279
187+#: qml/Dash/PageHeader.qml:275
180188msgid "Add to Favorites"
181189msgstr ""
182190
183−#: qml/Dash/Previews/PreviewActionCombo.qml:34
191+#: qml/Dash/Previews/PreviewActionCombo.qml:35
184192msgid "More..."
185193msgstr "Mere..."
186194
187−#: qml/Dash/Previews/PreviewActionCombo.qml:34
195+#: qml/Dash/Previews/PreviewActionCombo.qml:35
188196msgid "Less..."
189197msgstr "Mindre..."
190198
@@ -200,15 +208,23 @@ msgstr "Tilføj en forhåndsvisning"
200208msgid "Send"
201209msgstr "Send"
202210
203−#: qml/Dash/ScopesOverview.qml:201
204−msgid "Manage Dash"
211+#: qml/Dash/PullToRefreshScopeStyle.qml:55
212+msgid "Pull to refresh…"
213+msgstr ""
214+
215+#: qml/Dash/PullToRefreshScopeStyle.qml:60
216+msgid "Release to refresh…"
205217msgstr ""
206218
207−#: qml/Dash/ScopesOverview.qml:408
219+#: qml/Dash/ScopesOverview.qml:206
220+msgid "Manage Scopes"
221+msgstr ""
222+
223+#: qml/Dash/ScopesOverview.qml:428
208224msgid "Done"
209225msgstr ""
210226
211−#: qml/Dash/ScopesOverview.qml:434
227+#: qml/Dash/ScopesOverview.qml:454
212228msgid "Store"
213229msgstr ""
214230
@@ -221,10 +237,10 @@ msgid "All"
221237msgstr ""
222238
223239#: qml/Greeter/Greeter.qml:157
224−msgid "Swipe to unlock"
225−msgstr "Stryg for at låse op"
240+msgid "Unlock"
241+msgstr ""
226242
227−#: qml/Hud/HudParametrizedActionsPage.qml:132
243+#: qml/Hud/HudParametrizedActionsPage.qml:139
228244msgid "Confirm"
229245msgstr "Bekræft"
230246
@@ -244,18 +260,10 @@ msgstr "Tal nu..."
244260msgid "Speaking..."
245261msgstr "Taler..."
246262
247−#: qml/Notifications/NotificationMenuItemFactory.qml:105
263+#: qml/Notifications/NotificationMenuItemFactory.qml:116
248264msgid "Show password"
249265msgstr "Vis adgangskode"
250266
251−#: qml/Notifications/NotificationMenuItemFactory.qml:120
252−msgid "Enter SIM PIN"
253−msgstr ""
254−
255−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
256−msgid "Sorry, incorrect PIN"
257−msgstr ""
258−
259267#: qml/Panel/ActiveCallHint.qml:77
260268msgid "Tap to return to call..."
261269msgstr "Tryk for at besvare opkaldet..."
@@ -264,27 +272,31 @@ msgstr "Tryk for at besvare opkaldet..."
264272msgid "Conference"
265273msgstr "Konference"
266274
267−#: qml/Panel/Indicators/MenuItemFactory.qml:651
275+#: qml/Panel/Indicators/MenuItemFactory.qml:600
276+msgid "Nothing is playing"
277+msgstr ""
278+
279+#: qml/Panel/Indicators/MenuItemFactory.qml:748
268280msgid "In queue…"
269281msgstr "I kø…"
270282
271−#: qml/Panel/Indicators/MenuItemFactory.qml:655
283+#: qml/Panel/Indicators/MenuItemFactory.qml:752
272284msgid "Downloading"
273285msgstr "Henter"
274286
275−#: qml/Panel/Indicators/MenuItemFactory.qml:657
287+#: qml/Panel/Indicators/MenuItemFactory.qml:754
276288msgid "Paused, tap to resume"
277289msgstr "På pause; tryk for at fortsætte"
278290
279−#: qml/Panel/Indicators/MenuItemFactory.qml:659
291+#: qml/Panel/Indicators/MenuItemFactory.qml:756
280292msgid "Canceled"
281293msgstr "Annulleret"
282294
283−#: qml/Panel/Indicators/MenuItemFactory.qml:661
295+#: qml/Panel/Indicators/MenuItemFactory.qml:758
284296msgid "Finished"
285297msgstr "Færdig"
286298
287−#: qml/Panel/Indicators/MenuItemFactory.qml:663
299+#: qml/Panel/Indicators/MenuItemFactory.qml:760
288300msgid "Failed, tap to retry"
289301msgstr "Mislykkedes; tryk for at prøve igen"
290302
@@ -296,51 +308,55 @@ msgstr ""
296308msgid "Roaming"
297309msgstr ""
298310
299−#: qml/Shell.qml:266
300−msgid "Enter your passphrase"
311+#: qml/Shell.qml:346
312+msgid "Enter passphrase"
301313msgstr ""
302314
303−#: qml/Shell.qml:267
315+#: qml/Shell.qml:347
304316msgid "Sorry, incorrect passphrase"
305317msgstr ""
306318
307−#: qml/Shell.qml:282
308−msgid "Enter your passcode"
319+#: qml/Shell.qml:348
320+msgid "Please re-enter"
321+msgstr ""
322+
323+#: qml/Shell.qml:350
324+msgid "Enter passcode"
309325msgstr ""
310326
311−#: qml/Shell.qml:283
327+#: qml/Shell.qml:351
312328msgid "Sorry, incorrect passcode"
313329msgstr ""
314330
315−#: qml/Shell.qml:273
331+#: qml/Shell.qml:354
316332#, qt-format
317−msgid "Enter your %1"
333+msgid "Enter %1"
318334msgstr ""
319335
320−#: qml/Shell.qml:274
336+#: qml/Shell.qml:355
321337#, qt-format
322338msgid "Sorry, incorrect %1"
323339msgstr ""
324340
325−#: qml/Shell.qml:310
341+#: qml/Shell.qml:390
326342msgid "Sorry, incorrect passphrase."
327343msgstr ""
328344
329−#: qml/Shell.qml:311
345+#: qml/Shell.qml:391
330346msgid "Sorry, incorrect passcode."
331347msgstr ""
332348
333−#: qml/Shell.qml:312
349+#: qml/Shell.qml:392
334350msgid "This will be your last attempt."
335351msgstr ""
336352
337−#: qml/Shell.qml:314
353+#: qml/Shell.qml:394
338354msgid ""
339355"If passphrase is entered incorrectly, your phone will conduct a factory "
340356"reset and all personal data will be deleted."
341357msgstr ""
342358
343−#: qml/Shell.qml:315
359+#: qml/Shell.qml:395
344360msgid ""
345361"If passcode is entered incorrectly, your phone will conduct a factory reset "
346362"and all personal data will be deleted."
po/de.po+113−98
@@ -7,78 +7,104 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-08-26 10:17+0000\n"
12−"Last-Translator: Martin Pitt <martin.pitt@ubuntu.com>\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
11+"PO-Revision-Date: 2014-09-29 06:33+0000\n"
12+"Last-Translator: Niklas Wenzel <nikwen.developer@gmail.com>\n"
1313"Language-Team: German <de@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-10-09 06:36+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
2223msgstr "Passwort: "
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr "Verknüpfung anheften"
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr "Verknüpfung entfernen"
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr ""
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr ""
41+
42+#: qml/Components/DelayedLockscreen.qml:63
43+msgid "You have been locked out due to too many failed passcode attempts."
44+msgstr ""
45+
46+#: qml/Components/DelayedLockscreen.qml:72
47+#, qt-format
48+msgid "Please wait %1 minute and then try again…"
49+msgid_plural "Please wait %1 minutes and then try again…"
50+msgstr[0] ""
51+msgstr[1] ""
52+
3353#: qml/Components/Dialogs.qml:70
3454msgid "Log out"
35−msgstr ""
55+msgstr "Abmelden"
3656
3757#: qml/Components/Dialogs.qml:71
3858msgid "Are you sure you want to log out?"
39−msgstr ""
59+msgstr "Sind Sie sicher, dass Sie sich abmelden wollen?"
4060
4161#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4262#: qml/Components/Dialogs.qml:122
4363msgid "No"
44−msgstr ""
64+msgstr "Nein"
4565
4666#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4767#: qml/Components/Dialogs.qml:129
4868msgid "Yes"
49−msgstr ""
69+msgstr "Ja"
5070
5171#: qml/Components/Dialogs.qml:94
5272msgid "Shut down"
53−msgstr ""
73+msgstr "Herunterfahren"
5474
5575#: qml/Components/Dialogs.qml:95
5676msgid "Are you sure you want to shut down?"
57−msgstr ""
77+msgstr "Sind Sie sicher, dass Sie herunterfahren wollen?"
5878
5979#: qml/Components/Dialogs.qml:119
6080msgid "Reboot"
61−msgstr ""
81+msgstr "Neustart"
6282
6383#: qml/Components/Dialogs.qml:120
6484msgid "Are you sure you want to reboot?"
65−msgstr ""
85+msgstr "Sind Sie sicher, dass Sie neu starten wollen?"
6686
6787#: qml/Components/Dialogs.qml:144
6888msgid "Power"
69−msgstr ""
89+msgstr "Energie"
7090
7191#: qml/Components/Dialogs.qml:145
7292msgid ""
7393"Are you sure you would like\n"
7494"to power off?"
7595msgstr ""
96+"Sind Sie sicher, dass Sie das\n"
97+"Gerät ausschalten wollen?"
7698
77−#: qml/Components/Dialogs.qml:144
99+#: qml/Components/Dialogs.qml:147
78100msgid "Power off"
79101msgstr "Ausschalten"
80102
81−#: qml/Components/Dialogs.qml:162
103+#: qml/Components/Dialogs.qml:157
104+msgid "Restart"
105+msgstr "Neustarten"
106+
107+#: qml/Components/Dialogs.qml:167
82108msgid "Cancel"
83109msgstr "Abbrechen"
84110
@@ -133,60 +159,44 @@ msgstr ""
133159"Sie haben nun die Kantengesten erfolgreich erlernt und können das Telefon "
134160"nun nutzen<br><br>Zum Starten auf den Bildschirm tippen"
135161
136−#: qml/Components/Lockscreen.qml:167
137−msgid "Please wait"
138−msgstr "Bitte warten"
139−
140−#: qml/Components/Lockscreen.qml:172
141−msgid "Too many incorrect attempts"
142−msgstr "Zu viele falsche Versuche"
143−
144−#: qml/Components/Lockscreen.qml:206
162+#: qml/Components/Lockscreen.qml:220
145163msgid "Emergency Call"
146164msgstr "Notruf"
147165
148−#: qml/Components/Lockscreen.qml:226
166+#: qml/Components/Lockscreen.qml:252
149167msgid "OK"
150168msgstr "OK"
151169
152−#: qml/Components/PassphraseLockscreen.qml:61
153−#, qt-format
154−msgid "Hello %1"
155−msgstr "Hallo %1"
156−
157−#: qml/Components/PassphraseLockscreen.qml:61
158−msgid "Hello"
159−msgstr "Hallo"
160−
161−#: qml/Dash/GenericScopeView.qml:361
170+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
162171msgid "See less"
163172msgstr "Weniger ansehen"
164173
165−#: qml/Dash/GenericScopeView.qml:361
174+#: qml/Dash/GenericScopeView.qml:434
166175msgid "See all"
167176msgstr "Alle anzeigen"
168177
169−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
178+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
179+#: qml/Panel/SearchIndicator.qml:27
170180msgid "Search"
171181msgstr "Suchen"
172182
173−#: qml/Dash/PageHeader.qml:270
183+#: qml/Dash/PageHeader.qml:268
174184msgid "Settings"
175−msgstr ""
185+msgstr "Einstellungen"
176186
177−#: qml/Dash/PageHeader.qml:279
187+#: qml/Dash/PageHeader.qml:275
178188msgid "Remove from Favorites"
179−msgstr ""
189+msgstr "Aus den Favoriten entfernen"
180190
181−#: qml/Dash/PageHeader.qml:279
191+#: qml/Dash/PageHeader.qml:275
182192msgid "Add to Favorites"
183−msgstr ""
193+msgstr "Zu Favoriten hinzufügen"
184194
185−#: qml/Dash/Previews/PreviewActionCombo.qml:34
195+#: qml/Dash/Previews/PreviewActionCombo.qml:35
186196msgid "More..."
187197msgstr "Mehr …"
188198
189−#: qml/Dash/Previews/PreviewActionCombo.qml:34
199+#: qml/Dash/Previews/PreviewActionCombo.qml:35
190200msgid "Less..."
191201msgstr "Weniger …"
192202
@@ -202,15 +212,23 @@ msgstr "Bewertung hinzufügen"
202212msgid "Send"
203213msgstr "Senden"
204214
205−#: qml/Dash/ScopesOverview.qml:201
206−msgid "Manage Dash"
207−msgstr "Dash verwalten"
215+#: qml/Dash/PullToRefreshScopeStyle.qml:55
216+msgid "Pull to refresh…"
217+msgstr ""
218+
219+#: qml/Dash/PullToRefreshScopeStyle.qml:60
220+msgid "Release to refresh…"
221+msgstr ""
222+
223+#: qml/Dash/ScopesOverview.qml:206
224+msgid "Manage Scopes"
225+msgstr "Filter verwalten"
208226
209−#: qml/Dash/ScopesOverview.qml:408
227+#: qml/Dash/ScopesOverview.qml:428
210228msgid "Done"
211229msgstr "Erledigt"
212230
213−#: qml/Dash/ScopesOverview.qml:434
231+#: qml/Dash/ScopesOverview.qml:454
214232msgid "Store"
215233msgstr "Store"
216234
@@ -223,10 +241,10 @@ msgid "All"
223241msgstr "Alle"
224242
225243#: qml/Greeter/Greeter.qml:157
226−msgid "Swipe to unlock"
227−msgstr "Wischen zum Entsperren"
244+msgid "Unlock"
245+msgstr ""
228246
229−#: qml/Hud/HudParametrizedActionsPage.qml:132
247+#: qml/Hud/HudParametrizedActionsPage.qml:139
230248msgid "Confirm"
231249msgstr "Bestätigen"
232250
@@ -246,18 +264,10 @@ msgstr "Sprechen Sie jetzt …"
246264msgid "Speaking..."
247265msgstr "Sprechen Sie …"
248266
249−#: qml/Notifications/NotificationMenuItemFactory.qml:105
267+#: qml/Notifications/NotificationMenuItemFactory.qml:116
250268msgid "Show password"
251269msgstr "Passwort anzeigen"
252270
253−#: qml/Notifications/NotificationMenuItemFactory.qml:120
254−msgid "Enter SIM PIN"
255−msgstr "Geben Sie die SIM-PIN ein"
256−
257−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
258−msgid "Sorry, incorrect PIN"
259−msgstr "Die PIN ist nicht korrekt"
260−
261271#: qml/Panel/ActiveCallHint.qml:77
262272msgid "Tap to return to call..."
263273msgstr "Tippen um zum Anruf zurückzugehen"
@@ -266,77 +276,85 @@ msgstr "Tippen um zum Anruf zurückzugehen"
266276msgid "Conference"
267277msgstr "Konferenz"
268278
269−#: qml/Panel/Indicators/MenuItemFactory.qml:651
279+#: qml/Panel/Indicators/MenuItemFactory.qml:600
280+msgid "Nothing is playing"
281+msgstr "Nichts wird abgespielt"
282+
283+#: qml/Panel/Indicators/MenuItemFactory.qml:748
270284msgid "In queue…"
271285msgstr "In Warteschlange …"
272286
273−#: qml/Panel/Indicators/MenuItemFactory.qml:655
287+#: qml/Panel/Indicators/MenuItemFactory.qml:752
274288msgid "Downloading"
275289msgstr "Wird heruntergeladen"
276290
277−#: qml/Panel/Indicators/MenuItemFactory.qml:657
291+#: qml/Panel/Indicators/MenuItemFactory.qml:754
278292msgid "Paused, tap to resume"
279293msgstr "Pausiert, tippen Sie zum fortsetzen"
280294
281−#: qml/Panel/Indicators/MenuItemFactory.qml:659
295+#: qml/Panel/Indicators/MenuItemFactory.qml:756
282296msgid "Canceled"
283297msgstr "Abgebrochen"
284298
285−#: qml/Panel/Indicators/MenuItemFactory.qml:661
299+#: qml/Panel/Indicators/MenuItemFactory.qml:758
286300msgid "Finished"
287301msgstr "Erledigt"
288302
289−#: qml/Panel/Indicators/MenuItemFactory.qml:663
303+#: qml/Panel/Indicators/MenuItemFactory.qml:760
290304msgid "Failed, tap to retry"
291305msgstr "Fehlgeschlagen, tippen Sie zum Wiederholen"
292306
293307#: qml/Panel/Indicators/ModemInfoItem.qml:105
294308msgid "Unlock SIM"
295−msgstr "SIM-Karte entsprerren"
309+msgstr "SIM-Karte entsperren"
296310
297311#: qml/Panel/Indicators/RoamingIndication.qml:27
298312msgid "Roaming"
299313msgstr "Roaming"
300314
301−#: qml/Shell.qml:266
302−msgid "Enter your passphrase"
303−msgstr "Geben Sie Ihr Passwort ein"
315+#: qml/Shell.qml:346
316+msgid "Enter passphrase"
317+msgstr ""
304318
305−#: qml/Shell.qml:267
319+#: qml/Shell.qml:347
306320msgid "Sorry, incorrect passphrase"
307321msgstr "Das Passwort ist nicht korrekt"
308322
309−#: qml/Shell.qml:282
310−msgid "Enter your passcode"
323+#: qml/Shell.qml:348
324+msgid "Please re-enter"
311325msgstr ""
312326
313−#: qml/Shell.qml:283
314−msgid "Sorry, incorrect passcode"
327+#: qml/Shell.qml:350
328+msgid "Enter passcode"
315329msgstr ""
316330
317−#: qml/Shell.qml:273
331+#: qml/Shell.qml:351
332+msgid "Sorry, incorrect passcode"
333+msgstr "Falsches Passwort"
334+
335+#: qml/Shell.qml:354
318336#, qt-format
319−msgid "Enter your %1"
320−msgstr "%1 eingeben"
337+msgid "Enter %1"
338+msgstr ""
321339
322−#: qml/Shell.qml:274
340+#: qml/Shell.qml:355
323341#, qt-format
324342msgid "Sorry, incorrect %1"
325343msgstr "%1 falsch"
326344
327−#: qml/Shell.qml:310
345+#: qml/Shell.qml:390
328346msgid "Sorry, incorrect passphrase."
329347msgstr "Falsches Passwort."
330348
331−#: qml/Shell.qml:311
349+#: qml/Shell.qml:391
332350msgid "Sorry, incorrect passcode."
333351msgstr "Falsche PIN"
334352
335−#: qml/Shell.qml:312
353+#: qml/Shell.qml:392
336354msgid "This will be your last attempt."
337355msgstr "Dies ist Ihr letzter Versuch."
338356
339−#: qml/Shell.qml:314
357+#: qml/Shell.qml:394
340358msgid ""
341359"If passphrase is entered incorrectly, your phone will conduct a factory "
342360"reset and all personal data will be deleted."
@@ -344,7 +362,7 @@ msgstr ""
344362"Wird das Passwort falsch eingegeben, wird das Telefon auf den Werkszustand "
345363"zurückgesetzt und alle Daten werden gelöscht."
346364
347−#: qml/Shell.qml:315
365+#: qml/Shell.qml:395
348366msgid ""
349367"If passcode is entered incorrectly, your phone will conduct a factory reset "
350368"and all personal data will be deleted."
@@ -352,11 +370,8 @@ msgstr ""
352370"Wird die PIN falsch eingegeben, wird das Telefon auf den Werkszustand "
353371"zurückgesetzt und alle Daten werden gelöscht."
354372
355−#~ msgid "Restart"
356−#~ msgstr "Neustart"
357−
358−#~ msgid "Are you sure you would like to turn power off?"
359−#~ msgstr "Sind Sie sicher dass das Telefon ausgeschaltet werden soll?"
373+#~ msgid "Sorry, incorrect PIN"
374+#~ msgstr "Die PIN ist nicht korrekt"
360375
361−#~ msgid "Enter your PIN"
362−#~ msgstr "Geben Sie Ihre PIN ein"
376+#~ msgid "Enter SIM PIN"
377+#~ msgstr "Geben Sie die SIM-PIN ein"
po/el.po+89−76
@@ -7,29 +7,49 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
1111"PO-Revision-Date: 2014-08-21 12:06+0000\n"
1212"Last-Translator: Chris Taklis (aka Kailor) <ctaklis@gmail.com>\n"
1313"Language-Team: Greek <el@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-10-09 06:36+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
2223msgstr "Κωδικός πρόσβασης: "
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr "Καρφίτσωμα συντόμευσης"
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr "Ξεκαρφίτσωμα συντόμευσης"
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr ""
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr ""
41+
42+#: qml/Components/DelayedLockscreen.qml:63
43+msgid "You have been locked out due to too many failed passcode attempts."
44+msgstr ""
45+
46+#: qml/Components/DelayedLockscreen.qml:72
47+#, qt-format
48+msgid "Please wait %1 minute and then try again…"
49+msgid_plural "Please wait %1 minutes and then try again…"
50+msgstr[0] ""
51+msgstr[1] ""
52+
3353#: qml/Components/Dialogs.qml:70
3454msgid "Log out"
3555msgstr ""
@@ -74,11 +94,15 @@ msgid ""
7494"to power off?"
7595msgstr ""
7696
77−#: qml/Components/Dialogs.qml:144
97+#: qml/Components/Dialogs.qml:147
7898msgid "Power off"
7999msgstr "Τερματισμός"
80100
81−#: qml/Components/Dialogs.qml:162
101+#: qml/Components/Dialogs.qml:157
102+msgid "Restart"
103+msgstr ""
104+
105+#: qml/Components/Dialogs.qml:167
82106msgid "Cancel"
83107msgstr "Ακύρωση"
84108
@@ -132,60 +156,44 @@ msgstr ""
132156"Πλέον γνωρίζετε τις χειρονομίες από τα άκρα και μπορείτε να ξεκινήσετε να "
133157"χρησιμοποιείτε το τηλέφωνο<br><br>Αγγίξτε την οθόνη για να ξεκινήσετε"
134158
135−#: qml/Components/Lockscreen.qml:167
136−msgid "Please wait"
137−msgstr "Παρακαλώ περιμένετε"
138−
139−#: qml/Components/Lockscreen.qml:172
140−msgid "Too many incorrect attempts"
141−msgstr "Πολλές άκυρες προσπάθειες"
142−
143−#: qml/Components/Lockscreen.qml:206
159+#: qml/Components/Lockscreen.qml:220
144160msgid "Emergency Call"
145161msgstr "Κλήση έκτακτης ανάγκης"
146162
147−#: qml/Components/Lockscreen.qml:226
163+#: qml/Components/Lockscreen.qml:252
148164msgid "OK"
149165msgstr "OK"
150166
151−#: qml/Components/PassphraseLockscreen.qml:61
152−#, qt-format
153−msgid "Hello %1"
154−msgstr "Γεια σας %1"
155−
156−#: qml/Components/PassphraseLockscreen.qml:61
157−msgid "Hello"
158−msgstr "Γεια σας"
159−
160−#: qml/Dash/GenericScopeView.qml:361
167+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
161168msgid "See less"
162169msgstr "Λιγότερα"
163170
164−#: qml/Dash/GenericScopeView.qml:361
171+#: qml/Dash/GenericScopeView.qml:434
165172msgid "See all"
166173msgstr "Εμφάνιση όλων"
167174
168−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
175+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
176+#: qml/Panel/SearchIndicator.qml:27
169177msgid "Search"
170178msgstr "Αναζήτηση"
171179
172−#: qml/Dash/PageHeader.qml:270
180+#: qml/Dash/PageHeader.qml:268
173181msgid "Settings"
174182msgstr ""
175183
176−#: qml/Dash/PageHeader.qml:279
184+#: qml/Dash/PageHeader.qml:275
177185msgid "Remove from Favorites"
178186msgstr ""
179187
180−#: qml/Dash/PageHeader.qml:279
188+#: qml/Dash/PageHeader.qml:275
181189msgid "Add to Favorites"
182190msgstr ""
183191
184−#: qml/Dash/Previews/PreviewActionCombo.qml:34
192+#: qml/Dash/Previews/PreviewActionCombo.qml:35
185193msgid "More..."
186194msgstr "Περισσότερα..."
187195
188−#: qml/Dash/Previews/PreviewActionCombo.qml:34
196+#: qml/Dash/Previews/PreviewActionCombo.qml:35
189197msgid "Less..."
190198msgstr "Λιγότερα..."
191199
@@ -201,15 +209,23 @@ msgstr "Προσθέστε την αξιολόγησή σας"
201209msgid "Send"
202210msgstr "Αποστολή"
203211
204−#: qml/Dash/ScopesOverview.qml:201
205−msgid "Manage Dash"
212+#: qml/Dash/PullToRefreshScopeStyle.qml:55
213+msgid "Pull to refresh…"
206214msgstr ""
207215
208−#: qml/Dash/ScopesOverview.qml:408
216+#: qml/Dash/PullToRefreshScopeStyle.qml:60
217+msgid "Release to refresh…"
218+msgstr ""
219+
220+#: qml/Dash/ScopesOverview.qml:206
221+msgid "Manage Scopes"
222+msgstr ""
223+
224+#: qml/Dash/ScopesOverview.qml:428
209225msgid "Done"
210226msgstr "Ολοκληρώθηκε"
211227
212−#: qml/Dash/ScopesOverview.qml:434
228+#: qml/Dash/ScopesOverview.qml:454
213229msgid "Store"
214230msgstr "Κατάστημα"
215231
@@ -222,10 +238,10 @@ msgid "All"
222238msgstr "Όλα"
223239
224240#: qml/Greeter/Greeter.qml:157
225−msgid "Swipe to unlock"
226−msgstr "Σύρετε για να ξεκλειδώσετε"
241+msgid "Unlock"
242+msgstr ""
227243
228−#: qml/Hud/HudParametrizedActionsPage.qml:132
244+#: qml/Hud/HudParametrizedActionsPage.qml:139
229245msgid "Confirm"
230246msgstr "Επιβεβαίωση"
231247
@@ -245,18 +261,10 @@ msgstr "Μιλήστε τώρα..."
245261msgid "Speaking..."
246262msgstr "Ομιλία..."
247263
248−#: qml/Notifications/NotificationMenuItemFactory.qml:105
264+#: qml/Notifications/NotificationMenuItemFactory.qml:116
249265msgid "Show password"
250266msgstr "Εμφάνιση κωδικού"
251267
252−#: qml/Notifications/NotificationMenuItemFactory.qml:120
253−msgid "Enter SIM PIN"
254−msgstr ""
255−
256−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257−msgid "Sorry, incorrect PIN"
258−msgstr ""
259−
260268#: qml/Panel/ActiveCallHint.qml:77
261269msgid "Tap to return to call..."
262270msgstr "Πατήστε για να γυρίσετε στην κλήση..."
@@ -265,27 +273,31 @@ msgstr "Πατήστε για να γυρίσετε στην κλήση..."
265273msgid "Conference"
266274msgstr "Συνδιάσκεψη"
267275
268−#: qml/Panel/Indicators/MenuItemFactory.qml:651
276+#: qml/Panel/Indicators/MenuItemFactory.qml:600
277+msgid "Nothing is playing"
278+msgstr ""
279+
280+#: qml/Panel/Indicators/MenuItemFactory.qml:748
269281msgid "In queue…"
270282msgstr "Στην ουρά..."
271283
272−#: qml/Panel/Indicators/MenuItemFactory.qml:655
284+#: qml/Panel/Indicators/MenuItemFactory.qml:752
273285msgid "Downloading"
274286msgstr "Λήψη σε εξέλιξη"
275287
276−#: qml/Panel/Indicators/MenuItemFactory.qml:657
288+#: qml/Panel/Indicators/MenuItemFactory.qml:754
277289msgid "Paused, tap to resume"
278290msgstr "Σταματημένο, αγγίξτε για συνέχιση"
279291
280−#: qml/Panel/Indicators/MenuItemFactory.qml:659
292+#: qml/Panel/Indicators/MenuItemFactory.qml:756
281293msgid "Canceled"
282294msgstr "Ακυρώθηκε"
283295
284−#: qml/Panel/Indicators/MenuItemFactory.qml:661
296+#: qml/Panel/Indicators/MenuItemFactory.qml:758
285297msgid "Finished"
286298msgstr "Ολοκληρώθηκε"
287299
288−#: qml/Panel/Indicators/MenuItemFactory.qml:663
300+#: qml/Panel/Indicators/MenuItemFactory.qml:760
289301msgid "Failed, tap to retry"
290302msgstr "Αποτυχία, πατήστε για να ξαναπροσπαθήσετε"
291303
@@ -297,55 +309,56 @@ msgstr "Ξεκλείδωμα SIM"
297309msgid "Roaming"
298310msgstr "Περιαγωγή"
299311
300−#: qml/Shell.qml:266
301−msgid "Enter your passphrase"
312+#: qml/Shell.qml:346
313+msgid "Enter passphrase"
302314msgstr ""
303315
304−#: qml/Shell.qml:267
316+#: qml/Shell.qml:347
305317msgid "Sorry, incorrect passphrase"
306318msgstr ""
307319
308−#: qml/Shell.qml:282
309−msgid "Enter your passcode"
320+#: qml/Shell.qml:348
321+msgid "Please re-enter"
310322msgstr ""
311323
312−#: qml/Shell.qml:283
324+#: qml/Shell.qml:350
325+msgid "Enter passcode"
326+msgstr ""
327+
328+#: qml/Shell.qml:351
313329msgid "Sorry, incorrect passcode"
314330msgstr ""
315331
316−#: qml/Shell.qml:273
332+#: qml/Shell.qml:354
317333#, qt-format
318−msgid "Enter your %1"
319−msgstr "Εισάγετε το %1"
334+msgid "Enter %1"
335+msgstr ""
320336
321−#: qml/Shell.qml:274
337+#: qml/Shell.qml:355
322338#, qt-format
323339msgid "Sorry, incorrect %1"
324340msgstr ""
325341
326−#: qml/Shell.qml:310
342+#: qml/Shell.qml:390
327343msgid "Sorry, incorrect passphrase."
328344msgstr ""
329345
330−#: qml/Shell.qml:311
346+#: qml/Shell.qml:391
331347msgid "Sorry, incorrect passcode."
332348msgstr ""
333349
334−#: qml/Shell.qml:312
350+#: qml/Shell.qml:392
335351msgid "This will be your last attempt."
336352msgstr ""
337353
338−#: qml/Shell.qml:314
354+#: qml/Shell.qml:394
339355msgid ""
340356"If passphrase is entered incorrectly, your phone will conduct a factory "
341357"reset and all personal data will be deleted."
342358msgstr ""
343359
344−#: qml/Shell.qml:315
360+#: qml/Shell.qml:395
345361msgid ""
346362"If passcode is entered incorrectly, your phone will conduct a factory reset "
347363"and all personal data will be deleted."
348364msgstr ""
349−
350−#~ msgid "Restart"
351−#~ msgstr "Επανεκκίνηση"
po/en_AU.po+108−99
@@ -7,78 +7,104 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-08-27 09:59+0000\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
11+"PO-Revision-Date: 2014-10-12 09:41+0000\n"
1212"Last-Translator: Jared Norris <jarednorris@ubuntu.com>\n"
1313"Language-Team: English (Australia) <en_AU@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-10-13 06:15+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
2223msgstr "Password: "
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr "Pin shortcut"
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr "Unpin shortcut"
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr "Device Locked"
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr "You have been locked out due to too many failed passphrase attempts."
41+
42+#: qml/Components/DelayedLockscreen.qml:63
43+msgid "You have been locked out due to too many failed passcode attempts."
44+msgstr "You have been locked out due to too many failed passcode attempts."
45+
46+#: qml/Components/DelayedLockscreen.qml:72
47+#, qt-format
48+msgid "Please wait %1 minute and then try again…"
49+msgid_plural "Please wait %1 minutes and then try again…"
50+msgstr[0] "Please wait %1 minute and then try again…"
51+msgstr[1] "Please wait %1 minutes and then try again…"
52+
3353#: qml/Components/Dialogs.qml:70
3454msgid "Log out"
35−msgstr ""
55+msgstr "Log out"
3656
3757#: qml/Components/Dialogs.qml:71
3858msgid "Are you sure you want to log out?"
39−msgstr ""
59+msgstr "Are you sure you want to log out?"
4060
4161#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4262#: qml/Components/Dialogs.qml:122
4363msgid "No"
44−msgstr ""
64+msgstr "No"
4565
4666#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4767#: qml/Components/Dialogs.qml:129
4868msgid "Yes"
49−msgstr ""
69+msgstr "Yes"
5070
5171#: qml/Components/Dialogs.qml:94
5272msgid "Shut down"
53−msgstr ""
73+msgstr "Shut down"
5474
5575#: qml/Components/Dialogs.qml:95
5676msgid "Are you sure you want to shut down?"
57−msgstr ""
77+msgstr "Are you sure you want to shut down?"
5878
5979#: qml/Components/Dialogs.qml:119
6080msgid "Reboot"
61−msgstr ""
81+msgstr "Reboot"
6282
6383#: qml/Components/Dialogs.qml:120
6484msgid "Are you sure you want to reboot?"
65−msgstr ""
85+msgstr "Are you sure you want to reboot?"
6686
6787#: qml/Components/Dialogs.qml:144
6888msgid "Power"
69−msgstr ""
89+msgstr "Power"
7090
7191#: qml/Components/Dialogs.qml:145
7292msgid ""
7393"Are you sure you would like\n"
7494"to power off?"
7595msgstr ""
96+"Are you sure you would like\n"
97+"to power off?"
7698
77−#: qml/Components/Dialogs.qml:144
99+#: qml/Components/Dialogs.qml:147
78100msgid "Power off"
79101msgstr "Power off"
80102
81−#: qml/Components/Dialogs.qml:162
103+#: qml/Components/Dialogs.qml:157
104+msgid "Restart"
105+msgstr "Restart"
106+
107+#: qml/Components/Dialogs.qml:167
82108msgid "Cancel"
83109msgstr "Cancel"
84110
@@ -130,60 +156,44 @@ msgstr ""
130156"You have now mastered the edge gestures and can start using the "
131157"phone<br><br>Tap on the screen to start"
132158
133−#: qml/Components/Lockscreen.qml:167
134−msgid "Please wait"
135−msgstr "Please wait"
136−
137−#: qml/Components/Lockscreen.qml:172
138−msgid "Too many incorrect attempts"
139−msgstr "Too many incorrect attempts"
140−
141−#: qml/Components/Lockscreen.qml:206
159+#: qml/Components/Lockscreen.qml:220
142160msgid "Emergency Call"
143161msgstr "Emergency Call"
144162
145−#: qml/Components/Lockscreen.qml:226
163+#: qml/Components/Lockscreen.qml:252
146164msgid "OK"
147165msgstr "OK"
148166
149−#: qml/Components/PassphraseLockscreen.qml:61
150−#, qt-format
151−msgid "Hello %1"
152−msgstr "Hello %1"
153−
154−#: qml/Components/PassphraseLockscreen.qml:61
155−msgid "Hello"
156−msgstr "Hello"
157−
158−#: qml/Dash/GenericScopeView.qml:361
167+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
159168msgid "See less"
160169msgstr "See less"
161170
162−#: qml/Dash/GenericScopeView.qml:361
171+#: qml/Dash/GenericScopeView.qml:434
163172msgid "See all"
164173msgstr "See all"
165174
166−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
175+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
176+#: qml/Panel/SearchIndicator.qml:27
167177msgid "Search"
168178msgstr "Search"
169179
170−#: qml/Dash/PageHeader.qml:270
180+#: qml/Dash/PageHeader.qml:268
171181msgid "Settings"
172−msgstr ""
182+msgstr "Settings"
173183
174−#: qml/Dash/PageHeader.qml:279
184+#: qml/Dash/PageHeader.qml:275
175185msgid "Remove from Favorites"
176−msgstr ""
186+msgstr "Remove from Favourites"
177187
178−#: qml/Dash/PageHeader.qml:279
188+#: qml/Dash/PageHeader.qml:275
179189msgid "Add to Favorites"
180−msgstr ""
190+msgstr "Add to Favourites"
181191
182−#: qml/Dash/Previews/PreviewActionCombo.qml:34
192+#: qml/Dash/Previews/PreviewActionCombo.qml:35
183193msgid "More..."
184194msgstr "More..."
185195
186−#: qml/Dash/Previews/PreviewActionCombo.qml:34
196+#: qml/Dash/Previews/PreviewActionCombo.qml:35
187197msgid "Less..."
188198msgstr "Less..."
189199
@@ -199,15 +209,23 @@ msgstr "Add a review"
199209msgid "Send"
200210msgstr "Send"
201211
202−#: qml/Dash/ScopesOverview.qml:201
203−msgid "Manage Dash"
204−msgstr "Manage Dash"
212+#: qml/Dash/PullToRefreshScopeStyle.qml:55
213+msgid "Pull to refresh…"
214+msgstr "Pull to refresh…"
215+
216+#: qml/Dash/PullToRefreshScopeStyle.qml:60
217+msgid "Release to refresh…"
218+msgstr "Release to refresh…"
219+
220+#: qml/Dash/ScopesOverview.qml:206
221+msgid "Manage Scopes"
222+msgstr "Manage Scopes"
205223
206−#: qml/Dash/ScopesOverview.qml:408
224+#: qml/Dash/ScopesOverview.qml:428
207225msgid "Done"
208226msgstr "Done"
209227
210−#: qml/Dash/ScopesOverview.qml:434
228+#: qml/Dash/ScopesOverview.qml:454
211229msgid "Store"
212230msgstr "Store"
213231
@@ -220,10 +238,10 @@ msgid "All"
220238msgstr "All"
221239
222240#: qml/Greeter/Greeter.qml:157
223−msgid "Swipe to unlock"
224−msgstr "Swipe to unlock"
241+msgid "Unlock"
242+msgstr "Unlock"
225243
226−#: qml/Hud/HudParametrizedActionsPage.qml:132
244+#: qml/Hud/HudParametrizedActionsPage.qml:139
227245msgid "Confirm"
228246msgstr "Confirm"
229247
@@ -243,18 +261,10 @@ msgstr "Speak Now..."
243261msgid "Speaking..."
244262msgstr "Speaking..."
245263
246−#: qml/Notifications/NotificationMenuItemFactory.qml:105
264+#: qml/Notifications/NotificationMenuItemFactory.qml:116
247265msgid "Show password"
248266msgstr "Show password"
249267
250−#: qml/Notifications/NotificationMenuItemFactory.qml:120
251−msgid "Enter SIM PIN"
252−msgstr "Enter SIM PIN"
253−
254−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
255−msgid "Sorry, incorrect PIN"
256−msgstr "Sorry, incorrect PIN"
257−
258268#: qml/Panel/ActiveCallHint.qml:77
259269msgid "Tap to return to call..."
260270msgstr "Tap to return to call..."
@@ -263,27 +273,31 @@ msgstr "Tap to return to call..."
263273msgid "Conference"
264274msgstr "Conference"
265275
266−#: qml/Panel/Indicators/MenuItemFactory.qml:651
276+#: qml/Panel/Indicators/MenuItemFactory.qml:600
277+msgid "Nothing is playing"
278+msgstr "Nothing is playing"
279+
280+#: qml/Panel/Indicators/MenuItemFactory.qml:748
267281msgid "In queue…"
268282msgstr "In queue…"
269283
270−#: qml/Panel/Indicators/MenuItemFactory.qml:655
284+#: qml/Panel/Indicators/MenuItemFactory.qml:752
271285msgid "Downloading"
272286msgstr "Downloading"
273287
274−#: qml/Panel/Indicators/MenuItemFactory.qml:657
288+#: qml/Panel/Indicators/MenuItemFactory.qml:754
275289msgid "Paused, tap to resume"
276290msgstr "Paused, tap to resume"
277291
278−#: qml/Panel/Indicators/MenuItemFactory.qml:659
292+#: qml/Panel/Indicators/MenuItemFactory.qml:756
279293msgid "Canceled"
280294msgstr "Cancelled"
281295
282−#: qml/Panel/Indicators/MenuItemFactory.qml:661
296+#: qml/Panel/Indicators/MenuItemFactory.qml:758
283297msgid "Finished"
284298msgstr "Finished"
285299
286−#: qml/Panel/Indicators/MenuItemFactory.qml:663
300+#: qml/Panel/Indicators/MenuItemFactory.qml:760
287301msgid "Failed, tap to retry"
288302msgstr "Failed, tap to retry"
289303
@@ -295,45 +309,49 @@ msgstr "Unlock SIM"
295309msgid "Roaming"
296310msgstr "Roaming"
297311
298−#: qml/Shell.qml:266
299−msgid "Enter your passphrase"
300−msgstr "Enter your passphrase"
312+#: qml/Shell.qml:346
313+msgid "Enter passphrase"
314+msgstr "Enter passphrase"
301315
302−#: qml/Shell.qml:267
316+#: qml/Shell.qml:347
303317msgid "Sorry, incorrect passphrase"
304318msgstr "Sorry, incorrect passphrase"
305319
306−#: qml/Shell.qml:282
307−msgid "Enter your passcode"
308−msgstr ""
320+#: qml/Shell.qml:348
321+msgid "Please re-enter"
322+msgstr "Please re-enter"
323+
324+#: qml/Shell.qml:350
325+msgid "Enter passcode"
326+msgstr "Enter passcode"
309327
310−#: qml/Shell.qml:283
328+#: qml/Shell.qml:351
311329msgid "Sorry, incorrect passcode"
312−msgstr ""
330+msgstr "Sorry, incorrect passcode"
313331
314−#: qml/Shell.qml:273
332+#: qml/Shell.qml:354
315333#, qt-format
316−msgid "Enter your %1"
317−msgstr "Enter your %1"
334+msgid "Enter %1"
335+msgstr "Enter %1"
318336
319−#: qml/Shell.qml:274
337+#: qml/Shell.qml:355
320338#, qt-format
321339msgid "Sorry, incorrect %1"
322340msgstr "Sorry, incorrect %1"
323341
324−#: qml/Shell.qml:310
342+#: qml/Shell.qml:390
325343msgid "Sorry, incorrect passphrase."
326344msgstr "Sorry, incorrect passphrase."
327345
328−#: qml/Shell.qml:311
346+#: qml/Shell.qml:391
329347msgid "Sorry, incorrect passcode."
330348msgstr "Sorry, incorrect passcode."
331349
332−#: qml/Shell.qml:312
350+#: qml/Shell.qml:392
333351msgid "This will be your last attempt."
334352msgstr "This will be your last attempt."
335353
336−#: qml/Shell.qml:314
354+#: qml/Shell.qml:394
337355msgid ""
338356"If passphrase is entered incorrectly, your phone will conduct a factory "
339357"reset and all personal data will be deleted."
@@ -341,19 +359,10 @@ msgstr ""
341359"If passphrase is entered incorrectly, your phone will conduct a factory "
342360"reset and all personal data will be deleted."
343361
344−#: qml/Shell.qml:315
362+#: qml/Shell.qml:395
345363msgid ""
346364"If passcode is entered incorrectly, your phone will conduct a factory reset "
347365"and all personal data will be deleted."
348366msgstr ""
349367"If passcode is entered incorrectly, your phone will conduct a factory reset "
350368"and all personal data will be deleted."
351−
352−#~ msgid "Are you sure you would like to turn power off?"
353−#~ msgstr "Are you sure you would like to turn power off?"
354−
355−#~ msgid "Restart"
356−#~ msgstr "Restart"
357−
358−#~ msgid "Enter your PIN"
359−#~ msgstr "Enter your PIN"
po/en_GB.po+113−98
@@ -7,78 +7,104 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-08-23 13:48+0000\n"
12−"Last-Translator: Alan Pope ㋛ <alan@ubuntu.com>\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
11+"PO-Revision-Date: 2014-10-03 12:46+0000\n"
12+"Last-Translator: Andi Chandler <Unknown>\n"
1313"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-10-09 06:37+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
2223msgstr "Password: "
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr "Pin shortcut"
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr "Unpin shortcut"
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr "Device Locked"
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr "You have been locked out due to too many failed passphrase attempts."
41+
42+#: qml/Components/DelayedLockscreen.qml:63
43+msgid "You have been locked out due to too many failed passcode attempts."
44+msgstr "You have been locked out due to too many failed passcode attempts."
45+
46+#: qml/Components/DelayedLockscreen.qml:72
47+#, qt-format
48+msgid "Please wait %1 minute and then try again…"
49+msgid_plural "Please wait %1 minutes and then try again…"
50+msgstr[0] "Please wait %1 minute and then try again…"
51+msgstr[1] "Please wait %1 minutes and then try again…"
52+
3353#: qml/Components/Dialogs.qml:70
3454msgid "Log out"
35−msgstr ""
55+msgstr "Log out"
3656
3757#: qml/Components/Dialogs.qml:71
3858msgid "Are you sure you want to log out?"
39−msgstr ""
59+msgstr "Are you sure you want to log out?"
4060
4161#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4262#: qml/Components/Dialogs.qml:122
4363msgid "No"
44−msgstr ""
64+msgstr "No"
4565
4666#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4767#: qml/Components/Dialogs.qml:129
4868msgid "Yes"
49−msgstr ""
69+msgstr "Yes"
5070
5171#: qml/Components/Dialogs.qml:94
5272msgid "Shut down"
53−msgstr ""
73+msgstr "Shut down"
5474
5575#: qml/Components/Dialogs.qml:95
5676msgid "Are you sure you want to shut down?"
57−msgstr ""
77+msgstr "Are you sure you want to shut down?"
5878
5979#: qml/Components/Dialogs.qml:119
6080msgid "Reboot"
61−msgstr ""
81+msgstr "Reboot"
6282
6383#: qml/Components/Dialogs.qml:120
6484msgid "Are you sure you want to reboot?"
65−msgstr ""
85+msgstr "Are you sure you want to reboot?"
6686
6787#: qml/Components/Dialogs.qml:144
6888msgid "Power"
69−msgstr ""
89+msgstr "Power"
7090
7191#: qml/Components/Dialogs.qml:145
7292msgid ""
7393"Are you sure you would like\n"
7494"to power off?"
7595msgstr ""
96+"Are you sure you would like\n"
97+"to power off?"
7698
77−#: qml/Components/Dialogs.qml:144
99+#: qml/Components/Dialogs.qml:147
78100msgid "Power off"
79101msgstr "Power off"
80102
81−#: qml/Components/Dialogs.qml:162
103+#: qml/Components/Dialogs.qml:157
104+msgid "Restart"
105+msgstr "Restart"
106+
107+#: qml/Components/Dialogs.qml:167
82108msgid "Cancel"
83109msgstr "Cancel"
84110
@@ -130,60 +156,44 @@ msgstr ""
130156"You have now mastered the edge gestures and can start using the "
131157"phone<br><br>Tap on the screen to start"
132158
133−#: qml/Components/Lockscreen.qml:167
134−msgid "Please wait"
135−msgstr "Please wait"
136−
137−#: qml/Components/Lockscreen.qml:172
138−msgid "Too many incorrect attempts"
139−msgstr "Too many incorrect attempts"
140−
141−#: qml/Components/Lockscreen.qml:206
159+#: qml/Components/Lockscreen.qml:220
142160msgid "Emergency Call"
143161msgstr "Emergency Call"
144162
145−#: qml/Components/Lockscreen.qml:226
163+#: qml/Components/Lockscreen.qml:252
146164msgid "OK"
147165msgstr "OK"
148166
149−#: qml/Components/PassphraseLockscreen.qml:61
150−#, qt-format
151−msgid "Hello %1"
152−msgstr "Hello %1"
153−
154−#: qml/Components/PassphraseLockscreen.qml:61
155−msgid "Hello"
156−msgstr "Hello"
157−
158−#: qml/Dash/GenericScopeView.qml:361
167+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
159168msgid "See less"
160169msgstr "See less"
161170
162−#: qml/Dash/GenericScopeView.qml:361
171+#: qml/Dash/GenericScopeView.qml:434
163172msgid "See all"
164173msgstr "See all"
165174
166−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
175+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
176+#: qml/Panel/SearchIndicator.qml:27
167177msgid "Search"
168178msgstr "Search"
169179
170−#: qml/Dash/PageHeader.qml:270
180+#: qml/Dash/PageHeader.qml:268
171181msgid "Settings"
172−msgstr ""
182+msgstr "Settings"
173183
174−#: qml/Dash/PageHeader.qml:279
184+#: qml/Dash/PageHeader.qml:275
175185msgid "Remove from Favorites"
176−msgstr ""
186+msgstr "Remove from Favourites"
177187
178−#: qml/Dash/PageHeader.qml:279
188+#: qml/Dash/PageHeader.qml:275
179189msgid "Add to Favorites"
180−msgstr ""
190+msgstr "Add to Favourites"
181191
182−#: qml/Dash/Previews/PreviewActionCombo.qml:34
192+#: qml/Dash/Previews/PreviewActionCombo.qml:35
183193msgid "More..."
184194msgstr "More..."
185195
186−#: qml/Dash/Previews/PreviewActionCombo.qml:34
196+#: qml/Dash/Previews/PreviewActionCombo.qml:35
187197msgid "Less..."
188198msgstr "Less..."
189199
@@ -199,15 +209,23 @@ msgstr "Add a review"
199209msgid "Send"
200210msgstr "Send"
201211
202−#: qml/Dash/ScopesOverview.qml:201
203−msgid "Manage Dash"
204−msgstr "Manage Dash"
212+#: qml/Dash/PullToRefreshScopeStyle.qml:55
213+msgid "Pull to refresh…"
214+msgstr "Pull to refresh…"
215+
216+#: qml/Dash/PullToRefreshScopeStyle.qml:60
217+msgid "Release to refresh…"
218+msgstr "Release to refresh…"
205219
206−#: qml/Dash/ScopesOverview.qml:408
220+#: qml/Dash/ScopesOverview.qml:206
221+msgid "Manage Scopes"
222+msgstr "Manage Scopes"
223+
224+#: qml/Dash/ScopesOverview.qml:428
207225msgid "Done"
208226msgstr "Done"
209227
210−#: qml/Dash/ScopesOverview.qml:434
228+#: qml/Dash/ScopesOverview.qml:454
211229msgid "Store"
212230msgstr "Store"
213231
@@ -220,10 +238,10 @@ msgid "All"
220238msgstr "All"
221239
222240#: qml/Greeter/Greeter.qml:157
223−msgid "Swipe to unlock"
224−msgstr "Swipe to unlock"
241+msgid "Unlock"
242+msgstr "Unlock"
225243
226−#: qml/Hud/HudParametrizedActionsPage.qml:132
244+#: qml/Hud/HudParametrizedActionsPage.qml:139
227245msgid "Confirm"
228246msgstr "Confirm"
229247
@@ -243,18 +261,10 @@ msgstr "Speak Now..."
243261msgid "Speaking..."
244262msgstr "Speaking..."
245263
246−#: qml/Notifications/NotificationMenuItemFactory.qml:105
264+#: qml/Notifications/NotificationMenuItemFactory.qml:116
247265msgid "Show password"
248266msgstr "Show password"
249267
250−#: qml/Notifications/NotificationMenuItemFactory.qml:120
251−msgid "Enter SIM PIN"
252−msgstr "Enter SIM PIN"
253−
254−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
255−msgid "Sorry, incorrect PIN"
256−msgstr "Sorry, incorrect PIN"
257−
258268#: qml/Panel/ActiveCallHint.qml:77
259269msgid "Tap to return to call..."
260270msgstr "Tap to return to call..."
@@ -263,27 +273,31 @@ msgstr "Tap to return to call..."
263273msgid "Conference"
264274msgstr "Conference"
265275
266−#: qml/Panel/Indicators/MenuItemFactory.qml:651
276+#: qml/Panel/Indicators/MenuItemFactory.qml:600
277+msgid "Nothing is playing"
278+msgstr "Nothing is playing"
279+
280+#: qml/Panel/Indicators/MenuItemFactory.qml:748
267281msgid "In queue…"
268282msgstr "In queue…"
269283
270−#: qml/Panel/Indicators/MenuItemFactory.qml:655
284+#: qml/Panel/Indicators/MenuItemFactory.qml:752
271285msgid "Downloading"
272286msgstr "Downloading"
273287
274−#: qml/Panel/Indicators/MenuItemFactory.qml:657
288+#: qml/Panel/Indicators/MenuItemFactory.qml:754
275289msgid "Paused, tap to resume"
276290msgstr "Paused, tap to resume"
277291
278−#: qml/Panel/Indicators/MenuItemFactory.qml:659
292+#: qml/Panel/Indicators/MenuItemFactory.qml:756
279293msgid "Canceled"
280294msgstr "Cancelled"
281295
282−#: qml/Panel/Indicators/MenuItemFactory.qml:661
296+#: qml/Panel/Indicators/MenuItemFactory.qml:758
283297msgid "Finished"
284298msgstr "Finished"
285299
286−#: qml/Panel/Indicators/MenuItemFactory.qml:663
300+#: qml/Panel/Indicators/MenuItemFactory.qml:760
287301msgid "Failed, tap to retry"
288302msgstr "Failed, tap to retry"
289303
@@ -295,45 +309,49 @@ msgstr "Unlock SIM"
295309msgid "Roaming"
296310msgstr "Roaming"
297311
298−#: qml/Shell.qml:266
299−msgid "Enter your passphrase"
300−msgstr "Enter your passphrase"
312+#: qml/Shell.qml:346
313+msgid "Enter passphrase"
314+msgstr "Enter passphrase"
301315
302−#: qml/Shell.qml:267
316+#: qml/Shell.qml:347
303317msgid "Sorry, incorrect passphrase"
304318msgstr "Sorry, incorrect passphrase"
305319
306−#: qml/Shell.qml:282
307−msgid "Enter your passcode"
308−msgstr ""
320+#: qml/Shell.qml:348
321+msgid "Please re-enter"
322+msgstr "Please re-enter"
323+
324+#: qml/Shell.qml:350
325+msgid "Enter passcode"
326+msgstr "Enter passcode"
309327
310−#: qml/Shell.qml:283
328+#: qml/Shell.qml:351
311329msgid "Sorry, incorrect passcode"
312−msgstr ""
330+msgstr "Sorry, incorrect passcode"
313331
314−#: qml/Shell.qml:273
332+#: qml/Shell.qml:354
315333#, qt-format
316−msgid "Enter your %1"
317−msgstr "Enter your %1"
334+msgid "Enter %1"
335+msgstr "Enter %1"
318336
319−#: qml/Shell.qml:274
337+#: qml/Shell.qml:355
320338#, qt-format
321339msgid "Sorry, incorrect %1"
322340msgstr "Sorry, incorrect %1"
323341
324−#: qml/Shell.qml:310
342+#: qml/Shell.qml:390
325343msgid "Sorry, incorrect passphrase."
326344msgstr "Sorry, incorrect passphrase."
327345
328−#: qml/Shell.qml:311
346+#: qml/Shell.qml:391
329347msgid "Sorry, incorrect passcode."
330348msgstr "Sorry, incorrect passcode."
331349
332−#: qml/Shell.qml:312
350+#: qml/Shell.qml:392
333351msgid "This will be your last attempt."
334352msgstr "This will be your last attempt."
335353
336−#: qml/Shell.qml:314
354+#: qml/Shell.qml:394
337355msgid ""
338356"If passphrase is entered incorrectly, your phone will conduct a factory "
339357"reset and all personal data will be deleted."
@@ -341,7 +359,7 @@ msgstr ""
341359"If passphrase is entered incorrectly, your phone will conduct a factory "
342360"reset and all personal data will be deleted."
343361
344−#: qml/Shell.qml:315
362+#: qml/Shell.qml:395
345363msgid ""
346364"If passcode is entered incorrectly, your phone will conduct a factory reset "
347365"and all personal data will be deleted."
@@ -349,11 +367,8 @@ msgstr ""
349367"If passcode is entered incorrectly, your phone will conduct a factory reset "
350368"and all personal data will be deleted."
351369
352−#~ msgid "Are you sure you would like to turn power off?"
353−#~ msgstr "Are you sure you would like to turn power off?"
354−
355−#~ msgid "Restart"
356−#~ msgstr "Restart"
370+#~ msgid "Sorry, incorrect PIN"
371+#~ msgstr "Sorry, incorrect PIN"
357372
358−#~ msgid "Enter your PIN"
359−#~ msgstr "Enter your PIN"
373+#~ msgid "Enter SIM PIN"
374+#~ msgstr "Enter SIM PIN"
po/eo.po+87−71
@@ -7,29 +7,49 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
1111"PO-Revision-Date: 2013-06-26 22:35+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Esperanto <eo@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-10-09 06:36+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
2223msgstr ""
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr ""
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr ""
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr ""
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr ""
41+
42+#: qml/Components/DelayedLockscreen.qml:63
43+msgid "You have been locked out due to too many failed passcode attempts."
44+msgstr ""
45+
46+#: qml/Components/DelayedLockscreen.qml:72
47+#, qt-format
48+msgid "Please wait %1 minute and then try again…"
49+msgid_plural "Please wait %1 minutes and then try again…"
50+msgstr[0] ""
51+msgstr[1] ""
52+
3353#: qml/Components/Dialogs.qml:70
3454msgid "Log out"
3555msgstr ""
@@ -74,11 +94,15 @@ msgid ""
7494"to power off?"
7595msgstr ""
7696
77−#: qml/Components/Dialogs.qml:144
97+#: qml/Components/Dialogs.qml:147
7898msgid "Power off"
7999msgstr ""
80100
81−#: qml/Components/Dialogs.qml:162
101+#: qml/Components/Dialogs.qml:157
102+msgid "Restart"
103+msgstr ""
104+
105+#: qml/Components/Dialogs.qml:167
82106msgid "Cancel"
83107msgstr ""
84108
@@ -128,60 +152,44 @@ msgid ""
128152"phone<br><br>Tap on the screen to start"
129153msgstr ""
130154
131−#: qml/Components/Lockscreen.qml:167
132−msgid "Please wait"
133−msgstr ""
134−
135−#: qml/Components/Lockscreen.qml:172
136−msgid "Too many incorrect attempts"
137−msgstr ""
138−
139−#: qml/Components/Lockscreen.qml:206
155+#: qml/Components/Lockscreen.qml:220
140156msgid "Emergency Call"
141157msgstr ""
142158
143−#: qml/Components/Lockscreen.qml:226
159+#: qml/Components/Lockscreen.qml:252
144160msgid "OK"
145161msgstr ""
146162
147−#: qml/Components/PassphraseLockscreen.qml:61
148−#, qt-format
149−msgid "Hello %1"
150−msgstr ""
151−
152−#: qml/Components/PassphraseLockscreen.qml:61
153−msgid "Hello"
154−msgstr ""
155−
156−#: qml/Dash/GenericScopeView.qml:361
163+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
157164msgid "See less"
158165msgstr ""
159166
160−#: qml/Dash/GenericScopeView.qml:361
167+#: qml/Dash/GenericScopeView.qml:434
161168msgid "See all"
162169msgstr ""
163170
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
171+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
172+#: qml/Panel/SearchIndicator.qml:27
165173msgid "Search"
166174msgstr ""
167175
168−#: qml/Dash/PageHeader.qml:270
176+#: qml/Dash/PageHeader.qml:268
169177msgid "Settings"
170178msgstr ""
171179
172−#: qml/Dash/PageHeader.qml:279
180+#: qml/Dash/PageHeader.qml:275
173181msgid "Remove from Favorites"
174182msgstr ""
175183
176−#: qml/Dash/PageHeader.qml:279
184+#: qml/Dash/PageHeader.qml:275
177185msgid "Add to Favorites"
178186msgstr ""
179187
180−#: qml/Dash/Previews/PreviewActionCombo.qml:34
188+#: qml/Dash/Previews/PreviewActionCombo.qml:35
181189msgid "More..."
182190msgstr ""
183191
184−#: qml/Dash/Previews/PreviewActionCombo.qml:34
192+#: qml/Dash/Previews/PreviewActionCombo.qml:35
185193msgid "Less..."
186194msgstr ""
187195
@@ -197,15 +205,23 @@ msgstr ""
197205msgid "Send"
198206msgstr ""
199207
200−#: qml/Dash/ScopesOverview.qml:201
201−msgid "Manage Dash"
208+#: qml/Dash/PullToRefreshScopeStyle.qml:55
209+msgid "Pull to refresh…"
210+msgstr ""
211+
212+#: qml/Dash/PullToRefreshScopeStyle.qml:60
213+msgid "Release to refresh…"
214+msgstr ""
215+
216+#: qml/Dash/ScopesOverview.qml:206
217+msgid "Manage Scopes"
202218msgstr ""
203219
204−#: qml/Dash/ScopesOverview.qml:408
220+#: qml/Dash/ScopesOverview.qml:428
205221msgid "Done"
206222msgstr ""
207223
208−#: qml/Dash/ScopesOverview.qml:434
224+#: qml/Dash/ScopesOverview.qml:454
209225msgid "Store"
210226msgstr ""
211227
@@ -218,10 +234,10 @@ msgid "All"
218234msgstr ""
219235
220236#: qml/Greeter/Greeter.qml:157
221−msgid "Swipe to unlock"
237+msgid "Unlock"
222238msgstr ""
223239
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
240+#: qml/Hud/HudParametrizedActionsPage.qml:139
225241msgid "Confirm"
226242msgstr ""
227243
@@ -241,18 +257,10 @@ msgstr ""
241257msgid "Speaking..."
242258msgstr ""
243259
244−#: qml/Notifications/NotificationMenuItemFactory.qml:105
260+#: qml/Notifications/NotificationMenuItemFactory.qml:116
245261msgid "Show password"
246262msgstr ""
247263
248−#: qml/Notifications/NotificationMenuItemFactory.qml:120
249−msgid "Enter SIM PIN"
250−msgstr ""
251−
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
253−msgid "Sorry, incorrect PIN"
254−msgstr ""
255−
256264#: qml/Panel/ActiveCallHint.qml:77
257265msgid "Tap to return to call..."
258266msgstr ""
@@ -261,27 +269,31 @@ msgstr ""
261269msgid "Conference"
262270msgstr ""
263271
264−#: qml/Panel/Indicators/MenuItemFactory.qml:651
272+#: qml/Panel/Indicators/MenuItemFactory.qml:600
273+msgid "Nothing is playing"
274+msgstr ""
275+
276+#: qml/Panel/Indicators/MenuItemFactory.qml:748
265277msgid "In queue…"
266278msgstr ""
267279
268−#: qml/Panel/Indicators/MenuItemFactory.qml:655
280+#: qml/Panel/Indicators/MenuItemFactory.qml:752
269281msgid "Downloading"
270282msgstr ""
271283
272−#: qml/Panel/Indicators/MenuItemFactory.qml:657
284+#: qml/Panel/Indicators/MenuItemFactory.qml:754
273285msgid "Paused, tap to resume"
274286msgstr ""
275287
276−#: qml/Panel/Indicators/MenuItemFactory.qml:659
288+#: qml/Panel/Indicators/MenuItemFactory.qml:756
277289msgid "Canceled"
278290msgstr ""
279291
280−#: qml/Panel/Indicators/MenuItemFactory.qml:661
292+#: qml/Panel/Indicators/MenuItemFactory.qml:758
281293msgid "Finished"
282294msgstr ""
283295
284−#: qml/Panel/Indicators/MenuItemFactory.qml:663
296+#: qml/Panel/Indicators/MenuItemFactory.qml:760
285297msgid "Failed, tap to retry"
286298msgstr ""
287299
@@ -293,51 +305,55 @@ msgstr ""
293305msgid "Roaming"
294306msgstr ""
295307
296−#: qml/Shell.qml:266
297−msgid "Enter your passphrase"
308+#: qml/Shell.qml:346
309+msgid "Enter passphrase"
298310msgstr ""
299311
300−#: qml/Shell.qml:267
312+#: qml/Shell.qml:347
301313msgid "Sorry, incorrect passphrase"
302314msgstr ""
303315
304−#: qml/Shell.qml:282
305−msgid "Enter your passcode"
316+#: qml/Shell.qml:348
317+msgid "Please re-enter"
318+msgstr ""
319+
320+#: qml/Shell.qml:350
321+msgid "Enter passcode"
306322msgstr ""
307323
308−#: qml/Shell.qml:283
324+#: qml/Shell.qml:351
309325msgid "Sorry, incorrect passcode"
310326msgstr ""
311327
312−#: qml/Shell.qml:273
328+#: qml/Shell.qml:354
313329#, qt-format
314−msgid "Enter your %1"
330+msgid "Enter %1"
315331msgstr ""
316332
317−#: qml/Shell.qml:274
333+#: qml/Shell.qml:355
318334#, qt-format
319335msgid "Sorry, incorrect %1"
320336msgstr ""
321337
322−#: qml/Shell.qml:310
338+#: qml/Shell.qml:390
323339msgid "Sorry, incorrect passphrase."
324340msgstr ""
325341
326−#: qml/Shell.qml:311
342+#: qml/Shell.qml:391
327343msgid "Sorry, incorrect passcode."
328344msgstr ""
329345
330−#: qml/Shell.qml:312
346+#: qml/Shell.qml:392
331347msgid "This will be your last attempt."
332348msgstr ""
333349
334−#: qml/Shell.qml:314
350+#: qml/Shell.qml:394
335351msgid ""
336352"If passphrase is entered incorrectly, your phone will conduct a factory "
337353"reset and all personal data will be deleted."
338354msgstr ""
339355
340−#: qml/Shell.qml:315
356+#: qml/Shell.qml:395
341357msgid ""
342358"If passcode is entered incorrectly, your phone will conduct a factory reset "
343359"and all personal data will be deleted."
po/es.po+121−102
@@ -7,78 +7,108 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-08-27 15:20+0000\n"
12−"Last-Translator: Leo Arias <leo.arias@canonical.com>\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
11+"PO-Revision-Date: 2014-10-09 07:43+0000\n"
12+"Last-Translator: Adolfo Jayme <fitoschido@gmail.com>\n"
1313"Language-Team: Spanish <es@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-10-10 05:23+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
2223msgstr "Contraseña: "
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr "Anclar"
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr "Desanclar"
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr "Dispositivo bloqueado"
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr ""
41+"Se ha proporcionado una contraseña errónea demasiadas veces. Se ha bloqueado "
42+"el dispositivo."
43+
44+#: qml/Components/DelayedLockscreen.qml:63
45+msgid "You have been locked out due to too many failed passcode attempts."
46+msgstr ""
47+"Se ha bloqueado el dispositivo debido al gran número de intentos fallidos de "
48+"desbloqueo."
49+
50+#: qml/Components/DelayedLockscreen.qml:72
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] "Espere %1 minuto e inténtelo de nuevo..."
55+msgstr[1] "Espere %1 minutos e inténtelo de nuevo..."
56+
3357#: qml/Components/Dialogs.qml:70
3458msgid "Log out"
35−msgstr ""
59+msgstr "Cerrar la sesión"
3660
3761#: qml/Components/Dialogs.qml:71
3862msgid "Are you sure you want to log out?"
39−msgstr ""
63+msgstr "̉¿Está seguro de que quiere cerrar la sesión?"
4064
4165#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4266#: qml/Components/Dialogs.qml:122
4367msgid "No"
44−msgstr ""
68+msgstr "No"
4569
4670#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4771#: qml/Components/Dialogs.qml:129
4872msgid "Yes"
49−msgstr ""
73+msgstr "Sí"
5074
5175#: qml/Components/Dialogs.qml:94
5276msgid "Shut down"
53−msgstr ""
77+msgstr "Apagar"
5478
5579#: qml/Components/Dialogs.qml:95
5680msgid "Are you sure you want to shut down?"
57−msgstr ""
81+msgstr "¿Está seguro de que quiere apagar?"
5882
5983#: qml/Components/Dialogs.qml:119
6084msgid "Reboot"
61−msgstr ""
85+msgstr "Reiniciar"
6286
6387#: qml/Components/Dialogs.qml:120
6488msgid "Are you sure you want to reboot?"
65−msgstr ""
89+msgstr "¿Esta seguro de que quiere reiniciar?"
6690
6791#: qml/Components/Dialogs.qml:144
6892msgid "Power"
69−msgstr ""
93+msgstr "Apagar"
7094
7195#: qml/Components/Dialogs.qml:145
7296msgid ""
7397"Are you sure you would like\n"
7498"to power off?"
7599msgstr ""
100+"¿Está seguro de que quiere\n"
101+"apagar?"
76102
77−#: qml/Components/Dialogs.qml:144
103+#: qml/Components/Dialogs.qml:147
78104msgid "Power off"
79105msgstr "Apagar"
80106
81−#: qml/Components/Dialogs.qml:162
107+#: qml/Components/Dialogs.qml:157
108+msgid "Restart"
109+msgstr "Reiniciar"
110+
111+#: qml/Components/Dialogs.qml:167
82112msgid "Cancel"
83113msgstr "Cancelar"
84114
@@ -133,60 +163,44 @@ msgstr ""
133163"Ahora domina los gestos de los bordes y puede usar el teléfono<br><br>Toque "
134164"la pantalla para comenzar"
135165
136−#: qml/Components/Lockscreen.qml:167
137−msgid "Please wait"
138−msgstr "Espere un momento"
139−
140−#: qml/Components/Lockscreen.qml:172
141−msgid "Too many incorrect attempts"
142−msgstr "Demasiados intentos incorrectos"
143−
144−#: qml/Components/Lockscreen.qml:206
166+#: qml/Components/Lockscreen.qml:220
145167msgid "Emergency Call"
146168msgstr "Llamada de emergencia"
147169
148−#: qml/Components/Lockscreen.qml:226
170+#: qml/Components/Lockscreen.qml:252
149171msgid "OK"
150172msgstr "Aceptar"
151173
152−#: qml/Components/PassphraseLockscreen.qml:61
153−#, qt-format
154−msgid "Hello %1"
155−msgstr "Hola, %1"
156−
157−#: qml/Components/PassphraseLockscreen.qml:61
158−msgid "Hello"
159−msgstr "Hola"
160−
161−#: qml/Dash/GenericScopeView.qml:361
174+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
162175msgid "See less"
163176msgstr "Ver menos"
164177
165−#: qml/Dash/GenericScopeView.qml:361
178+#: qml/Dash/GenericScopeView.qml:434
166179msgid "See all"
167180msgstr "Ver todo"
168181
169−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
182+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
183+#: qml/Panel/SearchIndicator.qml:27
170184msgid "Search"
171185msgstr "Buscar"
172186
173−#: qml/Dash/PageHeader.qml:270
187+#: qml/Dash/PageHeader.qml:268
174188msgid "Settings"
175−msgstr ""
189+msgstr "Configuración"
176190
177−#: qml/Dash/PageHeader.qml:279
191+#: qml/Dash/PageHeader.qml:275
178192msgid "Remove from Favorites"
179−msgstr ""
193+msgstr "Quitar de favoritos"
180194
181−#: qml/Dash/PageHeader.qml:279
195+#: qml/Dash/PageHeader.qml:275
182196msgid "Add to Favorites"
183−msgstr ""
197+msgstr "Añadir a favoritos"
184198
185−#: qml/Dash/Previews/PreviewActionCombo.qml:34
199+#: qml/Dash/Previews/PreviewActionCombo.qml:35
186200msgid "More..."
187201msgstr "Más…"
188202
189−#: qml/Dash/Previews/PreviewActionCombo.qml:34
203+#: qml/Dash/Previews/PreviewActionCombo.qml:35
190204msgid "Less..."
191205msgstr "Menos…"
192206
@@ -202,15 +216,23 @@ msgstr "Añadir una reseña"
202216msgid "Send"
203217msgstr "Enviar"
204218
205−#: qml/Dash/ScopesOverview.qml:201
206−msgid "Manage Dash"
207−msgstr "Gestionar tablero"
219+#: qml/Dash/PullToRefreshScopeStyle.qml:55
220+msgid "Pull to refresh…"
221+msgstr "Deslice para actualizar…"
208222
209−#: qml/Dash/ScopesOverview.qml:408
223+#: qml/Dash/PullToRefreshScopeStyle.qml:60
224+msgid "Release to refresh…"
225+msgstr "Suelte para actualizar…"
226+
227+#: qml/Dash/ScopesOverview.qml:206
228+msgid "Manage Scopes"
229+msgstr "Administrar ámbitos"
230+
231+#: qml/Dash/ScopesOverview.qml:428
210232msgid "Done"
211233msgstr "Hecho"
212234
213−#: qml/Dash/ScopesOverview.qml:434
235+#: qml/Dash/ScopesOverview.qml:454
214236msgid "Store"
215237msgstr "Tienda"
216238
@@ -223,10 +245,10 @@ msgid "All"
223245msgstr "Todo"
224246
225247#: qml/Greeter/Greeter.qml:157
226−msgid "Swipe to unlock"
227−msgstr "Deslice para desbloquear"
248+msgid "Unlock"
249+msgstr "Desbloquear"
228250
229−#: qml/Hud/HudParametrizedActionsPage.qml:132
251+#: qml/Hud/HudParametrizedActionsPage.qml:139
230252msgid "Confirm"
231253msgstr "Confirmar"
232254
@@ -246,18 +268,10 @@ msgstr "Hable ahora…"
246268msgid "Speaking..."
247269msgstr "Hablando…"
248270
249−#: qml/Notifications/NotificationMenuItemFactory.qml:105
271+#: qml/Notifications/NotificationMenuItemFactory.qml:116
250272msgid "Show password"
251273msgstr "Mostrar contraseña"
252274
253−#: qml/Notifications/NotificationMenuItemFactory.qml:120
254−msgid "Enter SIM PIN"
255−msgstr "Escriba el PIN de la SIM"
256−
257−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
258−msgid "Sorry, incorrect PIN"
259−msgstr "El PIN es incorrecto"
260−
261275#: qml/Panel/ActiveCallHint.qml:77
262276msgid "Tap to return to call..."
263277msgstr "Toque para volver a llamar..."
@@ -266,27 +280,31 @@ msgstr "Toque para volver a llamar..."
266280msgid "Conference"
267281msgstr "Conferencia"
268282
269−#: qml/Panel/Indicators/MenuItemFactory.qml:651
283+#: qml/Panel/Indicators/MenuItemFactory.qml:600
284+msgid "Nothing is playing"
285+msgstr "Ningún contenido en reproducción"
286+
287+#: qml/Panel/Indicators/MenuItemFactory.qml:748
270288msgid "In queue…"
271289msgstr "En espera…"
272290
273−#: qml/Panel/Indicators/MenuItemFactory.qml:655
291+#: qml/Panel/Indicators/MenuItemFactory.qml:752
274292msgid "Downloading"
275293msgstr "Descargando"
276294
277−#: qml/Panel/Indicators/MenuItemFactory.qml:657
295+#: qml/Panel/Indicators/MenuItemFactory.qml:754
278296msgid "Paused, tap to resume"
279297msgstr "Pausado, toque para reanudar"
280298
281−#: qml/Panel/Indicators/MenuItemFactory.qml:659
299+#: qml/Panel/Indicators/MenuItemFactory.qml:756
282300msgid "Canceled"
283301msgstr "Cancelado"
284302
285−#: qml/Panel/Indicators/MenuItemFactory.qml:661
303+#: qml/Panel/Indicators/MenuItemFactory.qml:758
286304msgid "Finished"
287305msgstr "Finalizado"
288306
289−#: qml/Panel/Indicators/MenuItemFactory.qml:663
307+#: qml/Panel/Indicators/MenuItemFactory.qml:760
290308msgid "Failed, tap to retry"
291309msgstr "Falló, toque para reintentar"
292310
@@ -298,45 +316,49 @@ msgstr "Desbloquear SIM"
298316msgid "Roaming"
299317msgstr "Itinerancia"
300318
301−#: qml/Shell.qml:266
302−msgid "Enter your passphrase"
303−msgstr "Introudzca su contraseña"
319+#: qml/Shell.qml:346
320+msgid "Enter passphrase"
321+msgstr "Introduzca la contraseña"
304322
305−#: qml/Shell.qml:267
323+#: qml/Shell.qml:347
306324msgid "Sorry, incorrect passphrase"
307−msgstr "Lo sentimos, contraseña incorrecta"
325+msgstr "La contraseña es incorrecta"
308326
309−#: qml/Shell.qml:282
310−msgid "Enter your passcode"
311−msgstr ""
327+#: qml/Shell.qml:348
328+msgid "Please re-enter"
329+msgstr "Reintroduzca"
330+
331+#: qml/Shell.qml:350
332+msgid "Enter passcode"
333+msgstr "Introduzca el código"
312334
313−#: qml/Shell.qml:283
335+#: qml/Shell.qml:351
314336msgid "Sorry, incorrect passcode"
315−msgstr ""
337+msgstr "El código es incorrecto"
316338
317−#: qml/Shell.qml:273
339+#: qml/Shell.qml:354
318340#, qt-format
319−msgid "Enter your %1"
320−msgstr "Introduzca su %1"
341+msgid "Enter %1"
342+msgstr "Introduzca %1"
321343
322−#: qml/Shell.qml:274
344+#: qml/Shell.qml:355
323345#, qt-format
324346msgid "Sorry, incorrect %1"
325−msgstr "Lo sentimos, %1 incorrecto"
347+msgstr "Incorrecto (%1)"
326348
327−#: qml/Shell.qml:310
349+#: qml/Shell.qml:390
328350msgid "Sorry, incorrect passphrase."
329−msgstr "Frase de paso incorrecta"
351+msgstr "La contraseña es incorrecta."
330352
331−#: qml/Shell.qml:311
353+#: qml/Shell.qml:391
332354msgid "Sorry, incorrect passcode."
333−msgstr "Código de paso incorrecto"
355+msgstr "Código de acceso incorrecto."
334356
335−#: qml/Shell.qml:312
357+#: qml/Shell.qml:392
336358msgid "This will be your last attempt."
337359msgstr "Este será su último intento."
338360
339−#: qml/Shell.qml:314
361+#: qml/Shell.qml:394
340362msgid ""
341363"If passphrase is entered incorrectly, your phone will conduct a factory "
342364"reset and all personal data will be deleted."
@@ -344,7 +366,7 @@ msgstr ""
344366"Si se introduce la frase incorrectamente, el teléfono volverá a la "
345367"configuración de fábrica y se perderán todos los datos personales."
346368
347−#: qml/Shell.qml:315
369+#: qml/Shell.qml:395
348370msgid ""
349371"If passcode is entered incorrectly, your phone will conduct a factory reset "
350372"and all personal data will be deleted."
@@ -352,11 +374,8 @@ msgstr ""
352374"Si se introduce el código incorrectamente, el teléfono volverá a la "
353375"configuración de fábrica y se perderán todos los datos personales."
354376
355−#~ msgid "Restart"
356−#~ msgstr "Reiniciar"
357−
358−#~ msgid "Are you sure you would like to turn power off?"
359−#~ msgstr "¿Está seguro de que quiere apagarlo?"
377+#~ msgid "Enter SIM PIN"
378+#~ msgstr "Escriba el PIN de la SIM"
360379
361−#~ msgid "Enter your PIN"
362−#~ msgstr "Escriba el PIN"
380+#~ msgid "Sorry, incorrect PIN"
381+#~ msgstr "El PIN es incorrecto"
po/eu.po+137−108
@@ -7,80 +7,107 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-08-06 22:51+0000\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
11+"PO-Revision-Date: 2014-10-07 19:21+0000\n"
1212"Last-Translator: Ibai Oihanguren Sala <Unknown>\n"
1313"Language-Team: Basque <eu@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:29+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-10-09 06:36+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
22−msgstr ""
23+msgstr "Pasahitza: "
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr "Ainguratu lasterbidea"
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr "Askatu lasterbidea"
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr "Gailua blokeatuta"
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr ""
41+"Gailua blokeatu da, pasaesaldia sartzeko saiakera gehiegi hutsegin "
42+"dituzulako."
43+
44+#: qml/Components/DelayedLockscreen.qml:63
45+msgid "You have been locked out due to too many failed passcode attempts."
46+msgstr ""
47+"Gailua blokeatu da, pasakodea sartzeko saiakera gehiegi hutsegin dituzulako."
48+
49+#: qml/Components/DelayedLockscreen.qml:72
50+#, qt-format
51+msgid "Please wait %1 minute and then try again…"
52+msgid_plural "Please wait %1 minutes and then try again…"
53+msgstr[0] "Itxaron minutu %1ez eta saiatu berriro…"
54+msgstr[1] "Itxaron %1 minutuz eta saiatu berriro…"
55+
3356#: qml/Components/Dialogs.qml:70
3457msgid "Log out"
35−msgstr ""
58+msgstr "Amaitu saioa"
3659
3760#: qml/Components/Dialogs.qml:71
3861msgid "Are you sure you want to log out?"
39−msgstr ""
62+msgstr "Ziur saioa amaitu nahi duzula?"
4063
4164#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4265#: qml/Components/Dialogs.qml:122
4366msgid "No"
44−msgstr ""
67+msgstr "Ez"
4568
4669#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4770#: qml/Components/Dialogs.qml:129
4871msgid "Yes"
49−msgstr ""
72+msgstr "Bai"
5073
5174#: qml/Components/Dialogs.qml:94
5275msgid "Shut down"
53−msgstr ""
76+msgstr "Itzali"
5477
5578#: qml/Components/Dialogs.qml:95
5679msgid "Are you sure you want to shut down?"
57−msgstr ""
80+msgstr "Ziur itzali nahi duzula?"
5881
5982#: qml/Components/Dialogs.qml:119
6083msgid "Reboot"
61−msgstr ""
84+msgstr "Berrabiarazi"
6285
6386#: qml/Components/Dialogs.qml:120
6487msgid "Are you sure you want to reboot?"
65−msgstr ""
88+msgstr "Ziur berrabiarazi nahi duzula?"
6689
6790#: qml/Components/Dialogs.qml:144
6891msgid "Power"
69−msgstr ""
92+msgstr "Piztu/itzali"
7093
7194#: qml/Components/Dialogs.qml:145
7295msgid ""
7396"Are you sure you would like\n"
7497"to power off?"
75−msgstr ""
98+msgstr "Ziur itzali nahi duzula?"
7699
77−#: qml/Components/Dialogs.qml:144
100+#: qml/Components/Dialogs.qml:147
78101msgid "Power off"
79−msgstr ""
102+msgstr "Itzali"
103+
104+#: qml/Components/Dialogs.qml:157
105+msgid "Restart"
106+msgstr "Berrabiarazi"
80107
81−#: qml/Components/Dialogs.qml:162
108+#: qml/Components/Dialogs.qml:167
82109msgid "Cancel"
83−msgstr ""
110+msgstr "Utzi"
84111
85112#: qml/Components/EdgeDemoOverlay.qml:151
86113msgid "Skip intro"
@@ -118,7 +145,7 @@ msgstr "Ezkerreko ertza"
118145#: qml/Components/EdgeDemo.qml:199
119146msgid "Swipe from the left to reveal the launcher for quick access to apps"
120147msgstr ""
121−"Pasatu hatza ezkerretik abiarazlea erakutsi eta aplikazioak eskura berehala "
148+"Pasatu hatza ezkerretik abiarazlea erakutsi eta aplikazioak berehala eskura "
122149"izateko"
123150
124151#: qml/Components/EdgeDemo.qml:226
@@ -133,60 +160,44 @@ msgstr ""
133160"Jadanik ezagutzen dituzu ertzetako keinuak, eta mugikorra erabiltzen has "
134161"zaitezke<br><br>Sakatu pantailan hasteko"
135162
136−#: qml/Components/Lockscreen.qml:167
137−msgid "Please wait"
138−msgstr ""
139−
140−#: qml/Components/Lockscreen.qml:172
141−msgid "Too many incorrect attempts"
142−msgstr ""
143−
144−#: qml/Components/Lockscreen.qml:206
163+#: qml/Components/Lockscreen.qml:220
145164msgid "Emergency Call"
146165msgstr "Larrialdi-deia"
147166
148−#: qml/Components/Lockscreen.qml:226
167+#: qml/Components/Lockscreen.qml:252
149168msgid "OK"
150169msgstr "Ados"
151170
152−#: qml/Components/PassphraseLockscreen.qml:61
153−#, qt-format
154−msgid "Hello %1"
155−msgstr "Kaixo %1"
156−
157−#: qml/Components/PassphraseLockscreen.qml:61
158−msgid "Hello"
159−msgstr "Kaixo"
160−
161−#: qml/Dash/GenericScopeView.qml:361
171+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
162172msgid "See less"
163173msgstr "Ikusi gutxiago"
164174
165−#: qml/Dash/GenericScopeView.qml:361
175+#: qml/Dash/GenericScopeView.qml:434
166176msgid "See all"
167177msgstr "Ikusi guztiak"
168178
169−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
179+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
180+#: qml/Panel/SearchIndicator.qml:27
170181msgid "Search"
171182msgstr "Bilatu"
172183
173−#: qml/Dash/PageHeader.qml:270
184+#: qml/Dash/PageHeader.qml:268
174185msgid "Settings"
175−msgstr ""
186+msgstr "Ezarpenak"
176187
177−#: qml/Dash/PageHeader.qml:279
188+#: qml/Dash/PageHeader.qml:275
178189msgid "Remove from Favorites"
179−msgstr ""
190+msgstr "Kendu gogokoetatik"
180191
181−#: qml/Dash/PageHeader.qml:279
192+#: qml/Dash/PageHeader.qml:275
182193msgid "Add to Favorites"
183−msgstr ""
194+msgstr "Gehitu gogokoetara"
184195
185−#: qml/Dash/Previews/PreviewActionCombo.qml:34
196+#: qml/Dash/Previews/PreviewActionCombo.qml:35
186197msgid "More..."
187198msgstr "Gehiago..."
188199
189−#: qml/Dash/Previews/PreviewActionCombo.qml:34
200+#: qml/Dash/Previews/PreviewActionCombo.qml:35
190201msgid "Less..."
191202msgstr "Gutxiago..."
192203
@@ -202,33 +213,41 @@ msgstr "Gehitu kritika"
202213msgid "Send"
203214msgstr "Bidali"
204215
205−#: qml/Dash/ScopesOverview.qml:201
206−msgid "Manage Dash"
207−msgstr ""
216+#: qml/Dash/PullToRefreshScopeStyle.qml:55
217+msgid "Pull to refresh…"
218+msgstr "Tiratu freskatzeko…"
208219
209−#: qml/Dash/ScopesOverview.qml:408
220+#: qml/Dash/PullToRefreshScopeStyle.qml:60
221+msgid "Release to refresh…"
222+msgstr "Askatu freskatzeko…"
223+
224+#: qml/Dash/ScopesOverview.qml:206
225+msgid "Manage Scopes"
226+msgstr "Kudeatu eremuak"
227+
228+#: qml/Dash/ScopesOverview.qml:428
210229msgid "Done"
211−msgstr ""
230+msgstr "Eginda"
212231
213−#: qml/Dash/ScopesOverview.qml:434
232+#: qml/Dash/ScopesOverview.qml:454
214233msgid "Store"
215−msgstr ""
234+msgstr "Denda"
216235
217236#: qml/Dash/ScopesOverviewTab.qml:36
218237msgid "Favorites"
219−msgstr ""
238+msgstr "Gogokoak"
220239
221240#: qml/Dash/ScopesOverviewTab.qml:54
222241msgid "All"
223−msgstr ""
242+msgstr "Guztiak"
224243
225244#: qml/Greeter/Greeter.qml:157
226−msgid "Swipe to unlock"
227−msgstr "Pasatu hatza desblokeatzeko"
245+msgid "Unlock"
246+msgstr "Desblokeatu"
228247
229−#: qml/Hud/HudParametrizedActionsPage.qml:132
248+#: qml/Hud/HudParametrizedActionsPage.qml:139
230249msgid "Confirm"
231−msgstr "Baieztatu"
250+msgstr "Berretsi"
232251
233252#: qml/Hud/Hud.qml:61 qml/Hud/Hud.qml:99 qml/Hud/Hud.qml:372
234253msgid "Type or say a command"
@@ -246,104 +265,114 @@ msgstr "Hitz egin orain..."
246265msgid "Speaking..."
247266msgstr "Hitz egiten..."
248267
249−#: qml/Notifications/NotificationMenuItemFactory.qml:105
268+#: qml/Notifications/NotificationMenuItemFactory.qml:116
250269msgid "Show password"
251270msgstr "Erakutsi pasahitza"
252271
253−#: qml/Notifications/NotificationMenuItemFactory.qml:120
254−msgid "Enter SIM PIN"
255−msgstr ""
256−
257−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
258−msgid "Sorry, incorrect PIN"
259−msgstr ""
260−
261272#: qml/Panel/ActiveCallHint.qml:77
262273msgid "Tap to return to call..."
263−msgstr "Sakatu deia itzultzeko..."
274+msgstr "Sakatu deira itzultzeko..."
264275
265276#: qml/Panel/ActiveCallHint.qml:90
266277msgid "Conference"
267278msgstr "Konferentzia"
268279
269−#: qml/Panel/Indicators/MenuItemFactory.qml:651
280+#: qml/Panel/Indicators/MenuItemFactory.qml:600
281+msgid "Nothing is playing"
282+msgstr "Ez dago ezer erreproduzitzen"
283+
284+#: qml/Panel/Indicators/MenuItemFactory.qml:748
270285msgid "In queue…"
271286msgstr "Ilaran..."
272287
273−#: qml/Panel/Indicators/MenuItemFactory.qml:655
288+#: qml/Panel/Indicators/MenuItemFactory.qml:752
274289msgid "Downloading"
275290msgstr "Deskargatzen"
276291
277−#: qml/Panel/Indicators/MenuItemFactory.qml:657
292+#: qml/Panel/Indicators/MenuItemFactory.qml:754
278293msgid "Paused, tap to resume"
279294msgstr "Pausatuta, sakatu jarraitzeko"
280295
281−#: qml/Panel/Indicators/MenuItemFactory.qml:659
296+#: qml/Panel/Indicators/MenuItemFactory.qml:756
282297msgid "Canceled"
283298msgstr "Utzita"
284299
285−#: qml/Panel/Indicators/MenuItemFactory.qml:661
300+#: qml/Panel/Indicators/MenuItemFactory.qml:758
286301msgid "Finished"
287302msgstr "Amaituta"
288303
289−#: qml/Panel/Indicators/MenuItemFactory.qml:663
304+#: qml/Panel/Indicators/MenuItemFactory.qml:760
290305msgid "Failed, tap to retry"
291306msgstr "Huts egin du, sakatu berriro saiatzeko"
292307
293308#: qml/Panel/Indicators/ModemInfoItem.qml:105
294309msgid "Unlock SIM"
295−msgstr ""
310+msgstr "Desblokeatu SIMa"
296311
297312#: qml/Panel/Indicators/RoamingIndication.qml:27
298313msgid "Roaming"
299−msgstr ""
314+msgstr "Ibiltaritza"
300315
301−#: qml/Shell.qml:266
302−msgid "Enter your passphrase"
303−msgstr ""
316+#: qml/Shell.qml:346
317+msgid "Enter passphrase"
318+msgstr "Sartu pasaesaldia"
304319
305−#: qml/Shell.qml:267
320+#: qml/Shell.qml:347
306321msgid "Sorry, incorrect passphrase"
307−msgstr ""
322+msgstr "Sentitzen dugu, pasaesaldia okerrekoa da"
308323
309−#: qml/Shell.qml:282
310−msgid "Enter your passcode"
311−msgstr ""
324+#: qml/Shell.qml:348
325+msgid "Please re-enter"
326+msgstr "Errepikatu"
327+
328+#: qml/Shell.qml:350
329+msgid "Enter passcode"
330+msgstr "Sartu pasakodea"
312331
313−#: qml/Shell.qml:283
332+#: qml/Shell.qml:351
314333msgid "Sorry, incorrect passcode"
315−msgstr ""
334+msgstr "Sentitzen dugu, pasakodea okerrekoa da"
316335
317−#: qml/Shell.qml:273
336+#: qml/Shell.qml:354
318337#, qt-format
319−msgid "Enter your %1"
320−msgstr ""
338+msgid "Enter %1"
339+msgstr "Sartu %1"
321340
322−#: qml/Shell.qml:274
341+#: qml/Shell.qml:355
323342#, qt-format
324343msgid "Sorry, incorrect %1"
325−msgstr ""
344+msgstr "Sentitzen dugu, %1 okerrekoa da"
326345
327−#: qml/Shell.qml:310
346+#: qml/Shell.qml:390
328347msgid "Sorry, incorrect passphrase."
329−msgstr ""
348+msgstr "Sentitzen dugu, pasaesaldia okerrekoa da."
330349
331−#: qml/Shell.qml:311
350+#: qml/Shell.qml:391
332351msgid "Sorry, incorrect passcode."
333−msgstr ""
352+msgstr "Sentitzen dugu, pasakodea okerrekoa da."
334353
335−#: qml/Shell.qml:312
354+#: qml/Shell.qml:392
336355msgid "This will be your last attempt."
337−msgstr ""
356+msgstr "Hau duzu azken saiakera."
338357
339−#: qml/Shell.qml:314
358+#: qml/Shell.qml:394
340359msgid ""
341360"If passphrase is entered incorrectly, your phone will conduct a factory "
342361"reset and all personal data will be deleted."
343362msgstr ""
363+"Okerreko pasaesaldia sartzen baduzu, telefonoaren jatorrizko ezarpenak "
364+"berrezarri eta datu pertsonal guztiak ezabatuko dira."
344365
345−#: qml/Shell.qml:315
366+#: qml/Shell.qml:395
346367msgid ""
347368"If passcode is entered incorrectly, your phone will conduct a factory reset "
348369"and all personal data will be deleted."
349370msgstr ""
371+"Okerreko pasakodea sartzen baduzu, telefonoaren jatorrizko ezarpenak "
372+"berrezarri eta datu pertsonal guztiak ezabatuko dira."
373+
374+#~ msgid "Sorry, incorrect PIN"
375+#~ msgstr "Sentitzen dugu, PINa okerrekoa da"
376+
377+#~ msgid "Enter SIM PIN"
378+#~ msgstr "Sartu SIMaren PINa"
po/fa.po+93−83
@@ -7,29 +7,49 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-08-27 20:08+0000\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
11+"PO-Revision-Date: 2014-10-11 23:41+0000\n"
1212"Last-Translator: Danial Behzadi <dani.behzi@gmail.com>\n"
1313"Language-Team: Persian <fa@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=1; plural=0;\n"
18+"X-Launchpad-Export-Date: 2014-10-12 06:55+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
2223msgstr "گذرواژه: "
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr "سنجاق کردن میانبر"
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr "برداشتن سنجاق میانبر"
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr "دستگاه قفل شد"
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr ""
41+"شما به دلیل تلاش‌های بسیار زیاد شکست خورده برای عبارت‌عبور قفل شده‌اید."
42+
43+#: qml/Components/DelayedLockscreen.qml:63
44+msgid "You have been locked out due to too many failed passcode attempts."
45+msgstr "شما به دلیل تلاش‌های بسیار زیاد شکست خورده برای رمزعبور قفل شده‌اید."
46+
47+#: qml/Components/DelayedLockscreen.qml:72
48+#, qt-format
49+msgid "Please wait %1 minute and then try again…"
50+msgid_plural "Please wait %1 minutes and then try again…"
51+msgstr[0] "لطفاُ %1 دقیقه صبر نموده و سپس مجدّداً تلاش نمایید…"
52+
3353#: qml/Components/Dialogs.qml:70
3454msgid "Log out"
3555msgstr "خروج از حساب"
@@ -76,11 +96,15 @@ msgstr ""
7696"آیا مطمئن هستید که\n"
7797"می‌خواهید خاموش کنید؟"
7898
79−#: qml/Components/Dialogs.qml:144
99+#: qml/Components/Dialogs.qml:147
80100msgid "Power off"
81101msgstr "خاموش کردن"
82102
83−#: qml/Components/Dialogs.qml:162
103+#: qml/Components/Dialogs.qml:157
104+msgid "Restart"
105+msgstr "شروع مجدّد"
106+
107+#: qml/Components/Dialogs.qml:167
84108msgid "Cancel"
85109msgstr "لغو"
86110
@@ -132,60 +156,44 @@ msgstr ""
132156"هم اکنون در استفاده از ژست های حرکتی مهارت لازم را دارید و می‌توانید استفاده "
133157"از تلفن را آغاز کنید<br><br>برای شروع صفحه را لمس کنید"
134158
135−#: qml/Components/Lockscreen.qml:167
136−msgid "Please wait"
137−msgstr "لطفاً صبر کنید"
138−
139−#: qml/Components/Lockscreen.qml:172
140−msgid "Too many incorrect attempts"
141−msgstr "تلاش‌های ناموفّق زیاد"
142−
143−#: qml/Components/Lockscreen.qml:206
159+#: qml/Components/Lockscreen.qml:220
144160msgid "Emergency Call"
145161msgstr "تماس اضطراری"
146162
147−#: qml/Components/Lockscreen.qml:226
163+#: qml/Components/Lockscreen.qml:252
148164msgid "OK"
149165msgstr "قبول"
150166
151−#: qml/Components/PassphraseLockscreen.qml:61
152−#, qt-format
153−msgid "Hello %1"
154−msgstr "سلام %1"
155−
156−#: qml/Components/PassphraseLockscreen.qml:61
157−msgid "Hello"
158−msgstr "سلام"
159−
160−#: qml/Dash/GenericScopeView.qml:361
167+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
161168msgid "See less"
162169msgstr "کم‌تر ببینید"
163170
164−#: qml/Dash/GenericScopeView.qml:361
171+#: qml/Dash/GenericScopeView.qml:434
165172msgid "See all"
166173msgstr "دیدن همه"
167174
168−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
175+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
176+#: qml/Panel/SearchIndicator.qml:27
169177msgid "Search"
170178msgstr "جست‌وجو"
171179
172−#: qml/Dash/PageHeader.qml:270
180+#: qml/Dash/PageHeader.qml:268
173181msgid "Settings"
174182msgstr "تنظیمات"
175183
176−#: qml/Dash/PageHeader.qml:279
184+#: qml/Dash/PageHeader.qml:275
177185msgid "Remove from Favorites"
178186msgstr "برداشتن از برگزیده‌ها"
179187
180−#: qml/Dash/PageHeader.qml:279
188+#: qml/Dash/PageHeader.qml:275
181189msgid "Add to Favorites"
182190msgstr "افزودن به برگزیده‌ها"
183191
184−#: qml/Dash/Previews/PreviewActionCombo.qml:34
192+#: qml/Dash/Previews/PreviewActionCombo.qml:35
185193msgid "More..."
186194msgstr "بیش‌تر…"
187195
188−#: qml/Dash/Previews/PreviewActionCombo.qml:34
196+#: qml/Dash/Previews/PreviewActionCombo.qml:35
189197msgid "Less..."
190198msgstr "کم‌تر…"
191199
@@ -201,15 +209,23 @@ msgstr "افزودن یک بازبینی"
201209msgid "Send"
202210msgstr "ارسال"
203211
204−#: qml/Dash/ScopesOverview.qml:201
205−msgid "Manage Dash"
206−msgstr "مدیریت دش"
212+#: qml/Dash/PullToRefreshScopeStyle.qml:55
213+msgid "Pull to refresh…"
214+msgstr "برای تازه‌سازی بکشید…"
215+
216+#: qml/Dash/PullToRefreshScopeStyle.qml:60
217+msgid "Release to refresh…"
218+msgstr "برای تازه‌سازی رها کنید…"
207219
208−#: qml/Dash/ScopesOverview.qml:408
220+#: qml/Dash/ScopesOverview.qml:206
221+msgid "Manage Scopes"
222+msgstr "مدیریت حوزه‌ها"
223+
224+#: qml/Dash/ScopesOverview.qml:428
209225msgid "Done"
210226msgstr "انجام شد"
211227
212−#: qml/Dash/ScopesOverview.qml:434
228+#: qml/Dash/ScopesOverview.qml:454
213229msgid "Store"
214230msgstr "فروشگاه"
215231
@@ -222,10 +238,10 @@ msgid "All"
222238msgstr "همه"
223239
224240#: qml/Greeter/Greeter.qml:157
225−msgid "Swipe to unlock"
226−msgstr "برای باز کردن قفل بکشد"
241+msgid "Unlock"
242+msgstr "بازکردن قفل"
227243
228−#: qml/Hud/HudParametrizedActionsPage.qml:132
244+#: qml/Hud/HudParametrizedActionsPage.qml:139
229245msgid "Confirm"
230246msgstr "تأیید"
231247
@@ -245,18 +261,10 @@ msgstr "اکنون صحبت کنید…"
245261msgid "Speaking..."
246262msgstr "در حال صحبت کردن…"
247263
248−#: qml/Notifications/NotificationMenuItemFactory.qml:105
264+#: qml/Notifications/NotificationMenuItemFactory.qml:116
249265msgid "Show password"
250266msgstr "نمایش گذرواژه"
251267
252−#: qml/Notifications/NotificationMenuItemFactory.qml:120
253−msgid "Enter SIM PIN"
254−msgstr "PIN سیم‌کارت را وارد کنید"
255−
256−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257−msgid "Sorry, incorrect PIN"
258−msgstr "متأسّفیم، PIN نادرست بود"
259−
260268#: qml/Panel/ActiveCallHint.qml:77
261269msgid "Tap to return to call..."
262270msgstr "برای بازگشت به تماس ضربه بزنید…"
@@ -265,27 +273,31 @@ msgstr "برای بازگشت به تماس ضربه بزنید…"
265273msgid "Conference"
266274msgstr "کنفرانس"
267275
268−#: qml/Panel/Indicators/MenuItemFactory.qml:651
276+#: qml/Panel/Indicators/MenuItemFactory.qml:600
277+msgid "Nothing is playing"
278+msgstr "هیچ چیزی در حال پخش نیست"
279+
280+#: qml/Panel/Indicators/MenuItemFactory.qml:748
269281msgid "In queue…"
270282msgstr "در صف…"
271283
272−#: qml/Panel/Indicators/MenuItemFactory.qml:655
284+#: qml/Panel/Indicators/MenuItemFactory.qml:752
273285msgid "Downloading"
274286msgstr "در حال بارگیری"
275287
276−#: qml/Panel/Indicators/MenuItemFactory.qml:657
288+#: qml/Panel/Indicators/MenuItemFactory.qml:754
277289msgid "Paused, tap to resume"
278290msgstr "مکث شد، برای از سر گیری ضربه بزنید"
279291
280−#: qml/Panel/Indicators/MenuItemFactory.qml:659
292+#: qml/Panel/Indicators/MenuItemFactory.qml:756
281293msgid "Canceled"
282294msgstr "لغو شد"
283295
284−#: qml/Panel/Indicators/MenuItemFactory.qml:661
296+#: qml/Panel/Indicators/MenuItemFactory.qml:758
285297msgid "Finished"
286298msgstr "پایان یافت"
287299
288−#: qml/Panel/Indicators/MenuItemFactory.qml:663
300+#: qml/Panel/Indicators/MenuItemFactory.qml:760
289301msgid "Failed, tap to retry"
290302msgstr "شکست خورد، برای تلاش دوباره ضربه بزنید"
291303
@@ -297,45 +309,49 @@ msgstr "باز کردن قفل سیم‌کارت"
297309msgid "Roaming"
298310msgstr "رومینگ"
299311
300−#: qml/Shell.qml:266
301−msgid "Enter your passphrase"
302−msgstr "عبارت‌عبورتان را وارد کنید"
312+#: qml/Shell.qml:346
313+msgid "Enter passphrase"
314+msgstr "عبارت‌عبور را وارد کنید"
303315
304−#: qml/Shell.qml:267
316+#: qml/Shell.qml:347
305317msgid "Sorry, incorrect passphrase"
306318msgstr "متأسّفیم، عبارت‌عبور نادرست بود"
307319
308−#: qml/Shell.qml:282
309−msgid "Enter your passcode"
310−msgstr "رمزعبورتان را وارد کنید"
320+#: qml/Shell.qml:348
321+msgid "Please re-enter"
322+msgstr "لطفاً دوباره وارد کنید"
323+
324+#: qml/Shell.qml:350
325+msgid "Enter passcode"
326+msgstr "رمزعبور را وارد کنید"
311327
312−#: qml/Shell.qml:283
328+#: qml/Shell.qml:351
313329msgid "Sorry, incorrect passcode"
314330msgstr "متأسّفیم، رمزعبور نادرست بود"
315331
316−#: qml/Shell.qml:273
332+#: qml/Shell.qml:354
317333#, qt-format
318−msgid "Enter your %1"
319−msgstr "%1 خود را وارد کنید"
334+msgid "Enter %1"
335+msgstr "%1 را وارد کنید"
320336
321−#: qml/Shell.qml:274
337+#: qml/Shell.qml:355
322338#, qt-format
323339msgid "Sorry, incorrect %1"
324340msgstr "متأسّفیم، %1 نادرست بود"
325341
326−#: qml/Shell.qml:310
342+#: qml/Shell.qml:390
327343msgid "Sorry, incorrect passphrase."
328344msgstr "متأسّفیم، عبارت‌عبور نادرست است."
329345
330−#: qml/Shell.qml:311
346+#: qml/Shell.qml:391
331347msgid "Sorry, incorrect passcode."
332348msgstr "متأسّفیم، رمزعبور نادرست است."
333349
334−#: qml/Shell.qml:312
350+#: qml/Shell.qml:392
335351msgid "This will be your last attempt."
336352msgstr "این آخرین تلاش شما خواهد بود."
337353
338−#: qml/Shell.qml:314
354+#: qml/Shell.qml:394
339355msgid ""
340356"If passphrase is entered incorrectly, your phone will conduct a factory "
341357"reset and all personal data will be deleted."
@@ -343,16 +359,10 @@ msgstr ""
343359"اگر عبارت‌عبور نادرست وارد شود، تلفن شما بازنشانی کارخانه خواهد شد و تمامی "
344360"اطّلاعات شخصی حذف خواهند شد."
345361
346−#: qml/Shell.qml:315
362+#: qml/Shell.qml:395
347363msgid ""
348364"If passcode is entered incorrectly, your phone will conduct a factory reset "
349365"and all personal data will be deleted."
350366msgstr ""
351367"اگر رمزعبور نادرست وارد شود، تلفن شما بازنشانی کارخانه خواهد شد و تمامی "
352368"اطّلاعات شخصی حذف خواهند شد."
353−
354−#~ msgid "Are you sure you would like to turn power off?"
355−#~ msgstr "مطمئنید که می‌خواهید خاموش کنید؟"
356−
357−#~ msgid "Restart"
358−#~ msgstr "شروع مجدّد"
po/fi.po+114−97
@@ -7,78 +7,106 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-08-26 18:32+0000\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
11+"PO-Revision-Date: 2014-10-07 13:10+0000\n"
1212"Last-Translator: Jiri Grönroos <Unknown>\n"
1313"Language-Team: Finnish <fi@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-10-09 06:36+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
2223msgstr "Salasana: "
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr "Kiinnitä pikakuvake"
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr "Poista pikakuvakkeen kiinnitys"
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr "Laite on lukittu"
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr ""
41+"Laite on lukittu liian monen virheellisen tunnuslauseyrityksen jälkeen."
42+
43+#: qml/Components/DelayedLockscreen.qml:63
44+msgid "You have been locked out due to too many failed passcode attempts."
45+msgstr ""
46+"Laite on lukittu liian monen virheellisen suojakoodiyrityksen jälkeen."
47+
48+#: qml/Components/DelayedLockscreen.qml:72
49+#, qt-format
50+msgid "Please wait %1 minute and then try again…"
51+msgid_plural "Please wait %1 minutes and then try again…"
52+msgstr[0] "Odota %1 minuutti ja yritä sitten uudelleen…"
53+msgstr[1] "Odota %1 minuuttia ja yritä sitten uudelleen…"
54+
3355#: qml/Components/Dialogs.qml:70
3456msgid "Log out"
35−msgstr ""
57+msgstr "Kirjaudu ulos"
3658
3759#: qml/Components/Dialogs.qml:71
3860msgid "Are you sure you want to log out?"
39−msgstr ""
61+msgstr "Haluatko varmasti kirjautua ulos?"
4062
4163#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4264#: qml/Components/Dialogs.qml:122
4365msgid "No"
44−msgstr ""
66+msgstr "Ei"
4567
4668#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4769#: qml/Components/Dialogs.qml:129
4870msgid "Yes"
49−msgstr ""
71+msgstr "Kyllä"
5072
5173#: qml/Components/Dialogs.qml:94
5274msgid "Shut down"
53−msgstr ""
75+msgstr "Sammuta"
5476
5577#: qml/Components/Dialogs.qml:95
5678msgid "Are you sure you want to shut down?"
57−msgstr ""
79+msgstr "Haluatko varmasti sammuttaa laitteen?"
5880
5981#: qml/Components/Dialogs.qml:119
6082msgid "Reboot"
61−msgstr ""
83+msgstr "Käynnistä uudelleen"
6284
6385#: qml/Components/Dialogs.qml:120
6486msgid "Are you sure you want to reboot?"
65−msgstr ""
87+msgstr "Haluatko varmasti käynnistää laitteen uudelleen?"
6688
6789#: qml/Components/Dialogs.qml:144
6890msgid "Power"
69−msgstr ""
91+msgstr "Virran katkaisu"
7092
7193#: qml/Components/Dialogs.qml:145
7294msgid ""
7395"Are you sure you would like\n"
7496"to power off?"
7597msgstr ""
98+"Haluatko varmasti\n"
99+"sammuttaa laitteen?"
76100
77−#: qml/Components/Dialogs.qml:144
101+#: qml/Components/Dialogs.qml:147
78102msgid "Power off"
79103msgstr "Sammuta"
80104
81−#: qml/Components/Dialogs.qml:162
105+#: qml/Components/Dialogs.qml:157
106+msgid "Restart"
107+msgstr "Käynnistä uudelleen"
108+
109+#: qml/Components/Dialogs.qml:167
82110msgid "Cancel"
83111msgstr "Peru"
84112
@@ -130,60 +158,44 @@ msgstr ""
130158"Hallitset nyt reunaeleet, joten voit aloittaa puhelimen "
131159"käytön<br><br>Napauta näyttöä aloittaaksesi"
132160
133−#: qml/Components/Lockscreen.qml:167
134−msgid "Please wait"
135−msgstr "Odota hetki"
136−
137−#: qml/Components/Lockscreen.qml:172
138−msgid "Too many incorrect attempts"
139−msgstr "Liian monta virheellistä yritystä"
140−
141−#: qml/Components/Lockscreen.qml:206
161+#: qml/Components/Lockscreen.qml:220
142162msgid "Emergency Call"
143163msgstr "Hätäpuhelu"
144164
145−#: qml/Components/Lockscreen.qml:226
165+#: qml/Components/Lockscreen.qml:252
146166msgid "OK"
147167msgstr "OK"
148168
149−#: qml/Components/PassphraseLockscreen.qml:61
150−#, qt-format
151−msgid "Hello %1"
152−msgstr "Hei %1!"
153−
154−#: qml/Components/PassphraseLockscreen.qml:61
155−msgid "Hello"
156−msgstr "Hei"
157−
158−#: qml/Dash/GenericScopeView.qml:361
169+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
159170msgid "See less"
160171msgstr "Näytä vähemmän"
161172
162−#: qml/Dash/GenericScopeView.qml:361
173+#: qml/Dash/GenericScopeView.qml:434
163174msgid "See all"
164175msgstr "Näytä kaikki"
165176
166−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
177+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
178+#: qml/Panel/SearchIndicator.qml:27
167179msgid "Search"
168180msgstr "Hae"
169181
170−#: qml/Dash/PageHeader.qml:270
182+#: qml/Dash/PageHeader.qml:268
171183msgid "Settings"
172−msgstr ""
184+msgstr "Asetukset"
173185
174−#: qml/Dash/PageHeader.qml:279
186+#: qml/Dash/PageHeader.qml:275
175187msgid "Remove from Favorites"
176−msgstr ""
188+msgstr "Poista suosikeista"
177189
178−#: qml/Dash/PageHeader.qml:279
190+#: qml/Dash/PageHeader.qml:275
179191msgid "Add to Favorites"
180−msgstr ""
192+msgstr "Lisää suosikkeihin"
181193
182−#: qml/Dash/Previews/PreviewActionCombo.qml:34
194+#: qml/Dash/Previews/PreviewActionCombo.qml:35
183195msgid "More..."
184196msgstr "Lisää..."
185197
186−#: qml/Dash/Previews/PreviewActionCombo.qml:34
198+#: qml/Dash/Previews/PreviewActionCombo.qml:35
187199msgid "Less..."
188200msgstr "Vähemmän..."
189201
@@ -199,15 +211,23 @@ msgstr "Lisää arvostelu"
199211msgid "Send"
200212msgstr "Lähetä"
201213
202−#: qml/Dash/ScopesOverview.qml:201
203−msgid "Manage Dash"
204−msgstr "Unityn hallinta"
214+#: qml/Dash/PullToRefreshScopeStyle.qml:55
215+msgid "Pull to refresh…"
216+msgstr "Vedä päivittääksesi…"
205217
206−#: qml/Dash/ScopesOverview.qml:408
218+#: qml/Dash/PullToRefreshScopeStyle.qml:60
219+msgid "Release to refresh…"
220+msgstr "Vapauta päivittääksesi…"
221+
222+#: qml/Dash/ScopesOverview.qml:206
223+msgid "Manage Scopes"
224+msgstr "Näkymien hallinta"
225+
226+#: qml/Dash/ScopesOverview.qml:428
207227msgid "Done"
208228msgstr "Valmis"
209229
210−#: qml/Dash/ScopesOverview.qml:434
230+#: qml/Dash/ScopesOverview.qml:454
211231msgid "Store"
212232msgstr "Kauppa"
213233
@@ -220,10 +240,10 @@ msgid "All"
220240msgstr "Kaikki"
221241
222242#: qml/Greeter/Greeter.qml:157
223−msgid "Swipe to unlock"
224−msgstr "Avaa pyyhkäisemällä"
243+msgid "Unlock"
244+msgstr "Avaa lukitus"
225245
226−#: qml/Hud/HudParametrizedActionsPage.qml:132
246+#: qml/Hud/HudParametrizedActionsPage.qml:139
227247msgid "Confirm"
228248msgstr "Hyväksy"
229249
@@ -243,18 +263,10 @@ msgstr "Puhu nyt..."
243263msgid "Speaking..."
244264msgstr "Puhutaan..."
245265
246−#: qml/Notifications/NotificationMenuItemFactory.qml:105
266+#: qml/Notifications/NotificationMenuItemFactory.qml:116
247267msgid "Show password"
248268msgstr "Näytä salasana"
249269
250−#: qml/Notifications/NotificationMenuItemFactory.qml:120
251−msgid "Enter SIM PIN"
252−msgstr "Anna SIM-kortin PIN-koodi"
253−
254−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
255−msgid "Sorry, incorrect PIN"
256−msgstr "Väärä PIN-koodi"
257−
258270#: qml/Panel/ActiveCallHint.qml:77
259271msgid "Tap to return to call..."
260272msgstr "Napauta palataksesi puheluun..."
@@ -263,27 +275,31 @@ msgstr "Napauta palataksesi puheluun..."
263275msgid "Conference"
264276msgstr "Ryhmäpuhelu"
265277
266−#: qml/Panel/Indicators/MenuItemFactory.qml:651
278+#: qml/Panel/Indicators/MenuItemFactory.qml:600
279+msgid "Nothing is playing"
280+msgstr "Mitään ei toisteta juuri nyt"
281+
282+#: qml/Panel/Indicators/MenuItemFactory.qml:748
267283msgid "In queue…"
268284msgstr "Jonossa…"
269285
270−#: qml/Panel/Indicators/MenuItemFactory.qml:655
286+#: qml/Panel/Indicators/MenuItemFactory.qml:752
271287msgid "Downloading"
272288msgstr "Ladataan"
273289
274−#: qml/Panel/Indicators/MenuItemFactory.qml:657
290+#: qml/Panel/Indicators/MenuItemFactory.qml:754
275291msgid "Paused, tap to resume"
276292msgstr "Keskeytetty, napauta palauttaaksesi"
277293
278−#: qml/Panel/Indicators/MenuItemFactory.qml:659
294+#: qml/Panel/Indicators/MenuItemFactory.qml:756
279295msgid "Canceled"
280296msgstr "Peruttu"
281297
282−#: qml/Panel/Indicators/MenuItemFactory.qml:661
298+#: qml/Panel/Indicators/MenuItemFactory.qml:758
283299msgid "Finished"
284300msgstr "Valmistunut"
285301
286−#: qml/Panel/Indicators/MenuItemFactory.qml:663
302+#: qml/Panel/Indicators/MenuItemFactory.qml:760
287303msgid "Failed, tap to retry"
288304msgstr "Epäonnistunut, napauta yrittääksesi uudelleen"
289305
@@ -295,45 +311,49 @@ msgstr "Avaa SIM-kortin lukitus"
295311msgid "Roaming"
296312msgstr "Verkkovierailu"
297313
298−#: qml/Shell.qml:266
299−msgid "Enter your passphrase"
314+#: qml/Shell.qml:346
315+msgid "Enter passphrase"
300316msgstr "Anna tunnuslause"
301317
302−#: qml/Shell.qml:267
318+#: qml/Shell.qml:347
303319msgid "Sorry, incorrect passphrase"
304320msgstr "Virheellinen tunnuslause"
305321
306−#: qml/Shell.qml:282
307−msgid "Enter your passcode"
308−msgstr ""
322+#: qml/Shell.qml:348
323+msgid "Please re-enter"
324+msgstr "Anna uudelleen"
325+
326+#: qml/Shell.qml:350
327+msgid "Enter passcode"
328+msgstr "Anna suojakoodi"
309329
310−#: qml/Shell.qml:283
330+#: qml/Shell.qml:351
311331msgid "Sorry, incorrect passcode"
312−msgstr ""
332+msgstr "Väärä suojakoodi"
313333
314−#: qml/Shell.qml:273
334+#: qml/Shell.qml:354
315335#, qt-format
316−msgid "Enter your %1"
336+msgid "Enter %1"
317337msgstr "Anna %1"
318338
319−#: qml/Shell.qml:274
339+#: qml/Shell.qml:355
320340#, qt-format
321341msgid "Sorry, incorrect %1"
322342msgstr "Väärä %1"
323343
324−#: qml/Shell.qml:310
344+#: qml/Shell.qml:390
325345msgid "Sorry, incorrect passphrase."
326346msgstr "Virheellinen tunnuslause."
327347
328−#: qml/Shell.qml:311
348+#: qml/Shell.qml:391
329349msgid "Sorry, incorrect passcode."
330−msgstr "Virheellinen tunnuskoodi."
350+msgstr "Virheellinen suojakoodi."
331351
332−#: qml/Shell.qml:312
352+#: qml/Shell.qml:392
333353msgid "This will be your last attempt."
334354msgstr "Tämä on viimeinen yritys."
335355
336−#: qml/Shell.qml:314
356+#: qml/Shell.qml:394
337357msgid ""
338358"If passphrase is entered incorrectly, your phone will conduct a factory "
339359"reset and all personal data will be deleted."
@@ -341,19 +361,16 @@ msgstr ""
341361"Jos kirjoitat tunnuslauseen virheellisesti, puhelimesi palautetaan "
342362"tehdastilaan ja kaikki henkilökohtaiset tietosi poistetaan."
343363
344−#: qml/Shell.qml:315
364+#: qml/Shell.qml:395
345365msgid ""
346366"If passcode is entered incorrectly, your phone will conduct a factory reset "
347367"and all personal data will be deleted."
348368msgstr ""
349−"Jos kirjoitat tunnuskoodin virheellisesti, puhelimesi palautetaan "
369+"Jos kirjoitat suojakoodin virheellisesti, puhelimesi palautetaan "
350370"tehdastilaan ja kaikki henkilökohtaiset tietosi poistetaan."
351371
352−#~ msgid "Are you sure you would like to turn power off?"
353−#~ msgstr "Haluatko varmasti sammuttaa laitteen?"
354−
355−#~ msgid "Restart"
356−#~ msgstr "Käynnistä uudelleen"
372+#~ msgid "Sorry, incorrect PIN"
373+#~ msgstr "Väärä PIN-koodi"
357374
358−#~ msgid "Enter your PIN"
359−#~ msgstr "Anna PIN-koodi"
375+#~ msgid "Enter SIM PIN"
376+#~ msgstr "Anna SIM-kortin PIN-koodi"
po/fo.po+87−71
@@ -7,29 +7,49 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
1111"PO-Revision-Date: 2014-01-14 20:08+0000\n"
1212"Last-Translator: Jógvan Olsen <jeggy@jebster.net>\n"
1313"Language-Team: Faroese <fo@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-10-09 06:36+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
2223msgstr ""
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr ""
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr ""
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr ""
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr ""
41+
42+#: qml/Components/DelayedLockscreen.qml:63
43+msgid "You have been locked out due to too many failed passcode attempts."
44+msgstr ""
45+
46+#: qml/Components/DelayedLockscreen.qml:72
47+#, qt-format
48+msgid "Please wait %1 minute and then try again…"
49+msgid_plural "Please wait %1 minutes and then try again…"
50+msgstr[0] ""
51+msgstr[1] ""
52+
3353#: qml/Components/Dialogs.qml:70
3454msgid "Log out"
3555msgstr ""
@@ -74,11 +94,15 @@ msgid ""
7494"to power off?"
7595msgstr ""
7696
77−#: qml/Components/Dialogs.qml:144
97+#: qml/Components/Dialogs.qml:147
7898msgid "Power off"
7999msgstr ""
80100
81−#: qml/Components/Dialogs.qml:162
101+#: qml/Components/Dialogs.qml:157
102+msgid "Restart"
103+msgstr ""
104+
105+#: qml/Components/Dialogs.qml:167
82106msgid "Cancel"
83107msgstr ""
84108
@@ -128,60 +152,44 @@ msgid ""
128152"phone<br><br>Tap on the screen to start"
129153msgstr ""
130154
131−#: qml/Components/Lockscreen.qml:167
132−msgid "Please wait"
133−msgstr ""
134−
135−#: qml/Components/Lockscreen.qml:172
136−msgid "Too many incorrect attempts"
137−msgstr ""
138−
139−#: qml/Components/Lockscreen.qml:206
155+#: qml/Components/Lockscreen.qml:220
140156msgid "Emergency Call"
141157msgstr ""
142158
143−#: qml/Components/Lockscreen.qml:226
159+#: qml/Components/Lockscreen.qml:252
144160msgid "OK"
145161msgstr ""
146162
147−#: qml/Components/PassphraseLockscreen.qml:61
148−#, qt-format
149−msgid "Hello %1"
150−msgstr ""
151−
152−#: qml/Components/PassphraseLockscreen.qml:61
153−msgid "Hello"
154−msgstr ""
155−
156−#: qml/Dash/GenericScopeView.qml:361
163+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
157164msgid "See less"
158165msgstr ""
159166
160−#: qml/Dash/GenericScopeView.qml:361
167+#: qml/Dash/GenericScopeView.qml:434
161168msgid "See all"
162169msgstr ""
163170
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
171+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
172+#: qml/Panel/SearchIndicator.qml:27
165173msgid "Search"
166174msgstr "Leita"
167175
168−#: qml/Dash/PageHeader.qml:270
176+#: qml/Dash/PageHeader.qml:268
169177msgid "Settings"
170178msgstr ""
171179
172−#: qml/Dash/PageHeader.qml:279
180+#: qml/Dash/PageHeader.qml:275
173181msgid "Remove from Favorites"
174182msgstr ""
175183
176−#: qml/Dash/PageHeader.qml:279
184+#: qml/Dash/PageHeader.qml:275
177185msgid "Add to Favorites"
178186msgstr ""
179187
180−#: qml/Dash/Previews/PreviewActionCombo.qml:34
188+#: qml/Dash/Previews/PreviewActionCombo.qml:35
181189msgid "More..."
182190msgstr ""
183191
184−#: qml/Dash/Previews/PreviewActionCombo.qml:34
192+#: qml/Dash/Previews/PreviewActionCombo.qml:35
185193msgid "Less..."
186194msgstr ""
187195
@@ -197,15 +205,23 @@ msgstr ""
197205msgid "Send"
198206msgstr ""
199207
200−#: qml/Dash/ScopesOverview.qml:201
201−msgid "Manage Dash"
208+#: qml/Dash/PullToRefreshScopeStyle.qml:55
209+msgid "Pull to refresh…"
210+msgstr ""
211+
212+#: qml/Dash/PullToRefreshScopeStyle.qml:60
213+msgid "Release to refresh…"
214+msgstr ""
215+
216+#: qml/Dash/ScopesOverview.qml:206
217+msgid "Manage Scopes"
202218msgstr ""
203219
204−#: qml/Dash/ScopesOverview.qml:408
220+#: qml/Dash/ScopesOverview.qml:428
205221msgid "Done"
206222msgstr ""
207223
208−#: qml/Dash/ScopesOverview.qml:434
224+#: qml/Dash/ScopesOverview.qml:454
209225msgid "Store"
210226msgstr ""
211227
@@ -218,10 +234,10 @@ msgid "All"
218234msgstr ""
219235
220236#: qml/Greeter/Greeter.qml:157
221−msgid "Swipe to unlock"
237+msgid "Unlock"
222238msgstr ""
223239
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
240+#: qml/Hud/HudParametrizedActionsPage.qml:139
225241msgid "Confirm"
226242msgstr "Vátta"
227243
@@ -241,18 +257,10 @@ msgstr "Snakka nú..."
241257msgid "Speaking..."
242258msgstr "Snakkar..."
243259
244−#: qml/Notifications/NotificationMenuItemFactory.qml:105
260+#: qml/Notifications/NotificationMenuItemFactory.qml:116
245261msgid "Show password"
246262msgstr ""
247263
248−#: qml/Notifications/NotificationMenuItemFactory.qml:120
249−msgid "Enter SIM PIN"
250−msgstr ""
251−
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
253−msgid "Sorry, incorrect PIN"
254−msgstr ""
255−
256264#: qml/Panel/ActiveCallHint.qml:77
257265msgid "Tap to return to call..."
258266msgstr ""
@@ -261,27 +269,31 @@ msgstr ""
261269msgid "Conference"
262270msgstr ""
263271
264−#: qml/Panel/Indicators/MenuItemFactory.qml:651
272+#: qml/Panel/Indicators/MenuItemFactory.qml:600
273+msgid "Nothing is playing"
274+msgstr ""
275+
276+#: qml/Panel/Indicators/MenuItemFactory.qml:748
265277msgid "In queue…"
266278msgstr ""
267279
268−#: qml/Panel/Indicators/MenuItemFactory.qml:655
280+#: qml/Panel/Indicators/MenuItemFactory.qml:752
269281msgid "Downloading"
270282msgstr ""
271283
272−#: qml/Panel/Indicators/MenuItemFactory.qml:657
284+#: qml/Panel/Indicators/MenuItemFactory.qml:754
273285msgid "Paused, tap to resume"
274286msgstr ""
275287
276−#: qml/Panel/Indicators/MenuItemFactory.qml:659
288+#: qml/Panel/Indicators/MenuItemFactory.qml:756
277289msgid "Canceled"
278290msgstr ""
279291
280−#: qml/Panel/Indicators/MenuItemFactory.qml:661
292+#: qml/Panel/Indicators/MenuItemFactory.qml:758
281293msgid "Finished"
282294msgstr ""
283295
284−#: qml/Panel/Indicators/MenuItemFactory.qml:663
296+#: qml/Panel/Indicators/MenuItemFactory.qml:760
285297msgid "Failed, tap to retry"
286298msgstr ""
287299
@@ -293,51 +305,55 @@ msgstr ""
293305msgid "Roaming"
294306msgstr ""
295307
296−#: qml/Shell.qml:266
297−msgid "Enter your passphrase"
308+#: qml/Shell.qml:346
309+msgid "Enter passphrase"
298310msgstr ""
299311
300−#: qml/Shell.qml:267
312+#: qml/Shell.qml:347
301313msgid "Sorry, incorrect passphrase"
302314msgstr ""
303315
304−#: qml/Shell.qml:282
305−msgid "Enter your passcode"
316+#: qml/Shell.qml:348
317+msgid "Please re-enter"
318+msgstr ""
319+
320+#: qml/Shell.qml:350
321+msgid "Enter passcode"
306322msgstr ""
307323
308−#: qml/Shell.qml:283
324+#: qml/Shell.qml:351
309325msgid "Sorry, incorrect passcode"
310326msgstr ""
311327
312−#: qml/Shell.qml:273
328+#: qml/Shell.qml:354
313329#, qt-format
314−msgid "Enter your %1"
330+msgid "Enter %1"
315331msgstr ""
316332
317−#: qml/Shell.qml:274
333+#: qml/Shell.qml:355
318334#, qt-format
319335msgid "Sorry, incorrect %1"
320336msgstr ""
321337
322−#: qml/Shell.qml:310
338+#: qml/Shell.qml:390
323339msgid "Sorry, incorrect passphrase."
324340msgstr ""
325341
326−#: qml/Shell.qml:311
342+#: qml/Shell.qml:391
327343msgid "Sorry, incorrect passcode."
328344msgstr ""
329345
330−#: qml/Shell.qml:312
346+#: qml/Shell.qml:392
331347msgid "This will be your last attempt."
332348msgstr ""
333349
334−#: qml/Shell.qml:314
350+#: qml/Shell.qml:394
335351msgid ""
336352"If passphrase is entered incorrectly, your phone will conduct a factory "
337353"reset and all personal data will be deleted."
338354msgstr ""
339355
340−#: qml/Shell.qml:315
356+#: qml/Shell.qml:395
341357msgid ""
342358"If passcode is entered incorrectly, your phone will conduct a factory reset "
343359"and all personal data will be deleted."
po/fr.po+119−100
@@ -7,78 +7,108 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-08-27 17:24+0000\n"
12−"Last-Translator: Jean Marc <Unknown>\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
11+"PO-Revision-Date: 2014-10-09 19:00+0000\n"
12+"Last-Translator: Anne <anneonyme017@gmail.com>\n"
1313"Language-Team: French <fr@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=2; plural=n > 1;\n"
18+"X-Launchpad-Export-Date: 2014-10-10 05:23+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
2223msgstr "Mot de passe : "
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr "Épingler le raccourci"
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr "Détacher le raccourci"
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr "Périphérique verrouillé"
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr ""
41+"Vous avez été bloqué suite à un trop grand nombre de tentatives de saisie "
42+"d'une phrase de passe erronée."
43+
44+#: qml/Components/DelayedLockscreen.qml:63
45+msgid "You have been locked out due to too many failed passcode attempts."
46+msgstr ""
47+"Vous avez été bloqué suite à un trop grand nombre de tentatives de saisie "
48+"d'un mot de passe erroné."
49+
50+#: qml/Components/DelayedLockscreen.qml:72
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] "Veuillez patienter %1 minute et réessayer..."
55+msgstr[1] "Veuillez patienter %1 minutes et réessayer..."
56+
3357#: qml/Components/Dialogs.qml:70
3458msgid "Log out"
35−msgstr ""
59+msgstr "Se déconnecter"
3660
3761#: qml/Components/Dialogs.qml:71
3862msgid "Are you sure you want to log out?"
39−msgstr ""
63+msgstr "Êtes-vous sûr de vouloir vous déconnecter ?"
4064
4165#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4266#: qml/Components/Dialogs.qml:122
4367msgid "No"
44−msgstr ""
68+msgstr "Non"
4569
4670#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4771#: qml/Components/Dialogs.qml:129
4872msgid "Yes"
49−msgstr ""
73+msgstr "Oui"
5074
5175#: qml/Components/Dialogs.qml:94
5276msgid "Shut down"
53−msgstr ""
77+msgstr "Éteindre"
5478
5579#: qml/Components/Dialogs.qml:95
5680msgid "Are you sure you want to shut down?"
57−msgstr ""
81+msgstr "Êtes-vous sûr de vouloir éteindre ?"
5882
5983#: qml/Components/Dialogs.qml:119
6084msgid "Reboot"
61−msgstr ""
85+msgstr "Redémarrer"
6286
6387#: qml/Components/Dialogs.qml:120
6488msgid "Are you sure you want to reboot?"
65−msgstr ""
89+msgstr "Êtes-vous sûr de vouloir redémarrer ?"
6690
6791#: qml/Components/Dialogs.qml:144
6892msgid "Power"
69−msgstr ""
93+msgstr "Alimentation"
7094
7195#: qml/Components/Dialogs.qml:145
7296msgid ""
7397"Are you sure you would like\n"
7498"to power off?"
7599msgstr ""
100+"Êtes-vous sûr de vouloir\n"
101+"couper l'alimentation ?"
76102
77−#: qml/Components/Dialogs.qml:144
103+#: qml/Components/Dialogs.qml:147
78104msgid "Power off"
79105msgstr "Éteindre"
80106
81−#: qml/Components/Dialogs.qml:162
107+#: qml/Components/Dialogs.qml:157
108+msgid "Restart"
109+msgstr "Redémarrer"
110+
111+#: qml/Components/Dialogs.qml:167
82112msgid "Cancel"
83113msgstr "Annuler"
84114
@@ -137,60 +167,44 @@ msgstr ""
137167"Vous maîtrisez maintenant les différents gestes et pouvez commencer à "
138168"utiliser le téléphone<br><br>Appuyez sur l'écran pour commencer"
139169
140−#: qml/Components/Lockscreen.qml:167
141−msgid "Please wait"
142−msgstr "Veuillez patienter"
143−
144−#: qml/Components/Lockscreen.qml:172
145−msgid "Too many incorrect attempts"
146−msgstr "Trop de tentatives incorrectes"
147−
148−#: qml/Components/Lockscreen.qml:206
170+#: qml/Components/Lockscreen.qml:220
149171msgid "Emergency Call"
150172msgstr "Appel d'urgence"
151173
152−#: qml/Components/Lockscreen.qml:226
174+#: qml/Components/Lockscreen.qml:252
153175msgid "OK"
154176msgstr "OK"
155177
156−#: qml/Components/PassphraseLockscreen.qml:61
157−#, qt-format
158−msgid "Hello %1"
159−msgstr "Bonjour %1"
160−
161−#: qml/Components/PassphraseLockscreen.qml:61
162−msgid "Hello"
163−msgstr "Bonjour"
164−
165−#: qml/Dash/GenericScopeView.qml:361
178+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
166179msgid "See less"
167180msgstr "Voir moins"
168181
169−#: qml/Dash/GenericScopeView.qml:361
182+#: qml/Dash/GenericScopeView.qml:434
170183msgid "See all"
171184msgstr "Tout voir"
172185
173−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
186+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
187+#: qml/Panel/SearchIndicator.qml:27
174188msgid "Search"
175189msgstr "Rechercher"
176190
177−#: qml/Dash/PageHeader.qml:270
191+#: qml/Dash/PageHeader.qml:268
178192msgid "Settings"
179−msgstr ""
193+msgstr "Paramètres"
180194
181−#: qml/Dash/PageHeader.qml:279
195+#: qml/Dash/PageHeader.qml:275
182196msgid "Remove from Favorites"
183−msgstr ""
197+msgstr "Retirer des favoris"
184198
185−#: qml/Dash/PageHeader.qml:279
199+#: qml/Dash/PageHeader.qml:275
186200msgid "Add to Favorites"
187−msgstr ""
201+msgstr "Ajouter aux favoris"
188202
189−#: qml/Dash/Previews/PreviewActionCombo.qml:34
203+#: qml/Dash/Previews/PreviewActionCombo.qml:35
190204msgid "More..."
191205msgstr "Plus..."
192206
193−#: qml/Dash/Previews/PreviewActionCombo.qml:34
207+#: qml/Dash/Previews/PreviewActionCombo.qml:35
194208msgid "Less..."
195209msgstr "Moins..."
196210
@@ -206,17 +220,25 @@ msgstr "Ajouter un avis"
206220msgid "Send"
207221msgstr "Envoyer"
208222
209−#: qml/Dash/ScopesOverview.qml:201
210−msgid "Manage Dash"
211−msgstr "Gérer le tableau de bord"
223+#: qml/Dash/PullToRefreshScopeStyle.qml:55
224+msgid "Pull to refresh…"
225+msgstr "Tirer pour actualiser..."
226+
227+#: qml/Dash/PullToRefreshScopeStyle.qml:60
228+msgid "Release to refresh…"
229+msgstr "Relâcher pour actualiser..."
212230
213−#: qml/Dash/ScopesOverview.qml:408
231+#: qml/Dash/ScopesOverview.qml:206
232+msgid "Manage Scopes"
233+msgstr "Gérer les moteurs de recherche"
234+
235+#: qml/Dash/ScopesOverview.qml:428
214236msgid "Done"
215237msgstr "Terminé"
216238
217−#: qml/Dash/ScopesOverview.qml:434
239+#: qml/Dash/ScopesOverview.qml:454
218240msgid "Store"
219−msgstr ""
241+msgstr "Logithèque"
220242
221243#: qml/Dash/ScopesOverviewTab.qml:36
222244msgid "Favorites"
@@ -227,10 +249,10 @@ msgid "All"
227249msgstr "Toutes"
228250
229251#: qml/Greeter/Greeter.qml:157
230−msgid "Swipe to unlock"
231−msgstr "Faites glisser pour déverrouiller"
252+msgid "Unlock"
253+msgstr "Déverrouiller"
232254
233−#: qml/Hud/HudParametrizedActionsPage.qml:132
255+#: qml/Hud/HudParametrizedActionsPage.qml:139
234256msgid "Confirm"
235257msgstr "Confirmez"
236258
@@ -250,18 +272,10 @@ msgstr "Parlez maintenant…"
250272msgid "Speaking..."
251273msgstr "En cours d'écoute..."
252274
253−#: qml/Notifications/NotificationMenuItemFactory.qml:105
275+#: qml/Notifications/NotificationMenuItemFactory.qml:116
254276msgid "Show password"
255277msgstr "Afficher le mot de passe"
256278
257−#: qml/Notifications/NotificationMenuItemFactory.qml:120
258−msgid "Enter SIM PIN"
259−msgstr "Entrez le code PIN de la SIM"
260−
261−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
262−msgid "Sorry, incorrect PIN"
263−msgstr "Désolé, code PIN incorrect"
264−
265279#: qml/Panel/ActiveCallHint.qml:77
266280msgid "Tap to return to call..."
267281msgstr "Appuyez pour revenir à l'appel…"
@@ -270,27 +284,31 @@ msgstr "Appuyez pour revenir à l'appel…"
270284msgid "Conference"
271285msgstr "Conférence"
272286
273−#: qml/Panel/Indicators/MenuItemFactory.qml:651
287+#: qml/Panel/Indicators/MenuItemFactory.qml:600
288+msgid "Nothing is playing"
289+msgstr "Rien n'est en cours de lecture"
290+
291+#: qml/Panel/Indicators/MenuItemFactory.qml:748
274292msgid "In queue…"
275293msgstr "Dans la file d'attente..."
276294
277−#: qml/Panel/Indicators/MenuItemFactory.qml:655
295+#: qml/Panel/Indicators/MenuItemFactory.qml:752
278296msgid "Downloading"
279297msgstr "Téléchargement en cours"
280298
281−#: qml/Panel/Indicators/MenuItemFactory.qml:657
299+#: qml/Panel/Indicators/MenuItemFactory.qml:754
282300msgid "Paused, tap to resume"
283301msgstr "En pause, appuyez pour reprendre"
284302
285−#: qml/Panel/Indicators/MenuItemFactory.qml:659
303+#: qml/Panel/Indicators/MenuItemFactory.qml:756
286304msgid "Canceled"
287305msgstr "Annulé"
288306
289−#: qml/Panel/Indicators/MenuItemFactory.qml:661
307+#: qml/Panel/Indicators/MenuItemFactory.qml:758
290308msgid "Finished"
291309msgstr "Terminé"
292310
293−#: qml/Panel/Indicators/MenuItemFactory.qml:663
311+#: qml/Panel/Indicators/MenuItemFactory.qml:760
294312msgid "Failed, tap to retry"
295313msgstr "Échec, appuyez pour réessayer"
296314
@@ -302,45 +320,49 @@ msgstr "Déverrouiller la carte SIM"
302320msgid "Roaming"
303321msgstr "Roaming"
304322
305−#: qml/Shell.qml:266
306−msgid "Enter your passphrase"
307−msgstr ""
323+#: qml/Shell.qml:346
324+msgid "Enter passphrase"
325+msgstr "Saisissez la phrase de passe"
308326
309−#: qml/Shell.qml:267
327+#: qml/Shell.qml:347
310328msgid "Sorry, incorrect passphrase"
311−msgstr ""
329+msgstr "Désolé, phrase secrète incorrecte"
312330
313−#: qml/Shell.qml:282
314−msgid "Enter your passcode"
315−msgstr ""
331+#: qml/Shell.qml:348
332+msgid "Please re-enter"
333+msgstr "Veuillez ressaisir"
334+
335+#: qml/Shell.qml:350
336+msgid "Enter passcode"
337+msgstr "Saisissez le mot de passe"
316338
317−#: qml/Shell.qml:283
339+#: qml/Shell.qml:351
318340msgid "Sorry, incorrect passcode"
319−msgstr ""
341+msgstr "Désolé, code incorrect"
320342
321−#: qml/Shell.qml:273
343+#: qml/Shell.qml:354
322344#, qt-format
323−msgid "Enter your %1"
324−msgstr "Saisissez votre %1"
345+msgid "Enter %1"
346+msgstr "Saisissez %1"
325347
326−#: qml/Shell.qml:274
348+#: qml/Shell.qml:355
327349#, qt-format
328350msgid "Sorry, incorrect %1"
329351msgstr "Désolé, %1 incorrect"
330352
331−#: qml/Shell.qml:310
353+#: qml/Shell.qml:390
332354msgid "Sorry, incorrect passphrase."
333355msgstr "Désolé, phrase secrète incorrecte."
334356
335−#: qml/Shell.qml:311
357+#: qml/Shell.qml:391
336358msgid "Sorry, incorrect passcode."
337359msgstr "Désolé, code incorrect."
338360
339−#: qml/Shell.qml:312
361+#: qml/Shell.qml:392
340362msgid "This will be your last attempt."
341363msgstr "Ceci sera votre dernière tentative."
342364
343−#: qml/Shell.qml:314
365+#: qml/Shell.qml:394
344366msgid ""
345367"If passphrase is entered incorrectly, your phone will conduct a factory "
346368"reset and all personal data will be deleted."
@@ -349,7 +371,7 @@ msgstr ""
349371"effectuera une réinitialisation aux paramètres d'usine et toutes les données "
350372"personnelles seront supprimées."
351373
352−#: qml/Shell.qml:315
374+#: qml/Shell.qml:395
353375msgid ""
354376"If passcode is entered incorrectly, your phone will conduct a factory reset "
355377"and all personal data will be deleted."
@@ -358,11 +380,8 @@ msgstr ""
358380"réinitialisation aux paramètres d'usine et toutes les données personnelles "
359381"seront supprimées."
360382
361−#~ msgid "Restart"
362−#~ msgstr "Redémarrer"
363−
364−#~ msgid "Are you sure you would like to turn power off?"
365−#~ msgstr "Êtes-vous sûr de vouloir éteindre ?"
383+#~ msgid "Sorry, incorrect PIN"
384+#~ msgstr "Désolé, code PIN incorrect"
366385
367−#~ msgid "Enter your PIN"
368−#~ msgstr "Entrez votre code PIN"
386+#~ msgid "Enter SIM PIN"
387+#~ msgstr "Entrez le code PIN de la SIM"
po/gd.po+133−102
@@ -7,79 +7,112 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-08-13 00:21+0000\n"
12−"Last-Translator: Akerbeltz <fios@akerbeltz.org>\n"
13−"Language-Team: Fòram na Gàidhlig http://www.foramnagaidhlig.net\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
11+"PO-Revision-Date: 2014-10-09 18:09+0000\n"
12+"Last-Translator: GunChleoc <Unknown>\n"
13+"Language-Team: Fòram na Gàidhlig\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
18+"(n > 2 && n < 20) ? 2 : 3;\n"
19+"X-Launchpad-Export-Date: 2014-10-10 05:23+0000\n"
20+"X-Generator: Launchpad (build 17196)\n"
1921"Language: gd\n"
2022
21−#: plugins/LightDM/Greeter.cpp:129
23+#: plugins/LightDM/Greeter.cpp:130
2224msgid "Password: "
23−msgstr ""
25+msgstr "Facal-faire: "
2426
25−#: plugins/Unity/Launcher/launcheritem.cpp:43
26−#: plugins/Unity/Launcher/launcheritem.cpp:73
27+#: plugins/Unity/Launcher/launcheritem.cpp:45
28+#: plugins/Unity/Launcher/launcheritem.cpp:91
2729msgid "Pin shortcut"
2830msgstr "Prìnich ath-ghoirid"
2931
30−#: plugins/Unity/Launcher/launcheritem.cpp:73
32+#: plugins/Unity/Launcher/launcheritem.cpp:91
3133msgid "Unpin shortcut"
3234msgstr "Neo-phrìnich an ath-ghoirid"
3335
36+#: qml/Components/DelayedLockscreen.qml:47
37+msgid "Device Locked"
38+msgstr "Tha glas air an uidheam"
39+
40+#: qml/Components/DelayedLockscreen.qml:62
41+msgid "You have been locked out due to too many failed passphrase attempts."
42+msgstr ""
43+"Chaidh do glasadh a-mach às an uidheam on a chuir thu abairt-fhaire chearr a-"
44+"steach cus tursan."
45+
46+#: qml/Components/DelayedLockscreen.qml:63
47+msgid "You have been locked out due to too many failed passcode attempts."
48+msgstr ""
49+"Chaidh do glasadh a-mach às an uidheam on a chuir thu còd-faire cearr a-"
50+"steach cus tursan."
51+
52+#: qml/Components/DelayedLockscreen.qml:72
53+#, qt-format
54+msgid "Please wait %1 minute and then try again…"
55+msgid_plural "Please wait %1 minutes and then try again…"
56+msgstr[0] "Fuirich ort %1 diog 's feuch ris a-rithist an uairsin…"
57+msgstr[1] "Fuirich ort %1 dhiog 's feuch ris a-rithist an uairsin…"
58+msgstr[2] "Fuirich ort %1 diogan 's feuch ris a-rithist an uairsin…"
59+msgstr[3] "Fuirich ort %1 diog 's feuch ris a-rithist an uairsin…"
60+
3461#: qml/Components/Dialogs.qml:70
3562msgid "Log out"
36−msgstr ""
63+msgstr "Clàraich a-mach"
3764
3865#: qml/Components/Dialogs.qml:71
3966msgid "Are you sure you want to log out?"
40−msgstr ""
67+msgstr "A bheil thu cinnteach gu bheil thu airson clàradh a-mach?"
4168
4269#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4370#: qml/Components/Dialogs.qml:122
4471msgid "No"
45−msgstr ""
72+msgstr "Chan eil"
4673
4774#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4875#: qml/Components/Dialogs.qml:129
4976msgid "Yes"
50−msgstr ""
77+msgstr "Tha"
5178
5279#: qml/Components/Dialogs.qml:94
5380msgid "Shut down"
54−msgstr ""
81+msgstr "Dùin sìos"
5582
5683#: qml/Components/Dialogs.qml:95
5784msgid "Are you sure you want to shut down?"
58−msgstr ""
85+msgstr "A bheil thu cinnteach gu bheil thu airson a dhùnadh sìos?"
5986
6087#: qml/Components/Dialogs.qml:119
6188msgid "Reboot"
62−msgstr ""
89+msgstr "Ath-thòisich an siostam"
6390
6491#: qml/Components/Dialogs.qml:120
6592msgid "Are you sure you want to reboot?"
66−msgstr ""
93+msgstr "A bheil thu cinnteach gu bheil thu airson tòiseachadh às ùr?"
6794
6895#: qml/Components/Dialogs.qml:144
6996msgid "Power"
70−msgstr ""
97+msgstr "Cumhachd"
7198
7299#: qml/Components/Dialogs.qml:145
73100msgid ""
74101"Are you sure you would like\n"
75102"to power off?"
76103msgstr ""
104+"A bheil thu cinnteach gu bheil thu\n"
105+"airson a' chumhachd a chur dheth?"
77106
78−#: qml/Components/Dialogs.qml:144
107+#: qml/Components/Dialogs.qml:147
79108msgid "Power off"
80109msgstr "Cuir a' chumhachd dheth"
81110
82−#: qml/Components/Dialogs.qml:162
111+#: qml/Components/Dialogs.qml:157
112+msgid "Restart"
113+msgstr "Ath-thòisich"
114+
115+#: qml/Components/Dialogs.qml:167
83116msgid "Cancel"
84117msgstr "Sguir dheth"
85118
@@ -137,60 +170,44 @@ msgstr ""
137170"Fhuair thu air na gluasadan oire ceart a dhèanamh a-nis agus is urrainn dhut "
138171"am fòn a chleachdadh<br><br>Thoir gnogag air an sgrìn airson tòiseachadh"
139172
140−#: qml/Components/Lockscreen.qml:167
141−msgid "Please wait"
142−msgstr ""
143−
144−#: qml/Components/Lockscreen.qml:172
145−msgid "Too many incorrect attempts"
146−msgstr ""
147−
148−#: qml/Components/Lockscreen.qml:206
173+#: qml/Components/Lockscreen.qml:220
149174msgid "Emergency Call"
150175msgstr "Gairm èiginn"
151176
152−#: qml/Components/Lockscreen.qml:226
177+#: qml/Components/Lockscreen.qml:252
153178msgid "OK"
154179msgstr "Ceart ma-thà"
155180
156−#: qml/Components/PassphraseLockscreen.qml:61
157−#, qt-format
158−msgid "Hello %1"
159−msgstr "Shin thu, %1"
160−
161−#: qml/Components/PassphraseLockscreen.qml:61
162−msgid "Hello"
163−msgstr "Shin thu"
164−
165−#: qml/Dash/GenericScopeView.qml:361
181+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
166182msgid "See less"
167183msgstr "Seall nas lugha"
168184
169−#: qml/Dash/GenericScopeView.qml:361
185+#: qml/Dash/GenericScopeView.qml:434
170186msgid "See all"
171187msgstr "Seall na h-uile"
172188
173−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
189+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
190+#: qml/Panel/SearchIndicator.qml:27
174191msgid "Search"
175192msgstr "Lorg"
176193
177−#: qml/Dash/PageHeader.qml:270
194+#: qml/Dash/PageHeader.qml:268
178195msgid "Settings"
179−msgstr ""
196+msgstr "Roghainnean"
180197
181−#: qml/Dash/PageHeader.qml:279
198+#: qml/Dash/PageHeader.qml:275
182199msgid "Remove from Favorites"
183−msgstr ""
200+msgstr "Thoir air falbh o na h-annsachdan"
184201
185−#: qml/Dash/PageHeader.qml:279
202+#: qml/Dash/PageHeader.qml:275
186203msgid "Add to Favorites"
187−msgstr ""
204+msgstr "Cuir ris na h-annsachdan"
188205
189−#: qml/Dash/Previews/PreviewActionCombo.qml:34
206+#: qml/Dash/Previews/PreviewActionCombo.qml:35
190207msgid "More..."
191208msgstr "Barrachd..."
192209
193−#: qml/Dash/Previews/PreviewActionCombo.qml:34
210+#: qml/Dash/Previews/PreviewActionCombo.qml:35
194211msgid "Less..."
195212msgstr "Nas lugha..."
196213
@@ -206,15 +223,23 @@ msgstr "Cuir lèirmheas ris"
206223msgid "Send"
207224msgstr "Cuir"
208225
209−#: qml/Dash/ScopesOverview.qml:201
210−msgid "Manage Dash"
211−msgstr "Stiùirich an deas-bhòrd"
226+#: qml/Dash/PullToRefreshScopeStyle.qml:55
227+msgid "Pull to refresh…"
228+msgstr "Tarraing airson ath-nuadhachadh…"
212229
213−#: qml/Dash/ScopesOverview.qml:408
230+#: qml/Dash/PullToRefreshScopeStyle.qml:60
231+msgid "Release to refresh…"
232+msgstr "Leig às airson ath-nuadhachadh…"
233+
234+#: qml/Dash/ScopesOverview.qml:206
235+msgid "Manage Scopes"
236+msgstr "Stiùirich na sgòpaichean"
237+
238+#: qml/Dash/ScopesOverview.qml:428
214239msgid "Done"
215240msgstr "Deiseil"
216241
217−#: qml/Dash/ScopesOverview.qml:434
242+#: qml/Dash/ScopesOverview.qml:454
218243msgid "Store"
219244msgstr "Am bùth"
220245
@@ -227,10 +252,10 @@ msgid "All"
227252msgstr "Na h-uile"
228253
229254#: qml/Greeter/Greeter.qml:157
230−msgid "Swipe to unlock"
231−msgstr "Dèan grad-shlaighdeadh gus a' ghlas a thoirt dheth"
255+msgid "Unlock"
256+msgstr "Thoir a' ghlas dheth"
232257
233−#: qml/Hud/HudParametrizedActionsPage.qml:132
258+#: qml/Hud/HudParametrizedActionsPage.qml:139
234259msgid "Confirm"
235260msgstr "Dearbhaich"
236261
@@ -250,18 +275,10 @@ msgstr "Can rud a-nis..."
250275msgid "Speaking..."
251276msgstr "A' bruidhinn..."
252277
253−#: qml/Notifications/NotificationMenuItemFactory.qml:105
278+#: qml/Notifications/NotificationMenuItemFactory.qml:116
254279msgid "Show password"
255280msgstr "Seall am facal-faire"
256281
257−#: qml/Notifications/NotificationMenuItemFactory.qml:120
258−msgid "Enter SIM PIN"
259−msgstr ""
260−
261−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
262−msgid "Sorry, incorrect PIN"
263−msgstr ""
264−
265282#: qml/Panel/ActiveCallHint.qml:77
266283msgid "Tap to return to call..."
267284msgstr "Gnog gus tilleadh dhan ghairm..."
@@ -270,27 +287,31 @@ msgstr "Gnog gus tilleadh dhan ghairm..."
270287msgid "Conference"
271288msgstr "Gairm co-labhairt"
272289
273−#: qml/Panel/Indicators/MenuItemFactory.qml:651
290+#: qml/Panel/Indicators/MenuItemFactory.qml:600
291+msgid "Nothing is playing"
292+msgstr "Chan eil dad 'ga chluich"
293+
294+#: qml/Panel/Indicators/MenuItemFactory.qml:748
274295msgid "In queue…"
275296msgstr "Air a' chiudha…"
276297
277−#: qml/Panel/Indicators/MenuItemFactory.qml:655
298+#: qml/Panel/Indicators/MenuItemFactory.qml:752
278299msgid "Downloading"
279300msgstr "'Ga luchdadh a-nuas"
280301
281−#: qml/Panel/Indicators/MenuItemFactory.qml:657
302+#: qml/Panel/Indicators/MenuItemFactory.qml:754
282303msgid "Paused, tap to resume"
283304msgstr "'Na stad, thoir gnogag gus leantainn air"
284305
285−#: qml/Panel/Indicators/MenuItemFactory.qml:659
306+#: qml/Panel/Indicators/MenuItemFactory.qml:756
286307msgid "Canceled"
287308msgstr "Air a sgur dheth"
288309
289−#: qml/Panel/Indicators/MenuItemFactory.qml:661
310+#: qml/Panel/Indicators/MenuItemFactory.qml:758
290311msgid "Finished"
291312msgstr "Coileanta"
292313
293−#: qml/Panel/Indicators/MenuItemFactory.qml:663
314+#: qml/Panel/Indicators/MenuItemFactory.qml:760
294315msgid "Failed, tap to retry"
295316msgstr "Dh'fhàillig leis, thoir gnogag gus feuchainn a-rithist"
296317
@@ -302,58 +323,68 @@ msgstr "Thoir a' ghlas far an SIM"
302323msgid "Roaming"
303324msgstr "Air fàrsan"
304325
305−#: qml/Shell.qml:266
306−msgid "Enter your passphrase"
307−msgstr ""
326+#: qml/Shell.qml:346
327+msgid "Enter passphrase"
328+msgstr "Cuir abairt-fhaire a-steach"
308329
309−#: qml/Shell.qml:267
330+#: qml/Shell.qml:347
310331msgid "Sorry, incorrect passphrase"
311−msgstr ""
332+msgstr "Duilich ach tha an abairt-fhaire cearr"
312333
313−#: qml/Shell.qml:282
314−msgid "Enter your passcode"
315−msgstr ""
334+#: qml/Shell.qml:348
335+msgid "Please re-enter"
336+msgstr "Cuir a-steach e a-rithist"
337+
338+#: qml/Shell.qml:350
339+msgid "Enter passcode"
340+msgstr "Cuir còd-faire a-steach"
316341
317−#: qml/Shell.qml:283
342+#: qml/Shell.qml:351
318343msgid "Sorry, incorrect passcode"
319−msgstr ""
344+msgstr "Duilich ach tha an còd-faire cearr"
320345
321−#: qml/Shell.qml:273
346+#: qml/Shell.qml:354
322347#, qt-format
323−msgid "Enter your %1"
324−msgstr ""
348+msgid "Enter %1"
349+msgstr "Cuir a-steach %1"
325350
326−#: qml/Shell.qml:274
351+#: qml/Shell.qml:355
327352#, qt-format
328353msgid "Sorry, incorrect %1"
329−msgstr ""
354+msgstr "Duilich ach tha a' %1 cearr"
330355
331−#: qml/Shell.qml:310
356+#: qml/Shell.qml:390
332357msgid "Sorry, incorrect passphrase."
333−msgstr ""
358+msgstr "Duilich ach tha an abairt-fhaire cearr."
334359
335−#: qml/Shell.qml:311
360+#: qml/Shell.qml:391
336361msgid "Sorry, incorrect passcode."
337−msgstr ""
362+msgstr "Duilich ach tha an còd-faire cearr."
338363
339−#: qml/Shell.qml:312
364+#: qml/Shell.qml:392
340365msgid "This will be your last attempt."
341−msgstr ""
366+msgstr "Seo an oidhirp mu dheireadh agad."
342367
343−#: qml/Shell.qml:314
368+#: qml/Shell.qml:394
344369msgid ""
345370"If passphrase is entered incorrectly, your phone will conduct a factory "
346371"reset and all personal data will be deleted."
347372msgstr ""
373+"Ma thèid an abairt-fhaire a chur a-steach mar bu chòir, thèid an fhòn agad a "
374+"ath-shuidheachadh air roghainnean an fhactaraidh agus thèid gach dàta "
375+"pearsanta a sguabadh às."
348376
349−#: qml/Shell.qml:315
377+#: qml/Shell.qml:395
350378msgid ""
351379"If passcode is entered incorrectly, your phone will conduct a factory reset "
352380"and all personal data will be deleted."
353381msgstr ""
382+"Ma thèid an còd-faire a chur a-steach mar bu chòir, thèid an fhòn agad a ath-"
383+"shuidheachadh air roghainnean an fhactaraidh agus thèid gach dàta pearsanta "
384+"a sguabadh às."
354385
355−#~ msgid "Are you sure you would like to turn power off?"
356−#~ msgstr "A bheil thu cinnteach gu bheil thu airson a chur dheth?"
386+#~ msgid "Enter SIM PIN"
387+#~ msgstr "Cuir a-steach PIN an t-SIM"
357388
358−#~ msgid "Restart"
359−#~ msgstr "Ath-thòisich"
389+#~ msgid "Sorry, incorrect PIN"
390+#~ msgstr "Duilich ach tha a' PIN cearr"
po/gl.po+112−99
@@ -7,78 +7,102 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-08-22 15:16+0000\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
11+"PO-Revision-Date: 2014-10-07 10:01+0000\n"
1212"Last-Translator: Marcos Lans <Unknown>\n"
1313"Language-Team: Galician <gl@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-10-09 06:36+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
2223msgstr "Contrasinal : "
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr "Fixar o atallo"
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr "Eliminar o atallo"
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr "Dispositivo bloqueado"
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr "Bloqueouse o dispositivo polos intentos fallidos da frase secreta."
41+
42+#: qml/Components/DelayedLockscreen.qml:63
43+msgid "You have been locked out due to too many failed passcode attempts."
44+msgstr "Bloqueouse o dispositivo polos intentos fallidos da clave."
45+
46+#: qml/Components/DelayedLockscreen.qml:72
47+#, qt-format
48+msgid "Please wait %1 minute and then try again…"
49+msgid_plural "Please wait %1 minutes and then try again…"
50+msgstr[0] "Agarde %1 minuto e ténteo de novo…"
51+msgstr[1] "Agarde %1 minutos e ténteo de novo…"
52+
3353#: qml/Components/Dialogs.qml:70
3454msgid "Log out"
35−msgstr ""
55+msgstr "Saír da sesión"
3656
3757#: qml/Components/Dialogs.qml:71
3858msgid "Are you sure you want to log out?"
39−msgstr ""
59+msgstr "Está seguro de querer pechar a sesión?"
4060
4161#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4262#: qml/Components/Dialogs.qml:122
4363msgid "No"
44−msgstr ""
64+msgstr "Non"
4565
4666#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4767#: qml/Components/Dialogs.qml:129
4868msgid "Yes"
49−msgstr ""
69+msgstr "Si"
5070
5171#: qml/Components/Dialogs.qml:94
5272msgid "Shut down"
53−msgstr ""
73+msgstr "Apagar"
5474
5575#: qml/Components/Dialogs.qml:95
5676msgid "Are you sure you want to shut down?"
57−msgstr ""
77+msgstr "Está seguro de querer apagar?"
5878
5979#: qml/Components/Dialogs.qml:119
6080msgid "Reboot"
61−msgstr ""
81+msgstr "Reiniciar"
6282
6383#: qml/Components/Dialogs.qml:120
6484msgid "Are you sure you want to reboot?"
65−msgstr ""
85+msgstr "Está seguro de querer reiniciar?"
6686
6787#: qml/Components/Dialogs.qml:144
6888msgid "Power"
69−msgstr ""
89+msgstr "Enerxía"
7090
7191#: qml/Components/Dialogs.qml:145
7292msgid ""
7393"Are you sure you would like\n"
7494"to power off?"
75−msgstr ""
95+msgstr "Está seguro de querer apagar?"
7696
77−#: qml/Components/Dialogs.qml:144
97+#: qml/Components/Dialogs.qml:147
7898msgid "Power off"
7999msgstr "Apagar"
80100
81−#: qml/Components/Dialogs.qml:162
101+#: qml/Components/Dialogs.qml:157
102+msgid "Restart"
103+msgstr "Reiniciar"
104+
105+#: qml/Components/Dialogs.qml:167
82106msgid "Cancel"
83107msgstr "Cancelar"
84108
@@ -132,60 +156,44 @@ msgstr ""
132156"Agora xa domina os xestos dos bordos e pode comezar a usar o "
133157"teléfono<br><br>Toque na pantalla para comezar"
134158
135−#: qml/Components/Lockscreen.qml:167
136−msgid "Please wait"
137−msgstr "Agarde"
138−
139−#: qml/Components/Lockscreen.qml:172
140−msgid "Too many incorrect attempts"
141−msgstr "Demasiados erros"
142−
143−#: qml/Components/Lockscreen.qml:206
159+#: qml/Components/Lockscreen.qml:220
144160msgid "Emergency Call"
145161msgstr "Chamada de emerxencia"
146162
147−#: qml/Components/Lockscreen.qml:226
163+#: qml/Components/Lockscreen.qml:252
148164msgid "OK"
149165msgstr "Aceptar"
150166
151−#: qml/Components/PassphraseLockscreen.qml:61
152−#, qt-format
153−msgid "Hello %1"
154−msgstr "Ola %1"
155−
156−#: qml/Components/PassphraseLockscreen.qml:61
157−msgid "Hello"
158−msgstr "Ola"
159−
160−#: qml/Dash/GenericScopeView.qml:361
167+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
161168msgid "See less"
162169msgstr "Ver menos"
163170
164−#: qml/Dash/GenericScopeView.qml:361
171+#: qml/Dash/GenericScopeView.qml:434
165172msgid "See all"
166173msgstr "Ver todo"
167174
168−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
175+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
176+#: qml/Panel/SearchIndicator.qml:27
169177msgid "Search"
170178msgstr "Buscar"
171179
172−#: qml/Dash/PageHeader.qml:270
180+#: qml/Dash/PageHeader.qml:268
173181msgid "Settings"
174−msgstr ""
182+msgstr "Axustes"
175183
176−#: qml/Dash/PageHeader.qml:279
184+#: qml/Dash/PageHeader.qml:275
177185msgid "Remove from Favorites"
178−msgstr ""
186+msgstr "Eliminar dos favoritos"
179187
180−#: qml/Dash/PageHeader.qml:279
188+#: qml/Dash/PageHeader.qml:275
181189msgid "Add to Favorites"
182−msgstr ""
190+msgstr "Engadir aos favoritos"
183191
184−#: qml/Dash/Previews/PreviewActionCombo.qml:34
192+#: qml/Dash/Previews/PreviewActionCombo.qml:35
185193msgid "More..."
186194msgstr "Máis…"
187195
188−#: qml/Dash/Previews/PreviewActionCombo.qml:34
196+#: qml/Dash/Previews/PreviewActionCombo.qml:35
189197msgid "Less..."
190198msgstr "Menos..."
191199
@@ -201,15 +209,23 @@ msgstr "Engadir unha opinión"
201209msgid "Send"
202210msgstr "Enviar"
203211
204−#: qml/Dash/ScopesOverview.qml:201
205−msgid "Manage Dash"
206−msgstr "Xestión do Panel"
212+#: qml/Dash/PullToRefreshScopeStyle.qml:55
213+msgid "Pull to refresh…"
214+msgstr "Tirar para actualizar..."
215+
216+#: qml/Dash/PullToRefreshScopeStyle.qml:60
217+msgid "Release to refresh…"
218+msgstr "Soltar para actualizar"
207219
208−#: qml/Dash/ScopesOverview.qml:408
220+#: qml/Dash/ScopesOverview.qml:206
221+msgid "Manage Scopes"
222+msgstr "Xestionar os Ámbitos"
223+
224+#: qml/Dash/ScopesOverview.qml:428
209225msgid "Done"
210226msgstr "Feito"
211227
212−#: qml/Dash/ScopesOverview.qml:434
228+#: qml/Dash/ScopesOverview.qml:454
213229msgid "Store"
214230msgstr "Tenda"
215231
@@ -222,10 +238,10 @@ msgid "All"
222238msgstr "Todos"
223239
224240#: qml/Greeter/Greeter.qml:157
225−msgid "Swipe to unlock"
226−msgstr "Esvare o dedo para desbloquear"
241+msgid "Unlock"
242+msgstr "Desbloquear"
227243
228−#: qml/Hud/HudParametrizedActionsPage.qml:132
244+#: qml/Hud/HudParametrizedActionsPage.qml:139
229245msgid "Confirm"
230246msgstr "Confirmar"
231247
@@ -245,18 +261,10 @@ msgstr "Fale agora…"
245261msgid "Speaking..."
246262msgstr "Falando…"
247263
248−#: qml/Notifications/NotificationMenuItemFactory.qml:105
264+#: qml/Notifications/NotificationMenuItemFactory.qml:116
249265msgid "Show password"
250266msgstr "Mostrar contrasinal"
251267
252−#: qml/Notifications/NotificationMenuItemFactory.qml:120
253−msgid "Enter SIM PIN"
254−msgstr "Introduza o PIN da SIM"
255−
256−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257−msgid "Sorry, incorrect PIN"
258−msgstr "Sentímolo, o PIN é incorrecto"
259−
260268#: qml/Panel/ActiveCallHint.qml:77
261269msgid "Tap to return to call..."
262270msgstr "Toque para volver a chamar..."
@@ -265,27 +273,31 @@ msgstr "Toque para volver a chamar..."
265273msgid "Conference"
266274msgstr "Conferencia"
267275
268−#: qml/Panel/Indicators/MenuItemFactory.qml:651
276+#: qml/Panel/Indicators/MenuItemFactory.qml:600
277+msgid "Nothing is playing"
278+msgstr "Non hai nada en reprodución"
279+
280+#: qml/Panel/Indicators/MenuItemFactory.qml:748
269281msgid "In queue…"
270282msgstr "Na cola..."
271283
272−#: qml/Panel/Indicators/MenuItemFactory.qml:655
284+#: qml/Panel/Indicators/MenuItemFactory.qml:752
273285msgid "Downloading"
274286msgstr "Descargando"
275287
276−#: qml/Panel/Indicators/MenuItemFactory.qml:657
288+#: qml/Panel/Indicators/MenuItemFactory.qml:754
277289msgid "Paused, tap to resume"
278290msgstr "Detido, toque para continuar"
279291
280−#: qml/Panel/Indicators/MenuItemFactory.qml:659
292+#: qml/Panel/Indicators/MenuItemFactory.qml:756
281293msgid "Canceled"
282294msgstr "Cancelado"
283295
284−#: qml/Panel/Indicators/MenuItemFactory.qml:661
296+#: qml/Panel/Indicators/MenuItemFactory.qml:758
285297msgid "Finished"
286298msgstr "Rematado"
287299
288−#: qml/Panel/Indicators/MenuItemFactory.qml:663
300+#: qml/Panel/Indicators/MenuItemFactory.qml:760
289301msgid "Failed, tap to retry"
290302msgstr "Fallou, toque para reintentar"
291303
@@ -297,45 +309,49 @@ msgstr "Desbloquear a SIM"
297309msgid "Roaming"
298310msgstr "Itinerancia"
299311
300−#: qml/Shell.qml:266
301−msgid "Enter your passphrase"
302−msgstr "Introduza a frase de paso"
312+#: qml/Shell.qml:346
313+msgid "Enter passphrase"
314+msgstr "Introduza a frase secreta"
303315
304−#: qml/Shell.qml:267
316+#: qml/Shell.qml:347
305317msgid "Sorry, incorrect passphrase"
306318msgstr "Sentímolo a frase é incorrecta"
307319
308−#: qml/Shell.qml:282
309−msgid "Enter your passcode"
310−msgstr ""
320+#: qml/Shell.qml:348
321+msgid "Please re-enter"
322+msgstr "Introducir de novo"
323+
324+#: qml/Shell.qml:350
325+msgid "Enter passcode"
326+msgstr "Introduza a clave"
311327
312−#: qml/Shell.qml:283
328+#: qml/Shell.qml:351
313329msgid "Sorry, incorrect passcode"
314−msgstr ""
330+msgstr "Sentímolo, a clave é incorrecta"
315331
316−#: qml/Shell.qml:273
332+#: qml/Shell.qml:354
317333#, qt-format
318−msgid "Enter your %1"
334+msgid "Enter %1"
319335msgstr "Introducir %1"
320336
321−#: qml/Shell.qml:274
337+#: qml/Shell.qml:355
322338#, qt-format
323339msgid "Sorry, incorrect %1"
324−msgstr "Sentímolo, %1 incorrecto"
340+msgstr "Sentímolo, %1 non coincide"
325341
326−#: qml/Shell.qml:310
342+#: qml/Shell.qml:390
327343msgid "Sorry, incorrect passphrase."
328−msgstr "Sentímolo é incorrecta."
344+msgstr "Sentímolo a frase é incorrecta."
329345
330−#: qml/Shell.qml:311
346+#: qml/Shell.qml:391
331347msgid "Sorry, incorrect passcode."
332348msgstr "Sentímolo, a clave é incorrecta."
333349
334−#: qml/Shell.qml:312
350+#: qml/Shell.qml:392
335351msgid "This will be your last attempt."
336352msgstr "Este será o seu último intento."
337353
338−#: qml/Shell.qml:314
354+#: qml/Shell.qml:394
339355msgid ""
340356"If passphrase is entered incorrectly, your phone will conduct a factory "
341357"reset and all personal data will be deleted."
@@ -343,7 +359,7 @@ msgstr ""
343359"Se a frase de paso introducida é incorrecta, o teléfono restabelecerá os "
344360"valores de fábrica e perderá todos os datos persoais."
345361
346−#: qml/Shell.qml:315
362+#: qml/Shell.qml:395
347363msgid ""
348364"If passcode is entered incorrectly, your phone will conduct a factory reset "
349365"and all personal data will be deleted."
@@ -351,11 +367,8 @@ msgstr ""
351367"Se a clave introducida é incorrecta, o teléfono restabelecerá os valores de "
352368"fábrica e perderá todos os datos persoais."
353369
354−#~ msgid "Are you sure you would like to turn power off?"
355−#~ msgstr "Está certo de apagar o aparato?"
356−
357−#~ msgid "Restart"
358−#~ msgstr "Reiniciar"
370+#~ msgid "Sorry, incorrect PIN"
371+#~ msgstr "Sentímolo, o PIN é incorrecto"
359372
360−#~ msgid "Enter your PIN"
361−#~ msgstr "Introduza o PIN"
373+#~ msgid "Enter SIM PIN"
374+#~ msgstr "Introduza o PIN da SIM"
po/he.po+89−79
@@ -7,29 +7,49 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
1111"PO-Revision-Date: 2014-08-23 14:19+0000\n"
1212"Last-Translator: Yaron <sh.yaron@gmail.com>\n"
1313"Language-Team: Hebrew <he@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-10-09 06:36+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
2223msgstr "ססמה: "
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr "הצמדת קיצור דרך"
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr "הפרדת קיצור הדרך"
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr ""
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr ""
41+
42+#: qml/Components/DelayedLockscreen.qml:63
43+msgid "You have been locked out due to too many failed passcode attempts."
44+msgstr ""
45+
46+#: qml/Components/DelayedLockscreen.qml:72
47+#, qt-format
48+msgid "Please wait %1 minute and then try again…"
49+msgid_plural "Please wait %1 minutes and then try again…"
50+msgstr[0] ""
51+msgstr[1] ""
52+
3353#: qml/Components/Dialogs.qml:70
3454msgid "Log out"
3555msgstr ""
@@ -74,11 +94,15 @@ msgid ""
7494"to power off?"
7595msgstr ""
7696
77−#: qml/Components/Dialogs.qml:144
97+#: qml/Components/Dialogs.qml:147
7898msgid "Power off"
7999msgstr "כיבוי"
80100
81−#: qml/Components/Dialogs.qml:162
101+#: qml/Components/Dialogs.qml:157
102+msgid "Restart"
103+msgstr ""
104+
105+#: qml/Components/Dialogs.qml:167
82106msgid "Cancel"
83107msgstr "ביטול"
84108
@@ -130,60 +154,44 @@ msgstr ""
130154"ברגעים אלו סיימת את התמחותך בשימוש במחוות קצה והטלפון פתוח לשימושך<br><br>נא "
131155"לגעת במסך כדי להתחיל"
132156
133−#: qml/Components/Lockscreen.qml:167
134−msgid "Please wait"
135−msgstr "נא להמתין"
136−
137−#: qml/Components/Lockscreen.qml:172
138−msgid "Too many incorrect attempts"
139−msgstr "יותר מדי ניסיונות שגויים"
140−
141−#: qml/Components/Lockscreen.qml:206
157+#: qml/Components/Lockscreen.qml:220
142158msgid "Emergency Call"
143159msgstr "שיחת חירום"
144160
145−#: qml/Components/Lockscreen.qml:226
161+#: qml/Components/Lockscreen.qml:252
146162msgid "OK"
147163msgstr "אישור"
148164
149−#: qml/Components/PassphraseLockscreen.qml:61
150−#, qt-format
151−msgid "Hello %1"
152−msgstr "שלום %1"
153−
154−#: qml/Components/PassphraseLockscreen.qml:61
155−msgid "Hello"
156−msgstr "שלום"
157−
158−#: qml/Dash/GenericScopeView.qml:361
165+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
159166msgid "See less"
160167msgstr "לראות פחות"
161168
162−#: qml/Dash/GenericScopeView.qml:361
169+#: qml/Dash/GenericScopeView.qml:434
163170msgid "See all"
164171msgstr "להציג הכול"
165172
166−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
173+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
174+#: qml/Panel/SearchIndicator.qml:27
167175msgid "Search"
168176msgstr "חיפוש"
169177
170−#: qml/Dash/PageHeader.qml:270
178+#: qml/Dash/PageHeader.qml:268
171179msgid "Settings"
172180msgstr ""
173181
174−#: qml/Dash/PageHeader.qml:279
182+#: qml/Dash/PageHeader.qml:275
175183msgid "Remove from Favorites"
176184msgstr ""
177185
178−#: qml/Dash/PageHeader.qml:279
186+#: qml/Dash/PageHeader.qml:275
179187msgid "Add to Favorites"
180188msgstr ""
181189
182−#: qml/Dash/Previews/PreviewActionCombo.qml:34
190+#: qml/Dash/Previews/PreviewActionCombo.qml:35
183191msgid "More..."
184192msgstr "עוד…"
185193
186−#: qml/Dash/Previews/PreviewActionCombo.qml:34
194+#: qml/Dash/Previews/PreviewActionCombo.qml:35
187195msgid "Less..."
188196msgstr "פחות…"
189197
@@ -199,15 +207,23 @@ msgstr "הוספת סקירה"
199207msgid "Send"
200208msgstr "שליחה"
201209
202−#: qml/Dash/ScopesOverview.qml:201
203−msgid "Manage Dash"
210+#: qml/Dash/PullToRefreshScopeStyle.qml:55
211+msgid "Pull to refresh…"
204212msgstr ""
205213
206−#: qml/Dash/ScopesOverview.qml:408
214+#: qml/Dash/PullToRefreshScopeStyle.qml:60
215+msgid "Release to refresh…"
216+msgstr ""
217+
218+#: qml/Dash/ScopesOverview.qml:206
219+msgid "Manage Scopes"
220+msgstr ""
221+
222+#: qml/Dash/ScopesOverview.qml:428
207223msgid "Done"
208224msgstr "סיימתי"
209225
210−#: qml/Dash/ScopesOverview.qml:434
226+#: qml/Dash/ScopesOverview.qml:454
211227msgid "Store"
212228msgstr "אחסון"
213229
@@ -220,10 +236,10 @@ msgid "All"
220236msgstr "הכול"
221237
222238#: qml/Greeter/Greeter.qml:157
223−msgid "Swipe to unlock"
224−msgstr "יש להחליק לפתיחה"
239+msgid "Unlock"
240+msgstr ""
225241
226−#: qml/Hud/HudParametrizedActionsPage.qml:132
242+#: qml/Hud/HudParametrizedActionsPage.qml:139
227243msgid "Confirm"
228244msgstr "אישור"
229245
@@ -243,18 +259,10 @@ msgstr "יש לדבר כעת..."
243259msgid "Speaking..."
244260msgstr "הדיבור מושמע…"
245261
246−#: qml/Notifications/NotificationMenuItemFactory.qml:105
262+#: qml/Notifications/NotificationMenuItemFactory.qml:116
247263msgid "Show password"
248264msgstr "הצגת הססמה"
249265
250−#: qml/Notifications/NotificationMenuItemFactory.qml:120
251−msgid "Enter SIM PIN"
252−msgstr ""
253−
254−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
255−msgid "Sorry, incorrect PIN"
256−msgstr ""
257−
258266#: qml/Panel/ActiveCallHint.qml:77
259267msgid "Tap to return to call..."
260268msgstr "יש לגעת כדי להחזיר שיחה…"
@@ -263,27 +271,31 @@ msgstr "יש לגעת כדי להחזיר שיחה…"
263271msgid "Conference"
264272msgstr "ועידה"
265273
266−#: qml/Panel/Indicators/MenuItemFactory.qml:651
274+#: qml/Panel/Indicators/MenuItemFactory.qml:600
275+msgid "Nothing is playing"
276+msgstr ""
277+
278+#: qml/Panel/Indicators/MenuItemFactory.qml:748
267279msgid "In queue…"
268280msgstr "בתור…"
269281
270−#: qml/Panel/Indicators/MenuItemFactory.qml:655
282+#: qml/Panel/Indicators/MenuItemFactory.qml:752
271283msgid "Downloading"
272284msgstr "בהורדה"
273285
274−#: qml/Panel/Indicators/MenuItemFactory.qml:657
286+#: qml/Panel/Indicators/MenuItemFactory.qml:754
275287msgid "Paused, tap to resume"
276288msgstr "מושהה, יש לגעת כדי להמשיך"
277289
278−#: qml/Panel/Indicators/MenuItemFactory.qml:659
290+#: qml/Panel/Indicators/MenuItemFactory.qml:756
279291msgid "Canceled"
280292msgstr "בוטל"
281293
282−#: qml/Panel/Indicators/MenuItemFactory.qml:661
294+#: qml/Panel/Indicators/MenuItemFactory.qml:758
283295msgid "Finished"
284296msgstr "הושלם"
285297
286−#: qml/Panel/Indicators/MenuItemFactory.qml:663
298+#: qml/Panel/Indicators/MenuItemFactory.qml:760
287299msgid "Failed, tap to retry"
288300msgstr "נכשל, יש לגעת כדי לנסות שוב"
289301
@@ -295,58 +307,56 @@ msgstr ""
295307msgid "Roaming"
296308msgstr "נדידה"
297309
298−#: qml/Shell.qml:266
299−msgid "Enter your passphrase"
300−msgstr "נא להזין את מילת הצופן שלך"
310+#: qml/Shell.qml:346
311+msgid "Enter passphrase"
312+msgstr ""
301313
302−#: qml/Shell.qml:267
314+#: qml/Shell.qml:347
303315msgid "Sorry, incorrect passphrase"
304316msgstr "מילת הצופן שגויה, עמך הסליחה."
305317
306−#: qml/Shell.qml:282
307−msgid "Enter your passcode"
318+#: qml/Shell.qml:348
319+msgid "Please re-enter"
308320msgstr ""
309321
310−#: qml/Shell.qml:283
322+#: qml/Shell.qml:350
323+msgid "Enter passcode"
324+msgstr ""
325+
326+#: qml/Shell.qml:351
311327msgid "Sorry, incorrect passcode"
312328msgstr ""
313329
314−#: qml/Shell.qml:273
330+#: qml/Shell.qml:354
315331#, qt-format
316−msgid "Enter your %1"
332+msgid "Enter %1"
317333msgstr ""
318334
319−#: qml/Shell.qml:274
335+#: qml/Shell.qml:355
320336#, qt-format
321337msgid "Sorry, incorrect %1"
322338msgstr ""
323339
324−#: qml/Shell.qml:310
340+#: qml/Shell.qml:390
325341msgid "Sorry, incorrect passphrase."
326342msgstr "מילת הצופן שגויה, עמך הסליחה."
327343
328−#: qml/Shell.qml:311
344+#: qml/Shell.qml:391
329345msgid "Sorry, incorrect passcode."
330346msgstr "הצופן שגוי, עם הסליחה."
331347
332−#: qml/Shell.qml:312
348+#: qml/Shell.qml:392
333349msgid "This will be your last attempt."
334350msgstr "זה יהיה הניסיון האחרון שלך."
335351
336−#: qml/Shell.qml:314
352+#: qml/Shell.qml:394
337353msgid ""
338354"If passphrase is entered incorrectly, your phone will conduct a factory "
339355"reset and all personal data will be deleted."
340356msgstr ""
341357
342−#: qml/Shell.qml:315
358+#: qml/Shell.qml:395
343359msgid ""
344360"If passcode is entered incorrectly, your phone will conduct a factory reset "
345361"and all personal data will be deleted."
346362msgstr ""
347−
348−#~ msgid "Restart"
349−#~ msgstr "הפעלה מחדש"
350−
351−#~ msgid "Are you sure you would like to turn power off?"
352−#~ msgstr "האם ברצונך לכבות את המכשיר?"
po/hi.po+87−71
@@ -7,29 +7,49 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
1111"PO-Revision-Date: 2014-01-15 01:49+0000\n"
1212"Last-Translator: Siddhanathan S. <Unknown>\n"
1313"Language-Team: Hindi <hi@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-10-09 06:36+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
2223msgstr ""
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr ""
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr ""
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr ""
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr ""
41+
42+#: qml/Components/DelayedLockscreen.qml:63
43+msgid "You have been locked out due to too many failed passcode attempts."
44+msgstr ""
45+
46+#: qml/Components/DelayedLockscreen.qml:72
47+#, qt-format
48+msgid "Please wait %1 minute and then try again…"
49+msgid_plural "Please wait %1 minutes and then try again…"
50+msgstr[0] ""
51+msgstr[1] ""
52+
3353#: qml/Components/Dialogs.qml:70
3454msgid "Log out"
3555msgstr ""
@@ -74,11 +94,15 @@ msgid ""
7494"to power off?"
7595msgstr ""
7696
77−#: qml/Components/Dialogs.qml:144
97+#: qml/Components/Dialogs.qml:147
7898msgid "Power off"
7999msgstr ""
80100
81−#: qml/Components/Dialogs.qml:162
101+#: qml/Components/Dialogs.qml:157
102+msgid "Restart"
103+msgstr ""
104+
105+#: qml/Components/Dialogs.qml:167
82106msgid "Cancel"
83107msgstr ""
84108
@@ -128,60 +152,44 @@ msgid ""
128152"phone<br><br>Tap on the screen to start"
129153msgstr ""
130154
131−#: qml/Components/Lockscreen.qml:167
132−msgid "Please wait"
133−msgstr ""
134−
135−#: qml/Components/Lockscreen.qml:172
136−msgid "Too many incorrect attempts"
137−msgstr ""
138−
139−#: qml/Components/Lockscreen.qml:206
155+#: qml/Components/Lockscreen.qml:220
140156msgid "Emergency Call"
141157msgstr "आपातकालीन कॉल"
142158
143−#: qml/Components/Lockscreen.qml:226
159+#: qml/Components/Lockscreen.qml:252
144160msgid "OK"
145161msgstr ""
146162
147−#: qml/Components/PassphraseLockscreen.qml:61
148−#, qt-format
149−msgid "Hello %1"
150−msgstr ""
151−
152−#: qml/Components/PassphraseLockscreen.qml:61
153−msgid "Hello"
154−msgstr "नमस्ते"
155−
156−#: qml/Dash/GenericScopeView.qml:361
163+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
157164msgid "See less"
158165msgstr ""
159166
160−#: qml/Dash/GenericScopeView.qml:361
167+#: qml/Dash/GenericScopeView.qml:434
161168msgid "See all"
162169msgstr ""
163170
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
171+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
172+#: qml/Panel/SearchIndicator.qml:27
165173msgid "Search"
166174msgstr "खोजें"
167175
168−#: qml/Dash/PageHeader.qml:270
176+#: qml/Dash/PageHeader.qml:268
169177msgid "Settings"
170178msgstr ""
171179
172−#: qml/Dash/PageHeader.qml:279
180+#: qml/Dash/PageHeader.qml:275
173181msgid "Remove from Favorites"
174182msgstr ""
175183
176−#: qml/Dash/PageHeader.qml:279
184+#: qml/Dash/PageHeader.qml:275
177185msgid "Add to Favorites"
178186msgstr ""
179187
180−#: qml/Dash/Previews/PreviewActionCombo.qml:34
188+#: qml/Dash/Previews/PreviewActionCombo.qml:35
181189msgid "More..."
182190msgstr ""
183191
184−#: qml/Dash/Previews/PreviewActionCombo.qml:34
192+#: qml/Dash/Previews/PreviewActionCombo.qml:35
185193msgid "Less..."
186194msgstr ""
187195
@@ -197,15 +205,23 @@ msgstr "समीक्षा दे"
197205msgid "Send"
198206msgstr "भेजें"
199207
200−#: qml/Dash/ScopesOverview.qml:201
201−msgid "Manage Dash"
208+#: qml/Dash/PullToRefreshScopeStyle.qml:55
209+msgid "Pull to refresh…"
210+msgstr ""
211+
212+#: qml/Dash/PullToRefreshScopeStyle.qml:60
213+msgid "Release to refresh…"
214+msgstr ""
215+
216+#: qml/Dash/ScopesOverview.qml:206
217+msgid "Manage Scopes"
202218msgstr ""
203219
204−#: qml/Dash/ScopesOverview.qml:408
220+#: qml/Dash/ScopesOverview.qml:428
205221msgid "Done"
206222msgstr ""
207223
208−#: qml/Dash/ScopesOverview.qml:434
224+#: qml/Dash/ScopesOverview.qml:454
209225msgid "Store"
210226msgstr ""
211227
@@ -218,10 +234,10 @@ msgid "All"
218234msgstr ""
219235
220236#: qml/Greeter/Greeter.qml:157
221−msgid "Swipe to unlock"
237+msgid "Unlock"
222238msgstr ""
223239
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
240+#: qml/Hud/HudParametrizedActionsPage.qml:139
225241msgid "Confirm"
226242msgstr ""
227243
@@ -241,18 +257,10 @@ msgstr "अब बात करें"
241257msgid "Speaking..."
242258msgstr "अब बोल रहे हैं"
243259
244−#: qml/Notifications/NotificationMenuItemFactory.qml:105
260+#: qml/Notifications/NotificationMenuItemFactory.qml:116
245261msgid "Show password"
246262msgstr ""
247263
248−#: qml/Notifications/NotificationMenuItemFactory.qml:120
249−msgid "Enter SIM PIN"
250−msgstr ""
251−
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
253−msgid "Sorry, incorrect PIN"
254−msgstr ""
255−
256264#: qml/Panel/ActiveCallHint.qml:77
257265msgid "Tap to return to call..."
258266msgstr ""
@@ -261,27 +269,31 @@ msgstr ""
261269msgid "Conference"
262270msgstr ""
263271
264−#: qml/Panel/Indicators/MenuItemFactory.qml:651
272+#: qml/Panel/Indicators/MenuItemFactory.qml:600
273+msgid "Nothing is playing"
274+msgstr ""
275+
276+#: qml/Panel/Indicators/MenuItemFactory.qml:748
265277msgid "In queue…"
266278msgstr ""
267279
268−#: qml/Panel/Indicators/MenuItemFactory.qml:655
280+#: qml/Panel/Indicators/MenuItemFactory.qml:752
269281msgid "Downloading"
270282msgstr ""
271283
272−#: qml/Panel/Indicators/MenuItemFactory.qml:657
284+#: qml/Panel/Indicators/MenuItemFactory.qml:754
273285msgid "Paused, tap to resume"
274286msgstr ""
275287
276−#: qml/Panel/Indicators/MenuItemFactory.qml:659
288+#: qml/Panel/Indicators/MenuItemFactory.qml:756
277289msgid "Canceled"
278290msgstr ""
279291
280−#: qml/Panel/Indicators/MenuItemFactory.qml:661
292+#: qml/Panel/Indicators/MenuItemFactory.qml:758
281293msgid "Finished"
282294msgstr ""
283295
284−#: qml/Panel/Indicators/MenuItemFactory.qml:663
296+#: qml/Panel/Indicators/MenuItemFactory.qml:760
285297msgid "Failed, tap to retry"
286298msgstr ""
287299
@@ -293,51 +305,55 @@ msgstr ""
293305msgid "Roaming"
294306msgstr ""
295307
296−#: qml/Shell.qml:266
297−msgid "Enter your passphrase"
308+#: qml/Shell.qml:346
309+msgid "Enter passphrase"
298310msgstr ""
299311
300−#: qml/Shell.qml:267
312+#: qml/Shell.qml:347
301313msgid "Sorry, incorrect passphrase"
302314msgstr ""
303315
304−#: qml/Shell.qml:282
305−msgid "Enter your passcode"
316+#: qml/Shell.qml:348
317+msgid "Please re-enter"
318+msgstr ""
319+
320+#: qml/Shell.qml:350
321+msgid "Enter passcode"
306322msgstr ""
307323
308−#: qml/Shell.qml:283
324+#: qml/Shell.qml:351
309325msgid "Sorry, incorrect passcode"
310326msgstr ""
311327
312−#: qml/Shell.qml:273
328+#: qml/Shell.qml:354
313329#, qt-format
314−msgid "Enter your %1"
330+msgid "Enter %1"
315331msgstr ""
316332
317−#: qml/Shell.qml:274
333+#: qml/Shell.qml:355
318334#, qt-format
319335msgid "Sorry, incorrect %1"
320336msgstr ""
321337
322−#: qml/Shell.qml:310
338+#: qml/Shell.qml:390
323339msgid "Sorry, incorrect passphrase."
324340msgstr ""
325341
326−#: qml/Shell.qml:311
342+#: qml/Shell.qml:391
327343msgid "Sorry, incorrect passcode."
328344msgstr ""
329345
330−#: qml/Shell.qml:312
346+#: qml/Shell.qml:392
331347msgid "This will be your last attempt."
332348msgstr ""
333349
334−#: qml/Shell.qml:314
350+#: qml/Shell.qml:394
335351msgid ""
336352"If passphrase is entered incorrectly, your phone will conduct a factory "
337353"reset and all personal data will be deleted."
338354msgstr ""
339355
340−#: qml/Shell.qml:315
356+#: qml/Shell.qml:395
341357msgid ""
342358"If passcode is entered incorrectly, your phone will conduct a factory reset "
343359"and all personal data will be deleted."
po/hr.po+88−71
@@ -7,29 +7,50 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
1111"PO-Revision-Date: 2013-06-27 04:14+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Croatian <hr@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19+"X-Launchpad-Export-Date: 2014-10-09 06:36+0000\n"
20+"X-Generator: Launchpad (build 17196)\n"
1921
20−#: plugins/LightDM/Greeter.cpp:129
22+#: plugins/LightDM/Greeter.cpp:130
2123msgid "Password: "
2224msgstr ""
2325
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
26+#: plugins/Unity/Launcher/launcheritem.cpp:45
27+#: plugins/Unity/Launcher/launcheritem.cpp:91
2628msgid "Pin shortcut"
2729msgstr ""
2830
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
31+#: plugins/Unity/Launcher/launcheritem.cpp:91
3032msgid "Unpin shortcut"
3133msgstr ""
3234
35+#: qml/Components/DelayedLockscreen.qml:47
36+msgid "Device Locked"
37+msgstr ""
38+
39+#: qml/Components/DelayedLockscreen.qml:62
40+msgid "You have been locked out due to too many failed passphrase attempts."
41+msgstr ""
42+
43+#: qml/Components/DelayedLockscreen.qml:63
44+msgid "You have been locked out due to too many failed passcode attempts."
45+msgstr ""
46+
47+#: qml/Components/DelayedLockscreen.qml:72
48+#, qt-format
49+msgid "Please wait %1 minute and then try again…"
50+msgid_plural "Please wait %1 minutes and then try again…"
51+msgstr[0] ""
52+msgstr[1] ""
53+
3354#: qml/Components/Dialogs.qml:70
3455msgid "Log out"
3556msgstr ""
@@ -74,11 +95,15 @@ msgid ""
7495"to power off?"
7596msgstr ""
7697
77−#: qml/Components/Dialogs.qml:144
98+#: qml/Components/Dialogs.qml:147
7899msgid "Power off"
79100msgstr ""
80101
81−#: qml/Components/Dialogs.qml:162
102+#: qml/Components/Dialogs.qml:157
103+msgid "Restart"
104+msgstr ""
105+
106+#: qml/Components/Dialogs.qml:167
82107msgid "Cancel"
83108msgstr ""
84109
@@ -128,60 +153,44 @@ msgid ""
128153"phone<br><br>Tap on the screen to start"
129154msgstr ""
130155
131−#: qml/Components/Lockscreen.qml:167
132−msgid "Please wait"
133−msgstr ""
134−
135−#: qml/Components/Lockscreen.qml:172
136−msgid "Too many incorrect attempts"
137−msgstr ""
138−
139−#: qml/Components/Lockscreen.qml:206
156+#: qml/Components/Lockscreen.qml:220
140157msgid "Emergency Call"
141158msgstr ""
142159
143−#: qml/Components/Lockscreen.qml:226
160+#: qml/Components/Lockscreen.qml:252
144161msgid "OK"
145162msgstr ""
146163
147−#: qml/Components/PassphraseLockscreen.qml:61
148−#, qt-format
149−msgid "Hello %1"
150−msgstr ""
151−
152−#: qml/Components/PassphraseLockscreen.qml:61
153−msgid "Hello"
154−msgstr ""
155−
156−#: qml/Dash/GenericScopeView.qml:361
164+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
157165msgid "See less"
158166msgstr ""
159167
160−#: qml/Dash/GenericScopeView.qml:361
168+#: qml/Dash/GenericScopeView.qml:434
161169msgid "See all"
162170msgstr ""
163171
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
172+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
173+#: qml/Panel/SearchIndicator.qml:27
165174msgid "Search"
166175msgstr "Pretraživanje"
167176
168−#: qml/Dash/PageHeader.qml:270
177+#: qml/Dash/PageHeader.qml:268
169178msgid "Settings"
170179msgstr ""
171180
172−#: qml/Dash/PageHeader.qml:279
181+#: qml/Dash/PageHeader.qml:275
173182msgid "Remove from Favorites"
174183msgstr ""
175184
176−#: qml/Dash/PageHeader.qml:279
185+#: qml/Dash/PageHeader.qml:275
177186msgid "Add to Favorites"
178187msgstr ""
179188
180−#: qml/Dash/Previews/PreviewActionCombo.qml:34
189+#: qml/Dash/Previews/PreviewActionCombo.qml:35
181190msgid "More..."
182191msgstr ""
183192
184−#: qml/Dash/Previews/PreviewActionCombo.qml:34
193+#: qml/Dash/Previews/PreviewActionCombo.qml:35
185194msgid "Less..."
186195msgstr ""
187196
@@ -197,15 +206,23 @@ msgstr ""
197206msgid "Send"
198207msgstr ""
199208
200−#: qml/Dash/ScopesOverview.qml:201
201−msgid "Manage Dash"
209+#: qml/Dash/PullToRefreshScopeStyle.qml:55
210+msgid "Pull to refresh…"
211+msgstr ""
212+
213+#: qml/Dash/PullToRefreshScopeStyle.qml:60
214+msgid "Release to refresh…"
215+msgstr ""
216+
217+#: qml/Dash/ScopesOverview.qml:206
218+msgid "Manage Scopes"
202219msgstr ""
203220
204−#: qml/Dash/ScopesOverview.qml:408
221+#: qml/Dash/ScopesOverview.qml:428
205222msgid "Done"
206223msgstr ""
207224
208−#: qml/Dash/ScopesOverview.qml:434
225+#: qml/Dash/ScopesOverview.qml:454
209226msgid "Store"
210227msgstr ""
211228
@@ -218,10 +235,10 @@ msgid "All"
218235msgstr ""
219236
220237#: qml/Greeter/Greeter.qml:157
221−msgid "Swipe to unlock"
238+msgid "Unlock"
222239msgstr ""
223240
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
241+#: qml/Hud/HudParametrizedActionsPage.qml:139
225242msgid "Confirm"
226243msgstr "Potvrdi"
227244
@@ -241,18 +258,10 @@ msgstr "Recite..."
241258msgid "Speaking..."
242259msgstr "Govor..."
243260
244−#: qml/Notifications/NotificationMenuItemFactory.qml:105
261+#: qml/Notifications/NotificationMenuItemFactory.qml:116
245262msgid "Show password"
246263msgstr ""
247264
248−#: qml/Notifications/NotificationMenuItemFactory.qml:120
249−msgid "Enter SIM PIN"
250−msgstr ""
251−
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
253−msgid "Sorry, incorrect PIN"
254−msgstr ""
255−
256265#: qml/Panel/ActiveCallHint.qml:77
257266msgid "Tap to return to call..."
258267msgstr ""
@@ -261,27 +270,31 @@ msgstr ""
261270msgid "Conference"
262271msgstr ""
263272
264−#: qml/Panel/Indicators/MenuItemFactory.qml:651
273+#: qml/Panel/Indicators/MenuItemFactory.qml:600
274+msgid "Nothing is playing"
275+msgstr ""
276+
277+#: qml/Panel/Indicators/MenuItemFactory.qml:748
265278msgid "In queue…"
266279msgstr ""
267280
268−#: qml/Panel/Indicators/MenuItemFactory.qml:655
281+#: qml/Panel/Indicators/MenuItemFactory.qml:752
269282msgid "Downloading"
270283msgstr ""
271284
272−#: qml/Panel/Indicators/MenuItemFactory.qml:657
285+#: qml/Panel/Indicators/MenuItemFactory.qml:754
273286msgid "Paused, tap to resume"
274287msgstr ""
275288
276−#: qml/Panel/Indicators/MenuItemFactory.qml:659
289+#: qml/Panel/Indicators/MenuItemFactory.qml:756
277290msgid "Canceled"
278291msgstr ""
279292
280−#: qml/Panel/Indicators/MenuItemFactory.qml:661
293+#: qml/Panel/Indicators/MenuItemFactory.qml:758
281294msgid "Finished"
282295msgstr ""
283296
284−#: qml/Panel/Indicators/MenuItemFactory.qml:663
297+#: qml/Panel/Indicators/MenuItemFactory.qml:760
285298msgid "Failed, tap to retry"
286299msgstr ""
287300
@@ -293,51 +306,55 @@ msgstr ""
293306msgid "Roaming"
294307msgstr ""
295308
296−#: qml/Shell.qml:266
297−msgid "Enter your passphrase"
309+#: qml/Shell.qml:346
310+msgid "Enter passphrase"
298311msgstr ""
299312
300−#: qml/Shell.qml:267
313+#: qml/Shell.qml:347
301314msgid "Sorry, incorrect passphrase"
302315msgstr ""
303316
304−#: qml/Shell.qml:282
305−msgid "Enter your passcode"
317+#: qml/Shell.qml:348
318+msgid "Please re-enter"
319+msgstr ""
320+
321+#: qml/Shell.qml:350
322+msgid "Enter passcode"
306323msgstr ""
307324
308−#: qml/Shell.qml:283
325+#: qml/Shell.qml:351
309326msgid "Sorry, incorrect passcode"
310327msgstr ""
311328
312−#: qml/Shell.qml:273
329+#: qml/Shell.qml:354
313330#, qt-format
314−msgid "Enter your %1"
331+msgid "Enter %1"
315332msgstr ""
316333
317−#: qml/Shell.qml:274
334+#: qml/Shell.qml:355
318335#, qt-format
319336msgid "Sorry, incorrect %1"
320337msgstr ""
321338
322−#: qml/Shell.qml:310
339+#: qml/Shell.qml:390
323340msgid "Sorry, incorrect passphrase."
324341msgstr ""
325342
326−#: qml/Shell.qml:311
343+#: qml/Shell.qml:391
327344msgid "Sorry, incorrect passcode."
328345msgstr ""
329346
330−#: qml/Shell.qml:312
347+#: qml/Shell.qml:392
331348msgid "This will be your last attempt."
332349msgstr ""
333350
334−#: qml/Shell.qml:314
351+#: qml/Shell.qml:394
335352msgid ""
336353"If passphrase is entered incorrectly, your phone will conduct a factory "
337354"reset and all personal data will be deleted."
338355msgstr ""
339356
340−#: qml/Shell.qml:315
357+#: qml/Shell.qml:395
341358msgid ""
342359"If passcode is entered incorrectly, your phone will conduct a factory reset "
343360"and all personal data will be deleted."
po/hu.po+108−99
@@ -7,78 +7,104 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-08-27 15:34+0000\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
11+"PO-Revision-Date: 2014-10-11 10:50+0000\n"
1212"Last-Translator: Richard Somlói <ricsipontaz@gmail.com>\n"
1313"Language-Team: Hungarian <hu@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-10-12 06:55+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
2223msgstr "Jelszó: "
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr "Indító rögzítése"
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr "Indító feloldása"
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr "Eszköz lezárva"
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr "A túl sok hibás jelmondat próbálkozás miatt le lett zárva az eszköz."
41+
42+#: qml/Components/DelayedLockscreen.qml:63
43+msgid "You have been locked out due to too many failed passcode attempts."
44+msgstr "A túl sok hibás jelkód próbálkozás miatt le lett zárva az eszköz."
45+
46+#: qml/Components/DelayedLockscreen.qml:72
47+#, qt-format
48+msgid "Please wait %1 minute and then try again…"
49+msgid_plural "Please wait %1 minutes and then try again…"
50+msgstr[0] "Kérjük várjon %1 percet és próbálja újra…"
51+msgstr[1] "Kérjük várjon %1 percet és próbálja újra…"
52+
3353#: qml/Components/Dialogs.qml:70
3454msgid "Log out"
35−msgstr ""
55+msgstr "Kijelentkezés"
3656
3757#: qml/Components/Dialogs.qml:71
3858msgid "Are you sure you want to log out?"
39−msgstr ""
59+msgstr "Biztos benne, hogy kijelentkezik?"
4060
4161#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4262#: qml/Components/Dialogs.qml:122
4363msgid "No"
44−msgstr ""
64+msgstr "Nem"
4565
4666#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4767#: qml/Components/Dialogs.qml:129
4868msgid "Yes"
49−msgstr ""
69+msgstr "Igen"
5070
5171#: qml/Components/Dialogs.qml:94
5272msgid "Shut down"
53−msgstr ""
73+msgstr "Leállítás"
5474
5575#: qml/Components/Dialogs.qml:95
5676msgid "Are you sure you want to shut down?"
57−msgstr ""
77+msgstr "Biztosan le szeretné állítani?"
5878
5979#: qml/Components/Dialogs.qml:119
6080msgid "Reboot"
61−msgstr ""
81+msgstr "Újraindítás"
6282
6383#: qml/Components/Dialogs.qml:120
6484msgid "Are you sure you want to reboot?"
65−msgstr ""
85+msgstr "Biztosan újra szeretné indítani?"
6686
6787#: qml/Components/Dialogs.qml:144
6888msgid "Power"
69−msgstr ""
89+msgstr "Kikapcsolás"
7090
7191#: qml/Components/Dialogs.qml:145
7292msgid ""
7393"Are you sure you would like\n"
7494"to power off?"
7595msgstr ""
96+"Biztos benne, hogy ki\n"
97+"szeretné kapcsolni?"
7698
77−#: qml/Components/Dialogs.qml:144
99+#: qml/Components/Dialogs.qml:147
78100msgid "Power off"
79101msgstr "Kikapcsolás"
80102
81−#: qml/Components/Dialogs.qml:162
103+#: qml/Components/Dialogs.qml:157
104+msgid "Restart"
105+msgstr "Újraindítás"
106+
107+#: qml/Components/Dialogs.qml:167
82108msgid "Cancel"
83109msgstr "Mégse"
84110
@@ -132,60 +158,44 @@ msgstr ""
132158"Elsajátította a gesztusokat, és megkezdheti a telefon "
133159"használatát.<br><br>Koppintson a képernyőre a kezdéshez."
134160
135−#: qml/Components/Lockscreen.qml:167
136−msgid "Please wait"
137−msgstr "Kérem várjon"
138−
139−#: qml/Components/Lockscreen.qml:172
140−msgid "Too many incorrect attempts"
141−msgstr "Túl sok sikertelen kísérlet"
142−
143−#: qml/Components/Lockscreen.qml:206
161+#: qml/Components/Lockscreen.qml:220
144162msgid "Emergency Call"
145163msgstr "Vészhívás"
146164
147−#: qml/Components/Lockscreen.qml:226
165+#: qml/Components/Lockscreen.qml:252
148166msgid "OK"
149167msgstr "Ok"
150168
151−#: qml/Components/PassphraseLockscreen.qml:61
152−#, qt-format
153−msgid "Hello %1"
154−msgstr "Üdv %1"
155−
156−#: qml/Components/PassphraseLockscreen.qml:61
157−msgid "Hello"
158−msgstr "Üdvözöljük"
159−
160−#: qml/Dash/GenericScopeView.qml:361
169+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
161170msgid "See less"
162171msgstr "Kevesebb"
163172
164−#: qml/Dash/GenericScopeView.qml:361
173+#: qml/Dash/GenericScopeView.qml:434
165174msgid "See all"
166175msgstr "Összes megtekintése"
167176
168−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
177+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
178+#: qml/Panel/SearchIndicator.qml:27
169179msgid "Search"
170180msgstr "Keresés"
171181
172−#: qml/Dash/PageHeader.qml:270
182+#: qml/Dash/PageHeader.qml:268
173183msgid "Settings"
174−msgstr ""
184+msgstr "Beállítások"
175185
176−#: qml/Dash/PageHeader.qml:279
186+#: qml/Dash/PageHeader.qml:275
177187msgid "Remove from Favorites"
178−msgstr ""
188+msgstr "Eltávolítás a kedvencek közül"
179189
180−#: qml/Dash/PageHeader.qml:279
190+#: qml/Dash/PageHeader.qml:275
181191msgid "Add to Favorites"
182−msgstr ""
192+msgstr "Hozzáadás a kedvencekhez"
183193
184−#: qml/Dash/Previews/PreviewActionCombo.qml:34
194+#: qml/Dash/Previews/PreviewActionCombo.qml:35
185195msgid "More..."
186196msgstr "Több…"
187197
188−#: qml/Dash/Previews/PreviewActionCombo.qml:34
198+#: qml/Dash/Previews/PreviewActionCombo.qml:35
189199msgid "Less..."
190200msgstr "Kevesebb…"
191201
@@ -201,15 +211,23 @@ msgstr "Értékelés hozzáadása"
201211msgid "Send"
202212msgstr "Küldés"
203213
204−#: qml/Dash/ScopesOverview.qml:201
205−msgid "Manage Dash"
206−msgstr "Dash kezelése"
214+#: qml/Dash/PullToRefreshScopeStyle.qml:55
215+msgid "Pull to refresh…"
216+msgstr "Húzza a frissítéshez…"
217+
218+#: qml/Dash/PullToRefreshScopeStyle.qml:60
219+msgid "Release to refresh…"
220+msgstr "Engedje el a frissítéshez…"
221+
222+#: qml/Dash/ScopesOverview.qml:206
223+msgid "Manage Scopes"
224+msgstr "Lencsék kezelése"
207225
208−#: qml/Dash/ScopesOverview.qml:408
226+#: qml/Dash/ScopesOverview.qml:428
209227msgid "Done"
210228msgstr "Kész"
211229
212−#: qml/Dash/ScopesOverview.qml:434
230+#: qml/Dash/ScopesOverview.qml:454
213231msgid "Store"
214232msgstr "Áruház"
215233
@@ -222,10 +240,10 @@ msgid "All"
222240msgstr "Összes"
223241
224242#: qml/Greeter/Greeter.qml:157
225−msgid "Swipe to unlock"
226−msgstr "Csúsztasson a feloldáshoz"
243+msgid "Unlock"
244+msgstr "Feloldás"
227245
228−#: qml/Hud/HudParametrizedActionsPage.qml:132
246+#: qml/Hud/HudParametrizedActionsPage.qml:139
229247msgid "Confirm"
230248msgstr "Megerősítés"
231249
@@ -245,18 +263,10 @@ msgstr "Most beszéljen…"
245263msgid "Speaking..."
246264msgstr "Beszéd…"
247265
248−#: qml/Notifications/NotificationMenuItemFactory.qml:105
266+#: qml/Notifications/NotificationMenuItemFactory.qml:116
249267msgid "Show password"
250268msgstr "Jelszó megjelenítése"
251269
252−#: qml/Notifications/NotificationMenuItemFactory.qml:120
253−msgid "Enter SIM PIN"
254−msgstr "Adja meg a SIM PIN kódját"
255−
256−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257−msgid "Sorry, incorrect PIN"
258−msgstr "Sajnáljuk, helytelen PIN"
259−
260270#: qml/Panel/ActiveCallHint.qml:77
261271msgid "Tap to return to call..."
262272msgstr "Érintse meg, hogy visszatérjen a híváshoz..."
@@ -265,27 +275,31 @@ msgstr "Érintse meg, hogy visszatérjen a híváshoz..."
265275msgid "Conference"
266276msgstr "Konferencia"
267277
268−#: qml/Panel/Indicators/MenuItemFactory.qml:651
278+#: qml/Panel/Indicators/MenuItemFactory.qml:600
279+msgid "Nothing is playing"
280+msgstr "Nincs lejátszás"
281+
282+#: qml/Panel/Indicators/MenuItemFactory.qml:748
269283msgid "In queue…"
270284msgstr "Sorban…"
271285
272−#: qml/Panel/Indicators/MenuItemFactory.qml:655
286+#: qml/Panel/Indicators/MenuItemFactory.qml:752
273287msgid "Downloading"
274288msgstr "Letöltés"
275289
276−#: qml/Panel/Indicators/MenuItemFactory.qml:657
290+#: qml/Panel/Indicators/MenuItemFactory.qml:754
277291msgid "Paused, tap to resume"
278292msgstr "Szüneteltetve, koppintson a folytatáshoz"
279293
280−#: qml/Panel/Indicators/MenuItemFactory.qml:659
294+#: qml/Panel/Indicators/MenuItemFactory.qml:756
281295msgid "Canceled"
282296msgstr "Megszakítva"
283297
284−#: qml/Panel/Indicators/MenuItemFactory.qml:661
298+#: qml/Panel/Indicators/MenuItemFactory.qml:758
285299msgid "Finished"
286300msgstr "Befejeződött"
287301
288−#: qml/Panel/Indicators/MenuItemFactory.qml:663
302+#: qml/Panel/Indicators/MenuItemFactory.qml:760
289303msgid "Failed, tap to retry"
290304msgstr "Sikertelen, koppintson az újrapróbáláshoz"
291305
@@ -297,45 +311,49 @@ msgstr "SIM feloldása"
297311msgid "Roaming"
298312msgstr "Barangolás"
299313
300−#: qml/Shell.qml:266
301−msgid "Enter your passphrase"
302−msgstr "Adja meg a jelmondatot"
314+#: qml/Shell.qml:346
315+msgid "Enter passphrase"
316+msgstr "Jelmondat megadása"
303317
304−#: qml/Shell.qml:267
318+#: qml/Shell.qml:347
305319msgid "Sorry, incorrect passphrase"
306320msgstr "Sajnáljuk, helytelen jelmondat"
307321
308−#: qml/Shell.qml:282
309−msgid "Enter your passcode"
310−msgstr ""
322+#: qml/Shell.qml:348
323+msgid "Please re-enter"
324+msgstr "Kérjük próbálja újra"
325+
326+#: qml/Shell.qml:350
327+msgid "Enter passcode"
328+msgstr "Jelkód megadása"
311329
312−#: qml/Shell.qml:283
330+#: qml/Shell.qml:351
313331msgid "Sorry, incorrect passcode"
314−msgstr ""
332+msgstr "Sajnáljuk, helytelen jelkód"
315333
316−#: qml/Shell.qml:273
334+#: qml/Shell.qml:354
317335#, qt-format
318−msgid "Enter your %1"
319−msgstr "Kérjük adja meg: %1"
336+msgid "Enter %1"
337+msgstr "Adja meg: %1"
320338
321−#: qml/Shell.qml:274
339+#: qml/Shell.qml:355
322340#, qt-format
323341msgid "Sorry, incorrect %1"
324342msgstr "Sajnáljuk, helytelen %1"
325343
326−#: qml/Shell.qml:310
344+#: qml/Shell.qml:390
327345msgid "Sorry, incorrect passphrase."
328346msgstr "Sajnáljuk, helytelen jelmondat."
329347
330−#: qml/Shell.qml:311
348+#: qml/Shell.qml:391
331349msgid "Sorry, incorrect passcode."
332350msgstr "Sajnáljuk, helytelen jelkód."
333351
334−#: qml/Shell.qml:312
352+#: qml/Shell.qml:392
335353msgid "This will be your last attempt."
336354msgstr "Ez az utolsó próbálkozási lehetősége."
337355
338−#: qml/Shell.qml:314
356+#: qml/Shell.qml:394
339357msgid ""
340358"If passphrase is entered incorrectly, your phone will conduct a factory "
341359"reset and all personal data will be deleted."
@@ -343,19 +361,10 @@ msgstr ""
343361"Ha helytelen jelmondatot ad meg, a telefonja visszaállítja a gyári "
344362"beállításokat és törli minden személyes adatát."
345363
346−#: qml/Shell.qml:315
364+#: qml/Shell.qml:395
347365msgid ""
348366"If passcode is entered incorrectly, your phone will conduct a factory reset "
349367"and all personal data will be deleted."
350368msgstr ""
351369"Ha helytelen jelkódot ad meg, a telefonja visszaállítja a gyári "
352370"beállításokat és törli minden személyes adatát."
353−
354−#~ msgid "Restart"
355−#~ msgstr "Újraindítás"
356−
357−#~ msgid "Are you sure you would like to turn power off?"
358−#~ msgstr "Biztos benne, hogy ki szeretné kapcsolni?"
359−
360−#~ msgid "Enter your PIN"
361−#~ msgstr "Adja meg a PIN kódot"
po/hy.po+87−71
@@ -7,29 +7,49 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
1111"PO-Revision-Date: 2013-06-27 04:43+0000\n"
1212"Last-Translator: iAbaS <sosabazyan@yandex.ru>\n"
1313"Language-Team: Armenian <hy@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:29+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=1; plural=0;\n"
18+"X-Launchpad-Export-Date: 2014-10-09 06:36+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
2223msgstr ""
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr ""
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr ""
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr ""
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr ""
41+
42+#: qml/Components/DelayedLockscreen.qml:63
43+msgid "You have been locked out due to too many failed passcode attempts."
44+msgstr ""
45+
46+#: qml/Components/DelayedLockscreen.qml:72
47+#, qt-format
48+msgid "Please wait %1 minute and then try again…"
49+msgid_plural "Please wait %1 minutes and then try again…"
50+msgstr[0] ""
51+msgstr[1] ""
52+
3353#: qml/Components/Dialogs.qml:70
3454msgid "Log out"
3555msgstr ""
@@ -74,11 +94,15 @@ msgid ""
7494"to power off?"
7595msgstr ""
7696
77−#: qml/Components/Dialogs.qml:144
97+#: qml/Components/Dialogs.qml:147
7898msgid "Power off"
7999msgstr ""
80100
81−#: qml/Components/Dialogs.qml:162
101+#: qml/Components/Dialogs.qml:157
102+msgid "Restart"
103+msgstr ""
104+
105+#: qml/Components/Dialogs.qml:167
82106msgid "Cancel"
83107msgstr ""
84108
@@ -128,60 +152,44 @@ msgid ""
128152"phone<br><br>Tap on the screen to start"
129153msgstr ""
130154
131−#: qml/Components/Lockscreen.qml:167
132−msgid "Please wait"
133−msgstr ""
134−
135−#: qml/Components/Lockscreen.qml:172
136−msgid "Too many incorrect attempts"
137−msgstr ""
138−
139−#: qml/Components/Lockscreen.qml:206
155+#: qml/Components/Lockscreen.qml:220
140156msgid "Emergency Call"
141157msgstr ""
142158
143−#: qml/Components/Lockscreen.qml:226
159+#: qml/Components/Lockscreen.qml:252
144160msgid "OK"
145161msgstr ""
146162
147−#: qml/Components/PassphraseLockscreen.qml:61
148−#, qt-format
149−msgid "Hello %1"
150−msgstr ""
151−
152−#: qml/Components/PassphraseLockscreen.qml:61
153−msgid "Hello"
154−msgstr ""
155−
156−#: qml/Dash/GenericScopeView.qml:361
163+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
157164msgid "See less"
158165msgstr ""
159166
160−#: qml/Dash/GenericScopeView.qml:361
167+#: qml/Dash/GenericScopeView.qml:434
161168msgid "See all"
162169msgstr ""
163170
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
171+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
172+#: qml/Panel/SearchIndicator.qml:27
165173msgid "Search"
166174msgstr "Որոնում"
167175
168−#: qml/Dash/PageHeader.qml:270
176+#: qml/Dash/PageHeader.qml:268
169177msgid "Settings"
170178msgstr ""
171179
172−#: qml/Dash/PageHeader.qml:279
180+#: qml/Dash/PageHeader.qml:275
173181msgid "Remove from Favorites"
174182msgstr ""
175183
176−#: qml/Dash/PageHeader.qml:279
184+#: qml/Dash/PageHeader.qml:275
177185msgid "Add to Favorites"
178186msgstr ""
179187
180−#: qml/Dash/Previews/PreviewActionCombo.qml:34
188+#: qml/Dash/Previews/PreviewActionCombo.qml:35
181189msgid "More..."
182190msgstr ""
183191
184−#: qml/Dash/Previews/PreviewActionCombo.qml:34
192+#: qml/Dash/Previews/PreviewActionCombo.qml:35
185193msgid "Less..."
186194msgstr ""
187195
@@ -197,15 +205,23 @@ msgstr ""
197205msgid "Send"
198206msgstr ""
199207
200−#: qml/Dash/ScopesOverview.qml:201
201−msgid "Manage Dash"
208+#: qml/Dash/PullToRefreshScopeStyle.qml:55
209+msgid "Pull to refresh…"
210+msgstr ""
211+
212+#: qml/Dash/PullToRefreshScopeStyle.qml:60
213+msgid "Release to refresh…"
214+msgstr ""
215+
216+#: qml/Dash/ScopesOverview.qml:206
217+msgid "Manage Scopes"
202218msgstr ""
203219
204−#: qml/Dash/ScopesOverview.qml:408
220+#: qml/Dash/ScopesOverview.qml:428
205221msgid "Done"
206222msgstr ""
207223
208−#: qml/Dash/ScopesOverview.qml:434
224+#: qml/Dash/ScopesOverview.qml:454
209225msgid "Store"
210226msgstr ""
211227
@@ -218,10 +234,10 @@ msgid "All"
218234msgstr ""
219235
220236#: qml/Greeter/Greeter.qml:157
221−msgid "Swipe to unlock"
237+msgid "Unlock"
222238msgstr ""
223239
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
240+#: qml/Hud/HudParametrizedActionsPage.qml:139
225241msgid "Confirm"
226242msgstr "Հաստատել"
227243
@@ -241,18 +257,10 @@ msgstr "Խոսի՛ր"
241257msgid "Speaking..."
242258msgstr "Խոսում եմ..."
243259
244−#: qml/Notifications/NotificationMenuItemFactory.qml:105
260+#: qml/Notifications/NotificationMenuItemFactory.qml:116
245261msgid "Show password"
246262msgstr ""
247263
248−#: qml/Notifications/NotificationMenuItemFactory.qml:120
249−msgid "Enter SIM PIN"
250−msgstr ""
251−
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
253−msgid "Sorry, incorrect PIN"
254−msgstr ""
255−
256264#: qml/Panel/ActiveCallHint.qml:77
257265msgid "Tap to return to call..."
258266msgstr ""
@@ -261,27 +269,31 @@ msgstr ""
261269msgid "Conference"
262270msgstr ""
263271
264−#: qml/Panel/Indicators/MenuItemFactory.qml:651
272+#: qml/Panel/Indicators/MenuItemFactory.qml:600
273+msgid "Nothing is playing"
274+msgstr ""
275+
276+#: qml/Panel/Indicators/MenuItemFactory.qml:748
265277msgid "In queue…"
266278msgstr ""
267279
268−#: qml/Panel/Indicators/MenuItemFactory.qml:655
280+#: qml/Panel/Indicators/MenuItemFactory.qml:752
269281msgid "Downloading"
270282msgstr ""
271283
272−#: qml/Panel/Indicators/MenuItemFactory.qml:657
284+#: qml/Panel/Indicators/MenuItemFactory.qml:754
273285msgid "Paused, tap to resume"
274286msgstr ""
275287
276−#: qml/Panel/Indicators/MenuItemFactory.qml:659
288+#: qml/Panel/Indicators/MenuItemFactory.qml:756
277289msgid "Canceled"
278290msgstr ""
279291
280−#: qml/Panel/Indicators/MenuItemFactory.qml:661
292+#: qml/Panel/Indicators/MenuItemFactory.qml:758
281293msgid "Finished"
282294msgstr ""
283295
284−#: qml/Panel/Indicators/MenuItemFactory.qml:663
296+#: qml/Panel/Indicators/MenuItemFactory.qml:760
285297msgid "Failed, tap to retry"
286298msgstr ""
287299
@@ -293,51 +305,55 @@ msgstr ""
293305msgid "Roaming"
294306msgstr ""
295307
296−#: qml/Shell.qml:266
297−msgid "Enter your passphrase"
308+#: qml/Shell.qml:346
309+msgid "Enter passphrase"
298310msgstr ""
299311
300−#: qml/Shell.qml:267
312+#: qml/Shell.qml:347
301313msgid "Sorry, incorrect passphrase"
302314msgstr ""
303315
304−#: qml/Shell.qml:282
305−msgid "Enter your passcode"
316+#: qml/Shell.qml:348
317+msgid "Please re-enter"
318+msgstr ""
319+
320+#: qml/Shell.qml:350
321+msgid "Enter passcode"
306322msgstr ""
307323
308−#: qml/Shell.qml:283
324+#: qml/Shell.qml:351
309325msgid "Sorry, incorrect passcode"
310326msgstr ""
311327
312−#: qml/Shell.qml:273
328+#: qml/Shell.qml:354
313329#, qt-format
314−msgid "Enter your %1"
330+msgid "Enter %1"
315331msgstr ""
316332
317−#: qml/Shell.qml:274
333+#: qml/Shell.qml:355
318334#, qt-format
319335msgid "Sorry, incorrect %1"
320336msgstr ""
321337
322−#: qml/Shell.qml:310
338+#: qml/Shell.qml:390
323339msgid "Sorry, incorrect passphrase."
324340msgstr ""
325341
326−#: qml/Shell.qml:311
342+#: qml/Shell.qml:391
327343msgid "Sorry, incorrect passcode."
328344msgstr ""
329345
330−#: qml/Shell.qml:312
346+#: qml/Shell.qml:392
331347msgid "This will be your last attempt."
332348msgstr ""
333349
334−#: qml/Shell.qml:314
350+#: qml/Shell.qml:394
335351msgid ""
336352"If passphrase is entered incorrectly, your phone will conduct a factory "
337353"reset and all personal data will be deleted."
338354msgstr ""
339355
340−#: qml/Shell.qml:315
356+#: qml/Shell.qml:395
341357msgid ""
342358"If passcode is entered incorrectly, your phone will conduct a factory reset "
343359"and all personal data will be deleted."
po/id.po+87−71
@@ -7,29 +7,49 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
1111"PO-Revision-Date: 2013-06-26 22:35+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Indonesian <id@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=1; plural=0;\n"
18+"X-Launchpad-Export-Date: 2014-10-09 06:36+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
2223msgstr ""
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr ""
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr ""
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr ""
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr ""
41+
42+#: qml/Components/DelayedLockscreen.qml:63
43+msgid "You have been locked out due to too many failed passcode attempts."
44+msgstr ""
45+
46+#: qml/Components/DelayedLockscreen.qml:72
47+#, qt-format
48+msgid "Please wait %1 minute and then try again…"
49+msgid_plural "Please wait %1 minutes and then try again…"
50+msgstr[0] ""
51+msgstr[1] ""
52+
3353#: qml/Components/Dialogs.qml:70
3454msgid "Log out"
3555msgstr ""
@@ -74,11 +94,15 @@ msgid ""
7494"to power off?"
7595msgstr ""
7696
77−#: qml/Components/Dialogs.qml:144
97+#: qml/Components/Dialogs.qml:147
7898msgid "Power off"
7999msgstr ""
80100
81−#: qml/Components/Dialogs.qml:162
101+#: qml/Components/Dialogs.qml:157
102+msgid "Restart"
103+msgstr ""
104+
105+#: qml/Components/Dialogs.qml:167
82106msgid "Cancel"
83107msgstr ""
84108
@@ -128,60 +152,44 @@ msgid ""
128152"phone<br><br>Tap on the screen to start"
129153msgstr ""
130154
131−#: qml/Components/Lockscreen.qml:167
132−msgid "Please wait"
133−msgstr ""
134−
135−#: qml/Components/Lockscreen.qml:172
136−msgid "Too many incorrect attempts"
137−msgstr ""
138−
139−#: qml/Components/Lockscreen.qml:206
155+#: qml/Components/Lockscreen.qml:220
140156msgid "Emergency Call"
141157msgstr ""
142158
143−#: qml/Components/Lockscreen.qml:226
159+#: qml/Components/Lockscreen.qml:252
144160msgid "OK"
145161msgstr ""
146162
147−#: qml/Components/PassphraseLockscreen.qml:61
148−#, qt-format
149−msgid "Hello %1"
150−msgstr ""
151−
152−#: qml/Components/PassphraseLockscreen.qml:61
153−msgid "Hello"
154−msgstr ""
155−
156−#: qml/Dash/GenericScopeView.qml:361
163+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
157164msgid "See less"
158165msgstr ""
159166
160−#: qml/Dash/GenericScopeView.qml:361
167+#: qml/Dash/GenericScopeView.qml:434
161168msgid "See all"
162169msgstr ""
163170
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
171+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
172+#: qml/Panel/SearchIndicator.qml:27
165173msgid "Search"
166174msgstr ""
167175
168−#: qml/Dash/PageHeader.qml:270
176+#: qml/Dash/PageHeader.qml:268
169177msgid "Settings"
170178msgstr ""
171179
172−#: qml/Dash/PageHeader.qml:279
180+#: qml/Dash/PageHeader.qml:275
173181msgid "Remove from Favorites"
174182msgstr ""
175183
176−#: qml/Dash/PageHeader.qml:279
184+#: qml/Dash/PageHeader.qml:275
177185msgid "Add to Favorites"
178186msgstr ""
179187
180−#: qml/Dash/Previews/PreviewActionCombo.qml:34
188+#: qml/Dash/Previews/PreviewActionCombo.qml:35
181189msgid "More..."
182190msgstr ""
183191
184−#: qml/Dash/Previews/PreviewActionCombo.qml:34
192+#: qml/Dash/Previews/PreviewActionCombo.qml:35
185193msgid "Less..."
186194msgstr ""
187195
@@ -197,15 +205,23 @@ msgstr ""
197205msgid "Send"
198206msgstr ""
199207
200−#: qml/Dash/ScopesOverview.qml:201
201−msgid "Manage Dash"
208+#: qml/Dash/PullToRefreshScopeStyle.qml:55
209+msgid "Pull to refresh…"
210+msgstr ""
211+
212+#: qml/Dash/PullToRefreshScopeStyle.qml:60
213+msgid "Release to refresh…"
214+msgstr ""
215+
216+#: qml/Dash/ScopesOverview.qml:206
217+msgid "Manage Scopes"
202218msgstr ""
203219
204−#: qml/Dash/ScopesOverview.qml:408
220+#: qml/Dash/ScopesOverview.qml:428
205221msgid "Done"
206222msgstr ""
207223
208−#: qml/Dash/ScopesOverview.qml:434
224+#: qml/Dash/ScopesOverview.qml:454
209225msgid "Store"
210226msgstr ""
211227
@@ -218,10 +234,10 @@ msgid "All"
218234msgstr ""
219235
220236#: qml/Greeter/Greeter.qml:157
221−msgid "Swipe to unlock"
237+msgid "Unlock"
222238msgstr ""
223239
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
240+#: qml/Hud/HudParametrizedActionsPage.qml:139
225241msgid "Confirm"
226242msgstr ""
227243
@@ -241,18 +257,10 @@ msgstr ""
241257msgid "Speaking..."
242258msgstr ""
243259
244−#: qml/Notifications/NotificationMenuItemFactory.qml:105
260+#: qml/Notifications/NotificationMenuItemFactory.qml:116
245261msgid "Show password"
246262msgstr ""
247263
248−#: qml/Notifications/NotificationMenuItemFactory.qml:120
249−msgid "Enter SIM PIN"
250−msgstr ""
251−
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
253−msgid "Sorry, incorrect PIN"
254−msgstr ""
255−
256264#: qml/Panel/ActiveCallHint.qml:77
257265msgid "Tap to return to call..."
258266msgstr ""
@@ -261,27 +269,31 @@ msgstr ""
261269msgid "Conference"
262270msgstr ""
263271
264−#: qml/Panel/Indicators/MenuItemFactory.qml:651
272+#: qml/Panel/Indicators/MenuItemFactory.qml:600
273+msgid "Nothing is playing"
274+msgstr ""
275+
276+#: qml/Panel/Indicators/MenuItemFactory.qml:748
265277msgid "In queue…"
266278msgstr ""
267279
268−#: qml/Panel/Indicators/MenuItemFactory.qml:655
280+#: qml/Panel/Indicators/MenuItemFactory.qml:752
269281msgid "Downloading"
270282msgstr ""
271283
272−#: qml/Panel/Indicators/MenuItemFactory.qml:657
284+#: qml/Panel/Indicators/MenuItemFactory.qml:754
273285msgid "Paused, tap to resume"
274286msgstr ""
275287
276−#: qml/Panel/Indicators/MenuItemFactory.qml:659
288+#: qml/Panel/Indicators/MenuItemFactory.qml:756
277289msgid "Canceled"
278290msgstr ""
279291
280−#: qml/Panel/Indicators/MenuItemFactory.qml:661
292+#: qml/Panel/Indicators/MenuItemFactory.qml:758
281293msgid "Finished"
282294msgstr ""
283295
284−#: qml/Panel/Indicators/MenuItemFactory.qml:663
296+#: qml/Panel/Indicators/MenuItemFactory.qml:760
285297msgid "Failed, tap to retry"
286298msgstr ""
287299
@@ -293,51 +305,55 @@ msgstr ""
293305msgid "Roaming"
294306msgstr ""
295307
296−#: qml/Shell.qml:266
297−msgid "Enter your passphrase"
308+#: qml/Shell.qml:346
309+msgid "Enter passphrase"
298310msgstr ""
299311
300−#: qml/Shell.qml:267
312+#: qml/Shell.qml:347
301313msgid "Sorry, incorrect passphrase"
302314msgstr ""
303315
304−#: qml/Shell.qml:282
305−msgid "Enter your passcode"
316+#: qml/Shell.qml:348
317+msgid "Please re-enter"
318+msgstr ""
319+
320+#: qml/Shell.qml:350
321+msgid "Enter passcode"
306322msgstr ""
307323
308−#: qml/Shell.qml:283
324+#: qml/Shell.qml:351
309325msgid "Sorry, incorrect passcode"
310326msgstr ""
311327
312−#: qml/Shell.qml:273
328+#: qml/Shell.qml:354
313329#, qt-format
314−msgid "Enter your %1"
330+msgid "Enter %1"
315331msgstr ""
316332
317−#: qml/Shell.qml:274
333+#: qml/Shell.qml:355
318334#, qt-format
319335msgid "Sorry, incorrect %1"
320336msgstr ""
321337
322−#: qml/Shell.qml:310
338+#: qml/Shell.qml:390
323339msgid "Sorry, incorrect passphrase."
324340msgstr ""
325341
326−#: qml/Shell.qml:311
342+#: qml/Shell.qml:391
327343msgid "Sorry, incorrect passcode."
328344msgstr ""
329345
330−#: qml/Shell.qml:312
346+#: qml/Shell.qml:392
331347msgid "This will be your last attempt."
332348msgstr ""
333349
334−#: qml/Shell.qml:314
350+#: qml/Shell.qml:394
335351msgid ""
336352"If passphrase is entered incorrectly, your phone will conduct a factory "
337353"reset and all personal data will be deleted."
338354msgstr ""
339355
340−#: qml/Shell.qml:315
356+#: qml/Shell.qml:395
341357msgid ""
342358"If passcode is entered incorrectly, your phone will conduct a factory reset "
343359"and all personal data will be deleted."
po/is.po+129−101
@@ -9,81 +9,107 @@ msgid ""
99msgstr ""
1010"Project-Id-Version: po_unity8-is\n"
1111"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
12−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
13−"PO-Revision-Date: 2014-07-31 16:10+0000\n"
12+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
13+"PO-Revision-Date: 2014-10-09 10:49+0000\n"
1414"Last-Translator: Sveinn í Felli <sv1@fellsnet.is>\n"
1515"Language-Team: Icelandic <translation-team-is@lists.sourceforge.net>\n"
1616"MIME-Version: 1.0\n"
1717"Content-Type: text/plain; charset=UTF-8\n"
1818"Content-Transfer-Encoding: 8bit\n"
19−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
20−"X-Generator: Launchpad (build 17174)\n"
19+"Plural-Forms: nplurals=2; plural=n != 1;\n"
20+"X-Launchpad-Export-Date: 2014-10-10 05:23+0000\n"
21+"X-Generator: Launchpad (build 17196)\n"
2122"Language: is\n"
2223
23−#: plugins/LightDM/Greeter.cpp:129
24+#: plugins/LightDM/Greeter.cpp:130
2425msgid "Password: "
25−msgstr ""
26+msgstr "Lykilorð: "
2627
27−#: plugins/Unity/Launcher/launcheritem.cpp:43
28−#: plugins/Unity/Launcher/launcheritem.cpp:73
28+#: plugins/Unity/Launcher/launcheritem.cpp:45
29+#: plugins/Unity/Launcher/launcheritem.cpp:91
2930msgid "Pin shortcut"
3031msgstr "Pinna flýtilykil"
3132
32−#: plugins/Unity/Launcher/launcheritem.cpp:73
33+#: plugins/Unity/Launcher/launcheritem.cpp:91
3334msgid "Unpin shortcut"
3435msgstr "Losa flýtilykil"
3536
37+#: qml/Components/DelayedLockscreen.qml:47
38+msgid "Device Locked"
39+msgstr "Tæki læst"
40+
41+#: qml/Components/DelayedLockscreen.qml:62
42+msgid "You have been locked out due to too many failed passphrase attempts."
43+msgstr ""
44+
45+#: qml/Components/DelayedLockscreen.qml:63
46+msgid "You have been locked out due to too many failed passcode attempts."
47+msgstr ""
48+
49+#: qml/Components/DelayedLockscreen.qml:72
50+#, qt-format
51+msgid "Please wait %1 minute and then try again…"
52+msgid_plural "Please wait %1 minutes and then try again…"
53+msgstr[0] "Bíddu í %1 mínútu og reyndu svo aftur"
54+msgstr[1] "Bíddu í %1 mínútur og reyndu svo aftur"
55+
3656#: qml/Components/Dialogs.qml:70
3757msgid "Log out"
38−msgstr ""
58+msgstr "Útskráning"
3959
4060#: qml/Components/Dialogs.qml:71
4161msgid "Are you sure you want to log out?"
42−msgstr ""
62+msgstr "Ertu viss um að þú viljir skrá þig út?"
4363
4464#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4565#: qml/Components/Dialogs.qml:122
4666msgid "No"
47−msgstr ""
67+msgstr "Nei"
4868
4969#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
5070#: qml/Components/Dialogs.qml:129
5171msgid "Yes"
52−msgstr ""
72+msgstr "Já"
5373
5474#: qml/Components/Dialogs.qml:94
5575msgid "Shut down"
56−msgstr ""
76+msgstr "Slökkva á tölvunni"
5777
5878#: qml/Components/Dialogs.qml:95
5979msgid "Are you sure you want to shut down?"
60−msgstr ""
80+msgstr "Ertu viss um að þú viljir slökkva á símanum?"
6181
6282#: qml/Components/Dialogs.qml:119
6383msgid "Reboot"
64−msgstr ""
84+msgstr "Endurræsa"
6585
6686#: qml/Components/Dialogs.qml:120
6787msgid "Are you sure you want to reboot?"
68−msgstr ""
88+msgstr "Ertu viss að þú viljir enduræsa?"
6989
7090#: qml/Components/Dialogs.qml:144
7191msgid "Power"
72−msgstr ""
92+msgstr "Aflstjórnun"
7393
7494#: qml/Components/Dialogs.qml:145
7595msgid ""
7696"Are you sure you would like\n"
7797"to power off?"
7898msgstr ""
99+"Ertu viss um að þú viljir\n"
100+"slökkva á símanum?"
79101
80−#: qml/Components/Dialogs.qml:144
102+#: qml/Components/Dialogs.qml:147
81103msgid "Power off"
82−msgstr ""
104+msgstr "Slökkva"
83105
84−#: qml/Components/Dialogs.qml:162
106+#: qml/Components/Dialogs.qml:157
107+msgid "Restart"
108+msgstr "Endurræsa"
109+
110+#: qml/Components/Dialogs.qml:167
85111msgid "Cancel"
86−msgstr ""
112+msgstr "Hætta við"
87113
88114#: qml/Components/EdgeDemoOverlay.qml:151
89115msgid "Skip intro"
@@ -134,60 +160,44 @@ msgstr ""
134160"Þú ert núna með æfingu í að nota skjáhreyfingar og getur því farið að nota "
135161"símann<br><br>Sláðu létt á skjáinn til að byrja"
136162
137−#: qml/Components/Lockscreen.qml:167
138−msgid "Please wait"
139−msgstr ""
140−
141−#: qml/Components/Lockscreen.qml:172
142−msgid "Too many incorrect attempts"
143−msgstr ""
144−
145−#: qml/Components/Lockscreen.qml:206
163+#: qml/Components/Lockscreen.qml:220
146164msgid "Emergency Call"
147165msgstr "Neyðarsímtal"
148166
149−#: qml/Components/Lockscreen.qml:226
167+#: qml/Components/Lockscreen.qml:252
150168msgid "OK"
151169msgstr "Í lagi"
152170
153−#: qml/Components/PassphraseLockscreen.qml:61
154−#, qt-format
155−msgid "Hello %1"
156−msgstr "Hæ %1"
157−
158−#: qml/Components/PassphraseLockscreen.qml:61
159−msgid "Hello"
160−msgstr "Hæ"
161−
162−#: qml/Dash/GenericScopeView.qml:361
171+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
163172msgid "See less"
164173msgstr "Sjá minna"
165174
166−#: qml/Dash/GenericScopeView.qml:361
175+#: qml/Dash/GenericScopeView.qml:434
167176msgid "See all"
168177msgstr "Sjá allt"
169178
170−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
179+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
180+#: qml/Panel/SearchIndicator.qml:27
171181msgid "Search"
172182msgstr "Leita"
173183
174−#: qml/Dash/PageHeader.qml:270
184+#: qml/Dash/PageHeader.qml:268
175185msgid "Settings"
176−msgstr ""
186+msgstr "Stillingar"
177187
178−#: qml/Dash/PageHeader.qml:279
188+#: qml/Dash/PageHeader.qml:275
179189msgid "Remove from Favorites"
180−msgstr ""
190+msgstr "Fjarlægja úr Eftirlæti"
181191
182−#: qml/Dash/PageHeader.qml:279
192+#: qml/Dash/PageHeader.qml:275
183193msgid "Add to Favorites"
184−msgstr ""
194+msgstr "Bæta við Eftirlæti"
185195
186−#: qml/Dash/Previews/PreviewActionCombo.qml:34
196+#: qml/Dash/Previews/PreviewActionCombo.qml:35
187197msgid "More..."
188198msgstr "Meira..."
189199
190−#: qml/Dash/Previews/PreviewActionCombo.qml:34
200+#: qml/Dash/Previews/PreviewActionCombo.qml:35
191201msgid "Less..."
192202msgstr "Minna..."
193203
@@ -203,31 +213,39 @@ msgstr "Gefa umsögn"
203213msgid "Send"
204214msgstr "Senda"
205215
206−#: qml/Dash/ScopesOverview.qml:201
207−msgid "Manage Dash"
216+#: qml/Dash/PullToRefreshScopeStyle.qml:55
217+msgid "Pull to refresh…"
208218msgstr ""
209219
210−#: qml/Dash/ScopesOverview.qml:408
211−msgid "Done"
220+#: qml/Dash/PullToRefreshScopeStyle.qml:60
221+msgid "Release to refresh…"
222+msgstr "Slepptu til að endurlesa..."
223+
224+#: qml/Dash/ScopesOverview.qml:206
225+msgid "Manage Scopes"
212226msgstr ""
213227
214−#: qml/Dash/ScopesOverview.qml:434
228+#: qml/Dash/ScopesOverview.qml:428
229+msgid "Done"
230+msgstr "Lokið"
231+
232+#: qml/Dash/ScopesOverview.qml:454
215233msgid "Store"
216−msgstr ""
234+msgstr "Geyma"
217235
218236#: qml/Dash/ScopesOverviewTab.qml:36
219237msgid "Favorites"
220−msgstr ""
238+msgstr "Eftirlæti"
221239
222240#: qml/Dash/ScopesOverviewTab.qml:54
223241msgid "All"
224−msgstr ""
242+msgstr "Allt"
225243
226244#: qml/Greeter/Greeter.qml:157
227−msgid "Swipe to unlock"
228−msgstr "Strjúka til að aflæsa"
245+msgid "Unlock"
246+msgstr "Aflæsa"
229247
230−#: qml/Hud/HudParametrizedActionsPage.qml:132
248+#: qml/Hud/HudParametrizedActionsPage.qml:139
231249msgid "Confirm"
232250msgstr "Staðfesta"
233251
@@ -247,18 +265,10 @@ msgstr "Tala núna..."
247265msgid "Speaking..."
248266msgstr "Tala..."
249267
250−#: qml/Notifications/NotificationMenuItemFactory.qml:105
268+#: qml/Notifications/NotificationMenuItemFactory.qml:116
251269msgid "Show password"
252270msgstr "Birta lykilorð"
253271
254−#: qml/Notifications/NotificationMenuItemFactory.qml:120
255−msgid "Enter SIM PIN"
256−msgstr ""
257−
258−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
259−msgid "Sorry, incorrect PIN"
260−msgstr ""
261−
262272#: qml/Panel/ActiveCallHint.qml:77
263273msgid "Tap to return to call..."
264274msgstr "Slá til að svara símtali..."
@@ -267,84 +277,102 @@ msgstr "Slá til að svara símtali..."
267277msgid "Conference"
268278msgstr "Ráðstefna"
269279
270−#: qml/Panel/Indicators/MenuItemFactory.qml:651
280+#: qml/Panel/Indicators/MenuItemFactory.qml:600
281+msgid "Nothing is playing"
282+msgstr ""
283+
284+#: qml/Panel/Indicators/MenuItemFactory.qml:748
271285msgid "In queue…"
272286msgstr "Í biðröð..."
273287
274−#: qml/Panel/Indicators/MenuItemFactory.qml:655
288+#: qml/Panel/Indicators/MenuItemFactory.qml:752
275289msgid "Downloading"
276290msgstr "Sæki"
277291
278−#: qml/Panel/Indicators/MenuItemFactory.qml:657
292+#: qml/Panel/Indicators/MenuItemFactory.qml:754
279293msgid "Paused, tap to resume"
280294msgstr "Í bið, sláðu létt til að halda áfram"
281295
282−#: qml/Panel/Indicators/MenuItemFactory.qml:659
296+#: qml/Panel/Indicators/MenuItemFactory.qml:756
283297msgid "Canceled"
284298msgstr "Hætt við"
285299
286−#: qml/Panel/Indicators/MenuItemFactory.qml:661
300+#: qml/Panel/Indicators/MenuItemFactory.qml:758
287301msgid "Finished"
288302msgstr "Lokið"
289303
290−#: qml/Panel/Indicators/MenuItemFactory.qml:663
304+#: qml/Panel/Indicators/MenuItemFactory.qml:760
291305msgid "Failed, tap to retry"
292306msgstr "Mistókst, sláðu létt til að reyna aftur"
293307
294308#: qml/Panel/Indicators/ModemInfoItem.qml:105
295309msgid "Unlock SIM"
296−msgstr ""
310+msgstr "Aflæsa SIM-korti"
297311
298312#: qml/Panel/Indicators/RoamingIndication.qml:27
299313msgid "Roaming"
300−msgstr ""
314+msgstr "Ráphamur"
301315
302−#: qml/Shell.qml:266
303−msgid "Enter your passphrase"
316+#: qml/Shell.qml:346
317+msgid "Enter passphrase"
304318msgstr ""
305319
306−#: qml/Shell.qml:267
320+#: qml/Shell.qml:347
307321msgid "Sorry, incorrect passphrase"
308−msgstr ""
322+msgstr "Því miður, rangt lykilorð"
323+
324+#: qml/Shell.qml:348
325+msgid "Please re-enter"
326+msgstr "Settu aftur inn"
309327
310−#: qml/Shell.qml:282
311−msgid "Enter your passcode"
328+#: qml/Shell.qml:350
329+msgid "Enter passcode"
312330msgstr ""
313331
314−#: qml/Shell.qml:283
332+#: qml/Shell.qml:351
315333msgid "Sorry, incorrect passcode"
316−msgstr ""
334+msgstr "Því miður, rangur aðgangskóði"
317335
318−#: qml/Shell.qml:273
336+#: qml/Shell.qml:354
319337#, qt-format
320−msgid "Enter your %1"
321−msgstr ""
338+msgid "Enter %1"
339+msgstr "Settu inn %1"
322340
323−#: qml/Shell.qml:274
341+#: qml/Shell.qml:355
324342#, qt-format
325343msgid "Sorry, incorrect %1"
326−msgstr ""
344+msgstr "Því miður, rangt %1"
327345
328−#: qml/Shell.qml:310
346+#: qml/Shell.qml:390
329347msgid "Sorry, incorrect passphrase."
330−msgstr ""
348+msgstr "Því miður, rangt lykilorð."
331349
332−#: qml/Shell.qml:311
350+#: qml/Shell.qml:391
333351msgid "Sorry, incorrect passcode."
334−msgstr ""
352+msgstr "Því miður, rangur aðgangskóði."
335353
336−#: qml/Shell.qml:312
354+#: qml/Shell.qml:392
337355msgid "This will be your last attempt."
338−msgstr ""
356+msgstr "Þetta mun verða síðasta tilraunin þín."
339357
340−#: qml/Shell.qml:314
358+#: qml/Shell.qml:394
341359msgid ""
342360"If passphrase is entered incorrectly, your phone will conduct a factory "
343361"reset and all personal data will be deleted."
344362msgstr ""
363+"Ef lykilorð er rangt, mun síminn frumstilla allt á verksmiðjustillingar og "
364+"öllum einkagögnum verður eytt."
345365
346−#: qml/Shell.qml:315
366+#: qml/Shell.qml:395
347367msgid ""
348368"If passcode is entered incorrectly, your phone will conduct a factory reset "
349369"and all personal data will be deleted."
350370msgstr ""
371+"Ef aðgangskóði er rangur, mun síminn frumstilla allt á verksmiðjustillingar "
372+"og öllum einkagögnum verður eytt."
373+
374+#~ msgid "Sorry, incorrect PIN"
375+#~ msgstr "Því miður, rangt PIN-númer"
376+
377+#~ msgid "Enter SIM PIN"
378+#~ msgstr "Settu inn PIN-númer SIM-kortsins"
po/it.po+111−96
@@ -7,78 +7,104 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-08-23 07:47+0000\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
11+"PO-Revision-Date: 2014-09-30 10:56+0000\n"
1212"Last-Translator: Claudio Arseni <claudio.arseni@gmail.com>\n"
1313"Language-Team: Italian <it@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-10-09 06:36+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
2223msgstr "Password: "
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr "Blocca scorciatoia"
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr "Sblocca scorciatoia"
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr ""
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr ""
41+
42+#: qml/Components/DelayedLockscreen.qml:63
43+msgid "You have been locked out due to too many failed passcode attempts."
44+msgstr ""
45+
46+#: qml/Components/DelayedLockscreen.qml:72
47+#, qt-format
48+msgid "Please wait %1 minute and then try again…"
49+msgid_plural "Please wait %1 minutes and then try again…"
50+msgstr[0] ""
51+msgstr[1] ""
52+
3353#: qml/Components/Dialogs.qml:70
3454msgid "Log out"
35−msgstr ""
55+msgstr "Termina sessione"
3656
3757#: qml/Components/Dialogs.qml:71
3858msgid "Are you sure you want to log out?"
39−msgstr ""
59+msgstr "Terminare veramente la sessione?"
4060
4161#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4262#: qml/Components/Dialogs.qml:122
4363msgid "No"
44−msgstr ""
64+msgstr "No"
4565
4666#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4767#: qml/Components/Dialogs.qml:129
4868msgid "Yes"
49−msgstr ""
69+msgstr "Sì"
5070
5171#: qml/Components/Dialogs.qml:94
5272msgid "Shut down"
53−msgstr ""
73+msgstr "Spegni"
5474
5575#: qml/Components/Dialogs.qml:95
5676msgid "Are you sure you want to shut down?"
57−msgstr ""
77+msgstr "Spegnere veramente il dispositivo?"
5878
5979#: qml/Components/Dialogs.qml:119
6080msgid "Reboot"
61−msgstr ""
81+msgstr "Riavvia"
6282
6383#: qml/Components/Dialogs.qml:120
6484msgid "Are you sure you want to reboot?"
65−msgstr ""
85+msgstr "Riavviare veramente il dispositivo?"
6686
6787#: qml/Components/Dialogs.qml:144
6888msgid "Power"
69−msgstr ""
89+msgstr "Alimentazione"
7090
7191#: qml/Components/Dialogs.qml:145
7292msgid ""
7393"Are you sure you would like\n"
7494"to power off?"
7595msgstr ""
96+"Spegnere veramente\n"
97+"il dispositivo?"
7698
77−#: qml/Components/Dialogs.qml:144
99+#: qml/Components/Dialogs.qml:147
78100msgid "Power off"
79101msgstr "Spegni"
80102
81−#: qml/Components/Dialogs.qml:162
103+#: qml/Components/Dialogs.qml:157
104+msgid "Restart"
105+msgstr "Riavvia"
106+
107+#: qml/Components/Dialogs.qml:167
82108msgid "Cancel"
83109msgstr "Annulla"
84110
@@ -135,60 +161,44 @@ msgstr ""
135161"L'apprendimento dei gesti è stato completato. È ora possibile iniziare a "
136162"usare il telefono.<br><br>Toccare lo schermo per iniziare"
137163
138−#: qml/Components/Lockscreen.qml:167
139−msgid "Please wait"
140−msgstr "Attendere"
141−
142−#: qml/Components/Lockscreen.qml:172
143−msgid "Too many incorrect attempts"
144−msgstr "Troppi tentativi errati"
145−
146−#: qml/Components/Lockscreen.qml:206
164+#: qml/Components/Lockscreen.qml:220
147165msgid "Emergency Call"
148166msgstr "Chiamata di emergenza"
149167
150−#: qml/Components/Lockscreen.qml:226
168+#: qml/Components/Lockscreen.qml:252
151169msgid "OK"
152170msgstr "OK"
153171
154−#: qml/Components/PassphraseLockscreen.qml:61
155−#, qt-format
156−msgid "Hello %1"
157−msgstr "Ciao %1"
158−
159−#: qml/Components/PassphraseLockscreen.qml:61
160−msgid "Hello"
161−msgstr "Ciao"
162−
163−#: qml/Dash/GenericScopeView.qml:361
172+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
164173msgid "See less"
165174msgstr "Mostra meno"
166175
167−#: qml/Dash/GenericScopeView.qml:361
176+#: qml/Dash/GenericScopeView.qml:434
168177msgid "See all"
169178msgstr "Mostra tutto"
170179
171−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
180+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
181+#: qml/Panel/SearchIndicator.qml:27
172182msgid "Search"
173183msgstr "Cerca"
174184
175−#: qml/Dash/PageHeader.qml:270
185+#: qml/Dash/PageHeader.qml:268
176186msgid "Settings"
177−msgstr ""
187+msgstr "Impostazioni"
178188
179−#: qml/Dash/PageHeader.qml:279
189+#: qml/Dash/PageHeader.qml:275
180190msgid "Remove from Favorites"
181−msgstr ""
191+msgstr "Rimuovi dai preferiti"
182192
183−#: qml/Dash/PageHeader.qml:279
193+#: qml/Dash/PageHeader.qml:275
184194msgid "Add to Favorites"
185−msgstr ""
195+msgstr "Aggiungi ai preferiti"
186196
187−#: qml/Dash/Previews/PreviewActionCombo.qml:34
197+#: qml/Dash/Previews/PreviewActionCombo.qml:35
188198msgid "More..."
189199msgstr "Altro..."
190200
191−#: qml/Dash/Previews/PreviewActionCombo.qml:34
201+#: qml/Dash/Previews/PreviewActionCombo.qml:35
192202msgid "Less..."
193203msgstr "Meno..."
194204
@@ -204,15 +214,23 @@ msgstr "Aggiungi una recensione"
204214msgid "Send"
205215msgstr "Invia"
206216
207−#: qml/Dash/ScopesOverview.qml:201
208−msgid "Manage Dash"
209−msgstr "Gestione della Dash"
217+#: qml/Dash/PullToRefreshScopeStyle.qml:55
218+msgid "Pull to refresh…"
219+msgstr ""
220+
221+#: qml/Dash/PullToRefreshScopeStyle.qml:60
222+msgid "Release to refresh…"
223+msgstr ""
210224
211−#: qml/Dash/ScopesOverview.qml:408
225+#: qml/Dash/ScopesOverview.qml:206
226+msgid "Manage Scopes"
227+msgstr "Gestisci Scope"
228+
229+#: qml/Dash/ScopesOverview.qml:428
212230msgid "Done"
213231msgstr "Fatto"
214232
215−#: qml/Dash/ScopesOverview.qml:434
233+#: qml/Dash/ScopesOverview.qml:454
216234msgid "Store"
217235msgstr "Store"
218236
@@ -225,10 +243,10 @@ msgid "All"
225243msgstr "Tutto"
226244
227245#: qml/Greeter/Greeter.qml:157
228−msgid "Swipe to unlock"
229−msgstr "Scorrere per sbloccare"
246+msgid "Unlock"
247+msgstr ""
230248
231−#: qml/Hud/HudParametrizedActionsPage.qml:132
249+#: qml/Hud/HudParametrizedActionsPage.qml:139
232250msgid "Confirm"
233251msgstr "Conferma"
234252
@@ -248,18 +266,10 @@ msgstr "Parla ora..."
248266msgid "Speaking..."
249267msgstr "Sto parlando..."
250268
251−#: qml/Notifications/NotificationMenuItemFactory.qml:105
269+#: qml/Notifications/NotificationMenuItemFactory.qml:116
252270msgid "Show password"
253271msgstr "Mostra password"
254272
255−#: qml/Notifications/NotificationMenuItemFactory.qml:120
256−msgid "Enter SIM PIN"
257−msgstr "Inserire il PIN della SIM"
258−
259−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
260−msgid "Sorry, incorrect PIN"
261−msgstr "PIN errato"
262−
263273#: qml/Panel/ActiveCallHint.qml:77
264274msgid "Tap to return to call..."
265275msgstr "Tocca per tornare alla chiamata..."
@@ -268,27 +278,31 @@ msgstr "Tocca per tornare alla chiamata..."
268278msgid "Conference"
269279msgstr "Conferenza"
270280
271−#: qml/Panel/Indicators/MenuItemFactory.qml:651
281+#: qml/Panel/Indicators/MenuItemFactory.qml:600
282+msgid "Nothing is playing"
283+msgstr "Niente in riproduzione"
284+
285+#: qml/Panel/Indicators/MenuItemFactory.qml:748
272286msgid "In queue…"
273287msgstr "In coda..."
274288
275−#: qml/Panel/Indicators/MenuItemFactory.qml:655
289+#: qml/Panel/Indicators/MenuItemFactory.qml:752
276290msgid "Downloading"
277291msgstr "Scaricamento in corso"
278292
279−#: qml/Panel/Indicators/MenuItemFactory.qml:657
293+#: qml/Panel/Indicators/MenuItemFactory.qml:754
280294msgid "Paused, tap to resume"
281295msgstr "In pausa. Tocca per riprendere"
282296
283−#: qml/Panel/Indicators/MenuItemFactory.qml:659
297+#: qml/Panel/Indicators/MenuItemFactory.qml:756
284298msgid "Canceled"
285299msgstr "Annullato"
286300
287−#: qml/Panel/Indicators/MenuItemFactory.qml:661
301+#: qml/Panel/Indicators/MenuItemFactory.qml:758
288302msgid "Finished"
289303msgstr "Completato"
290304
291−#: qml/Panel/Indicators/MenuItemFactory.qml:663
305+#: qml/Panel/Indicators/MenuItemFactory.qml:760
292306msgid "Failed, tap to retry"
293307msgstr "Non riuscito. Tocca per riprovare"
294308
@@ -300,45 +314,49 @@ msgstr "Sblocca SIM"
300314msgid "Roaming"
301315msgstr "Roaming"
302316
303−#: qml/Shell.qml:266
304−msgid "Enter your passphrase"
305−msgstr "Digitare la passphrase"
317+#: qml/Shell.qml:346
318+msgid "Enter passphrase"
319+msgstr ""
306320
307−#: qml/Shell.qml:267
321+#: qml/Shell.qml:347
308322msgid "Sorry, incorrect passphrase"
309323msgstr "Passphrase errata"
310324
311−#: qml/Shell.qml:282
312−msgid "Enter your passcode"
325+#: qml/Shell.qml:348
326+msgid "Please re-enter"
313327msgstr ""
314328
315−#: qml/Shell.qml:283
316−msgid "Sorry, incorrect passcode"
329+#: qml/Shell.qml:350
330+msgid "Enter passcode"
317331msgstr ""
318332
319−#: qml/Shell.qml:273
333+#: qml/Shell.qml:351
334+msgid "Sorry, incorrect passcode"
335+msgstr "Passcode non corretto"
336+
337+#: qml/Shell.qml:354
320338#, qt-format
321−msgid "Enter your %1"
322−msgstr "Inserire %1"
339+msgid "Enter %1"
340+msgstr ""
323341
324−#: qml/Shell.qml:274
342+#: qml/Shell.qml:355
325343#, qt-format
326344msgid "Sorry, incorrect %1"
327345msgstr "%1 non corretto"
328346
329−#: qml/Shell.qml:310
347+#: qml/Shell.qml:390
330348msgid "Sorry, incorrect passphrase."
331349msgstr "Passphrase non corretta"
332350
333−#: qml/Shell.qml:311
351+#: qml/Shell.qml:391
334352msgid "Sorry, incorrect passcode."
335353msgstr "Passcode non corretto"
336354
337−#: qml/Shell.qml:312
355+#: qml/Shell.qml:392
338356msgid "This will be your last attempt."
339357msgstr "Questo sarà l'ultimo tentativo."
340358
341−#: qml/Shell.qml:314
359+#: qml/Shell.qml:394
342360msgid ""
343361"If passphrase is entered incorrectly, your phone will conduct a factory "
344362"reset and all personal data will be deleted."
@@ -346,7 +364,7 @@ msgstr ""
346364"Se verrà inserita una passphrase errata, il telefono eseguirà un ripristino "
347365"delle impostazioni di fabbrica e tutti i dati personali verranno eliminati."
348366
349−#: qml/Shell.qml:315
367+#: qml/Shell.qml:395
350368msgid ""
351369"If passcode is entered incorrectly, your phone will conduct a factory reset "
352370"and all personal data will be deleted."
@@ -354,11 +372,8 @@ msgstr ""
354372"Se verrà inserito una passcode errato, il telefono eseguirà un ripristino "
355373"delle impostazioni di fabbrica e tutti i dati personali verranno eliminati."
356374
357−#~ msgid "Are you sure you would like to turn power off?"
358−#~ msgstr "Spegnere veramente il dispositivo?"
359−
360−#~ msgid "Restart"
361−#~ msgstr "Riavvia"
375+#~ msgid "Sorry, incorrect PIN"
376+#~ msgstr "PIN errato"
362377
363−#~ msgid "Enter your PIN"
364−#~ msgstr "Inserire il PIN"
378+#~ msgid "Enter SIM PIN"
379+#~ msgstr "Inserire il PIN della SIM"
po/ja.po+116−100
@@ -7,78 +7,102 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
11−"PO-Revision-Date: 2014-08-18 15:03+0000\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
11+"PO-Revision-Date: 2014-09-18 09:47+0000\n"
1212"Last-Translator: Mitsuya Shibata <mty.shibata@gmail.com>\n"
1313"Language-Team: Japanese <ja@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=1; plural=0;\n"
18+"X-Launchpad-Export-Date: 2014-10-09 06:36+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
2223msgstr "パスワード: "
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr "ショートカットを追加する"
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr "ショートカットを削除する"
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr ""
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr ""
41+
42+#: qml/Components/DelayedLockscreen.qml:63
43+msgid "You have been locked out due to too many failed passcode attempts."
44+msgstr ""
45+
46+#: qml/Components/DelayedLockscreen.qml:72
47+#, qt-format
48+msgid "Please wait %1 minute and then try again…"
49+msgid_plural "Please wait %1 minutes and then try again…"
50+msgstr[0] ""
51+msgstr[1] ""
52+
3353#: qml/Components/Dialogs.qml:70
3454msgid "Log out"
35−msgstr ""
55+msgstr "ログアウト"
3656
3757#: qml/Components/Dialogs.qml:71
3858msgid "Are you sure you want to log out?"
39−msgstr ""
59+msgstr "本当にログアウトしますか?"
4060
4161#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4262#: qml/Components/Dialogs.qml:122
4363msgid "No"
44−msgstr ""
64+msgstr "いいえ"
4565
4666#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4767#: qml/Components/Dialogs.qml:129
4868msgid "Yes"
49−msgstr ""
69+msgstr "はい"
5070
5171#: qml/Components/Dialogs.qml:94
5272msgid "Shut down"
53−msgstr ""
73+msgstr "シャットダウン"
5474
5575#: qml/Components/Dialogs.qml:95
5676msgid "Are you sure you want to shut down?"
57−msgstr ""
77+msgstr "本当にシャットダウンしますか?"
5878
5979#: qml/Components/Dialogs.qml:119
6080msgid "Reboot"
61−msgstr ""
81+msgstr "再起動"
6282
6383#: qml/Components/Dialogs.qml:120
6484msgid "Are you sure you want to reboot?"
65−msgstr ""
85+msgstr "本当に再起動しますか?"
6686
6787#: qml/Components/Dialogs.qml:144
6888msgid "Power"
69−msgstr ""
89+msgstr "電源"
7090
7191#: qml/Components/Dialogs.qml:145
7292msgid ""
7393"Are you sure you would like\n"
7494"to power off?"
75−msgstr ""
95+msgstr "本当に電源を切りますか?"
7696
77−#: qml/Components/Dialogs.qml:144
97+#: qml/Components/Dialogs.qml:147
7898msgid "Power off"
7999msgstr "電源を切る"
80100
81−#: qml/Components/Dialogs.qml:162
101+#: qml/Components/Dialogs.qml:157
102+msgid "Restart"
103+msgstr "再起動"
104+
105+#: qml/Components/Dialogs.qml:167
82106msgid "Cancel"
83107msgstr "キャンセル"
84108
@@ -129,60 +153,44 @@ msgid ""
129153msgstr ""
130154"これでスマートフォンの操作に必要な、画面端を用いたジェスチャーを習得できました。<br><br>利用を開始するなら画面をタップしてください"
131155
132−#: qml/Components/Lockscreen.qml:167
133−msgid "Please wait"
134−msgstr "お待ちください"
135−
136−#: qml/Components/Lockscreen.qml:172
137−msgid "Too many incorrect attempts"
138−msgstr "失敗回数が上限に達しました"
139−
140−#: qml/Components/Lockscreen.qml:206
156+#: qml/Components/Lockscreen.qml:220
141157msgid "Emergency Call"
142158msgstr "緊急通報"
143159
144−#: qml/Components/Lockscreen.qml:226
160+#: qml/Components/Lockscreen.qml:252
145161msgid "OK"
146162msgstr "OK"
147163
148−#: qml/Components/PassphraseLockscreen.qml:61
149−#, qt-format
150−msgid "Hello %1"
151−msgstr "こんにちは %1 さん"
152−
153−#: qml/Components/PassphraseLockscreen.qml:61
154−msgid "Hello"
155−msgstr "こんにちは"
156−
157−#: qml/Dash/GenericScopeView.qml:361
164+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
158165msgid "See less"
159−msgstr ""
166+msgstr "隠す"
160167
161−#: qml/Dash/GenericScopeView.qml:361
168+#: qml/Dash/GenericScopeView.qml:434
162169msgid "See all"
163170msgstr "すべて表示する"
164171
165−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
172+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
173+#: qml/Panel/SearchIndicator.qml:27
166174msgid "Search"
167175msgstr "検索"
168176
169−#: qml/Dash/PageHeader.qml:270
177+#: qml/Dash/PageHeader.qml:268
170178msgid "Settings"
171−msgstr ""
179+msgstr "設定"
172180
173−#: qml/Dash/PageHeader.qml:279
181+#: qml/Dash/PageHeader.qml:275
174182msgid "Remove from Favorites"
175−msgstr ""
183+msgstr "お気に入りから削除する"
176184
177−#: qml/Dash/PageHeader.qml:279
185+#: qml/Dash/PageHeader.qml:275
178186msgid "Add to Favorites"
179−msgstr ""
187+msgstr "お気に入りに追加する"
180188
181−#: qml/Dash/Previews/PreviewActionCombo.qml:34
189+#: qml/Dash/Previews/PreviewActionCombo.qml:35
182190msgid "More..."
183191msgstr "さらに ..."
184192
185−#: qml/Dash/Previews/PreviewActionCombo.qml:34
193+#: qml/Dash/Previews/PreviewActionCombo.qml:35
186194msgid "Less..."
187195msgstr "隠す..."
188196
@@ -198,15 +206,23 @@ msgstr "レビューを追加"
198206msgid "Send"
199207msgstr "送信"
200208
201−#: qml/Dash/ScopesOverview.qml:201
202−msgid "Manage Dash"
203−msgstr "Dashの管理"
209+#: qml/Dash/PullToRefreshScopeStyle.qml:55
210+msgid "Pull to refresh…"
211+msgstr ""
212+
213+#: qml/Dash/PullToRefreshScopeStyle.qml:60
214+msgid "Release to refresh…"
215+msgstr ""
216+
217+#: qml/Dash/ScopesOverview.qml:206
218+msgid "Manage Scopes"
219+msgstr ""
204220
205−#: qml/Dash/ScopesOverview.qml:408
221+#: qml/Dash/ScopesOverview.qml:428
206222msgid "Done"
207223msgstr "完了"
208224
209−#: qml/Dash/ScopesOverview.qml:434
225+#: qml/Dash/ScopesOverview.qml:454
210226msgid "Store"
211227msgstr "保存"
212228
@@ -219,10 +235,10 @@ msgid "All"
219235msgstr "すべて"
220236
221237#: qml/Greeter/Greeter.qml:157
222−msgid "Swipe to unlock"
223−msgstr "スワイプしてロック解除"
238+msgid "Unlock"
239+msgstr ""
224240
225−#: qml/Hud/HudParametrizedActionsPage.qml:132
241+#: qml/Hud/HudParametrizedActionsPage.qml:139
226242msgid "Confirm"
227243msgstr "確認"
228244
@@ -242,47 +258,43 @@ msgstr "音声入力を開始..."
242258msgid "Speaking..."
243259msgstr "入力中..."
244260
245−#: qml/Notifications/NotificationMenuItemFactory.qml:105
261+#: qml/Notifications/NotificationMenuItemFactory.qml:116
246262msgid "Show password"
247263msgstr "パスワードを表示"
248264
249−#: qml/Notifications/NotificationMenuItemFactory.qml:120
250−msgid "Enter SIM PIN"
251−msgstr ""
252−
253−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
254−msgid "Sorry, incorrect PIN"
255−msgstr ""
256−
257265#: qml/Panel/ActiveCallHint.qml:77
258266msgid "Tap to return to call..."
259267msgstr "タップすると通話に戻ります..."
260268
261269#: qml/Panel/ActiveCallHint.qml:90
262270msgid "Conference"
271+msgstr "グループ通話"
272+
273+#: qml/Panel/Indicators/MenuItemFactory.qml:600
274+msgid "Nothing is playing"
263275msgstr ""
264276
265−#: qml/Panel/Indicators/MenuItemFactory.qml:651
277+#: qml/Panel/Indicators/MenuItemFactory.qml:748
266278msgid "In queue…"
267−msgstr ""
279+msgstr "開始待ち..."
268280
269−#: qml/Panel/Indicators/MenuItemFactory.qml:655
281+#: qml/Panel/Indicators/MenuItemFactory.qml:752
270282msgid "Downloading"
271283msgstr "ダウンロード中"
272284
273−#: qml/Panel/Indicators/MenuItemFactory.qml:657
285+#: qml/Panel/Indicators/MenuItemFactory.qml:754
274286msgid "Paused, tap to resume"
275287msgstr "停止中、再開するにはタップしてください"
276288
277−#: qml/Panel/Indicators/MenuItemFactory.qml:659
289+#: qml/Panel/Indicators/MenuItemFactory.qml:756
278290msgid "Canceled"
279−msgstr ""
291+msgstr "中止しました"
280292
281−#: qml/Panel/Indicators/MenuItemFactory.qml:661
293+#: qml/Panel/Indicators/MenuItemFactory.qml:758
282294msgid "Finished"
283−msgstr ""
295+msgstr "完了しました"
284296
285−#: qml/Panel/Indicators/MenuItemFactory.qml:663
297+#: qml/Panel/Indicators/MenuItemFactory.qml:760
286298msgid "Failed, tap to retry"
287299msgstr "失敗しました、再試行するにはタップしてください"
288300
@@ -294,58 +306,62 @@ msgstr "SIMのアンロック"
294306msgid "Roaming"
295307msgstr "ローミング"
296308
297−#: qml/Shell.qml:266
298−msgid "Enter your passphrase"
309+#: qml/Shell.qml:346
310+msgid "Enter passphrase"
299311msgstr ""
300312
301−#: qml/Shell.qml:267
313+#: qml/Shell.qml:347
302314msgid "Sorry, incorrect passphrase"
315+msgstr "パスフレーズが違います"
316+
317+#: qml/Shell.qml:348
318+msgid "Please re-enter"
303319msgstr ""
304320
305−#: qml/Shell.qml:282
306−msgid "Enter your passcode"
321+#: qml/Shell.qml:350
322+msgid "Enter passcode"
307323msgstr ""
308324
309−#: qml/Shell.qml:283
325+#: qml/Shell.qml:351
310326msgid "Sorry, incorrect passcode"
311−msgstr ""
327+msgstr "パスコードが違います"
312328
313−#: qml/Shell.qml:273
329+#: qml/Shell.qml:354
314330#, qt-format
315−msgid "Enter your %1"
316−msgstr "%1を入力してください"
331+msgid "Enter %1"
332+msgstr ""
317333
318−#: qml/Shell.qml:274
334+#: qml/Shell.qml:355
319335#, qt-format
320336msgid "Sorry, incorrect %1"
321−msgstr ""
337+msgstr "%1が違います"
322338
323−#: qml/Shell.qml:310
339+#: qml/Shell.qml:390
324340msgid "Sorry, incorrect passphrase."
325341msgstr "パスフレーズが間違っています。"
326342
327−#: qml/Shell.qml:311
343+#: qml/Shell.qml:391
328344msgid "Sorry, incorrect passcode."
329345msgstr "パスコードが間違っています。"
330346
331−#: qml/Shell.qml:312
347+#: qml/Shell.qml:392
332348msgid "This will be your last attempt."
333349msgstr "これが最後のチャンスです。"
334350
335−#: qml/Shell.qml:314
351+#: qml/Shell.qml:394
336352msgid ""
337353"If passphrase is entered incorrectly, your phone will conduct a factory "
338354"reset and all personal data will be deleted."
339−msgstr ""
355+msgstr "パスフレーズが間違っている場合、ファクトリーリセットを実施し、すべての個人データは削除されます。"
340356
341−#: qml/Shell.qml:315
357+#: qml/Shell.qml:395
342358msgid ""
343359"If passcode is entered incorrectly, your phone will conduct a factory reset "
344360"and all personal data will be deleted."
345−msgstr ""
361+msgstr "パスコードが間違っている場合、ファクトリーリセットを実施し、すべての個人データは削除されます。"
346362
347−#~ msgid "Are you sure you would like to turn power off?"
348−#~ msgstr "本当に電源を切りますか?"
363+#~ msgid "Sorry, incorrect PIN"
364+#~ msgstr "PINが違います"
349365
350−#~ msgid "Restart"
351−#~ msgstr "再起動"
366+#~ msgid "Enter SIM PIN"
367+#~ msgstr "SIM PINの入力"
po/km.po+111−93
@@ -7,78 +7,104 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
1111"PO-Revision-Date: 2014-08-20 02:48+0000\n"
12−"Last-Translator: Sok Sophea <sksophea@gmail.com>\n"
12+"Last-Translator: Sophea Sok <sksophea@gmail.com>\n"
1313"Language-Team: Khmer <km@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=1; plural=0;\n"
18+"X-Launchpad-Export-Date: 2014-10-09 06:36+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
2223msgstr "ពាក្យសម្ងាត់៖ "
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr "ភ្ជាប់​ផ្លូវកាត់"
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr "មិន​ភ្ជាប់ផ្លូវកាត់"
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr ""
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr ""
41+
42+#: qml/Components/DelayedLockscreen.qml:63
43+msgid "You have been locked out due to too many failed passcode attempts."
44+msgstr ""
45+
46+#: qml/Components/DelayedLockscreen.qml:72
47+#, qt-format
48+msgid "Please wait %1 minute and then try again…"
49+msgid_plural "Please wait %1 minutes and then try again…"
50+msgstr[0] ""
51+msgstr[1] ""
52+
3353#: qml/Components/Dialogs.qml:70
3454msgid "Log out"
35−msgstr ""
55+msgstr "ចេញ"
3656
3757#: qml/Components/Dialogs.qml:71
3858msgid "Are you sure you want to log out?"
39−msgstr ""
59+msgstr "តើ​អ្នក​ពិតជា​ចង់​ចេញ​មែន​ឬ?"
4060
4161#: qml/Components/Dialogs.qml:73 qml/Components/Dialogs.qml:97
4262#: qml/Components/Dialogs.qml:122
4363msgid "No"
44−msgstr ""
64+msgstr "ទេ"
4565
4666#: qml/Components/Dialogs.qml:80 qml/Components/Dialogs.qml:104
4767#: qml/Components/Dialogs.qml:129
4868msgid "Yes"
49−msgstr ""
69+msgstr "បាទ/ចាស"
5070
5171#: qml/Components/Dialogs.qml:94
5272msgid "Shut down"
53−msgstr ""
73+msgstr "បិទ"
5474
5575#: qml/Components/Dialogs.qml:95
5676msgid "Are you sure you want to shut down?"
57−msgstr ""
77+msgstr "តើ​អ្នក​ពិតជា​ចង់​បិទ​មែន​ឬ?"
5878
5979#: qml/Components/Dialogs.qml:119
6080msgid "Reboot"
61−msgstr ""
81+msgstr "ចាប់ផ្ដើម​ឡើងវិញ"
6282
6383#: qml/Components/Dialogs.qml:120
6484msgid "Are you sure you want to reboot?"
65−msgstr ""
85+msgstr "តើ​អ្នក​ពិតជា​ចង់​ចាប់ផ្ដើម​ឡើងវិញ​មែន​ឬ?"
6686
6787#: qml/Components/Dialogs.qml:144
6888msgid "Power"
69−msgstr ""
89+msgstr "បីទ/បើក"
7090
7191#: qml/Components/Dialogs.qml:145
7292msgid ""
7393"Are you sure you would like\n"
7494"to power off?"
7595msgstr ""
96+"តើ​អ្នក​ពិតជា​ចង់\n"
97+"បិទ​មែន​ឬ?"
7698
77−#: qml/Components/Dialogs.qml:144
99+#: qml/Components/Dialogs.qml:147
78100msgid "Power off"
79101msgstr "បិទ"
80102
81−#: qml/Components/Dialogs.qml:162
103+#: qml/Components/Dialogs.qml:157
104+msgid "Restart"
105+msgstr "ចាប់​ផ្ដើម​ឡើង​វិញ"
106+
107+#: qml/Components/Dialogs.qml:167
82108msgid "Cancel"
83109msgstr "បោះបង់"
84110
@@ -132,60 +158,44 @@ msgstr ""
132158"ឥឡូវ​អ្នក​បាន​ពិនិត្យ​កាយវិការ​គែម​ "
133159"និង​អាច​ចាប់ផ្ដើម​ប្រើ​ទូរស័ព្ទ<br><br>ប៉ះ លើ​អេក្រង់​ដើម្បី​ចាប់ផ្ដើម"
134160
135−#: qml/Components/Lockscreen.qml:167
136−msgid "Please wait"
137−msgstr "សូមរង់ចាំ"
138−
139−#: qml/Components/Lockscreen.qml:172
140−msgid "Too many incorrect attempts"
141−msgstr "បាន​ព្យាយាម​ខុស​ច្រើន​ដង​ពេក"
142−
143−#: qml/Components/Lockscreen.qml:206
161+#: qml/Components/Lockscreen.qml:220
144162msgid "Emergency Call"
145163msgstr "ការ​ហៅ​ពេល​អាសន្ន"
146164
147−#: qml/Components/Lockscreen.qml:226
165+#: qml/Components/Lockscreen.qml:252
148166msgid "OK"
149167msgstr "យល់ព្រម"
150168
151−#: qml/Components/PassphraseLockscreen.qml:61
152−#, qt-format
153−msgid "Hello %1"
154−msgstr "សួស្ដី %1"
155−
156−#: qml/Components/PassphraseLockscreen.qml:61
157−msgid "Hello"
158−msgstr "សួស្តី"
159−
160−#: qml/Dash/GenericScopeView.qml:361
169+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
161170msgid "See less"
162171msgstr "មើល​តិច​ជាង"
163172
164−#: qml/Dash/GenericScopeView.qml:361
173+#: qml/Dash/GenericScopeView.qml:434
165174msgid "See all"
166175msgstr "មើល​ទាំងអស់"
167176
168−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
177+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
178+#: qml/Panel/SearchIndicator.qml:27
169179msgid "Search"
170180msgstr "ស្វែង​រក"
171181
172−#: qml/Dash/PageHeader.qml:270
182+#: qml/Dash/PageHeader.qml:268
173183msgid "Settings"
174−msgstr ""
184+msgstr "ការកំណត់"
175185
176−#: qml/Dash/PageHeader.qml:279
186+#: qml/Dash/PageHeader.qml:275
177187msgid "Remove from Favorites"
178−msgstr ""
188+msgstr "យក​ចេញពី​សំណព្វ"
179189
180−#: qml/Dash/PageHeader.qml:279
190+#: qml/Dash/PageHeader.qml:275
181191msgid "Add to Favorites"
182−msgstr ""
192+msgstr "បន្ថែម​ទៅ​សណព្វ"
183193
184−#: qml/Dash/Previews/PreviewActionCombo.qml:34
194+#: qml/Dash/Previews/PreviewActionCombo.qml:35
185195msgid "More..."
186196msgstr "ច្រើនជាង​..."
187197
188−#: qml/Dash/Previews/PreviewActionCombo.qml:34
198+#: qml/Dash/Previews/PreviewActionCombo.qml:35
189199msgid "Less..."
190200msgstr "តិច​ជាង..."
191201
@@ -201,15 +211,23 @@ msgstr "បន្ថែម​ការ​ពិនិត្យ"
201211msgid "Send"
202212msgstr "ផ្ញើ"
203213
204−#: qml/Dash/ScopesOverview.qml:201
205−msgid "Manage Dash"
206−msgstr "គ្រប់គ្រង​ផ្ទាំង"
214+#: qml/Dash/PullToRefreshScopeStyle.qml:55
215+msgid "Pull to refresh…"
216+msgstr ""
217+
218+#: qml/Dash/PullToRefreshScopeStyle.qml:60
219+msgid "Release to refresh…"
220+msgstr ""
221+
222+#: qml/Dash/ScopesOverview.qml:206
223+msgid "Manage Scopes"
224+msgstr ""
207225
208−#: qml/Dash/ScopesOverview.qml:408
226+#: qml/Dash/ScopesOverview.qml:428
209227msgid "Done"
210228msgstr "ធ្វើរួច"
211229
212−#: qml/Dash/ScopesOverview.qml:434
230+#: qml/Dash/ScopesOverview.qml:454
213231msgid "Store"
214232msgstr "រក្សាទុក"
215233
@@ -222,10 +240,10 @@ msgid "All"
222240msgstr "ទាំងអស់"
223241
224242#: qml/Greeter/Greeter.qml:157
225−msgid "Swipe to unlock"
226−msgstr "អូស​ដើម្បី​ដោះសោ"
243+msgid "Unlock"
244+msgstr ""
227245
228−#: qml/Hud/HudParametrizedActionsPage.qml:132
246+#: qml/Hud/HudParametrizedActionsPage.qml:139
229247msgid "Confirm"
230248msgstr "បញ្ជាក់"
231249
@@ -245,18 +263,10 @@ msgstr "និយាយ​ឥឡូវ..."
245263msgid "Speaking..."
246264msgstr "កំពុង​និយាយ..."
247265
248−#: qml/Notifications/NotificationMenuItemFactory.qml:105
266+#: qml/Notifications/NotificationMenuItemFactory.qml:116
249267msgid "Show password"
250268msgstr "បង្ហាញ​ពាក្យ​សម្ងាត់"
251269
252−#: qml/Notifications/NotificationMenuItemFactory.qml:120
253−msgid "Enter SIM PIN"
254−msgstr ""
255−
256−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
257−msgid "Sorry, incorrect PIN"
258−msgstr ""
259−
260270#: qml/Panel/ActiveCallHint.qml:77
261271msgid "Tap to return to call..."
262272msgstr "ប៉ះ​ដើម្បី​ត្រឡប់​ទៅ​ការ​ហៅ..."
@@ -265,27 +275,31 @@ msgstr "ប៉ះ​ដើម្បី​ត្រឡប់​ទៅ​ការ
265275msgid "Conference"
266276msgstr "សន្និសីទ"
267277
268−#: qml/Panel/Indicators/MenuItemFactory.qml:651
278+#: qml/Panel/Indicators/MenuItemFactory.qml:600
279+msgid "Nothing is playing"
280+msgstr ""
281+
282+#: qml/Panel/Indicators/MenuItemFactory.qml:748
269283msgid "In queue…"
270284msgstr "ក្នុងជួរ…"
271285
272−#: qml/Panel/Indicators/MenuItemFactory.qml:655
286+#: qml/Panel/Indicators/MenuItemFactory.qml:752
273287msgid "Downloading"
274288msgstr "ទាញយក"
275289
276−#: qml/Panel/Indicators/MenuItemFactory.qml:657
290+#: qml/Panel/Indicators/MenuItemFactory.qml:754
277291msgid "Paused, tap to resume"
278292msgstr "បាន​ផ្អាក, ប៉ះ ដើម្បីបន្ត"
279293
280−#: qml/Panel/Indicators/MenuItemFactory.qml:659
294+#: qml/Panel/Indicators/MenuItemFactory.qml:756
281295msgid "Canceled"
282296msgstr "បាន​បោះបង់"
283297
284−#: qml/Panel/Indicators/MenuItemFactory.qml:661
298+#: qml/Panel/Indicators/MenuItemFactory.qml:758
285299msgid "Finished"
286300msgstr "បាន​បញ្ចប់"
287301
288−#: qml/Panel/Indicators/MenuItemFactory.qml:663
302+#: qml/Panel/Indicators/MenuItemFactory.qml:760
289303msgid "Failed, tap to retry"
290304msgstr "បាន​បរាជ័យ ប៉ះ​ ដើម្បី​ព្យាយាម​ម្ដង​ទៀត"
291305
@@ -297,45 +311,49 @@ msgstr "ដោះ​សោ​ស៊ីម"
297311msgid "Roaming"
298312msgstr "រ៉ូមីង"
299313
300−#: qml/Shell.qml:266
301−msgid "Enter your passphrase"
314+#: qml/Shell.qml:346
315+msgid "Enter passphrase"
302316msgstr ""
303317
304−#: qml/Shell.qml:267
318+#: qml/Shell.qml:347
305319msgid "Sorry, incorrect passphrase"
320+msgstr "សូមទោស! ឃ្លា​សម្ងាត់​មិន​ត្រឹមត្រូវ"
321+
322+#: qml/Shell.qml:348
323+msgid "Please re-enter"
306324msgstr ""
307325
308−#: qml/Shell.qml:282
309−msgid "Enter your passcode"
326+#: qml/Shell.qml:350
327+msgid "Enter passcode"
310328msgstr ""
311329
312−#: qml/Shell.qml:283
330+#: qml/Shell.qml:351
313331msgid "Sorry, incorrect passcode"
314−msgstr ""
332+msgstr "សូមទោស! កូដ​សម្ងាត់​មិន​ត្រឹមត្រូវ"
315333
316−#: qml/Shell.qml:273
334+#: qml/Shell.qml:354
317335#, qt-format
318−msgid "Enter your %1"
319−msgstr "បញ្ចូល %1 របស់​អ្នក"
336+msgid "Enter %1"
337+msgstr ""
320338
321−#: qml/Shell.qml:274
339+#: qml/Shell.qml:355
322340#, qt-format
323341msgid "Sorry, incorrect %1"
324−msgstr ""
342+msgstr "សូមទោស! %1 មិន​ត្រឹមត្រូវ"
325343
326−#: qml/Shell.qml:310
344+#: qml/Shell.qml:390
327345msgid "Sorry, incorrect passphrase."
328346msgstr "សូមទោស! ឃ្លា​សម្ងាត់​មិន​ត្រឹមត្រូវ។"
329347
330−#: qml/Shell.qml:311
348+#: qml/Shell.qml:391
331349msgid "Sorry, incorrect passcode."
332350msgstr "សូមទោស! កូដ​សម្ងាត់​មិន​ត្រឹមត្រូវ។"
333351
334−#: qml/Shell.qml:312
352+#: qml/Shell.qml:392
335353msgid "This will be your last attempt."
336354msgstr "នេះ​គឺ​ការ​ព្យាយាម​លើក​ចុងក្រោយ។"
337355
338−#: qml/Shell.qml:314
356+#: qml/Shell.qml:394
339357msgid ""
340358"If passphrase is entered incorrectly, your phone will conduct a factory "
341359"reset and all personal data will be deleted."
@@ -344,7 +362,7 @@ msgstr ""
344362"ទូរស័ព្ទ​របស់​អ្នក​នឹង​កំណត់​ទៅ​ទិន្នន័យ​ពី​រោងចក្រ​វិញ "
345363"ហើយ​ទិន្នន័យ​ផ្ទាល់ខ្លួន​ទាំងអស់​របស់​អ្នក​នឹង​ត្រូវ​បាន​លុប។"
346364
347−#: qml/Shell.qml:315
365+#: qml/Shell.qml:395
348366msgid ""
349367"If passcode is entered incorrectly, your phone will conduct a factory reset "
350368"and all personal data will be deleted."
@@ -353,8 +371,8 @@ msgstr ""
353371"ទូរស័ព្ទ​របស់​អ្នក​នឹង​កំណត់​ទៅ​ទិន្នន័យ​ពី​រោងចក្រ​វិញ "
354372"ហើយ​ទិន្នន័យ​ផ្ទាល់ខ្លួន​ទាំងអស់​របស់​អ្នក​នឹង​ត្រូវ​បាន​លុប។"
355373
356−#~ msgid "Are you sure you would like to turn power off?"
357−#~ msgstr "តើ​អ្នក​ពិតជា​ចង់​បិទ​មែន​ឬ?"
374+#~ msgid "Sorry, incorrect PIN"
375+#~ msgstr "សូមទោស! លេខ​កូដ PIN មិន​ត្រឹមត្រូវ"
358376
359−#~ msgid "Restart"
360−#~ msgstr "ចាប់ផ្ដើម​ឡើងវិញ"
377+#~ msgid "Enter SIM PIN"
378+#~ msgstr "បញ្ចូល​លេខ​កូដ PIN ស៊ីម"
po/kn.po+87−71
@@ -7,29 +7,49 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-08-26 18:24+0200\n"
10+"POT-Creation-Date: 2014-10-07 11:37+0300\n"
1111"PO-Revision-Date: 2013-06-27 05:43+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Kannada <kn@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-08-28 06:30+0000\n"
18−"X-Generator: Launchpad (build 17174)\n"
17+"Plural-Forms: nplurals=2; plural=n != 1;\n"
18+"X-Launchpad-Export-Date: 2014-10-09 06:36+0000\n"
19+"X-Generator: Launchpad (build 17196)\n"
1920
20−#: plugins/LightDM/Greeter.cpp:129
21+#: plugins/LightDM/Greeter.cpp:130
2122msgid "Password: "
2223msgstr ""
2324
24−#: plugins/Unity/Launcher/launcheritem.cpp:43
25−#: plugins/Unity/Launcher/launcheritem.cpp:73
25+#: plugins/Unity/Launcher/launcheritem.cpp:45
26+#: plugins/Unity/Launcher/launcheritem.cpp:91
2627msgid "Pin shortcut"
2728msgstr ""
2829
29−#: plugins/Unity/Launcher/launcheritem.cpp:73
30+#: plugins/Unity/Launcher/launcheritem.cpp:91
3031msgid "Unpin shortcut"
3132msgstr ""
3233
34+#: qml/Components/DelayedLockscreen.qml:47
35+msgid "Device Locked"
36+msgstr ""
37+
38+#: qml/Components/DelayedLockscreen.qml:62
39+msgid "You have been locked out due to too many failed passphrase attempts."
40+msgstr ""
41+
42+#: qml/Components/DelayedLockscreen.qml:63
43+msgid "You have been locked out due to too many failed passcode attempts."
44+msgstr ""
45+
46+#: qml/Components/DelayedLockscreen.qml:72
47+#, qt-format
48+msgid "Please wait %1 minute and then try again…"
49+msgid_plural "Please wait %1 minutes and then try again…"
50+msgstr[0] ""
51+msgstr[1] ""
52+
3353#: qml/Components/Dialogs.qml:70
3454msgid "Log out"
3555msgstr ""
@@ -74,11 +94,15 @@ msgid ""
7494"to power off?"
7595msgstr ""
7696
77−#: qml/Components/Dialogs.qml:144
97+#: qml/Components/Dialogs.qml:147
7898msgid "Power off"
7999msgstr ""
80100
81−#: qml/Components/Dialogs.qml:162
101+#: qml/Components/Dialogs.qml:157
102+msgid "Restart"
103+msgstr ""
104+
105+#: qml/Components/Dialogs.qml:167
82106msgid "Cancel"
83107msgstr ""
84108
@@ -128,60 +152,44 @@ msgid ""
128152"phone<br><br>Tap on the screen to start"
129153msgstr ""
130154
131−#: qml/Components/Lockscreen.qml:167
132−msgid "Please wait"
133−msgstr ""
134−
135−#: qml/Components/Lockscreen.qml:172
136−msgid "Too many incorrect attempts"
137−msgstr ""
138−
139−#: qml/Components/Lockscreen.qml:206
155+#: qml/Components/Lockscreen.qml:220
140156msgid "Emergency Call"
141157msgstr ""
142158
143−#: qml/Components/Lockscreen.qml:226
159+#: qml/Components/Lockscreen.qml:252
144160msgid "OK"
145161msgstr ""
146162
147−#: qml/Components/PassphraseLockscreen.qml:61
148−#, qt-format
149−msgid "Hello %1"
150−msgstr ""
151−
152−#: qml/Components/PassphraseLockscreen.qml:61
153−msgid "Hello"
154−msgstr ""
155−
156−#: qml/Dash/GenericScopeView.qml:361
163+#: qml/Dash/GenericScopeView.qml:434 qml/Dash/GenericScopeView.qml:591
157164msgid "See less"
158165msgstr ""
159166
160−#: qml/Dash/GenericScopeView.qml:361
167+#: qml/Dash/GenericScopeView.qml:434
161168msgid "See all"
162169msgstr ""
163170
164−#: qml/Dash/GenericScopeView.qml:424 qml/Panel/SearchIndicator.qml:27
171+#: qml/Dash/GenericScopeView.qml:496 qml/Dash/PageHeader.qml:258
172+#: qml/Panel/SearchIndicator.qml:27
165173msgid "Search"
166174msgstr "ಹುಡುಕು"
167175
168−#: qml/Dash/PageHeader.qml:270
176+#: qml/Dash/PageHeader.qml:268
169177msgid "Settings"
170178msgstr ""
171179
172−#: qml/Dash/PageHeader.qml:279
180+#: qml/Dash/PageHeader.qml:275
173181msgid "Remove from Favorites"
174182msgstr ""
175183
176−#: qml/Dash/PageHeader.qml:279
184+#: qml/Dash/PageHeader.qml:275
177185msgid "Add to Favorites"
178186msgstr ""
179187
180−#: qml/Dash/Previews/PreviewActionCombo.qml:34
188+#: qml/Dash/Previews/PreviewActionCombo.qml:35
181189msgid "More..."
182190msgstr ""
183191
184−#: qml/Dash/Previews/PreviewActionCombo.qml:34
192+#: qml/Dash/Previews/PreviewActionCombo.qml:35
185193msgid "Less..."
186194msgstr ""
187195
@@ -197,15 +205,23 @@ msgstr ""
197205msgid "Send"
198206msgstr ""
199207
200−#: qml/Dash/ScopesOverview.qml:201
201−msgid "Manage Dash"
208+#: qml/Dash/PullToRefreshScopeStyle.qml:55
209+msgid "Pull to refresh…"
210+msgstr ""
211+
212+#: qml/Dash/PullToRefreshScopeStyle.qml:60
213+msgid "Release to refresh…"
214+msgstr ""
215+
216+#: qml/Dash/ScopesOverview.qml:206
217+msgid "Manage Scopes"
202218msgstr ""
203219
204−#: qml/Dash/ScopesOverview.qml:408
220+#: qml/Dash/ScopesOverview.qml:428
205221msgid "Done"
206222msgstr ""
207223
208−#: qml/Dash/ScopesOverview.qml:434
224+#: qml/Dash/ScopesOverview.qml:454
209225msgid "Store"
210226msgstr ""
211227
@@ -218,10 +234,10 @@ msgid "All"
218234msgstr ""
219235
220236#: qml/Greeter/Greeter.qml:157
221−msgid "Swipe to unlock"
237+msgid "Unlock"
222238msgstr ""
223239
224−#: qml/Hud/HudParametrizedActionsPage.qml:132
240+#: qml/Hud/HudParametrizedActionsPage.qml:139
225241msgid "Confirm"
226242msgstr "ಖಚಿತಪಡಿಸು"
227243
@@ -241,18 +257,10 @@ msgstr "ಈಗ ಮಾತನಾಡಿ ..."
241257msgid "Speaking..."
242258msgstr "ಮಾತನಾಡುತಿದ್ದೀರಿ"
243259
244−#: qml/Notifications/NotificationMenuItemFactory.qml:105
260+#: qml/Notifications/NotificationMenuItemFactory.qml:116
245261msgid "Show password"
246262msgstr ""
247263
248−#: qml/Notifications/NotificationMenuItemFactory.qml:120
249−msgid "Enter SIM PIN"
250−msgstr ""
251−
252−#: qml/Notifications/NotificationMenuItemFactory.qml:121 qml/Shell.qml:270
253−msgid "Sorry, incorrect PIN"
254−msgstr ""
255−
256264#: qml/Panel/ActiveCallHint.qml:77
257265msgid "Tap to return to call..."
258266msgstr ""
@@ -261,27 +269,31 @@ msgstr ""
261269msgid "Conference"
262270msgstr ""
263271
264−#: qml/Panel/Indicators/MenuItemFactory.qml:651
272+#: qml/Panel/Indicators/MenuItemFactory.qml:600
273+msgid "Nothing is playing"
274+msgstr ""
275+
276+#: qml/Panel/Indicators/MenuItemFactory.qml:748
265277msgid "In queue…"
266278msgstr ""
267279
268−#: qml/Panel/Indicators/MenuItemFactory.qml:655
280+#: qml/Panel/Indicators/MenuItemFactory.qml:752
269281msgid "Downloading"
270282msgstr ""
271283
272−#: qml/Panel/Indicators/MenuItemFactory.qml:657
284+#: qml/Panel/Indicators/MenuItemFactory.qml:754
273285msgid "Paused, tap to resume"
274286msgstr ""
275287
276−#: qml/Panel/Indicators/MenuItemFactory.qml:659
288+#: qml/Panel/Indicators/MenuItemFactory.qml:756
277289msgid "Canceled"
278290msgstr ""
279291
280−#: qml/Panel/Indicators/MenuItemFactory.qml:661
292+#: qml/Panel/Indicators/MenuItemFactory.qml:758
281293msgid "Finished"
282294msgstr ""
283295
284−#: qml/Panel/Indicators/MenuItemFactory.qml:663
296+#: qml/Panel/Indicators/MenuItemFactory.qml:760
285297msgid "Failed, tap to retry"
286298msgstr ""
287299
@@ -293,51 +305,55 @@ msgstr ""
293305msgid "Roaming"
294306msgstr ""
295307
296−#: qml/Shell.qml:266
297−msgid "Enter your passphrase"
308+#: qml/Shell.qml:346
309+msgid "Enter passphrase"
298310msgstr ""
299311
300−#: qml/Shell.qml:267
312+#: qml/Shell.qml:347
301313msgid "Sorry, incorrect passphrase"
302314msgstr ""
303315
304−#: qml/Shell.qml:282
305−msgid "Enter your passcode"
316+#: qml/Shell.qml:348
317+msgid "Please re-enter"
318+msgstr ""
319+
320+#: qml/Shell.qml:350
321+msgid "Enter passcode"
306322msgstr ""
307323
308−#: qml/Shell.qml:283
324+#: qml/Shell.qml:351
309325msgid "Sorry, incorrect passcode"
310326msgstr ""
311327
312−#: qml/Shell.qml:273
328+#: qml/Shell.qml:354
313329#, qt-format
314−msgid "Enter your %1"
330+msgid "Enter %1"
315331msgstr ""
316332
317−#: qml/Shell.qml:274
333+#: qml/Shell.qml:355
318334#, qt-format
319335msgid "Sorry, incorrect %1"
320336msgstr ""
321337
322−#: qml/Shell.qml:310
338+#: qml/Shell.qml:390
323339msgid "Sorry, incorrect passphrase."
324340msgstr ""
325341
326−#: qml/Shell.qml:311
342+#: qml/Shell.qml:391
327343msgid "Sorry, incorrect passcode."
328344msgstr ""
329345
330−#: qml/Shell.qml:312
346+#: qml/Shell.qml:392
331347msgid "This will be your last attempt."
332348msgstr ""
333349
334−#: qml/Shell.qml:314
350+#: qml/Shell.qml:394
335351msgid ""
336352"If passphrase is entered incorrectly, your phone will conduct a factory "
337353"reset and all personal data will be deleted."
338354msgstr ""
339355
340−#: qml/Shell.qml:315
356+#: qml/Shell.qml:395
341357msgid ""
342358"If passcode is entered incorrectly, your phone will conduct a factory reset "
343359"and all personal data will be deleted."
po/ko.po+136−124

This diff is too big to show here.

po/ku.ponew file+373

This diff is too big to show here.

po/ky.po+87−71

This diff is too big to show here.

po/lo.po+87−71

This diff is too big to show here.

po/lt.po+89−72

This diff is too big to show here.

po/lv.po+99−86

This diff is too big to show here.

po/ml.po+87−71

This diff is too big to show here.

po/mr.po+87−71

This diff is too big to show here.

po/ms.po+87−71

This diff is too big to show here.

po/my.po+87−71

This diff is too big to show here.

po/nb.po+115−98

This diff is too big to show here.

po/nl.po+117−98

This diff is too big to show here.

po/pa.ponew file+362

This diff is too big to show here.

po/pl.po+89−72

This diff is too big to show here.

po/pt.po+112−97

This diff is too big to show here.

po/pt_BR.po+97−84

This diff is too big to show here.

po/ro.po+120−97

This diff is too big to show here.

po/ru.po+110−96

This diff is too big to show here.

po/shn.po+87−71

This diff is too big to show here.

po/si.po+87−71

This diff is too big to show here.

po/sl.po+115−97

This diff is too big to show here.

po/sq.po+87−71

This diff is too big to show here.

po/sr.po+157−126

This diff is too big to show here.

po/sv.po+127−102

This diff is too big to show here.

po/sw.po+87−71

This diff is too big to show here.

po/ta.po+87−71

This diff is too big to show here.

po/te.po+88−72

This diff is too big to show here.

po/th.po+245−105

This diff is too big to show here.

po/tr.po+112−89

This diff is too big to show here.

po/ug.po+132−105

This diff is too big to show here.

po/uk.po+118−97

This diff is too big to show here.

po/unity8.pot+80−65

This diff is too big to show here.

po/vi.po+87−71

This diff is too big to show here.

po/xh.po+87−71

This diff is too big to show here.

po/zh_CN.po+89−79

This diff is too big to show here.

po/zh_HK.po+88−72

This diff is too big to show here.

po/zh_TW.po+120−105

This diff is too big to show here.

qml/Components/Background.qml+1−1

This diff is too big to show here.

qml/Components/Carousel.qml+2−3

This diff is too big to show here.

qml/Components/DelayedLockscreen.qmlnew file+92

This diff is too big to show here.

qml/Components/Dialogs.qml+10

This diff is too big to show here.

qml/Components/DragHandle.qml+2−2

This diff is too big to show here.

qml/Components/EdgeDragArea.qml+2

This diff is too big to show here.

qml/Components/Flickables/Flickable.qmlnew file+23

This diff is too big to show here.

qml/Components/Flickables/GridView.qmlnew file+25

This diff is too big to show here.

qml/Components/Flickables/ListView.qmlnew file+25

This diff is too big to show here.

qml/Components/Flickables/ListViewWithPageHeader.qmlnew file+23

This diff is too big to show here.

qml/Components/Header.qmlnew file+27

This diff is too big to show here.

qml/Components/InputMethod.qml+13

This diff is too big to show here.

qml/Components/LazyImage.qml+1

This diff is too big to show here.

qml/Components/ListItems/Base.qmldeleted−125

This diff is too big to show here.

qml/Components/ListItems/Highlight.qmldeleted−46

This diff is too big to show here.

qml/Components/Lockscreen.qml+129−103

This diff is too big to show here.

qml/Components/PassphraseLockscreen.qml+96−43

This diff is too big to show here.

qml/Components/PinLockscreen.qml+11−5

This diff is too big to show here.

qml/Components/ResponsiveGridView.qml+7−2

This diff is too big to show here.

qml/Components/ResponsiveVerticalJournal.qml+3−2

This diff is too big to show here.

qml/Components/ZoomableImage.qml+2−2

This diff is too big to show here.

qml/Dash/CardCarousel.qml+1−1

This diff is too big to show here.

qml/Dash/CardGrid.qml+3−2

This diff is too big to show here.

qml/Dash/CardHorizontalList.qml+4−3

This diff is too big to show here.

qml/Dash/CardTool.qml+20−15

This diff is too big to show here.

qml/Dash/CardVerticalJournal.qml+3−2

This diff is too big to show here.

qml/Dash/Dash.qml+44−11

This diff is too big to show here.

qml/Dash/DashApplication.qml+2−8

This diff is too big to show here.

qml/Dash/DashCategoryBase.qmlnew file+62

This diff is too big to show here.

qml/Dash/DashContent.qml+9−4

This diff is too big to show here.

qml/Dash/DashNavigation.qml+3−3

This diff is too big to show here.

qml/Dash/DashNavigationButton.qml+2−1

This diff is too big to show here.

qml/Dash/DashNavigationList.qml+2−1

This diff is too big to show here.

qml/Dash/DashRenderer.qml+9−4

This diff is too big to show here.

qml/Dash/GenericScopeView.qml+161−54

This diff is too big to show here.

qml/Dash/PageHeader.qml+25−18

This diff is too big to show here.

qml/Dash/PreviewListView.qml+4−5

This diff is too big to show here.

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

This diff is too big to show here.

qml/Dash/Previews/PreviewHeader.qml+13−1

This diff is too big to show here.

qml/Dash/Previews/PreviewImageGallery.qml+123−19

This diff is too big to show here.

qml/Dash/Previews/PreviewPayments.qml+8

This diff is too big to show here.

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

This diff is too big to show here.

qml/Dash/PullToRefreshScopeStyle.qmlnew file+82

This diff is too big to show here.

qml/Dash/ScopeListView.qml+4−6

This diff is too big to show here.

qml/Dash/ScopeSettingsPage.qml+3−1

This diff is too big to show here.

qml/Dash/ScopesOverview.qml+16−2

This diff is too big to show here.

qml/Dash/ScopesOverviewAll.qml+4−1

This diff is too big to show here.

qml/Dash/ScopesOverviewFavorites.qml+5−3

This diff is too big to show here.

qml/Dash/graphics/checkers.pngdeleted

Binary file not shown.

qml/Dash/graphics/pixel.pngnew file

Binary file not shown.

qml/Greeter/Greeter.qml+14−2

This diff is too big to show here.

qml/Greeter/GreeterContent.qml+15

This diff is too big to show here.

qml/Greeter/LoginList.qml+21−8

This diff is too big to show here.

qml/Hud/Hud.qml+2−1

This diff is too big to show here.

qml/Hud/HudParametrizedActionsPage.qml+2−1

This diff is too big to show here.

qml/Launcher/Launcher.qml+5−3

This diff is too big to show here.

qml/Launcher/LauncherDelegate.qml+24−35

This diff is too big to show here.

qml/Launcher/LauncherPanel.qml+9−15

This diff is too big to show here.

qml/Notifications/Notification.qml+135−48

This diff is too big to show here.

qml/Notifications/NotificationMenuItemFactory.qml+81−5

This diff is too big to show here.

qml/Notifications/Notifications.qml+3−2

This diff is too big to show here.

qml/Panel/ActiveCallHint.qml+1−1

This diff is too big to show here.

qml/Panel/IndicatorItem.qml+6

This diff is too big to show here.

qml/Panel/IndicatorRow.qml+2−1

This diff is too big to show here.

qml/Panel/Indicators.qml+2−13

This diff is too big to show here.

qml/Panel/Indicators/DefaultIndicatorPage.qml+10−50

This diff is too big to show here.

qml/Panel/Indicators/IndicatorBase.qml+1

This diff is too big to show here.

qml/Panel/Indicators/IndicatorDelegate.qml+2−10

This diff is too big to show here.

qml/Panel/Indicators/IndicatorsLight.qml+4−7

This diff is too big to show here.

qml/Panel/Indicators/MenuItemFactory.qml+176−50

This diff is too big to show here.

qml/Panel/Indicators/MessageMenuItemFactory.qml+156−171

This diff is too big to show here.

qml/Panel/Indicators/RemoveBackground.qmldeleted−55

This diff is too big to show here.

qml/Panel/Indicators/VisibleIndicators.qml+1

This diff is too big to show here.

qml/Panel/Indicators/client/IndicatorsClient.qml+4

This diff is too big to show here.

qml/Panel/Indicators/client/IndicatorsList.qml+2−1

This diff is too big to show here.

qml/Panel/Indicators/client/IndicatorsTree.qml+2−1

This diff is too big to show here.

qml/Panel/MenuContent.qml+95−112

This diff is too big to show here.

qml/Shell.qml+211−78

This diff is too big to show here.

qml/Stages/Animations/BaseSurfaceAnimation.qml → qml/Stages/Animations/BaseSessionAnimation.qmlrenamed+23−20

This diff is too big to show here.

qml/Stages/Animations/DarkenAndFadeInAnimation.qmldeleted−48

This diff is too big to show here.

qml/Stages/Animations/SwipeFromBottomAnimation.qml+24−19

This diff is too big to show here.

qml/Stages/Animations/SwipeUpAnimation.qmldeleted−49

This diff is too big to show here.

qml/Stages/ApplicationWindow.qml+58−79

This diff is too big to show here.

qml/Stages/MainViewStyle.qmlnew file+79

This diff is too big to show here.

qml/Stages/PageHeadStyle.qmlnew file+76

This diff is too big to show here.

qml/Stages/PhoneStage.qml+41−9

This diff is too big to show here.

qml/Stages/SessionContainer.qmlnew file+138

This diff is too big to show here.

qml/Stages/Splash.qml+107−13

This diff is too big to show here.

qml/Stages/SpreadDelegate.qml+3

This diff is too big to show here.

qml/Stages/SurfaceContainer.qml+55−64

This diff is too big to show here.

qml/Stages/TabletStage.qml+22−1

This diff is too big to show here.

qml/Stages/TransformedTabletSpreadDelegate.qml+2−1

This diff is too big to show here.

qml/Stages/WaitingDots.qmldeleted−76

This diff is too big to show here.

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

Binary file not shown.

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

Binary file not shown.

qml/Stages/graphics/PageHeaderBaseDividerLight@18.scinew file+5

This diff is too big to show here.

qml/Stages/graphics/background_paper@27.pngnew file

Binary file not shown.

run_on_device.sh+42−41

This diff is too big to show here.

src/CMakeLists.txt+7

This diff is too big to show here.

src/Dash/CMakeLists.txt+8

This diff is too big to show here.

src/Dash/main.cpp+23−2

This diff is too big to show here.

src/Panel/CMakeLists.txt+2

This diff is too big to show here.

src/libunity8-private/CMakeLists.txtnew file+25

This diff is too big to show here.

src/libunity8-private/abstractdbusservicemonitor.cppnew file+87

This diff is too big to show here.

src/libunity8-private/abstractdbusservicemonitor.hnew file+66

This diff is too big to show here.

src/main.cpp+6

This diff is too big to show here.

tests/CMakeLists.txt+1

This diff is too big to show here.

tests/autopilot/unity8/application_lifecycle/tests/test_application_lifecycle.py+4−2

This diff is too big to show here.

tests/autopilot/unity8/indicators/tests/test_indicators.py+2−2

This diff is too big to show here.

tests/autopilot/unity8/process_helpers.py+12−17

This diff is too big to show here.

tests/autopilot/unity8/shell/emulators/dash.py+5−5

This diff is too big to show here.

tests/autopilot/unity8/shell/emulators/greeter.py+4−1

This diff is too big to show here.

tests/autopilot/unity8/shell/tests/__init__.py+4−21

This diff is too big to show here.

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

This diff is too big to show here.

tests/autopilot/unity8/shell/tests/test_notifications.py+61−97

This diff is too big to show here.

tests/libs/CMakeLists.txtnew file+1

This diff is too big to show here.

tests/libs/UbuntuGestures/CMakeLists.txtnew file+20

This diff is too big to show here.

tests/libs/UbuntuGestures/tst_TouchRegistry.cppnew file+803

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/AccountsService/AccountsService.h+17

This diff is too big to show here.

tests/mocks/AccountsService/AccountsService.qmltypes+1

This diff is too big to show here.

tests/mocks/HudClient/fake_libhud_client.cpp+8−1

This diff is too big to show here.

tests/mocks/LightDM/LightDM.qmltypes+2

This diff is too big to show here.

tests/mocks/Powerd/Powerd.cpp+15−1

This diff is too big to show here.

tests/mocks/Powerd/Powerd.h+8−1

This diff is too big to show here.

tests/mocks/Powerd/Powerd.qmltypes+3−3

This diff is too big to show here.

tests/mocks/QtMultimedia/audio.cpp+1−1

This diff is too big to show here.

tests/mocks/Ubuntu/CMakeLists.txt+1

This diff is too big to show here.

tests/mocks/Ubuntu/Connectivity/CMakeLists.txtnew file+10

This diff is too big to show here.

tests/mocks/Ubuntu/Connectivity/networking-status.cppnew file+64

This diff is too big to show here.

tests/mocks/Ubuntu/Connectivity/networking-status.hnew file+73

This diff is too big to show here.

tests/mocks/Ubuntu/Connectivity/plugin.cppnew file+46

This diff is too big to show here.

tests/mocks/Ubuntu/Connectivity/plugin.hnew file+35

This diff is too big to show here.

tests/mocks/Ubuntu/Connectivity/qmldirnew file+2

This diff is too big to show here.

tests/mocks/Ubuntu/Payments/MockPayments.cpp+12−7

This diff is too big to show here.

tests/mocks/Ubuntu/Payments/MockPayments.h+2

This diff is too big to show here.

tests/mocks/Ubuntu/SystemImage/SystemImage.qmltypes+3−1

This diff is too big to show here.

tests/mocks/Ubuntu/Telephony/MockCallEntry.cpp+26−1

This diff is too big to show here.

tests/mocks/Ubuntu/Telephony/MockCallEntry.h+9−1

This diff is too big to show here.

tests/mocks/Unity/Application/Application.qmltypes+115−70

This diff is too big to show here.

tests/mocks/Unity/Application/ApplicationDBusAdaptor.cppdeleted−81

This diff is too big to show here.

tests/mocks/Unity/Application/ApplicationInfo.cpp+36−85

This diff is too big to show here.

tests/mocks/Unity/Application/ApplicationInfo.h+18−23

This diff is too big to show here.

tests/mocks/Unity/Application/ApplicationManager.cpp+35−16

This diff is too big to show here.

tests/mocks/Unity/Application/ApplicationManager.h+7−4

This diff is too big to show here.

tests/mocks/Unity/Application/ApplicationTestInterface.cppnew file+117

This diff is too big to show here.

tests/mocks/Unity/Application/ApplicationDBusAdaptor.h → tests/mocks/Unity/Application/ApplicationTestInterface.hrenamed+13−11

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurfaceItem.cpp+44−94

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurfaceItem.h+49−32

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurfaceItem.qml+12−14

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurfaceItemModel.hnew file+35

This diff is too big to show here.

tests/mocks/Unity/Application/ObjectListModel.hnew file+106

This diff is too big to show here.

tests/mocks/Unity/Application/Session.cppnew file+174

This diff is too big to show here.

tests/mocks/Unity/Application/Session.hnew file+90

This diff is too big to show here.

tests/mocks/Unity/Application/SessionManager.cppnew file+55

This diff is too big to show here.

tests/mocks/Unity/Application/SessionManager.hnew file+44

This diff is too big to show here.

tests/mocks/Unity/Application/SessionModel.hnew file+35

This diff is too big to show here.

tests/mocks/Unity/Application/SurfaceManager.cpp+20−7

This diff is too big to show here.

tests/mocks/Unity/Application/SurfaceManager.h+6−2

This diff is too big to show here.

tests/mocks/Unity/Application/UbuntuKeyboardInfo.cppnew file+28

This diff is too big to show here.

tests/mocks/Unity/Application/UbuntuKeyboardInfo.hnew file+60

This diff is too big to show here.

tests/mocks/Unity/Application/plugin.cpp+44−4

This diff is too big to show here.

tests/mocks/Unity/DashCommunicator/dashcommunicatorservice.cpp+2−2

This diff is too big to show here.

tests/mocks/Unity/DashCommunicator/dashcommunicatorservice.h+2−2

This diff is too big to show here.

tests/mocks/Unity/Indicators/FakeMenuPage.qml−10

This diff is too big to show here.

tests/mocks/Unity/Indicators/Indicators.qmltypes+20

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/MockLauncherItem.cpp+14

This diff is too big to show here.

tests/mocks/Unity/Launcher/MockLauncherItem.h+18−17

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Unity/Unity.qmltypes+30−2

This diff is too big to show here.

tests/mocks/Unity/fake_categories.cpp+95−136

This diff is too big to show here.

tests/mocks/Unity/fake_categories.h+7−12

This diff is too big to show here.

tests/mocks/Unity/fake_resultsmodel.cpp+9

This diff is too big to show here.

tests/mocks/Unity/fake_resultsmodel.h+3

This diff is too big to show here.

tests/mocks/Unity/fake_scope.cpp+28−6

This diff is too big to show here.

tests/mocks/Unity/fake_scope.h+8−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/libusermetrics/UserMetrics.cpp+2−2

This diff is too big to show here.

tests/plugins/Dash/CMakeLists.txt+3−3

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Dash/listviewwithpageheadertest.cpp+39

This diff is too big to show here.

tests/plugins/Dash/listviewwithpageheadertest.qml+1

This diff is too big to show here.

tests/plugins/Dash/listviewwithpageheadertestsection.qml+1

This diff is too big to show here.

tests/plugins/Dash/listviewwithpageheadertestsectionexternalmodel.qml+1

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/CMakeLists.txt+10−3

This diff is too big to show here.

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

This diff is too big to show here.

qml/Stages/Dot.qml → tests/plugins/Ubuntu/Gestures/touchGateExample.qmlrenamed+7−5

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_DirectionalDragArea.cpp+491−14

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/tst_TouchGate.cppnew file+345

This diff is too big to show here.

tests/plugins/Unity/Launcher/CMakeLists.txt+10−25

This diff is too big to show here.

tests/plugins/Unity/Launcher/gsettings.cppnew file+40

This diff is too big to show here.

tests/plugins/Unity/Launcher/gsettings.hnew file+38

This diff is too big to show here.

tests/plugins/Unity/Launcher/launcherbackendtest.cppdeleted−239

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Utils/CMakeLists.txt+2−3

This diff is too big to show here.

tests/plugins/Utils/timeformattertest.cpp+104−7

This diff is too big to show here.

tests/qmltests/CMakeLists.txt+4−1

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/Components/tst_DragHandle.cpp+12−15

This diff is too big to show here.

tests/qmltests/Components/tst_DragHandle/HorizontalShowable.qml+1−1

This diff is too big to show here.

tests/qmltests/Components/tst_DragHandle/VerticalShowable.qml+1−1

This diff is too big to show here.

tests/qmltests/Greeter/tst_Lockscreen.qml → tests/qmltests/Components/tst_Lockscreen.qmlrenamed+31−51

This diff is too big to show here.

tests/qmltests/Dash/CardHelpers.js+1−12

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewHeader.qml+4−2

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewImageGallery.qml+51−1

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewPayments.qml+88−9

This diff is too big to show here.

tests/qmltests/Dash/tst_Card.qml+29−3

This diff is too big to show here.

tests/qmltests/Dash/tst_CardTool.qml+28−20

This diff is too big to show here.

tests/qmltests/Dash/tst_Dash.qml+25−41

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/Dash/tst_GenericScopeView.qml+157−7

This diff is too big to show here.

tests/qmltests/Dash/tst_PreviewListView.qml+29−1

This diff is too big to show here.

tests/qmltests/Greeter/tst_MultiGreeter.qml+2−2

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/Launcher/tst_Launcher.qml+120−102

This diff is too big to show here.

tests/qmltests/Notifications/tst_Notifications.qml+60−18

This diff is too big to show here.

tests/qmltests/Panel/Indicators/tst_DefaultIndicatorPage.qml+3−23

This diff is too big to show here.

tests/qmltests/Panel/Indicators/tst_MenuItemFactory.qml+56−16

This diff is too big to show here.

tests/qmltests/Panel/Indicators/tst_MessageMenuItemFactory.qml+43−53

This diff is too big to show here.

tests/qmltests/Panel/tst_ActiveCallHint.qml+20−7

This diff is too big to show here.

tests/qmltests/Panel/tst_Indicators.qml+10−10

This diff is too big to show here.

tests/qmltests/Panel/tst_MenuContent.qml+14−56

This diff is too big to show here.

tests/qmltests/Stages/RecursingChildSessionControl.qmlnew file+142

This diff is too big to show here.

tests/qmltests/Stages/tst_ApplicationWindow.qml+114−44

This diff is too big to show here.

tests/qmltests/Stages/tst_PhoneStage.qml+78−2

This diff is too big to show here.

tests/qmltests/Stages/tst_SessionContainer.qmlnew file+330

This diff is too big to show here.

tests/qmltests/Stages/tst_Splash.qmlnew file+117

This diff is too big to show here.

tests/qmltests/Stages/tst_SurfaceContainer.qml+53−43

This diff is too big to show here.

tests/qmltests/Components/tst_DragHandle/UnityLogo.png → tests/qmltests/UnityLogo.pngrenamed

Binary file not shown.

tests/qmltests/tst_Shell.qml+270−48

This diff is too big to show here.

tests/qmltests/tst_ShellWithPin.qml+171−36

This diff is too big to show here.

tests/qmltests/tst_TabletShell.qmlnew file+297

This diff is too big to show here.

tests/uqmlscene/CMakeLists.txt+2

This diff is too big to show here.

tests/uqmlscene/README+3−1

This diff is too big to show here.

tests/uqmlscene/main.cpp+9

This diff is too big to show here.

tests/utils/modules/Unity/Test/CMakeLists.txt+2

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tools/registry-tracker.cpp+6

This diff is too big to show here.

tools/scopetool.cpp+3

This diff is too big to show here.

tools/unlock-device+14−19

This diff is too big to show here.