on xenial help sign in
merged with trunk
commit4e86d64eb22fb2da565d92ea6e870d3feb007c4f authorNick Dedekind <nicholas.dedekind@gmail.com> dateWed 18 Jun 2014, 15:04 (12 years ago) parent7d36c8ecbf1d54
273 files changed+5806−5048
cmake/modules/Plugins.cmake−68 cmake/modules/QmlPlugins.cmake+143 cmake/modules/QmlTest.cmake+4−4 data/unity8-greeter-logrotate.conf+14 debian/changelog+246 debian/control+2 debian/unity8-private.install+1−1 debian/unity8.install−1 plugins/AccountsService/CMakeLists.txt+1−4 plugins/AccountsService/qmldir+1−1 plugins/CMakeLists.txt+14−1 plugins/DashViews/CMakeLists.txt → plugins/Dash/CMakeLists.txt+4−9 plugins/Dash/CardCreator.js+520 plugins/Dash/CardCreatorCache.qml+40 plugins/DashViews/abstractdashview.cpp → plugins/Dash/abstractdashview.cpp+21−48 plugins/DashViews/abstractdashview.h → plugins/Dash/abstractdashview.h+14−20 plugins/DashViews/horizontaljournal.cpp → plugins/Dash/horizontaljournal.cpp plugins/DashViews/horizontaljournal.h → plugins/Dash/horizontaljournal.h plugins/DashViews/listviewwithpageheader.cpp → plugins/Dash/listviewwithpageheader.cpp+39−28 plugins/DashViews/listviewwithpageheader.h → plugins/Dash/listviewwithpageheader.h+9−5 plugins/DashViews/organicgrid.cpp → plugins/Dash/organicgrid.cpp plugins/DashViews/organicgrid.h → plugins/Dash/organicgrid.h plugins/DashViews/plugin.cpp → plugins/Dash/plugin.cpp+2−2 plugins/DashViews/plugin.h → plugins/Dash/plugin.h+3−3 plugins/Dash/qmldir+4 plugins/DashViews/verticaljournal.cpp → plugins/Dash/verticaljournal.cpp plugins/DashViews/verticaljournal.h → plugins/Dash/verticaljournal.h plugins/DashViews/qmldir−3 plugins/HudClient/CMakeLists.txt+1−6 plugins/HudClient/qmldir+1−1 plugins/LightDM/CMakeLists.txt+1−6 plugins/LightDM/qmldir+1−1 plugins/Powerd/CMakeLists.txt+1−3 plugins/Powerd/qmldir+1−1 plugins/SessionBroadcast/CMakeLists.txt+1−4 plugins/SessionBroadcast/qmldir+1−1 plugins/Ubuntu/DownloadDaemonListener/CMakeLists.txt+1−6 plugins/Ubuntu/DownloadDaemonListener/qmldir+1−1 plugins/Ubuntu/Gestures/CMakeLists.txt+1−6 plugins/Ubuntu/Gestures/qmldir+1−1 plugins/Unity/Indicators/CMakeLists.txt+4−7 plugins/Unity/Indicators/menucontentactivator.cpp−1 plugins/Unity/Indicators/qml/CMakeLists.txt−5 plugins/Unity/Indicators/qml/qmldir+1−1 plugins/Unity/Indicators/rootactionstate.cpp+7−8 plugins/Unity/Launcher/CMakeLists.txt+1−3 plugins/Unity/Launcher/backend/launcherbackend.cpp+29−15 plugins/Unity/Launcher/launchermodel.cpp+22 plugins/Unity/Launcher/launchermodel.h+1 plugins/Unity/Launcher/qmldir+1−1 plugins/Utils/CMakeLists.txt+1−4 plugins/Utils/bottombarvisibilitycommunicatorshell.cpp−49 plugins/Utils/bottombarvisibilitycommunicatorshell.h−59 plugins/Utils/plugin.cpp−10 plugins/Utils/qmldir+1−1 po/am.po+33−26 po/ar.po+36−29 po/ast.po+33−26 po/az.po+33−26 po/bg.po+33−26 po/br.po+68−54 po/bs.po+33−26 po/ca.po+45−36 po/ckb.po+33−26 po/cs.po+33−26 po/da.po+33−26 po/de.po+55−45 po/el.po+33−26 po/en_AU.po+33−26 po/en_GB.po+33−26 po/eo.po+33−26 po/es.po+38−31 po/eu.po+33−26 po/fa.po+33−26 po/fi.po+35−28 po/fo.po+33−26 po/fr.po+54−38 po/gd.po+46−37 po/gl.po+37−30 po/he.po+43−34 po/hi.po+33−26 po/hr.po+33−26 po/hu.po+33−26 po/hy.po+33−26 po/id.po+33−26 po/is.po+33−26 po/it.po+44−35 po/ja.po+33−26 po/km.po+36−29 po/kn.po+33−26 po/ko.po+33−26 po/ky.po+33−26 po/lo.po+33−26 po/lt.po+40−33 po/lv.po+51−44 po/ml.po+33−26 po/mr.po+33−26 po/ms.po+33−26 po/my.po+33−26 po/nb.po+62−53 po/nl.po+33−26 po/pl.po+44−35 po/pt.po+33−26 po/pt_BR.po+44−35 po/ro.po+33−26 po/ru.po+35−28 po/shn.po+33−26 po/si.po+33−26 po/sl.po+36−29 po/sq.po+33−26 po/sr.po+33−26 po/sv.po+49−42 po/sw.po+33−26 po/ta.po+33−26 po/te.po+33−26 po/tr.po+37−30 po/ug.po+40−33 po/uk.po+44−35 po/unity8.pot+31−24 po/vi.po+33−26 po/xh.po+33−26 po/zh_CN.po+60−53 po/zh_HK.po+33−26 po/zh_TW.po+33−26 qml/Bottombar/Bottombar.qml−227 qml/Bottombar/HudButton.qml−64 qml/Bottombar/graphics/hud@20.png qml/Bottombar/graphics/hud_invoke_button_active@20.png qml/CMakeLists.txt−1 qml/Components/FilterGrid.qml+2−2 qml/Greeter/Lockscreen.qml → qml/Components/Lockscreen.qml+91−8 qml/Components/PageHeader.qml+1−1 qml/Greeter/PassphraseLockscreen.qml → qml/Components/PassphraseLockscreen.qml+6−2 qml/Greeter/PinLockscreen.qml → qml/Components/PinLockscreen.qml+30−12 qml/Components/PinPadButton.qml+2−1 qml/Components/ResponsiveGridView.qml+3−3 qml/Components/Revealer.qml−241 qml/Dash/Card.qml−236 qml/Dash/CardCarousel.qml+26−14 qml/Dash/CardFilterGrid.qml+21−18 qml/Dash/CardHeader.qml−126 qml/Dash/CardTool.qml+30−22 qml/Dash/DashContent.qml+1−1 qml/Dash/DashRenderer.qml+5−6 qml/Dash/GenericScopeView.qml+14−12 qml/Dash/PreviewListView.qml+3−3 qml/Dash/Previews/PreviewHeader.qml+89−9 qml/Dash/Previews/PreviewTextSummary.qml+4−2 qml/Dash/ScopeListView.qml+1−1 qml/Dash/graphics/carousel_dropshadow@27.png qml/Dash/graphics/carousel_dropshadow@27.sci+5 qml/Greeter/LoginList.qml+1 qml/Notifications/NotificationMenuItemFactory.qml−1 qml/ScopeTool.qml+1−1 qml/Shell.qml+9−59 tests/mocks/Unity/iconutils.h → qml/Stages/Dot.qml+9−13 qml/Stages/PhoneStage.qml+5−2 qml/Stages/StageWithSideStage.qml+8−2 qml/Stages/WaitingDots.qml+76 src/ApplicationArguments.h+4−8 src/main.cpp+43−6 tests/autopilot/unity8/process_helpers.py+11−4 tests/autopilot/unity8/shell/emulators/dash.py+3−4 tests/autopilot/unity8/shell/emulators/main_window.py−4 tests/mocks/AccountsService/CMakeLists.txt+1−12 tests/mocks/AccountsService/qmldir+1 tests/mocks/CMakeLists.txt+30 tests/mocks/GSettings.1.0/CMakeLists.txt+1−4 tests/mocks/GSettings.1.0/qmldir+1 tests/mocks/HudClient/CMakeLists.txt+1−4 tests/mocks/HudClient/qmldir+2 tests/mocks/LightDM/CMakeLists.txt+5−12 tests/mocks/LightDM/qmldir+1 tests/mocks/Powerd/CMakeLists.txt+1−12 tests/mocks/Powerd/qmldir+1 tests/mocks/QMenuModel/CMakeLists.txt+2−12 tests/mocks/QMenuModel/qmldir+1 tests/mocks/QtMultimedia/CMakeLists.txt+1−12 tests/mocks/QtMultimedia/qmldir+1 tests/mocks/Ubuntu/DownloadDaemonListener/CMakeLists.txt+1−9 tests/mocks/Ubuntu/DownloadDaemonListener/qmldir+1 tests/mocks/Ubuntu/Thumbnailer/CMakeLists.txt+1−7 tests/mocks/Ubuntu/Thumbnailer/qmldir+2 tests/mocks/Unity/Application/CMakeLists.txt+9−35 tests/mocks/Unity/Application/qmldir+2 tests/mocks/Unity/CMakeLists.txt+9−13 tests/mocks/Unity/Indicators/CMakeLists.txt+1−14 tests/mocks/Unity/Indicators/qml/FakeMenuPage.qml → tests/mocks/Unity/Indicators/FakeMenuPage.qml tests/mocks/Unity/Indicators/qmldir+1 tests/mocks/Unity/Launcher/CMakeLists.txt+1−5 tests/mocks/Unity/Launcher/MockLauncherModel.cpp+5 tests/mocks/Unity/Launcher/MockLauncherModel.h+1 tests/mocks/Unity/Launcher/qmldir+1 tests/mocks/Unity/Notifications/CMakeLists.txt+1−11 tests/mocks/Unity/Notifications/qmldir+1 tests/mocks/Unity/fake_categories.cpp+26−25 tests/mocks/Unity/fake_categories.h+5−18 tests/mocks/Unity/fake_previewmodel.cpp+2−15 tests/mocks/Unity/fake_previewmodel.h+7−25 tests/mocks/Unity/fake_previewstack.cpp+3−11 tests/mocks/Unity/fake_previewstack.h+6−17 tests/mocks/Unity/fake_previewwidgetmodel.cpp+2−10 tests/mocks/Unity/fake_previewwidgetmodel.h+3−12 tests/mocks/Unity/fake_resultsmodel.cpp+2−44 tests/mocks/Unity/fake_resultsmodel.h+5−37 tests/mocks/Unity/fake_scope.cpp+3−14 tests/mocks/Unity/fake_scope.h+26−72 tests/mocks/Unity/fake_scopes.cpp+11−26 tests/mocks/Unity/fake_scopes.h+7−24 tests/mocks/Unity/fake_unity_plugin.cpp+3−2 tests/mocks/Unity/iconutils.cpp−124 tests/mocks/Unity/qmldir+1 tests/plugins/CMakeLists.txt+1−1 tests/plugins/DashViews/CMakeLists.txt → tests/plugins/Dash/CMakeLists.txt+16−9 tests/plugins/Dash/cardcreator/1.res+79 tests/plugins/Dash/cardcreator/1.tst+3 tests/plugins/Dash/cardcreator/2.res+116 tests/plugins/Dash/cardcreator/2.tst+3 tests/plugins/Dash/cardcreator/3.res+96 tests/plugins/Dash/cardcreator/3.tst+3 tests/plugins/Dash/cardcreator/4.res+96 tests/plugins/Dash/cardcreator/4.tst+3 tests/plugins/Dash/cardcreator/5.res+139 tests/plugins/Dash/cardcreator/5.tst+3 tests/plugins/Dash/cardcreatortest.cpp+91 tests/plugins/Dash/cardcreatortest.qml+29 tests/plugins/DashViews/horizontaljournaltest.cpp → tests/plugins/Dash/horizontaljournaltest.cpp+6−6 tests/plugins/DashViews/horizontaljournaltest.qml → tests/plugins/Dash/horizontaljournaltest.qml+1−1 tests/plugins/DashViews/horizontaljournaltry.cpp → tests/plugins/Dash/horizontaljournaltry.cpp tests/plugins/DashViews/horizontaljournaltry.qml → tests/plugins/Dash/horizontaljournaltry.qml+24−3 tests/plugins/DashViews/listviewwithpageheadersectionexternalmodeltest.cpp → tests/plugins/Dash/listviewwithpageheadersectionexternalmodeltest.cpp+3−3 tests/plugins/DashViews/listviewwithpageheadersectiontest.cpp → tests/plugins/Dash/listviewwithpageheadersectiontest.cpp+11−5 tests/plugins/DashViews/listviewwithpageheadertest.cpp → tests/plugins/Dash/listviewwithpageheadertest.cpp tests/plugins/DashViews/listviewwithpageheadertest.qml → tests/plugins/Dash/listviewwithpageheadertest.qml+1−1 tests/plugins/DashViews/listviewwithpageheadertestsection.qml → tests/plugins/Dash/listviewwithpageheadertestsection.qml+1−1 tests/plugins/DashViews/listviewwithpageheadertestsectionexternalmodel.qml → tests/plugins/Dash/listviewwithpageheadertestsectionexternalmodel.qml+1−1 tests/plugins/DashViews/organicgridtest.cpp → tests/plugins/Dash/organicgridtest.cpp+7−5 tests/plugins/DashViews/organicgridtest.qml → tests/plugins/Dash/organicgridtest.qml+1−1 tests/plugins/DashViews/organicgridtry.cpp → tests/plugins/Dash/organicgridtry.cpp tests/plugins/DashViews/organicgridtry.qml → tests/plugins/Dash/organicgridtry.qml+23−3 tests/plugins/DashViews/tst_ListViewWithPageHeaderQML.qml → tests/plugins/Dash/tst_ListViewWithPageHeaderQML.qml+1−1 tests/plugins/DashViews/verticaljournaltest.cpp → tests/plugins/Dash/verticaljournaltest.cpp+6−6 tests/plugins/DashViews/verticaljournaltest.qml → tests/plugins/Dash/verticaljournaltest.qml+1−1 tests/plugins/DashViews/verticaljournaltry.cpp → tests/plugins/Dash/verticaljournaltry.cpp tests/plugins/DashViews/verticaljournaltry.qml → tests/plugins/Dash/verticaljournaltry.qml+24−3 tests/plugins/Unity/Indicators/rootactionstatetest.cpp+37 tests/plugins/Unity/Launcher/CMakeLists.txt+1−1 tests/plugins/Unity/Launcher/launchermodeltest.cpp+9 tests/qmltests/CMakeLists.txt+35−46 tests/qmltests/Components/RevealingRectangle.qml−78 tests/qmltests/Components/tst_LazyImage.qml+1−1 tests/qmltests/Components/tst_PageHeaderLabel.qml+4−4 tests/qmltests/Components/tst_Revealer.qml−262 tests/qmltests/Components/tst_ZoomableImage.qml+21−19 tests/qmltests/Dash/Previews/tst_Preview.qml+1−1 tests/qmltests/Dash/Previews/tst_PreviewHeader.qml+71−4 tests/qmltests/Dash/Previews/tst_PreviewTextSummary.qml+5−5 tests/qmltests/Dash/Previews/tst_PreviewZoomableImage.qml+7−5 tests/qmltests/Dash/tst_Card.qml+78−92 tests/qmltests/Dash/tst_CardBenchmark.qml+10−7 tests/qmltests/Dash/tst_CardHeader.qml−116 tests/qmltests/Dash/tst_CardTool.qml+11−31 tests/qmltests/Dash/tst_Dash.qml+1−1 tests/qmltests/Dash/tst_DashContent.qml+34−19 tests/qmltests/Dash/tst_GenericScopeView.qml+12−11 tests/qmltests/Greeter/tst_Lockscreen.qml+209−31 tests/qmltests/Greeter/tst_Tablet.qml → tests/qmltests/Greeter/tst_MultiGreeter.qml+1−1 tests/qmltests/Greeter/tst_Phone.qml → tests/qmltests/Greeter/tst_SingleGreeter.qml+1−19 tests/qmltests/tst_Shell.qml−9 tests/utils/modules/Unity/Test/CMakeLists.txt+4−7 tests/utils/modules/Unity/Test/qmldir+2 tools/registry-tracker.cpp+33−26 tools/unlock-device+2−4
cmake/modules/Plugins.cmakedeleted−68
@@ -1,68 +0,0 @@
1−find_program(qmlplugindump_exe qmlplugindump)
2−
3−if(NOT qmlplugindump_exe)
4− msg(FATAL_ERROR "Could not locate qmlplugindump.")
5−endif()
6−
7−# Creates target for copying and installing qmlfiles
8−#
9−# export_qmlfiles(plugin sub_path)
10−#
11−#
12−# Target to be created:
13−# - plugin-qmlfiles - Copies the qml files (*.qml, *.js, qmldir) into the shadow build folder.
14−
15−macro(export_qmlfiles PLUGIN PLUGIN_SUBPATH)
16−
17− file(GLOB QMLFILES
18− *.qml
19− *.js
20− qmldir
21− )
22−
23− # copy the qmldir file
24− add_custom_target(${PLUGIN}-qmlfiles ALL
25− COMMAND cp ${QMLFILES} ${CMAKE_BINARY_DIR}/plugins/${PLUGIN_SUBPATH}
26− DEPENDS ${QMLFILES}
27− SOURCES ${QMLFILES}
28− )
29−
30− # install the qmlfiles file.
31− install(FILES ${QMLFILES}
32− DESTINATION ${SHELL_INSTALL_QML}/${PLUGIN_SUBPATH}
33− )
34−endmacro(export_qmlfiles)
35−
36−
37−# Creates target for generating the qmltypes file for a plugin and installs plugin files
38−#
39−# export_qmlplugin(plugin version sub_path [TARGETS target1 [target2 ...]])
40−#
41−# TARGETS additional install targets (eg the plugin shared object)
42−#
43−# Target to be created:
44−# - plugin-qmltypes - Generates the qmltypes file in the shadow build folder.
45−
46−macro(export_qmlplugin PLUGIN VERSION PLUGIN_SUBPATH)
47− set(multi_value_keywords TARGETS)
48− cmake_parse_arguments(qmlplugin "" "" "${multi_value_keywords}" ${ARGN})
49−
50− # Only try to generate .qmltypes if not cross compiling
51− if(NOT CMAKE_CROSSCOMPILING)
52− # create the plugin.qmltypes file
53− add_custom_target(${PLUGIN}-qmltypes ALL
54− COMMAND ${qmlplugindump_exe} -notrelocatable ${PLUGIN} ${VERSION} ${CMAKE_BINARY_DIR}/plugins > ${CMAKE_BINARY_DIR}/plugins/${PLUGIN_SUBPATH}/plugin.qmltypes
55− )
56− add_dependencies(${PLUGIN}-qmltypes ${PLUGIN}-qmlfiles ${qmlplugin_TARGETS})
57−
58− # install the qmltypes file.
59− install(FILES ${CMAKE_BINARY_DIR}/plugins/${PLUGIN_SUBPATH}/plugin.qmltypes
60− DESTINATION ${SHELL_INSTALL_QML}/${PLUGIN_SUBPATH}
61− )
62− endif()
63−
64− # install the additional targets
65− install(TARGETS ${qmlplugin_TARGETS}
66− DESTINATION ${SHELL_INSTALL_QML}/${PLUGIN_SUBPATH}
67− )
68−endmacro(export_qmlplugin)
cmake/modules/QmlPlugins.cmakenew file+143
@@ -0,0 +1,143 @@
1+# If you need to override the qmlplugindump binary, create the qmlplugin executable
2+# target before loading this plugin.
3+
4+if(NOT TARGET qmlplugindump)
5+ find_program(qmlplugindump_exe qmlplugindump)
6+
7+ if(NOT qmlplugindump_exe)
8+ msg(FATAL_ERROR "Could not locate qmlplugindump.")
9+ endif()
10+
11+ add_executable(qmlplugindump IMPORTED)
12+ set_target_properties(qmlplugindump PROPERTIES IMPORTED_LOCATION ${qmlplugindump_exe})
13+endif()
14+
15+
16+# Creates a target for copying resource files into build dir and optionally installing them.
17+#
18+# Files will be copied into ${BINARY_DIR}/${path} or ${CMAKE_CURRENT_BINARY_DIR} and installed
19+# into ${DESTINATION}/${path}.
20+#
21+# Resource file names are matched against {*.{qml,js,jpg,png,sci,svg},qmldir}.
22+#
23+# export_qmlfiles(plugin path
24+# [SEARCH_PATH path] # Path to search for resources in (defaults to ${CMAKE_CURRENT_SOURCE_DIR})
25+# [BINARY_DIR path]
26+# [DESTINATION path]
27+# [TARGET_PREFIX string] # Will be prefixed to the target name
28+# )
29+#
30+# Created target:
31+# - ${TARGET_PREFIX}${plugin}-qmlfiles - Copies resources into the binary dir.
32+
33+macro(export_qmlfiles PLUGIN PATH)
34+ set(single SEARCH_PATH BINARY_DIR DESTINATION TARGET_PREFIX)
35+ cmake_parse_arguments(QMLFILES "" "${single}" "" ${ARGN})
36+
37+ if(NOT QMLFILES_SEARCH_PATH)
38+ set(QMLFILES_SEARCH_PATH ${CMAKE_CURRENT_SOURCE_DIR})
39+ endif()
40+
41+ if(QMLFILES_BINARY_DIR)
42+ set(qmlfiles_dir ${QMLFILES_BINARY_DIR}/${PATH})
43+ else()
44+ set(qmlfiles_dir ${CMAKE_CURRENT_BINARY_DIR})
45+ endif()
46+
47+ file(GLOB QMLFILES
48+ ${QMLFILES_SEARCH_PATH}/*.qml
49+ ${QMLFILES_SEARCH_PATH}/*.js
50+ ${QMLFILES_SEARCH_PATH}/*.jpg
51+ ${QMLFILES_SEARCH_PATH}/*.png
52+ ${QMLFILES_SEARCH_PATH}/*.sci
53+ ${QMLFILES_SEARCH_PATH}/*.svg
54+ ${QMLFILES_SEARCH_PATH}/qmldir
55+ )
56+
57+ execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${qmlfiles_dir})
58+
59+ # copy the files
60+ add_custom_target(${QMLFILES_TARGET_PREFIX}${PLUGIN}-qmlfiles ALL
61+ COMMAND cp ${QMLFILES} ${qmlfiles_dir}
62+ DEPENDS ${QMLFILES}
63+ SOURCES ${QMLFILES}
64+ )
65+
66+ if(QMLFILES_DESTINATION)
67+ # install the qmlfiles file.
68+ install(FILES ${QMLFILES}
69+ DESTINATION ${QMLFILES_DESTINATION}/${PATH}
70+ )
71+ endif()
72+endmacro(export_qmlfiles)
73+
74+
75+# Creates a target for generating the typeinfo file for a QML plugin and optionally installs it
76+# and additional targets.
77+#
78+# Files will be copied into ${BINARY_DIR}/${path} or ${CMAKE_CURRENT_BINARY_DIR} and installed
79+# into ${DESTINATION}/${path}. If you don't pass BINARY_DIR, it's assumed that current source
80+# path ends with ${path}.
81+#
82+# The generated file will be named after the last segment of the plugin name, e.g. Foo.qmltypes.
83+#
84+# export_qmlplugin(plugin version path
85+# [BINARY_DIR path]
86+# [DESTINATION path]
87+# [TARGET_PREFIX string] # Will be prefixed to the target name
88+# [ENVIRONMENT string] # Will be added to qmlplugindump's env
89+# [TARGETS target1 [target2 ...]] # Targets to depend on and install (e.g. the plugin shared object)
90+# )
91+#
92+# Created target:
93+# - ${TARGET_PREFIX}${plugin}-qmltypes - Generates the qmltypes file in the binary dir.
94+
95+macro(export_qmlplugin PLUGIN VERSION PATH)
96+ set(single BINARY_DIR DESTINATION TARGET_PREFIX ENVIRONMENT)
97+ set(multi TARGETS)
98+ cmake_parse_arguments(QMLPLUGIN "" "${single}" "${multi}" ${ARGN})
99+
100+ get_target_property(qmlplugindump_executable qmlplugindump LOCATION)
101+
102+ if(QMLPLUGIN_BINARY_DIR)
103+ set(qmlplugin_dir ${QMLPLUGIN_BINARY_DIR}/${PATH})
104+ else()
105+ # Find import path to point qmlplugindump at
106+ string(REGEX REPLACE "${PATH}$" "" QMLPLUGIN_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
107+ set(qmlplugin_dir ${CMAKE_CURRENT_BINARY_DIR})
108+ endif()
109+
110+ # Find the last segment of the plugin name to use as qmltypes basename
111+ string(REGEX MATCH "[^.]+$" plugin_suffix ${PLUGIN})
112+ set(target_prefix ${QMLPLUGIN_TARGET_PREFIX}${PLUGIN})
113+ set(qmltypes_path ${qmlplugin_dir}/${plugin_suffix}.qmltypes)
114+
115+ # Only generate typeinfo if not cross compiling
116+ if(NOT CMAKE_CROSSCOMPILING)
117+ add_custom_target(${target_prefix}-qmltypes ALL
118+ COMMAND env ${QMLPLUGIN_ENVIRONMENT} ${qmlplugindump_executable} -notrelocatable
119+ ${PLUGIN} ${VERSION} ${QMLPLUGIN_BINARY_DIR} > ${qmltypes_path}
120+ )
121+ add_dependencies(${target_prefix}-qmltypes ${target_prefix}-qmlfiles ${QMLPLUGIN_TARGETS})
122+
123+ if (QMLPLUGIN_DESTINATION)
124+ # Install the typeinfo file
125+ install(FILES ${qmltypes_path}
126+ DESTINATION ${QMLPLUGIN_DESTINATION}/${PATH}
127+ )
128+ endif()
129+ endif()
130+
131+ set_target_properties(${QMLPLUGIN_TARGETS} PROPERTIES
132+ ARCHIVE_OUTPUT_DIRECTORY ${qmlplugin_dir}
133+ LIBRARY_OUTPUT_DIRECTORY ${qmlplugin_dir}
134+ RUNTIME_OUTPUT_DIRECTORY ${qmlplugin_dir}
135+ )
136+
137+ if (QMLPLUGIN_DESTINATION)
138+ # Install additional targets
139+ install(TARGETS ${QMLPLUGIN_TARGETS}
140+ DESTINATION ${QMLPLUGIN_DESTINATION}/${PATH}
141+ )
142+ endif()
143+endmacro()
cmake/modules/QmlTest.cmake+4−4
@@ -51,7 +51,7 @@ macro(add_manual_qml_test SUBPATH COMPONENT_NAME)
5151
5252 set(qmlscene_command
5353 env ${qmltest_ENVIRONMENT}
54− ${qmlscene_exe} ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
54+ ${qmlscene_exe} -qmljsdebugger=port:3768 ${CMAKE_CURRENT_SOURCE_DIR}/${qmltest_FILE}.qml
5555 ${qmlscene_imports}
5656 )
5757 add_custom_target(${qmlscene_TARGET} ${qmlscene_command})
@@ -111,9 +111,9 @@ macro(add_qml_test_internal SUBPATH COMPONENT_NAME ITERATIONS)
111111 -o -,txt
112112 ${function_ARGS}
113113 )
114− find_program( HAVE_GCC gcc )
115− if (NOT ${HAVE_GCC} STREQUAL "")
116− exec_program( gcc ARGS "-dumpmachine" OUTPUT_VARIABLE ARCH_TRIPLET )
114+ find_program(DPKG dpkg-architecture)
115+ if(DPKG)
116+ exec_program(${DPKG} ARGS "-qDEB_BUILD_MULTIARCH" OUTPUT_VARIABLE ARCH_TRIPLET )
117117 set(LD_PRELOAD_PATH "LD_PRELOAD=/usr/lib/${ARCH_TRIPLET}/mesa/libGL.so.1")
118118 endif()
119119 set(qmltest_xvfb_command
data/unity8-greeter-logrotate.confnew file+14
@@ -0,0 +1,14 @@
1+description "Unity 8 Greeter logrotate support"
2+author "Michael Terry <mterry@ubuntu.com>"
3+
4+start on unity8-greeter-started
5+task
6+
7+script
8+ # logrotate normally starts on startup and then sleeps for 60 seconds.
9+ # Otherwise, it skips that sleep. Since we can't emit the startup signal
10+ # for a unity8-greeter session, we have to trigger logrotate manually.
11+ # So we do the sleep ourselves in its stead.
12+ sleep 60
13+ initctl emit :sys:rotate-logs
14+end script
debian/changelog+246
@@ -1,3 +1,249 @@
1+unity8 (7.89+14.10.20140616.1-0ubuntu1) utopic; urgency=low
2+
3+ [ Pawel Stolowski ]
4+ * Extend the hack for click scope categories with the upcoming 'store'
5+ category: single-tap on results from the 'store' category should
6+ activate them, instead of requesting a preview. (LP: #1326292)
7+
8+ [ Albert Astals ]
9+ * Drop the " Preview" suffix from Preview title As requested in
10+ https://bugs.launchpad.net/unity8/+bug/1316671 (LP: #1316671)
11+
12+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Mon, 16 Jun 2014 14:43:01 +0000
13+
14+unity8 (7.89+14.10.20140613-0ubuntu1) utopic; urgency=medium
15+
16+ [ Michael Terry ]
17+ * Revert split greeter for now. We will bring it back as an option
18+ for Desktop, but use a big hammer revert right now to get Touch back
19+ in shape.
20+
21+ [ CI bot ]
22+ * Fix build problems. Reviewed by: Michael Terry (LP: #1328850)
23+
24+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Fri, 13 Jun 2014 08:30:48 +0000
25+
26+unity8 (7.88+14.10.20140606-0ubuntu1) utopic; urgency=low
27+
28+ [ Michał Sawicz ]
29+ * Make lockscreen buttons translatable.
30+
31+ [ Albert Astals ]
32+ * Correctly mark these functions as overrides
33+ * Remove connections to non existant signal
34+ * Better test name
35+ * Improvements for headerless categories LVPWH: No section name -> no
36+ header LVPWH: New hasSectionHeader context property for delegates
37+ GSV: Add topMargin if no hasSectionHeader (LP: #1326415)
38+ * Make tryVerticalJournal, tryHorizontalJournal and tryOrganicGrid
39+ work again
40+
41+ [ Michael Zanetti ]
42+ * Don't crash when we get an invalid app from ApplicationManager (LP:
43+ #1309162)
44+
45+ [ Andrea Cimitan ]
46+ * Workaround for lp1324159 (LP: #1322233, #1324159)
47+
48+ [ CI bot ]
49+ * Resync trunk
50+
51+ [ Florian Boucault ]
52+ * Application startup: changed splash rectangle to be black instead of
53+ white and added a neat little animation. (LP: #1124265)
54+
55+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Fri, 06 Jun 2014 11:38:53 +0000
56+
57+unity8 (7.88+14.10.20140603.1-0ubuntu1) utopic; urgency=medium
58+
59+ [ Michael Terry ]
60+ * Bump version so ubuntu-touch-session can reference this one
61+
62+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Tue, 03 Jun 2014 20:31:00 +0000
63+
64+unity8 (7.87+14.10.20140603.1-0ubuntu1) utopic; urgency=low
65+
66+ [ CI bot ]
67+ * Resync trunk
68+
69+ [ Michał Sawicz ]
70+ * Move env setup past session init in greeter wrapper. (LP: #1325882)
71+
72+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Tue, 03 Jun 2014 10:33:11 +0000
73+
74+unity8 (7.87+14.10.20140530.1-0ubuntu3) utopic; urgency=medium
75+
76+ * no change rebuild
77+
78+ -- Oliver Grawert <ogra@ubuntu.com> Mon, 02 Jun 2014 16:19:10 +0200
79+
80+unity8 (7.87+14.10.20140530.1-0ubuntu2) utopic; urgency=medium
81+
82+ * drop dbus-x11 dependency of unity8-greeter, it makes us end up with
83+ multiple session dbus daemons which breaks many AP tests in the lab
84+
85+ -- Oliver Grawert <ogra@ubuntu.com> Mon, 02 Jun 2014 14:50:59 +0200
86+
87+unity8 (7.87+14.10.20140530.1-0ubuntu1) utopic; urgency=medium
88+
89+ [ Michael Terry ]
90+ * Bump version for Breaks due to unity8-greeter
91+ * In split mode, determine whether the application identifiers in
92+ AccountsService are click packages or not, so we know the correct
93+ url prefix to use.
94+ * Start logrotate in the greeter's session.
95+
96+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Fri, 30 May 2014 09:29:15 +0000
97+
98+unity8 (7.86+14.10.20140527-0ubuntu1) utopic; urgency=low
99+
100+ [ Andrea Cimitan ]
101+ * Passes to make tryCommand -qmljsdebugger=port:3768 to enable
102+ debug/profiling test apps
103+ * Fixes carousel shadow
104+
105+ [ Michał Sawicz ]
106+ * Use dpkg-architecture, not gcc, to determine the machine triplet.
107+
108+ [ Ying-Chun Liu ]
109+ * Fix ZoomableImage test failure. (LP: #1317254)
110+
111+ [ Albert Astals ]
112+ * We don't need iconutils in this mock
113+ * Don't reserve space for mascot if no mascot is specified (LP:
114+ #1319343)
115+ * CardHeader is no more, remove stale line in CMakeLists.txt
116+ * GenericScopeViewTest: Wait a bit more Otherwise sometimes we end
117+ getting up the wrong delegate (maybe one that will be garbage
118+ collected?) (LP: #1322279)
119+ * Fix crash in organicgridtest
120+
121+ [ Daniel d'Andrada ]
122+ * Remove Shell's underlay background image as it cannot be seen
123+ anymore Now that the Dash has its own, opaque, background, the
124+ underlay's background image can no longer be seen. So it's just a
125+ waste of resources to have it.
126+
127+ [ Michael Terry ]
128+ * Use the same animation when dismissing a greeter slide from the
129+ launcher as from a normal greeter drag. (LP: #1316513)
130+
131+ [ Michael Zanetti ]
132+ * enhance lockscreen add a retry indication label (e.g. 3 attempts
133+ left). add an additional label (e.g. phone number for multi sim).
134+ add a infoPopup (e.g. to display a warning for last retry). add min
135+ and max limit values. add tests for the above (LP: #1302050)
136+
137+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Tue, 27 May 2014 07:47:11 +0000
138+
139+unity8 (7.86+14.10.20140522-0ubuntu1) utopic; urgency=low
140+
141+ [ Albert Astals ]
142+ * Use Interface classes from unity-api
143+
144+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Thu, 22 May 2014 17:59:23 +0000
145+
146+unity8 (7.86+14.10.20140519-0ubuntu1) utopic; urgency=low
147+
148+ [ Ubuntu daily release ]
149+ * New rebuild forced
150+
151+ [ Albert Astals ]
152+ * Use the new displayMargin feature Also port our DashViews to use
153+ same naming and behaviour + update tests
154+
155+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Mon, 19 May 2014 07:35:51 +0000
156+
157+unity8 (7.86+14.10.20140516.5-0ubuntu1) utopic; urgency=low
158+
159+ [ Michal Hruby ]
160+ * Updated scope tool to create proper config files after recent
161+ libunity-scopes-api changes.
162+
163+ [ Michał Sawicz ]
164+ * Refactor export_qmlfiles and export_qmlplugins to be more generic
165+ and clean up installed mocks.
166+
167+ [ Albert Astals ]
168+ * Remove empty dirs
169+ * Set the tabbarmodel index as we do on real code It works better :D
170+ (LP: #1317255)
171+
172+ [ Thomi Richards ]
173+ * Use new import location for ProcessSearchError in process_helpers
174+ script.
175+
176+ [ Andrea Cimitan ]
177+ * Adds shadow for the carousel
178+
179+ [ Daniel d'Andrada ]
180+ * Remove Revealer component It's not used anywhere anymore. It's been
181+ replaced by DragHandle.
182+
183+ [ Andy Doan ]
184+ * unlock_device: support more complex reboot/wait cycles Currently
185+ this script only allows you to override how to "wait" on the device.
186+ This changes the logic to also support how you go about rebooting
187+ the device. This is handy for the ubuntu-emulator because adb-reboot
188+ is not currently supported. However, we also have a more
189+ sophisticated, fool-proof way we reboot/wait in the CI lab that
190+ would be nice to take advantage of:
191+ http://bazaar.launchpad.net/~ubuntu-test-case-dev/ubuntu-test-
192+ cases/touch/view/head:/scripts/reboot-and-wait
193+
194+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Fri, 16 May 2014 18:46:32 +0000
195+
196+unity8 (7.86+14.10.20140516.2-0ubuntu1) utopic; urgency=low
197+
198+ [ CI bot ]
199+ * Resync trunk
200+
201+ [ Michael Zanetti ]
202+ * support appid:// entries in gsettings schema and make
203+ findDesktopFile work with short-appid (LP: #1239750)
204+
205+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Fri, 16 May 2014 12:32:40 +0000
206+
207+unity8 (7.86+14.10.20140514.1-0ubuntu1) utopic; urgency=low
208+
209+ [ Antti Kaijanmäki ]
210+ * Indicators/RootActionState: use g_variant_iter_loop to extract
211+ icons.
212+
213+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Wed, 14 May 2014 11:43:55 +0000
214+
215+unity8 (7.86+14.10.20140513-0ubuntu1) utopic; urgency=low
216+
217+ [ Andrea Cimitan ]
218+ * Improve padding in Text preview widget. (LP: #1316683)
219+
220+ [ CI bot ]
221+ * Resync trunk
222+
223+ [ Nick Dedekind ]
224+ * Removed binding loop from Unity.Indicators.MenuContentActivator
225+ Change handler for QMLListProperty used by MenuContent.qml:
226+ menuActivator.content[index].active If we're already asking for the
227+ index, we know it exists already. No need to send a
228+ changeNotification on an implied creation.
229+
230+ [ Josh Arenson ]
231+ * Implements usage-style documentation for unity8 executable. Fixes
232+ lp:1269282 (LP: #1269282)
233+
234+ [ Albert Astals ]
235+ * Create specialized Card code in Javascript instead of having various
236+ copied&pasted files (LP: #1297197)
237+
238+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Tue, 13 May 2014 08:34:02 +0000
239+
240+unity8 (7.86+14.10.20140507.3-0ubuntu1) utopic; urgency=low
241+
242+ [ Michał Sawicz ]
243+ * Remove HUD from the bottom edge. Again.
244+
245+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Wed, 07 May 2014 11:14:30 +0000
246+
1247unity8 (7.86+14.10.20140505-0ubuntu1) utopic; urgency=low
2248
3249 [ Ted Gould ]
debian/control+2
@@ -92,7 +92,9 @@ Recommends: unity-scope-click,
9292 unity-scope-scopes,
9393Breaks: indicator-network (<< 0.5.1),
9494 ubuntu-touch-session (<< 0.107),
95+ unity8-greeter (<< 7.89),
9596Replaces: ubuntu-touch-session (<< 0.82~),
97+ unity8-greeter (<< 7.89),
9698Description: Unity 8 shell
9799 The Unity 8 shell is the primary user interface for Ubuntu devices.
98100
debian/unity8-private.install+1−1
@@ -1,5 +1,5 @@
11usr/lib/*/unity8/qml/AccountsService
2−usr/lib/*/unity8/qml/DashViews
2+usr/lib/*/unity8/qml/Dash
33usr/lib/*/unity8/qml/HudClient
44usr/lib/*/unity8/qml/LightDM
55usr/lib/*/unity8/qml/Powerd
debian/unity8.install−1
@@ -1,7 +1,6 @@
11data/unity8.conf usr/share/upstart/sessions/
22usr/bin/unity8
33usr/share/applications/unity8.desktop
4−usr/share/unity8/Bottombar
54usr/share/unity8/Greeter
65usr/share/unity8/Hud
76usr/share/unity8/Launcher
plugins/AccountsService/CMakeLists.txt+1−4
@@ -1,5 +1,3 @@
1−include(Plugins)
2−
31add_definitions(-DSM_BUSNAME=systemBus)
42
53add_library(AccountsService-qml MODULE
@@ -10,8 +8,7 @@ add_library(AccountsService-qml MODULE
108
119qt5_use_modules(AccountsService-qml DBus Qml)
1210
13−export_qmlfiles(AccountsService AccountsService)
14−export_qmlplugin(AccountsService 0.1 AccountsService TARGETS AccountsService-qml)
11+add_unity8_plugin(AccountsService 0.1 AccountsService TARGETS AccountsService-qml)
1512
1613set(POLKIT_LIB_DIR "${CMAKE_INSTALL_LOCALSTATEDIR}/lib/polkit-1")
1714set(POLKIT_DATA_DIR "${CMAKE_INSTALL_PREFIX}/share/polkit-1")
plugins/AccountsService/qmldir+1−1
@@ -1,3 +1,3 @@
11module AccountsService
22plugin AccountsService-qml
3−typeinfo plugin.qmltypes
3+typeinfo AccountsService.qmltypes
plugins/CMakeLists.txt+14−1
@@ -1,7 +1,20 @@
1+include(QmlPlugins)
2+
3+# Set up and install a plugin for unity8.
4+#
5+# add_unity8_plugin(plugin version path
6+# [...] # See export_qmlfiles and export_qmlplugin documentation for more options
7+# )
8+
9+macro(add_unity8_plugin PLUGIN VERSION PATH)
10+ export_qmlfiles(${PLUGIN} ${PATH} DESTINATION ${SHELL_INSTALL_QML} ${ARGN})
11+ export_qmlplugin(${PLUGIN} ${VERSION} ${PATH} DESTINATION ${SHELL_INSTALL_QML} ${ARGN})
12+endmacro()
13+
114add_subdirectory(AccountsService)
215add_subdirectory(HudClient)
316add_subdirectory(LightDM)
4−add_subdirectory(DashViews)
17+add_subdirectory(Dash)
518add_subdirectory(Powerd)
619add_subdirectory(SessionBroadcast)
720add_subdirectory(Ubuntu)
plugins/DashViews/CMakeLists.txt → plugins/Dash/CMakeLists.txtrenamed+4−9
@@ -1,6 +1,3 @@
1−# export_qmlplugin macro
2−include(Plugins)
3−
41# There's no cmake var for v8 include path :-/
52# so create one
63LIST(GET Qt5Core_INCLUDE_DIRS 0 QtCoreDir0)
@@ -30,17 +27,15 @@ set(QMLPLUGIN_SRC
3027 organicgrid.cpp
3128 )
3229
33−add_library(DashViews-qml MODULE
30+add_library(Dash-qml MODULE
3431 ${QMLPLUGIN_SRC}
3532 )
3633
37−target_link_libraries(DashViews-qml
34+target_link_libraries(Dash-qml
3835 ${Qt5Gui_LIBRARIES}
3936 ${Qt5Quick_LIBRARIES}
4037 )
4138
42−qt5_use_modules(DashViews-qml Qml Quick)
39+qt5_use_modules(Dash-qml Qml Quick)
4340
44−# export the qmldir qmltypes and plugin files
45−export_qmlfiles(DashViews DashViews)
46−export_qmlplugin(DashViews 0.1 DashViews TARGETS DashViews-qml)
41+add_unity8_plugin(Dash 0.1 Dash TARGETS Dash-qml)
plugins/Dash/CardCreator.jsnew file+520
@@ -0,0 +1,520 @@
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+.pragma library
18+
19+var kBackgroundLoaderCode = 'Loader {\n\
20+ id: backgroundLoader; \n\
21+ objectName: "backgroundLoader"; \n\
22+ anchors.fill: parent; \n\
23+ asynchronous: root.asynchronous; \n\
24+ visible: status == Loader.Ready; \n\
25+ sourceComponent: UbuntuShape { \n\
26+ objectName: "background"; \n\
27+ radius: "medium"; \n\
28+ color: getColor(0) || "white"; \n\
29+ gradientColor: getColor(1) || color; \n\
30+ anchors.fill: parent; \n\
31+ image: backgroundImage.source ? backgroundImage : null; \n\
32+ property real luminance: 0.2126 * color.r + 0.7152 * color.g + 0.0722 * color.b; \n\
33+ property Image backgroundImage: Image { \n\
34+ objectName: "backgroundImage"; \n\
35+ source: { \n\
36+ if (cardData && typeof cardData["background"] === "string") return cardData["background"]; \n\
37+ else if (template && typeof template["card-background"] === "string") return template["card-background"]; \n\
38+ else return ""; \n\
39+ } \n\
40+ } \n\
41+ function getColor(index) { \n\
42+ if (cardData && typeof cardData["background"] === "object" \n\
43+ && (cardData["background"]["type"] === "color" || cardData["background"]["type"] === "gradient")) { \n\
44+ return cardData["background"]["elements"][index]; \n\
45+ } else if (template && typeof template["card-background"] === "object" \n\
46+ && (template["card-background"]["type"] === "color" || template["card-background"]["type"] === "gradient")) { \n\
47+ return template["card-background"]["elements"][index]; \n\
48+ } else return undefined; \n\
49+ } \n\
50+ } \n\
51+ }\n';
52+
53+// %1 is used as anchors of artShapeHolder
54+// %2 is used as image width
55+// %3 is used as image height
56+var kArtShapeHolderCode = 'Item { \n\
57+ id: artShapeHolder; \n\
58+ height: root.fixedArtShapeSize.height != -1 ? root.fixedArtShapeSize.height : artShapeLoader.height; \n\
59+ width: root.fixedArtShapeSize.width != -1 ? root.fixedArtShapeSize.width : artShapeLoader.width; \n\
60+ anchors { %1 } \n\
61+ Loader { \n\
62+ id: artShapeLoader; \n\
63+ objectName: "artShapeLoader"; \n\
64+ active: cardData && cardData["art"] || false; \n\
65+ asynchronous: root.asynchronous; \n\
66+ visible: status == Loader.Ready; \n\
67+ sourceComponent: UbuntuShape { \n\
68+ id: artShape; \n\
69+ objectName: "artShape"; \n\
70+ radius: "medium"; \n\
71+ readonly property real aspect: components !== undefined ? components["art"]["aspect-ratio"] : 1; \n\
72+ readonly property bool aspectSmallerThanImageAspect: aspect < image.aspect; \n\
73+ Component.onCompleted: { updateWidthHeightBindings(); if (artShapeBorderSource !== undefined) borderSource = artShapeBorderSource; } \n\
74+ onAspectSmallerThanImageAspectChanged: updateWidthHeightBindings(); \n\
75+ visible: image.status == Image.Ready; \n\
76+ function updateWidthHeightBindings() { \n\
77+ if (aspectSmallerThanImageAspect) { \n\
78+ width = Qt.binding(function() { return !visible ? 0 : image.width }); \n\
79+ height = Qt.binding(function() { return !visible ? 0 : image.fillMode === Image.PreserveAspectCrop ? image.height : width / image.aspect }); \n\
80+ } else { \n\
81+ width = Qt.binding(function() { return !visible ? 0 : image.fillMode === Image.PreserveAspectCrop ? image.width : height * image.aspect }); \n\
82+ height = Qt.binding(function() { return !visible ? 0 : image.height }); \n\
83+ } \n\
84+ } \n\
85+ image: Image { \n\
86+ objectName: "artImage"; \n\
87+ source: cardData && cardData["art"] || ""; \n\
88+ cache: true; \n\
89+ asynchronous: root.asynchronous; \n\
90+ fillMode: components && components["art"]["fill-mode"] === "fit" ? Image.PreserveAspectFit: Image.PreserveAspectCrop; \n\
91+ readonly property real aspect: implicitWidth / implicitHeight; \n\
92+ width: %2; \n\
93+ height: %3; \n\
94+ } \n\
95+ } \n\
96+ } \n\
97+ }\n';
98+
99+var kOverlayLoaderCode = 'Loader { \n\
100+ id: overlayLoader; \n\
101+ anchors { \n\
102+ left: artShapeHolder.left; \n\
103+ right: artShapeHolder.right; \n\
104+ bottom: artShapeHolder.bottom; \n\
105+ } \n\
106+ active: artShapeLoader.active && artShapeLoader.item && artShapeLoader.item.image.status === Image.Ready || false; \n\
107+ asynchronous: root.asynchronous; \n\
108+ visible: showHeader && status == Loader.Ready; \n\
109+ sourceComponent: ShaderEffect { \n\
110+ id: overlay; \n\
111+ height: fixedHeaderHeight != -1 ? fixedHeaderHeight : headerHeight; \n\
112+ opacity: 0.6; \n\
113+ property var source: ShaderEffectSource { \n\
114+ id: shaderSource; \n\
115+ sourceItem: artShapeLoader.item; \n\
116+ onVisibleChanged: if (visible) scheduleUpdate(); \n\
117+ live: false; \n\
118+ sourceRect: Qt.rect(0, artShapeLoader.height - overlay.height, artShapeLoader.width, overlay.height); \n\
119+ } \n\
120+ vertexShader: " \n\
121+ uniform highp mat4 qt_Matrix; \n\
122+ attribute highp vec4 qt_Vertex; \n\
123+ attribute highp vec2 qt_MultiTexCoord0; \n\
124+ varying highp vec2 coord; \n\
125+ void main() { \n\
126+ coord = qt_MultiTexCoord0; \n\
127+ gl_Position = qt_Matrix * qt_Vertex; \n\
128+ }"; \n\
129+ fragmentShader: " \n\
130+ varying highp vec2 coord; \n\
131+ uniform sampler2D source; \n\
132+ uniform lowp float qt_Opacity; \n\
133+ void main() { \n\
134+ lowp vec4 tex = texture2D(source, coord); \n\
135+ gl_FragColor = vec4(0, 0, 0, tex.a) * qt_Opacity; \n\
136+ }"; \n\
137+ } \n\
138+ }\n';
139+
140+// %1 is used as anchors of row
141+// %2 is used as first child of the row
142+// %3 is used as second child of the row
143+var kHeaderRow2Code = 'Row { \n\
144+ id: row; \n\
145+ objectName: "outerRow"; \n\
146+ property real margins: units.gu(1); \n\
147+ spacing: margins; \n\
148+ anchors { %1 } \n\
149+ anchors.right: parent.right; \n\
150+ anchors.margins: margins;\n\
151+ data: [ %2\n\
152+ ,\n\
153+ %3 \n\
154+ ] \n\
155+ }\n';
156+
157+// %1 is used as anchors of row
158+// %2 is used as first child of the row
159+// %3 is used as second child of the row
160+// %4 is used as third child of the row
161+var kHeaderRow3Code = 'Row { \n\
162+ id: row; \n\
163+ objectName: "outerRow"; \n\
164+ property real margins: units.gu(1); \n\
165+ spacing: margins; \n\
166+ anchors { %1 } \n\
167+ anchors.right: parent.right; \n\
168+ anchors.margins: margins;\n\
169+ data: [ %2\n\
170+ ,\n\
171+ %3 \n\
172+ ,\n\
173+ %4 \n\
174+ ] \n\
175+ }\n';
176+
177+// %1 is used as first child of the column
178+// %2 is used as second child of the column
179+var kHeaderColumnCode = 'Column { \n\
180+ anchors.verticalCenter: parent.verticalCenter; \n\
181+ spacing: units.dp(2); \n\
182+ width: parent.width - x;\n\
183+ data: [ %1\n\
184+ ,\n\
185+ %2 \n\
186+ ] \n\
187+ }\n';
188+
189+// %1 is used as anchors of mascotShapeLoader
190+var kMascotShapeLoaderCode = 'Loader { \n\
191+ id: mascotShapeLoader; \n\
192+ objectName: "mascotShapeLoader"; \n\
193+ asynchronous: root.asynchronous; \n\
194+ active: mascotImage.status === Image.Ready; \n\
195+ visible: showHeader && active && status == Loader.Ready; \n\
196+ width: units.gu(6); \n\
197+ height: units.gu(5.625); \n\
198+ sourceComponent: UbuntuShape { image: mascotImage } \n\
199+ anchors { %1 } \n\
200+ }\n';
201+
202+// %1 is used as anchors of mascotImage
203+// %2 is used as visible of mascotImage
204+var kMascotImageCode = 'Image { \n\
205+ id: mascotImage; \n\
206+ objectName: "mascotImage"; \n\
207+ anchors { %1 } \n\
208+ readonly property int maxSize: Math.max(width, height) * 4; \n\
209+ source: cardData && cardData["mascot"]; \n\
210+ width: units.gu(6); \n\
211+ height: units.gu(5.625); \n\
212+ sourceSize { width: maxSize; height: maxSize } \n\
213+ fillMode: Image.PreserveAspectCrop; \n\
214+ horizontalAlignment: Image.AlignHCenter; \n\
215+ verticalAlignment: Image.AlignVCenter; \n\
216+ visible: %2; \n\
217+ }\n';
218+
219+// %1 is used as anchors of titleLabel
220+// %1 is used as color of titleLabel
221+// %3 is used as extra condition for visible of titleLabel
222+var kTitleLabelCode = 'Label { \n\
223+ id: titleLabel; \n\
224+ objectName: "titleLabel"; \n\
225+ anchors { %1 } \n\
226+ elide: Text.ElideRight; \n\
227+ fontSize: "small"; \n\
228+ wrapMode: Text.Wrap; \n\
229+ maximumLineCount: 2; \n\
230+ font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale); \n\
231+ color: %2; \n\
232+ visible: showHeader %3; \n\
233+ text: root.title; \n\
234+ font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal; \n\
235+ horizontalAlignment: root.headerAlignment; \n\
236+ }\n';
237+
238+// %1 is used as anchors of subtitleLabel
239+// %2 is used as color of subtitleLabel
240+var kSubtitleLabelCode = 'Label { \n\
241+ id: subtitleLabel; \n\
242+ objectName: "subtitleLabel"; \n\
243+ anchors { %1 } \n\
244+ elide: Text.ElideRight; \n\
245+ fontSize: "small"; \n\
246+ font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale); \n\
247+ color: %2; \n\
248+ visible: titleLabel.visible && titleLabel.text; \n\
249+ text: cardData && cardData["subtitle"] || ""; \n\
250+ font.weight: Font.Light; \n\
251+ horizontalAlignment: root.headerAlignment; \n\
252+ }\n';
253+
254+// %1 is used as top anchor of summary
255+// %2 is used as topMargin anchor of summary
256+// %3 is used as color of summary
257+var kSummaryLabelCode = 'Label { \n\
258+ id: summary; \n\
259+ objectName: "summaryLabel"; \n\
260+ anchors { \n\
261+ top: %1; \n\
262+ left: parent.left; \n\
263+ right: parent.right; \n\
264+ margins: units.gu(1); \n\
265+ topMargin: %2; \n\
266+ } \n\
267+ wrapMode: Text.Wrap; \n\
268+ maximumLineCount: 5; \n\
269+ elide: Text.ElideRight; \n\
270+ text: cardData && cardData["summary"] || ""; \n\
271+ height: text ? implicitHeight : 0; \n\
272+ fontSize: "small"; \n\
273+ color: %3; \n\
274+ }\n';
275+
276+function cardString(template, components) {
277+ var code;
278+ code = 'AbstractButton { \n\
279+ id: root; \n\
280+ property var template; \n\
281+ property var components; \n\
282+ property var cardData; \n\
283+ property var artShapeBorderSource: undefined; \n\
284+ property real fontScale: 1.0; \n\
285+ property int headerAlignment: Text.AlignLeft; \n\
286+ property int fixedHeaderHeight: -1; \n\
287+ property size fixedArtShapeSize: Qt.size(-1, -1); \n\
288+ readonly property string title: cardData && cardData["title"] || ""; \n\
289+ property bool asynchronous: true; \n\
290+ property bool showHeader: true; \n\
291+ implicitWidth: childrenRect.width; \n';
292+
293+ var hasArt = components["art"] && components["art"]["field"] || false;
294+ var hasSummary = components["summary"] || false;
295+ var artAndSummary = hasArt && hasSummary;
296+ var isHorizontal = template["card-layout"] === "horizontal";
297+ var hasBackground = !isHorizontal && (template["card-background"] || components["background"] || artAndSummary);
298+ var hasTitle = components["title"] || false;
299+ var hasMascot = components["mascot"] || false;
300+ var headerAsOverlay = hasArt && template && template["overlay"] === true && (hasTitle || hasMascot);
301+ var hasSubtitle = components["subtitle"] || false;
302+ var hasHeaderRow = hasMascot && hasTitle;
303+
304+ if (hasBackground) {
305+ code += kBackgroundLoaderCode;
306+ }
307+
308+ if (hasArt) {
309+ code += 'onArtShapeBorderSourceChanged: { if (artShapeBorderSource !== undefined && artShapeLoader.item) artShapeLoader.item.borderSource = artShapeBorderSource; } \n';
310+ code += 'readonly property size artShapeSize: artShapeLoader.item ? Qt.size(artShapeLoader.item.width, artShapeLoader.item.height) : Qt.size(-1, -1);\n';
311+
312+ var widthCode, heightCode;
313+ var anchors;
314+ if (isHorizontal) {
315+ anchors = 'left: parent.left';
316+ if (hasMascot || hasTitle) {
317+ widthCode = 'height * artShape.aspect'
318+ heightCode = 'headerHeight';
319+ } else {
320+ // This side of the else is a bit silly, who wants an horizontal layout without mascot and title?
321+ // So we define a "random" height of the image height + 2 gu for the margins
322+ widthCode = 'height * artShape.aspect'
323+ heightCode = 'units.gu(7.625)';
324+ }
325+ } else {
326+ anchors = 'horizontalCenter: parent.horizontalCenter;';
327+ widthCode = 'root.width'
328+ heightCode = 'width / artShape.aspect';
329+ }
330+
331+ code += kArtShapeHolderCode.arg(anchors).arg(widthCode).arg(heightCode);
332+ } else {
333+ code += 'readonly property size artShapeSize: Qt.size(-1, -1);\n'
334+ }
335+
336+ if (headerAsOverlay) {
337+ code += kOverlayLoaderCode;
338+ }
339+
340+ var headerVerticalAnchors;
341+ if (headerAsOverlay) {
342+ headerVerticalAnchors = 'bottom: artShapeHolder.bottom; \n\
343+ bottomMargin: units.gu(1);\n';
344+ } else {
345+ if (hasArt) {
346+ if (isHorizontal) {
347+ headerVerticalAnchors = 'top: artShapeHolder.top; \n\
348+ topMargin: units.gu(1);\n';
349+ } else {
350+ headerVerticalAnchors = 'top: artShapeHolder.bottom; \n\
351+ topMargin: units.gu(1);\n';
352+ }
353+ } else {
354+ headerVerticalAnchors = 'top: parent.top; \n\
355+ topMargin: units.gu(1);\n';
356+ }
357+ }
358+ var headerLeftAnchor;
359+ var headerLeftAnchorHasMagin = false;
360+ if (isHorizontal && hasArt) {
361+ headerLeftAnchor = 'left: artShapeHolder.right; \n\
362+ leftMargin: units.gu(1);\n';
363+ headerLeftAnchorHasMagin = true;
364+ } else {
365+ headerLeftAnchor = 'left: parent.left;\n';
366+ }
367+
368+ if (hasHeaderRow) {
369+ code += 'readonly property int headerHeight: row.height + row.margins * 2;\n'
370+ } else if (hasMascot) {
371+ code += 'readonly property int headerHeight: mascotImage.height + units.gu(1) * 2;\n'
372+ } else if (hasSubtitle) {
373+ code += 'readonly property int headerHeight: titleLabel.height + titleLabel.anchors.topMargin * 2 + subtitleLabel.height + subtitleLabel.anchors.topMargin;\n'
374+ } else if (hasTitle) {
375+ code += 'readonly property int headerHeight: titleLabel.height + titleLabel.anchors.topMargin * 2;\n'
376+ } else {
377+ code += 'readonly property int headerHeight: 0;\n'
378+ }
379+
380+ var mascotShapeCode = "";
381+ var mascotCode = "";
382+ if (hasMascot) {
383+ var useMascotShape = !hasBackground && !headerAsOverlay;
384+ var anchors = "";
385+ if (!hasHeaderRow) {
386+ anchors += headerLeftAnchor;
387+ anchors += headerVerticalAnchors;
388+ if (!headerLeftAnchorHasMagin) {
389+ anchors += 'leftMargin: units.gu(1);\n'
390+ }
391+ } else {
392+ anchors = "verticalCenter: parent.verticalCenter;"
393+ }
394+
395+ if (useMascotShape) {
396+ mascotShapeCode = kMascotShapeLoaderCode.arg(anchors);
397+ }
398+
399+ var mascotImageVisible = useMascotShape ? 'false' : 'showHeader';
400+ mascotCode = kMascotImageCode.arg(anchors).arg(mascotImageVisible);
401+ }
402+
403+ var summaryColorWithBackground = 'backgroundLoader.active && backgroundLoader.item && backgroundLoader.item.luminance < 0.7 ? "white" : "grey"';
404+
405+ var titleSubtitleCode = "";
406+ if (hasTitle) {
407+ var color;
408+ if (headerAsOverlay) {
409+ color = '"white"';
410+ } else if (hasSummary) {
411+ color = 'summary.color';
412+ } else if (hasBackground) {
413+ color = summaryColorWithBackground;
414+ } else {
415+ color = '"grey"';
416+ }
417+
418+ var titleAnchors;
419+ var subtitleAnchors;
420+ if (hasMascot && hasSubtitle) {
421+ // Using row + column
422+ titleAnchors = 'left: parent.left; right: parent.right';
423+ subtitleAnchors = titleAnchors;
424+ } else if (hasMascot) {
425+ // Using row + label
426+ titleAnchors = 'verticalCenter: parent.verticalCenter;\n'
427+ } else {
428+ if (headerAsOverlay) {
429+ // Using anchors to the overlay
430+ titleAnchors = 'left: parent.left; \n\
431+ leftMargin: units.gu(1); \n\
432+ right: parent.right; \n\
433+ top: overlayLoader.top; \n\
434+ topMargin: units.gu(1);\n';
435+ } else {
436+ // Using anchors to the mascot/parent
437+ titleAnchors = "right: parent.right;";
438+ titleAnchors += headerLeftAnchor;
439+ titleAnchors += headerVerticalAnchors;
440+ }
441+ subtitleAnchors = 'left: titleLabel.left; \n\
442+ leftMargin: titleLabel.leftMargin; \n\
443+ right: titleLabel.right; \n\
444+ top: titleLabel.bottom; \n\
445+ topMargin: units.dp(2);\n';
446+ }
447+
448+ var titleLabelVisibleExtra = (headerAsOverlay ? '&& overlayLoader.active': '');
449+ var titleCode = kTitleLabelCode.arg(titleAnchors).arg(color).arg(titleLabelVisibleExtra);
450+ var subtitleCode = "";
451+ if (hasSubtitle) {
452+ subtitleCode += kSubtitleLabelCode.arg(subtitleAnchors).arg(color);
453+ }
454+
455+ if (hasMascot && hasSubtitle) {
456+ // If using row + column wrap the code in the column
457+ titleSubtitleCode = kHeaderColumnCode.arg(titleCode).arg(subtitleCode);
458+ } else {
459+ titleSubtitleCode = titleCode + subtitleCode;
460+ }
461+ }
462+
463+ if (hasHeaderRow) {
464+ if (mascotShapeCode != "") {
465+ code += kHeaderRow3Code.arg(headerVerticalAnchors + headerLeftAnchor).arg(mascotShapeCode).arg(mascotCode).arg(titleSubtitleCode);
466+ } else {
467+ code += kHeaderRow2Code.arg(headerVerticalAnchors + headerLeftAnchor).arg(mascotCode).arg(titleSubtitleCode);
468+ }
469+ } else {
470+ code += mascotShapeCode + mascotCode + titleSubtitleCode;
471+ }
472+
473+ if (hasSummary) {
474+ var summaryTopAnchor;
475+ if (isHorizontal && hasArt) summaryTopAnchor = "artShapeHolder.bottom";
476+ else if (headerAsOverlay && hasArt) summaryTopAnchor = "artShapeHolder.bottom";
477+ else if (hasHeaderRow) summaryTopAnchor = "row.bottom";
478+ else if (hasMascot) summaryTopAnchor = "mascotImage.bottom";
479+ else if (hasSubtitle) summaryTopAnchor = "subtitleLabel.bottom";
480+ else if (hasTitle) summaryTopAnchor = "titleLabel.bottom";
481+ else if (hasArt) summaryTopAnchor = "artShapeHolder.bottom";
482+ else summaryTopAnchor = "parent.top";
483+
484+ var color;
485+ if (hasBackground) {
486+ color = summaryColorWithBackground;
487+ } else {
488+ color = '"grey"';
489+ }
490+
491+ var summaryTopMargin = (hasMascot || hasSubtitle ? 'anchors.margins' : '0');
492+
493+ code += kSummaryLabelCode.arg(summaryTopAnchor).arg(summaryTopMargin).arg(color);
494+ }
495+
496+ if (hasSummary) {
497+ code += 'implicitHeight: summary.y + summary.height + (summary.text ? units.gu(1) : 0);\n';
498+ } else if (hasHeaderRow) {
499+ code += 'implicitHeight: row.y + row.height + units.gu(1);\n';
500+ } else if (hasMascot) {
501+ code += 'implicitHeight: mascotImage.y + mascotImage.height;\n';
502+ } else if (hasSubtitle) {
503+ code += 'implicitHeight: subtitleLabel.y + subtitleLabel.height + units.gu(1);\n';
504+ } else if (hasTitle) {
505+ code += 'implicitHeight: titleLabel.y + titleLabel.height + units.gu(1);\n';
506+ }
507+ // Close the AbstractButton
508+ code += '}\n';
509+
510+ return code;
511+}
512+
513+function createCardComponent(parent, template, components) {
514+ var imports = 'import QtQuick 2.2; \n\
515+ import Ubuntu.Components 0.1; \n\
516+ import Ubuntu.Thumbnailer 0.1;\n';
517+ var card = cardString(template, components);
518+ var code = imports + 'Component {\n' + card + '}\n';
519+ return Qt.createQmlObject(code, parent, "createCardComponent");
520+}
plugins/Dash/CardCreatorCache.qmlnew file+40
@@ -0,0 +1,40 @@
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+pragma Singleton
18+import QtQuick 2.2
19+import "CardCreator.js" as CardCreator
20+
21+QtObject {
22+ id: root
23+
24+ property var cache: new Object();
25+
26+ function getCardComponent(template, components) {
27+ if (template === undefined || components === undefined)
28+ return undefined;
29+
30+ var tString = JSON.stringify(template);
31+ var cString = JSON.stringify(components);
32+ var allString = tString + cString;
33+ var component = cache[allString];
34+ if (component === undefined) {
35+ component = CardCreator.createCardComponent(root, template, components);
36+ cache[allString] = component;
37+ }
38+ return component;
39+ }
40+}
plugins/DashViews/abstractdashview.cpp → plugins/Dash/abstractdashview.cpprenamed+21−48
@@ -23,10 +23,8 @@ AbstractDashView::AbstractDashView()
2323 , m_asyncRequestedIndex(-1)
2424 , m_columnSpacing(0)
2525 , m_rowSpacing(0)
26− , m_delegateCreationBegin(0)
27− , m_delegateCreationEnd(0)
28− , m_delegateCreationBeginValid(false)
29− , m_delegateCreationEndValid(false)
26+ , m_displayMarginBeginning(0)
27+ , m_displayMarginEnd(0)
3028 , m_needsRelayout(false)
3129 , m_delegateValidated(false)
3230 , m_implicitHeightDirty(false)
@@ -114,62 +112,36 @@ void AbstractDashView::setRowSpacing(qreal rowSpacing)
114112 }
115113}
116114
117−qreal AbstractDashView::delegateCreationBegin() const
115+qreal AbstractDashView::displayMarginBeginning() const
118116{
119− return m_delegateCreationBegin;
117+ return m_displayMarginBeginning;
120118}
121119
122−void AbstractDashView::setDelegateCreationBegin(qreal begin)
120+void AbstractDashView::setDisplayMarginBeginning(qreal begin)
123121{
124− m_delegateCreationBeginValid = true;
125− if (m_delegateCreationBegin == begin)
122+ if (m_displayMarginBeginning == begin)
126123 return;
127− m_delegateCreationBegin = begin;
124+ m_displayMarginBeginning = begin;
128125 if (isComponentComplete()) {
129126 polish();
130127 }
131− emit delegateCreationBeginChanged();
128+ emit displayMarginBeginningChanged();
132129}
133130
134−void AbstractDashView::resetDelegateCreationBegin()
131+qreal AbstractDashView::displayMarginEnd() const
135132{
136− m_delegateCreationBeginValid = false;
137− if (m_delegateCreationBegin == 0)
138− return;
139− m_delegateCreationBegin = 0;
140− if (isComponentComplete()) {
141− polish();
142− }
143− emit delegateCreationBeginChanged();
144−}
145−
146−qreal AbstractDashView::delegateCreationEnd() const
147−{
148− return m_delegateCreationEnd;
149−}
150−
151−void AbstractDashView::setDelegateCreationEnd(qreal end)
152−{
153− m_delegateCreationEndValid = true;
154− if (m_delegateCreationEnd == end)
155− return;
156− m_delegateCreationEnd = end;
157− if (isComponentComplete()) {
158− polish();
159− }
160− emit delegateCreationEndChanged();
133+ return m_displayMarginEnd;
161134}
162135
163−void AbstractDashView::resetDelegateCreationEnd()
136+void AbstractDashView::setDisplayMarginEnd(qreal end)
164137{
165− m_delegateCreationEndValid = false;
166− if (m_delegateCreationEnd == 0)
138+ if (m_displayMarginEnd == end)
167139 return;
168− m_delegateCreationEnd = 0;
140+ m_displayMarginEnd = end;
169141 if (isComponentComplete()) {
170142 polish();
171143 }
172− emit delegateCreationEndChanged();
144+ emit displayMarginEndChanged();
173145}
174146
175147void AbstractDashView::createDelegateModel()
@@ -186,9 +158,8 @@ void AbstractDashView::refill()
186158 return;
187159 }
188160
189− const bool delegateRangesValid = m_delegateCreationBeginValid && m_delegateCreationEndValid;
190− const qreal from = delegateRangesValid ? m_delegateCreationBegin : 0;
191− const qreal to = delegateRangesValid ? m_delegateCreationEnd : from + height();
161+ const qreal from = -m_displayMarginBeginning;
162+ const qreal to = height() + m_displayMarginEnd;
192163 const qreal buffer = (to - from) * bufferRatio;
193164 const qreal bufferFrom = from - buffer;
194165 const qreal bufferTo = to + buffer;
@@ -205,6 +176,9 @@ void AbstractDashView::refill()
205176
206177bool AbstractDashView::addVisibleItems(qreal fillFromY, qreal fillToY, bool asynchronous)
207178{
179+ if (fillToY <= fillFromY)
180+ return false;
181+
208182 if (!delegate())
209183 return false;
210184
@@ -330,9 +304,8 @@ void AbstractDashView::updatePolish()
330304
331305 refill();
332306
333− const bool delegateRangesValid = m_delegateCreationBeginValid && m_delegateCreationEndValid;
334− const qreal from = delegateRangesValid ? m_delegateCreationBegin : 0;
335− const qreal to = delegateRangesValid ? m_delegateCreationEnd : from + height();
307+ const qreal from = -m_displayMarginBeginning;
308+ const qreal to = height() + m_displayMarginEnd;
336309 updateItemCulling(from, to);
337310
338311 if (m_implicitHeightDirty) {
plugins/DashViews/abstractdashview.h → plugins/Dash/abstractdashview.hrenamed+14−20
@@ -35,14 +35,12 @@ class AbstractDashView : public QQuickItem
3535 Q_PROPERTY(QQmlComponent *delegate READ delegate WRITE setDelegate NOTIFY delegateChanged)
3636 Q_PROPERTY(qreal columnSpacing READ columnSpacing WRITE setColumnSpacing NOTIFY columnSpacingChanged)
3737 Q_PROPERTY(qreal rowSpacing READ rowSpacing WRITE setRowSpacing NOTIFY rowSpacingChanged)
38− Q_PROPERTY(qreal delegateCreationBegin READ delegateCreationBegin
39− WRITE setDelegateCreationBegin
40− NOTIFY delegateCreationBeginChanged
41− RESET resetDelegateCreationBegin)
42− Q_PROPERTY(qreal delegateCreationEnd READ delegateCreationEnd
43− WRITE setDelegateCreationEnd
44− NOTIFY delegateCreationEndChanged
45− RESET resetDelegateCreationEnd)
38+ Q_PROPERTY(qreal displayMarginBeginning READ displayMarginBeginning
39+ WRITE setDisplayMarginBeginning
40+ NOTIFY displayMarginBeginningChanged)
41+ Q_PROPERTY(qreal displayMarginEnd READ displayMarginEnd
42+ WRITE setDisplayMarginEnd
43+ NOTIFY displayMarginEndChanged)
4644
4745friend class VerticalJournalTest;
4846friend class HorizontalJournalTest;
@@ -63,21 +61,19 @@ public:
6361 qreal rowSpacing() const;
6462 void setRowSpacing(qreal rowSpacing);
6563
66− qreal delegateCreationBegin() const;
67− void setDelegateCreationBegin(qreal);
68− void resetDelegateCreationBegin();
64+ qreal displayMarginBeginning() const;
65+ void setDisplayMarginBeginning(qreal);
6966
70− qreal delegateCreationEnd() const;
71− void setDelegateCreationEnd(qreal);
72− void resetDelegateCreationEnd();
67+ qreal displayMarginEnd() const;
68+ void setDisplayMarginEnd(qreal);
7369
7470Q_SIGNALS:
7571 void modelChanged();
7672 void delegateChanged();
7773 void columnSpacingChanged();
7874 void rowSpacingChanged();
79− void delegateCreationBeginChanged();
80− void delegateCreationEndChanged();
75+ void displayMarginBeginningChanged();
76+ void displayMarginEndChanged();
8177
8278protected Q_SLOTS:
8379 void relayout();
@@ -117,10 +113,8 @@ private:
117113
118114 int m_columnSpacing;
119115 int m_rowSpacing;
120− qreal m_delegateCreationBegin;
121− qreal m_delegateCreationEnd;
122− bool m_delegateCreationBeginValid;
123− bool m_delegateCreationEndValid;
116+ qreal m_displayMarginBeginning;
117+ qreal m_displayMarginEnd;
124118 bool m_needsRelayout;
125119 bool m_delegateValidated;
126120 bool m_implicitHeightDirty;
plugins/DashViews/horizontaljournal.cpp → plugins/Dash/horizontaljournal.cpprenamed

The content is the same.

plugins/DashViews/horizontaljournal.h → plugins/Dash/horizontaljournal.hrenamed

The content is the same.

plugins/DashViews/listviewwithpageheader.cpp → plugins/Dash/listviewwithpageheader.cpprenamed+39−28
@@ -138,6 +138,13 @@ void ListViewWithPageHeader::ListItem::setCulled(bool culled)
138138 QQuickItemPrivate::get(m_sectionItem)->setCulled(culled);
139139}
140140
141+void ListViewWithPageHeader::ListItem::setSectionItem(QQuickItem *sectionItem)
142+{
143+ m_sectionItem = sectionItem;
144+ QQmlContext *context = QQmlEngine::contextForObject(m_item)->parentContext();
145+ context->setContextProperty(QLatin1String("hasSectionHeader"), QVariant::fromValue<bool>(sectionItem != nullptr));
146+}
147+
141148ListViewWithPageHeader::ListViewWithPageHeader()
142149 : m_delegateModel(nullptr)
143150 , m_asyncRequestedIndex(-1)
@@ -422,7 +429,7 @@ bool ListViewWithPageHeader::maximizeVisibleArea(int modelIndex, int itemHeight)
422429
423430 ListItem *listItem = itemAtIndex(modelIndex);
424431 if (listItem) {
425− return maximizeVisibleArea(listItem, itemHeight + (listItem->m_sectionItem ? listItem->m_sectionItem->height() : 0));
432+ return maximizeVisibleArea(listItem, itemHeight + (listItem->sectionItem() ? listItem->sectionItem()->height() : 0));
426433 }
427434
428435 return false;
@@ -440,7 +447,7 @@ bool ListViewWithPageHeader::maximizeVisibleArea(ListItem *listItem, int listIte
440447 contentYAnimationType = ContentYAnimationMaximizeVisibleArea;
441448 m_contentYAnimation->start();
442449 } else if ((listItemY < contentY() && listItemY + listItemHeight < contentY() + height()) ||
443− (m_topSectionItem && !listItem->m_sectionItem && listItemY - m_topSectionItem->height() < contentY() && listItemY + listItemHeight < contentY() + height()))
450+ (m_topSectionItem && !listItem->sectionItem() && listItemY - m_topSectionItem->height() < contentY() && listItemY + listItemHeight < contentY() + height()))
444451 {
445452 // we can scroll the list down to show more stuff
446453 auto realVisibleListItemY = listItemY;
@@ -449,7 +456,7 @@ bool ListViewWithPageHeader::maximizeVisibleArea(ListItem *listItem, int listIte
449456 // item we have to make sure to scroll it a bit more so that it is not underlapping
450457 // the top section sticky item
451458 bool topSectionShown = !QQuickItemPrivate::get(m_topSectionItem)->culled;
452− if (topSectionShown && !listItem->m_sectionItem) {
459+ if (topSectionShown && !listItem->sectionItem()) {
453460 realVisibleListItemY -= m_topSectionItem->height();
454461 }
455462 }
@@ -645,7 +652,7 @@ void ListViewWithPageHeader::reallyReleaseItem(ListItem *listItem)
645652 if (flags & QQmlDelegateModel::Destroyed) {
646653 item->setParentItem(nullptr);
647654 }
648− delete listItem->m_sectionItem;
655+ delete listItem->sectionItem();
649656 delete listItem;
650657}
651658
@@ -672,6 +679,9 @@ QQuickItem *ListViewWithPageHeader::getSectionItem(int modelIndex, bool alreadyI
672679 return nullptr;
673680
674681 const QString section = m_delegateModel->stringValue(modelIndex, m_sectionProperty);
682+ if (section.isEmpty())
683+ return nullptr;
684+
675685 if (modelIndex > 0) {
676686 const QString prevSection = m_delegateModel->stringValue(modelIndex - 1, m_sectionProperty);
677687 if (section == prevSection)
@@ -684,8 +694,8 @@ QQuickItem *ListViewWithPageHeader::getSectionItem(int modelIndex, bool alreadyI
684694 // Steal the section header
685695 ListItem *nextItem = itemAtIndex(modelIndex); // Not +1 since not yet inserted into m_visibleItems
686696 if (nextItem) {
687− QQuickItem *sectionItem = nextItem->m_sectionItem;
688− nextItem->m_sectionItem = nullptr;
697+ QQuickItem *sectionItem = nextItem->sectionItem();
698+ nextItem->setSectionItem(nullptr);
689699 return sectionItem;
690700 }
691701 }
@@ -793,7 +803,7 @@ ListViewWithPageHeader::ListItem *ListViewWithPageHeader::createItem(int modelIn
793803// qDebug() << "ListViewWithPageHeader::createItem::We have the item" << modelIndex << item;
794804 ListItem *listItem = new ListItem;
795805 listItem->m_item = item;
796− listItem->m_sectionItem = getSectionItem(modelIndex, false /*Not yet inserted into m_visibleItems*/);
806+ listItem->setSectionItem(getSectionItem(modelIndex, false /*Not yet inserted into m_visibleItems*/));
797807 QQuickItemPrivate::get(item)->addItemChangeListener(this, QQuickItemPrivate::Geometry);
798808 ListItem *prevItem = itemAtIndex(modelIndex - 1);
799809 bool lostItem = false; // Is an item that we requested async but because of model changes
@@ -832,8 +842,8 @@ ListViewWithPageHeader::ListItem *ListViewWithPageHeader::createItem(int modelIn
832842 m_firstVisibleIndex = modelIndex;
833843 polish();
834844 }
835− if (listItem->m_sectionItem) {
836− QQmlContext *context = QQmlEngine::contextForObject(listItem->m_sectionItem)->parentContext();
845+ if (listItem->sectionItem()) {
846+ QQmlContext *context = QQmlEngine::contextForObject(listItem->sectionItem())->parentContext();
837847 context->setContextProperty(QLatin1String("delegateIndex"), modelIndex);
838848 }
839849 adjustMinYExtent();
@@ -861,6 +871,7 @@ void ListViewWithPageHeader::itemCreated(int modelIndex, QObject *object)
861871 QQmlContext *context = QQmlEngine::contextForObject(item)->parentContext();
862872 context->setContextProperty(QLatin1String("ListViewWithPageHeader"), this);
863873 context->setContextProperty(QLatin1String("heightToClip"), QVariant::fromValue<int>(0));
874+ context->setContextProperty(QLatin1String("hasSectionHeader"), QVariant::fromValue<bool>(false));
864875 if (modelIndex == m_asyncRequestedIndex) {
865876 createItem(modelIndex, false);
866877 refill();
@@ -915,11 +926,11 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
915926 if (visibleIndex >= 0 && visibleIndex < m_visibleItems.count()) {
916927 ListItem *item = m_visibleItems[visibleIndex];
917928 // Pass the section item down if needed
918− if (item->m_sectionItem && visibleIndex + 1 < m_visibleItems.count()) {
929+ if (item->sectionItem() && visibleIndex + 1 < m_visibleItems.count()) {
919930 ListItem *nextItem = m_visibleItems[visibleIndex + 1];
920− if (!nextItem->m_sectionItem) {
921− nextItem->m_sectionItem = item->m_sectionItem;
922− item->m_sectionItem = nullptr;
931+ if (!nextItem->sectionItem()) {
932+ nextItem->setSectionItem(item->sectionItem());
933+ item->setSectionItem(nullptr);
923934 }
924935 }
925936 releaseItem(item);
@@ -982,11 +993,11 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
982993 // if we need adding a new section item
983994 if (m_sectionDelegate) {
984995 ListItem *nextItem = itemAtIndex(modelIndex + 1);
985− if (nextItem && !nextItem->m_sectionItem) {
986− nextItem->m_sectionItem = getSectionItem(modelIndex + 1, true /* alredy inserted into m_visibleItems*/);
987− if (growUp && nextItem->m_sectionItem) {
996+ if (nextItem && !nextItem->sectionItem()) {
997+ nextItem->setSectionItem(getSectionItem(modelIndex + 1, true /* alredy inserted into m_visibleItems*/));
998+ if (growUp && nextItem->sectionItem()) {
988999 ListItem *firstItem = m_visibleItems.first();
989− firstItem->setY(firstItem->y() - nextItem->m_sectionItem->height());
1000+ firstItem->setY(firstItem->y() - nextItem->sectionItem()->height());
9901001 }
9911002 }
9921003 }
@@ -1012,8 +1023,8 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
10121023// qDebug() << "ListViewWithPageHeader::onModelUpdated Change" << change.index << change.count;
10131024 for (int i = change.index; i < change.count; ++i) {
10141025 ListItem *item = itemAtIndex(i);
1015− if (item && item->m_sectionItem) {
1016− QQmlContext *context = QQmlEngine::contextForObject(item->m_sectionItem)->parentContext();
1026+ if (item && item->sectionItem()) {
1027+ QQmlContext *context = QQmlEngine::contextForObject(item->sectionItem())->parentContext();
10171028 const QString sectionText = m_delegateModel->stringValue(i, m_sectionProperty);
10181029 context->setContextProperty(QLatin1String("section"), sectionText);
10191030 }
@@ -1026,8 +1037,8 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
10261037
10271038 for (int i = 0; i < m_visibleItems.count(); ++i) {
10281039 ListItem *item = m_visibleItems[i];
1029− if (item->m_sectionItem) {
1030− QQmlContext *context = QQmlEngine::contextForObject(item->m_sectionItem)->parentContext();
1040+ if (item->sectionItem()) {
1041+ QQmlContext *context = QQmlEngine::contextForObject(item->sectionItem())->parentContext();
10311042 context->setContextProperty(QLatin1String("delegateIndex"), m_firstVisibleIndex + i);
10321043 }
10331044 }
@@ -1156,18 +1167,18 @@ void ListViewWithPageHeader::layout()
11561167 if (topSectionStickPos > pos) {
11571168 showStickySectionItem = true;
11581169 } else if (topSectionStickPos == pos) {
1159− showStickySectionItem = !item->m_sectionItem;
1170+ showStickySectionItem = !item->sectionItem();
11601171 } else {
11611172 showStickySectionItem = false;
11621173 }
11631174 if (!showStickySectionItem) {
11641175 QQuickItemPrivate::get(m_topSectionItem)->setCulled(true);
1165− if (item->m_sectionItem) {
1176+ if (item->sectionItem()) {
11661177 // This seems it should happen since why would we cull the top section
11671178 // if the first visible item has no section header? This only happens briefly
11681179 // when increasing the height of a list that is at the bottom, the m_topSectionItem
11691180 // gets shown shortly in the next polish call
1170− QQuickItemPrivate::get(item->m_sectionItem)->setCulled(false);
1181+ QQuickItemPrivate::get(item->sectionItem())->setCulled(false);
11711182 }
11721183 } else {
11731184 // Update the top sticky section header
@@ -1186,14 +1197,14 @@ void ListViewWithPageHeader::layout()
11861197 delegateIndex--;
11871198 }
11881199 context->setContextProperty(QLatin1String("delegateIndex"), delegateIndex);
1189− if (item->m_sectionItem) {
1190− QQuickItemPrivate::get(item->m_sectionItem)->setCulled(true);
1200+ if (item->sectionItem()) {
1201+ QQuickItemPrivate::get(item->sectionItem())->setCulled(true);
11911202 }
11921203 }
11931204 }
11941205 }
11951206 QQmlContext *context = QQmlEngine::contextForObject(item->m_item)->parentContext();
1196− const qreal clipFrom = visibleFrom + (!item->m_sectionItem && m_topSectionItem && !QQuickItemPrivate::get(m_topSectionItem)->culled ? m_topSectionItem->height() : 0);
1207+ const qreal clipFrom = visibleFrom + (!item->sectionItem() && m_topSectionItem && !QQuickItemPrivate::get(m_topSectionItem)->culled ? m_topSectionItem->height() : 0);
11971208 if (!cull && pos < clipFrom) {
11981209 context->setContextProperty(QLatin1String("heightToClip"), clipFrom - pos);
11991210 } else {
@@ -1210,7 +1221,7 @@ void ListViewWithPageHeader::layout()
12101221 if (firstReallyVisibleItem >= 0) {
12111222 for (int i = firstReallyVisibleItem - m_firstVisibleIndex + 1; i < m_visibleItems.count(); ++i) {
12121223 ListItem *item = m_visibleItems[i];
1213− if (item->m_sectionItem) {
1224+ if (item->sectionItem()) {
12141225 if (m_topSectionItem->y() + m_topSectionItem->height() > item->y()) {
12151226 m_topSectionItem->setY(item->y() - m_topSectionItem->height());
12161227 }
plugins/DashViews/listviewwithpageheader.h → plugins/Dash/listviewwithpageheader.hrenamed+9−5
@@ -102,11 +102,11 @@ Q_SIGNALS:
102102 void stickyHeaderHeightChanged();
103103
104104protected:
105− void componentComplete();
106− void viewportMoved(Qt::Orientations orient);
107− qreal minYExtent() const;
108− void itemGeometryChanged(QQuickItem *item, const QRectF &newGeometry, const QRectF &oldGeometry);
109− void updatePolish();
105+ void componentComplete() override;
106+ void viewportMoved(Qt::Orientations orient) override;
107+ qreal minYExtent() const override;
108+ void itemGeometryChanged(QQuickItem *item, const QRectF &newGeometry, const QRectF &oldGeometry) override;
109+ void updatePolish() override;
110110
111111private Q_SLOTS:
112112 void itemCreated(int modelIndex, QObject *object);
@@ -128,7 +128,11 @@ private:
128128 bool culled() const;
129129 void setCulled(bool culled);
130130
131+ QQuickItem *sectionItem() const { return m_sectionItem; }
132+ void setSectionItem(QQuickItem *sectionItem);
133+
131134 QQuickItem *m_item;
135+ private:
132136 QQuickItem *m_sectionItem;
133137 };
134138
plugins/DashViews/organicgrid.cpp → plugins/Dash/organicgrid.cpprenamed

The content is the same.

plugins/DashViews/organicgrid.h → plugins/Dash/organicgrid.hrenamed

The content is the same.

plugins/DashViews/plugin.cpp → plugins/Dash/plugin.cpprenamed+2−2
@@ -24,9 +24,9 @@
2424
2525#include <QAbstractItemModel>
2626
27−void DashViewsPlugin::registerTypes(const char *uri)
27+void DashPlugin::registerTypes(const char *uri)
2828{
29− Q_ASSERT(uri == QLatin1String("DashViews"));
29+ Q_ASSERT(uri == QLatin1String("Dash"));
3030 qmlRegisterType<QAbstractItemModel>();
3131 qmlRegisterType<HorizontalJournal>(uri, 0, 1, "HorizontalJournal");
3232 qmlRegisterType<ListViewWithPageHeader>(uri, 0, 1, "ListViewWithPageHeader");
plugins/DashViews/plugin.h → plugins/Dash/plugin.hrenamed+3−3
@@ -15,13 +15,13 @@
1515 *
1616 */
1717
18−#ifndef DASHVIEWS_PLUGIN_H
19−#define DASHVIEWS_PLUGIN_H
18+#ifndef DASH_PLUGIN_H
19+#define DASH_PLUGIN_H
2020
2121#include <QtQml/QQmlEngine>
2222#include <QtQml/QQmlExtensionPlugin>
2323
24−class DashViewsPlugin : public QQmlExtensionPlugin
24+class DashPlugin : public QQmlExtensionPlugin
2525{
2626 Q_OBJECT
2727 Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
plugins/Dash/qmldirnew file+4
@@ -0,0 +1,4 @@
1+module Dash
2+plugin Dash-qml
3+typeinfo Dash.qmltypes
4+singleton CardCreatorCache 0.1 CardCreatorCache.qml
plugins/DashViews/verticaljournal.cpp → plugins/Dash/verticaljournal.cpprenamed

The content is the same.

plugins/DashViews/verticaljournal.h → plugins/Dash/verticaljournal.hrenamed

The content is the same.

plugins/DashViews/qmldirdeleted−3
@@ -1,3 +0,0 @@
1−module DashViews
2−plugin DashViews-qml
3−typeinfo plugin.qmltypes
plugins/HudClient/CMakeLists.txt+1−6
@@ -1,6 +1,3 @@
1−# export_qmlplugin macro
2−include(Plugins)
3−
41find_package(Qt5Core REQUIRED)
52find_package(Qt5Quick REQUIRED)
63pkg_search_module(DEE dee-1.0 REQUIRED)
@@ -38,6 +35,4 @@ target_link_libraries(HudClientQml
3835
3936qt5_use_modules(HudClientQml Qml)
4037
41−# export the qmldir qmltypes and plugin files
42−export_qmlfiles(HudClient HudClient)
43−export_qmlplugin(HudClient 0.1 HudClient TARGETS HudClientQml)
38+add_unity8_plugin(HudClient 0.1 HudClient TARGETS HudClientQml)
plugins/HudClient/qmldir+1−1
@@ -1,3 +1,3 @@
11module HudClient
22plugin HudClientQml
3−typeinfo plugin.qmltypes
3+typeinfo HudClient.qmltypes
plugins/LightDM/CMakeLists.txt+1−6
@@ -1,6 +1,3 @@
1−# export_qmlplugin macro
2−include(Plugins)
3−
41# Dependencies
52include(FindPkgConfig)
63pkg_check_modules(LIBUSERMETRICSOUTPUT REQUIRED libusermetricsoutput-1)
@@ -37,6 +34,4 @@ target_link_libraries(LightDM-qml
3734
3835qt5_use_modules(LightDM-qml DBus Gui Qml)
3936
40−# export the qmldir qmltypes and plugin files
41−export_qmlfiles(LightDM LightDM)
42−export_qmlplugin(LightDM 0.1 LightDM TARGETS LightDM-qml)
37+add_unity8_plugin(LightDM 0.1 LightDM TARGETS LightDM-qml)
plugins/LightDM/qmldir+1−1
@@ -1,3 +1,3 @@
11module LightDM
22plugin LightDM-qml
3−typeinfo plugin.qmltypes
3+typeinfo LightDM.qmltypes
plugins/Powerd/CMakeLists.txt+1−3
@@ -1,4 +1,3 @@
1−include(Plugins)
21include(FindPkgConfig)
32
43pkg_search_module(GIO REQUIRED gio-2.0)
@@ -17,5 +16,4 @@ add_library(Powerd-qml MODULE
1716qt5_use_modules(Powerd-qml DBus Qml)
1817target_link_libraries(Powerd-qml ${GIO_LDFLAGS})
1918
20−export_qmlfiles(Powerd Powerd)
21−export_qmlplugin(Powerd 0.1 Powerd TARGETS Powerd-qml)
19+add_unity8_plugin(Powerd 0.1 Powerd TARGETS Powerd-qml)
plugins/Powerd/qmldir+1−1
@@ -1,3 +1,3 @@
11module Powerd
22plugin Powerd-qml
3−typeinfo plugin.qmltypes
3+typeinfo Powerd.qmltypes
plugins/SessionBroadcast/CMakeLists.txt+1−4
@@ -1,5 +1,3 @@
1−include(Plugins)
2−
31add_definitions(-DSM_BUSNAME=systemBus)
42
53add_library(SessionBroadcast-qml MODULE
@@ -9,5 +7,4 @@ add_library(SessionBroadcast-qml MODULE
97
108qt5_use_modules(SessionBroadcast-qml DBus Qml)
119
12−export_qmlfiles(SessionBroadcast SessionBroadcast)
13−export_qmlplugin(SessionBroadcast 0.1 SessionBroadcast TARGETS SessionBroadcast-qml)
10+add_unity8_plugin(SessionBroadcast 0.1 SessionBroadcast TARGETS SessionBroadcast-qml)
plugins/SessionBroadcast/qmldir+1−1
@@ -1,3 +1,3 @@
11module SessionBroadcast
22plugin SessionBroadcast-qml
3−typeinfo plugin.qmltypes
3+typeinfo SessionBroadcast.qmltypes
plugins/Ubuntu/DownloadDaemonListener/CMakeLists.txt+1−6
@@ -1,6 +1,3 @@
1−# export_qmlplugin macro
2−include(Plugins)
3−
41include_directories(
52 ${CMAKE_CURRENT_SOURCE_DIR}
63 ${CMAKE_CURRENT_BINARY_DIR}
@@ -17,6 +14,4 @@ add_library(DownloadDaemonListener MODULE ${DOWNLOADDAEMONLISTENER_SOURCES})
1714
1815qt5_use_modules(DownloadDaemonListener Qml Quick DBus Core)
1916
20−# export the qmldir qmltypes and plugin files
21−export_qmlfiles(Ubuntu.DownloadDaemonListener Ubuntu/DownloadDaemonListener)
22−export_qmlplugin(Ubuntu.DownloadDaemonListener 0.1 Ubuntu/DownloadDaemonListener TARGETS DownloadDaemonListener)
17+add_unity8_plugin(Ubuntu.DownloadDaemonListener 0.1 Ubuntu/DownloadDaemonListener TARGETS DownloadDaemonListener)
plugins/Ubuntu/DownloadDaemonListener/qmldir+1−1
@@ -1,3 +1,3 @@
11module Ubuntu.DownloadDaemonListener
22plugin DownloadDaemonListener
3−typeinfo plugins.qmltypes
3+typeinfo DownloadDaemonListener.qmltypes
plugins/Ubuntu/Gestures/CMakeLists.txt+1−6
@@ -1,6 +1,3 @@
1−# export_qmlplugin macro
2−include(Plugins)
3−
41set(UbuntuGestureQml_SOURCES
52 plugin.cpp
63 AxisVelocityCalculator.cpp
@@ -19,6 +16,4 @@ qt5_use_modules(UbuntuGestureQml Core Quick)
1916# So that Foo.cpp can #include "Foo.moc"
2017include_directories(${CMAKE_CURRENT_BINARY_DIR})
2118
22−# export the qmldir qmltypes and plugin files
23−export_qmlfiles(Ubuntu.Gestures Ubuntu/Gestures)
24−export_qmlplugin(Ubuntu.Gestures 0.1 Ubuntu/Gestures TARGETS UbuntuGestureQml)
19+add_unity8_plugin(Ubuntu.Gestures 0.1 Ubuntu/Gestures TARGETS UbuntuGestureQml)
plugins/Ubuntu/Gestures/qmldir+1−1
@@ -1,3 +1,3 @@
11module Ubuntu.Gestures
22plugin UbuntuGestureQml
3−typeinfo plugin.qmltypes
3+typeinfo Gestures.qmltypes
plugins/Unity/Indicators/CMakeLists.txt+4−7
@@ -1,6 +1,3 @@
1−# export_qmlplugin macro
2−include(Plugins)
3−
41project(IndicatorsQml)
52
63pkg_check_modules(GLIB REQUIRED glib-2.0>=2.32)
@@ -10,8 +7,6 @@ pkg_check_modules(QMENUMODEL REQUIRED qmenumodel)
107find_package(Qt5Core REQUIRED)
118find_package(Qt5Quick REQUIRED)
129
13−add_subdirectory(qml)
14−
1510include_directories(
1611 ${CMAKE_CURRENT_SOURCE_DIR}
1712 ${CMAKE_CURRENT_BINARY_DIR}
@@ -56,5 +51,7 @@ target_link_libraries(IndicatorsQml
5651
5752qt5_use_modules(IndicatorsQml Core Qml Quick)
5853
59−# export the qmltypes and plugin files
60−export_qmlplugin(Unity.Indicators 0.1 Unity/Indicators TARGETS IndicatorsQml)
54+add_unity8_plugin(Unity.Indicators 0.1 Unity/Indicators
55+ SEARCH_PATH qml
56+ TARGETS IndicatorsQml
57+)
plugins/Unity/Indicators/menucontentactivator.cpp−1
@@ -316,7 +316,6 @@ MenuContentState* MenuContentActivatorPrivate::content_at(QQmlListProperty<MenuC
316316 if (!d->m_content.contains(index)) {
317317 MenuContentState* content = new MenuContentState(false);
318318 d->m_content[index] = content;
319− Q_EMIT p->contentChanged();
320319 return content;
321320 }
322321
plugins/Unity/Indicators/qml/CMakeLists.txtdeleted−5
@@ -1,5 +0,0 @@
1−# export_qmlplugin macro
2−include(Plugins)
3−
4−# export the qmldir, *.qml files.
5−export_qmlfiles(Unity.Indicators Unity/Indicators)
plugins/Unity/Indicators/qml/qmldir+1−1
@@ -1,6 +1,6 @@
11module Unity.Indicators
22plugin IndicatorsQml
3−typeinfo plugin.qmltypes
3+typeinfo Indicators.qmltypes
44
55CachedUnityMenuModel 0.1 CachedUnityMenuModel.qml
66IndicatorBase 0.1 IndicatorBase.qml
plugins/Unity/Indicators/rootactionstate.cpp+7−8
@@ -240,19 +240,18 @@ QVariant RootActionState::toQVariant(GVariant* state) const
240240
241241 QStringList icons;
242242
243− if (g_variant_type_is_array(g_variant_get_type(vvalue))) {
244−
245−
246− for (int i = 0, iMax = g_variant_n_children(vvalue); i < iMax; i++) {
247− GVariant *child = g_variant_get_child_value(vvalue, i);
248−
243+ if (g_variant_is_of_type(vvalue, G_VARIANT_TYPE("av"))) {
244+ GVariantIter iter;
245+ GVariant *val = 0;
246+ g_variant_iter_init (&iter, vvalue);
247+ while (g_variant_iter_loop (&iter, "v", &val))
248+ {
249249 // FIXME - should be sending a url.
250− GIcon *gicon = g_icon_deserialize (child);
250+ GIcon *gicon = g_icon_deserialize (val);
251251 if (gicon) {
252252 icons << iconUri(gicon);
253253 g_object_unref (gicon);
254254 }
255− g_variant_unref(child);
256255 }
257256 }
258257 // will overwrite icon.
plugins/Unity/Launcher/CMakeLists.txt+1−3
@@ -32,6 +32,4 @@ target_link_libraries(UnityLauncher-qml ${GSETTINGS_QT_LDFLAGS})
3232
3333qt5_use_modules(UnityLauncher-qml DBus Qml)
3434
35−# export the qmldir and qmltypes files
36−export_qmlfiles(Unity.Launcher Unity/Launcher)
37−export_qmlplugin(Unity.Launcher 0.1 Unity/Launcher TARGETS UnityLauncher-qml)
35+add_unity8_plugin(Unity.Launcher 0.1 Unity/Launcher TARGETS UnityLauncher-qml)
plugins/Unity/Launcher/backend/launcherbackend.cpp+29−15
@@ -31,7 +31,6 @@
3131class LauncherBackendItem
3232{
3333public:
34− QString desktopFile;
3534 QString displayName;
3635 QString icon;
3736 int count;
@@ -107,11 +106,6 @@ void LauncherBackend::setStoredApplications(const QStringList &appIds)
107106
108107QString LauncherBackend::desktopFile(const QString &appId) const
109108{
110− LauncherBackendItem *item = m_itemCache.value(appId, nullptr);
111− if (item) {
112− return item->desktopFile;
113− }
114−
115109 return findDesktopFile(appId);
116110}
117111
@@ -264,13 +258,33 @@ void LauncherBackend::syncFromAccounts()
264258 Q_FOREACH(const QString &entry, gSettings.get("favorites").toStringList()) {
265259 if (entry.startsWith("application://")) {
266260 QString appId = entry;
267− // Transform "application://foobar.desktop" to "foobar"
261+ // Transform "application://foobar.desktop" to "application://foobar"
268262 appId.remove("application://");
269263 if (appId.endsWith(".desktop")) {
270264 appId.chop(8);
271265 }
272266 QString df = findDesktopFile(appId);
273267
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+
274288 if (!df.isEmpty()) {
275289 m_storedApps << appId;
276290
@@ -315,10 +329,13 @@ QString LauncherBackend::findDesktopFile(const QString &appId) const
315329 helper = helper.replace(dashPos, 1, '/');
316330 }
317331
318− Q_FOREACH(const QString &searchDir, searchDirs) {
319− QFileInfo fileInfo(QDir(searchDir), helper + ".desktop");
320− if (fileInfo.exists()) {
321− return fileInfo.absoluteFilePath();
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+ }
322339 }
323340 }
324341
@@ -333,7 +350,6 @@ LauncherBackendItem* LauncherBackend::parseDesktopFile(const QString &desktopFil
333350 QSettings settings(desktopFile, QSettings::IniFormat);
334351
335352 LauncherBackendItem* item = new LauncherBackendItem();
336− item->desktopFile = desktopFile;
337353 item->displayName = settings.value("Desktop Entry/Name").toString();
338354
339355 QString iconString = settings.value("Desktop Entry/Icon").toString();
@@ -367,7 +383,7 @@ LauncherBackendItem* LauncherBackend::getItem(const QString &appId) const
367383 qWarning() << "Unable to parse desktop file for" << appId << "path" << df;
368384 }
369385 } else {
370− qDebug() << "Unable to find desktop file for:" << appId;
386+ qWarning() << "Unable to find desktop file for:" << appId;
371387 }
372388 }
373389
@@ -391,7 +407,6 @@ void LauncherBackend::loadFromVariant(const QVariantMap &details)
391407
392408 item = new LauncherBackendItem();
393409
394− item->desktopFile = details.value("desktopFile").toString();
395410 item->displayName = details.value("name").toString();
396411 item->icon = details.value("icon").toString();
397412 item->count = details.value("count").toInt();
@@ -408,7 +423,6 @@ QVariantMap LauncherBackend::itemToVariant(const QString &appId) const
408423 details.insert("id", appId);
409424 details.insert("name", item->displayName);
410425 details.insert("icon", item->icon);
411− details.insert("desktopFile", item->desktopFile);
412426 details.insert("count", item->count);
413427 details.insert("countVisible", item->countVisible);
414428 return details;
plugins/Unity/Launcher/launchermodel.cpp+22
@@ -23,6 +23,8 @@
2323
2424#include <unity/shell/application/ApplicationInfoInterface.h>
2525
26+#include <QDebug>
27+
2628using namespace unity::shell::application;
2729
2830LauncherModel::LauncherModel(QObject *parent):
@@ -199,6 +201,22 @@ void LauncherModel::setUser(const QString &username)
199201 m_backend->setUser(username);
200202}
201203
204+QString LauncherModel::getUrlForAppId(const QString &appId) const
205+{
206+ // appId is either an appId or a legacy app name. Let's find out which
207+ if (appId.isEmpty())
208+ return QString();
209+
210+ QString df = m_backend->desktopFile(appId + ".desktop");
211+ if (!df.isEmpty())
212+ return "application:///" + appId + ".desktop";
213+
214+ QStringList parts = appId.split('_');
215+ QString package = parts.value(0);
216+ QString app = parts.value(1, "first-listed-app");
217+ return "appid://" + package + "/" + app + "/current-user-version";
218+}
219+
202220ApplicationManagerInterface *LauncherModel::applicationManager() const
203221{
204222 return m_appManager;
@@ -291,6 +309,10 @@ void LauncherModel::applicationAdded(const QModelIndex &parent, int row)
291309 Q_UNUSED(parent);
292310
293311 ApplicationInfoInterface *app = m_appManager->get(row);
312+ if (!app) {
313+ qWarning() << "LauncherModel received an applicationAdded signal, but there's no such application!";
314+ return;
315+ }
294316
295317 bool found = false;
296318 Q_FOREACH(LauncherItem *item, m_list) {
plugins/Unity/Launcher/launchermodel.h+1
@@ -51,6 +51,7 @@ public:
5151 Q_INVOKABLE void requestRemove(const QString &appId);
5252 Q_INVOKABLE void quickListActionInvoked(const QString &appId, int actionIndex);
5353 Q_INVOKABLE void setUser(const QString &username);
54+ Q_INVOKABLE QString getUrlForAppId(const QString &appId) const;
5455
5556 unity::shell::application::ApplicationManagerInterface* applicationManager() const;
5657 void setApplicationManager(unity::shell::application::ApplicationManagerInterface *appManager);
plugins/Unity/Launcher/qmldir+1−1
@@ -1,3 +1,3 @@
11module Unity.Launcher
22plugin UnityLauncher-qml
3−typeinfo plugin.qmltypes
3+typeinfo Launcher.qmltypes
plugins/Utils/CMakeLists.txt+1−4
@@ -11,7 +11,6 @@ include_directories(
1111)
1212
1313set(QMLPLUGIN_SRC
14− bottombarvisibilitycommunicatorshell.cpp
1514 qlimitproxymodelqml.cpp
1615 qsortfilterproxymodelqml.cpp
1716 timeformatter.cpp
@@ -34,6 +33,4 @@ set_target_properties(Utils-qml PROPERTIES COMPILE_FLAGS -fvisibility=default)
3433
3534qt5_use_modules(Utils-qml Qml Quick DBus Network XmlPatterns Gui Concurrent)
3635
37−# export the qmldir qmltypes and plugin files
38−export_qmlfiles(Utils Utils)
39−export_qmlplugin(Utils 0.1 Utils TARGETS Utils-qml)
36+add_unity8_plugin(Utils 0.1 Utils TARGETS Utils-qml)
plugins/Utils/bottombarvisibilitycommunicatorshell.cppdeleted−49
@@ -1,49 +0,0 @@
1−/*
2− * Copyright (C) 2012 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 "bottombarvisibilitycommunicatorshell.h"
18−
19−BottomBarVisibilityCommunicatorShell::BottomBarVisibilityCommunicatorShell()
20− : m_forceHidden(false),
21− m_position(0)
22−{
23−}
24−
25−bool BottomBarVisibilityCommunicatorShell::forceHidden() const
26−{
27− return m_forceHidden;
28−}
29−
30−double BottomBarVisibilityCommunicatorShell::position() const
31−{
32− return m_position;
33−}
34−
35−void BottomBarVisibilityCommunicatorShell::setForceHidden(bool forceHidden)
36−{
37− if (forceHidden != m_forceHidden) {
38− m_forceHidden = forceHidden;
39− Q_EMIT forceHiddenChanged(forceHidden);
40− }
41−}
42−
43−void BottomBarVisibilityCommunicatorShell::setPosition(double position)
44−{
45− if (position != m_position) {
46− m_position = position;
47− Q_EMIT positionChanged(position);
48− }
49−}
plugins/Utils/bottombarvisibilitycommunicatorshell.hdeleted−59
@@ -1,59 +0,0 @@
1−/*
2− * Copyright (C) 2012 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 BOTTOMBARVISIBILITYCOMMUNICATORSHELL_H
18−#define BOTTOMBARVISIBILITYCOMMUNICATORSHELL_H
19−
20−#include <QObject>
21−
22−class QDBusInterface;
23−
24−/** This is an internal class used to talk with the bottom bar used by either
25− * applications or the SDK.
26− * There is a method to force the bottom bar to be hidden or otherwise behave as usual
27− */
28−
29−class BottomBarVisibilityCommunicatorShell : public QObject
30−{
31− Q_OBJECT
32− Q_PROPERTY(bool forceHidden READ forceHidden WRITE setForceHidden NOTIFY forceHiddenChanged)
33− Q_PROPERTY(double position READ position WRITE setPosition NOTIFY positionChanged)
34−
35− Q_CLASSINFO("D-Bus Interface", "com.canonical.Shell.BottomBarVisibilityCommunicator")
36−public:
37− static BottomBarVisibilityCommunicatorShell& instance() {
38− static BottomBarVisibilityCommunicatorShell instance;
39− return instance;
40− }
41−
42− bool forceHidden() const;
43− void setForceHidden(bool forceHidden);
44−
45− double position() const;
46− void setPosition(double position);
47−
48−Q_SIGNALS:
49− void forceHiddenChanged(bool forceHidden);
50− void positionChanged(double position);
51−
52−private:
53− BottomBarVisibilityCommunicatorShell();
54−
55− bool m_forceHidden;
56− double m_position;
57−};
58−
59−#endif
plugins/Utils/plugin.cpp−10
@@ -26,16 +26,12 @@
2626#include "plugin.h"
2727
2828// local
29−#include "bottombarvisibilitycommunicatorshell.h"
3029#include "qlimitproxymodelqml.h"
3130#include "qsortfilterproxymodelqml.h"
3231#include "timeformatter.h"
3332#include "unitymenumodelpaths.h"
3433#include "easingcurve.h"
3534
36−static const char* BOTTOM_BAR_VISIBILITY_COMMUNICATOR_DBUS_PATH = "/BottomBarVisibilityCommunicator";
37−static const char* DBUS_SERVICE = "com.canonical.Shell.BottomBarVisibilityCommunicator";
38−
3935void UtilsPlugin::registerTypes(const char *uri)
4036{
4137 Q_ASSERT(uri == QLatin1String("Utils"));
@@ -45,16 +41,10 @@ void UtilsPlugin::registerTypes(const char *uri)
4541 qmlRegisterType<UnityMenuModelPaths>(uri, 0, 1, "UnityMenuModelPaths");
4642 qmlRegisterType<TimeFormatter>(uri, 0, 1, "TimeFormatter");
4743 qmlRegisterType<GDateTimeFormatter>(uri, 0, 1, "GDateTimeFormatter");
48− qmlRegisterUncreatableType<BottomBarVisibilityCommunicatorShell>(uri, 0, 1, "BottomBarVisibilityCommunicatorShell", "Can't create BottomBarVisibilityCommunicatorShell");
4944 qmlRegisterType<EasingCurve>(uri, 0, 1, "EasingCurve");
5045}
5146
5247void UtilsPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
5348{
5449 QQmlExtensionPlugin::initializeEngine(engine, uri);
55−
56− QDBusConnection::sessionBus().registerService(DBUS_SERVICE);
57− BottomBarVisibilityCommunicatorShell *bottomBarVisibilityCommunicator = &BottomBarVisibilityCommunicatorShell::instance();
58− QDBusConnection::sessionBus().registerObject(BOTTOM_BAR_VISIBILITY_COMMUNICATOR_DBUS_PATH, bottomBarVisibilityCommunicator, QDBusConnection::ExportAllContents);
59− engine->rootContext()->setContextProperty("bottomBarVisibilityCommunicatorShell", bottomBarVisibilityCommunicator);
6050}
plugins/Utils/qmldir+1−1
@@ -1,3 +1,3 @@
11module Utils
22plugin Utils-qml
3−typeinfo plugin.qmltypes
3+typeinfo Utils.qmltypes
po/am.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2014-01-18 19:28+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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr ""
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr ""
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr "ሰላም %1"
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr "ሰላም"
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr ""
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr "መላኪያ"
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr "ሰላም %1"
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr "ሰላም"
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr "ማረጋገጫ"
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr "መፈለጊያ"
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr "እባክዎን ያስገቡ %1"
po/ar.po+36−29
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
11−"PO-Revision-Date: 2014-02-21 11:19+0000\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
11+"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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -75,10 +75,35 @@ msgstr ""
7575"أنت الآن بارع في إيماءات الحواف ويمكنك البدء باستخدام هاتفك<br><br>انقر على "
7676"الشاشة للبدء"
7777
78+#: qml/Components/Lockscreen.qml:214
79+msgid "Emergency Call"
80+msgstr "مكالمة طوارئ"
81+
82+#: qml/Components/Lockscreen.qml:231
83+msgid "OK"
84+msgstr ""
85+
7886#: qml/Components/PageHeader.qml:365
7987msgid "Recent searches"
8088msgstr "عمليات البحث الأخيرة"
8189
90+#: qml/Components/PassphraseLockscreen.qml:60
91+#, qt-format
92+msgid "Hello %1"
93+msgstr "مرحبا %1"
94+
95+#: qml/Components/PassphraseLockscreen.qml:60
96+msgid "Hello"
97+msgstr "مرحبًا"
98+
99+#: qml/Components/PinLockscreen.qml:198
100+msgid "CANCEL"
101+msgstr ""
102+
103+#: qml/Components/PinLockscreen.qml:216
104+msgid "DONE"
105+msgstr ""
106+
82107#: qml/Components/SeeMore.qml:35
83108msgid "See more"
84109msgstr "شاهد المزيد"
@@ -89,12 +114,7 @@ msgstr "شاهد أقل"
89114
90115#: qml/Dash/DashApps.qml:37
91116msgid "Recent"
92−msgstr ""
93−
94−#: qml/Dash/PreviewListView.qml:52
95−#, qt-format
96−msgid "%1 Preview"
97−msgstr ""
117+msgstr "استُخدمت مؤخرًا"
98118
99119#: qml/Dash/Previews/PreviewActionCombo.qml:34
100120msgid "More..."
@@ -104,34 +124,21 @@ msgstr "المزيد..."
104124msgid "Less..."
105125msgstr "أقل..."
106126
107−#: qml/Dash/Previews/PreviewRatingInput.qml:81
127+#: qml/Dash/Previews/PreviewRatingInput.qml:82
108128msgid "Rate this"
109129msgstr "قيّم ذلك"
110130
111−#: qml/Dash/Previews/PreviewRatingInput.qml:126
131+#: qml/Dash/Previews/PreviewRatingInput.qml:128
112132msgid "Add a review"
113133msgstr "أضف تعليق"
114134
115−#: qml/Dash/Previews/PreviewRatingInput.qml:166
135+#: qml/Dash/Previews/PreviewRatingInput.qml:168
116136msgid "Send"
117137msgstr "أرسل"
118138
119−#: qml/Greeter/Greeter.qml:151
139+#: qml/Greeter/Greeter.qml:157
120140msgid "Swipe to unlock"
121−msgstr ""
122−
123−#: qml/Greeter/Lockscreen.qml:149
124−msgid "Emergency Call"
125−msgstr "مكالمة طوارئ"
126−
127−#: qml/Greeter/PassphraseLockscreen.qml:59
128−#, qt-format
129−msgid "Hello %1"
130−msgstr "مرحبا %1"
131−
132−#: qml/Greeter/PassphraseLockscreen.qml:59
133−msgid "Hello"
134−msgstr "مرحبًا"
141+msgstr "اسحب لفتح القفل"
135142
136143#: qml/Hud/HudParametrizedActionsPage.qml:132
137144msgid "Confirm"
@@ -165,7 +172,7 @@ msgstr "من فضلك أدخِل رقم التعريف الشخصي لبطاقة
165172msgid "Search"
166173msgstr "ابحث"
167174
168−#: qml/Shell.qml:348
175+#: qml/Shell.qml:334
169176#, qt-format
170177msgid "Please enter %1"
171178msgstr "من فضلك أدخِل %1"
po/ast.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2014-04-04 02:16+0000\n"
1212"Last-Translator: Xuacu Saturio <xuacusk8@gmail.com>\n"
1313"Language-Team: Asturian <ast@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -76,10 +76,35 @@ msgstr ""
7676"Agora domina los xestos de los bordes y pue principiar a usar el "
7777"teléfonu<br><br>Toque la pantalla pa comenzar"
7878
79+#: qml/Components/Lockscreen.qml:214
80+msgid "Emergency Call"
81+msgstr "Llamada d'emerxencia"
82+
83+#: qml/Components/Lockscreen.qml:231
84+msgid "OK"
85+msgstr ""
86+
7987#: qml/Components/PageHeader.qml:365
8088msgid "Recent searches"
8189msgstr "Busques recientes"
8290
91+#: qml/Components/PassphraseLockscreen.qml:60
92+#, qt-format
93+msgid "Hello %1"
94+msgstr "Hola %1"
95+
96+#: qml/Components/PassphraseLockscreen.qml:60
97+msgid "Hello"
98+msgstr "Hola"
99+
100+#: qml/Components/PinLockscreen.qml:198
101+msgid "CANCEL"
102+msgstr ""
103+
104+#: qml/Components/PinLockscreen.qml:216
105+msgid "DONE"
106+msgstr ""
107+
83108#: qml/Components/SeeMore.qml:35
84109msgid "See more"
85110msgstr "Ver más"
@@ -92,11 +117,6 @@ msgstr "Ver menos"
92117msgid "Recent"
93118msgstr "Reciente"
94119
95−#: qml/Dash/PreviewListView.qml:52
96−#, qt-format
97−msgid "%1 Preview"
98−msgstr "Vista previa de %1"
99−
100120#: qml/Dash/Previews/PreviewActionCombo.qml:34
101121msgid "More..."
102122msgstr "Más…"
@@ -105,35 +125,22 @@ msgstr "Más…"
105125msgid "Less..."
106126msgstr "Menos…"
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:81
128+#: qml/Dash/Previews/PreviewRatingInput.qml:82
109129msgid "Rate this"
110130msgstr "Valorar esto"
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:126
132+#: qml/Dash/Previews/PreviewRatingInput.qml:128
113133msgid "Add a review"
114134msgstr "Amestar una reseña"
115135
116−#: qml/Dash/Previews/PreviewRatingInput.qml:166
136+#: qml/Dash/Previews/PreviewRatingInput.qml:168
117137msgid "Send"
118138msgstr "Unviar"
119139
120−#: qml/Greeter/Greeter.qml:151
140+#: qml/Greeter/Greeter.qml:157
121141msgid "Swipe to unlock"
122142msgstr ""
123143
124−#: qml/Greeter/Lockscreen.qml:149
125−msgid "Emergency Call"
126−msgstr "Llamada d'emerxencia"
127−
128−#: qml/Greeter/PassphraseLockscreen.qml:59
129−#, qt-format
130−msgid "Hello %1"
131−msgstr "Hola %1"
132−
133−#: qml/Greeter/PassphraseLockscreen.qml:59
134−msgid "Hello"
135−msgstr "Hola"
136−
137144#: qml/Hud/HudParametrizedActionsPage.qml:132
138145msgid "Confirm"
139146msgstr "Confirmar"
@@ -166,7 +173,7 @@ msgstr "Escriba'l PIN de la SIM"
166173msgid "Search"
167174msgstr "Guetar"
168175
169−#: qml/Shell.qml:348
176+#: qml/Shell.qml:334
170177#, qt-format
171178msgid "Please enter %1"
172179msgstr "Introduz %1"
po/az.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2014-01-15 09:50+0000\n"
1212"Last-Translator: Turan Mahmudov <turan.mahmudov@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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -73,10 +73,35 @@ msgid ""
7373"phone<br><br>Tap on the screen to start"
7474msgstr ""
7575
76+#: qml/Components/Lockscreen.qml:214
77+msgid "Emergency Call"
78+msgstr "Zərurət zəngi"
79+
80+#: qml/Components/Lockscreen.qml:231
81+msgid "OK"
82+msgstr ""
83+
7684#: qml/Components/PageHeader.qml:365
7785msgid "Recent searches"
7886msgstr "Son axtarışlar"
7987
88+#: qml/Components/PassphraseLockscreen.qml:60
89+#, qt-format
90+msgid "Hello %1"
91+msgstr "Xoş gördük %1"
92+
93+#: qml/Components/PassphraseLockscreen.qml:60
94+msgid "Hello"
95+msgstr "Xoş gördük"
96+
97+#: qml/Components/PinLockscreen.qml:198
98+msgid "CANCEL"
99+msgstr ""
100+
101+#: qml/Components/PinLockscreen.qml:216
102+msgid "DONE"
103+msgstr ""
104+
80105#: qml/Components/SeeMore.qml:35
81106msgid "See more"
82107msgstr ""
@@ -89,11 +114,6 @@ msgstr ""
89114msgid "Recent"
90115msgstr ""
91116
92−#: qml/Dash/PreviewListView.qml:52
93−#, qt-format
94−msgid "%1 Preview"
95−msgstr ""
96−
97117#: qml/Dash/Previews/PreviewActionCombo.qml:34
98118msgid "More..."
99119msgstr ""
@@ -102,35 +122,22 @@ msgstr ""
102122msgid "Less..."
103123msgstr ""
104124
105−#: qml/Dash/Previews/PreviewRatingInput.qml:81
125+#: qml/Dash/Previews/PreviewRatingInput.qml:82
106126msgid "Rate this"
107127msgstr "Qiymət ver"
108128
109−#: qml/Dash/Previews/PreviewRatingInput.qml:126
129+#: qml/Dash/Previews/PreviewRatingInput.qml:128
110130msgid "Add a review"
111131msgstr "Rəy yaz"
112132
113−#: qml/Dash/Previews/PreviewRatingInput.qml:166
133+#: qml/Dash/Previews/PreviewRatingInput.qml:168
114134msgid "Send"
115135msgstr "Göndər"
116136
117−#: qml/Greeter/Greeter.qml:151
137+#: qml/Greeter/Greeter.qml:157
118138msgid "Swipe to unlock"
119139msgstr ""
120140
121−#: qml/Greeter/Lockscreen.qml:149
122−msgid "Emergency Call"
123−msgstr "Zərurət zəngi"
124−
125−#: qml/Greeter/PassphraseLockscreen.qml:59
126−#, qt-format
127−msgid "Hello %1"
128−msgstr "Xoş gördük %1"
129−
130−#: qml/Greeter/PassphraseLockscreen.qml:59
131−msgid "Hello"
132−msgstr "Xoş gördük"
133−
134141#: qml/Hud/HudParametrizedActionsPage.qml:132
135142msgid "Confirm"
136143msgstr "Təsdiqlə"
@@ -163,7 +170,7 @@ msgstr ""
163170msgid "Search"
164171msgstr "Axtar"
165172
166−#: qml/Shell.qml:348
173+#: qml/Shell.qml:334
167174#, qt-format
168175msgid "Please enter %1"
169176msgstr "Xahiş edirik daxil edin: %1"
po/bg.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -79,10 +79,35 @@ msgid ""
7979"phone<br><br>Tap on the screen to start"
8080msgstr ""
8181
82+#: qml/Components/Lockscreen.qml:214
83+msgid "Emergency Call"
84+msgstr "Спешно повикване"
85+
86+#: qml/Components/Lockscreen.qml:231
87+msgid "OK"
88+msgstr ""
89+
8290#: qml/Components/PageHeader.qml:365
8391msgid "Recent searches"
8492msgstr "Последни търсения"
8593
94+#: qml/Components/PassphraseLockscreen.qml:60
95+#, qt-format
96+msgid "Hello %1"
97+msgstr "Здравей, %1"
98+
99+#: qml/Components/PassphraseLockscreen.qml:60
100+msgid "Hello"
101+msgstr "Здравей"
102+
103+#: qml/Components/PinLockscreen.qml:198
104+msgid "CANCEL"
105+msgstr ""
106+
107+#: qml/Components/PinLockscreen.qml:216
108+msgid "DONE"
109+msgstr ""
110+
86111#: qml/Components/SeeMore.qml:35
87112msgid "See more"
88113msgstr ""
@@ -95,11 +120,6 @@ msgstr ""
95120msgid "Recent"
96121msgstr "Последни"
97122
98−#: qml/Dash/PreviewListView.qml:52
99−#, qt-format
100−msgid "%1 Preview"
101−msgstr ""
102−
103123#: qml/Dash/Previews/PreviewActionCombo.qml:34
104124msgid "More..."
105125msgstr ""
@@ -108,35 +128,22 @@ msgstr ""
108128msgid "Less..."
109129msgstr "По-малко..."
110130
111−#: qml/Dash/Previews/PreviewRatingInput.qml:81
131+#: qml/Dash/Previews/PreviewRatingInput.qml:82
112132msgid "Rate this"
113133msgstr "Оценете това"
114134
115−#: qml/Dash/Previews/PreviewRatingInput.qml:126
135+#: qml/Dash/Previews/PreviewRatingInput.qml:128
116136msgid "Add a review"
117137msgstr "Добави отзив"
118138
119−#: qml/Dash/Previews/PreviewRatingInput.qml:166
139+#: qml/Dash/Previews/PreviewRatingInput.qml:168
120140msgid "Send"
121141msgstr "Изпрати"
122142
123−#: qml/Greeter/Greeter.qml:151
143+#: qml/Greeter/Greeter.qml:157
124144msgid "Swipe to unlock"
125145msgstr ""
126146
127−#: qml/Greeter/Lockscreen.qml:149
128−msgid "Emergency Call"
129−msgstr "Спешно повикване"
130−
131−#: qml/Greeter/PassphraseLockscreen.qml:59
132−#, qt-format
133−msgid "Hello %1"
134−msgstr "Здравей, %1"
135−
136−#: qml/Greeter/PassphraseLockscreen.qml:59
137−msgid "Hello"
138−msgstr "Здравей"
139−
140147#: qml/Hud/HudParametrizedActionsPage.qml:132
141148msgid "Confirm"
142149msgstr "Потвърди"
@@ -169,7 +176,7 @@ msgstr ""
169176msgid "Search"
170177msgstr "Търсене"
171178
172−#: qml/Shell.qml:348
179+#: qml/Shell.qml:334
173180#, qt-format
174181msgid "Please enter %1"
175182msgstr "Моля, въведете %1"
po/br.po+68−54
@@ -7,44 +7,46 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
11−"PO-Revision-Date: 2014-04-15 18:15+0000\n"
12−"Last-Translator: Rouxel <vincent.rouxel@mailoo.org>\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
11+"PO-Revision-Date: 2014-06-16 11:41+0000\n"
12+"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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
2222msgid "Lock to Launcher"
23−msgstr ""
23+msgstr "Stagañ ouzh al lañser"
2424
2525#: plugins/Unity/Launcher/launcheritem.cpp:73
2626msgid "Unlock from Launcher"
27−msgstr ""
27+msgstr "Distagañ diouzh al lañser"
2828
2929#: qml/Components/EdgeDemoOverlay.qml:151
3030msgid "Skip intro"
31−msgstr ""
31+msgstr "Tremen hep sellet ouzh an digoradur"
3232
3333#: qml/Components/EdgeDemo.qml:113
3434msgid "Right edge"
35−msgstr ""
35+msgstr "Bord dehoù"
3636
3737#: qml/Components/EdgeDemo.qml:114
3838msgid "Try swiping from the right edge to unlock the phone"
3939msgstr ""
40+"Lakait ho piz da riklañ adalek ar bord dehoù da zibrennañ ar pellgomzer."
4041
4142#: qml/Components/EdgeDemo.qml:145
4243msgid "Top edge"
43−msgstr ""
44+msgstr "Bord uhelañ"
4445
4546#: qml/Components/EdgeDemo.qml:146
4647msgid "Try swiping from the top edge to access the indicators"
4748msgstr ""
49+"Lakait ho piz da riklañ adalek ar bord uhelañ da lakaat ar merkerioù war wel."
4850
4951#: qml/Components/EdgeDemo.qml:171
5052msgid "Close"
@@ -53,116 +55,128 @@ msgstr "Serriñ"
5355#: qml/Components/EdgeDemo.qml:172
5456msgid "Swipe up again to close the settings screen"
5557msgstr ""
58+"Lakait ho piz da riklañ war-du ar bord uhelañ da serriñ skramm an arventennoù"
5659
5760#: qml/Components/EdgeDemo.qml:199
5861msgid "Left edge"
59−msgstr ""
62+msgstr "Bord kleiz"
6063
6164#: qml/Components/EdgeDemo.qml:200
6265msgid "Swipe from the left to reveal the launcher for quick access to apps"
6366msgstr ""
67+"Lakait ho piz da riklañ adalek ar bord kleiz da ziskouez al lañser arloadoù "
68+"prim."
6469
6570#: qml/Components/EdgeDemo.qml:227
6671msgid "Well done"
67−msgstr ""
72+msgstr "Gourc'hemennoù !"
6873
6974#: qml/Components/EdgeDemo.qml:228
7075msgid ""
7176"You have now mastered the edge gestures and can start using the "
7277"phone<br><br>Tap on the screen to start"
7378msgstr ""
79+"Mestroniañ a rit ar jestroù ha gallout a rit kregiñ da implijout ar "
80+"pellgomzer<br><br>Touchit d'ar skramm evit kregiñ ganti"
81+
82+#: qml/Components/Lockscreen.qml:214
83+msgid "Emergency Call"
84+msgstr "Pellgomzadenn vallus"
85+
86+#: qml/Components/Lockscreen.qml:231
87+msgid "OK"
88+msgstr "Mat eo"
7489
7590#: qml/Components/PageHeader.qml:365
7691msgid "Recent searches"
77−msgstr ""
92+msgstr "Enklaskoù graet nevez zo"
93+
94+#: qml/Components/PassphraseLockscreen.qml:60
95+#, qt-format
96+msgid "Hello %1"
97+msgstr "Demat %1"
98+
99+#: qml/Components/PassphraseLockscreen.qml:60
100+msgid "Hello"
101+msgstr "Demat"
102+
103+#: qml/Components/PinLockscreen.qml:198
104+msgid "CANCEL"
105+msgstr "NULLAÑ"
106+
107+#: qml/Components/PinLockscreen.qml:216
108+msgid "DONE"
109+msgstr "ECHU"
78110
79111#: qml/Components/SeeMore.qml:35
80112msgid "See more"
81−msgstr ""
113+msgstr "Gwelet muioc'h"
82114
83115#: qml/Components/SeeMore.qml:58
84116msgid "See less"
85−msgstr ""
117+msgstr "Gwelet nebeutoc'h"
86118
87119#: qml/Dash/DashApps.qml:37
88120msgid "Recent"
89−msgstr ""
90−
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
121+msgstr "Nevez zo"
95122
96123#: qml/Dash/Previews/PreviewActionCombo.qml:34
97124msgid "More..."
98−msgstr ""
125+msgstr "Muioc'h..."
99126
100127#: qml/Dash/Previews/PreviewActionCombo.qml:34
101128msgid "Less..."
102−msgstr ""
129+msgstr "Nebeutoc'h..."
103130
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
131+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105132msgid "Rate this"
106−msgstr ""
133+msgstr "Priziit an dra-mañ"
107134
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
135+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109136msgid "Add a review"
110−msgstr ""
137+msgstr "Ouzhpennañ un ali"
111138
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
139+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113140msgid "Send"
114−msgstr ""
141+msgstr "Kas"
115142
116−#: qml/Greeter/Greeter.qml:151
143+#: qml/Greeter/Greeter.qml:157
117144msgid "Swipe to unlock"
118−msgstr ""
119−
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr ""
145+msgstr "Riklañ evit dibrennañ"
132146
133147#: qml/Hud/HudParametrizedActionsPage.qml:132
134148msgid "Confirm"
135−msgstr ""
149+msgstr "Kadarnaat"
136150
137151#: qml/Hud/Hud.qml:61 qml/Hud/Hud.qml:99 qml/Hud/Hud.qml:372
138152msgid "Type or say a command"
139−msgstr ""
153+msgstr "Skrivit pe lavarit un urzhiad"
140154
141155#: qml/Hud/Hud.qml:84
142156msgid "Loading. Please Wait..."
143−msgstr ""
157+msgstr "O kargañ. Gortozit, mar plij..."
144158
145159#: qml/Hud/Hud.qml:89
146160msgid "Speak Now..."
147−msgstr ""
161+msgstr "Komzit bremañ..."
148162
149163#: qml/Hud/Hud.qml:94
150164msgid "Speaking..."
151−msgstr ""
165+msgstr "O komz..."
152166
153167#: qml/Notifications/NotificationMenuItemFactory.qml:91
154168msgid "Show password"
155−msgstr ""
169+msgstr "Diskouez ar ger-tremen"
156170
157171#: qml/Notifications/NotificationMenuItemFactory.qml:103
158172msgid "Please enter SIM PIN"
159−msgstr ""
173+msgstr "Ebarzhit kod PIN ho kartenn SIM, mar plij"
160174
161175#: qml/Panel/SearchIndicator.qml:27
162176msgid "Search"
163−msgstr ""
177+msgstr "Klask"
164178
165−#: qml/Shell.qml:348
179+#: qml/Shell.qml:334
166180#, qt-format
167181msgid "Please enter %1"
168−msgstr ""
182+msgstr "Ebarzhit %1, mar plij"
po/bs.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr ""
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr ""
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr ""
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr ""
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr ""
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr ""
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr ""
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr ""
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr ""
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr ""
po/ca.po+45−36
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
11−"PO-Revision-Date: 2014-01-10 07:45+0000\n"
12−"Last-Translator: Adolfo Jayme <fitoschido@gmail.com>\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
11+"PO-Revision-Date: 2014-06-13 07:47+0000\n"
12+"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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -77,64 +77,73 @@ msgid ""
7777"You have now mastered the edge gestures and can start using the "
7878"phone<br><br>Tap on the screen to start"
7979msgstr ""
80+"Ja heu après com utilitzar els gestos de les vores per fer servir el "
81+"telèfon<br><br>Feu un toc a la pantalla per començar"
82+
83+#: qml/Components/Lockscreen.qml:214
84+msgid "Emergency Call"
85+msgstr "Trucada d'emergència"
86+
87+#: qml/Components/Lockscreen.qml:231
88+msgid "OK"
89+msgstr "D'acord"
8090
8191#: qml/Components/PageHeader.qml:365
8292msgid "Recent searches"
8393msgstr "Cerques recents"
8494
95+#: qml/Components/PassphraseLockscreen.qml:60
96+#, qt-format
97+msgid "Hello %1"
98+msgstr "Hola %1"
99+
100+#: qml/Components/PassphraseLockscreen.qml:60
101+msgid "Hello"
102+msgstr "Hola"
103+
104+#: qml/Components/PinLockscreen.qml:198
105+msgid "CANCEL"
106+msgstr "Cancel·la"
107+
108+#: qml/Components/PinLockscreen.qml:216
109+msgid "DONE"
110+msgstr "Fet"
111+
85112#: qml/Components/SeeMore.qml:35
86113msgid "See more"
87−msgstr ""
114+msgstr "Mostra'n més"
88115
89116#: qml/Components/SeeMore.qml:58
90117msgid "See less"
91−msgstr ""
118+msgstr "Mostra'n menys"
92119
93120#: qml/Dash/DashApps.qml:37
94121msgid "Recent"
95−msgstr ""
96−
97−#: qml/Dash/PreviewListView.qml:52
98−#, qt-format
99−msgid "%1 Preview"
100−msgstr ""
122+msgstr "Recents"
101123
102124#: qml/Dash/Previews/PreviewActionCombo.qml:34
103125msgid "More..."
104−msgstr ""
126+msgstr "Més..."
105127
106128#: qml/Dash/Previews/PreviewActionCombo.qml:34
107129msgid "Less..."
108−msgstr ""
130+msgstr "Menys..."
109131
110−#: qml/Dash/Previews/PreviewRatingInput.qml:81
132+#: qml/Dash/Previews/PreviewRatingInput.qml:82
111133msgid "Rate this"
112−msgstr ""
134+msgstr "Puntueu-ho"
113135
114−#: qml/Dash/Previews/PreviewRatingInput.qml:126
136+#: qml/Dash/Previews/PreviewRatingInput.qml:128
115137msgid "Add a review"
116138msgstr "Afegiu una ressenya"
117139
118−#: qml/Dash/Previews/PreviewRatingInput.qml:166
140+#: qml/Dash/Previews/PreviewRatingInput.qml:168
119141msgid "Send"
120142msgstr "Envia"
121143
122−#: qml/Greeter/Greeter.qml:151
144+#: qml/Greeter/Greeter.qml:157
123145msgid "Swipe to unlock"
124−msgstr ""
125−
126−#: qml/Greeter/Lockscreen.qml:149
127−msgid "Emergency Call"
128−msgstr "Trucada d'emergència"
129−
130−#: qml/Greeter/PassphraseLockscreen.qml:59
131−#, qt-format
132−msgid "Hello %1"
133−msgstr "Hola %1"
134−
135−#: qml/Greeter/PassphraseLockscreen.qml:59
136−msgid "Hello"
137−msgstr "Hola"
146+msgstr "Feu lliscar el dit per desbloquejar"
138147
139148#: qml/Hud/HudParametrizedActionsPage.qml:132
140149msgid "Confirm"
@@ -162,13 +171,13 @@ msgstr "Mostra la contrasenya"
162171
163172#: qml/Notifications/NotificationMenuItemFactory.qml:103
164173msgid "Please enter SIM PIN"
165−msgstr ""
174+msgstr "Introduïu el PIN de la targeta SIM"
166175
167176#: qml/Panel/SearchIndicator.qml:27
168177msgid "Search"
169178msgstr "Cerca"
170179
171−#: qml/Shell.qml:348
180+#: qml/Shell.qml:334
172181#, qt-format
173182msgid "Please enter %1"
174183msgstr "Introduïu %1"
po/ckb.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\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-05-01 06:44+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr "هێڵی فریاگوزاری"
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr "دوایین گەڕانەکان"
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr "سڵاو %1"
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr "سڵاو"
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr "پلە دابنی بۆی"
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr "پێداچوونەوە زۆر بکە"
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr "ناردن"
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr "هێڵی فریاگوزاری"
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr "سڵاو %1"
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr "سڵاو"
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr "پشتڕاستکردنەوە"
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr "گەڕان"
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr "تکایە %1 بنووسە"
po/cs.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr "Tísňové volání"
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr "Poslední vyhledávání"
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr "Ahoj %1"
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr "Ahoj"
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr "Ohodnoťte to"
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr "Přidat recenzi"
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr "Odeslat"
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr "Tísňové volání"
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr "Ahoj %1"
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr "Ahoj"
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr "Potvrdit"
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr "Hledat"
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr "Zadejte prosím %1"
po/da.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2014-01-14 20:16+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Danish <da@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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr ""
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr ""
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr ""
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr ""
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr ""
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr ""
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr ""
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr ""
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr ""
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr ""
po/de.po+55−45
@@ -7,24 +7,24 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
11−"PO-Revision-Date: 2014-01-15 11:01+0000\n"
12−"Last-Translator: Dennis Baudys <Unknown>\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
11+"PO-Revision-Date: 2014-06-06 19:34+0000\n"
12+"Last-Translator: Phillip Sz <Unknown>\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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
2222msgid "Lock to Launcher"
23−msgstr ""
23+msgstr "Im Starter sperren"
2424
2525#: plugins/Unity/Launcher/launcheritem.cpp:73
2626msgid "Unlock from Launcher"
27−msgstr ""
27+msgstr "Aus dem Starter entsperren"
2828
2929#: qml/Components/EdgeDemoOverlay.qml:151
3030msgid "Skip intro"
@@ -32,19 +32,20 @@ msgstr "Einführung überspringen"
3232
3333#: qml/Components/EdgeDemo.qml:113
3434msgid "Right edge"
35−msgstr "Rechter Rand"
35+msgstr "Rechter Bildschirmrand"
3636
3737#: qml/Components/EdgeDemo.qml:114
3838msgid "Try swiping from the right edge to unlock the phone"
39−msgstr "Vom rechten Rand her wischen, um das Gerät zu entsperren"
39+msgstr "Vom rechten Bildschirmrand her wischen, um das Gerät zu entsperren"
4040
4141#: qml/Components/EdgeDemo.qml:145
4242msgid "Top edge"
43−msgstr "Oberer Rand"
43+msgstr "Oberer Bildschirmrand"
4444
4545#: qml/Components/EdgeDemo.qml:146
4646msgid "Try swiping from the top edge to access the indicators"
47−msgstr "Vom oberen Rand her wischen, um die Statusmeldungen anzuzeigen"
47+msgstr ""
48+"Vom oberen Bildschirmrand her wischen, um die Statusmeldungen anzuzeigen"
4849
4950#: qml/Components/EdgeDemo.qml:171
5051msgid "Close"
@@ -52,7 +53,7 @@ msgstr "Schließen"
5253
5354#: qml/Components/EdgeDemo.qml:172
5455msgid "Swipe up again to close the settings screen"
55−msgstr "Nochmals nach oben wischen, um das Einstellungsmenü zu schließen"
56+msgstr "Wischen Sie erneut nach oben, um das Einstellungsmenü zu schließen"
5657
5758#: qml/Components/EdgeDemo.qml:199
5859msgid "Left edge"
@@ -61,8 +62,8 @@ msgstr "Linker Rand"
6162#: qml/Components/EdgeDemo.qml:200
6263msgid "Swipe from the left to reveal the launcher for quick access to apps"
6364msgstr ""
64−"Von links wischen, um die Seitenleiste für den Anwendungs-Schnellzugriff "
65−"aufzurufen"
65+"Wischen Sie von links nach rechts, um die Seitenleiste für den Anwendungs-"
66+"Schnellzugriff aufzurufen"
6667
6768#: qml/Components/EdgeDemo.qml:227
6869msgid "Well done"
@@ -73,64 +74,73 @@ msgid ""
7374"You have now mastered the edge gestures and can start using the "
7475"phone<br><br>Tap on the screen to start"
7576msgstr ""
77+"Sie haben nun die Kantengesten erfolgreich erlernt und können das Telefon "
78+"nun nutzen<br><br>Zum Starten auf den Bildschirm tippen"
79+
80+#: qml/Components/Lockscreen.qml:214
81+msgid "Emergency Call"
82+msgstr "Notruf"
83+
84+#: qml/Components/Lockscreen.qml:231
85+msgid "OK"
86+msgstr ""
7687
7788#: qml/Components/PageHeader.qml:365
7889msgid "Recent searches"
79−msgstr "Letzte Suchbegriffe"
90+msgstr "Zuletzt verwendete Suchbegriffe"
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+#, qt-format
94+msgid "Hello %1"
95+msgstr "Hallo %1"
96+
97+#: qml/Components/PassphraseLockscreen.qml:60
98+msgid "Hello"
99+msgstr "Hallo"
100+
101+#: qml/Components/PinLockscreen.qml:198
102+msgid "CANCEL"
103+msgstr ""
104+
105+#: qml/Components/PinLockscreen.qml:216
106+msgid "DONE"
107+msgstr ""
80108
81109#: qml/Components/SeeMore.qml:35
82110msgid "See more"
83−msgstr ""
111+msgstr "Mehr ansehen"
84112
85113#: qml/Components/SeeMore.qml:58
86114msgid "See less"
87−msgstr ""
115+msgstr "Weniger ansehen"
88116
89117#: qml/Dash/DashApps.qml:37
90118msgid "Recent"
91−msgstr ""
92−
93−#: qml/Dash/PreviewListView.qml:52
94−#, qt-format
95−msgid "%1 Preview"
96−msgstr ""
119+msgstr "Kürzlich"
97120
98121#: qml/Dash/Previews/PreviewActionCombo.qml:34
99122msgid "More..."
100−msgstr ""
123+msgstr "Mehr …"
101124
102125#: qml/Dash/Previews/PreviewActionCombo.qml:34
103126msgid "Less..."
104−msgstr ""
127+msgstr "Weniger …"
105128
106−#: qml/Dash/Previews/PreviewRatingInput.qml:81
129+#: qml/Dash/Previews/PreviewRatingInput.qml:82
107130msgid "Rate this"
108131msgstr "Bewerten"
109132
110−#: qml/Dash/Previews/PreviewRatingInput.qml:126
133+#: qml/Dash/Previews/PreviewRatingInput.qml:128
111134msgid "Add a review"
112135msgstr "Bewertung hinzufügen"
113136
114−#: qml/Dash/Previews/PreviewRatingInput.qml:166
137+#: qml/Dash/Previews/PreviewRatingInput.qml:168
115138msgid "Send"
116139msgstr "Senden"
117140
118−#: qml/Greeter/Greeter.qml:151
141+#: qml/Greeter/Greeter.qml:157
119142msgid "Swipe to unlock"
120−msgstr ""
121−
122−#: qml/Greeter/Lockscreen.qml:149
123−msgid "Emergency Call"
124−msgstr "Notruf"
125−
126−#: qml/Greeter/PassphraseLockscreen.qml:59
127−#, qt-format
128−msgid "Hello %1"
129−msgstr "Hallo %1"
130−
131−#: qml/Greeter/PassphraseLockscreen.qml:59
132−msgid "Hello"
133−msgstr "Hallo"
143+msgstr "Wischen zum Entsperren"
134144
135145#: qml/Hud/HudParametrizedActionsPage.qml:132
136146msgid "Confirm"
@@ -158,13 +168,13 @@ msgstr "Passwort anzeigen"
158168
159169#: qml/Notifications/NotificationMenuItemFactory.qml:103
160170msgid "Please enter SIM PIN"
161−msgstr ""
171+msgstr "Bitte die PIN der SIM eingeben"
162172
163173#: qml/Panel/SearchIndicator.qml:27
164174msgid "Search"
165175msgstr "Suchen"
166176
167−#: qml/Shell.qml:348
177+#: qml/Shell.qml:334
168178#, qt-format
169179msgid "Please enter %1"
170180msgstr "Bitte geben Sie %1 ein"
po/el.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2014-02-26 09:58+0000\n"
1212"Last-Translator: j3lc <x_nikos@yahoo.gr>\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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -76,10 +76,35 @@ msgstr ""
7676"Πλέον γνωρίζετε τις χειρονομίες από τα άκρα και μπορείτε να ξεκινήσετε να "
7777"χρησιμοποιείτε το τηλέφωνο<br><br>Αγγίξτε την οθόνη για να ξεκινήσετε"
7878
79+#: qml/Components/Lockscreen.qml:214
80+msgid "Emergency Call"
81+msgstr "Κλήση έκτακτης ανάγκης"
82+
83+#: qml/Components/Lockscreen.qml:231
84+msgid "OK"
85+msgstr ""
86+
7987#: qml/Components/PageHeader.qml:365
8088msgid "Recent searches"
8189msgstr "Πρόσφατες αναζητήσεις"
8290
91+#: qml/Components/PassphraseLockscreen.qml:60
92+#, qt-format
93+msgid "Hello %1"
94+msgstr "Γεια σας %1"
95+
96+#: qml/Components/PassphraseLockscreen.qml:60
97+msgid "Hello"
98+msgstr "Γεια σας"
99+
100+#: qml/Components/PinLockscreen.qml:198
101+msgid "CANCEL"
102+msgstr ""
103+
104+#: qml/Components/PinLockscreen.qml:216
105+msgid "DONE"
106+msgstr ""
107+
83108#: qml/Components/SeeMore.qml:35
84109msgid "See more"
85110msgstr "Περρισότερα"
@@ -92,11 +117,6 @@ msgstr "Λιγότερα"
92117msgid "Recent"
93118msgstr ""
94119
95−#: qml/Dash/PreviewListView.qml:52
96−#, qt-format
97−msgid "%1 Preview"
98−msgstr ""
99−
100120#: qml/Dash/Previews/PreviewActionCombo.qml:34
101121msgid "More..."
102122msgstr ""
@@ -105,35 +125,22 @@ msgstr ""
105125msgid "Less..."
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:81
128+#: qml/Dash/Previews/PreviewRatingInput.qml:82
109129msgid "Rate this"
110130msgstr "Βαθμολογήστε το"
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:126
132+#: qml/Dash/Previews/PreviewRatingInput.qml:128
113133msgid "Add a review"
114134msgstr "Προσθέστε την αξιολόγησή σας"
115135
116−#: qml/Dash/Previews/PreviewRatingInput.qml:166
136+#: qml/Dash/Previews/PreviewRatingInput.qml:168
117137msgid "Send"
118138msgstr "Αποστολή"
119139
120−#: qml/Greeter/Greeter.qml:151
140+#: qml/Greeter/Greeter.qml:157
121141msgid "Swipe to unlock"
122142msgstr ""
123143
124−#: qml/Greeter/Lockscreen.qml:149
125−msgid "Emergency Call"
126−msgstr "Κλήση έκτακτης ανάγκης"
127−
128−#: qml/Greeter/PassphraseLockscreen.qml:59
129−#, qt-format
130−msgid "Hello %1"
131−msgstr "Γεια σας %1"
132−
133−#: qml/Greeter/PassphraseLockscreen.qml:59
134−msgid "Hello"
135−msgstr "Γεια σας"
136−
137144#: qml/Hud/HudParametrizedActionsPage.qml:132
138145msgid "Confirm"
139146msgstr "Επιβεβαίωση"
@@ -166,7 +173,7 @@ msgstr "Παρακαλώ εισάγετε το PIN της κάρτας SIM"
166173msgid "Search"
167174msgstr "Αναζήτηση"
168175
169−#: qml/Shell.qml:348
176+#: qml/Shell.qml:334
170177#, qt-format
171178msgid "Please enter %1"
172179msgstr "Πληκτρολογήστε %1"
po/en_AU.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2013-09-28 07:46+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-05-01 06:44+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr "Emergency Call"
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr "Recent searches"
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr "Hello %1"
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr "Hello"
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr "Rate this"
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr "Add a review"
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr "Send"
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr "Emergency Call"
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr "Hello %1"
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr "Hello"
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr "Confirm"
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr "Search"
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr "Please enter %1"
po/en_GB.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2014-03-07 13:27+0000\n"
1212"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-05-01 06:44+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -74,10 +74,35 @@ msgstr ""
7474"You have now mastered the edge gestures and can start using the "
7575"phone<br><br>Tap on the screen to start"
7676
77+#: qml/Components/Lockscreen.qml:214
78+msgid "Emergency Call"
79+msgstr "Emergency Call"
80+
81+#: qml/Components/Lockscreen.qml:231
82+msgid "OK"
83+msgstr ""
84+
7785#: qml/Components/PageHeader.qml:365
7886msgid "Recent searches"
7987msgstr "Recent searches"
8088
89+#: qml/Components/PassphraseLockscreen.qml:60
90+#, qt-format
91+msgid "Hello %1"
92+msgstr "Hello %1"
93+
94+#: qml/Components/PassphraseLockscreen.qml:60
95+msgid "Hello"
96+msgstr "Hello"
97+
98+#: qml/Components/PinLockscreen.qml:198
99+msgid "CANCEL"
100+msgstr ""
101+
102+#: qml/Components/PinLockscreen.qml:216
103+msgid "DONE"
104+msgstr ""
105+
81106#: qml/Components/SeeMore.qml:35
82107msgid "See more"
83108msgstr "See more"
@@ -90,11 +115,6 @@ msgstr "See less"
90115msgid "Recent"
91116msgstr ""
92117
93−#: qml/Dash/PreviewListView.qml:52
94−#, qt-format
95−msgid "%1 Preview"
96−msgstr ""
97−
98118#: qml/Dash/Previews/PreviewActionCombo.qml:34
99119msgid "More..."
100120msgstr "More..."
@@ -103,35 +123,22 @@ msgstr "More..."
103123msgid "Less..."
104124msgstr "Less..."
105125
106−#: qml/Dash/Previews/PreviewRatingInput.qml:81
126+#: qml/Dash/Previews/PreviewRatingInput.qml:82
107127msgid "Rate this"
108128msgstr "Rate this"
109129
110−#: qml/Dash/Previews/PreviewRatingInput.qml:126
130+#: qml/Dash/Previews/PreviewRatingInput.qml:128
111131msgid "Add a review"
112132msgstr "Add a review"
113133
114−#: qml/Dash/Previews/PreviewRatingInput.qml:166
134+#: qml/Dash/Previews/PreviewRatingInput.qml:168
115135msgid "Send"
116136msgstr "Send"
117137
118−#: qml/Greeter/Greeter.qml:151
138+#: qml/Greeter/Greeter.qml:157
119139msgid "Swipe to unlock"
120140msgstr ""
121141
122−#: qml/Greeter/Lockscreen.qml:149
123−msgid "Emergency Call"
124−msgstr "Emergency Call"
125−
126−#: qml/Greeter/PassphraseLockscreen.qml:59
127−#, qt-format
128−msgid "Hello %1"
129−msgstr "Hello %1"
130−
131−#: qml/Greeter/PassphraseLockscreen.qml:59
132−msgid "Hello"
133−msgstr "Hello"
134−
135142#: qml/Hud/HudParametrizedActionsPage.qml:132
136143msgid "Confirm"
137144msgstr "Confirm"
@@ -164,7 +171,7 @@ msgstr "Please enter SIM PIN"
164171msgid "Search"
165172msgstr "Search"
166173
167−#: qml/Shell.qml:348
174+#: qml/Shell.qml:334
168175#, qt-format
169176msgid "Please enter %1"
170177msgstr "Please enter %1"
po/eo.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr ""
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr ""
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr ""
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr ""
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr ""
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr ""
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr ""
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr ""
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr ""
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr ""
po/es.po+38−31
@@ -7,24 +7,24 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
11−"PO-Revision-Date: 2014-03-28 22:37+0000\n"
12−"Last-Translator: Adolfo Jayme <fitoschido@gmail.com>\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
11+"PO-Revision-Date: 2014-06-02 06:28+0000\n"
12+"Last-Translator: benjisp94 <benjisp94@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-05-01 06:44+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
2222msgid "Lock to Launcher"
23−msgstr "Mantener en el lanzador"
23+msgstr "Fijar al lanzador"
2424
2525#: plugins/Unity/Launcher/launcheritem.cpp:73
2626msgid "Unlock from Launcher"
27−msgstr "No mantener en el lanzador"
27+msgstr "Quitar del lanzador"
2828
2929#: qml/Components/EdgeDemoOverlay.qml:151
3030msgid "Skip intro"
@@ -77,10 +77,35 @@ msgstr ""
7777"Ahora domina los gestos de los bordes y puede usar el teléfono<br><br>Toque "
7878"la pantalla para comenzar"
7979
80+#: qml/Components/Lockscreen.qml:214
81+msgid "Emergency Call"
82+msgstr "Llamada de emergencia"
83+
84+#: qml/Components/Lockscreen.qml:231
85+msgid "OK"
86+msgstr ""
87+
8088#: qml/Components/PageHeader.qml:365
8189msgid "Recent searches"
8290msgstr "Búsquedas recientes"
8391
92+#: qml/Components/PassphraseLockscreen.qml:60
93+#, qt-format
94+msgid "Hello %1"
95+msgstr "Hola, %1"
96+
97+#: qml/Components/PassphraseLockscreen.qml:60
98+msgid "Hello"
99+msgstr "Hola"
100+
101+#: qml/Components/PinLockscreen.qml:198
102+msgid "CANCEL"
103+msgstr ""
104+
105+#: qml/Components/PinLockscreen.qml:216
106+msgid "DONE"
107+msgstr ""
108+
84109#: qml/Components/SeeMore.qml:35
85110msgid "See more"
86111msgstr "Ver más"
@@ -93,11 +118,6 @@ msgstr "Ver menos"
93118msgid "Recent"
94119msgstr "Recientes"
95120
96−#: qml/Dash/PreviewListView.qml:52
97−#, qt-format
98−msgid "%1 Preview"
99−msgstr "Previsualización de %1"
100−
101121#: qml/Dash/Previews/PreviewActionCombo.qml:34
102122msgid "More..."
103123msgstr "Más…"
@@ -106,34 +126,21 @@ msgstr "Más…"
106126msgid "Less..."
107127msgstr "Menos…"
108128
109−#: qml/Dash/Previews/PreviewRatingInput.qml:81
129+#: qml/Dash/Previews/PreviewRatingInput.qml:82
110130msgid "Rate this"
111131msgstr "Valorar esto"
112132
113−#: qml/Dash/Previews/PreviewRatingInput.qml:126
133+#: qml/Dash/Previews/PreviewRatingInput.qml:128
114134msgid "Add a review"
115135msgstr "Añadir una reseña"
116136
117−#: qml/Dash/Previews/PreviewRatingInput.qml:166
137+#: qml/Dash/Previews/PreviewRatingInput.qml:168
118138msgid "Send"
119139msgstr "Enviar"
120140
121−#: qml/Greeter/Greeter.qml:151
141+#: qml/Greeter/Greeter.qml:157
122142msgid "Swipe to unlock"
123−msgstr ""
124−
125−#: qml/Greeter/Lockscreen.qml:149
126−msgid "Emergency Call"
127−msgstr "Llamada de emergencia"
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−#, qt-format
131−msgid "Hello %1"
132−msgstr "Hola, %1"
133−
134−#: qml/Greeter/PassphraseLockscreen.qml:59
135−msgid "Hello"
136−msgstr "Hola"
143+msgstr "Deslice para desbloquear"
137144
138145#: qml/Hud/HudParametrizedActionsPage.qml:132
139146msgid "Confirm"
@@ -167,7 +174,7 @@ msgstr "Escriba el PIN de la SIM"
167174msgid "Search"
168175msgstr "Buscar"
169176
170−#: qml/Shell.qml:348
177+#: qml/Shell.qml:334
171178#, qt-format
172179msgid "Please enter %1"
173180msgstr "Introduzca %1"
po/eu.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2014-03-30 12:44+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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -76,10 +76,35 @@ msgstr ""
7676"Jadanik ezagutzen dituzu ertzetako keinuak, eta mugikorra erabiltzen has "
7777"zaitezke<br><br>Ukitu pantaila hasteko"
7878
79+#: qml/Components/Lockscreen.qml:214
80+msgid "Emergency Call"
81+msgstr "Larrialdi-deia"
82+
83+#: qml/Components/Lockscreen.qml:231
84+msgid "OK"
85+msgstr ""
86+
7987#: qml/Components/PageHeader.qml:365
8088msgid "Recent searches"
8189msgstr "Azken bilaketak"
8290
91+#: qml/Components/PassphraseLockscreen.qml:60
92+#, qt-format
93+msgid "Hello %1"
94+msgstr "Kaixo %1"
95+
96+#: qml/Components/PassphraseLockscreen.qml:60
97+msgid "Hello"
98+msgstr "Kaixo"
99+
100+#: qml/Components/PinLockscreen.qml:198
101+msgid "CANCEL"
102+msgstr ""
103+
104+#: qml/Components/PinLockscreen.qml:216
105+msgid "DONE"
106+msgstr ""
107+
83108#: qml/Components/SeeMore.qml:35
84109msgid "See more"
85110msgstr "Ikusi gehiago"
@@ -92,11 +117,6 @@ msgstr "Ikusi gutxiago"
92117msgid "Recent"
93118msgstr "Azkenak"
94119
95−#: qml/Dash/PreviewListView.qml:52
96−#, qt-format
97−msgid "%1 Preview"
98−msgstr "%1 aurrebista"
99−
100120#: qml/Dash/Previews/PreviewActionCombo.qml:34
101121msgid "More..."
102122msgstr "Gehiago..."
@@ -105,35 +125,22 @@ msgstr "Gehiago..."
105125msgid "Less..."
106126msgstr "Gutxiago..."
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:81
128+#: qml/Dash/Previews/PreviewRatingInput.qml:82
109129msgid "Rate this"
110130msgstr "Puntuatu hau"
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:126
132+#: qml/Dash/Previews/PreviewRatingInput.qml:128
113133msgid "Add a review"
114134msgstr "Gehitu kritika"
115135
116−#: qml/Dash/Previews/PreviewRatingInput.qml:166
136+#: qml/Dash/Previews/PreviewRatingInput.qml:168
117137msgid "Send"
118138msgstr "Bidali"
119139
120−#: qml/Greeter/Greeter.qml:151
140+#: qml/Greeter/Greeter.qml:157
121141msgid "Swipe to unlock"
122142msgstr ""
123143
124−#: qml/Greeter/Lockscreen.qml:149
125−msgid "Emergency Call"
126−msgstr "Larrialdi-deia"
127−
128−#: qml/Greeter/PassphraseLockscreen.qml:59
129−#, qt-format
130−msgid "Hello %1"
131−msgstr "Kaixo %1"
132−
133−#: qml/Greeter/PassphraseLockscreen.qml:59
134−msgid "Hello"
135−msgstr "Kaixo"
136−
137144#: qml/Hud/HudParametrizedActionsPage.qml:132
138145msgid "Confirm"
139146msgstr "Baieztatu"
@@ -166,7 +173,7 @@ msgstr "Sartu SIMaren PINa"
166173msgid "Search"
167174msgstr "Bilatu"
168175
169−#: qml/Shell.qml:348
176+#: qml/Shell.qml:334
170177#, qt-format
171178msgid "Please enter %1"
172179msgstr "Sartu %1"
po/fa.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2013-10-31 19:02+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr ""
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr ""
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr ""
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr ""
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr ""
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr ""
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr ""
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr ""
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr ""
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr ""
po/fi.po+35−28
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
11−"PO-Revision-Date: 2014-04-05 09:57+0000\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
11+"PO-Revision-Date: 2014-06-14 10:23+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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -74,10 +74,35 @@ msgstr ""
7474"Hallitset nyt reunaeleet, joten voit aloittaa puhelimen "
7575"käytön<br><br>Napauta näyttöä aloittaaksesi"
7676
77+#: qml/Components/Lockscreen.qml:214
78+msgid "Emergency Call"
79+msgstr "Hätäpuhelu"
80+
81+#: qml/Components/Lockscreen.qml:231
82+msgid "OK"
83+msgstr "OK"
84+
7785#: qml/Components/PageHeader.qml:365
7886msgid "Recent searches"
7987msgstr "Viimeisimmät haut"
8088
89+#: qml/Components/PassphraseLockscreen.qml:60
90+#, qt-format
91+msgid "Hello %1"
92+msgstr "Hei %1!"
93+
94+#: qml/Components/PassphraseLockscreen.qml:60
95+msgid "Hello"
96+msgstr "Hei"
97+
98+#: qml/Components/PinLockscreen.qml:198
99+msgid "CANCEL"
100+msgstr "PERU"
101+
102+#: qml/Components/PinLockscreen.qml:216
103+msgid "DONE"
104+msgstr "VALMIS"
105+
81106#: qml/Components/SeeMore.qml:35
82107msgid "See more"
83108msgstr "Näytä lisää"
@@ -90,11 +115,6 @@ msgstr "Näytä vähemmän"
90115msgid "Recent"
91116msgstr "Viimeisimmät"
92117
93−#: qml/Dash/PreviewListView.qml:52
94−#, qt-format
95−msgid "%1 Preview"
96−msgstr "%1 esikatselu"
97−
98118#: qml/Dash/Previews/PreviewActionCombo.qml:34
99119msgid "More..."
100120msgstr "Lisää..."
@@ -103,34 +123,21 @@ msgstr "Lisää..."
103123msgid "Less..."
104124msgstr "Vähemmän..."
105125
106−#: qml/Dash/Previews/PreviewRatingInput.qml:81
126+#: qml/Dash/Previews/PreviewRatingInput.qml:82
107127msgid "Rate this"
108128msgstr "Arvioi tämä"
109129
110−#: qml/Dash/Previews/PreviewRatingInput.qml:126
130+#: qml/Dash/Previews/PreviewRatingInput.qml:128
111131msgid "Add a review"
112132msgstr "Lisää arvostelu"
113133
114−#: qml/Dash/Previews/PreviewRatingInput.qml:166
134+#: qml/Dash/Previews/PreviewRatingInput.qml:168
115135msgid "Send"
116136msgstr "Lähetä"
117137
118−#: qml/Greeter/Greeter.qml:151
138+#: qml/Greeter/Greeter.qml:157
119139msgid "Swipe to unlock"
120−msgstr ""
121−
122−#: qml/Greeter/Lockscreen.qml:149
123−msgid "Emergency Call"
124−msgstr "Hätäpuhelu"
125−
126−#: qml/Greeter/PassphraseLockscreen.qml:59
127−#, qt-format
128−msgid "Hello %1"
129−msgstr "Hei %1!"
130−
131−#: qml/Greeter/PassphraseLockscreen.qml:59
132−msgid "Hello"
133−msgstr "Hei"
140+msgstr "Avaa pyyhkäisemällä"
134141
135142#: qml/Hud/HudParametrizedActionsPage.qml:132
136143msgid "Confirm"
@@ -164,7 +171,7 @@ msgstr "Anna SIM-kortin PIN-koodi"
164171msgid "Search"
165172msgstr "Hae"
166173
167−#: qml/Shell.qml:348
174+#: qml/Shell.qml:334
168175#, qt-format
169176msgid "Please enter %1"
170177msgstr "Kirjoita %1"
po/fo.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr ""
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr ""
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr ""
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr ""
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr ""
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr ""
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr ""
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr "Vátta"
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr "Leita"
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr ""
po/fr.po+54−38
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
11−"PO-Revision-Date: 2014-01-28 00:34+0000\n"
12−"Last-Translator: Pierre <Unknown>\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
11+"PO-Revision-Date: 2014-06-08 20:45+0000\n"
12+"Last-Translator: Pierre Slamich <pierre.slamich@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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -24,7 +24,7 @@ msgstr "Conserver dans le lanceur"
2424
2525#: plugins/Unity/Launcher/launcheritem.cpp:73
2626msgid "Unlock from Launcher"
27−msgstr ""
27+msgstr "Retirer du lanceur"
2828
2929#: qml/Components/EdgeDemoOverlay.qml:151
3030msgid "Skip intro"
@@ -37,6 +37,7 @@ msgstr "Bord droit"
3737#: qml/Components/EdgeDemo.qml:114
3838msgid "Try swiping from the right edge to unlock the phone"
3939msgstr ""
40+"Faites glisser votre doigt à partir du bord droit pour déverrouiller."
4041
4142#: qml/Components/EdgeDemo.qml:145
4243msgid "Top edge"
@@ -45,6 +46,8 @@ msgstr "Bord supérieur"
4546#: qml/Components/EdgeDemo.qml:146
4647msgid "Try swiping from the top edge to access the indicators"
4748msgstr ""
49+"Faites glisser votre doigt à partir du bord supérieur pour accéder aux "
50+"indicateurs."
4851
4952#: qml/Components/EdgeDemo.qml:171
5053msgid "Close"
@@ -53,6 +56,8 @@ msgstr "Fermer"
5356#: qml/Components/EdgeDemo.qml:172
5457msgid "Swipe up again to close the settings screen"
5558msgstr ""
59+"Faites glisser à nouveau votre doigt vers le bord supérieur pour fermer "
60+"l'écran des paramètres"
5661
5762#: qml/Components/EdgeDemo.qml:199
5863msgid "Left edge"
@@ -61,74 +66,85 @@ msgstr "Bord gauche"
6166#: qml/Components/EdgeDemo.qml:200
6267msgid "Swipe from the left to reveal the launcher for quick access to apps"
6368msgstr ""
69+"Faites glisser votre doigt à partir du bord gauche pour afficher le lanceur "
70+"d'applications."
6471
6572#: qml/Components/EdgeDemo.qml:227
6673msgid "Well done"
67−msgstr ""
74+msgstr "Félicitations"
6875
6976#: qml/Components/EdgeDemo.qml:228
7077msgid ""
7178"You have now mastered the edge gestures and can start using the "
7279"phone<br><br>Tap on the screen to start"
7380msgstr ""
81+"Vous maîtrisez maintenant les différents gestes et pouvez commencer à "
82+"utiliser le téléphone<br><br>Appuyez sur l'écran pour commencer"
83+
84+#: qml/Components/Lockscreen.qml:214
85+msgid "Emergency Call"
86+msgstr "Appel d'urgence"
87+
88+#: qml/Components/Lockscreen.qml:231
89+msgid "OK"
90+msgstr "OK"
7491
7592#: qml/Components/PageHeader.qml:365
7693msgid "Recent searches"
7794msgstr "Recherches récentes"
7895
96+#: qml/Components/PassphraseLockscreen.qml:60
97+#, qt-format
98+msgid "Hello %1"
99+msgstr "Bonjour %1"
100+
101+#: qml/Components/PassphraseLockscreen.qml:60
102+msgid "Hello"
103+msgstr "Bonjour"
104+
105+#: qml/Components/PinLockscreen.qml:198
106+msgid "CANCEL"
107+msgstr "ANNULER"
108+
109+#: qml/Components/PinLockscreen.qml:216
110+msgid "DONE"
111+msgstr "TERMINÉ"
112+
79113#: qml/Components/SeeMore.qml:35
80114msgid "See more"
81−msgstr ""
115+msgstr "Voir plus"
82116
83117#: qml/Components/SeeMore.qml:58
84118msgid "See less"
85−msgstr ""
119+msgstr "Voir moins"
86120
87121#: qml/Dash/DashApps.qml:37
88122msgid "Recent"
89−msgstr ""
90−
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
123+msgstr "Récent"
95124
96125#: qml/Dash/Previews/PreviewActionCombo.qml:34
97126msgid "More..."
98−msgstr ""
127+msgstr "Plus..."
99128
100129#: qml/Dash/Previews/PreviewActionCombo.qml:34
101130msgid "Less..."
102−msgstr ""
131+msgstr "Moins..."
103132
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
133+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105134msgid "Rate this"
106135msgstr "Evaluez ceci"
107136
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
137+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109138msgid "Add a review"
110139msgstr "Ajouter un avis"
111140
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
141+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113142msgid "Send"
114143msgstr "Envoyer"
115144
116−#: qml/Greeter/Greeter.qml:151
145+#: qml/Greeter/Greeter.qml:157
117146msgid "Swipe to unlock"
118−msgstr ""
119−
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr "Appel d'urgence"
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr "Bonjour %1"
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr "Bonjour"
147+msgstr "Faites glisser pour déverrouiller"
132148
133149#: qml/Hud/HudParametrizedActionsPage.qml:132
134150msgid "Confirm"
@@ -148,7 +164,7 @@ msgstr "Parlez maintenant…"
148164
149165#: qml/Hud/Hud.qml:94
150166msgid "Speaking..."
151−msgstr ""
167+msgstr "En cours d'écoute..."
152168
153169#: qml/Notifications/NotificationMenuItemFactory.qml:91
154170msgid "Show password"
@@ -156,13 +172,13 @@ msgstr "Afficher le mot de passe"
156172
157173#: qml/Notifications/NotificationMenuItemFactory.qml:103
158174msgid "Please enter SIM PIN"
159−msgstr ""
175+msgstr "Veuillez entrer le code PIN de votre carte SIM"
160176
161177#: qml/Panel/SearchIndicator.qml:27
162178msgid "Search"
163179msgstr "Rechercher"
164180
165−#: qml/Shell.qml:348
181+#: qml/Shell.qml:334
166182#, qt-format
167183msgid "Please enter %1"
168184msgstr "Veuillez saisir %1"
po/gd.po+46−37
@@ -7,24 +7,24 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
11−"PO-Revision-Date: 2013-09-30 10:34+0000\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
11+"PO-Revision-Date: 2014-05-17 21:08+0000\n"
1212"Last-Translator: Akerbeltz <fios@akerbeltz.org>\n"
1313"Language-Team: Gaelic; Scottish <gd@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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
2222msgid "Lock to Launcher"
23−msgstr ""
23+msgstr "Glais ris an lòinsear"
2424
2525#: plugins/Unity/Launcher/launcheritem.cpp:73
2626msgid "Unlock from Launcher"
27−msgstr ""
27+msgstr "Dealaich on lòinsear"
2828
2929#: qml/Components/EdgeDemoOverlay.qml:151
3030msgid "Skip intro"
@@ -77,64 +77,73 @@ msgid ""
7777"You have now mastered the edge gestures and can start using the "
7878"phone<br><br>Tap on the screen to start"
7979msgstr ""
80+"Fhuair thu air na gluasadan oire ceart a dhèanamh a-nis agus is urrainn dhut "
81+"am fòn a chleachdadh<br><br>Thoir gnogag air an sgrìn airson tòiseachadh"
82+
83+#: qml/Components/Lockscreen.qml:214
84+msgid "Emergency Call"
85+msgstr "Gairm èiginn"
86+
87+#: qml/Components/Lockscreen.qml:231
88+msgid "OK"
89+msgstr ""
8090
8191#: qml/Components/PageHeader.qml:365
8292msgid "Recent searches"
8393msgstr "Na lorg thu o chionn goirid"
8494
95+#: qml/Components/PassphraseLockscreen.qml:60
96+#, qt-format
97+msgid "Hello %1"
98+msgstr "Shin thu, %1"
99+
100+#: qml/Components/PassphraseLockscreen.qml:60
101+msgid "Hello"
102+msgstr "Shin thu"
103+
104+#: qml/Components/PinLockscreen.qml:198
105+msgid "CANCEL"
106+msgstr ""
107+
108+#: qml/Components/PinLockscreen.qml:216
109+msgid "DONE"
110+msgstr ""
111+
85112#: qml/Components/SeeMore.qml:35
86113msgid "See more"
87−msgstr ""
114+msgstr "Seall barrachd"
88115
89116#: qml/Components/SeeMore.qml:58
90117msgid "See less"
91−msgstr ""
118+msgstr "Seall nas lugha"
92119
93120#: qml/Dash/DashApps.qml:37
94121msgid "Recent"
95−msgstr ""
96−
97−#: qml/Dash/PreviewListView.qml:52
98−#, qt-format
99−msgid "%1 Preview"
100−msgstr ""
122+msgstr "O chionn goirid"
101123
102124#: qml/Dash/Previews/PreviewActionCombo.qml:34
103125msgid "More..."
104−msgstr ""
126+msgstr "Barrachd..."
105127
106128#: qml/Dash/Previews/PreviewActionCombo.qml:34
107129msgid "Less..."
108−msgstr ""
130+msgstr "Nas lugha..."
109131
110−#: qml/Dash/Previews/PreviewRatingInput.qml:81
132+#: qml/Dash/Previews/PreviewRatingInput.qml:82
111133msgid "Rate this"
112134msgstr "Rangaich seo"
113135
114−#: qml/Dash/Previews/PreviewRatingInput.qml:126
136+#: qml/Dash/Previews/PreviewRatingInput.qml:128
115137msgid "Add a review"
116138msgstr "Cuir lèirmheas ris"
117139
118−#: qml/Dash/Previews/PreviewRatingInput.qml:166
140+#: qml/Dash/Previews/PreviewRatingInput.qml:168
119141msgid "Send"
120142msgstr "Cuir"
121143
122−#: qml/Greeter/Greeter.qml:151
144+#: qml/Greeter/Greeter.qml:157
123145msgid "Swipe to unlock"
124−msgstr ""
125−
126−#: qml/Greeter/Lockscreen.qml:149
127−msgid "Emergency Call"
128−msgstr "Gairm èiginn"
129−
130−#: qml/Greeter/PassphraseLockscreen.qml:59
131−#, qt-format
132−msgid "Hello %1"
133−msgstr "Shin thu, %1"
134−
135−#: qml/Greeter/PassphraseLockscreen.qml:59
136−msgid "Hello"
137−msgstr "Shin thu"
146+msgstr "Dèan grad-shlaighdeadh gus a' ghlas a thoirt dheth"
138147
139148#: qml/Hud/HudParametrizedActionsPage.qml:132
140149msgid "Confirm"
@@ -158,17 +167,17 @@ msgstr "A' bruidhinn..."
158167
159168#: qml/Notifications/NotificationMenuItemFactory.qml:91
160169msgid "Show password"
161−msgstr ""
170+msgstr "Seall am facal-faire"
162171
163172#: qml/Notifications/NotificationMenuItemFactory.qml:103
164173msgid "Please enter SIM PIN"
165−msgstr ""
174+msgstr "Cuir a-steach SIM PIN"
166175
167176#: qml/Panel/SearchIndicator.qml:27
168177msgid "Search"
169178msgstr "Lorg"
170179
171−#: qml/Shell.qml:348
180+#: qml/Shell.qml:334
172181#, qt-format
173182msgid "Please enter %1"
174183msgstr "Cuir a-steach %1"
po/gl.po+37−30
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
11−"PO-Revision-Date: 2014-05-03 07:31+0000\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
11+"PO-Revision-Date: 2014-06-07 13:26+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-05-06 07:34+0000\n"
18−"X-Generator: Launchpad (build 16996)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -36,7 +36,7 @@ msgstr "Bordo dereito"
3636
3737#: qml/Components/EdgeDemo.qml:114
3838msgid "Try swiping from the right edge to unlock the phone"
39−msgstr "Probe o arrastre desde o bordo dereito para desbloquear o teléfono"
39+msgstr "Probe a esvarar desde o bordo dereito para desbloquear o teléfono"
4040
4141#: qml/Components/EdgeDemo.qml:145
4242msgid "Top edge"
@@ -71,13 +71,38 @@ msgid ""
7171"You have now mastered the edge gestures and can start using the "
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
74−"Agora xa domina os xestos do bordo e pode comezar a usar o "
74+"Agora xa domina os xestos dos bordos e pode comezar a usar o "
7575"teléfono<br><br>Toque na pantalla para comezar"
7676
77+#: qml/Components/Lockscreen.qml:214
78+msgid "Emergency Call"
79+msgstr "Chamada de emerxencia"
80+
81+#: qml/Components/Lockscreen.qml:231
82+msgid "OK"
83+msgstr "Aceptar"
84+
7785#: qml/Components/PageHeader.qml:365
7886msgid "Recent searches"
7987msgstr "Buscas recentes"
8088
89+#: qml/Components/PassphraseLockscreen.qml:60
90+#, qt-format
91+msgid "Hello %1"
92+msgstr "Ola %1"
93+
94+#: qml/Components/PassphraseLockscreen.qml:60
95+msgid "Hello"
96+msgstr "Ola"
97+
98+#: qml/Components/PinLockscreen.qml:198
99+msgid "CANCEL"
100+msgstr "CANCELAR"
101+
102+#: qml/Components/PinLockscreen.qml:216
103+msgid "DONE"
104+msgstr "FEITO"
105+
81106#: qml/Components/SeeMore.qml:35
82107msgid "See more"
83108msgstr "Ver máis"
@@ -90,11 +115,6 @@ msgstr "Ver menos"
90115msgid "Recent"
91116msgstr "Recentes"
92117
93−#: qml/Dash/PreviewListView.qml:52
94−#, qt-format
95−msgid "%1 Preview"
96−msgstr "%1 previsualización"
97−
98118#: qml/Dash/Previews/PreviewActionCombo.qml:34
99119msgid "More..."
100120msgstr "Máis…"
@@ -103,35 +123,22 @@ msgstr "Máis…"
103123msgid "Less..."
104124msgstr "Menos..."
105125
106−#: qml/Dash/Previews/PreviewRatingInput.qml:81
126+#: qml/Dash/Previews/PreviewRatingInput.qml:82
107127msgid "Rate this"
108128msgstr "Valore isto"
109129
110−#: qml/Dash/Previews/PreviewRatingInput.qml:126
130+#: qml/Dash/Previews/PreviewRatingInput.qml:128
111131msgid "Add a review"
112132msgstr "Engadir unha opinión"
113133
114−#: qml/Dash/Previews/PreviewRatingInput.qml:166
134+#: qml/Dash/Previews/PreviewRatingInput.qml:168
115135msgid "Send"
116136msgstr "Enviar"
117137
118−#: qml/Greeter/Greeter.qml:151
138+#: qml/Greeter/Greeter.qml:157
119139msgid "Swipe to unlock"
120140msgstr "Esvare para desbloquear"
121141
122−#: qml/Greeter/Lockscreen.qml:149
123−msgid "Emergency Call"
124−msgstr "Chamada de emerxencia"
125−
126−#: qml/Greeter/PassphraseLockscreen.qml:59
127−#, qt-format
128−msgid "Hello %1"
129−msgstr "Ola %1"
130−
131−#: qml/Greeter/PassphraseLockscreen.qml:59
132−msgid "Hello"
133−msgstr "Ola"
134−
135142#: qml/Hud/HudParametrizedActionsPage.qml:132
136143msgid "Confirm"
137144msgstr "Confirmar"
@@ -142,7 +149,7 @@ msgstr "Escriba ou diga unha orde"
142149
143150#: qml/Hud/Hud.qml:84
144151msgid "Loading. Please Wait..."
145−msgstr "Cargando. Agarde…"
152+msgstr "Cargando, agarde…"
146153
147154#: qml/Hud/Hud.qml:89
148155msgid "Speak Now..."
@@ -164,7 +171,7 @@ msgstr "Introduza o PIN da SIM"
164171msgid "Search"
165172msgstr "Buscar"
166173
167−#: qml/Shell.qml:348
174+#: qml/Shell.qml:334
168175#, qt-format
169176msgid "Please enter %1"
170177msgstr "Introduza %1"
po/he.po+43−34
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
11−"PO-Revision-Date: 2013-11-20 08:30+0000\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
11+"PO-Revision-Date: 2014-06-09 07:49+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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -71,64 +71,73 @@ msgid ""
7171"You have now mastered the edge gestures and can start using the "
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
74+"ברגעים אלו סיימת את התמחותך בשימוש במחוות קצה והטלפון פתוח לשימושך<br><br>נא "
75+"לגעת במסך כדי להתחיל"
76+
77+#: qml/Components/Lockscreen.qml:214
78+msgid "Emergency Call"
79+msgstr "שיחת חירום"
80+
81+#: qml/Components/Lockscreen.qml:231
82+msgid "OK"
83+msgstr "אישור"
7484
7585#: qml/Components/PageHeader.qml:365
7686msgid "Recent searches"
7787msgstr "חיפושים אחרונים"
7888
89+#: qml/Components/PassphraseLockscreen.qml:60
90+#, qt-format
91+msgid "Hello %1"
92+msgstr "שלום %1"
93+
94+#: qml/Components/PassphraseLockscreen.qml:60
95+msgid "Hello"
96+msgstr "שלום"
97+
98+#: qml/Components/PinLockscreen.qml:198
99+msgid "CANCEL"
100+msgstr "ביטול"
101+
102+#: qml/Components/PinLockscreen.qml:216
103+msgid "DONE"
104+msgstr "בוצע"
105+
79106#: qml/Components/SeeMore.qml:35
80107msgid "See more"
81−msgstr ""
108+msgstr "לראות עוד"
82109
83110#: qml/Components/SeeMore.qml:58
84111msgid "See less"
85−msgstr ""
112+msgstr "לראות פחות"
86113
87114#: qml/Dash/DashApps.qml:37
88115msgid "Recent"
89−msgstr ""
90−
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
116+msgstr "בשימוש לאחרונה"
95117
96118#: qml/Dash/Previews/PreviewActionCombo.qml:34
97119msgid "More..."
98−msgstr ""
120+msgstr "עוד…"
99121
100122#: qml/Dash/Previews/PreviewActionCombo.qml:34
101123msgid "Less..."
102−msgstr ""
124+msgstr "פחות…"
103125
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
126+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105127msgid "Rate this"
106128msgstr "דירוג היישום"
107129
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
130+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109131msgid "Add a review"
110132msgstr "הוספת סקירה"
111133
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
134+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113135msgid "Send"
114136msgstr "שליחה"
115137
116−#: qml/Greeter/Greeter.qml:151
138+#: qml/Greeter/Greeter.qml:157
117139msgid "Swipe to unlock"
118−msgstr ""
119−
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr "שיחת חירום"
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr "שלום %1"
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr "שלום"
140+msgstr "יש להחליק לפתיחה"
132141
133142#: qml/Hud/HudParametrizedActionsPage.qml:132
134143msgid "Confirm"
@@ -156,13 +165,13 @@ msgstr "הצגת הססמה"
156165
157166#: qml/Notifications/NotificationMenuItemFactory.qml:103
158167msgid "Please enter SIM PIN"
159−msgstr ""
168+msgstr "נא להזין את קוד ה־<U+200F>SIM"
160169
161170#: qml/Panel/SearchIndicator.qml:27
162171msgid "Search"
163172msgstr "חיפוש"
164173
165−#: qml/Shell.qml:348
174+#: qml/Shell.qml:334
166175#, qt-format
167176msgid "Please enter %1"
168177msgstr "נא להזין %1"
po/hi.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr "आपातकालीन कॉल"
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr "पिछले खोजों"
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr ""
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr "नमस्ते"
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr "समीक्षा दे"
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr "भेजें"
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr "आपातकालीन कॉल"
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr "नमस्ते"
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr ""
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr "खोजें"
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr ""
po/hr.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\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-05-01 06:44+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr ""
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr "Nedavne pretrage"
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr ""
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr ""
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr ""
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr ""
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr ""
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr "Potvrdi"
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr "Pretraživanje"
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr ""
po/hu.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2014-01-14 23:02+0000\n"
1212"Last-Translator: Kristóf Kiszel <Unknown>\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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -74,10 +74,35 @@ msgid ""
7474"phone<br><br>Tap on the screen to start"
7575msgstr ""
7676
77+#: qml/Components/Lockscreen.qml:214
78+msgid "Emergency Call"
79+msgstr "Vészhívás"
80+
81+#: qml/Components/Lockscreen.qml:231
82+msgid "OK"
83+msgstr ""
84+
7785#: qml/Components/PageHeader.qml:365
7886msgid "Recent searches"
7987msgstr "Legutóbbi keresések"
8088
89+#: qml/Components/PassphraseLockscreen.qml:60
90+#, qt-format
91+msgid "Hello %1"
92+msgstr "Szia %1"
93+
94+#: qml/Components/PassphraseLockscreen.qml:60
95+msgid "Hello"
96+msgstr "Szia"
97+
98+#: qml/Components/PinLockscreen.qml:198
99+msgid "CANCEL"
100+msgstr ""
101+
102+#: qml/Components/PinLockscreen.qml:216
103+msgid "DONE"
104+msgstr ""
105+
81106#: qml/Components/SeeMore.qml:35
82107msgid "See more"
83108msgstr ""
@@ -90,11 +115,6 @@ msgstr ""
90115msgid "Recent"
91116msgstr ""
92117
93−#: qml/Dash/PreviewListView.qml:52
94−#, qt-format
95−msgid "%1 Preview"
96−msgstr ""
97−
98118#: qml/Dash/Previews/PreviewActionCombo.qml:34
99119msgid "More..."
100120msgstr ""
@@ -103,35 +123,22 @@ msgstr ""
103123msgid "Less..."
104124msgstr ""
105125
106−#: qml/Dash/Previews/PreviewRatingInput.qml:81
126+#: qml/Dash/Previews/PreviewRatingInput.qml:82
107127msgid "Rate this"
108128msgstr "Osztályzás"
109129
110−#: qml/Dash/Previews/PreviewRatingInput.qml:126
130+#: qml/Dash/Previews/PreviewRatingInput.qml:128
111131msgid "Add a review"
112132msgstr "Értékelés hozzáadása"
113133
114−#: qml/Dash/Previews/PreviewRatingInput.qml:166
134+#: qml/Dash/Previews/PreviewRatingInput.qml:168
115135msgid "Send"
116136msgstr "Küldés"
117137
118−#: qml/Greeter/Greeter.qml:151
138+#: qml/Greeter/Greeter.qml:157
119139msgid "Swipe to unlock"
120140msgstr ""
121141
122−#: qml/Greeter/Lockscreen.qml:149
123−msgid "Emergency Call"
124−msgstr "Vészhívás"
125−
126−#: qml/Greeter/PassphraseLockscreen.qml:59
127−#, qt-format
128−msgid "Hello %1"
129−msgstr "Szia %1"
130−
131−#: qml/Greeter/PassphraseLockscreen.qml:59
132−msgid "Hello"
133−msgstr "Szia"
134−
135142#: qml/Hud/HudParametrizedActionsPage.qml:132
136143msgid "Confirm"
137144msgstr "Megerősítés"
@@ -164,7 +171,7 @@ msgstr ""
164171msgid "Search"
165172msgstr "Keresés"
166173
167−#: qml/Shell.qml:348
174+#: qml/Shell.qml:334
168175#, qt-format
169176msgid "Please enter %1"
170177msgstr "Adja meg a következőt: %1"
po/hy.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr ""
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr "Վերջին որոնումներ"
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr ""
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr ""
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr ""
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr ""
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr ""
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr "Հաստատել"
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr "Որոնում"
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr ""
po/id.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr ""
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr ""
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr ""
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr ""
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr ""
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr ""
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr ""
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr ""
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr ""
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr ""
po/is.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2013-09-18 16:22+0000\n"
1212"Last-Translator: Andri Thorlacius <Unknown>\n"
1313"Language-Team: Icelandic <is@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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -73,10 +73,35 @@ msgid ""
7373"phone<br><br>Tap on the screen to start"
7474msgstr ""
7575
76+#: qml/Components/Lockscreen.qml:214
77+msgid "Emergency Call"
78+msgstr "Neyðarsímtal"
79+
80+#: qml/Components/Lockscreen.qml:231
81+msgid "OK"
82+msgstr ""
83+
7684#: qml/Components/PageHeader.qml:365
7785msgid "Recent searches"
7886msgstr "Nýlegar leitir"
7987
88+#: qml/Components/PassphraseLockscreen.qml:60
89+#, qt-format
90+msgid "Hello %1"
91+msgstr "Hæ %1"
92+
93+#: qml/Components/PassphraseLockscreen.qml:60
94+msgid "Hello"
95+msgstr "Hæ"
96+
97+#: qml/Components/PinLockscreen.qml:198
98+msgid "CANCEL"
99+msgstr ""
100+
101+#: qml/Components/PinLockscreen.qml:216
102+msgid "DONE"
103+msgstr ""
104+
80105#: qml/Components/SeeMore.qml:35
81106msgid "See more"
82107msgstr ""
@@ -89,11 +114,6 @@ msgstr ""
89114msgid "Recent"
90115msgstr ""
91116
92−#: qml/Dash/PreviewListView.qml:52
93−#, qt-format
94−msgid "%1 Preview"
95−msgstr ""
96−
97117#: qml/Dash/Previews/PreviewActionCombo.qml:34
98118msgid "More..."
99119msgstr ""
@@ -102,35 +122,22 @@ msgstr ""
102122msgid "Less..."
103123msgstr ""
104124
105−#: qml/Dash/Previews/PreviewRatingInput.qml:81
125+#: qml/Dash/Previews/PreviewRatingInput.qml:82
106126msgid "Rate this"
107127msgstr "Gefa þessu einkunn"
108128
109−#: qml/Dash/Previews/PreviewRatingInput.qml:126
129+#: qml/Dash/Previews/PreviewRatingInput.qml:128
110130msgid "Add a review"
111131msgstr "Gefa umsögn"
112132
113−#: qml/Dash/Previews/PreviewRatingInput.qml:166
133+#: qml/Dash/Previews/PreviewRatingInput.qml:168
114134msgid "Send"
115135msgstr "Senda"
116136
117−#: qml/Greeter/Greeter.qml:151
137+#: qml/Greeter/Greeter.qml:157
118138msgid "Swipe to unlock"
119139msgstr ""
120140
121−#: qml/Greeter/Lockscreen.qml:149
122−msgid "Emergency Call"
123−msgstr "Neyðarsímtal"
124−
125−#: qml/Greeter/PassphraseLockscreen.qml:59
126−#, qt-format
127−msgid "Hello %1"
128−msgstr "Hæ %1"
129−
130−#: qml/Greeter/PassphraseLockscreen.qml:59
131−msgid "Hello"
132−msgstr "Hæ"
133−
134141#: qml/Hud/HudParametrizedActionsPage.qml:132
135142msgid "Confirm"
136143msgstr "Staðfesta"
@@ -163,7 +170,7 @@ msgstr ""
163170msgid "Search"
164171msgstr "Leita"
165172
166−#: qml/Shell.qml:348
173+#: qml/Shell.qml:334
167174#, qt-format
168175msgid "Please enter %1"
169176msgstr ""
po/it.po+44−35
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
11−"PO-Revision-Date: 2014-01-22 09:15+0000\n"
12−"Last-Translator: Domenico <domenico.verde125@live.it>\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
11+"PO-Revision-Date: 2014-06-10 12:08+0000\n"
12+"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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -76,64 +76,73 @@ msgid ""
7676"You have now mastered the edge gestures and can start using the "
7777"phone<br><br>Tap on the screen to start"
7878msgstr ""
79+"L'apprendimento dei gesti è stato completato. È ora possibile iniziare a "
80+"usare il telefono.<br><br>Toccare lo schermo per iniziare"
81+
82+#: qml/Components/Lockscreen.qml:214
83+msgid "Emergency Call"
84+msgstr "Chiamata di emergenza"
85+
86+#: qml/Components/Lockscreen.qml:231
87+msgid "OK"
88+msgstr "OK"
7989
8090#: qml/Components/PageHeader.qml:365
8191msgid "Recent searches"
8292msgstr "Ricerche recenti"
8393
94+#: qml/Components/PassphraseLockscreen.qml:60
95+#, qt-format
96+msgid "Hello %1"
97+msgstr "Ciao %1"
98+
99+#: qml/Components/PassphraseLockscreen.qml:60
100+msgid "Hello"
101+msgstr "Ciao"
102+
103+#: qml/Components/PinLockscreen.qml:198
104+msgid "CANCEL"
105+msgstr "Annulla"
106+
107+#: qml/Components/PinLockscreen.qml:216
108+msgid "DONE"
109+msgstr "Fatto"
110+
84111#: qml/Components/SeeMore.qml:35
85112msgid "See more"
86−msgstr ""
113+msgstr "Mostra di più"
87114
88115#: qml/Components/SeeMore.qml:58
89116msgid "See less"
90−msgstr ""
117+msgstr "Mostra meno"
91118
92119#: qml/Dash/DashApps.qml:37
93120msgid "Recent"
94−msgstr ""
95−
96−#: qml/Dash/PreviewListView.qml:52
97−#, qt-format
98−msgid "%1 Preview"
99−msgstr ""
121+msgstr "Recenti"
100122
101123#: qml/Dash/Previews/PreviewActionCombo.qml:34
102124msgid "More..."
103−msgstr ""
125+msgstr "Altro..."
104126
105127#: qml/Dash/Previews/PreviewActionCombo.qml:34
106128msgid "Less..."
107−msgstr ""
129+msgstr "Meno..."
108130
109−#: qml/Dash/Previews/PreviewRatingInput.qml:81
131+#: qml/Dash/Previews/PreviewRatingInput.qml:82
110132msgid "Rate this"
111133msgstr "Valuta"
112134
113−#: qml/Dash/Previews/PreviewRatingInput.qml:126
135+#: qml/Dash/Previews/PreviewRatingInput.qml:128
114136msgid "Add a review"
115137msgstr "Aggiungi una recensione"
116138
117−#: qml/Dash/Previews/PreviewRatingInput.qml:166
139+#: qml/Dash/Previews/PreviewRatingInput.qml:168
118140msgid "Send"
119141msgstr "Invia"
120142
121−#: qml/Greeter/Greeter.qml:151
143+#: qml/Greeter/Greeter.qml:157
122144msgid "Swipe to unlock"
123−msgstr ""
124−
125−#: qml/Greeter/Lockscreen.qml:149
126−msgid "Emergency Call"
127−msgstr "Chiamata di emergenza"
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−#, qt-format
131−msgid "Hello %1"
132−msgstr "Ciao %1"
133−
134−#: qml/Greeter/PassphraseLockscreen.qml:59
135−msgid "Hello"
136−msgstr "Ciao"
145+msgstr "Scorrere per sbloccare"
137146
138147#: qml/Hud/HudParametrizedActionsPage.qml:132
139148msgid "Confirm"
@@ -161,13 +170,13 @@ msgstr "Mostra password"
161170
162171#: qml/Notifications/NotificationMenuItemFactory.qml:103
163172msgid "Please enter SIM PIN"
164−msgstr ""
173+msgstr "Inserire il codice PIN"
165174
166175#: qml/Panel/SearchIndicator.qml:27
167176msgid "Search"
168177msgstr "Cerca"
169178
170−#: qml/Shell.qml:348
179+#: qml/Shell.qml:334
171180#, qt-format
172181msgid "Please enter %1"
173182msgstr "Inserire %1"
po/ja.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2014-01-18 07:01+0000\n"
1212"Last-Translator: Shushi Kurose <md81bird@hitaki.net>\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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr ""
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr "最近の検索"
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr ""
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr "こんにちは"
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr ""
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr "送信"
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr "こんにちは"
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr "確認"
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr "検索"
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr ""
po/km.po+36−29
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
11−"PO-Revision-Date: 2014-03-04 02:32+0000\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
11+"PO-Revision-Date: 2014-05-19 01:42+0000\n"
1212"Last-Translator: Khoem Sokhem <khoemsokhem@khmeros.info>\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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -76,10 +76,35 @@ msgstr ""
7676"ឥឡូវ​អ្នក​បាន​ពិនិត្យ​កាយវិការ​គែម​ "
7777"និង​អាច​ចាប់ផ្ដើម​ប្រើ​ទូរស័ព្ទ<br><br>ប៉ះ លើ​អេក្រង់​ដើម្បី​ចាប់ផ្ដើម"
7878
79+#: qml/Components/Lockscreen.qml:214
80+msgid "Emergency Call"
81+msgstr "ការ​ហៅ​ពេល​អាសន្ន"
82+
83+#: qml/Components/Lockscreen.qml:231
84+msgid "OK"
85+msgstr ""
86+
7987#: qml/Components/PageHeader.qml:365
8088msgid "Recent searches"
8189msgstr "ការ​ស្វែងរក​ថ្មី"
8290
91+#: qml/Components/PassphraseLockscreen.qml:60
92+#, qt-format
93+msgid "Hello %1"
94+msgstr "សួស្ដី %1"
95+
96+#: qml/Components/PassphraseLockscreen.qml:60
97+msgid "Hello"
98+msgstr "សួស្តី"
99+
100+#: qml/Components/PinLockscreen.qml:198
101+msgid "CANCEL"
102+msgstr ""
103+
104+#: qml/Components/PinLockscreen.qml:216
105+msgid "DONE"
106+msgstr ""
107+
83108#: qml/Components/SeeMore.qml:35
84109msgid "See more"
85110msgstr "មើល​ច្រើន​ទៀត"
@@ -90,12 +115,7 @@ msgstr "មើល​តិច​ជាង"
90115
91116#: qml/Dash/DashApps.qml:37
92117msgid "Recent"
93−msgstr ""
94−
95−#: qml/Dash/PreviewListView.qml:52
96−#, qt-format
97−msgid "%1 Preview"
98−msgstr ""
118+msgstr "បច្ចុប្បន្ន"
99119
100120#: qml/Dash/Previews/PreviewActionCombo.qml:34
101121msgid "More..."
@@ -105,34 +125,21 @@ msgstr "ច្រើនជាង​..."
105125msgid "Less..."
106126msgstr "តិច​ជាង..."
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:81
128+#: qml/Dash/Previews/PreviewRatingInput.qml:82
109129msgid "Rate this"
110130msgstr "វាយតម្លៃ​វា"
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:126
132+#: qml/Dash/Previews/PreviewRatingInput.qml:128
113133msgid "Add a review"
114134msgstr "បន្ថែម​ការ​ពិនិត្យ"
115135
116−#: qml/Dash/Previews/PreviewRatingInput.qml:166
136+#: qml/Dash/Previews/PreviewRatingInput.qml:168
117137msgid "Send"
118138msgstr "ផ្ញើ"
119139
120−#: qml/Greeter/Greeter.qml:151
140+#: qml/Greeter/Greeter.qml:157
121141msgid "Swipe to unlock"
122−msgstr ""
123−
124−#: qml/Greeter/Lockscreen.qml:149
125−msgid "Emergency Call"
126−msgstr "ការ​ហៅ​ពេល​អាសន្ន"
127−
128−#: qml/Greeter/PassphraseLockscreen.qml:59
129−#, qt-format
130−msgid "Hello %1"
131−msgstr "សួស្ដី %1"
132−
133−#: qml/Greeter/PassphraseLockscreen.qml:59
134−msgid "Hello"
135−msgstr "សួស្តី"
142+msgstr "អូស​ដើម្បី​ដោះសោ"
136143
137144#: qml/Hud/HudParametrizedActionsPage.qml:132
138145msgid "Confirm"
@@ -166,7 +173,7 @@ msgstr "បញ្ចូល​កូដ PIN របស់​ស៊ីមកាត"
166173msgid "Search"
167174msgstr "ស្វែង​រក"
168175
169−#: qml/Shell.qml:348
176+#: qml/Shell.qml:334
170177#, qt-format
171178msgid "Please enter %1"
172179msgstr "សូម​បញ្ចូល %1"
po/kn.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr ""
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr "ಇತ್ತೀಚಿನ ಹುಡುಕಾಟಗಳು"
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr ""
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr ""
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr ""
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr ""
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr ""
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr "ಖಚಿತಪಡಿಸು"
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr "ಹುಡುಕು"
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr ""
po/ko.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2013-10-10 07:04+0000\n"
1212"Last-Translator: Kim Boram <boramism@gmail.com>\n"
1313"Language-Team: Korean <ko@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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr ""
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr "최근 검색"
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr ""
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr ""
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr ""
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr ""
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr ""
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr ""
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr "검색"
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr ""
po/ky.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2013-06-27 06:17+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Kirghiz <ky@li.org>\n"
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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr ""
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr "Соңку издөөлөр"
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr ""
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr ""
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr ""
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr ""
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr ""
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr "Аныктоо"
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr "Издөө"
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr ""
po/lo.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2013-10-02 10:00+0000\n"
1212"Last-Translator: Anousak <anousak@gmail.com>\n"
1313"Language-Team: Lao <lo@li.org>\n"
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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr ""
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr ""
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr "ສະບາຍດີ %1"
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr "ສະບາຍດີ"
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr ""
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr "ສົ່ງ"
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr "ສະບາຍດີ %1"
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr "ສະບາຍດີ"
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr "ຢືນຢັນ"
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr "ຊອກຫາ"
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr "ກະລູນາປ້ອນ %1"
po/lt.po+40−33
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
11−"PO-Revision-Date: 2014-01-15 12:42+0000\n"
12−"Last-Translator: Gediminas Paulauskas <menesis@pov.lt>\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
11+"PO-Revision-Date: 2014-05-19 17:15+0000\n"
12+"Last-Translator: Mantas Kriaučiūnas <mantas@akl.lt>\n"
1313"Language-Team: Lithuanian <lt@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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -75,10 +75,35 @@ msgid ""
7575"phone<br><br>Tap on the screen to start"
7676msgstr ""
7777
78+#: qml/Components/Lockscreen.qml:214
79+msgid "Emergency Call"
80+msgstr "Pagalbos skambutis"
81+
82+#: qml/Components/Lockscreen.qml:231
83+msgid "OK"
84+msgstr ""
85+
7886#: qml/Components/PageHeader.qml:365
7987msgid "Recent searches"
8088msgstr "Paskiausios paieškos"
8189
90+#: qml/Components/PassphraseLockscreen.qml:60
91+#, qt-format
92+msgid "Hello %1"
93+msgstr "Laba diena, %1"
94+
95+#: qml/Components/PassphraseLockscreen.qml:60
96+msgid "Hello"
97+msgstr "Sveiki"
98+
99+#: qml/Components/PinLockscreen.qml:198
100+msgid "CANCEL"
101+msgstr ""
102+
103+#: qml/Components/PinLockscreen.qml:216
104+msgid "DONE"
105+msgstr ""
106+
82107#: qml/Components/SeeMore.qml:35
83108msgid "See more"
84109msgstr ""
@@ -89,49 +114,31 @@ msgstr ""
89114
90115#: qml/Dash/DashApps.qml:37
91116msgid "Recent"
92−msgstr ""
93−
94−#: qml/Dash/PreviewListView.qml:52
95−#, qt-format
96−msgid "%1 Preview"
97−msgstr ""
117+msgstr "Paskiausieji"
98118
99119#: qml/Dash/Previews/PreviewActionCombo.qml:34
100120msgid "More..."
101−msgstr ""
121+msgstr "Daugiau..."
102122
103123#: qml/Dash/Previews/PreviewActionCombo.qml:34
104124msgid "Less..."
105−msgstr ""
125+msgstr "Mažiau..."
106126
107−#: qml/Dash/Previews/PreviewRatingInput.qml:81
127+#: qml/Dash/Previews/PreviewRatingInput.qml:82
108128msgid "Rate this"
109129msgstr "Įvertinkite tai"
110130
111−#: qml/Dash/Previews/PreviewRatingInput.qml:126
131+#: qml/Dash/Previews/PreviewRatingInput.qml:128
112132msgid "Add a review"
113133msgstr "Pridėkite apžvalgą"
114134
115−#: qml/Dash/Previews/PreviewRatingInput.qml:166
135+#: qml/Dash/Previews/PreviewRatingInput.qml:168
116136msgid "Send"
117137msgstr "Siųsti"
118138
119−#: qml/Greeter/Greeter.qml:151
139+#: qml/Greeter/Greeter.qml:157
120140msgid "Swipe to unlock"
121−msgstr ""
122−
123−#: qml/Greeter/Lockscreen.qml:149
124−msgid "Emergency Call"
125−msgstr "Pagalbos skambutis"
126−
127−#: qml/Greeter/PassphraseLockscreen.qml:59
128−#, qt-format
129−msgid "Hello %1"
130−msgstr "Laba diena, %1"
131−
132−#: qml/Greeter/PassphraseLockscreen.qml:59
133−msgid "Hello"
134−msgstr "Sveiki"
141+msgstr "Braukite ir atrakinsite"
135142
136143#: qml/Hud/HudParametrizedActionsPage.qml:132
137144msgid "Confirm"
@@ -159,13 +166,13 @@ msgstr "Rodyti slaptažodį"
159166
160167#: qml/Notifications/NotificationMenuItemFactory.qml:103
161168msgid "Please enter SIM PIN"
162−msgstr ""
169+msgstr "Įveskite SIM kortelės PIN kodą"
163170
164171#: qml/Panel/SearchIndicator.qml:27
165172msgid "Search"
166173msgstr "Paieška"
167174
168−#: qml/Shell.qml:348
175+#: qml/Shell.qml:334
169176#, qt-format
170177msgid "Please enter %1"
171178msgstr "Prašom įvesti %1"
po/lv.po+51−44
@@ -7,28 +7,28 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
11−"PO-Revision-Date: 2014-01-11 16:48+0000\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
11+"PO-Revision-Date: 2014-05-31 14:54+0000\n"
1212"Last-Translator: Jānis-Marks Gailis <jeanmarc.gailis@gmail.com>\n"
1313"Language-Team: Latvian <lv@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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
2222msgid "Lock to Launcher"
23−msgstr ""
23+msgstr "Pieslēgt palaidējam"
2424
2525#: plugins/Unity/Launcher/launcheritem.cpp:73
2626msgid "Unlock from Launcher"
27−msgstr ""
27+msgstr "Atslēgt no palaidēja"
2828
2929#: qml/Components/EdgeDemoOverlay.qml:151
3030msgid "Skip intro"
31−msgstr ""
31+msgstr "Izlaist Intro"
3232
3333#: qml/Components/EdgeDemo.qml:113
3434msgid "Right edge"
@@ -36,7 +36,7 @@ msgstr "Labā mala"
3636
3737#: qml/Components/EdgeDemo.qml:114
3838msgid "Try swiping from the right edge to unlock the phone"
39−msgstr ""
39+msgstr "Mēģiniet iesvelt no labās malas, lai atbloķētu tālruni"
4040
4141#: qml/Components/EdgeDemo.qml:145
4242msgid "Top edge"
@@ -44,7 +44,7 @@ msgstr "Augšējā mala"
4444
4545#: qml/Components/EdgeDemo.qml:146
4646msgid "Try swiping from the top edge to access the indicators"
47−msgstr ""
47+msgstr "Mēģiniet iesvelt no augšējās malas, lai piekļūt pie indikatoriem"
4848
4949#: qml/Components/EdgeDemo.qml:171
5050msgid "Close"
@@ -64,7 +64,7 @@ msgstr ""
6464
6565#: qml/Components/EdgeDemo.qml:227
6666msgid "Well done"
67−msgstr ""
67+msgstr "Ļoti labi!"
6868
6969#: qml/Components/EdgeDemo.qml:228
7070msgid ""
@@ -72,64 +72,71 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr "Neatliekamās Palīdzības zvans"
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr "Nesen veiktās meklēšanas"
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr "Sveiki, %1"
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr "Sveiki"
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81−msgstr ""
106+msgstr "Redzēt vairāk"
82107
83108#: qml/Components/SeeMore.qml:58
84109msgid "See less"
85−msgstr ""
110+msgstr "Redzēt mazāk"
86111
87112#: qml/Dash/DashApps.qml:37
88113msgid "Recent"
89−msgstr ""
90−
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
114+msgstr "Nesens"
95115
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98−msgstr ""
118+msgstr "Vairāk..."
99119
100120#: qml/Dash/Previews/PreviewActionCombo.qml:34
101121msgid "Less..."
102−msgstr ""
122+msgstr "Mazāk..."
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106−msgstr ""
126+msgstr "Novērtēt šo"
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110−msgstr ""
130+msgstr "Komentēt"
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114−msgstr ""
134+msgstr "Sūtīt"
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr ""
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr "Apstiprināt"
@@ -152,17 +159,17 @@ msgstr "Runa..."
152159
153160#: qml/Notifications/NotificationMenuItemFactory.qml:91
154161msgid "Show password"
155−msgstr ""
162+msgstr "Rādīt paroli"
156163
157164#: qml/Notifications/NotificationMenuItemFactory.qml:103
158165msgid "Please enter SIM PIN"
159−msgstr ""
166+msgstr "Lūdzu ievadiet SIM PIN"
160167
161168#: qml/Panel/SearchIndicator.qml:27
162169msgid "Search"
163170msgstr "Meklēt"
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168−msgstr ""
175+msgstr "Lūdzu ievadiet %1"
po/ml.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2013-11-23 11:44+0000\n"
1212"Last-Translator: Stym alfaZ <Unknown>\n"
1313"Language-Team: Malayalam <ml@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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -74,10 +74,35 @@ msgid ""
7474"phone<br><br>Tap on the screen to start"
7575msgstr ""
7676
77+#: qml/Components/Lockscreen.qml:214
78+msgid "Emergency Call"
79+msgstr "അടിയന്തിര വിളി"
80+
81+#: qml/Components/Lockscreen.qml:231
82+msgid "OK"
83+msgstr ""
84+
7785#: qml/Components/PageHeader.qml:365
7886msgid "Recent searches"
7987msgstr "സമീപകാല തിരയലുകള്‍"
8088
89+#: qml/Components/PassphraseLockscreen.qml:60
90+#, qt-format
91+msgid "Hello %1"
92+msgstr "ഹലോ %1"
93+
94+#: qml/Components/PassphraseLockscreen.qml:60
95+msgid "Hello"
96+msgstr "ഹലോ"
97+
98+#: qml/Components/PinLockscreen.qml:198
99+msgid "CANCEL"
100+msgstr ""
101+
102+#: qml/Components/PinLockscreen.qml:216
103+msgid "DONE"
104+msgstr ""
105+
81106#: qml/Components/SeeMore.qml:35
82107msgid "See more"
83108msgstr ""
@@ -90,11 +115,6 @@ msgstr ""
90115msgid "Recent"
91116msgstr ""
92117
93−#: qml/Dash/PreviewListView.qml:52
94−#, qt-format
95−msgid "%1 Preview"
96−msgstr ""
97−
98118#: qml/Dash/Previews/PreviewActionCombo.qml:34
99119msgid "More..."
100120msgstr ""
@@ -103,35 +123,22 @@ msgstr ""
103123msgid "Less..."
104124msgstr ""
105125
106−#: qml/Dash/Previews/PreviewRatingInput.qml:81
126+#: qml/Dash/Previews/PreviewRatingInput.qml:82
107127msgid "Rate this"
108128msgstr "ഇത് അവലോകനം ചെയ്യുക"
109129
110−#: qml/Dash/Previews/PreviewRatingInput.qml:126
130+#: qml/Dash/Previews/PreviewRatingInput.qml:128
111131msgid "Add a review"
112132msgstr "ഒരു അവലോകനം ചേര്‍ക്കുക"
113133
114−#: qml/Dash/Previews/PreviewRatingInput.qml:166
134+#: qml/Dash/Previews/PreviewRatingInput.qml:168
115135msgid "Send"
116136msgstr "അയയ്‌ക്കുക"
117137
118−#: qml/Greeter/Greeter.qml:151
138+#: qml/Greeter/Greeter.qml:157
119139msgid "Swipe to unlock"
120140msgstr ""
121141
122−#: qml/Greeter/Lockscreen.qml:149
123−msgid "Emergency Call"
124−msgstr "അടിയന്തിര വിളി"
125−
126−#: qml/Greeter/PassphraseLockscreen.qml:59
127−#, qt-format
128−msgid "Hello %1"
129−msgstr "ഹലോ %1"
130−
131−#: qml/Greeter/PassphraseLockscreen.qml:59
132−msgid "Hello"
133−msgstr "ഹലോ"
134−
135142#: qml/Hud/HudParametrizedActionsPage.qml:132
136143msgid "Confirm"
137144msgstr "സ്ഥിരീകരിക്കുക"
@@ -164,7 +171,7 @@ msgstr ""
164171msgid "Search"
165172msgstr "തിരയുക"
166173
167−#: qml/Shell.qml:348
174+#: qml/Shell.qml:334
168175#, qt-format
169176msgid "Please enter %1"
170177msgstr "ദയവായി %1 നല്‍കുക"
po/mr.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2014-01-14 19:54+0000\n"
1212"Last-Translator: Rohan Deshmukh <Unknown>\n"
1313"Language-Team: Marathi <mr@li.org>\n"
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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr ""
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr ""
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr ""
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr ""
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr ""
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr ""
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr ""
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr ""
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr ""
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr ""
po/ms.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2014-01-17 09:05+0000\n"
1212"Last-Translator: abuyop <Unknown>\n"
1313"Language-Team: Malay <ms@li.org>\n"
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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr "panggilan Kecemasan"
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr "Gelintar baru-baru ini"
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr "Hai %1"
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr "Hello"
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr "Kadar ini"
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr "Tambah ulasan"
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr "Hantar"
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr "panggilan Kecemasan"
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr "Hai %1"
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr "Hello"
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr "Sahkan"
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr "Gelintar"
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr "Sila masukkan %1"
po/my.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2013-12-12 11:12+0000\n"
1212"Last-Translator: Pyae Sone <Unknown>\n"
1313"Language-Team: Burmese <my@li.org>\n"
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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr "အရေးပေါ်ခေါ်မည်"
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr "မကြာသေးခင်က ရှာဖွေခြင်း"
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr "ဟဲလို %1"
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr "ဟဲလို"
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr "ဒီဟာကိုအမှတ်ပေးမည်"
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr ""
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr "ပို့မည်"
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr "အရေးပေါ်ခေါ်မည်"
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr "ဟဲလို %1"
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr "ဟဲလို"
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr "အတည်ပြုပါ"
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr "ရှာဖွေ"
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr "%1ကိုရိုက်ထည့်ပါ"
po/nb.po+62−53
@@ -7,128 +7,137 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
11−"PO-Revision-Date: 2013-06-27 07:02+0000\n"
12−"Last-Translator: Joakim Langvand <jlangvand@gmail.com>\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
11+"PO-Revision-Date: 2014-06-11 06:36+0000\n"
12+"Last-Translator: Åka Sikrom <Unknown>\n"
1313"Language-Team: Norwegian Bokmal <nb@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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
2222msgid "Lock to Launcher"
23−msgstr ""
23+msgstr "Lås til oppstarter"
2424
2525#: plugins/Unity/Launcher/launcheritem.cpp:73
2626msgid "Unlock from Launcher"
27−msgstr ""
27+msgstr "Lås opp fra oppstarter"
2828
2929#: qml/Components/EdgeDemoOverlay.qml:151
3030msgid "Skip intro"
31−msgstr ""
31+msgstr "Hopp over introduksjon"
3232
3333#: qml/Components/EdgeDemo.qml:113
3434msgid "Right edge"
35−msgstr ""
35+msgstr "Høyre kant"
3636
3737#: qml/Components/EdgeDemo.qml:114
3838msgid "Try swiping from the right edge to unlock the phone"
39−msgstr ""
39+msgstr "Prøv å sveipe fra høyre side for å låse opp telefonen"
4040
4141#: qml/Components/EdgeDemo.qml:145
4242msgid "Top edge"
43−msgstr ""
43+msgstr "Øvre kant"
4444
4545#: qml/Components/EdgeDemo.qml:146
4646msgid "Try swiping from the top edge to access the indicators"
47−msgstr ""
47+msgstr "Prøv å sveipe fra toppen for å få tilgang til innstillingene"
4848
4949#: qml/Components/EdgeDemo.qml:171
5050msgid "Close"
51−msgstr ""
51+msgstr "Lukk"
5252
5353#: qml/Components/EdgeDemo.qml:172
5454msgid "Swipe up again to close the settings screen"
55−msgstr ""
55+msgstr "Sveip opp igjen for å lukke innstillingsmenyen"
5656
5757#: qml/Components/EdgeDemo.qml:199
5858msgid "Left edge"
59−msgstr ""
59+msgstr "Venstre kant"
6060
6161#: qml/Components/EdgeDemo.qml:200
6262msgid "Swipe from the left to reveal the launcher for quick access to apps"
63−msgstr ""
63+msgstr "Sveip fra venstre for å få tilgang til programoppstarteren"
6464
6565#: qml/Components/EdgeDemo.qml:227
6666msgid "Well done"
67−msgstr ""
67+msgstr "Bra jobba"
6868
6969#: qml/Components/EdgeDemo.qml:228
7070msgid ""
7171"You have now mastered the edge gestures and can start using the "
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
74+"Du har nå mestret kantbevegelsene, og er klar til å bruke "
75+"telefonen<br><br>Trykk på skjermen for å begynne"
76+
77+#: qml/Components/Lockscreen.qml:214
78+msgid "Emergency Call"
79+msgstr "Nødanrop"
80+
81+#: qml/Components/Lockscreen.qml:231
82+msgid "OK"
83+msgstr "OK"
7484
7585#: qml/Components/PageHeader.qml:365
7686msgid "Recent searches"
77−msgstr "Siste søk"
87+msgstr "Nylige søk"
88+
89+#: qml/Components/PassphraseLockscreen.qml:60
90+#, qt-format
91+msgid "Hello %1"
92+msgstr "Hei, %1"
93+
94+#: qml/Components/PassphraseLockscreen.qml:60
95+msgid "Hello"
96+msgstr "Hei"
97+
98+#: qml/Components/PinLockscreen.qml:198
99+msgid "CANCEL"
100+msgstr "AVBRYT"
101+
102+#: qml/Components/PinLockscreen.qml:216
103+msgid "DONE"
104+msgstr "FERDIG"
78105
79106#: qml/Components/SeeMore.qml:35
80107msgid "See more"
81−msgstr ""
108+msgstr "Vis mer"
82109
83110#: qml/Components/SeeMore.qml:58
84111msgid "See less"
85−msgstr ""
112+msgstr "Vis mindre"
86113
87114#: qml/Dash/DashApps.qml:37
88115msgid "Recent"
89−msgstr ""
90−
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
116+msgstr "Nylig"
95117
96118#: qml/Dash/Previews/PreviewActionCombo.qml:34
97119msgid "More..."
98−msgstr ""
120+msgstr "Mer …"
99121
100122#: qml/Dash/Previews/PreviewActionCombo.qml:34
101123msgid "Less..."
102−msgstr ""
124+msgstr "Mindre …"
103125
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
126+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105127msgid "Rate this"
106−msgstr ""
128+msgstr "Vurder dette"
107129
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
130+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109131msgid "Add a review"
110−msgstr ""
132+msgstr "Skriv en anmeldelse"
111133
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
134+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113135msgid "Send"
114−msgstr ""
136+msgstr "Send"
115137
116−#: qml/Greeter/Greeter.qml:151
138+#: qml/Greeter/Greeter.qml:157
117139msgid "Swipe to unlock"
118−msgstr ""
119−
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr ""
140+msgstr "Sveip for å låse opp"
132141
133142#: qml/Hud/HudParametrizedActionsPage.qml:132
134143msgid "Confirm"
@@ -152,17 +161,17 @@ msgstr "Snakker …"
152161
153162#: qml/Notifications/NotificationMenuItemFactory.qml:91
154163msgid "Show password"
155−msgstr ""
164+msgstr "Vis passord"
156165
157166#: qml/Notifications/NotificationMenuItemFactory.qml:103
158167msgid "Please enter SIM PIN"
159−msgstr ""
168+msgstr "Skriv inn PIN-koden til SIM-kortet"
160169
161170#: qml/Panel/SearchIndicator.qml:27
162171msgid "Search"
163172msgstr "Søk"
164173
165−#: qml/Shell.qml:348
174+#: qml/Shell.qml:334
166175#, qt-format
167176msgid "Please enter %1"
168−msgstr ""
177+msgstr "Skriv inn %1"
po/nl.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2014-01-15 16:42+0000\n"
1212"Last-Translator: Hannie Dumoleyn <Unknown>\n"
1313"Language-Team: Dutch <nl@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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr "Noodoproep"
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr "Recente zoekopdrachten"
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr "Hallo %1"
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr "Hallo"
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr "Beoordeel dit"
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr "Voeg recensie toe"
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr "Versturen"
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr "Noodoproep"
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr "Hallo %1"
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr "Hallo"
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr "Bevestigen"
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr "Zoeken"
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr "Voer %1 in"
po/pl.po+44−35
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
11−"PO-Revision-Date: 2014-01-10 11:38+0000\n"
12−"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
11+"PO-Revision-Date: 2014-05-27 15:20+0000\n"
12+"Last-Translator: GTriderXC <gtriderxc@yahoo.com>\n"
1313"Language-Team: Polish <pl@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-05-01 06:44+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -73,64 +73,73 @@ msgid ""
7373"You have now mastered the edge gestures and can start using the "
7474"phone<br><br>Tap on the screen to start"
7575msgstr ""
76+"Wydawanie poleceń krawędzi zostało opanowane. Urządzenie gotowe do "
77+"pracy.<br><br>Dotknij ekranu by rozpocząć"
78+
79+#: qml/Components/Lockscreen.qml:214
80+msgid "Emergency Call"
81+msgstr "Telefon ratunkowy"
82+
83+#: qml/Components/Lockscreen.qml:231
84+msgid "OK"
85+msgstr ""
7686
7787#: qml/Components/PageHeader.qml:365
7888msgid "Recent searches"
7989msgstr "Ostatnie wyszukiwania"
8090
91+#: qml/Components/PassphraseLockscreen.qml:60
92+#, qt-format
93+msgid "Hello %1"
94+msgstr "Witaj %1"
95+
96+#: qml/Components/PassphraseLockscreen.qml:60
97+msgid "Hello"
98+msgstr "Witaj"
99+
100+#: qml/Components/PinLockscreen.qml:198
101+msgid "CANCEL"
102+msgstr ""
103+
104+#: qml/Components/PinLockscreen.qml:216
105+msgid "DONE"
106+msgstr ""
107+
81108#: qml/Components/SeeMore.qml:35
82109msgid "See more"
83−msgstr ""
110+msgstr "Zobacz więcej"
84111
85112#: qml/Components/SeeMore.qml:58
86113msgid "See less"
87−msgstr ""
114+msgstr "Zobacz mniej"
88115
89116#: qml/Dash/DashApps.qml:37
90117msgid "Recent"
91−msgstr ""
92−
93−#: qml/Dash/PreviewListView.qml:52
94−#, qt-format
95−msgid "%1 Preview"
96−msgstr ""
118+msgstr "Ostatnio używane"
97119
98120#: qml/Dash/Previews/PreviewActionCombo.qml:34
99121msgid "More..."
100−msgstr ""
122+msgstr "Więcej..."
101123
102124#: qml/Dash/Previews/PreviewActionCombo.qml:34
103125msgid "Less..."
104−msgstr ""
126+msgstr "Mniej..."
105127
106−#: qml/Dash/Previews/PreviewRatingInput.qml:81
128+#: qml/Dash/Previews/PreviewRatingInput.qml:82
107129msgid "Rate this"
108130msgstr "Oceń to"
109131
110−#: qml/Dash/Previews/PreviewRatingInput.qml:126
132+#: qml/Dash/Previews/PreviewRatingInput.qml:128
111133msgid "Add a review"
112134msgstr "Dodaj recenzję"
113135
114−#: qml/Dash/Previews/PreviewRatingInput.qml:166
136+#: qml/Dash/Previews/PreviewRatingInput.qml:168
115137msgid "Send"
116138msgstr "Wyślij"
117139
118−#: qml/Greeter/Greeter.qml:151
140+#: qml/Greeter/Greeter.qml:157
119141msgid "Swipe to unlock"
120−msgstr ""
121−
122−#: qml/Greeter/Lockscreen.qml:149
123−msgid "Emergency Call"
124−msgstr "Telefon ratunkowy"
125−
126−#: qml/Greeter/PassphraseLockscreen.qml:59
127−#, qt-format
128−msgid "Hello %1"
129−msgstr "Witaj %1"
130−
131−#: qml/Greeter/PassphraseLockscreen.qml:59
132−msgid "Hello"
133−msgstr "Witaj"
142+msgstr "Przeciągnij aby odblokować"
134143
135144#: qml/Hud/HudParametrizedActionsPage.qml:132
136145msgid "Confirm"
@@ -158,13 +167,13 @@ msgstr "Wyświetl hasło"
158167
159168#: qml/Notifications/NotificationMenuItemFactory.qml:103
160169msgid "Please enter SIM PIN"
161−msgstr ""
170+msgstr "Wprowadź kod PIN karty SIM"
162171
163172#: qml/Panel/SearchIndicator.qml:27
164173msgid "Search"
165174msgstr "Szukaj"
166175
167−#: qml/Shell.qml:348
176+#: qml/Shell.qml:334
168177#, qt-format
169178msgid "Please enter %1"
170179msgstr "Wprowadź %1"
po/pt.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2014-01-14 19:18+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Portuguese <pt@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-05-01 06:44+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr ""
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr ""
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr ""
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr ""
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr ""
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr ""
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr ""
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr ""
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr ""
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr ""
po/pt_BR.po+44−35
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
11−"PO-Revision-Date: 2014-01-18 23:24+0000\n"
12−"Last-Translator: Fábio Nogueira <deb-user-ba@ubuntu.com>\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
11+"PO-Revision-Date: 2014-05-15 14:31+0000\n"
12+"Last-Translator: Rafael Neri <Unknown>\n"
1313"Language-Team: Brazilian Portuguese <pt_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-05-01 06:44+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -73,64 +73,73 @@ msgid ""
7373"You have now mastered the edge gestures and can start using the "
7474"phone<br><br>Tap on the screen to start"
7575msgstr ""
76+"Agora você já domina os gestos das bordas e pode começar a usar o "
77+"telefone<br><br>Toque na tela para iniciar"
78+
79+#: qml/Components/Lockscreen.qml:214
80+msgid "Emergency Call"
81+msgstr "Chamada de emergência"
82+
83+#: qml/Components/Lockscreen.qml:231
84+msgid "OK"
85+msgstr ""
7686
7787#: qml/Components/PageHeader.qml:365
7888msgid "Recent searches"
7989msgstr "Pesquisas recentes"
8090
91+#: qml/Components/PassphraseLockscreen.qml:60
92+#, qt-format
93+msgid "Hello %1"
94+msgstr "Olá %1"
95+
96+#: qml/Components/PassphraseLockscreen.qml:60
97+msgid "Hello"
98+msgstr "Olá"
99+
100+#: qml/Components/PinLockscreen.qml:198
101+msgid "CANCEL"
102+msgstr ""
103+
104+#: qml/Components/PinLockscreen.qml:216
105+msgid "DONE"
106+msgstr ""
107+
81108#: qml/Components/SeeMore.qml:35
82109msgid "See more"
83−msgstr ""
110+msgstr "Ver mais"
84111
85112#: qml/Components/SeeMore.qml:58
86113msgid "See less"
87−msgstr ""
114+msgstr "Ver menos"
88115
89116#: qml/Dash/DashApps.qml:37
90117msgid "Recent"
91−msgstr ""
92−
93−#: qml/Dash/PreviewListView.qml:52
94−#, qt-format
95−msgid "%1 Preview"
96−msgstr ""
118+msgstr "Recentes"
97119
98120#: qml/Dash/Previews/PreviewActionCombo.qml:34
99121msgid "More..."
100−msgstr ""
122+msgstr "Mais..."
101123
102124#: qml/Dash/Previews/PreviewActionCombo.qml:34
103125msgid "Less..."
104−msgstr ""
126+msgstr "Menos..."
105127
106−#: qml/Dash/Previews/PreviewRatingInput.qml:81
128+#: qml/Dash/Previews/PreviewRatingInput.qml:82
107129msgid "Rate this"
108130msgstr "Avaliar isto"
109131
110−#: qml/Dash/Previews/PreviewRatingInput.qml:126
132+#: qml/Dash/Previews/PreviewRatingInput.qml:128
111133msgid "Add a review"
112134msgstr "Adicionar uma análise"
113135
114−#: qml/Dash/Previews/PreviewRatingInput.qml:166
136+#: qml/Dash/Previews/PreviewRatingInput.qml:168
115137msgid "Send"
116138msgstr "Enviar"
117139
118−#: qml/Greeter/Greeter.qml:151
140+#: qml/Greeter/Greeter.qml:157
119141msgid "Swipe to unlock"
120−msgstr ""
121−
122−#: qml/Greeter/Lockscreen.qml:149
123−msgid "Emergency Call"
124−msgstr "Chamada de emergência"
125−
126−#: qml/Greeter/PassphraseLockscreen.qml:59
127−#, qt-format
128−msgid "Hello %1"
129−msgstr "Olá %1"
130−
131−#: qml/Greeter/PassphraseLockscreen.qml:59
132−msgid "Hello"
133−msgstr "Olá"
142+msgstr "Deslizar para desbloquear"
134143
135144#: qml/Hud/HudParametrizedActionsPage.qml:132
136145msgid "Confirm"
@@ -158,13 +167,13 @@ msgstr "Exibir senha"
158167
159168#: qml/Notifications/NotificationMenuItemFactory.qml:103
160169msgid "Please enter SIM PIN"
161−msgstr ""
170+msgstr "Por favor, digite o PIN do cartão SIM"
162171
163172#: qml/Panel/SearchIndicator.qml:27
164173msgid "Search"
165174msgstr "Pesquisar"
166175
167−#: qml/Shell.qml:348
176+#: qml/Shell.qml:334
168177#, qt-format
169178msgid "Please enter %1"
170179msgstr "Por favor, digite %1"
po/ro.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2013-06-27 07:53+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Romanian <ro@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-05-01 06:44+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr ""
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr "Căutări recente"
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr ""
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr ""
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr ""
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr ""
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr ""
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr "Confirmați"
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr "Căutare"
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr ""
po/ru.po+35−28
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
11−"PO-Revision-Date: 2014-04-03 13:07+0000\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
11+"PO-Revision-Date: 2014-05-15 12:57+0000\n"
1212"Last-Translator: Zonov Roman <Unknown>\n"
1313"Language-Team: Russian <ru@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-05-01 06:44+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -79,10 +79,35 @@ msgstr ""
7979"Вы научились пользоваться Ubuntu и можете начать использовать свой "
8080"телефон<br><br>Нажмите на экран"
8181
82+#: qml/Components/Lockscreen.qml:214
83+msgid "Emergency Call"
84+msgstr "Экстренный вызов"
85+
86+#: qml/Components/Lockscreen.qml:231
87+msgid "OK"
88+msgstr ""
89+
8290#: qml/Components/PageHeader.qml:365
8391msgid "Recent searches"
8492msgstr "Последние поисковые запросы"
8593
94+#: qml/Components/PassphraseLockscreen.qml:60
95+#, qt-format
96+msgid "Hello %1"
97+msgstr "Привет, %1"
98+
99+#: qml/Components/PassphraseLockscreen.qml:60
100+msgid "Hello"
101+msgstr "Привет"
102+
103+#: qml/Components/PinLockscreen.qml:198
104+msgid "CANCEL"
105+msgstr ""
106+
107+#: qml/Components/PinLockscreen.qml:216
108+msgid "DONE"
109+msgstr ""
110+
86111#: qml/Components/SeeMore.qml:35
87112msgid "See more"
88113msgstr "Подробнее"
@@ -95,11 +120,6 @@ msgstr "Вкратце"
95120msgid "Recent"
96121msgstr "Недавние"
97122
98−#: qml/Dash/PreviewListView.qml:52
99−#, qt-format
100−msgid "%1 Preview"
101−msgstr "Просмотр %1"
102−
103123#: qml/Dash/Previews/PreviewActionCombo.qml:34
104124msgid "More..."
105125msgstr "Ещё..."
@@ -108,34 +128,21 @@ msgstr "Ещё..."
108128msgid "Less..."
109129msgstr "Меньше..."
110130
111−#: qml/Dash/Previews/PreviewRatingInput.qml:81
131+#: qml/Dash/Previews/PreviewRatingInput.qml:82
112132msgid "Rate this"
113133msgstr "Оцените это"
114134
115−#: qml/Dash/Previews/PreviewRatingInput.qml:126
135+#: qml/Dash/Previews/PreviewRatingInput.qml:128
116136msgid "Add a review"
117137msgstr "Добавьте отзыв"
118138
119−#: qml/Dash/Previews/PreviewRatingInput.qml:166
139+#: qml/Dash/Previews/PreviewRatingInput.qml:168
120140msgid "Send"
121141msgstr "Отправить"
122142
123−#: qml/Greeter/Greeter.qml:151
143+#: qml/Greeter/Greeter.qml:157
124144msgid "Swipe to unlock"
125−msgstr ""
126−
127−#: qml/Greeter/Lockscreen.qml:149
128−msgid "Emergency Call"
129−msgstr "Экстренный вызов"
130−
131−#: qml/Greeter/PassphraseLockscreen.qml:59
132−#, qt-format
133−msgid "Hello %1"
134−msgstr "Привет, %1"
135−
136−#: qml/Greeter/PassphraseLockscreen.qml:59
137−msgid "Hello"
138−msgstr "Привет"
145+msgstr "Смахните, чтобы разблокировать"
139146
140147#: qml/Hud/HudParametrizedActionsPage.qml:132
141148msgid "Confirm"
@@ -169,7 +176,7 @@ msgstr "Введите PIN код"
169176msgid "Search"
170177msgstr "Поиск"
171178
172−#: qml/Shell.qml:348
179+#: qml/Shell.qml:334
173180#, qt-format
174181msgid "Please enter %1"
175182msgstr "Пожалуйста, введите %1"
po/shn.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2013-10-07 11:46+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Shan <shn@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-05-01 06:44+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr ""
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr ""
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr ""
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr ""
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr ""
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr ""
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr ""
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr ""
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr ""
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr ""
po/si.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2013-06-26 22:36+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Sinhalese <si@li.org>\n"
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-05-01 06:44+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr ""
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr ""
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr ""
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr ""
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr ""
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr ""
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr ""
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr ""
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr ""
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr ""
po/sl.po+36−29
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
11−"PO-Revision-Date: 2014-02-21 16:38+0000\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
11+"PO-Revision-Date: 2014-05-22 14:07+0000\n"
1212"Last-Translator: Damir Jerovšek <Unknown>\n"
1313"Language-Team: Slovenian <sl@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-05-01 06:44+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -76,10 +76,35 @@ msgstr ""
7676"Sedaj, ko ste osvojili poteze robov, lahko začnete uporabljati "
7777"telefon<br><br>Tapnite na zaslon za začetek"
7878
79+#: qml/Components/Lockscreen.qml:214
80+msgid "Emergency Call"
81+msgstr "Klic v sili"
82+
83+#: qml/Components/Lockscreen.qml:231
84+msgid "OK"
85+msgstr ""
86+
7987#: qml/Components/PageHeader.qml:365
8088msgid "Recent searches"
8189msgstr "Nedavna iskanja"
8290
91+#: qml/Components/PassphraseLockscreen.qml:60
92+#, qt-format
93+msgid "Hello %1"
94+msgstr "Pozdravljeni, %1"
95+
96+#: qml/Components/PassphraseLockscreen.qml:60
97+msgid "Hello"
98+msgstr "Pozdravljeni"
99+
100+#: qml/Components/PinLockscreen.qml:198
101+msgid "CANCEL"
102+msgstr ""
103+
104+#: qml/Components/PinLockscreen.qml:216
105+msgid "DONE"
106+msgstr ""
107+
83108#: qml/Components/SeeMore.qml:35
84109msgid "See more"
85110msgstr "Pokaži več"
@@ -90,12 +115,7 @@ msgstr "Pokaži manj"
90115
91116#: qml/Dash/DashApps.qml:37
92117msgid "Recent"
93−msgstr ""
94−
95−#: qml/Dash/PreviewListView.qml:52
96−#, qt-format
97−msgid "%1 Preview"
98−msgstr ""
118+msgstr "Nedavno"
99119
100120#: qml/Dash/Previews/PreviewActionCombo.qml:34
101121msgid "More..."
@@ -105,34 +125,21 @@ msgstr "Več ..."
105125msgid "Less..."
106126msgstr "Manj ..."
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:81
128+#: qml/Dash/Previews/PreviewRatingInput.qml:82
109129msgid "Rate this"
110130msgstr "Ocenite"
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:126
132+#: qml/Dash/Previews/PreviewRatingInput.qml:128
113133msgid "Add a review"
114134msgstr "Dodaj oceno"
115135
116−#: qml/Dash/Previews/PreviewRatingInput.qml:166
136+#: qml/Dash/Previews/PreviewRatingInput.qml:168
117137msgid "Send"
118138msgstr "Pošlji"
119139
120−#: qml/Greeter/Greeter.qml:151
140+#: qml/Greeter/Greeter.qml:157
121141msgid "Swipe to unlock"
122−msgstr ""
123−
124−#: qml/Greeter/Lockscreen.qml:149
125−msgid "Emergency Call"
126−msgstr "Klic v sili"
127−
128−#: qml/Greeter/PassphraseLockscreen.qml:59
129−#, qt-format
130−msgid "Hello %1"
131−msgstr "Pozdravljeni, %1"
132−
133−#: qml/Greeter/PassphraseLockscreen.qml:59
134−msgid "Hello"
135−msgstr "Pozdravljeni"
142+msgstr "Podrsajte za odklenitev"
136143
137144#: qml/Hud/HudParametrizedActionsPage.qml:132
138145msgid "Confirm"
@@ -166,7 +173,7 @@ msgstr "Vnesite PIN kartice SIM"
166173msgid "Search"
167174msgstr "Iskanje"
168175
169−#: qml/Shell.qml:348
176+#: qml/Shell.qml:334
170177#, qt-format
171178msgid "Please enter %1"
172179msgstr "Vnesite %1"
po/sq.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2014-01-15 13:51+0000\n"
1212"Last-Translator: Besmir Zanaj <besmirzanaj@gmail.com>\n"
1313"Language-Team: Albanian <sq@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-05-01 06:43+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:50+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -73,10 +73,35 @@ msgid ""
7373"phone<br><br>Tap on the screen to start"
7474msgstr ""
7575
76+#: qml/Components/Lockscreen.qml:214
77+msgid "Emergency Call"
78+msgstr ""
79+
80+#: qml/Components/Lockscreen.qml:231
81+msgid "OK"
82+msgstr ""
83+
7684#: qml/Components/PageHeader.qml:365
7785msgid "Recent searches"
7886msgstr ""
7987
88+#: qml/Components/PassphraseLockscreen.qml:60
89+#, qt-format
90+msgid "Hello %1"
91+msgstr ""
92+
93+#: qml/Components/PassphraseLockscreen.qml:60
94+msgid "Hello"
95+msgstr ""
96+
97+#: qml/Components/PinLockscreen.qml:198
98+msgid "CANCEL"
99+msgstr ""
100+
101+#: qml/Components/PinLockscreen.qml:216
102+msgid "DONE"
103+msgstr ""
104+
80105#: qml/Components/SeeMore.qml:35
81106msgid "See more"
82107msgstr ""
@@ -89,11 +114,6 @@ msgstr ""
89114msgid "Recent"
90115msgstr ""
91116
92−#: qml/Dash/PreviewListView.qml:52
93−#, qt-format
94−msgid "%1 Preview"
95−msgstr ""
96−
97117#: qml/Dash/Previews/PreviewActionCombo.qml:34
98118msgid "More..."
99119msgstr ""
@@ -102,35 +122,22 @@ msgstr ""
102122msgid "Less..."
103123msgstr ""
104124
105−#: qml/Dash/Previews/PreviewRatingInput.qml:81
125+#: qml/Dash/Previews/PreviewRatingInput.qml:82
106126msgid "Rate this"
107127msgstr "Vlerësoje këtë"
108128
109−#: qml/Dash/Previews/PreviewRatingInput.qml:126
129+#: qml/Dash/Previews/PreviewRatingInput.qml:128
110130msgid "Add a review"
111131msgstr "Shto një rishikim"
112132
113−#: qml/Dash/Previews/PreviewRatingInput.qml:166
133+#: qml/Dash/Previews/PreviewRatingInput.qml:168
114134msgid "Send"
115135msgstr ""
116136
117−#: qml/Greeter/Greeter.qml:151
137+#: qml/Greeter/Greeter.qml:157
118138msgid "Swipe to unlock"
119139msgstr ""
120140
121−#: qml/Greeter/Lockscreen.qml:149
122−msgid "Emergency Call"
123−msgstr ""
124−
125−#: qml/Greeter/PassphraseLockscreen.qml:59
126−#, qt-format
127−msgid "Hello %1"
128−msgstr ""
129−
130−#: qml/Greeter/PassphraseLockscreen.qml:59
131−msgid "Hello"
132−msgstr ""
133−
134141#: qml/Hud/HudParametrizedActionsPage.qml:132
135142msgid "Confirm"
136143msgstr ""
@@ -163,7 +170,7 @@ msgstr ""
163170msgid "Search"
164171msgstr ""
165172
166−#: qml/Shell.qml:348
173+#: qml/Shell.qml:334
167174#, qt-format
168175msgid "Please enter %1"
169176msgstr ""
po/sr.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2013-06-27 09:19+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Serbian <sr@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-05-01 06:44+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr ""
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr "Скорашње претраге"
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr ""
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr ""
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr ""
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr ""
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr ""
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr "Потврди"
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr "Претрага"
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr ""
po/sv.po+49−42
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
11−"PO-Revision-Date: 2013-06-26 22:36+0000\n"
12−"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
11+"PO-Revision-Date: 2014-06-07 19:14+0000\n"
12+"Last-Translator: mikasjoman <Unknown>\n"
1313"Language-Team: Swedish <sv@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-05-01 06:44+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -32,15 +32,15 @@ msgstr ""
3232
3333#: qml/Components/EdgeDemo.qml:113
3434msgid "Right edge"
35−msgstr ""
35+msgstr "Högerkant"
3636
3737#: qml/Components/EdgeDemo.qml:114
3838msgid "Try swiping from the right edge to unlock the phone"
39−msgstr ""
39+msgstr "Dra med fingret från höger för att låsa upp telefonen"
4040
4141#: qml/Components/EdgeDemo.qml:145
4242msgid "Top edge"
43−msgstr ""
43+msgstr "Överkant"
4444
4545#: qml/Components/EdgeDemo.qml:146
4646msgid "Try swiping from the top edge to access the indicators"
@@ -48,7 +48,7 @@ msgstr ""
4848
4949#: qml/Components/EdgeDemo.qml:171
5050msgid "Close"
51−msgstr ""
51+msgstr "Stäng"
5252
5353#: qml/Components/EdgeDemo.qml:172
5454msgid "Swipe up again to close the settings screen"
@@ -56,7 +56,7 @@ msgstr ""
5656
5757#: qml/Components/EdgeDemo.qml:199
5858msgid "Left edge"
59−msgstr ""
59+msgstr "Vänsterkant"
6060
6161#: qml/Components/EdgeDemo.qml:200
6262msgid "Swipe from the left to reveal the launcher for quick access to apps"
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr "Nödsamtal"
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr ""
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr ""
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr ""
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,58 +121,45 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110−msgstr ""
130+msgstr "Lägg till en recension"
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr ""
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr ""
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135−msgstr ""
142+msgstr "Bekräfta"
136143
137144#: qml/Hud/Hud.qml:61 qml/Hud/Hud.qml:99 qml/Hud/Hud.qml:372
138145msgid "Type or say a command"
139−msgstr ""
146+msgstr "Skriv eller tala in ett kommando"
140147
141148#: qml/Hud/Hud.qml:84
142149msgid "Loading. Please Wait..."
143−msgstr ""
150+msgstr "Laddar. Var god vänta..."
144151
145152#: qml/Hud/Hud.qml:89
146153msgid "Speak Now..."
147−msgstr ""
154+msgstr "Tala nu..."
148155
149156#: qml/Hud/Hud.qml:94
150157msgid "Speaking..."
151−msgstr ""
158+msgstr "Talar..."
152159
153160#: qml/Notifications/NotificationMenuItemFactory.qml:91
154161msgid "Show password"
155−msgstr ""
162+msgstr "Visa lösenord"
156163
157164#: qml/Notifications/NotificationMenuItemFactory.qml:103
158165msgid "Please enter SIM PIN"
@@ -160,9 +167,9 @@ msgstr ""
160167
161168#: qml/Panel/SearchIndicator.qml:27
162169msgid "Search"
163−msgstr ""
170+msgstr "Sök"
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168−msgstr ""
175+msgstr "Vänligen fyll i %1"
po/sw.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2014-01-14 19:28+0000\n"
1212"Last-Translator: Damas Mlabwa <Unknown>\n"
1313"Language-Team: Swahili <sw@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-05-01 06:44+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr ""
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr ""
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr ""
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr ""
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr ""
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr "Tuma"
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr ""
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr "Thibitisha"
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr "Tafuta"
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr ""
po/ta.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2013-10-24 11:36+0000\n"
1212"Last-Translator: Arun Kumar - அருண் குமார் <thangam.arunx@gmail.com>\n"
1313"Language-Team: Ubuntu Tamil Team/Free Tamil Computing/Thamizha\n"
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-05-01 06:44+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919"Language: ta\n"
2020
2121#: plugins/Unity/Launcher/launcheritem.cpp:43
@@ -75,10 +75,35 @@ msgid ""
7575"phone<br><br>Tap on the screen to start"
7676msgstr ""
7777
78+#: qml/Components/Lockscreen.qml:214
79+msgid "Emergency Call"
80+msgstr "அவசர அழைப்பு"
81+
82+#: qml/Components/Lockscreen.qml:231
83+msgid "OK"
84+msgstr ""
85+
7886#: qml/Components/PageHeader.qml:365
7987msgid "Recent searches"
8088msgstr "கடையாக தேடப்பட்டவைகள்"
8189
90+#: qml/Components/PassphraseLockscreen.qml:60
91+#, qt-format
92+msgid "Hello %1"
93+msgstr "வணக்கம் %1"
94+
95+#: qml/Components/PassphraseLockscreen.qml:60
96+msgid "Hello"
97+msgstr "வணக்கம்"
98+
99+#: qml/Components/PinLockscreen.qml:198
100+msgid "CANCEL"
101+msgstr ""
102+
103+#: qml/Components/PinLockscreen.qml:216
104+msgid "DONE"
105+msgstr ""
106+
82107#: qml/Components/SeeMore.qml:35
83108msgid "See more"
84109msgstr ""
@@ -91,11 +116,6 @@ msgstr ""
91116msgid "Recent"
92117msgstr ""
93118
94−#: qml/Dash/PreviewListView.qml:52
95−#, qt-format
96−msgid "%1 Preview"
97−msgstr ""
98−
99119#: qml/Dash/Previews/PreviewActionCombo.qml:34
100120msgid "More..."
101121msgstr ""
@@ -104,35 +124,22 @@ msgstr ""
104124msgid "Less..."
105125msgstr ""
106126
107−#: qml/Dash/Previews/PreviewRatingInput.qml:81
127+#: qml/Dash/Previews/PreviewRatingInput.qml:82
108128msgid "Rate this"
109129msgstr "இதை மதிப்பிடு"
110130
111−#: qml/Dash/Previews/PreviewRatingInput.qml:126
131+#: qml/Dash/Previews/PreviewRatingInput.qml:128
112132msgid "Add a review"
113133msgstr "ஒரு பரிசீலனையை சேர்"
114134
115−#: qml/Dash/Previews/PreviewRatingInput.qml:166
135+#: qml/Dash/Previews/PreviewRatingInput.qml:168
116136msgid "Send"
117137msgstr "அனுப்பு"
118138
119−#: qml/Greeter/Greeter.qml:151
139+#: qml/Greeter/Greeter.qml:157
120140msgid "Swipe to unlock"
121141msgstr ""
122142
123−#: qml/Greeter/Lockscreen.qml:149
124−msgid "Emergency Call"
125−msgstr "அவசர அழைப்பு"
126−
127−#: qml/Greeter/PassphraseLockscreen.qml:59
128−#, qt-format
129−msgid "Hello %1"
130−msgstr "வணக்கம் %1"
131−
132−#: qml/Greeter/PassphraseLockscreen.qml:59
133−msgid "Hello"
134−msgstr "வணக்கம்"
135−
136143#: qml/Hud/HudParametrizedActionsPage.qml:132
137144msgid "Confirm"
138145msgstr "உறுதிப்படுத்து"
@@ -165,7 +172,7 @@ msgstr ""
165172msgid "Search"
166173msgstr "தெடு"
167174
168−#: qml/Shell.qml:348
175+#: qml/Shell.qml:334
169176#, qt-format
170177msgid "Please enter %1"
171178msgstr "தயவுச்செய்து %1 உள்ளிடு"
po/te.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2013-06-27 09:57+0000\n"
1212"Last-Translator: Michał Sawicz <michal.sawicz@canonical.com>\n"
1313"Language-Team: Telugu <te@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-05-01 06:44+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr ""
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr ""
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr ""
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr ""
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr ""
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr ""
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr ""
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr ""
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr ""
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr ""
po/tr.po+37−30
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
11−"PO-Revision-Date: 2014-03-05 08:54+0000\n"
12−"Last-Translator: Muhammed Yüce <muhammedyuceee@gmail.com>\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
11+"PO-Revision-Date: 2014-05-19 12:52+0000\n"
12+"Last-Translator: Volkan Gezer <Unknown>\n"
1313"Language-Team: Turkish <tr@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-05-01 06:44+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -75,10 +75,35 @@ msgstr ""
7575"Kenar haraketlerini öğrendiniz ve telefonu kullanmaya "
7676"başlayabilirsiniz<br><br>Başlamak için ekrana dokunun"
7777
78+#: qml/Components/Lockscreen.qml:214
79+msgid "Emergency Call"
80+msgstr "Acil Arama"
81+
82+#: qml/Components/Lockscreen.qml:231
83+msgid "OK"
84+msgstr ""
85+
7886#: qml/Components/PageHeader.qml:365
7987msgid "Recent searches"
8088msgstr "Son aramalar"
8189
90+#: qml/Components/PassphraseLockscreen.qml:60
91+#, qt-format
92+msgid "Hello %1"
93+msgstr "Merhaba %1"
94+
95+#: qml/Components/PassphraseLockscreen.qml:60
96+msgid "Hello"
97+msgstr "Merhaba"
98+
99+#: qml/Components/PinLockscreen.qml:198
100+msgid "CANCEL"
101+msgstr ""
102+
103+#: qml/Components/PinLockscreen.qml:216
104+msgid "DONE"
105+msgstr ""
106+
82107#: qml/Components/SeeMore.qml:35
83108msgid "See more"
84109msgstr "Daha fazlası"
@@ -89,12 +114,7 @@ msgstr "Daha azını gör"
89114
90115#: qml/Dash/DashApps.qml:37
91116msgid "Recent"
92−msgstr ""
93−
94−#: qml/Dash/PreviewListView.qml:52
95−#, qt-format
96−msgid "%1 Preview"
97−msgstr ""
117+msgstr "En son"
98118
99119#: qml/Dash/Previews/PreviewActionCombo.qml:34
100120msgid "More..."
@@ -104,34 +124,21 @@ msgstr "Daha fazlası..."
104124msgid "Less..."
105125msgstr "Daha az.."
106126
107−#: qml/Dash/Previews/PreviewRatingInput.qml:81
127+#: qml/Dash/Previews/PreviewRatingInput.qml:82
108128msgid "Rate this"
109129msgstr "Oyla"
110130
111−#: qml/Dash/Previews/PreviewRatingInput.qml:126
131+#: qml/Dash/Previews/PreviewRatingInput.qml:128
112132msgid "Add a review"
113133msgstr "Bir inceleme ekle"
114134
115−#: qml/Dash/Previews/PreviewRatingInput.qml:166
135+#: qml/Dash/Previews/PreviewRatingInput.qml:168
116136msgid "Send"
117137msgstr "Gönder"
118138
119−#: qml/Greeter/Greeter.qml:151
139+#: qml/Greeter/Greeter.qml:157
120140msgid "Swipe to unlock"
121−msgstr ""
122−
123−#: qml/Greeter/Lockscreen.qml:149
124−msgid "Emergency Call"
125−msgstr "Acil Arama"
126−
127−#: qml/Greeter/PassphraseLockscreen.qml:59
128−#, qt-format
129−msgid "Hello %1"
130−msgstr "Merhaba %1"
131−
132−#: qml/Greeter/PassphraseLockscreen.qml:59
133−msgid "Hello"
134−msgstr "Merhaba"
141+msgstr "Açmak için kaydırın"
135142
136143#: qml/Hud/HudParametrizedActionsPage.qml:132
137144msgid "Confirm"
@@ -165,7 +172,7 @@ msgstr "Lütfen SIM PIN'inizi girin"
165172msgid "Search"
166173msgstr "Ara"
167174
168−#: qml/Shell.qml:348
175+#: qml/Shell.qml:334
169176#, qt-format
170177msgid "Please enter %1"
171178msgstr "Lütfen %1 girin"
po/ug.po+40−33
@@ -1,21 +1,21 @@
11# Uyghur translation for unity
22# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
33# This file is distributed under the same license as the unity package.
4−# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
4+# Gheyret Kenji <gheyret@gmail.com>, 2013.
55#
66msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
11−"PO-Revision-Date: 2014-04-22 05:46+0000\n"
12−"Last-Translator: abdurahman <Unknown>\n"
13−"Language-Team: Uyghur <ug@li.org>\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
11+"PO-Revision-Date: 2014-06-13 21:07+0000\n"
12+"Last-Translator: Gheyret T.Kenji <Unknown>\n"
13+"Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\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-05-01 06:44+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -71,13 +71,38 @@ msgid ""
7171"You have now mastered the edge gestures and can start using the "
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
74−"ئېكراننى چېكىپ باشلاڭ<br><br>سىز ھازىر گىرۋەك بارماق ئىشارەتلىرىنى ئىگەللەپ "
74+"ئېكراننى چېكىپ باشلاڭ<br><br>سىز ھازىر گىرۋەك بارماق ئىشارەتلىرىنى ئىگىلەپ "
7575"بولدىڭىز،ئەمدى تېلېفوننى ئىشلىتىشنى باشلىسىڭىز بولىدۇ"
7676
77+#: qml/Components/Lockscreen.qml:214
78+msgid "Emergency Call"
79+msgstr "جىددىي تېلېفون"
80+
81+#: qml/Components/Lockscreen.qml:231
82+msgid "OK"
83+msgstr "تامام"
84+
7785#: qml/Components/PageHeader.qml:365
7886msgid "Recent searches"
7987msgstr "يېقىنقى ئىزدەشلەر"
8088
89+#: qml/Components/PassphraseLockscreen.qml:60
90+#, qt-format
91+msgid "Hello %1"
92+msgstr "سالام %1"
93+
94+#: qml/Components/PassphraseLockscreen.qml:60
95+msgid "Hello"
96+msgstr "ئەسسالامۇئەلەيكۇم"
97+
98+#: qml/Components/PinLockscreen.qml:198
99+msgid "CANCEL"
100+msgstr "ۋاز كەچ"
101+
102+#: qml/Components/PinLockscreen.qml:216
103+msgid "DONE"
104+msgstr "تامام"
105+
81106#: qml/Components/SeeMore.qml:35
82107msgid "See more"
83108msgstr "جىقراق كۆرۈش"
@@ -90,11 +115,6 @@ msgstr "ئازراق كۆرۈش"
90115msgid "Recent"
91116msgstr "يېقىنقى"
92117
93−#: qml/Dash/PreviewListView.qml:52
94−#, qt-format
95−msgid "%1 Preview"
96−msgstr "%1 ئالدىن كۆرۈپ بىقىش"
97−
98118#: qml/Dash/Previews/PreviewActionCombo.qml:34
99119msgid "More..."
100120msgstr "تېخىمۇ كۆپ…"
@@ -103,34 +123,21 @@ msgstr "تېخىمۇ كۆپ…"
103123msgid "Less..."
104124msgstr "ئازراق..."
105125
106−#: qml/Dash/Previews/PreviewRatingInput.qml:81
126+#: qml/Dash/Previews/PreviewRatingInput.qml:82
107127msgid "Rate this"
108128msgstr "بۇنى باھالاڭ"
109129
110−#: qml/Dash/Previews/PreviewRatingInput.qml:126
130+#: qml/Dash/Previews/PreviewRatingInput.qml:128
111131msgid "Add a review"
112132msgstr "باھا قوشۇش"
113133
114−#: qml/Dash/Previews/PreviewRatingInput.qml:166
134+#: qml/Dash/Previews/PreviewRatingInput.qml:168
115135msgid "Send"
116136msgstr "ئەۋەت"
117137
118−#: qml/Greeter/Greeter.qml:151
138+#: qml/Greeter/Greeter.qml:157
119139msgid "Swipe to unlock"
120−msgstr ""
121−
122−#: qml/Greeter/Lockscreen.qml:149
123−msgid "Emergency Call"
124−msgstr "جىددىي تېلېفون"
125−
126−#: qml/Greeter/PassphraseLockscreen.qml:59
127−#, qt-format
128−msgid "Hello %1"
129−msgstr "سالام %1"
130−
131−#: qml/Greeter/PassphraseLockscreen.qml:59
132−msgid "Hello"
133−msgstr "سالام"
140+msgstr "سىيرىسىڭىز قۇلۇپسىزلىنىدۇ"
134141
135142#: qml/Hud/HudParametrizedActionsPage.qml:132
136143msgid "Confirm"
@@ -158,13 +165,13 @@ msgstr "ئىم كۆرسەت"
158165
159166#: qml/Notifications/NotificationMenuItemFactory.qml:103
160167msgid "Please enter SIM PIN"
161−msgstr "پارولىنى كىرگۈزۈڭPINكارتىڭىزنىڭ SIM"
168+msgstr "سىم(SIM) كارتىڭىزنىڭ PIN نومۇرىنى كىرگۈزۈڭ"
162169
163170#: qml/Panel/SearchIndicator.qml:27
164171msgid "Search"
165172msgstr "ئىزدە"
166173
167−#: qml/Shell.qml:348
174+#: qml/Shell.qml:334
168175#, qt-format
169176msgid "Please enter %1"
170177msgstr "%1 نى كىرگۈزۈڭ"
po/uk.po+44−35
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
11−"PO-Revision-Date: 2013-11-23 12:37+0000\n"
12−"Last-Translator: Ignat Kizenko <Unknown>\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
11+"PO-Revision-Date: 2014-06-08 19:09+0000\n"
12+"Last-Translator: Yuri Chornoivan <yurchor@gmail.com>\n"
1313"Language-Team: Ukrainian <uk@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-05-01 06:44+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -74,64 +74,73 @@ msgid ""
7474"You have now mastered the edge gestures and can start using the "
7575"phone<br><br>Tap on the screen to start"
7676msgstr ""
77+"Вами налаштовано дії у відповідь на дотики на краях екрана. Тепер телефоном "
78+"можна користуватися.<br><br>Торкніться екрана, щоб розпочати."
79+
80+#: qml/Components/Lockscreen.qml:214
81+msgid "Emergency Call"
82+msgstr "Терміновий виклик"
83+
84+#: qml/Components/Lockscreen.qml:231
85+msgid "OK"
86+msgstr "Гаразд"
7787
7888#: qml/Components/PageHeader.qml:365
7989msgid "Recent searches"
8090msgstr "Нещодавні пошуки"
8191
92+#: qml/Components/PassphraseLockscreen.qml:60
93+#, qt-format
94+msgid "Hello %1"
95+msgstr "Привіт, %1"
96+
97+#: qml/Components/PassphraseLockscreen.qml:60
98+msgid "Hello"
99+msgstr "Привіт!"
100+
101+#: qml/Components/PinLockscreen.qml:198
102+msgid "CANCEL"
103+msgstr "Скасувати"
104+
105+#: qml/Components/PinLockscreen.qml:216
106+msgid "DONE"
107+msgstr "Виконано"
108+
82109#: qml/Components/SeeMore.qml:35
83110msgid "See more"
84−msgstr ""
111+msgstr "Докладніше"
85112
86113#: qml/Components/SeeMore.qml:58
87114msgid "See less"
88−msgstr ""
115+msgstr "Стисліше"
89116
90117#: qml/Dash/DashApps.qml:37
91118msgid "Recent"
92−msgstr ""
93−
94−#: qml/Dash/PreviewListView.qml:52
95−#, qt-format
96−msgid "%1 Preview"
97−msgstr ""
119+msgstr "Нещодавні"
98120
99121#: qml/Dash/Previews/PreviewActionCombo.qml:34
100122msgid "More..."
101−msgstr ""
123+msgstr "Більше…"
102124
103125#: qml/Dash/Previews/PreviewActionCombo.qml:34
104126msgid "Less..."
105−msgstr ""
127+msgstr "Менше..."
106128
107−#: qml/Dash/Previews/PreviewRatingInput.qml:81
129+#: qml/Dash/Previews/PreviewRatingInput.qml:82
108130msgid "Rate this"
109131msgstr "Оцінити"
110132
111−#: qml/Dash/Previews/PreviewRatingInput.qml:126
133+#: qml/Dash/Previews/PreviewRatingInput.qml:128
112134msgid "Add a review"
113135msgstr "Додати рецензію"
114136
115−#: qml/Dash/Previews/PreviewRatingInput.qml:166
137+#: qml/Dash/Previews/PreviewRatingInput.qml:168
116138msgid "Send"
117139msgstr "Надіслати"
118140
119−#: qml/Greeter/Greeter.qml:151
141+#: qml/Greeter/Greeter.qml:157
120142msgid "Swipe to unlock"
121−msgstr ""
122−
123−#: qml/Greeter/Lockscreen.qml:149
124−msgid "Emergency Call"
125−msgstr "Терміновий виклик"
126−
127−#: qml/Greeter/PassphraseLockscreen.qml:59
128−#, qt-format
129−msgid "Hello %1"
130−msgstr "Привіт, %1"
131−
132−#: qml/Greeter/PassphraseLockscreen.qml:59
133−msgid "Hello"
134−msgstr "Привіт!"
143+msgstr "Проведіть пальцем, щоб розблокувати"
135144
136145#: qml/Hud/HudParametrizedActionsPage.qml:132
137146msgid "Confirm"
@@ -159,13 +168,13 @@ msgstr "Показати пароль"
159168
160169#: qml/Notifications/NotificationMenuItemFactory.qml:103
161170msgid "Please enter SIM PIN"
162−msgstr ""
171+msgstr "Введіть PIN-код SIM-картки"
163172
164173#: qml/Panel/SearchIndicator.qml:27
165174msgid "Search"
166175msgstr "Пошук"
167176
168−#: qml/Shell.qml:348
177+#: qml/Shell.qml:334
169178#, qt-format
170179msgid "Please enter %1"
171180msgstr "Будь ласка, введіть %1"
po/unity8.pot+31−24
@@ -8,7 +8,7 @@ msgid ""
88msgstr ""
99"Project-Id-Version: unity8\n"
1010"Report-Msgid-Bugs-To: \n"
11−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
11+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1212"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1313"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1414"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr ""
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr ""
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr ""
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr ""
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr ""
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr ""
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr ""
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr ""
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr ""
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr ""
po/vi.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2014-01-15 01:19+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Vietnamese <vi@li.org>\n"
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-05-01 06:44+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr ""
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr ""
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr ""
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr ""
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr ""
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr ""
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr ""
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr ""
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr ""
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr ""
po/xh.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2013-09-28 13:20+0000\n"
1212"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313"Language-Team: Xhosa <xh@li.org>\n"
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-05-01 06:44+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr ""
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr ""
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr ""
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr ""
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr ""
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr ""
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr ""
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr ""
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr ""
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr ""
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr ""
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr ""
po/zh_CN.po+60−53
@@ -7,128 +7,135 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
11−"PO-Revision-Date: 2013-10-09 13:51+0000\n"
12−"Last-Translator: Aron Xu <Unknown>\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
11+"PO-Revision-Date: 2014-06-12 08:55+0000\n"
12+"Last-Translator: Shengjing Zhu <Unknown>\n"
1313"Language-Team: Chinese (Simplified) <zh_CN@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-05-01 06:44+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
2222msgid "Lock to Launcher"
23−msgstr ""
23+msgstr "固定到启动器"
2424
2525#: plugins/Unity/Launcher/launcheritem.cpp:73
2626msgid "Unlock from Launcher"
27−msgstr ""
27+msgstr "从启动器移除"
2828
2929#: qml/Components/EdgeDemoOverlay.qml:151
3030msgid "Skip intro"
31−msgstr ""
31+msgstr "跳过简介"
3232
3333#: qml/Components/EdgeDemo.qml:113
3434msgid "Right edge"
35−msgstr ""
35+msgstr "右边缘"
3636
3737#: qml/Components/EdgeDemo.qml:114
3838msgid "Try swiping from the right edge to unlock the phone"
39−msgstr ""
39+msgstr "从右边滑动可以解锁"
4040
4141#: qml/Components/EdgeDemo.qml:145
4242msgid "Top edge"
43−msgstr ""
43+msgstr "上边缘"
4444
4545#: qml/Components/EdgeDemo.qml:146
4646msgid "Try swiping from the top edge to access the indicators"
47−msgstr ""
47+msgstr "从上边缘划入可以访问指示器"
4848
4949#: qml/Components/EdgeDemo.qml:171
5050msgid "Close"
51−msgstr ""
51+msgstr "关闭"
5252
5353#: qml/Components/EdgeDemo.qml:172
5454msgid "Swipe up again to close the settings screen"
55−msgstr ""
55+msgstr "再次向上划动可以关闭设置界面"
5656
5757#: qml/Components/EdgeDemo.qml:199
5858msgid "Left edge"
59−msgstr ""
59+msgstr "左边缘"
6060
6161#: qml/Components/EdgeDemo.qml:200
6262msgid "Swipe from the left to reveal the launcher for quick access to apps"
63−msgstr ""
63+msgstr "从左边划入展开启动器可以快速打开应用"
6464
6565#: qml/Components/EdgeDemo.qml:227
6666msgid "Well done"
67−msgstr ""
67+msgstr "做得好"
6868
6969#: qml/Components/EdgeDemo.qml:228
7070msgid ""
7171"You have now mastered the edge gestures and can start using the "
7272"phone<br><br>Tap on the screen to start"
73−msgstr ""
73+msgstr "您现在已经掌握了边缘滑动手势,可以开始使用手机了<br><br>请点击屏幕开始使用"
74+
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr "紧急电话"
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr "确定"
7482
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr "近期搜索"
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr "你好,%1"
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr "你好"
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr "取消"
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr "完成"
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81−msgstr ""
106+msgstr "了解更多"
82107
83108#: qml/Components/SeeMore.qml:58
84109msgid "See less"
85−msgstr ""
110+msgstr "显示更少"
86111
87112#: qml/Dash/DashApps.qml:37
88113msgid "Recent"
89−msgstr ""
90−
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
114+msgstr "最近使用过的"
95115
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98−msgstr ""
118+msgstr "更多..."
99119
100120#: qml/Dash/Previews/PreviewActionCombo.qml:34
101121msgid "Less..."
102−msgstr ""
122+msgstr "更少..."
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106−msgstr ""
126+msgstr "评分"
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110−msgstr ""
130+msgstr "添加评论"
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114−msgstr ""
134+msgstr "发送"
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118−msgstr ""
119−
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr ""
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr "你好,%1"
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr "你好"
138+msgstr "滑动解锁"
132139
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
@@ -152,17 +159,17 @@ msgstr "讲话中..."
152159
153160#: qml/Notifications/NotificationMenuItemFactory.qml:91
154161msgid "Show password"
155−msgstr ""
162+msgstr "显示密码"
156163
157164#: qml/Notifications/NotificationMenuItemFactory.qml:103
158165msgid "Please enter SIM PIN"
159−msgstr ""
166+msgstr "请输入 SIM PIN"
160167
161168#: qml/Panel/SearchIndicator.qml:27
162169msgid "Search"
163170msgstr "搜索"
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168−msgstr ""
175+msgstr "请输入 %1"
po/zh_HK.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity8\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2014-01-25 13:32+0000\n"
1212"Last-Translator: Daniel Cheung <daniel.2345@hotmail.com>\n"
1313"Language-Team: Chinese (Hong Kong) <zh_HK@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-05-01 06:44+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr "緊急電話"
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr "最近的搜尋"
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr "您好 %1"
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr "您好"
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr "評價"
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr "新增評論"
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr "傳送"
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr "緊急電話"
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr "您好 %1"
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr "您好"
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr "確認"
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr "搜尋"
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr "請輸入 %1"
po/zh_TW.po+33−26
@@ -7,15 +7,15 @@ msgid ""
77msgstr ""
88"Project-Id-Version: unity\n"
99"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2014-04-10 11:13-0400\n"
10+"POT-Creation-Date: 2014-06-13 09:55+0200\n"
1111"PO-Revision-Date: 2014-01-16 06:04+0000\n"
1212"Last-Translator: Henry Yang <henry9846@hotmail.com>\n"
1313"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
1414"MIME-Version: 1.0\n"
1515"Content-Type: text/plain; charset=UTF-8\n"
1616"Content-Transfer-Encoding: 8bit\n"
17−"X-Launchpad-Export-Date: 2014-05-01 06:44+0000\n"
18−"X-Generator: Launchpad (build 16985)\n"
17+"X-Launchpad-Export-Date: 2014-06-17 06:51+0000\n"
18+"X-Generator: Launchpad (build 17045)\n"
1919
2020#: plugins/Unity/Launcher/launcheritem.cpp:43
2121#: plugins/Unity/Launcher/launcheritem.cpp:73
@@ -72,10 +72,35 @@ msgid ""
7272"phone<br><br>Tap on the screen to start"
7373msgstr ""
7474
75+#: qml/Components/Lockscreen.qml:214
76+msgid "Emergency Call"
77+msgstr "緊急連絡"
78+
79+#: qml/Components/Lockscreen.qml:231
80+msgid "OK"
81+msgstr ""
82+
7583#: qml/Components/PageHeader.qml:365
7684msgid "Recent searches"
7785msgstr "最近搜尋"
7886
87+#: qml/Components/PassphraseLockscreen.qml:60
88+#, qt-format
89+msgid "Hello %1"
90+msgstr "%1 您好"
91+
92+#: qml/Components/PassphraseLockscreen.qml:60
93+msgid "Hello"
94+msgstr "您好"
95+
96+#: qml/Components/PinLockscreen.qml:198
97+msgid "CANCEL"
98+msgstr ""
99+
100+#: qml/Components/PinLockscreen.qml:216
101+msgid "DONE"
102+msgstr ""
103+
79104#: qml/Components/SeeMore.qml:35
80105msgid "See more"
81106msgstr ""
@@ -88,11 +113,6 @@ msgstr ""
88113msgid "Recent"
89114msgstr ""
90115
91−#: qml/Dash/PreviewListView.qml:52
92−#, qt-format
93−msgid "%1 Preview"
94−msgstr ""
95−
96116#: qml/Dash/Previews/PreviewActionCombo.qml:34
97117msgid "More..."
98118msgstr ""
@@ -101,35 +121,22 @@ msgstr ""
101121msgid "Less..."
102122msgstr ""
103123
104−#: qml/Dash/Previews/PreviewRatingInput.qml:81
124+#: qml/Dash/Previews/PreviewRatingInput.qml:82
105125msgid "Rate this"
106126msgstr "對此評比"
107127
108−#: qml/Dash/Previews/PreviewRatingInput.qml:126
128+#: qml/Dash/Previews/PreviewRatingInput.qml:128
109129msgid "Add a review"
110130msgstr "新增回覆"
111131
112−#: qml/Dash/Previews/PreviewRatingInput.qml:166
132+#: qml/Dash/Previews/PreviewRatingInput.qml:168
113133msgid "Send"
114134msgstr "發送"
115135
116−#: qml/Greeter/Greeter.qml:151
136+#: qml/Greeter/Greeter.qml:157
117137msgid "Swipe to unlock"
118138msgstr ""
119139
120−#: qml/Greeter/Lockscreen.qml:149
121−msgid "Emergency Call"
122−msgstr "緊急連絡"
123−
124−#: qml/Greeter/PassphraseLockscreen.qml:59
125−#, qt-format
126−msgid "Hello %1"
127−msgstr "%1 您好"
128−
129−#: qml/Greeter/PassphraseLockscreen.qml:59
130−msgid "Hello"
131−msgstr "您好"
132−
133140#: qml/Hud/HudParametrizedActionsPage.qml:132
134141msgid "Confirm"
135142msgstr "確認"
@@ -162,7 +169,7 @@ msgstr ""
162169msgid "Search"
163170msgstr "搜尋"
164171
165−#: qml/Shell.qml:348
172+#: qml/Shell.qml:334
166173#, qt-format
167174msgid "Please enter %1"
168175msgstr ""
qml/Bottombar/Bottombar.qmldeleted−227
@@ -1,227 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import "../Components"
19−import Utils 0.1
20−import Unity.Application 0.1
21−import Ubuntu.Gestures 0.1
22−import Ubuntu.Components 0.1
23−
24−Item {
25− id: bottombar
26−
27− // Whether there's an application on foreground (as opposed to have shell's Dash on foreground)
28− property bool applicationIsOnForeground
29−
30− property variant theHud
31− property bool enabled: false
32− property bool preventHiding: dragArea.dragging
33− readonly property real bottomEdgeButtonCenterDistance: units.gu(34)
34−
35− state: "hidden"
36−
37− function hide() {
38− dismissTimer.stop()
39− bottombar.state = "hidden"
40− }
41−
42− onApplicationIsOnForegroundChanged: {
43− if (!applicationIsOnForeground) {
44− hide()
45− }
46− }
47−
48− onStateChanged: {
49− if (state == "hidden") {
50− dismissTimer.stop()
51− bottomBarVisibilityCommunicatorShell.forceHidden = false
52− } else {
53− dismissTimer.restart()
54− }
55− }
56−
57− onPreventHidingChanged: {
58− if (!preventHiding) {
59− if (state == "hint" || state == "reveal")
60− hide()
61− }
62−
63− if (dismissTimer.running) {
64− dismissTimer.restart();
65− }
66− }
67−
68− Timer {
69− id: dismissTimer
70− interval: 1000
71− onTriggered: {
72− if (!bottombar.preventHiding) {
73− bottombar.state = "hidden"
74− } else {
75− dismissTimer.restart()
76− }
77− }
78− }
79−
80− HudButton {
81− id: hudButton
82−
83− readonly property bool centeredHud: parent.width < units.gu(68) // Nexus 7 has 67 gu width
84−
85− x: centeredHud ? parent.width / 2 - width / 2 : MathUtils.clamp(dragArea.touchStartX - (width / 2), 0, bottombar.width - width)
86− y: bottombar.height - bottomEdgeButtonCenterDistance - (height / 2) - bottomMargin
87− z: 1
88− visible: opacity != 0
89−
90− mouseOver: {
91− if (dragArea.status === DirectionalDragArea.Recognized) {
92− var touchLocal = mapFromItem(dragArea, dragArea.touchX, dragArea.touchY)
93− return touchLocal.x > 0 && touchLocal.x < width
94− && touchLocal.y > 0 && touchLocal.y < height
95− } else {
96− return false
97− }
98− }
99−
100− onClicked: theHud.show()
101−
102− Behavior on bottomMargin {
103− NumberAnimation{duration: hudButton.opacity < 0.01 ? 200 : 70; easing.type: Easing.OutQuart}
104− }
105−
106− Behavior on opacity {
107− NumberAnimation{duration: 200; easing.type: Easing.OutCubic}
108− }
109− }
110−
111− Connections {
112− target: theHud
113− onShownChanged: {
114− bottomBarVisibilityCommunicatorShell.forceHidden = theHud.shown
115− if (theHud.shown) {
116− bottombar.state = "hidden"
117− }
118− }
119− }
120−
121− EdgeDragArea {
122− id: dragArea
123− objectName: "hudDragArea"
124− width: parent.width
125− height: shell.edgeSize
126− anchors.bottom: parent.bottom
127−
128− distanceThreshold: units.gu(8)
129− enabled: !theHud.shown && bottombar.enabled && applicationIsOnForeground
130− direction: Direction.Upwards
131− maxSilenceTime: 2000
132−
133− property int previousStatus: -1
134− property real touchStartX: -1
135−
136− readonly property real distanceFromThreshold: (-distance) - distanceThreshold // distance is negative
137− readonly property real revealDistance: units.gu(2)
138− readonly property real commitDistance: units.gu(6)
139− readonly property real commitProgress: MathUtils.clamp(distanceFromThreshold / commitDistance, 0, 1)
140−
141− onStatusChanged: {
142− if (status === DirectionalDragArea.WaitingForTouch) {
143− if (previousStatus == DirectionalDragArea.Recognized) {
144− if (hudButton.mouseOver) {
145− hudButton.clicked()
146− }
147− }
148− } else if (status === DirectionalDragArea.Undecided) {
149− if (!hudButton.centeredHud) {
150− touchStartX = touchX
151− }
152− } else if (status === DirectionalDragArea.Recognized) {
153− bottombar.state = "hint"
154− }
155− previousStatus = status
156− }
157−
158− onDistanceChanged: {
159− if (status === DirectionalDragArea.Recognized) {
160− if (distanceFromThreshold > commitDistance)
161− bottombar.state = "shown"
162− else if (distanceFromThreshold > revealDistance)
163− bottombar.state = "reveal"
164− }
165− }
166− }
167−
168− Item {
169− id: dismissArea
170− anchors {
171− top: parent.top
172− left: parent.left
173− right: parent.right
174− }
175− height: parent.height - bottomBarVisibilityCommunicatorShell.position
176−
177− MouseArea {
178− anchors.fill: parent
179− enabled: bottombar.state == "shown"
180− onPressed: {
181− bottomBarVisibilityCommunicatorShell.forceHidden = true
182− bottombar.state = "hidden"
183− }
184− }
185−
186− InputFilterArea {
187− anchors.fill: parent
188− blockInput: (hudButton.opacity == 1)
189− }
190− }
191−
192− MouseArea {
193− anchors {
194− top: dismissArea.bottom
195− left: parent.left
196− right: parent.right
197− bottom: parent.bottom
198− }
199− enabled: bottombar.state == "shown" && bottomBarVisibilityCommunicatorShell.position > 0
200− onPressed: {
201− bottombar.state = "hidden"
202− }
203− }
204−
205− states: [
206− State {
207− name: "hidden"
208− PropertyChanges { target: hudButton; opacity: 0 }
209− PropertyChanges { target: hudButton; bottomMargin: units.gu(-2) }
210− },
211− State {
212− name: "hint"
213− extend: "hidden"
214− PropertyChanges { target: hudButton; opacity: 0.5 }
215− },
216− State {
217− name: "reveal"
218− extend: "hint"
219− PropertyChanges { target: hudButton; bottomMargin: units.gu(-2) + units.gu(2) * dragArea.commitProgress }
220− },
221− State {
222− name: "shown"
223− PropertyChanges { target: hudButton; opacity: 1 }
224− PropertyChanges { target: hudButton; bottomMargin: units.gu(0) }
225− }
226− ]
227−}
qml/Bottombar/HudButton.qmldeleted−64
@@ -1,64 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import Ubuntu.Components 0.1
19−
20−Item {
21− id: item
22−
23− property bool mouseOver
24−
25− property int bottomMargin: units.gu(2)
26−
27− signal clicked()
28−
29− readonly property real scaleOnMouseOver: 1.2
30−
31− width: hudButton.width * scaleOnMouseOver
32− height: hudButton.height * scaleOnMouseOver
33−
34− Item {
35− id: hudButton
36−
37− anchors.centerIn: parent
38− height: units.gu(12)
39− width: height
40− opacity: item.mouseOver || abstractButton.pressed ? 1 : 0.7
41− scale: item.mouseOver || abstractButton.pressed ? scaleOnMouseOver : 1
42− Behavior on opacity {NumberAnimation{duration: 200; easing.type: Easing.OutQuart}}
43− Behavior on scale {NumberAnimation{duration: 200; easing.type: Easing.OutQuart}}
44−
45− AbstractButton {
46− id: abstractButton
47− anchors.fill: parent
48− style: Image {
49− anchors.fill: parent
50− source: "graphics/hud_invoke_button_active.png"
51− }
52−
53− onClicked: item.clicked()
54− }
55−
56− Image {
57− width: units.gu(4)
58− height: width
59− source: "graphics/hud.png"
60− anchors.centerIn: parent
61− fillMode: Image.PreserveAspectFit
62− }
63− }
64−}
qml/Bottombar/graphics/hud@20.pngdeleted

Binary file not shown.

qml/Bottombar/graphics/hud_invoke_button_active@20.pngdeleted

Binary file not shown.

qml/CMakeLists.txt−1
@@ -5,7 +5,6 @@ install(FILES ${QML_JS_FILES}
55 )
66
77set(QML_DIRS
8− Bottombar
98 Components
109 Dash
1110 graphics
qml/Components/FilterGrid.qml+2−2
@@ -52,8 +52,8 @@ Item {
5252 property alias delegate: iconTileGrid.delegate
5353 property alias cellWidth: iconTileGrid.cellWidth
5454 property alias cellHeight: iconTileGrid.cellHeight
55− property alias delegateCreationBegin: iconTileGrid.delegateCreationBegin
56− property alias delegateCreationEnd: iconTileGrid.delegateCreationEnd
55+ property alias displayMarginBeginning: iconTileGrid.displayMarginBeginning
56+ property alias displayMarginEnd: iconTileGrid.displayMarginEnd
5757 readonly property alias originY: iconTileGrid.originY
5858 readonly property alias flicking: iconTileGrid.flicking
5959 readonly property alias moving: iconTileGrid.moving
qml/Greeter/Lockscreen.qml → qml/Components/Lockscreen.qmlrenamed+91−8
@@ -15,8 +15,8 @@
1515 */
1616
1717import QtQuick 2.0
18−import Ubuntu.Components 0.1
19−import "../Components"
18+import Ubuntu.Components 1.0
19+import Ubuntu.Components.Popups 1.0
2020
2121Showable {
2222 id: root
@@ -26,19 +26,34 @@ Showable {
2626
2727 // Placeholder text
2828 property string placeholderText: ""
29+ // Placeholder text while shaking (e.g. Incorrect passprase)
30+ property string wrongPlaceholderText: ""
31+ // Retries text (e.g. 3 retries left)
32+ property string retryText: ""
33+
34+ // Informational text. (e.g. some text to tell which domain this is pin is entered for.
35+ property string infoText: ""
2936
3037 // In case the Lockscreen can show a greeter message, this is the username
3138 property string username: ""
3239
33− // Set this to a value greater 0 to enable auto-confirm behavior for the lockscreen.
34− // This is ignored by the alphaNumeric lockscreen as that one is confirmed with pressing enter on the OSK.
35− property int pinLength: -1
40+ // Set those to a value greater 0 to restrict the pin length.
41+ // If both are unset, the Lockscreen will show a confirm button and allow typing any length of pin before
42+ // confirming. If minPinLength is set to a value > 0, the confirm button will only become active when the
43+ // entered pin is at least that long. If maxPinLength is set, the lockscreen won't allow entering any
44+ // more numbers than that. If both are set to the same value, the lockscreen will enter auto confirming
45+ // behavior, hiding the confirmation button and triggering that automatically when the entered pin reached
46+ // that length. This is ignored by the alphaNumeric lockscreen as that one is always confirmed by pressing
47+ // enter on the OSK.
48+ property int minPinLength: -1
49+ property int maxPinLength: -1
3650
3751 property url background: ""
3852
3953 signal entered(string passphrase)
4054 signal cancel()
4155 signal emergencyCall()
56+ signal infoPopupConfirmed()
4257
4358 onRequiredChanged: {
4459 if (required && pinPadLoader.item) {
@@ -56,6 +71,10 @@ Showable {
5671 pinPadLoader.item.clear(showAnimation);
5772 }
5873
74+ function showInfoPopup(title, text) {
75+ PopupUtils.open(infoPopupComponent, root, {title: title, text: text})
76+ }
77+
5978 Rectangle {
6079 // In case background fails to load or is undefined
6180 id: backgroundBackup
@@ -68,7 +87,6 @@ Showable {
6887 objectName: "lockscreenBackground"
6988 anchors {
7089 fill: parent
71− topMargin: backgroundTopMargin
7290 }
7391 source: root.required ? root.background : ""
7492 fillMode: Image.PreserveAspectCrop
@@ -78,6 +96,43 @@ Showable {
7896 anchors.fill: root
7997 }
8098
99+ Column {
100+ spacing: units.gu(2)
101+ anchors {
102+ left: parent.left
103+ right: parent.right
104+ bottom: pinPadLoader.top
105+ bottomMargin: units.gu(2)
106+ }
107+ Label {
108+ objectName: "retryCountLabel"
109+ anchors {
110+ left: parent.left
111+ right: parent.right
112+ }
113+ text: root.retryText
114+ horizontalAlignment: Text.AlignHCenter
115+ color: "#f3f3e7"
116+ opacity: 0.6
117+ visible: root.retryText.length > 0
118+ }
119+ Label {
120+ id: infoTextLabel
121+ objectName: "infoTextLabel"
122+ anchors {
123+ left: parent.left
124+ right: parent.right
125+ }
126+ text: root.infoText
127+ horizontalAlignment: Text.AlignHCenter
128+ color: "#f3f3e7"
129+ opacity: 0.6
130+ visible: root.infoText.length > 0
131+ }
132+ }
133+
134+
135+
81136 Loader {
82137 id: pinPadLoader
83138 objectName: "pinPadLoader"
@@ -105,14 +160,24 @@ Showable {
105160
106161 Binding {
107162 target: pinPadLoader.item
108− property: "pinLength"
109− value: root.pinLength
163+ property: "minPinLength"
164+ value: root.minPinLength
165+ }
166+ Binding {
167+ target: pinPadLoader.item
168+ property: "maxPinLength"
169+ value: root.maxPinLength
110170 }
111171 Binding {
112172 target: pinPadLoader.item
113173 property: "placeholderText"
114174 value: root.placeholderText
115175 }
176+ Binding {
177+ target: pinPadLoader.item
178+ property: "wrongPlaceholderText"
179+ value: root.wrongPlaceholderText
180+ }
116181 Binding {
117182 target: pinPadLoader.item
118183 property: "username"
@@ -153,4 +218,22 @@ Showable {
153218 anchors.horizontalCenter: parent.horizontalCenter
154219 }
155220 }
221+
222+ Component {
223+ id: infoPopupComponent
224+ Dialog {
225+ id: dialog
226+ objectName: "infoPopup"
227+ modal: true
228+
229+ Button {
230+ objectName: "infoPopupOkButton"
231+ text: i18n.tr("OK")
232+ onClicked: {
233+ PopupUtils.close(dialog)
234+ root.infoPopupConfirmed();
235+ }
236+ }
237+ }
238+ }
156239}
qml/Components/PageHeader.qml+1−1
@@ -25,7 +25,7 @@ Item {
2525 property bool searchEntryEnabled: false
2626 property alias searchQuery: searchField.text
2727 property ListModel searchHistory
28− property Scope scope
28+ property var scope: null
2929 property alias childItem: itemContainer.children
3030 property alias showBackButton: backButton.visible
3131
qml/Greeter/PassphraseLockscreen.qml → qml/Components/PassphraseLockscreen.qmlrenamed+6−2
@@ -22,7 +22,8 @@ Item {
2222 id: root
2323 height: highlightItem.height
2424
25− property alias placeholderText: pinentryField.placeholderText
25+ property string placeholderText
26+ property string wrongPlaceholderText
2627 property string username: ""
2728
2829 signal entered(string passphrase)
@@ -73,9 +74,12 @@ Item {
7374 echoMode: TextInput.Password
7475 opacity: 0.9
7576 hasClearButton: false
77+ placeholderText: wrongPasswordAnimation.running ? root.wrongPlaceholderText : root.placeholderText
7678
7779 onAccepted: {
78− root.entered(pinentryField.text);
80+ if (pinentryField.text) {
81+ root.entered(pinentryField.text);
82+ }
7983 }
8084 }
8185 }
qml/Greeter/PinLockscreen.qml → qml/Components/PinLockscreen.qmlrenamed+30−12
@@ -25,9 +25,11 @@ Column {
2525 spacing: units.gu(3.5)
2626
2727 property alias placeholderText: pinentryField.placeholderText
28+ property alias wrongPlaceholderText: pinentryField.wrongPlaceholderText
2829 property int padWidth: units.gu(34)
2930 property int padHeight: units.gu(28)
30− property int pinLength: -1
31+ property int minPinLength: -1
32+ property int maxPinLength: -1
3133
3234 signal entered(string passphrase)
3335 signal cancel()
@@ -41,6 +43,10 @@ Column {
4143 }
4244 }
4345
46+ QtObject {
47+ id: priv
48+ property bool autoConfirm: root.minPinLength == root.maxPinLength && root.minPinLength != -1
49+ }
4450
4551 UbuntuShape {
4652 id: pinentryField
@@ -52,12 +58,20 @@ Column {
5258 radius: "medium"
5359 property string text: ""
5460 property string placeholderText: ""
61+ property string wrongPlaceholderText: ""
62+
63+ function appendChar(character) {
64+ if (root.maxPinLength == -1 || pinentryField.text.length < root.maxPinLength) {
65+ pinentryField.text = pinentryField.text + character;
66+ }
67+ }
68+
5569 onTextChanged: {
5670 pinentryFieldLabel.text = "";
5771 for (var i = 0; i < text.length; ++i) {
5872 pinentryFieldLabel.text += "•";
5973 }
60− if (text.length === root.pinLength) {
74+ if (priv.autoConfirm && text.length === root.maxPinLength) {
6175 root.entered(text);
6276 }
6377 }
@@ -74,9 +88,11 @@ Column {
7488 }
7589 Label {
7690 id: pinentryFieldPlaceHolder
91+ objectName: "pinentryFieldPlaceHolder"
7792 anchors.centerIn: parent
78− color: "grey"
79− text: parent.placeholderText
93+ color: "#f3f3e7"
94+ opacity: 0.6
95+ text: wrongPasswordAnimation.running ? parent.wrongPlaceholderText : parent.placeholderText
8096 visible: pinentryFieldLabel.text.length == 0
8197 }
8298
@@ -91,9 +107,11 @@ Column {
91107 bottom: parent.bottom
92108 bottomMargin: units.gu(1)
93109 }
94− visible: root.pinLength == -1
110+ visible: !priv.autoConfirm
95111 width: height
96112 name: "erase"
113+ color: "#f3f3e7"
114+ opacity: 0.6
97115 MouseArea {
98116 anchors.fill: parent
99117 onClicked: pinentryField.text = pinentryField.text.substring(0, pinentryField.text.length-1);
@@ -168,7 +186,7 @@ Column {
168186 enabled: entryEnabled
169187
170188 onClicked: {
171− pinentryField.text = pinentryField.text + text;
189+ pinentryField.appendChar(text);
172190 }
173191 }
174192 }
@@ -177,7 +195,7 @@ Column {
177195 objectName: "pinPadButtonBack"
178196 width: root.padWidth / 3
179197 height: root.padHeight / 4
180− subText: "CANCEL"
198+ subText: i18n.tr("CANCEL")
181199 onClicked: root.cancel();
182200 }
183201
@@ -186,7 +204,7 @@ Column {
186204 width: root.padWidth / 3
187205 height: root.padHeight / 4
188206 text: "0"
189− onClicked: pinentryField.text = pinentryField.text + text
207+ onClicked: pinentryField.appendChar(text);
190208 enabled: entryEnabled
191209 }
192210
@@ -194,16 +212,16 @@ Column {
194212 objectName: "pinPadButtonErase"
195213 width: root.padWidth / 3
196214 height: root.padHeight / 4
197− iconName: root.pinLength == -1 ? "" : "erase"
198− subText: root.pinLength == -1 ? "DONE" : ""
215+ iconName: priv.autoConfirm ? "erase" : ""
216+ subText: priv.autoConfirm ? "" : i18n.tr("DONE")
199217 onClicked: {
200− if (root.pinLength !== -1) {
218+ if (priv.autoConfirm) {
201219 pinentryField.text = pinentryField.text.substring(0, pinentryField.text.length-1);
202220 } else {
203221 root.entered(pinentryField.text);
204222 }
205223 }
206− enabled: entryEnabled
224+ enabled: priv.autoConfirm ? entryEnabled : pinentryField.text.length >= root.minPinLength
207225 }
208226 }
209227 }
qml/Components/PinPadButton.qml+2−1
@@ -19,6 +19,7 @@ import Ubuntu.Components 0.1
1919
2020Item {
2121 id: root
22+ opacity: enabled ? 1 : 0.6
2223
2324 property alias text: label.text
2425 property alias subText: subTextLabel.text
@@ -62,7 +63,7 @@ Item {
6263 Label {
6364 id: subTextLabel
6465 fontSize: "small"
65− color: "grey"
66+ color: "#f3f3e7"
6667 anchors.horizontalCenter: parent.horizontalCenter
6768 visible: text.length > 0
6869 }
qml/Components/ResponsiveGridView.qml+3−3
@@ -14,7 +14,7 @@
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
1515 */
1616
17−import QtQuick 2.0
17+import QtQuick 2.3
1818import Ubuntu.Components 0.1
1919
2020/*
@@ -41,8 +41,8 @@ Item {
4141 readonly property alias moving: gridView.moving
4242 readonly property alias pressDelay: gridView.pressDelay
4343 readonly property alias originY: gridView.originY
44− property alias delegateCreationBegin: gridView.delegateCreationBegin
45− property alias delegateCreationEnd: gridView.delegateCreationEnd
44+ property alias displayMarginBeginning: gridView.displayMarginBeginning
45+ property alias displayMarginEnd: gridView.displayMarginEnd
4646 property alias highlightIndex: gridView.highlightIndex
4747 readonly property alias currentItem: gridView.currentItem
4848
qml/Components/Revealer.qmldeleted−241
@@ -1,241 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import Ubuntu.Components 0.1
19−
20−Item {
21− id: revealer
22−
23− property Showable target
24− property var hintingAnimation: hintingAnimation
25− property string boundProperty: orientation == Qt.Vertical ? "y" : "x"
26− property int orientation: Qt.Vertical
27− property int direction: Qt.LeftToRight
28− property real openedValue: orientation == Qt.Vertical ? y : x
29− property real closedValue: orientation == Qt.Vertical ? y + (direction == Qt.LeftToRight ? -height : height) : x + (direction == Qt.LeftToRight ? -width : width)
30− property real hintDisplacement: 0
31− property real handleSize: units.gu(2)
32− property real dragVelocity: draggingArea.dragVelocity != 0 ? Math.abs(draggingArea.dragVelocity) : -1
33− property real dragVelocityThreshold: units.gu(5)
34− property bool dragging: false
35− property bool pressed: draggingArea.pressed
36− property int lateralPosition: draggingArea.lateralPosition
37− property real dragPosition
38− property bool openOnPress: true
39−
40− signal openPressed(int mouseX, int mouseY)
41− signal openReleased(int mouseX, int mouseY)
42− signal closePressed
43− signal openClicked
44− signal closeClicked
45−
46− dragPosition: {
47− var value
48− if (orientation == Qt.Vertical) {
49− value = draggingArea.dragValue + draggingArea.y
50− if (direction == Qt.RightToLeft) {
51− value += draggingArea.height - height
52− }
53− } else {
54− value = draggingArea.dragValue + draggingArea.x
55− if (direction == Qt.RightToLeft) {
56− value += draggingArea.width - width
57− }
58− }
59− if (__opened) {
60− if (direction == Qt.LeftToRight) {
61− value += handleSize
62− } else {
63− value -= handleSize
64− }
65− } else if (dragging) {
66− if (direction == Qt.LeftToRight) {
67− value += hintDisplacement
68− } else {
69− value -= hintDisplacement
70− }
71− }
72−
73− return value
74− }
75− property var draggingArea: leftDraggingArea.enabled ? leftDraggingArea : rightDraggingArea
76−
77− property real __hintValue: closedValue + (direction == Qt.LeftToRight ? hintDisplacement : -hintDisplacement)
78−
79− function dragToValue(dragPosition) {
80− return dragPosition + closedValue
81− }
82−
83− property bool __opened: target.shown
84− enabled: target.available
85−
86− // Can be replaced with a fake implementation during tests
87− // property var __getCurrentTimeMs: function () { return new Date().getTime() }
88− property var __dateTime: new function() {
89− this.getCurrentTimeMs = function() {return new Date().getTime()}
90− }
91−
92− Component.onCompleted: target[boundProperty] = __opened ? openedValue : closedValue
93− onOpenedValueChanged: if (__opened && !dragging) target[boundProperty] = openedValue
94− onClosedValueChanged: if (!__opened && !dragging) target[boundProperty] = closedValue
95−
96− function __computeValue(dragPosition) {
97− return MathUtils.clamp(dragToValue(dragPosition), __hintValue, openedValue)
98− }
99−
100− function __open() {
101− hintingAnimation.stop()
102− target.show()
103− }
104−
105− function __close() {
106− hintingAnimation.stop()
107− target.hide()
108− }
109−
110− function __hint() {
111− target.showAnimation.stop()
112− target.hideAnimation.stop()
113− hintingAnimation.restart()
114− }
115−
116− function __settle() {
117− hintingAnimation.stop()
118− if (__opened) target.show()
119− else target.hide()
120− }
121−
122− function __startDragging() {
123− hintingAnimation.stop()
124− dragging = true
125− }
126−
127− function __endDragging(dragVelocity) {
128− dragging = false
129− if (revealer.direction == Qt.RightToLeft) {
130− dragVelocity = -dragVelocity
131− }
132− if (Math.abs(dragVelocity) >= dragVelocityThreshold) {
133− if (dragVelocity > 0) __open()
134− else __close()
135− } else {
136− __settle()
137− }
138− }
139−
140− Binding {
141− id: dragBinding
142−
143− target: revealer.target
144− property: revealer.boundProperty
145− value: __computeValue(dragPosition)
146− when: dragging
147− }
148−
149− SmoothedAnimation {
150− id: hintingAnimation
151−
152− target: revealer.target
153− property: revealer.boundProperty
154− duration: 150
155− to: revealer.__hintValue
156− }
157−
158− DraggingArea {
159− id: leftDraggingArea
160−
161− property bool isOpeningArea: revealer.direction == Qt.LeftToRight
162−
163− height: orientation == Qt.Vertical ? handleSize : parent.height
164− width: orientation == Qt.Horizontal ? handleSize : parent.width
165− orientation: revealer.orientation
166− enabled: isOpeningArea ? !revealer.__opened : revealer.__opened
167−
168− __dateTime: revealer.__dateTime
169−
170− onPressed: {
171− if (isOpeningArea) {
172− if (revealer.openOnPress) {
173− revealer.openPressed(mouseX, mouseY)
174− __hint()
175− }
176− } else {
177− revealer.closePressed()
178− }
179− }
180− onReleased: {
181− if (isOpeningArea && revealer.openOnPress) {
182− revealer.openReleased(mouseX, mouseY)
183− __settle()
184− }
185− }
186− onDragStart: __startDragging()
187− onDragEnd: __endDragging(dragVelocity)
188− onClicked: {
189− if (clickValidated) {
190− if (isOpeningArea) {
191− if (revealer.openOnPress) revealer.openClicked()
192− } else {
193− revealer.closeClicked()
194− }
195− }
196− }
197− }
198−
199− DraggingArea {
200− id: rightDraggingArea
201−
202− property bool isOpeningArea: revealer.direction == Qt.RightToLeft
203−
204− x: orientation == Qt.Vertical ? 0 : parent.width - width
205− y: orientation == Qt.Vertical ? parent.height - height : 0
206− height: orientation == Qt.Vertical ? handleSize : parent.height
207− width: orientation == Qt.Horizontal ? handleSize : parent.width
208− orientation: revealer.orientation
209− enabled: isOpeningArea ? !revealer.__opened : revealer.__opened
210−
211− __dateTime: revealer.__dateTime
212−
213− onPressed: {
214− if (isOpeningArea) {
215− if (revealer.openOnPress) {
216− revealer.openPressed(mouseX, mouseY)
217− __hint()
218− }
219− } else {
220− revealer.closePressed()
221− }
222− }
223− onReleased: {
224− if (isOpeningArea && revealer.openOnPress) {
225− revealer.openReleased(mouseX, mouseY)
226− __settle()
227− }
228− }
229− onDragStart: __startDragging()
230− onDragEnd: __endDragging(dragVelocity)
231− onClicked: {
232− if (clickValidated) {
233− if (isOpeningArea) {
234− if (revealer.openOnPress) revealer.openClicked()
235− } else {
236− revealer.closeClicked()
237− }
238− }
239− }
240− }
241−}
qml/Dash/Card.qmldeleted−236
@@ -1,236 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import Ubuntu.Components 0.1
19−// For image://albumart and image://thumbnailer image providers
20−import Ubuntu.Thumbnailer 0.1
21−
22−AbstractButton {
23− id: root
24− property var template
25− property var components
26− property var cardData
27−
28− property real fontScale: 1.0
29− property int headerAlignment: Text.AlignLeft
30− readonly property int headerHeight: headerLoader.item ? headerLoader.item.height : 0
31− property int fixedHeaderHeight: -1
32− readonly property string title: cardData && cardData["title"] || ""
33−
34− property bool showHeader: true
35−
36− implicitWidth: childrenRect.width
37− implicitHeight: summary.y + summary.height + (summary.text && backgroundLoader.active ? units.gu(1) : 0)
38−
39− Loader {
40− id: backgroundLoader
41− objectName: "backgroundLoader"
42−
43− readonly property bool artAndSummary: components["art"]["field"] && components["summary"] || false
44− active: template["card-layout"] !== "horizontal" && (template["card-background"] || components["background"] || artAndSummary)
45− anchors.fill: parent
46−
47− sourceComponent: UbuntuShape {
48− objectName: "background"
49− radius: "medium"
50− color: getColor(0) || "white"
51− gradientColor: getColor(1) || color
52− anchors.fill: parent
53− image: backgroundImage.source ? backgroundImage : null
54−
55− property real luminance: 0.2126 * color.r + 0.7152 * color.g + 0.0722 * color.b
56−
57− property Image backgroundImage: Image {
58− objectName: "backgroundImage"
59− source: {
60− if (cardData && typeof cardData["background"] === "string") return cardData["background"]
61− else if (template && typeof template["card-background"] === "string") return template["card-background"]
62− else return ""
63− }
64− }
65−
66− function getColor(index) {
67− if (cardData && typeof cardData["background"] === "object"
68− && (cardData["background"]["type"] === "color" || cardData["background"]["type"] === "gradient")) {
69− return cardData["background"]["elements"][index];
70− } else if (template && typeof template["card-background"] === "object"
71− && (template["card-background"]["type"] === "color" || template["card-background"]["type"] === "gradient")) {
72− return template["card-background"]["elements"][index];
73− } else return undefined;
74− }
75− }
76− }
77−
78− UbuntuShape {
79− id: artShape
80− radius: "medium"
81− objectName: "artShape"
82− anchors.horizontalCenter: template && template["card-layout"] === "horizontal" ? undefined : parent.horizontalCenter
83− anchors.left: template && template["card-layout"] === "horizontal" ? parent.left : undefined
84− visible: cardData && cardData["art"] || false
85−
86− readonly property real aspect: components !== undefined ? components["art"]["aspect-ratio"] : 1
87− readonly property bool aspectSmallerThanImageAspect: aspect < image.aspect
88−
89− Component.onCompleted: updateWidthHeightBindings();
90− onAspectSmallerThanImageAspectChanged: updateWidthHeightBindings();
91−
92− function updateWidthHeightBindings() {
93− if (aspectSmallerThanImageAspect) {
94− width = Qt.binding(function() { return !visible ? 0 : image.width });
95− height = Qt.binding(function() { return !visible ? 0 : image.fillMode === Image.PreserveAspectCrop ? image.height : width / image.aspect });
96− } else {
97− width = Qt.binding(function() { return !visible ? 0 : image.fillMode === Image.PreserveAspectCrop ? image.width : height * image.aspect });
98− height = Qt.binding(function() { return !visible ? 0 : image.height });
99− }
100− }
101−
102− image: Image {
103− objectName: "artImage"
104− source: cardData && cardData["art"] || ""
105− cache: true
106− // FIXME uncomment when having investigated / fixed the crash
107− //sourceSize.width: width > height ? width : 0
108− //sourceSize.height: height > width ? height : 0
109− fillMode: components && components["art"]["fill-mode"] === "fit" ? Image.PreserveAspectFit: Image.PreserveAspectCrop
110−
111− readonly property real aspect: implicitWidth / implicitHeight
112− readonly property bool isHorizontal: template && template["card-layout"] === "horizontal"
113−
114− Component.onCompleted: updateWidthHeightBindings();
115− onIsHorizontalChanged: updateWidthHeightBindings();
116−
117− function updateWidthHeightBindings() {
118− if (isHorizontal) {
119− width = Qt.binding(function() { return height * artShape.aspect });
120− height = Qt.binding(function() { return root.headerHeight });
121− } else {
122− width = Qt.binding(function() { return root.width });
123− height = Qt.binding(function() { return width / artShape.aspect });
124− }
125− }
126− }
127− }
128−
129− Loader {
130− id: overlayLoader
131− anchors {
132− left: artShape.left
133− right: artShape.right
134− bottom: artShape.bottom
135− }
136− active: template && template["overlay"] && artShape.visible && artShape.image.status === Image.Ready || false
137−
138− sourceComponent: ShaderEffect {
139− id: overlay
140−
141− height: headerLoader.item ? headerLoader.item.height : 0
142− opacity: headerLoader.item ? headerLoader.item.opacity * 0.6 : 0
143−
144− property var source: ShaderEffectSource {
145− id: shaderSource
146− sourceItem: artShape
147− onVisibleChanged: if (visible) scheduleUpdate()
148− live: false
149− sourceRect: Qt.rect(0, artShape.height - overlay.height, artShape.width, overlay.height)
150− }
151−
152− vertexShader: "
153− uniform highp mat4 qt_Matrix;
154− attribute highp vec4 qt_Vertex;
155− attribute highp vec2 qt_MultiTexCoord0;
156− varying highp vec2 coord;
157− void main() {
158− coord = qt_MultiTexCoord0;
159− gl_Position = qt_Matrix * qt_Vertex;
160− }"
161−
162− fragmentShader: "
163− varying highp vec2 coord;
164− uniform sampler2D source;
165− uniform lowp float qt_Opacity;
166− void main() {
167− lowp vec4 tex = texture2D(source, coord);
168− gl_FragColor = vec4(0, 0, 0, tex.a) * qt_Opacity;
169− }"
170− }
171− }
172−
173− Loader {
174− id: headerLoader
175− objectName: "cardHeaderLoader"
176−
177− anchors {
178− top: {
179− if (template) {
180− if (template["overlay"]) return overlayLoader.top;
181− if (template["card-layout"] === "horizontal") return artShape.top;
182− }
183− return artShape.bottom;
184− }
185− left: {
186− if (template) {
187− if (!template["overlay"] && template["card-layout"] === "horizontal") return artShape.right;
188− }
189− return parent.left;
190− }
191− right: parent.right
192− }
193− active: cardData && cardData["title"] || cardData && cardData["mascot"] || false
194−
195− sourceComponent: CardHeader {
196− id: header
197− objectName: "cardHeader"
198−
199− mascot: cardData && cardData["mascot"] || ""
200− title: root.title
201− subtitle: cardData && cardData["subtitle"] || ""
202−
203− titleWeight: components && components["subtitle"] ? Font.DemiBold : Font.Normal
204−
205− opacity: showHeader ? 1 : 0
206− inOverlay: root.template && root.template["overlay"] === true
207− fontColor: inOverlay ? "white" : summary.color
208− useMascotShape: !backgroundLoader.active && !inOverlay
209− headerAlignment: root.headerAlignment
210− height: root.fixedHeaderHeight != -1 ? root.fixedHeaderHeight : implicitHeight
211− fontScale: root.fontScale
212−
213− Behavior on opacity { NumberAnimation { duration: UbuntuAnimation.SnapDuration } }
214− }
215− }
216−
217− Label {
218− id: summary
219− objectName: "summaryLabel"
220− anchors {
221− top: headerLoader.active ? headerLoader.bottom : artShape.bottom
222− left: parent.left
223− right: parent.right
224− margins: backgroundLoader.active ? units.gu(1) : 0
225− topMargin: 0
226− }
227− wrapMode: Text.Wrap
228− maximumLineCount: 5
229− elide: Text.ElideRight
230− text: cardData && cardData["summary"] || ""
231− height: text ? implicitHeight : 0
232− fontSize: "small"
233− // TODO karni: Change "grey" to Ubuntu.Components.Palette color once updated.
234− color: backgroundLoader.active && backgroundLoader.item.luminance < 0.7 ? "white" : "grey"
235− }
236−}
qml/Dash/CardCarousel.qml+26−14
@@ -18,7 +18,6 @@ import QtQuick 2.0
1818import Ubuntu.Components 0.1
1919import "../Components"
2020
21−
2221DashRenderer {
2322 id: cardCarousel
2423
@@ -35,7 +34,7 @@ DashRenderer {
3534 Carousel {
3635 id: carousel
3736 anchors.fill: parent
38− tileAspectRatio: cardCarousel.components && cardCarousel.components["art"]["aspect-ratio"] || 1.0
37+ tileAspectRatio: cardTool.components && cardTool.components["art"]["aspect-ratio"] || 1.0
3938 // FIXME we need to "reverse" the carousel to make the selected item the size
4039 // and push others back.
4140 minimumTileWidth: cardTool.cardWidth / selectedItemScaleFactor
@@ -43,27 +42,40 @@ DashRenderer {
4342 cacheBuffer: 1404 // 18px * 13gu * 6
4443 model: cardCarousel.model
4544
46− onClicked: cardCarousel.clicked(index, itemY)
47− onPressAndHold: cardCarousel.pressAndHold(index, itemY)
45+ onClicked: cardCarousel.clicked(index, null)
46+ onPressAndHold: cardCarousel.pressAndHold(index)
4847
4948 property real fontScale: 1 / selectedItemScaleFactor
5049 property real headerHeight: cardTool.headerHeight / selectedItemScaleFactor
5150
52− itemComponent: Card {
53− id: card
54− objectName: "carouselDelegate" + index
55− fixedHeaderHeight: carousel.headerHeight
56− cardData: model
57− template: cardTool.template
58− components: cardTool.components
51+ itemComponent: Loader {
52+ id: loader
5953
6054 property bool explicitlyScaled
6155 property var model
62−
6356 enabled: false
64− showHeader: explicitlyScaled
6557
66− fontScale: carousel.fontScale
58+ sourceComponent: cardTool.cardComponent
59+ onLoaded: {
60+ item.objectName = "carouselDelegate" + index;
61+ item.fixedHeaderHeight = Qt.binding(function() { return carousel.headerHeight; });
62+ item.height = Qt.binding(function() { return cardTool.cardHeight; });
63+ item.cardData = Qt.binding(function() { return model; });
64+ item.template = Qt.binding(function() { return cardTool.template; });
65+ item.components = Qt.binding(function() { return cardTool.components; });
66+ item.fontScale = Qt.binding(function() { return carousel.fontScale; });
67+ item.showHeader = Qt.binding(function() { return loader.explicitlyScaled; });
68+ item.artShapeBorderSource = "none";
69+ }
70+
71+ BorderImage {
72+ anchors {
73+ fill: parent
74+ margins: -units.gu(1)
75+ }
76+ z: -1
77+ source: "graphics/carousel_dropshadow.sci"
78+ }
6779 }
6880 }
6981}
qml/Dash/CardFilterGrid.qml+21−18
@@ -43,27 +43,30 @@ DashRenderer {
4343 verticalSpacing: genericFilterGrid.verticalSpacing
4444 model: genericFilterGrid.model
4545 collapsedRowCount: Math.min(2, cardTool && cardTool.template && cardTool.template["collapsed-rows"] || 2)
46− delegateCreationBegin: genericFilterGrid.delegateCreationBegin
47− delegateCreationEnd: genericFilterGrid.delegateCreationEnd
48− delegate: Loader {
49− asynchronous: true
46+ displayMarginBeginning: genericFilterGrid.displayMarginBeginning
47+ displayMarginEnd: genericFilterGrid.displayMarginEnd
48+ delegate: Item {
5049 width: filterGrid.cellWidth
5150 height: filterGrid.cellHeight
52− Card {
53− id: card
54− width: cardTool.cardWidth
55− height: cardTool.cardHeight
56− fixedHeaderHeight: cardTool.headerHeight
51+ Loader {
52+ id: loader
53+ sourceComponent: cardTool.cardComponent
5754 anchors.horizontalCenter: parent.horizontalCenter
58− objectName: "delegate" + index
59− cardData: model
60− template: cardTool.template
61− components: cardTool.components
62−
63− headerAlignment: cardTool.headerAlignment
64−
65− onClicked: genericFilterGrid.clicked(index, card.y)
66− onPressAndHold: genericFilterGrid.pressAndHold(index, card.y)
55+ onLoaded: {
56+ item.objectName = "delegate" + index;
57+ item.width = Qt.binding(function() { return cardTool.cardWidth; });
58+ item.height = Qt.binding(function() { return cardTool.cardHeight; });
59+ item.fixedArtShapeSize = Qt.binding(function() { return cardTool.artShapeSize; });
60+ item.cardData = Qt.binding(function() { return model; });
61+ item.template = Qt.binding(function() { return cardTool.template; });
62+ item.components = Qt.binding(function() { return cardTool.components; });
63+ item.headerAlignment = Qt.binding(function() { return cardTool.headerAlignment; });
64+ }
65+ Connections {
66+ target: loader.item
67+ onClicked: genericFilterGrid.clicked(index, result)
68+ onPressAndHold: genericFilterGrid.pressAndHold(index)
69+ }
6770 }
6871 }
6972 }
qml/Dash/CardHeader.qmldeleted−126
@@ -1,126 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import Ubuntu.Components 0.1
19−
20−Item {
21− id: root
22− property url mascot: ""
23− property alias title: titleLabel.text
24− property var subtitle
25−
26− property alias titleWeight: titleLabel.font.weight
27− property alias titleSize: titleLabel.fontSize
28−
29− // FIXME: Saviq, used to scale fonts down in Carousel
30− property real fontScale: 1.0
31−
32− property alias headerAlignment: titleLabel.horizontalAlignment
33−
34− property bool inOverlay: false
35− property bool useMascotShape: true
36− property color fontColor: Theme.palette.selected.backgroundText
37−
38− visible: mascot != "" || title
39− implicitHeight: row.height > 0 ? row.height + row.margins * 2 : 0
40−
41− Row {
42− id: row
43− objectName: "outerRow"
44−
45− property real margins: units.gu(1)
46−
47− spacing: mascotShapeLoader.active || mascotImageLoader.active || inOverlay ? margins : 0
48− anchors {
49− top: parent.top; left: parent.left; right: parent.right
50− margins: margins
51− leftMargin: spacing
52− rightMargin: spacing
53− }
54−
55− Loader {
56− id: mascotShapeLoader
57− objectName: "mascotShapeLoader"
58−
59− active: useMascotShape && mascotImageLoader.item && mascotImageLoader.item.status === Image.Ready
60− visible: active
61− anchors.verticalCenter: parent.verticalCenter
62− // TODO karni: Icon aspect-ratio is 8:7.5. Revisit these values to avoid fraction of pixels.
63− width: units.gu(6)
64− height: units.gu(5.625)
65− readonly property int maxSize: Math.max(width, height) * 4
66−
67− sourceComponent: UbuntuShape {
68− image: mascotImageLoader.item
69− }
70− }
71−
72− Loader {
73− id: mascotImageLoader
74− active: root.mascot != ""
75− visible: active && !useMascotShape && item.status === Image.Ready
76− anchors.verticalCenter: parent.verticalCenter
77− sourceComponent: Image {
78− objectName: "mascotImage"
79−
80− source: root.mascot
81− width: source ? mascotShapeLoader.width : 0
82− height: mascotShapeLoader.height
83−
84− sourceSize { width: mascotShapeLoader.maxSize; height: mascotShapeLoader.maxSize }
85− fillMode: Image.PreserveAspectCrop
86− horizontalAlignment: Image.AlignHCenter
87− verticalAlignment: Image.AlignVCenter
88− }
89− }
90−
91− Column {
92− objectName: "column"
93− width: parent.width - x
94− spacing: units.dp(2)
95− anchors.verticalCenter: parent.verticalCenter
96−
97− Label {
98− id: titleLabel
99− objectName: "titleLabel"
100− anchors { left: parent.left; right: parent.right }
101− elide: Text.ElideRight
102− font.weight: Font.Normal
103− fontSize: "small"
104− wrapMode: Text.Wrap
105− maximumLineCount: 2
106− font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale)
107− color: fontColor
108− }
109−
110− Loader {
111− active: titleLabel.text && root.subtitle
112− anchors { left: parent.left; right: parent.right }
113− sourceComponent: Label {
114− id: subtitleLabel
115− objectName: "subtitleLabel"
116− elide: Text.ElideRight
117− fontSize: "small"
118− font.weight: Font.Light
119− font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale)
120− color: fontColor
121− text: root.subtitle
122− }
123− }
124− }
125− }
126−}
qml/Dash/CardTool.qml+30−22
@@ -15,6 +15,7 @@
1515 */
1616
1717import QtQuick 2.0
18+import Dash 0.1
1819
1920/*!
2021 \brief Tool for introspecting Card properties.
@@ -65,6 +66,8 @@ Item {
6566 return layout;
6667 }
6768
69+ property var cardComponent: CardCreatorCache.getCardComponent(cardTool.template, cardTool.components);
70+
6871 // FIXME: Saviq
6972 // Only way for the card below to actually be laid out completely.
7073 // If invisible or in "data" array, some components are not taken into account.
@@ -108,7 +111,7 @@ Item {
108111 if (template["card-size"] >= 12 && template["card-size"] <= 38) return units.gu(template["card-size"]);
109112 return units.gu(18.5);
110113 case "grid":
111− return card.implicitHeight
114+ return cardLoader.item ? cardLoader.item.implicitHeight : 0
112115 case "carousel":
113116 return cardWidth / (components ? components["art"]["aspect-ratio"] : 1)
114117 case undefined:
@@ -122,7 +125,8 @@ Item {
122125 /*!
123126 type:real \brief Height of the card's header.
124127 */
125− readonly property alias headerHeight: card.headerHeight
128+ readonly property int headerHeight: cardLoader.item ? cardLoader.item.headerHeight : 0
129+ readonly property size artShapeSize: cardLoader.item ? cardLoader.item.artShapeSize : 0
126130
127131 /*!
128132 \brief Desired alignment of header components.
@@ -161,15 +165,8 @@ Item {
161165 }
162166 }
163167
164− Card {
165− id: card
166− objectName: "cardToolCard"
167− template: cardTool.template
168− components: cardTool.components
169−
170− width: cardTool.cardWidth || implicitWidth
171− height: cardTool.cardHeight || implicitHeight
172−
168+ Loader {
169+ id: cardLoader
173170 property var fields: ["art", "mascot", "title", "subtitle", "summary"]
174171 property var maxData: {
175172 "art": Qt.resolvedUrl("graphics/checkers.png"),
@@ -178,19 +175,30 @@ Item {
178175 "subtitle": "—",
179176 "summary": "—\n—\n—\n—\n—"
180177 }
181−
182− onComponentsChanged: {
183− var data = {};
184− for (var k in fields) {
185− var component = components[fields[k]];
186− var key = fields[k];
187− if ((typeof component === "string" && component.length > 0) ||
188− (typeof component === "object" && component !== null
189− && typeof component["field"] === "string" && component["field"].length > 0)) {
190− data[key] = maxData[key];
178+ sourceComponent: cardTool.cardComponent
179+ onLoaded: {
180+ item.objectName = "cardToolCard";
181+ item.asynchronous = false;
182+ item.template = Qt.binding(function() { return cardTool.template; });
183+ item.components = Qt.binding(function() { return cardTool.components; });
184+ item.width = Qt.binding(function() { return cardTool.cardWidth || item.implicitWidth; });
185+ item.height = Qt.binding(function() { return cardTool.cardHeight || item.implicitHeight; });
186+ }
187+ Connections {
188+ target: cardLoader.item
189+ onComponentsChanged: {
190+ var data = {};
191+ for (var k in cardLoader.fields) {
192+ var component = cardLoader.item.components[cardLoader.fields[k]];
193+ var key = cardLoader.fields[k];
194+ if ((typeof component === "string" && component.length > 0) ||
195+ (typeof component === "object" && component !== null
196+ && typeof component["field"] === "string" && component["field"].length > 0)) {
197+ data[key] = cardLoader.maxData[key];
198+ }
191199 }
200+ cardLoader.item.cardData = data;
192201 }
193− cardData = data;
194202 }
195203 }
196204}
qml/Dash/DashContent.qml+1−1
@@ -138,7 +138,7 @@ Item {
138138
139139 readonly property bool moving: item ? item.moving : false
140140 readonly property var categoryView: item ? item.categoryView : null
141− readonly property Scope theScope: scope
141+ readonly property var theScope: scope
142142
143143 // these are needed for autopilot tests
144144 readonly property string scopeId: scope.id
qml/Dash/DashRenderer.qml+5−6
@@ -29,9 +29,9 @@ Item {
2929
3030 property int uncollapsedHeight: height
3131
32− property var delegateCreationBegin: undefined
32+ property int displayMarginBeginning: 0
3333
34− property var delegateCreationEnd: undefined
34+ property int displayMarginEnd: 0
3535
3636 property real originY: 0
3737
@@ -50,13 +50,12 @@ Item {
5050
5151 /// Emitted when the user clicked on an item
5252 /// @param index is the index of the clicked item
53− /// @param itemY is y of the clicked delegate
54− signal clicked(int index, real itemY)
53+ /// @param result result model of the cliked item, used for activation
54+ signal clicked(int index, var result)
5555
5656 /// Emitted when the user pressed and held on an item
5757 /// @param index is the index of the held item
58− /// @param itemY is y of the held delegate
59− signal pressAndHold(int index, real itemY)
58+ signal pressAndHold(int index)
6059
6160 function setFilter(filter, animate) {
6261 }
qml/Dash/GenericScopeView.qml+14−12
@@ -25,7 +25,7 @@ import "../Components/ListItems" as ListItems
2525FocusScope {
2626 id: scopeView
2727
28− property Scope scope: null
28+ property var scope: null
2929 property SortFilterProxyModel categories: categoryFilter
3030 property bool isCurrent: false
3131 property alias moving: categoryView.moving
@@ -128,7 +128,7 @@ FocusScope {
128128
129129 CardTool {
130130 id: cardTool
131−
131+ objectName: "cardTool"
132132 count: results.count
133133 template: model.renderer
134134 components: model.components
@@ -141,6 +141,7 @@ FocusScope {
141141 top: parent.top
142142 left: parent.left
143143 right: parent.right
144+ topMargin: hasSectionHeader ? 0 : units.gu(2)
144145 }
145146
146147 source: {
@@ -183,12 +184,11 @@ FocusScope {
183184 Connections {
184185 target: rendererLoader.item
185186 onClicked: {
186− if (scopeView.scope.id === "scopes" || (scopeView.scope.id == "clickscope" && categoryId == "local")) {
187+ if (scopeView.scope.id === "scopes" || (scopeView.scope.id == "clickscope" && (categoryId == "local" || categoryId == "store"))) {
187188 // TODO Technically it is possible that calling activate() will make the scope emit
188189 // previewRequested so that we show a preview but there's no scope that does that yet
189190 // so it's not implemented
190− var item = target.model.get(index);
191− scopeView.scope.activate(item.result)
191+ scopeView.scope.activate(result)
192192 } else {
193193 previewListView.model = target.model;
194194 previewListView.currentIndex = -1
@@ -244,18 +244,20 @@ FocusScope {
244244 }
245245 }
246246
247− if (item && item.hasOwnProperty("delegateCreationBegin")) {
247+ if (item && item.hasOwnProperty("displayMarginBeginning")) {
248+ // TODO do we need item.originY here, test 1300302 once we have a silo
249+ // and we can run it on the phone
248250 if (baseItem.y + baseItem.height <= 0) {
249251 // Not visible (item at top of the list viewport)
250− item.delegateCreationBegin = item.originY + baseItem.height
251− item.delegateCreationEnd = item.originY + baseItem.height
252+ item.displayMarginBeginning = -baseItem.height;
253+ item.displayMarginEnd = 0;
252254 } else if (baseItem.y >= categoryView.height) {
253255 // Not visible (item at bottom of the list viewport)
254− item.delegateCreationBegin = item.originY
255− item.delegateCreationEnd = item.originY
256+ item.displayMarginBeginning = 0;
257+ item.displayMarginEnd = -baseItem.height;
256258 } else {
257− item.delegateCreationBegin = item.originY + Math.max(-baseItem.y, 0)
258− item.delegateCreationEnd = item.originY + Math.min(categoryView.height + item.delegateCreationBegin, baseItem.height)
259+ item.displayMarginBeginning = -Math.max(-baseItem.y, 0);
260+ item.displayMarginEnd = -Math.max(baseItem.height - categoryView.height + baseItem.y, 0)
259261 }
260262 }
261263 }
qml/Dash/PreviewListView.qml+3−3
@@ -23,7 +23,7 @@ import "Previews" as Previews
2323Item {
2424 id: root
2525
26− property Scope scope: null
26+ property var scope: null
2727 property var pageHeader: null
2828
2929 property alias open: previewListView.open
@@ -49,7 +49,7 @@ Item {
4949 right: parent.right
5050 verticalCenter: parent.verticalCenter
5151 }
52− text: scope ? i18n.tr("%1 Preview").arg(scope.name) : ""
52+ text: scope ? scope.name : ""
5353 // TODO Saviq: These should come from updated Ubuntu Palette.
5454 color: "#888888"
5555 font.family: "Ubuntu"
@@ -116,7 +116,7 @@ Item {
116116
117117 previewModel: {
118118 var previewStack = root.scope.preview(result);
119− return previewStack.get(0);
119+ return previewStack.getPreviewModel(0);
120120 }
121121 }
122122
qml/Dash/Previews/PreviewHeader.qml+89−9
@@ -15,9 +15,10 @@
1515 */
1616
1717import QtQuick 2.0
18+import Ubuntu.Components 0.1
1819import "../"
1920
20−/*! This preview widget shows a header that is the same as the card header
21+/*! This preview widget shows a header
2122 * The title comes in widgetData["title"]
2223 * The mascot comes in widgetData["mascot"]
2324 * The subtitle comes in widgetData["subtitle"]
@@ -28,15 +29,94 @@ PreviewWidget {
2829
2930 height: childrenRect.height
3031
31− CardHeader {
32− objectName: "cardHeader"
33− mascot: root.widgetData["mascot"] || ""
34− title: root.widgetData["title"] || ""
35− subtitle: root.widgetData["subtitle"] || ""
32+ Item {
33+ id: headerRoot
34+ objectName: "innerPreviewHeader"
35+ readonly property url mascot: root.widgetData["mascot"] || ""
36+ readonly property string title: root.widgetData["title"] || ""
37+ readonly property string subtitle: root.widgetData["subtitle"] || ""
38+ readonly property color fontColor: "grey"
39+
40+ implicitHeight: row.height + row.margins * 2
3641 width: parent.width
3742
38− titleSize: "large"
39− // TODO Change "grey" to Ubuntu.Components.Palette color once updated.
40− fontColor: "grey"
43+ Row {
44+ id: row
45+ objectName: "outerRow"
46+
47+ property real margins: units.gu(1)
48+
49+ spacing: mascotShapeLoader.active ? margins : 0
50+ anchors {
51+ top: parent.top; left: parent.left; right: parent.right
52+ margins: margins
53+ leftMargin: spacing
54+ rightMargin: spacing
55+ }
56+
57+ Loader {
58+ id: mascotShapeLoader
59+ objectName: "mascotShapeLoader"
60+ active: headerRoot.mascot != ""
61+ visible: active
62+
63+ anchors.verticalCenter: parent.verticalCenter
64+ // TODO karni: Icon aspect-ratio is 8:7.5. Revisit these values to avoid fraction of pixels.
65+ width: units.gu(6)
66+ height: units.gu(5.625)
67+ readonly property int maxSize: Math.max(width, height) * 4
68+ asynchronous: true
69+
70+ sourceComponent: UbuntuShape {
71+ objectName: "mascotShape"
72+ visible: image.status === Image.Ready
73+ image: Image {
74+ source: headerRoot.mascot
75+ width: source ? mascotShapeLoader.width : 0
76+ height: mascotShapeLoader.height
77+
78+ sourceSize { width: mascotShapeLoader.maxSize; height: mascotShapeLoader.maxSize }
79+ fillMode: Image.PreserveAspectCrop
80+ horizontalAlignment: Image.AlignHCenter
81+ verticalAlignment: Image.AlignVCenter
82+ }
83+ }
84+ }
85+
86+ Column {
87+ objectName: "column"
88+ width: parent.width - x
89+ spacing: units.dp(2)
90+ anchors.verticalCenter: parent.verticalCenter
91+
92+ Label {
93+ id: titleLabel
94+ objectName: "titleLabel"
95+ anchors { left: parent.left; right: parent.right }
96+ elide: Text.ElideRight
97+ font.weight: Font.Normal
98+ fontSize: "large"
99+ wrapMode: Text.Wrap
100+ maximumLineCount: 2
101+ color: headerRoot.fontColor
102+ text: headerRoot.title
103+ }
104+
105+ Loader {
106+ active: titleLabel.text && headerRoot.subtitle
107+ anchors { left: parent.left; right: parent.right }
108+ sourceComponent: Label {
109+ id: subtitleLabel
110+ objectName: "subtitleLabel"
111+ elide: Text.ElideRight
112+ fontSize: "small"
113+ font.weight: Font.Light
114+ color: headerRoot.fontColor
115+ text: headerRoot.subtitle
116+ }
117+ }
118+ }
119+ }
41120 }
121+
42122}
qml/Dash/Previews/PreviewTextSummary.qml+4−2
@@ -37,6 +37,7 @@ PreviewWidget {
3737 left: parent.left
3838 right: parent.right
3939 }
40+ height: visible ? implicitHeight : 0
4041 fontSize: "large"
4142 // TODO karni: Yet another fix requiring Palette update.
4243 color: "grey" //Theme.palette.selected.backgroundText
@@ -68,7 +69,7 @@ PreviewWidget {
6869 wrapMode: Text.Wrap
6970
7071 Behavior on height {
71− UbuntuNumberAnimation {}
72+ UbuntuNumberAnimation { duration: UbuntuAnimation.SnapDuration }
7273 }
7374 }
7475
@@ -79,8 +80,9 @@ PreviewWidget {
7980 left: parent.left
8081 right: parent.right
8182 top: textLabel.bottom
82− topMargin: units.gu(1)
83+ topMargin: visible ? units.gu(1) : 0
8384 }
85+ height: visible ? implicitHeight : 0
8486 visible: textLabel.lineCount > textLabel.maximumCollapsedLineCount
8587 }
8688}
qml/Dash/ScopeListView.qml+1−1
@@ -15,7 +15,7 @@
1515 */
1616
1717import QtQuick 2.0
18−import DashViews 0.1
18+import Dash 0.1
1919
2020ListViewWithPageHeader {
2121 maximumFlickVelocity: height * 10
qml/Dash/graphics/carousel_dropshadow@27.pngnew file

Binary file not shown.

qml/Dash/graphics/carousel_dropshadow@27.scinew file+5
@@ -0,0 +1,5 @@
1+border.left: 108
2+border.top: 108
3+border.bottom: 108
4+border.right: 108
5+source: carousel_dropshadow@27.png
qml/Greeter/LoginList.qml+1
@@ -193,6 +193,7 @@ Item {
193193 }
194194
195195 onAccepted: {
196+ if (text == "") return; // Might be useful anyway, but mainly workaround for LP 1324159
196197 if (!enabled)
197198 return;
198199 root.focus = true; // so that it can handle Escape presses for us
qml/Notifications/NotificationMenuItemFactory.qml−1
@@ -20,7 +20,6 @@
2020import QtQuick 2.0
2121import Ubuntu.Components 0.1
2222import "../Components"
23−import "../Greeter"
2423
2524Loader {
2625 id: menuFactory
qml/ScopeTool.qml+1−1
@@ -74,7 +74,7 @@ Rectangle {
7474
7575 model: filteredScopes
7676 searchHistory: SearchHistoryModel { }
77− property Scope scope: scopes.get(currentIndex)
77+ property var scope: scopes.getScope(currentIndex)
7878
7979 anchors {
8080 top: parent.top
qml/Shell.qml+9−59
@@ -28,9 +28,7 @@ import "Dash"
2828import "Greeter"
2929import "Launcher"
3030import "Panel"
31−import "Hud"
3231import "Components"
33−import "Bottombar"
3432import "Notifications"
3533import Unity.Notifications 1.0 as NotificationBackend
3634
@@ -119,15 +117,6 @@ FocusScope {
119117 // through the translucent parts of the shell surface.
120118 visible: !fullyCovered && !applicationSurfaceShouldBeSeen
121119
122− CrossFadeImage {
123− id: backgroundImage
124− objectName: "backgroundImage"
125−
126− anchors.fill: parent
127− source: shell.background
128− fillMode: Image.PreserveAspectCrop
129− }
130−
131120 Rectangle {
132121 anchors.fill: parent
133122 color: "black"
@@ -308,7 +297,7 @@ FocusScope {
308297
309298 readonly property int backgroundTopMargin: -panel.panelHeight
310299
311− hides: [launcher, panel.indicators, hud]
300+ hides: [launcher, panel.indicators]
312301 shown: false
313302 enabled: true
314303 showAnimation: StandardAnimation { property: "opacity"; to: 1 }
@@ -321,7 +310,8 @@ FocusScope {
321310 topMargin: panel.panelHeight
322311 }
323312 background: shell.background
324− pinLength: 4
313+ minPinLength: 4
314+ maxPinLength: 4
325315
326316 onEntered: LightDM.Greeter.respond(passphrase);
327317 onCancel: greeter.show()
@@ -375,7 +365,10 @@ FocusScope {
375365 width: parent.width
376366 height: parent.height - panel.panelHeight
377367
378− Behavior on x {SmoothedAnimation{velocity: 600}}
368+ Behavior on x {
369+ enabled: !launcher.dashSwipe
370+ StandardAnimation {}
371+ }
379372
380373 readonly property real showProgress: MathUtils.clamp((1 - x/width) + greeter.showProgress - 1, 0, 1)
381374
@@ -384,7 +377,7 @@ FocusScope {
384377 objectName: "greeter"
385378
386379 available: true
387− hides: [launcher, panel.indicators, hud]
380+ hides: [launcher, panel.indicators]
388381 shown: true
389382
390383 defaultBackground: shell.background
@@ -427,7 +420,7 @@ FocusScope {
427420 InputFilterArea {
428421 anchors.fill: parent
429422 blockInput: ApplicationManager.focusedApplicationId.length === 0 || greeter.shown || lockscreen.shown || launcher.shown
430− || panel.indicators.shown || hud.shown
423+ || panel.indicators.shown
431424 }
432425
433426 Connections {
@@ -492,47 +485,6 @@ FocusScope {
492485 }
493486 }
494487
495− Hud {
496− id: hud
497−
498− width: parent.width > units.gu(60) ? units.gu(40) : parent.width
499− height: parent.height
500−
501− available: !greeter.shown && !panel.indicators.shown && !lockscreen.shown && edgeDemo.dashEnabled
502− shown: false
503− showAnimation: StandardAnimation { property: "y"; duration: hud.showableAnimationDuration; to: 0; easing.type: Easing.Linear }
504− hideAnimation: StandardAnimation { property: "y"; duration: hud.showableAnimationDuration; to: hudRevealer.closedValue; easing.type: Easing.Linear }
505−
506− Connections {
507− target: ApplicationManager
508− onFocusedApplicationIdChanged: hud.hide()
509− }
510− }
511−
512− Revealer {
513− id: hudRevealer
514−
515− enabled: hud.shown
516− width: hud.width
517− anchors.left: hud.left
518− height: parent.height
519− target: hud.revealerTarget
520− closedValue: height
521− openedValue: 0
522− direction: Qt.RightToLeft
523− orientation: Qt.Vertical
524− handleSize: hud.handleHeight
525− onCloseClicked: target.hide()
526− }
527−
528− Bottombar {
529− id: bottombar
530− theHud: hud
531− anchors.fill: parent
532− enabled: hud.available
533− applicationIsOnForeground: ApplicationManager.focusedApplicationId
534− }
535−
536488 InputFilterArea {
537489 blockInput: launcher.shown
538490 anchors {
@@ -580,8 +532,6 @@ FocusScope {
580532 onShownChanged: {
581533 if (shown) {
582534 panel.indicators.hide()
583− hud.hide()
584− bottombar.hide()
585535 }
586536 }
587537 }
tests/mocks/Unity/iconutils.h → qml/Stages/Dot.qmlrenamed+9−13
@@ -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
@@ -12,18 +12,14 @@
1212 *
1313 * You should have received a copy of the GNU General Public License
1414 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Michal Hruby <michal.hruby@canonical.com>
1815 */
1916
20−#ifndef ICONUTILS_H
21−#define ICONUTILS_H
22−
23−#include <QString>
24−#include <QVariant>
25−
26−QString gIconToDeclarativeImageProviderString(QString const &giconString);
27−QString uriToThumbnailerProviderString(QString const &uri, QString const &mimetype, QVariantHash const &metadata);
17+import QtQuick 2.0
18+import Ubuntu.Components 0.1
2819
29−#endif
20+Rectangle {
21+ radius: width
22+ width: units.dp(6)
23+ height: width
24+ color: UbuntuColors.orange
25+}
qml/Stages/PhoneStage.qml+5−2
@@ -214,7 +214,7 @@ Item {
214214 Rectangle {
215215 id: appSplash2
216216 anchors.fill: parent
217− color: "white"
217+ color: "black"
218218 visible: priv.secondApplicationStarting
219219 }
220220 Image {
@@ -228,8 +228,11 @@ Item {
228228 Rectangle {
229229 id: appSplash
230230 anchors.fill: parent
231− color: "white"
231+ color: "black"
232232 visible: priv.applicationStarting
233+
234+ WaitingDots {
235+ }
233236 }
234237 Image {
235238 id: mainScreenshotImage
qml/Stages/StageWithSideStage.qml+8−2
@@ -282,7 +282,10 @@ Item {
282282 id: mainStageSplash
283283 anchors.fill: root
284284 anchors.rightMargin: root.width - sideStageImage.x
285− color: "white"
285+ color: "black"
286+
287+ WaitingDots {
288+ }
286289 }
287290
288291 SidestageHandle {
@@ -402,6 +405,9 @@ Item {
402405 id: sideStageSplash
403406 anchors.fill: parent
404407 anchors.leftMargin: sideStageImage.x
405− color: "white"
408+ color: "black"
409+
410+ WaitingDots {
411+ }
406412 }
407413}
qml/Stages/WaitingDots.qmlnew file+76
@@ -0,0 +1,76 @@
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.2
18+import Ubuntu.Components 0.1
19+
20+Item {
21+ id: waitingDots
22+
23+ // center in parent; waitingDots has no size therefore anchors.centerIn cannot be used
24+ x: parent.width / 2
25+ y: parent.height / 2
26+
27+ property var dots: [dot1, dot2, dot3]
28+ property var vertices: [[-units.gu(1), -units.gu(1)],
29+ [units.gu(1), -units.gu(1)],
30+ [0, units.gu(1)]]
31+ property int shift: 0
32+
33+ function cycle () {
34+ var n = vertices.length;
35+ shift = (shift + 1) % n;
36+
37+ for (var i = 0; i < n; i++) {
38+ dots[i].x = vertices[(i+shift) % n][0];
39+ dots[i].y = vertices[(i+shift) % n][1];
40+ }
41+ }
42+
43+ Timer {
44+ interval: 800
45+ running: waitingDots.visible
46+ repeat: true
47+ triggeredOnStart: true
48+ onTriggered: waitingDots.cycle()
49+ }
50+
51+
52+ Dot {
53+ id: dot1
54+ x: vertices[0][0]
55+ y: vertices[0][1]
56+ Behavior on x {XAnimator {duration: UbuntuAnimation.BriskDuration; easing: UbuntuAnimation.StandardEasing}}
57+ Behavior on y {YAnimator {duration: UbuntuAnimation.BriskDuration; easing: UbuntuAnimation.StandardEasing}}
58+ }
59+
60+ Dot {
61+ id: dot2
62+ x: vertices[1][0]
63+ y: vertices[1][1]
64+ Behavior on x {XAnimator {duration: UbuntuAnimation.BriskDuration; easing: UbuntuAnimation.StandardEasing}}
65+ Behavior on y {YAnimator {duration: UbuntuAnimation.BriskDuration; easing: UbuntuAnimation.StandardEasing}}
66+
67+ }
68+
69+ Dot {
70+ id: dot3
71+ x: vertices[2][0]
72+ y: vertices[2][1]
73+ Behavior on x {XAnimator {duration: UbuntuAnimation.BriskDuration; easing: UbuntuAnimation.StandardEasing}}
74+ Behavior on y {YAnimator {duration: UbuntuAnimation.BriskDuration; easing: UbuntuAnimation.StandardEasing}}
75+ }
76+}
src/ApplicationArguments.h+4−8
@@ -28,14 +28,10 @@ class ApplicationArguments : public QObject
2828{
2929 Q_OBJECT
3030public:
31− ApplicationArguments(const QStringList& args) {
32− if (args.contains(QLatin1String("-windowgeometry")) && args.size() > args.indexOf(QLatin1String("-windowgeometry")) + 1) {
33− QStringList geometryArg = args.at(args.indexOf(QLatin1String("-windowgeometry")) + 1).split('x');
34− if (geometryArg.size() == 2) {
35− m_size.rwidth() = geometryArg.at(0).toInt();
36− m_size.rheight() = geometryArg.at(1).toInt();
37− }
38− }
31+ // Not exposed to the app as setSize isn't invokable
32+ void setSize(int width, int height) {
33+ m_size.rwidth() = width;
34+ m_size.rheight() = height;
3935 }
4036
4137 Q_INVOKABLE bool hasGeometry() const { return m_size.isValid(); }
src/main.cpp+43−6
@@ -18,6 +18,7 @@
1818 */
1919
2020// Qt
21+#include <QCommandLineParser>
2122#include <QtQuick/QQuickView>
2223#include <QtGui/QGuiApplication>
2324#include <QtQml/QQmlEngine>
@@ -43,6 +44,32 @@ int startShell(int argc, const char** argv, void* server)
4344
4445 QGuiApplication::setApplicationName("Unity 8");
4546 QGuiApplication *application;
47+
48+ QCommandLineParser parser;
49+ parser.setApplicationDescription("Description: Unity 8 Shell");
50+ parser.addHelpOption();
51+
52+ QCommandLineOption fullscreenOption("fullscreen",
53+ "Run in fullscreen");
54+ parser.addOption(fullscreenOption);
55+
56+ QCommandLineOption framelessOption("frameless",
57+ "Run without window borders");
58+ parser.addOption(framelessOption);
59+
60+ QCommandLineOption mousetouchOption("mousetouch",
61+ "Allow the mouse to provide touch input");
62+ parser.addOption(mousetouchOption);
63+
64+ QCommandLineOption windowGeometryOption(QStringList() << "windowgeometry",
65+ "Specify the window geometry as [<width>x<height>]", "windowgeometry", "1");
66+ parser.addOption(windowGeometryOption);
67+
68+ QCommandLineOption testabilityOption("testability",
69+ "DISCOURAGED: Please set QT_LOAD_TESTABILITY instead. \n \
70+Load the testability driver");
71+ parser.addOption(testabilityOption);
72+
4673 if (isUbuntuMirServer) {
4774 QLibrary unityMir("unity-mir", 1);
4875 unityMir.load();
@@ -59,6 +86,11 @@ int startShell(int argc, const char** argv, void* server)
5986 application = new QGuiApplication(argc, (char**)argv);
6087 }
6188
89+ // Treat args with single dashes the same as arguments with two dashes
90+ // Ex: -fullscreen == --fullscreen
91+ parser.setSingleDashWordOptionMode(QCommandLineParser::ParseAsLongOptions);
92+ parser.process(*application);
93+
6294 QString indicatorProfile = qgetenv("UNITY_INDICATOR_PROFILE");
6395 if (indicatorProfile.isEmpty()) {
6496 indicatorProfile = "phone";
@@ -66,12 +98,17 @@ int startShell(int argc, const char** argv, void* server)
6698
6799 resolveIconTheme();
68100
69− QStringList args = application->arguments();
70− ApplicationArguments qmlArgs(args);
101+ ApplicationArguments qmlArgs;
102+ if (parser.isSet(windowGeometryOption) &&
103+ parser.value(windowGeometryOption).split('x').size() == 2)
104+ {
105+ QStringList geom = parser.value(windowGeometryOption).split('x');
106+ qmlArgs.setSize(geom.at(0).toInt(), geom.at(1).toInt());
107+ }
71108
72109 // The testability driver is only loaded by QApplication but not by QGuiApplication.
73110 // However, QApplication depends on QWidget which would add some unneeded overhead => Let's load the testability driver on our own.
74− if (args.contains(QLatin1String("-testability")) || getenv("QT_LOAD_TESTABILITY")) {
111+ if (parser.isSet(testabilityOption) || getenv("QT_LOAD_TESTABILITY")) {
75112 QLibrary testLib(QLatin1String("qttestability"));
76113 if (testLib.load()) {
77114 typedef void (*TasInitialize)(void);
@@ -94,14 +131,14 @@ int startShell(int argc, const char** argv, void* server)
94131 view->engine()->setBaseUrl(QUrl::fromLocalFile(::qmlDirectory()));
95132 view->rootContext()->setContextProperty("applicationArguments", &qmlArgs);
96133 view->rootContext()->setContextProperty("indicatorProfile", indicatorProfile);
97− if (args.contains(QLatin1String("-frameless"))) {
134+ if (parser.isSet(framelessOption)) {
98135 view->setFlags(Qt::FramelessWindowHint);
99136 }
100137
101138 // You will need this if you want to interact with touch-only components using a mouse
102139 // Needed only when manually testing on a desktop.
103140 MouseTouchAdaptor *mouseTouchAdaptor = 0;
104− if (args.contains(QLatin1String("-mousetouch"))) {
141+ if (parser.isSet(mousetouchOption)) {
105142 mouseTouchAdaptor = new MouseTouchAdaptor;
106143 application->installNativeEventFilter(mouseTouchAdaptor);
107144 }
@@ -125,7 +162,7 @@ int startShell(int argc, const char** argv, void* server)
125162 view->setSource(source);
126163 view->setColor("transparent");
127164
128− if (qgetenv("QT_QPA_PLATFORM") == "ubuntu" || isUbuntuMirServer || args.contains(QLatin1String("-fullscreen"))) {
165+ if (qgetenv("QT_QPA_PLATFORM") == "ubuntu" || isUbuntuMirServer || parser.isSet(fullscreenOption)) {
129166 view->showFullScreen();
130167 } else {
131168 view->show();
tests/autopilot/unity8/process_helpers.py+11−4
@@ -17,12 +17,19 @@
1717# along with this program. If not, see <http://www.gnu.org/licenses/>.
1818#
1919
20−from autopilot.introspection import (
21− get_proxy_object_for_existing_process,
22− ProcessSearchError,
23−)
2420import logging
2521import subprocess
22+import sys
23+
24+# This has to work in both python 3 (ap 1.5) and py2 (ap legacy 1.4.1) so we
25+# pick the correct location in each case. Remove the py2 branch once we no
26+# longer need to support python 2.
27+if sys.version >= '3':
28+ from autopilot.exceptions import ProcessSearchError
29+else:
30+ from autopilot.introspection import ProcessSearchError
31+from autopilot.introspection import get_proxy_object_for_existing_process
32+
2633from unity8.shell import emulators
2734from unity8.shell.emulators import main_window as main_window_emulator
2835
tests/autopilot/unity8/shell/emulators/dash.py+3−4
@@ -161,7 +161,7 @@ class GenericScopeView(emulators.UnityEmulatorBase):
161161
162162 """
163163 category_element = self._get_category_element(category)
164− icon = category_element.select_single('Card', title=app_name)
164+ icon = category_element.select_single('AbstractButton', title=app_name)
165165 # FIXME some categories need a long press in order to see the preview.
166166 # Some categories do not show previews, like recent apps.
167167 # --elopio - 2014-1-14
@@ -191,7 +191,7 @@ class DashApps(GenericScopeView):
191191
192192 """
193193 category_element = self._get_category_element(category)
194− application_cards = category_element.select_many('Card')
194+ application_cards = category_element.select_many('AbstractButton')
195195
196196 # sort by y, x
197197 application_cards = sorted(
@@ -201,8 +201,7 @@ class DashApps(GenericScopeView):
201201 result = []
202202 for card in application_cards:
203203 if card.objectName != 'cardToolCard':
204− card_header = card.select_single('CardHeader')
205− result.append(card_header.title)
204+ result.append(card.title)
206205 return result
207206
208207
tests/autopilot/unity8/shell/emulators/main_window.py−4
@@ -114,10 +114,6 @@ class QQuickView(emulators.UnityEmulatorBase):
114114 self.wait_select_single('Indicators', fullyOpened=True)
115115 return self._get_indicator_page(indicator_name)
116116
117− def get_shell_background(self):
118− return self.select_single(
119− "CrossFadeImage", objectName="backgroundImage")
120−
121117 @autopilot_logging.log_action(logger.info)
122118 def show_dash_swiping(self):
123119 """Show the dash swiping from the left."""
tests/mocks/AccountsService/CMakeLists.txt+1−12
@@ -7,15 +7,4 @@ add_library(MockAccountsService-qml MODULE
77
88qt5_use_modules(MockAccountsService-qml DBus Qml)
99
10−# copy files into build directory for shadow builds
11−file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/qmldir"
12− DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
13− )
14−
15−install(TARGETS MockAccountsService-qml
16− DESTINATION ${SHELL_INSTALL_QML}/mocks/AccountsService
17− )
18−
19−install(FILES qmldir
20− DESTINATION ${SHELL_INSTALL_QML}/mocks/AccountsService
21− )
10+add_unity8_mock(AccountsService 0.1 AccountsService TARGETS MockAccountsService-qml)
tests/mocks/AccountsService/qmldir+1
@@ -1,2 +1,3 @@
11module AccountsService
22plugin MockAccountsService-qml
3+typeinfo AccountsService.qmltypes
tests/mocks/CMakeLists.txt+30
@@ -1,3 +1,33 @@
1+include(QmlPlugins)
2+
3+# Set up and optionally install a mock plugin for unity8.
4+#
5+# add_unity8_mock(plugin version path
6+# [PREFIX string] # Install the plugin to the specified prefix under unity8 private plugin directory
7+# [...] # See export_qmlfiles and export_qmlplugin documentation for more options
8+# )
9+
10+macro(add_unity8_mock PLUGIN VERSION PATH)
11+ set(single PREFIX)
12+ cmake_parse_arguments(MOCK "" "${single}" "" ${ARGN})
13+
14+ if(MOCK_PREFIX)
15+ export_qmlfiles(${PLUGIN} ${PATH}
16+ DESTINATION ${SHELL_INSTALL_QML}/${MOCK_PREFIX}
17+ TARGET_PREFIX ${MOCK_PREFIX}-Mock
18+ ${MOCK_UNPARSED_ARGUMENTS}
19+ )
20+ export_qmlplugin(${PLUGIN} ${VERSION} ${PATH}
21+ DESTINATION ${SHELL_INSTALL_QML}/${MOCK_PREFIX}
22+ TARGET_PREFIX ${MOCK_PREFIX}-Mock
23+ ${MOCK_UNPARSED_ARGUMENTS}
24+ )
25+ else()
26+ export_qmlfiles(${PLUGIN} ${PATH} TARGET_PREFIX Mock ${MOCK_UNPARSED_ARGUMENTS})
27+ export_qmlplugin(${PLUGIN} ${VERSION} ${PATH} TARGET_PREFIX Mock ${MOCK_UNPARSED_ARGUMENTS})
28+ endif()
29+endmacro()
30+
131add_subdirectory(AccountsService)
232add_subdirectory(GSettings.1.0)
333add_subdirectory(HudClient)
tests/mocks/GSettings.1.0/CMakeLists.txt+1−4
@@ -17,7 +17,4 @@ target_link_libraries(FakeGSettingsQml
1717
1818qt5_use_modules(FakeGSettingsQml Qml)
1919
20−# copy qmldir file into build directory for shadow builds
21−file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/qmldir"
22− DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
23− )
20+add_unity8_mock(GSettings 1.0 GSettings.1.0 TARGETS FakeGSettingsQml)
tests/mocks/GSettings.1.0/qmldir+1
@@ -1,2 +1,3 @@
11module GSettings
22plugin FakeGSettingsQml
3+typeinfo GSettings.qmltypes
tests/mocks/HudClient/CMakeLists.txt+1−4
@@ -35,7 +35,4 @@ target_link_libraries(FakeHudClientQml
3535
3636qt5_use_modules(FakeHudClientQml Qml)
3737
38−# copy qmldir file into build directory for shadow builds
39−file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/qmldir"
40− DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
41− )
38+add_unity8_mock(HudClient 0.1 HudClient TARGETS FakeHudClientQml)
tests/mocks/HudClient/qmldir+2
@@ -1 +1,3 @@
1+module HudClient
12plugin FakeHudClientQml
3+typeinfo HudClient.qmltypes
tests/mocks/LightDM/CMakeLists.txt+5−12
@@ -43,15 +43,8 @@ target_link_libraries(MockLightDM-qml
4343
4444qt5_use_modules(MockLightDM-qml DBus Gui Qml)
4545
46−# copy qmldir file into build directory for shadow builds
47−file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/qmldir"
48− DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
49− )
50−
51−install(TARGETS MockLightDM-qml
52− DESTINATION ${SHELL_INSTALL_QML}/mocks/LightDM
53− )
54−
55−install(FILES qmldir
56− DESTINATION ${SHELL_INSTALL_QML}/mocks/LightDM
57− )
46+add_unity8_mock(LightDM 0.1 LightDM
47+ PREFIX mocks
48+ TARGETS MockLightDM-qml
49+ ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}/full"
50+)
tests/mocks/LightDM/qmldir+1
@@ -1,2 +1,3 @@
11module LightDM
22plugin MockLightDM-qml
3+typeinfo LightDM.qmltypes
tests/mocks/Powerd/CMakeLists.txt+1−12
@@ -7,15 +7,4 @@ add_library(MockPowerd-qml MODULE
77
88qt5_use_modules(MockPowerd-qml Qml)
99
10−# copy qmldir file into build directory for shadow builds
11−file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/qmldir"
12− DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
13− )
14−
15−install(TARGETS MockPowerd-qml
16− DESTINATION ${SHELL_INSTALL_QML}/mocks/Powerd
17− )
18−
19−install(FILES qmldir
20− DESTINATION ${SHELL_INSTALL_QML}/mocks/Powerd
21− )
10+add_unity8_mock(Powerd 0.1 Powerd TARGETS MockPowerd-qml)
tests/mocks/Powerd/qmldir+1
@@ -1,2 +1,3 @@
11module Powerd
22plugin MockPowerd-qml
3+typeinfo Powerd.qmltypes
tests/mocks/QMenuModel/CMakeLists.txt+2−12
@@ -1,15 +1,3 @@
1−file(GLOB QMLFILES
2− *.qml
3− *.js
4− qmldir
5−)
6−
7−# copy files into build directory for shadow builds
8−add_custom_target(QMenuModelQmlFiles ALL
9− COMMAND cp ${QMLFILES} ${CMAKE_CURRENT_BINARY_DIR}
10− DEPENDS ${QMLFILES}
11−)
12−
131include_directories(
142 ${Qt5Core_INCLUDE_DIRS}
153 ${Qt5Quick_INCLUDE_DIRS}
@@ -32,3 +20,5 @@ qt5_use_modules(QMenuModelQml Core Quick)
3220set_target_properties(QMenuModelQml PROPERTIES
3321 OUTPUT_NAME qmenumodel
3422 VERSION 0)
23+
24+add_unity8_mock(QMenuModel 0.1 QMenuModel TARGETS QMenuModelQml)
tests/mocks/QMenuModel/qmldir+1
@@ -1,5 +1,6 @@
11module QMenuModel
22plugin qmenumodel
3+typeinfo QMenuModel.qmltypes
34
45QDBusActionGroup 0.1 QDBusActionGroup.qml
56UnityMenuAction 0.1 UnityMenuAction.qml
tests/mocks/QtMultimedia/CMakeLists.txt+1−12
@@ -5,15 +5,4 @@ add_library(QtMultimedia-qml MODULE
55
66qt5_use_modules(QtMultimedia-qml Qml)
77
8−# copy qmldir file into build directory for shadow builds
9−file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/qmldir"
10− DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
11− )
12−
13−install(TARGETS QtMultimedia-qml
14− DESTINATION ${SHELL_INSTALL_QML}/mocks/QtMultimedia
15− )
16−
17−install(FILES qmldir
18− DESTINATION ${SHELL_INSTALL_QML}/mocks/QtMultimedia
19− )
8+add_unity8_mock(QtMultimedia 5.0 QtMultimedia TARGETS QtMultimedia-qml)
tests/mocks/QtMultimedia/qmldir+1
@@ -1,2 +1,3 @@
11module QtMultimedia
22plugin QtMultimedia-qml
3+typeinfo QtMultimedia.qmltypes
tests/mocks/Ubuntu/DownloadDaemonListener/CMakeLists.txt+1−9
@@ -7,12 +7,4 @@ add_library(FakeUbuntuDownloadDaemonListenerQml MODULE ${FakeUbuntuDownloadDaemo
77
88qt5_use_modules(FakeUbuntuDownloadDaemonListenerQml Core Quick)
99
10−# copy files into build directory for shadow builds
11−add_custom_target(UbuntuDownloadQmlDirFile ALL
12− COMMAND cp "${CMAKE_CURRENT_SOURCE_DIR}/qmldir" ${CMAKE_CURRENT_BINARY_DIR}
13− DEPENDS qmldir
14−)
15−
16−install(TARGETS FakeUbuntuDownloadDaemonListenerQml
17− DESTINATION ${SHELL_INSTALL_QML}/mocks/Ubuntu/DownloadDaemonListener
18− )
10+add_unity8_mock(Ubuntu.DownloadDaemonListener 0.1 Ubuntu/DownloadDaemonListener TARGETS FakeUbuntuDownloadDaemonListenerQml)
tests/mocks/Ubuntu/DownloadDaemonListener/qmldir+1
@@ -1,2 +1,3 @@
11module Ubuntu.DownloadDaemonListener
22plugin FakeUbuntuDownloadDaemonListenerQml
3+typeinfo DownloadDaemonListener.qmltypes
tests/mocks/Ubuntu/Thumbnailer/CMakeLists.txt+1−7
@@ -1,7 +1 @@
1−# copy files into build directory for shadow builds
2−add_custom_target(UbuntuThumbnailerQmlDirFile ALL
3− COMMAND cp "${CMAKE_CURRENT_SOURCE_DIR}/qmldir" ${CMAKE_CURRENT_BINARY_DIR}
4− DEPENDS qmldir
5−)
6−
7−install(FILES qmldir DESTINATION ${SHELL_INSTALL_QML}/mocks/Ubuntu/Thumbnailer)
1+add_unity8_mock(Ubuntu.Thumbnailer 0.1 Ubuntu/Thumbnailer)
tests/mocks/Ubuntu/Thumbnailer/qmldir+2
@@ -1,2 +1,4 @@
11module Ubuntu.Thumbnailer
2+typeinfo Thumbnailer.qmltypes
3+
24Dummy 0.1 Dummy.qml
tests/mocks/Unity/Application/CMakeLists.txt+9−35
@@ -12,40 +12,14 @@ set(FakeUnityApplicationQml_SOURCES
1212
1313add_library(FakeUnityApplicationQml MODULE ${FakeUnityApplicationQml_SOURCES})
1414
15−qt5_use_modules(FakeUnityApplicationQml Core Quick)
16−
17−# copy files into build directory for shadow builds
18−add_custom_target(UnityAppQmlDirFile ALL
19− COMMAND cp "${CMAKE_CURRENT_SOURCE_DIR}/qmldir" ${CMAKE_CURRENT_BINARY_DIR}
20− DEPENDS qmldir
21−)
22−add_custom_target(InputFilterAreaQmlFile ALL
23− COMMAND cp "${CMAKE_CURRENT_SOURCE_DIR}/InputFilterArea.qml" ${CMAKE_CURRENT_BINARY_DIR}
24− DEPENDS InputFilterArea.qml
25−)
26−add_custom_target(OSKControllerQmlFile ALL
27− COMMAND cp "${CMAKE_CURRENT_SOURCE_DIR}/OSKController.qml" ${CMAKE_CURRENT_BINARY_DIR}
28− DEPENDS OSKController.qml
29−)
15+add_library(NonMirUnityApplicationQml MODULE ${FakeUnityApplicationQml_SOURCES})
16+set_target_properties(NonMirUnityApplicationQml PROPERTIES OUTPUT_NAME FakeUnityApplicationQml)
3017
31−install(TARGETS FakeUnityApplicationQml
32− DESTINATION ${SHELL_INSTALL_QML}/mocks/Unity/Application
33− )
34−
35−install(FILES qmldir InputFilterArea.qml OSKController.qml
36− DESTINATION ${SHELL_INSTALL_QML}/mocks/Unity/Application
37− )
38−
39−# Duplicate the mock to nonmirplugins
40−# In shadow builds we just link it, in real installs we also install it to the other path
41−add_custom_target(OSKControllerQmlFile2 ALL
42− COMMAND mkdir -p ${CMAKE_BINARY_DIR}/nonmirplugins/Unity && rm -f ${CMAKE_BINARY_DIR}/nonmirplugins/Unity/Application && ln -s ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_BINARY_DIR}/nonmirplugins/Unity
43− DEPENDS qmldir
44−)
45−install(TARGETS FakeUnityApplicationQml
46− DESTINATION ${SHELL_INSTALL_QML}/nonmirplugins/Unity/Application
47− )
18+qt5_use_modules(FakeUnityApplicationQml Core Quick)
19+qt5_use_modules(NonMirUnityApplicationQml Core Quick)
4820
49−install(FILES qmldir InputFilterArea.qml OSKController.qml
50− DESTINATION ${SHELL_INSTALL_QML}/nonmirplugins/Unity/Application
51− )
21+add_unity8_mock(Unity.Application 0.1 Unity/Application PREFIX mocks TARGETS FakeUnityApplicationQml)
22+add_unity8_mock(Unity.Application 0.1 Unity/Application
23+ PREFIX nonmirplugins
24+ TARGETS NonMirUnityApplicationQml
25+ BINARY_DIR ${CMAKE_BINARY_DIR}/nonmirplugins)
tests/mocks/Unity/Application/qmldir+2
@@ -1,4 +1,6 @@
11module Unity.Application
22plugin FakeUnityApplicationQml
3+typeinfo Application.qmltypes
4+
35InputFilterArea 0.1 InputFilterArea.qml
46OSKController 0.1 OSKController.qml
tests/mocks/Unity/CMakeLists.txt+9−13
@@ -6,6 +6,7 @@ add_subdirectory(Notifications)
66pkg_search_module(DEE dee-1.0 REQUIRED)
77pkg_search_module(GOBJECT gobject-2.0 REQUIRED)
88pkg_search_module(DEEQT libdee-qt5 REQUIRED)
9+pkg_check_modules(SCOPES_API REQUIRED unity-shell-scopes=1)
910
1011include_directories(
1112 ${CMAKE_CURRENT_BINARY_DIR}
@@ -18,7 +19,6 @@ include_directories(
1819add_definitions(-DQT_NO_KEYWORDS)
1920
2021set(UnityQML_SOURCES
21− iconutils.cpp
2222 fake_scope.cpp
2323 fake_scopes.cpp
2424 fake_categories.cpp
@@ -27,6 +27,13 @@ set(UnityQML_SOURCES
2727 fake_previewstack.cpp
2828 fake_previewwidgetmodel.cpp
2929 fake_unity_plugin.cpp
30+ ${SCOPES_API_INCLUDEDIR}/unity/shell/scopes/CategoriesInterface.h
31+ ${SCOPES_API_INCLUDEDIR}/unity/shell/scopes/PreviewModelInterface.h
32+ ${SCOPES_API_INCLUDEDIR}/unity/shell/scopes/PreviewStackInterface.h
33+ ${SCOPES_API_INCLUDEDIR}/unity/shell/scopes/PreviewWidgetModelInterface.h
34+ ${SCOPES_API_INCLUDEDIR}/unity/shell/scopes/ResultsModelInterface.h
35+ ${SCOPES_API_INCLUDEDIR}/unity/shell/scopes/ScopeInterface.h
36+ ${SCOPES_API_INCLUDEDIR}/unity/shell/scopes/ScopesInterface.h
3037)
3138
3239add_library(FakeUnityQml MODULE ${UnityQML_SOURCES})
@@ -39,15 +46,4 @@ target_link_libraries(FakeUnityQml
3946
4047qt5_use_modules(FakeUnityQml Qml)
4148
42−# copy qmldir file into build directory for shadow builds
43−file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/qmldir"
44− DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
45− )
46−
47−install(TARGETS FakeUnityQml
48− DESTINATION ${SHELL_INSTALL_QML}/scopefakes/Unity
49− )
50−
51−install(FILES qmldir
52− DESTINATION ${SHELL_INSTALL_QML}/scopefakes/Unity
53− )
49+add_unity8_mock(Unity 0.2 Unity PREFIX scopefakes TARGETS FakeUnityQml)
tests/mocks/Unity/Indicators/CMakeLists.txt+1−14
@@ -37,17 +37,4 @@ target_link_libraries(IndicatorsFakeQml)
3737
3838qt5_use_modules(IndicatorsFakeQml Core Qml Quick)
3939
40−file(GLOB IndicatorsFake_QMLFILES
41− *.qml
42− qml/FakeMenuPage.qml
43−)
44−
45−# copy qmldir file into build directory for shadow builds
46−file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/qmldir"
47− DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
48−)
49−
50−# copy qmldir file into build directory for shadow builds
51−file(COPY ${IndicatorsFake_QMLFILES}
52− DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
53−)
40+add_unity8_mock(Unity.Indicators 0.1 Unity/Indicators TARGETS IndicatorsFakeQml)
tests/mocks/Unity/Indicators/qml/FakeMenuPage.qml → tests/mocks/Unity/Indicators/FakeMenuPage.qmlrenamed

The content is the same.

tests/mocks/Unity/Indicators/qmldir+1
@@ -1,5 +1,6 @@
11module Unity.Indicators
22plugin IndicatorsFakeQml
3+typeinfo Indicators.qmltypes
34
45CachedUnityMenuModel 0.1 CachedUnityMenuModel.qml
56IndicatorBase 0.1 IndicatorBase.qml
tests/mocks/Unity/Launcher/CMakeLists.txt+1−5
@@ -20,8 +20,4 @@ add_library(MockLauncherPlugin MODULE ${MockLauncherModel_SOURCES})
2020
2121qt5_use_modules(MockLauncherPlugin Core Quick)
2222
23−# copy files into build directory for shadow builds
24−add_custom_target(LauncherPluginQmlDirFile ALL
25− COMMAND cp "${CMAKE_CURRENT_SOURCE_DIR}/qmldir" ${CMAKE_CURRENT_BINARY_DIR}
26− DEPENDS qmldir
27−)
23+add_unity8_mock(Unity.Launcher 0.1 Unity/Launcher TARGETS MockLauncherPlugin)
tests/mocks/Unity/Launcher/MockLauncherModel.cpp+5
@@ -183,6 +183,11 @@ void MockLauncherModel::setUser(const QString &username)
183183 // TODO: implement this...
184184}
185185
186+QString MockLauncherModel::getUrlForAppId(const QString &appId) const
187+{
188+ return "application:///" + appId + ".desktop";
189+}
190+
186191void MockLauncherModel::setApplicationManager(unity::shell::application::ApplicationManagerInterface *applicationManager)
187192{
188193 Q_UNUSED(applicationManager)
tests/mocks/Unity/Launcher/MockLauncherModel.h+1
@@ -44,6 +44,7 @@ public:
4444 Q_INVOKABLE void requestRemove(const QString &appId);
4545 Q_INVOKABLE void quickListActionInvoked(const QString &appId, int actionIndex);
4646 Q_INVOKABLE void setUser(const QString &username);
47+ Q_INVOKABLE QString getUrlForAppId(const QString &appId) const;
4748
4849 unity::shell::application::ApplicationManagerInterface *applicationManager() const;
4950 void setApplicationManager(unity::shell::application::ApplicationManagerInterface *applicationManager);
tests/mocks/Unity/Launcher/qmldir+1
@@ -1,2 +1,3 @@
11module Unity.Launcher
22plugin MockLauncherPlugin
3+typeinfo Launcher.qmltypes
tests/mocks/Unity/Notifications/CMakeLists.txt+1−11
@@ -1,11 +1 @@
1−file(GLOB QMLFILES
2− *.qml
3− *.js
4− qmldir
5−)
6−
7−# copy files into build directory for shadow builds
8−add_custom_target(NotificationsQmlFiles ALL
9− COMMAND cp ${QMLFILES} ${CMAKE_CURRENT_BINARY_DIR}
10− DEPENDS ${QMLFILES}
11−)
1+add_unity8_mock(Unity.Notifications 1.0 Unity/Notifications)
tests/mocks/Unity/Notifications/qmldir+1
@@ -1,2 +1,3 @@
11module Unity.Notifications
22Notification 1.0 notification.js
3+typeinfo Notifications.qmltypes
tests/mocks/Unity/fake_categories.cpp+26−25
@@ -22,24 +22,9 @@
2222#include "fake_resultsmodel.h"
2323
2424Categories::Categories(int category_count, QObject* parent)
25− : QAbstractListModel(parent)
25+ : unity::shell::scopes::CategoriesInterface(parent)
2626 , m_category_count(category_count)
2727{
28− m_roles[Categories::RoleCategoryId] = "categoryId";
29− m_roles[Categories::RoleName] = "name";
30− m_roles[Categories::RoleIcon] = "icon";
31− m_roles[Categories::RoleRawRendererTemplate] = "rawRendererTemplate";
32− m_roles[Categories::RoleRenderer] = "renderer";
33− m_roles[Categories::RoleComponents] = "components";
34− m_roles[Categories::RoleProgressSource] = "progressSource";
35− m_roles[Categories::RoleResults] = "results";
36− m_roles[Categories::RoleCount] = "count";
37−}
38−
39−QHash<int, QByteArray>
40−Categories::roleNames() const
41−{
42− return m_roles;
4328}
4429
4530int Categories::rowCount(const QModelIndex& /*parent*/) const
@@ -65,6 +50,11 @@ void Categories::addSpecialCategory(QString const& categoryId, QString const& na
6550 }
6651}
6752
53+bool Categories::overrideCategoryJson(QString const& categoryId, QString const& json)
54+{
55+ qFatal("Using un-implemented Categories::overrideCategoryJson");
56+}
57+
6858void Categories::countChanged()
6959{
7060 QObject* countObject = sender();
@@ -108,7 +98,12 @@ Categories::data(const QModelIndex& index, int role) const
10898 case RoleRenderer:
10999 {
110100 QVariantMap map;
111− map["category-layout"] = index.row() % 2 == 0 ? "grid" : "carousel";
101+ if (index.row() % 2 == 0) {
102+ map["category-layout"] = "grid";
103+ } else {
104+ map["category-layout"] = "carousel";
105+ map["overlay"] = true;
106+ }
112107 map["card-size"] = "small";
113108 return map;
114109 }
@@ -121,9 +116,6 @@ Categories::data(const QModelIndex& index, int role) const
121116 map["title"] = "HOLA";
122117 return map;
123118 }
124− case RoleProgressSource:
125− qFatal("Using un-implemented RoleProgressSource Categories role");
126− return QVariant();
127119 case RoleResults:
128120 return QVariant();
129121 case RoleCount:
@@ -146,22 +138,31 @@ Categories::data(const QModelIndex& index, int role) const
146138 case RoleRenderer:
147139 {
148140 QVariantMap map;
149− map["category-layout"] = index.row() % 2 == 0 ? "grid" : "carousel";
141+ if (index.row() % 2 == 0) {
142+ map["category-layout"] = "grid";
143+ } else {
144+ map["category-layout"] = "carousel";
145+ map["card-size"] = "medium";
146+ map["collapsed-rows"] = 2;
147+ map["overlay"] = true;
148+ }
150149 map["card-size"] = "small";
151150 return map;
152151 }
153152 case RoleComponents:
154153 {
155154 QVariantMap map, artMap;
156− artMap["aspect-ratio"] = "1.0";
155+ if (index.row() % 2 != 0) {
156+ artMap["aspect-ratio"] = QString("1.%1").arg(index.row());
157+ } else {
158+ artMap["aspect-ratio"] = "1.0";
159+ }
157160 artMap["field"] = "art";
158161 map["art"] = artMap;
159162 map["title"] = "HOLA";
163+ map["subtitle"] = "HOLA";
160164 return map;
161165 }
162− case RoleProgressSource:
163− qFatal("Using un-implemented RoleProgressSource Categories role");
164− return QVariant();
165166 case RoleResults:
166167 return QVariant::fromValue(resultsModel);
167168 case RoleCount:
tests/mocks/Unity/fake_categories.h+5−18
@@ -17,44 +17,31 @@
1717#ifndef FAKE_CATEGORIES_H
1818#define FAKE_CATEGORIES_H
1919
20+#include <unity/shell/scopes/CategoriesInterface.h>
21+
2022// Qt
21−#include <QAbstractListModel>
2223#include <QList>
2324
2425class ResultsModel;
2526
26−class Categories : public QAbstractListModel
27+class Categories : public unity::shell::scopes::CategoriesInterface
2728{
2829 Q_OBJECT
2930
30− Q_ENUMS(Roles)
31−
3231public:
3332 Categories(int category_count, QObject* parent = 0);
34− enum Roles {
35− RoleCategoryId,
36− RoleName,
37− RoleIcon,
38− RoleRawRendererTemplate,
39− RoleRenderer,
40− RoleComponents,
41− RoleProgressSource, // maybe
42− RoleResults,
43− RoleCount
44− };
4533
4634 QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
47− QHash<int, QByteArray> roleNames() const override;
4835 int rowCount(const QModelIndex& parent = QModelIndex()) const override;
4936
50− Q_INVOKABLE void addSpecialCategory(QString const& categoryId, QString const& name, QString const& icon, QString const& rawTemplate, QObject* countObject);
37+ Q_INVOKABLE void addSpecialCategory(QString const& categoryId, QString const& name, QString const& icon, QString const& rawTemplate, QObject* countObject) override;
38+ Q_INVOKABLE bool overrideCategoryJson(QString const& categoryId, QString const& json) override;
5139
5240private Q_SLOTS:
5341 void countChanged();
5442
5543private:
5644 mutable QHash<int, ResultsModel*> m_resultsModels;
57− QHash<int, QByteArray> m_roles;
5845 int m_category_count;
5946
6047 struct CategoryData {
tests/mocks/Unity/fake_previewmodel.cpp+2−15
@@ -27,22 +27,14 @@
2727// Qt
2828#include <QDebug>
2929
30−PreviewModel::PreviewModel(QObject* parent) : QAbstractListModel(parent)
30+PreviewModel::PreviewModel(QObject* parent)
31+ : unity::shell::scopes::PreviewModelInterface(parent)
3132{
3233 // we have one column by default
3334 PreviewWidgetModel* columnModel = new PreviewWidgetModel(this);
3435 m_previewWidgetModels.append(columnModel);
3536}
3637
37−QHash<int, QByteArray> PreviewModel::roleNames() const
38−{
39− QHash<int, QByteArray> roles;
40−
41− roles[Roles::RoleColumnModel] = "columnModel";
42−
43− return roles;
44−}
45−
4638void PreviewModel::setWidgetColumnCount(int count)
4739{
4840 if (count != 1) {
@@ -65,11 +57,6 @@ bool PreviewModel::processingAction() const
6557 return false;
6658}
6759
68−void PreviewModel::setProcessingAction(bool /*processing*/)
69−{
70− qFatal("PreviewModel::setProcessingAction not implemented");
71−}
72−
7360int PreviewModel::rowCount(const QModelIndex&) const
7461{
7562 return m_previewWidgetModels.size();
tests/mocks/Unity/fake_previewmodel.h+7−25
@@ -18,47 +18,29 @@
1818#ifndef FAKE_PREVIEWMODEL_H
1919#define FAKE_PREVIEWMODEL_H
2020
21−#include <QAbstractListModel>
21+#include <unity/shell/scopes/PreviewModelInterface.h>
22+
2223#include <QSharedPointer>
2324#include <QVariantMap>
2425
2526class PreviewWidgetModel;
2627
27−class PreviewModel : public QAbstractListModel
28+class PreviewModel : public unity::shell::scopes::PreviewModelInterface
2829{
2930 Q_OBJECT
3031
31− Q_ENUMS(Roles)
32−
33− Q_PROPERTY(int widgetColumnCount READ widgetColumnCount WRITE setWidgetColumnCount NOTIFY widgetColumnCountChanged)
34− Q_PROPERTY(bool loaded READ loaded NOTIFY loadedChanged)
35− Q_PROPERTY(bool processingAction READ processingAction NOTIFY processingActionChanged)
36−
3732public:
3833 explicit PreviewModel(QObject* parent = 0);
3934
40− enum Roles {
41− RoleColumnModel
42− };
43−
4435 QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
45− QHash<int, QByteArray> roleNames() const override;
4636 int rowCount(const QModelIndex& parent = QModelIndex()) const override;
4737
48− void setWidgetColumnCount(int count);
49− int widgetColumnCount() const;
50− bool loaded() const;
51− bool processingAction() const;
52− void setProcessingAction(bool processing);
53−
54−Q_SIGNALS:
55− void widgetColumnCountChanged();
56− void loadedChanged();
57− void processingActionChanged();
58− void triggered(QString const&, QString const&, QVariantMap const&);
38+ void setWidgetColumnCount(int count) override;
39+ int widgetColumnCount() const override;
40+ bool loaded() const override;
41+ bool processingAction() const override;
5942
6043private:
61− QHash<int, QByteArray> m_roles;
6244 QList<PreviewWidgetModel*> m_previewWidgetModels;
6345};
6446
tests/mocks/Unity/fake_previewstack.cpp+3−11
@@ -21,7 +21,8 @@
2121#include "fake_previewmodel.h"
2222#include "fake_scope.h"
2323
24−PreviewStack::PreviewStack(QObject* parent) : QAbstractListModel(parent)
24+PreviewStack::PreviewStack(QObject* parent)
25+ : unity::shell::scopes::PreviewStackInterface(parent)
2526{
2627 m_previews << new PreviewModel(this);
2728}
@@ -30,15 +31,6 @@ PreviewStack::~PreviewStack()
3031{
3132}
3233
33−QHash<int, QByteArray> PreviewStack::roleNames() const
34−{
35− QHash<int, QByteArray> roles;
36−
37− roles[Roles::RolePreviewModel] = "previewModel";
38−
39− return roles;
40−}
41−
4234void PreviewStack::setWidgetColumnCount(int columnCount)
4335{
4436 if (columnCount != 1) {
@@ -56,7 +48,7 @@ int PreviewStack::rowCount(const QModelIndex&) const
5648 return m_previews.size();
5749}
5850
59−PreviewModel* PreviewStack::get(int index) const
51+unity::shell::scopes::PreviewModelInterface* PreviewStack::getPreviewModel(int index) const
6052{
6153 if (index >= m_previews.size()) {
6254 return nullptr;
tests/mocks/Unity/fake_previewstack.h+6−17
@@ -18,39 +18,28 @@
1818#ifndef FAKE_PREVIEWSTACK_H
1919#define FAKE_PREVIEWSTACK_H
2020
21−#include <QAbstractListModel>
21+#include <unity/shell/scopes/PreviewStackInterface.h>
22+
2223#include <QSharedPointer>
2324#include <QVariantMap>
2425
2526class PreviewModel;
2627
27−class PreviewStack : public QAbstractListModel
28+class PreviewStack : public unity::shell::scopes::PreviewStackInterface
2829{
2930 Q_OBJECT
3031
31− Q_ENUMS(Roles)
32−
33− Q_PROPERTY(int widgetColumnCount READ widgetColumnCount WRITE setWidgetColumnCount NOTIFY widgetColumnCountChanged)
34−
3532public:
3633 explicit PreviewStack(QObject* parent = 0);
3734 virtual ~PreviewStack();
3835
39− enum Roles {
40− RolePreviewModel
41− };
42−
4336 QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
44− QHash<int, QByteArray> roleNames() const override;
4537 int rowCount(const QModelIndex& parent = QModelIndex()) const override;
4638
47− Q_INVOKABLE PreviewModel* get(int index) const;
48−
49− void setWidgetColumnCount(int columnCount);
50− int widgetColumnCount() const;
39+ Q_INVOKABLE unity::shell::scopes::PreviewModelInterface* getPreviewModel(int index) const override;
5140
52−Q_SIGNALS:
53− void widgetColumnCountChanged();
41+ void setWidgetColumnCount(int columnCount) override;
42+ int widgetColumnCount() const override;
5443
5544private:
5645 QList<PreviewModel*> m_previews;
tests/mocks/Unity/fake_previewwidgetmodel.cpp+2−10
@@ -35,12 +35,9 @@ struct PreviewData
3535 }
3636};
3737
38−PreviewWidgetModel::PreviewWidgetModel(QObject* parent) : QAbstractListModel(parent)
38+PreviewWidgetModel::PreviewWidgetModel(QObject* parent)
39+ : unity::shell::scopes::PreviewWidgetModelInterface(parent)
3940{
40− m_roles[Roles::RoleWidgetId] = "widgetId";
41− m_roles[Roles::RoleType] = "type";
42− m_roles[Roles::RoleProperties] = "properties";
43−
4441 populateWidgets();
4542}
4643
@@ -60,11 +57,6 @@ void PreviewWidgetModel::populateWidgets()
6057
6158}
6259
63−QHash<int, QByteArray> PreviewWidgetModel::roleNames() const
64−{
65− return m_roles;
66−}
67−
6860int PreviewWidgetModel::rowCount(const QModelIndex&) const
6961{
7062 return m_previewWidgets.size();
tests/mocks/Unity/fake_previewwidgetmodel.h+3−12
@@ -18,33 +18,24 @@
1818#ifndef FAKE_PREVIEWWIDGETMODEL_H
1919#define FAKE_PREVIEWWIDGETMODEL_H
2020
21−#include <QAbstractListModel>
21+#include <unity/shell/scopes/PreviewWidgetModelInterface.h>
22+
2223#include <QSharedPointer>
2324#include <QVariantMap>
2425
2526class PreviewData;
2627
27−class PreviewWidgetModel : public QAbstractListModel
28+class PreviewWidgetModel : public unity::shell::scopes::PreviewWidgetModelInterface
2829{
2930 Q_OBJECT
3031
31− Q_ENUMS(Roles)
32−
3332public:
3433 explicit PreviewWidgetModel(QObject* parent = 0);
3534
36− enum Roles {
37− RoleWidgetId,
38− RoleType,
39− RoleProperties
40− };
41−
4235 QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
43− QHash<int, QByteArray> roleNames() const override;
4436 int rowCount(const QModelIndex& parent = QModelIndex()) const override;
4537
4638private:
47− QHash<int, QByteArray> m_roles;
4839 QList<QSharedPointer<PreviewData>> m_previewWidgets;
4940
5041 void populateWidgets();
tests/mocks/Unity/fake_resultsmodel.cpp+2−44
@@ -23,25 +23,10 @@
2323#include <paths.h>
2424
2525ResultsModel::ResultsModel(int result_count, int categoryId, QObject* parent)
26− : QAbstractListModel(parent)
26+ : unity::shell::scopes::ResultsModelInterface(parent)
2727 , m_result_count(result_count)
2828 , m_categoryId(categoryId)
2929{
30− m_roles[ResultsModel::RoleUri] = "uri";
31− m_roles[ResultsModel::RoleCategoryId] = "categoryId";
32− m_roles[ResultsModel::RoleDndUri] = "dndUri";
33− m_roles[ResultsModel::RoleResult] = "result";
34− m_roles[ResultsModel::RoleTitle] = "title";
35− m_roles[ResultsModel::RoleArt] = "art";
36− m_roles[ResultsModel::RoleSubtitle] = "subtitle";
37− m_roles[ResultsModel::RoleMascot] = "mascot";
38− m_roles[ResultsModel::RoleEmblem] = "emblem";
39− m_roles[ResultsModel::RoleOldPrice] = "oldPrice";
40− m_roles[ResultsModel::RolePrice] = "price";
41− m_roles[ResultsModel::RoleAltPrice] = "altPrice";
42− m_roles[ResultsModel::RoleRating] = "rating";
43− m_roles[ResultsModel::RoleAltRating] = "altRating";
44− m_roles[ResultsModel::RoleSummary] = "summary";
4530}
4631
4732QString ResultsModel::categoryId() const
@@ -54,12 +39,6 @@ void ResultsModel::setCategoryId(QString const& /*id*/)
5439 qFatal("Calling un-implemented ResultsModel::setCategoryId");
5540}
5641
57−QHash<int, QByteArray>
58−ResultsModel::roleNames() const
59−{
60− return m_roles;
61−}
62−
6342int ResultsModel::rowCount(const QModelIndex& parent) const
6443{
6544 Q_UNUSED(parent);
@@ -72,23 +51,6 @@ int ResultsModel::count() const
7251 return rowCount();
7352}
7453
75−QVariant ResultsModel::get(int row) const
76−{
77− if (row >= m_result_count || row < 0) return QVariantMap();
78−
79− QVariantMap result;
80− QModelIndex modelIndex(index(row));
81− QHashIterator<int, QByteArray> it(roleNames());
82− while (it.hasNext()) {
83− it.next();
84− QVariant val(data(modelIndex, it.key()));
85− if (val.isNull()) continue;
86− result[it.value()] = val;
87− }
88−
89− return result;
90−}
91−
9254QVariant
9355ResultsModel::data(const QModelIndex& index, int role) const
9456{
@@ -103,13 +65,9 @@ ResultsModel::data(const QModelIndex& index, int role) const
10365 case RoleArt:
10466 return qmlDirectory() + "graphics/applicationIcons/dash.png";
10567 case RoleSubtitle:
68+ return QString("Subtitle.%1.%2").arg(m_categoryId).arg(index.row());
10669 case RoleMascot:
10770 case RoleEmblem:
108− case RoleOldPrice:
109− case RolePrice:
110− case RoleAltPrice:
111− case RoleRating:
112− case RoleAltRating:
11371 case RoleSummary:
11472 default:
11573 return QVariant();
tests/mocks/Unity/fake_resultsmodel.h+5−37
@@ -21,58 +21,26 @@
2121#ifndef FAKE_RESULTS_MODEL_H
2222#define FAKE_RESULTS_MODEL_H
2323
24−#include <QAbstractListModel>
24+#include <unity/shell/scopes/ResultsModelInterface.h>
2525
26−class ResultsModel : public QAbstractListModel
26+class ResultsModel : public unity::shell::scopes::ResultsModelInterface
2727{
2828 Q_OBJECT
2929
30− Q_ENUMS(Roles)
31−
32− Q_PROPERTY(QString categoryId READ categoryId WRITE setCategoryId NOTIFY categoryIdChanged)
33− Q_PROPERTY(int count READ count NOTIFY countChanged)
34−
3530public:
3631 explicit ResultsModel(int result_count, int categoryId, QObject* parent = 0);
3732
38− enum Roles {
39− RoleUri,
40− RoleCategoryId,
41− RoleDndUri,
42− RoleResult,
43− // card components
44− RoleTitle,
45− RoleArt,
46− RoleSubtitle,
47− RoleMascot,
48− RoleEmblem,
49− RoleOldPrice,
50− RolePrice,
51− RoleAltPrice,
52− RoleRating,
53− RoleAltRating,
54− RoleSummary
55− };
56−
5733 int rowCount(const QModelIndex& parent = QModelIndex()) const override;
58− QHash<int, QByteArray> roleNames() const override;
5934 QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
6035
61− Q_INVOKABLE QVariant get(int row) const;
62−
6336 /* getters */
64− QString categoryId() const;
65− int count() const;
37+ QString categoryId() const override;
38+ int count() const override;
6639
6740 /* setters */
68− void setCategoryId(QString const& id);
69−
70−Q_SIGNALS:
71− void categoryIdChanged();
72− void countChanged();
41+ void setCategoryId(QString const& id) override;
7342
7443private:
75− QHash<int, QByteArray> m_roles;
7644 int m_result_count;
7745 int m_categoryId;
7846};
tests/mocks/Unity/fake_scope.cpp+3−14
@@ -22,7 +22,7 @@ Scope::Scope(QObject* parent) : Scope(QString(), QString(), false, parent)
2222}
2323
2424Scope::Scope(QString const& id, QString const& name, bool visible, QObject* parent)
25− : QObject(parent)
25+ : unity::shell::scopes::ScopeInterface(parent)
2626 , m_id(id)
2727 , m_name(name)
2828 , m_visible(visible)
@@ -61,15 +61,11 @@ QString Scope::shortcut() const {
6161 return QString("");
6262}
6363
64−bool Scope::connected() const {
65− return true;
66−}
67−
6864bool Scope::searchInProgress() const {
6965 return m_searching;
7066}
7167
72−Categories* Scope::categories() const {
68+unity::shell::scopes::CategoriesInterface* Scope::categories() const {
7369 return m_categories;
7470}
7571
@@ -89,13 +85,6 @@ bool Scope::isActive() const {
8985 return m_isActive;
9086}
9187
92−void Scope::setName(const QString &str) {
93− if (str != m_name) {
94− m_name = str;
95− Q_EMIT nameChanged(m_name);
96− }
97−}
98−
9988void Scope::setSearchQuery(const QString &str) {
10089 if (str != m_searchQuery) {
10190 m_searchQuery = str;
@@ -149,7 +138,7 @@ void Scope::cancelActivation()
149138{
150139}
151140
152−void Scope::closeScope(Scope* /*scope*/)
141+void Scope::closeScope(unity::shell::scopes::ScopeInterface* /*scope*/)
153142{
154143 qFatal("Scope::closeScope is not implemented");
155144}
tests/mocks/Unity/fake_scope.h+26−72
@@ -17,93 +17,47 @@
1717#ifndef FAKE_SCOPE_H
1818#define FAKE_SCOPE_H
1919
20+#include <unity/shell/scopes/ScopeInterface.h>
21+
2022#include "fake_categories.h"
2123#include "fake_previewstack.h"
2224
23−#include <QObject>
2425#include <QTimer>
2526
26−class Preview;
27−
28−class Scope : public QObject
27+class Scope : public unity::shell::scopes::ScopeInterface
2928{
3029 Q_OBJECT
3130
32− Q_PROPERTY(QString id READ id NOTIFY idChanged)
33− Q_PROPERTY(QString name READ name NOTIFY nameChanged)
34− Q_PROPERTY(QString iconHint READ iconHint NOTIFY iconHintChanged)
35− Q_PROPERTY(QString description READ description NOTIFY descriptionChanged)
36− Q_PROPERTY(QString searchHint READ searchHint NOTIFY searchHintChanged)
37− Q_PROPERTY(bool searchInProgress READ searchInProgress WRITE setSearchInProgress NOTIFY searchInProgressChanged)
38− Q_PROPERTY(bool visible READ visible NOTIFY visibleChanged)
39− Q_PROPERTY(QString shortcut READ shortcut NOTIFY shortcutChanged)
40− Q_PROPERTY(Categories* categories READ categories NOTIFY categoriesChanged)
41− //Q_PROPERTY(Filters* filters READ filters NOTIFY filtersChanged)
42−
43− Q_PROPERTY(QString searchQuery READ searchQuery WRITE setSearchQuery NOTIFY searchQueryChanged)
44− Q_PROPERTY(QString noResultsHint READ noResultsHint WRITE setNoResultsHint NOTIFY noResultsHintChanged)
45− Q_PROPERTY(QString formFactor READ formFactor WRITE setFormFactor NOTIFY formFactorChanged)
46− Q_PROPERTY(bool isActive READ isActive WRITE setActive NOTIFY isActiveChanged)
47−
4831public:
4932 Scope(QObject* parent = 0);
5033 Scope(QString const& id, QString const& name, bool visible, QObject* parent = 0);
5134
5235 /* getters */
53− QString id() const;
54− QString name() const;
55− QString iconHint() const;
56− QString description() const;
57− QString searchHint() const;
58− bool visible() const;
59− QString shortcut() const;
60− bool connected() const;
61− bool searchInProgress() const;
62− Categories* categories() const;
63− QString searchQuery() const;
64− QString noResultsHint() const;
65− QString formFactor() const;
66− bool isActive() const;
36+ QString id() const override;
37+ QString name() const override;
38+ QString iconHint() const override;
39+ QString description() const override;
40+ QString searchHint() const override;
41+ bool visible() const override;
42+ QString shortcut() const override;
43+ bool searchInProgress() const override;
44+ unity::shell::scopes::CategoriesInterface* categories() const override;
45+ QString searchQuery() const override;
46+ QString noResultsHint() const override;
47+ QString formFactor() const override;
48+ bool isActive() const override;
6749
6850 /* setters */
69− void setName(const QString& name);
70− void setSearchQuery(const QString& search_query);
71− void setNoResultsHint(const QString& hint);
72− void setFormFactor(const QString& form_factor);
73− void setActive(const bool);
74− void setSearchInProgress(const bool inProg);
75−
76− Q_INVOKABLE void activate(QVariant const& result);
77− Q_INVOKABLE PreviewStack* preview(QVariant const& result);
78− Q_INVOKABLE void cancelActivation();
79− Q_INVOKABLE void closeScope(Scope* scope);
80−
81−Q_SIGNALS:
82− void idChanged();
83− void nameChanged(const QString&);
84− void iconHintChanged(const QString&);
85− void descriptionChanged(const QString&);
86− void searchHintChanged(const QString&);
87− void searchInProgressChanged();
88− void visibleChanged(bool);
89− void shortcutChanged(const QString&);
90− void categoriesChanged();
91− //void filtersChanged();
92− void searchQueryChanged();
93− void noResultsHintChanged();
94− void formFactorChanged();
95− void isActiveChanged(bool);
96−
97− // signals triggered by activate(..) or preview(..) requests.
98− void showDash();
99− void hideDash();
100− void gotoUri(const QString &uri);
101− void activated();
102− void previewRequested(QVariant const& result);
103− void gotoScope(QString const& scopeId);
104− void openScope(Scope* scope);
105−
106− void activateApplication(const QString &desktop);
51+ void setSearchQuery(const QString& search_query) override;
52+ void setNoResultsHint(const QString& hint) override;
53+ void setFormFactor(const QString& form_factor) override;
54+ void setActive(const bool) override;
55+ Q_INVOKABLE void setSearchInProgress(const bool inProg); // This is not invokable in the Interface, here for testing benefits
56+
57+ Q_INVOKABLE void activate(QVariant const& result) override;
58+ Q_INVOKABLE PreviewStack* preview(QVariant const& result) override;
59+ Q_INVOKABLE void cancelActivation() override;
60+ Q_INVOKABLE void closeScope(unity::shell::scopes::ScopeInterface* scope) override;
10761
10862protected:
10963
tests/mocks/Unity/fake_scopes.cpp+11−26
@@ -25,19 +25,10 @@
2525#include <QTimer>
2626
2727Scopes::Scopes(QObject *parent)
28−: QAbstractListModel(parent)
29−, m_loaded(false)
30−, timer(this)
28+ : unity::shell::scopes::ScopesInterface(parent)
29+ , m_loaded(false)
30+ , timer(this)
3131{
32− m_roles[Scopes::RoleScope] = "scope";
33− m_roles[Scopes::RoleId] = "id";
34− m_roles[Scopes::RoleVisible] = "visible";
35− m_roles[Scopes::RoleTitle] = "title";
36−
37− QObject::connect(this, SIGNAL(rowsInserted(const QModelIndex &, int, int)), this, SIGNAL(countChanged()));
38− QObject::connect(this, SIGNAL(rowsRemoved(const QModelIndex &, int, int)), this, SIGNAL(countChanged()));
39− QObject::connect(this, SIGNAL(modelReset()), this, SIGNAL(countChanged()));
40−
4132 timer.setSingleShot(true);
4233 timer.setInterval(100);
4334 QObject::connect(&timer, SIGNAL(timeout()), this, SLOT(updateScopes()));
@@ -83,11 +74,6 @@ void Scopes::load()
8374 timer.start();
8475}
8576
86−QHash<int, QByteArray> Scopes::roleNames() const
87−{
88− return m_roles;
89−}
90−
9177int Scopes::rowCount(const QModelIndex&) const
9278{
9379 return m_scopes.count();
@@ -114,14 +100,18 @@ QVariant Scopes::data(const QModelIndex& index, int role) const
114100 }
115101}
116102
117−QVariant Scopes::get(int row) const
103+unity::shell::scopes::ScopeInterface* Scopes::getScope(int row) const
118104{
119− return data(QAbstractListModel::index(row), 0);
105+ if (row < 0 || row >= m_scopes.size()) {
106+ return nullptr;
107+ }
108+
109+ return m_scopes[row];
120110}
121111
122−QVariant Scopes::get(QString const&) const
112+unity::shell::scopes::ScopeInterface* Scopes::getScope(QString const&) const
123113{
124− return QVariant();
114+ return nullptr;
125115}
126116
127117QModelIndex Scopes::parent(const QModelIndex&) const
@@ -134,11 +124,6 @@ bool Scopes::loaded() const
134124 return m_loaded;
135125}
136126
137−int Scopes::count() const
138−{
139− return rowCount();
140−}
141−
142127void Scopes::addScope(Scope* scope)
143128{
144129 int index = rowCount();
tests/mocks/Unity/fake_scopes.h+7−24
@@ -19,36 +19,27 @@
1919#ifndef FAKE_SCOPES_H
2020#define FAKE_SCOPES_H
2121
22+#include <unity/shell/scopes/ScopesInterface.h>
23+
2224// Local
2325#include "fake_scope.h"
2426
2527// Qt
26−#include <QAbstractListModel>
2728#include <QList>
2829#include <QTimer>
2930
30−class Scopes : public QAbstractListModel
31+class Scopes : public unity::shell::scopes::ScopesInterface
3132{
3233 Q_OBJECT
33− Q_ENUMS(Roles)
34− Q_PROPERTY(bool loaded READ loaded NOTIFY loadedChanged)
35− Q_PROPERTY(int count READ count NOTIFY countChanged)
3634
3735public:
3836 explicit Scopes(QObject *parent = 0);
3937 ~Scopes();
4038
41− enum Roles {
42− RoleScope,
43− RoleId,
44− RoleVisible,
45− RoleTitle
46− };
47−
48− Q_INVOKABLE int rowCount(const QModelIndex& parent = QModelIndex()) const;
39+ Q_INVOKABLE int rowCount(const QModelIndex& parent = QModelIndex()) const override;
4940
50− Q_INVOKABLE QVariant get(int row) const;
51− Q_INVOKABLE QVariant get(const QString& scope_id) const;
41+ Q_INVOKABLE unity::shell::scopes::ScopeInterface* getScope(int row) const override;
42+ Q_INVOKABLE unity::shell::scopes::ScopeInterface* getScope(const QString& scope_id) const override;
5243
5344 Q_INVOKABLE void addScope(Scope* scope);
5445
@@ -56,23 +47,15 @@ public:
5647 Q_INVOKABLE void load();
5748
5849 QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
59− QHash<int, QByteArray> roleNames() const;
6050 QModelIndex parent ( const QModelIndex & index ) const;
6151
62− bool loaded() const;
63− int count() const;
64−
65−Q_SIGNALS:
66− void activateScopeRequested(const QString& scope_id);
67− void loadedChanged(bool);
68− void countChanged();
52+ bool loaded() const override;
6953
7054private Q_SLOTS:
7155 void updateScopes();
7256
7357private:
7458 QList<Scope*> m_scopes;
75− QHash<int, QByteArray> m_roles;
7659 bool m_loaded;
7760 QTimer timer;
7861};
tests/mocks/Unity/fake_unity_plugin.cpp+3−2
@@ -40,8 +40,9 @@ void FakeUnityPlugin::registerTypes(const char *uri)
4040 Q_ASSERT(uri == QLatin1String("Unity"));
4141
4242 qmlRegisterType<Scopes>(uri, 0, 2, "Scopes");
43− qmlRegisterType<Scope>(uri, 0, 2, "Scope");
44− qmlRegisterUncreatableType<Categories>(uri, 0, 2, "Categories", "Can't create Categories object in QML.");
43+ qmlRegisterType<Scope>(uri, 0, 2, "MockScope");
44+ qmlRegisterUncreatableType<unity::shell::scopes::ScopeInterface>(uri, 0, 2, "Scope", "Can't create Scope object in QML.");
45+ qmlRegisterUncreatableType<unity::shell::scopes::CategoriesInterface>(uri, 0, 2, "Categories", "Can't create Categories object in QML.");
4546 qmlRegisterUncreatableType<ResultsModel>(uri, 0, 2, "ResultsModel", "Can't create ResultsModel object in QML.");
4647 qmlRegisterType<PreviewModel>(uri, 0, 2, "FakePreviewModel");
4748 qmlRegisterUncreatableType<PreviewWidgetModel>(uri, 0, 2, "PreviewWidgetModel", "Can't create new PreviewWidgetModel in QML. Get them from PreviewModel instance.");
tests/mocks/Unity/iconutils.cppdeleted−124
@@ -1,124 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors:
17− * Michal Hruby <michal.hruby@canonical.com>
18− */
19−
20−#include "iconutils.h"
21−
22−#include <gio/gio.h>
23−
24−#include <QStringList>
25−#include <QUrl>
26−#include <QUrlQuery>
27−
28−#define BASE_THEME_ICON_URI "image://theme/"
29−#define BASE_THUMBNAILER_URI "image://thumbnailer/"
30−#define BASE_ALBUMART_URI "image://albumart/"
31−
32−QString gIconToDeclarativeImageProviderString(QString const &giconString)
33−{
34− if (giconString.isEmpty()) return giconString;
35−
36− if (giconString.startsWith('/') || giconString.startsWith(QLatin1String("http")) ||
37− giconString.startsWith(QLatin1String("file:")) || giconString.startsWith(QLatin1String("image:"))) {
38− return giconString;
39− }
40−
41− if (!giconString.startsWith(QLatin1String(". "))) {
42− // must be a themed icon
43− QString themedIcon(BASE_THEME_ICON_URI);
44− themedIcon.append(giconString);
45− return themedIcon;
46− }
47−
48− // special case annotated icon
49− if (giconString.startsWith(QLatin1String(". UnityProtocolAnnotatedIcon "))) {
50− QString annotatedIcon;
51− QString serializedData(QUrl::fromPercentEncoding(giconString.mid(29).toUtf8()));
52− GVariant *variant = g_variant_parse(G_VARIANT_TYPE_VARDICT, serializedData.toUtf8().constData(), NULL, NULL, NULL);
53− gchar *baseUri;
54− if (variant != NULL && g_variant_lookup(variant, "base-icon", "&s", &baseUri)) {
55− annotatedIcon = gIconToDeclarativeImageProviderString(QString(baseUri));
56− // FIXME: enclose in image://annotated/... once unity supports that
57− }
58− if (variant != NULL) g_variant_unref(variant);
59−
60− return annotatedIcon;
61− }
62−
63− // handle real gicon strings
64− QString result;
65− GError *error = NULL;
66− GIcon *icon = g_icon_new_for_string(giconString.toLocal8Bit().constData(), &error);
67− if (error != NULL || icon == NULL) {
68− qWarning("Unable to deserialize icon: %s", giconString.toLocal8Bit().constData());
69− g_clear_error(&error);
70− return result;
71− }
72−
73− if (G_IS_THEMED_ICON(icon)) {
74− QString themedIcon(BASE_THEME_ICON_URI);
75− QStringList list;
76− const char* const *iconNames = g_themed_icon_get_names(G_THEMED_ICON(icon));
77− if (iconNames != NULL) {
78− for (const char * const *iter = iconNames; *iter != NULL; ++iter) {
79− list << QLatin1String(*iter);
80− }
81− }
82− themedIcon.append(list.join(QString(",")));
83− result = themedIcon;
84− } else if (G_IS_FILE_ICON(icon)) {
85− GFile *file = g_file_icon_get_file(G_FILE_ICON(icon));
86− gchar *uri = g_file_get_uri(file);
87− QString iconUri(uri);
88− g_free(uri);
89− result = iconUri;
90− }
91−
92− g_object_unref(icon);
93−
94− return result;
95−}
96−
97−QString uriToThumbnailerProviderString(QString const &uri, QString const &mimetype, QVariantHash const &metadata)
98−{
99− if (uri.startsWith(QLatin1String("file:///"))) {
100− bool isAudio = mimetype.startsWith(QLatin1String("audio/"));
101− QString thumbnailerUri;
102− if (isAudio) {
103− thumbnailerUri = BASE_ALBUMART_URI;
104− if (metadata.contains("content")) {
105− QVariantHash contentHash = metadata["content"].toHash();
106− if (contentHash.contains("content")) { // nested content in Home?
107− contentHash = contentHash["content"].toHash();
108− }
109− if (contentHash.contains("album") && contentHash.contains("artist")) {
110− QUrlQuery query;
111− query.addQueryItem(QStringLiteral("artist"), contentHash["artist"].toString());
112− query.addQueryItem(QStringLiteral("album"), contentHash["album"].toString());
113− thumbnailerUri.append(query.toString());
114− }
115− }
116− } else {
117− thumbnailerUri = BASE_THUMBNAILER_URI;
118− thumbnailerUri.append(uri.midRef(7));
119− }
120− return thumbnailerUri;
121− }
122−
123− return QString::null;
124−}
tests/mocks/Unity/qmldir+1
@@ -1,2 +1,3 @@
11module Unity
22plugin FakeUnityQml
3+typeinfo Unity.qmltypes
tests/plugins/CMakeLists.txt+1−1
@@ -1,6 +1,6 @@
11add_subdirectory(AccountsService)
22add_subdirectory(LightDM)
3−add_subdirectory(DashViews)
3+add_subdirectory(Dash)
44add_subdirectory(Ubuntu)
55add_subdirectory(Unity)
66add_subdirectory(Utils)
tests/plugins/DashViews/CMakeLists.txt → tests/plugins/Dash/CMakeLists.txtrenamed+16−9
@@ -16,7 +16,7 @@ include_directories(
1616 ${Qt5Quick_INCLUDE_DIRS}
1717 ${Qt5Quick_PRIVATE_INCLUDE_DIRS}
1818 ${Qt5V8_PRIVATE_INCLUDE_DIR}
19− ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/DashViews
19+ ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/Dash
2020 ${CMAKE_CURRENT_BINARY_DIR}
2121 )
2222
@@ -28,11 +28,11 @@ add_definitions(-DBUILT_PLUGINS_DIR="${CMAKE_BINARY_DIR}/plugins")
2828macro(add_lvwph_test FILENAME TESTNAME)
2929 add_executable(${TESTNAME}TestExec
3030 ${FILENAME}test.cpp
31− ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/DashViews/listviewwithpageheader.cpp)
31+ ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/Dash/listviewwithpageheader.cpp)
3232 qt5_use_modules(${TESTNAME}TestExec Test Core Qml)
3333 target_link_libraries(${TESTNAME}TestExec ${Qt5Gui_LIBRARIES} ${Qt5Quick_LIBRARIES})
3434
35− add_binary_qml_test(${TESTNAME} "" "DashViews-qml")
35+ add_binary_qml_test(${TESTNAME} "" "Dash-qml")
3636endmacro()
3737
3838add_lvwph_test(listviewwithpageheader ListViewWithPageHeader)
@@ -42,24 +42,24 @@ add_lvwph_test(listviewwithpageheadersectionexternalmodel ListViewWithPageHeader
4242macro(add_dashview_try_test FILENAME TESTNAME)
4343 add_executable(${TESTNAME}TestExec
4444 ${FILENAME}test.cpp
45− ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/DashViews/${FILENAME}.cpp
46− ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/DashViews/abstractdashview.cpp
45+ ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/Dash/${FILENAME}.cpp
46+ ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/Dash/abstractdashview.cpp
4747 )
4848 qt5_use_modules(${TESTNAME}TestExec Test Core Qml)
4949 target_link_libraries(${TESTNAME}TestExec ${Qt5Gui_LIBRARIES} ${Qt5Quick_LIBRARIES})
5050
51− add_binary_qml_test(${TESTNAME} "" "DashViews-qml")
51+ add_binary_qml_test(${TESTNAME} "" "Dash-qml")
5252
5353 add_executable(${TESTNAME}tryExec
5454 ${FILENAME}try.cpp
55− ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/DashViews/${FILENAME}.cpp
56− ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/DashViews/abstractdashview.cpp
55+ ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/Dash/${FILENAME}.cpp
56+ ${CMAKE_CURRENT_SOURCE_DIR}/../../../plugins/Dash/abstractdashview.cpp
5757 )
5858 qt5_use_modules(${TESTNAME}tryExec Test Core Qml)
5959 target_link_libraries(${TESTNAME}tryExec ${Qt5Gui_LIBRARIES} ${Qt5Quick_LIBRARIES})
6060 add_custom_target(try${TESTNAME}
6161 ${CMAKE_CURRENT_BINARY_DIR}/${TESTNAME}tryExec
62− DEPENDS ${TESTNAME}tryExec DashViews-qml
62+ DEPENDS ${TESTNAME}tryExec Dash-qml
6363 )
6464endmacro()
6565
@@ -67,6 +67,13 @@ add_dashview_try_test(verticaljournal VerticalJournal)
6767add_dashview_try_test(horizontaljournal HorizontalJournal)
6868add_dashview_try_test(organicgrid OrganicGrid)
6969
70+# CardCreator test
71+add_executable(CardCreatorTestExec cardcreatortest.cpp)
72+qt5_use_modules(CardCreatorTestExec Test Core Qml)
73+target_link_libraries(CardCreatorTestExec ${Qt5Gui_LIBRARIES} ${Qt5Quick_LIBRARIES})
74+add_binary_qml_test(CardCreator "" "Dash-qml")
75+
76+# plain qml test
7077set(qmltest_DEFAULT_TARGETS qmluitests)
7178set(qmltest_DEFAULT_NO_ADD_TEST TRUE)
7279add_qml_test(. ListViewWithPageHeaderQML IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins)
tests/plugins/Dash/cardcreator/1.resnew file+79
@@ -0,0 +1,79 @@
1+AbstractButton {
2+ id: root;
3+ property var template;
4+ property var components;
5+ property var cardData;
6+ property var artShapeBorderSource: undefined;
7+ property real fontScale: 1.0;
8+ property int headerAlignment: Text.AlignLeft;
9+ property int fixedHeaderHeight: -1;
10+ property size fixedArtShapeSize: Qt.size(-1, -1);
11+ readonly property string title: cardData && cardData["title"] || "";
12+ property bool asynchronous: true;
13+ property bool showHeader: true;
14+ implicitWidth: childrenRect.width;
15+onArtShapeBorderSourceChanged: { if (artShapeBorderSource !== undefined && artShapeLoader.item) artShapeLoader.item.borderSource = artShapeBorderSource; }
16+readonly property size artShapeSize: artShapeLoader.item ? Qt.size(artShapeLoader.item.width, artShapeLoader.item.height) : Qt.size(-1, -1);
17+Item {
18+ id: artShapeHolder;
19+ height: root.fixedArtShapeSize.height != -1 ? root.fixedArtShapeSize.height : artShapeLoader.height;
20+ width: root.fixedArtShapeSize.width != -1 ? root.fixedArtShapeSize.width : artShapeLoader.width;
21+ anchors { horizontalCenter: parent.horizontalCenter; }
22+ Loader {
23+ id: artShapeLoader;
24+ objectName: "artShapeLoader";
25+ active: cardData && cardData["art"] || false;
26+ asynchronous: root.asynchronous;
27+ visible: status == Loader.Ready;
28+ sourceComponent: UbuntuShape {
29+ id: artShape;
30+ objectName: "artShape";
31+ radius: "medium";
32+ readonly property real aspect: components !== undefined ? components["art"]["aspect-ratio"] : 1;
33+ readonly property bool aspectSmallerThanImageAspect: aspect < image.aspect;
34+ Component.onCompleted: { updateWidthHeightBindings(); if (artShapeBorderSource !== undefined) borderSource = artShapeBorderSource; }
35+ onAspectSmallerThanImageAspectChanged: updateWidthHeightBindings();
36+ visible: image.status == Image.Ready;
37+ function updateWidthHeightBindings() {
38+ if (aspectSmallerThanImageAspect) {
39+ width = Qt.binding(function() { return !visible ? 0 : image.width });
40+ height = Qt.binding(function() { return !visible ? 0 : image.fillMode === Image.PreserveAspectCrop ? image.height : width / image.aspect });
41+ } else {
42+ width = Qt.binding(function() { return !visible ? 0 : image.fillMode === Image.PreserveAspectCrop ? image.width : height * image.aspect });
43+ height = Qt.binding(function() { return !visible ? 0 : image.height });
44+ }
45+ }
46+ image: Image {
47+ objectName: "artImage";
48+ source: cardData && cardData["art"] || "";
49+ cache: true;
50+ asynchronous: root.asynchronous;
51+ fillMode: components && components["art"]["fill-mode"] === "fit" ? Image.PreserveAspectFit: Image.PreserveAspectCrop;
52+ readonly property real aspect: implicitWidth / implicitHeight;
53+ width: root.width;
54+ height: width / artShape.aspect;
55+ }
56+ }
57+ }
58+ }
59+readonly property int headerHeight: titleLabel.height + titleLabel.anchors.topMargin * 2;
60+Label {
61+ id: titleLabel;
62+ objectName: "titleLabel";
63+ anchors { right: parent.right;left: parent.left;
64+top: artShapeHolder.bottom;
65+ topMargin: units.gu(1);
66+ }
67+ elide: Text.ElideRight;
68+ fontSize: "small";
69+ wrapMode: Text.Wrap;
70+ maximumLineCount: 2;
71+ font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
72+ color: "grey";
73+ visible: showHeader ;
74+ text: root.title;
75+ font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal;
76+ horizontalAlignment: root.headerAlignment;
77+ }
78+implicitHeight: titleLabel.y + titleLabel.height + units.gu(1);
79+}
tests/plugins/Dash/cardcreator/1.tstnew file+3
@@ -0,0 +1,3 @@
1+template: {"card-layout":"vertical","card-size":"small","category-layout":"grid","collapsed-rows":2}
2+components: {"art":{"aspect-ratio":1.6,"field":"art","fill-mode":"fit"},"title":{"field":"title"}}
3+result: 1.res
tests/plugins/Dash/cardcreator/2.resnew file+116
@@ -0,0 +1,116 @@
1+AbstractButton {
2+ id: root;
3+ property var template;
4+ property var components;
5+ property var cardData;
6+ property var artShapeBorderSource: undefined;
7+ property real fontScale: 1.0;
8+ property int headerAlignment: Text.AlignLeft;
9+ property int fixedHeaderHeight: -1;
10+ property size fixedArtShapeSize: Qt.size(-1, -1);
11+ readonly property string title: cardData && cardData["title"] || "";
12+ property bool asynchronous: true;
13+ property bool showHeader: true;
14+ implicitWidth: childrenRect.width;
15+Loader {
16+ id: backgroundLoader;
17+ objectName: "backgroundLoader";
18+ anchors.fill: parent;
19+ asynchronous: root.asynchronous;
20+ visible: status == Loader.Ready;
21+ sourceComponent: UbuntuShape {
22+ objectName: "background";
23+ radius: "medium";
24+ color: getColor(0) || "white";
25+ gradientColor: getColor(1) || color;
26+ anchors.fill: parent;
27+ image: backgroundImage.source ? backgroundImage : null;
28+ property real luminance: 0.2126 * color.r + 0.7152 * color.g + 0.0722 * color.b;
29+ property Image backgroundImage: Image {
30+ objectName: "backgroundImage";
31+ source: {
32+ if (cardData && typeof cardData["background"] === "string") return cardData["background"];
33+ else if (template && typeof template["card-background"] === "string") return template["card-background"];
34+ else return "";
35+ }
36+ }
37+ function getColor(index) {
38+ if (cardData && typeof cardData["background"] === "object"
39+ && (cardData["background"]["type"] === "color" || cardData["background"]["type"] === "gradient")) {
40+ return cardData["background"]["elements"][index];
41+ } else if (template && typeof template["card-background"] === "object"
42+ && (template["card-background"]["type"] === "color" || template["card-background"]["type"] === "gradient")) {
43+ return template["card-background"]["elements"][index];
44+ } else return undefined;
45+ }
46+ }
47+ }
48+readonly property size artShapeSize: Qt.size(-1, -1);
49+readonly property int headerHeight: row.height + row.margins * 2;
50+Row {
51+ id: row;
52+ objectName: "outerRow";
53+ property real margins: units.gu(1);
54+ spacing: margins;
55+ anchors { top: parent.top;
56+ topMargin: units.gu(1);
57+ left: parent.left;
58+}
59+ anchors.right: parent.right;
60+ anchors.margins: margins;
61+data: [ Image {
62+ id: mascotImage;
63+ objectName: "mascotImage";
64+ anchors { verticalCenter: parent.verticalCenter; }
65+ readonly property int maxSize: Math.max(width, height) * 4;
66+ source: cardData && cardData["mascot"];
67+ width: units.gu(6);
68+ height: units.gu(5.625);
69+ sourceSize { width: maxSize; height: maxSize }
70+ fillMode: Image.PreserveAspectCrop;
71+ horizontalAlignment: Image.AlignHCenter;
72+ verticalAlignment: Image.AlignVCenter;
73+ visible: showHeader;
74+ }
75+,
76+Column {
77+ anchors.verticalCenter: parent.verticalCenter;
78+ spacing: units.dp(2);
79+ width: parent.width - x;
80+ data: [
81+Label {
82+ id: titleLabel;
83+ objectName: "titleLabel";
84+ anchors { left: parent.left; right: parent.right }
85+ elide: Text.ElideRight;
86+ fontSize: "small";
87+ wrapMode: Text.Wrap;
88+ maximumLineCount: 2;
89+ font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
90+ color: backgroundLoader.active && backgroundLoader.item && backgroundLoader.item.luminance < 0.7 ? "white" : "grey";
91+ visible: showHeader ;
92+ text: root.title;
93+ font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal;
94+ horizontalAlignment: root.headerAlignment;
95+ }
96+,
97+Label {
98+ id: subtitleLabel;
99+ objectName: "subtitleLabel";
100+ anchors { left: parent.left; right: parent.right }
101+
102+ elide: Text.ElideRight;
103+ fontSize: "small";
104+ font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
105+ color: backgroundLoader.active && backgroundLoader.item && backgroundLoader.item.luminance < 0.7 ? "white" : "grey";
106+ visible: titleLabel.visible && titleLabel.text;
107+ text: cardData && cardData["subtitle"] || "";
108+ font.weight: Font.Light;
109+ horizontalAlignment: root.headerAlignment;
110+ }
111+]
112+}
113+]
114+}
115+implicitHeight: row.y + row.height + units.gu(1);
116+}
tests/plugins/Dash/cardcreator/2.tstnew file+3
@@ -0,0 +1,3 @@
1+template: {"card-background":{"elements":["#E9E9E9"],"type":"color"},"card-layout":"vertical","card-size":"medium","category-layout":"grid","collapsed-rows":2}
2+components: {"art":{"aspect-ratio":1,"fill-mode":"crop"},"background":{"field":"background"},"mascot":{"field":"icon"},"subtitle":{"field":"author"},"title":{"field":"title"}}
3+result: 2.res
tests/plugins/Dash/cardcreator/3.resnew file+96
@@ -0,0 +1,96 @@
1+AbstractButton {
2+ id: root;
3+ property var template;
4+ property var components;
5+ property var cardData;
6+ property var artShapeBorderSource: undefined;
7+ property real fontScale: 1.0;
8+ property int headerAlignment: Text.AlignLeft;
9+ property int fixedHeaderHeight: -1;
10+ property size fixedArtShapeSize: Qt.size(-1, -1);
11+ readonly property string title: cardData && cardData["title"] || "";
12+ property bool asynchronous: true;
13+ property bool showHeader: true;
14+ implicitWidth: childrenRect.width;
15+onArtShapeBorderSourceChanged: { if (artShapeBorderSource !== undefined && artShapeLoader.item) artShapeLoader.item.borderSource = artShapeBorderSource; }
16+readonly property size artShapeSize: artShapeLoader.item ? Qt.size(artShapeLoader.item.width, artShapeLoader.item.height) : Qt.size(-1, -1);
17+Item {
18+ id: artShapeHolder;
19+ height: root.fixedArtShapeSize.height != -1 ? root.fixedArtShapeSize.height : artShapeLoader.height;
20+ width: root.fixedArtShapeSize.width != -1 ? root.fixedArtShapeSize.width : artShapeLoader.width;
21+ anchors { horizontalCenter: parent.horizontalCenter; }
22+ Loader {
23+ id: artShapeLoader;
24+ objectName: "artShapeLoader";
25+ active: cardData && cardData["art"] || false;
26+ asynchronous: root.asynchronous;
27+ visible: status == Loader.Ready;
28+ sourceComponent: UbuntuShape {
29+ id: artShape;
30+ objectName: "artShape";
31+ radius: "medium";
32+ readonly property real aspect: components !== undefined ? components["art"]["aspect-ratio"] : 1;
33+ readonly property bool aspectSmallerThanImageAspect: aspect < image.aspect;
34+ Component.onCompleted: { updateWidthHeightBindings(); if (artShapeBorderSource !== undefined) borderSource = artShapeBorderSource; }
35+ onAspectSmallerThanImageAspectChanged: updateWidthHeightBindings();
36+ visible: image.status == Image.Ready;
37+ function updateWidthHeightBindings() {
38+ if (aspectSmallerThanImageAspect) {
39+ width = Qt.binding(function() { return !visible ? 0 : image.width });
40+ height = Qt.binding(function() { return !visible ? 0 : image.fillMode === Image.PreserveAspectCrop ? image.height : width / image.aspect });
41+ } else {
42+ width = Qt.binding(function() { return !visible ? 0 : image.fillMode === Image.PreserveAspectCrop ? image.width : height * image.aspect });
43+ height = Qt.binding(function() { return !visible ? 0 : image.height });
44+ }
45+ }
46+ image: Image {
47+ objectName: "artImage";
48+ source: cardData && cardData["art"] || "";
49+ cache: true;
50+ asynchronous: root.asynchronous;
51+ fillMode: components && components["art"]["fill-mode"] === "fit" ? Image.PreserveAspectFit: Image.PreserveAspectCrop;
52+ readonly property real aspect: implicitWidth / implicitHeight;
53+ width: root.width;
54+ height: width / artShape.aspect;
55+ }
56+ }
57+ }
58+ }
59+readonly property int headerHeight: titleLabel.height + titleLabel.anchors.topMargin * 2 + subtitleLabel.height + subtitleLabel.anchors.topMargin;
60+Label {
61+ id: titleLabel;
62+ objectName: "titleLabel";
63+ anchors { right: parent.right;left: parent.left;
64+top: artShapeHolder.bottom;
65+ topMargin: units.gu(1);
66+}
67+ elide: Text.ElideRight;
68+ fontSize: "small";
69+ wrapMode: Text.Wrap;
70+ maximumLineCount: 2;
71+ font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
72+ color: "grey";
73+ visible: showHeader ;
74+ text: root.title;
75+ font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal;
76+ horizontalAlignment: root.headerAlignment;
77+ }
78+Label {
79+ id: subtitleLabel;
80+ objectName: "subtitleLabel";
81+ anchors { left: titleLabel.left;
82+ leftMargin: titleLabel.leftMargin;
83+ right: titleLabel.right;
84+ top: titleLabel.bottom;
85+ topMargin: units.dp(2); }
86+ elide: Text.ElideRight;
87+ fontSize: "small";
88+ font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
89+ color: "grey";
90+ visible: titleLabel.visible && titleLabel.text;
91+ text: cardData && cardData["subtitle"] || "";
92+ font.weight: Font.Light;
93+ horizontalAlignment: root.headerAlignment;
94+ }
95+implicitHeight: subtitleLabel.y + subtitleLabel.height + units.gu(1);
96+}
tests/plugins/Dash/cardcreator/3.tstnew file+3
@@ -0,0 +1,3 @@
1+template: {"card-layout":"vertical","card-size":"small","category-layout":"grid","collapsed-rows":2}
2+components: {"art":{"aspect-ratio":0.75,"field":"art","fill-mode":"crop"},"subtitle":{"field":"price"},"title":{"field":"title"}}
3+result: 3.res
tests/plugins/Dash/cardcreator/4.resnew file+96
@@ -0,0 +1,96 @@
1+AbstractButton {
2+ id: root;
3+ property var template;
4+ property var components;
5+ property var cardData;
6+ property var artShapeBorderSource: undefined;
7+ property real fontScale: 1.0;
8+ property int headerAlignment: Text.AlignLeft;
9+ property int fixedHeaderHeight: -1;
10+ property size fixedArtShapeSize: Qt.size(-1, -1);
11+ readonly property string title: cardData && cardData["title"] || "";
12+ property bool asynchronous: true;
13+ property bool showHeader: true;
14+ implicitWidth: childrenRect.width;
15+readonly property size artShapeSize: Qt.size(-1, -1);
16+readonly property int headerHeight: row.height + row.margins * 2;
17+Row {
18+ id: row;
19+ objectName: "outerRow";
20+ property real margins: units.gu(1);
21+ spacing: margins;
22+ anchors { top: parent.top;
23+ topMargin: units.gu(1);
24+ left: parent.left;
25+}
26+ anchors.right: parent.right;
27+ anchors.margins: margins;
28+data: [ Loader {
29+ id: mascotShapeLoader;
30+ objectName: "mascotShapeLoader";
31+ asynchronous: root.asynchronous;
32+ active: mascotImage.status === Image.Ready;
33+ visible: showHeader && active && status == Loader.Ready;
34+ width: units.gu(6);
35+ height: units.gu(5.625);
36+ sourceComponent: UbuntuShape { image: mascotImage }
37+ anchors { verticalCenter: parent.verticalCenter; }
38+ }
39+
40+,
41+Image {
42+ id: mascotImage;
43+ objectName: "mascotImage";
44+ anchors { verticalCenter: parent.verticalCenter; }
45+ readonly property int maxSize: Math.max(width, height) * 4;
46+ source: cardData && cardData["mascot"];
47+ width: units.gu(6);
48+ height: units.gu(5.625);
49+ sourceSize { width: maxSize; height: maxSize }
50+ fillMode: Image.PreserveAspectCrop;
51+ horizontalAlignment: Image.AlignHCenter;
52+ verticalAlignment: Image.AlignVCenter;
53+ visible: false;
54+ }
55+
56+,
57+Column {
58+ anchors.verticalCenter: parent.verticalCenter;
59+ spacing: units.dp(2);
60+ width: parent.width - x;
61+data: [ Label {
62+ id: titleLabel;
63+ objectName: "titleLabel";
64+ anchors { left: parent.left; right: parent.right }
65+ elide: Text.ElideRight;
66+ fontSize: "small";
67+ wrapMode: Text.Wrap;
68+ maximumLineCount: 2;
69+ font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
70+ color: "grey";
71+ visible: showHeader ;
72+ text: root.title;
73+ font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal;
74+ horizontalAlignment: root.headerAlignment;
75+ }
76+,
77+Label {
78+ id: subtitleLabel;
79+ objectName: "subtitleLabel";
80+ anchors { left: parent.left; right: parent.right }
81+
82+ elide: Text.ElideRight;
83+ fontSize: "small";
84+ font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
85+ color: "grey";
86+ visible: titleLabel.visible && titleLabel.text;
87+ text: cardData && cardData["subtitle"] || "";
88+ font.weight: Font.Light;
89+ horizontalAlignment: root.headerAlignment;
90+ }
91+]
92+}
93+]
94+}
95+implicitHeight: row.y + row.height + units.gu(1);
96+}
tests/plugins/Dash/cardcreator/4.tstnew file+3
@@ -0,0 +1,3 @@
1+template: {"card-layout":"horizontal","card-size":"large","category-layout":"grid","collapsed-rows":2}
2+components: {"art":{"aspect-ratio":1,"fill-mode":"crop"},"mascot":{"field":"mascot"},"subtitle":{"field":"domain"},"title":{"field":"title"}}
3+result: 4.res
tests/plugins/Dash/cardcreator/5.resnew file+139
@@ -0,0 +1,139 @@
1+AbstractButton {
2+ id: root;
3+ property var template;
4+ property var components;
5+ property var cardData;
6+ property var artShapeBorderSource: undefined;
7+ property real fontScale: 1.0;
8+ property int headerAlignment: Text.AlignLeft;
9+ property int fixedHeaderHeight: -1;
10+ property size fixedArtShapeSize: Qt.size(-1, -1);
11+ readonly property string title: cardData && cardData["title"] || "";
12+ property bool asynchronous: true;
13+ property bool showHeader: true;
14+ implicitWidth: childrenRect.width;
15+onArtShapeBorderSourceChanged: { if (artShapeBorderSource !== undefined && artShapeLoader.item) artShapeLoader.item.borderSource = artShapeBorderSource; }
16+readonly property size artShapeSize: artShapeLoader.item ? Qt.size(artShapeLoader.item.width, artShapeLoader.item.height) : Qt.size(-1, -1);
17+Item {
18+ id: artShapeHolder;
19+ height: root.fixedArtShapeSize.height != -1 ? root.fixedArtShapeSize.height : artShapeLoader.height;
20+ width: root.fixedArtShapeSize.width != -1 ? root.fixedArtShapeSize.width : artShapeLoader.width;
21+ anchors { horizontalCenter: parent.horizontalCenter; }
22+ Loader {
23+ id: artShapeLoader;
24+ objectName: "artShapeLoader";
25+ active: cardData && cardData["art"] || false;
26+ asynchronous: root.asynchronous;
27+ visible: status == Loader.Ready;
28+ sourceComponent: UbuntuShape {
29+ id: artShape;
30+ objectName: "artShape";
31+ radius: "medium";
32+ readonly property real aspect: components !== undefined ? components["art"]["aspect-ratio"] : 1;
33+ readonly property bool aspectSmallerThanImageAspect: aspect < image.aspect;
34+ Component.onCompleted: { updateWidthHeightBindings(); if (artShapeBorderSource !== undefined) borderSource = artShapeBorderSource; }
35+ onAspectSmallerThanImageAspectChanged: updateWidthHeightBindings();
36+ visible: image.status == Image.Ready;
37+ function updateWidthHeightBindings() {
38+ if (aspectSmallerThanImageAspect) {
39+ width = Qt.binding(function() { return !visible ? 0 : image.width });
40+ height = Qt.binding(function() { return !visible ? 0 : image.fillMode === Image.PreserveAspectCrop ? image.height : width / image.aspect });
41+ } else {
42+ width = Qt.binding(function() { return !visible ? 0 : image.fillMode === Image.PreserveAspectCrop ? image.width : height * image.aspect });
43+ height = Qt.binding(function() { return !visible ? 0 : image.height });
44+ }
45+ }
46+ image: Image {
47+ objectName: "artImage";
48+ source: cardData && cardData["art"] || "";
49+ cache: true;
50+ asynchronous: root.asynchronous;
51+ fillMode: components && components["art"]["fill-mode"] === "fit" ? Image.PreserveAspectFit: Image.PreserveAspectCrop;
52+ readonly property real aspect: implicitWidth / implicitHeight;
53+ width: root.width;
54+ height: width / artShape.aspect;
55+ }
56+ }
57+ }
58+ }
59+Loader {
60+ id: overlayLoader;
61+ anchors {
62+ left: artShapeHolder.left;
63+ right: artShapeHolder.right;
64+ bottom: artShapeHolder.bottom;
65+ }
66+ active: artShapeLoader.active && artShapeLoader.item && artShapeLoader.item.image.status === Image.Ready || false;
67+ asynchronous: root.asynchronous;
68+ visible: showHeader && status == Loader.Ready;
69+ sourceComponent: ShaderEffect {
70+ id: overlay;
71+ height: fixedHeaderHeight != -1 ? fixedHeaderHeight : headerHeight;
72+ opacity: 0.6;
73+ property var source: ShaderEffectSource {
74+ id: shaderSource;
75+ sourceItem: artShapeLoader.item;
76+ onVisibleChanged: if (visible) scheduleUpdate();
77+ live: false;
78+ sourceRect: Qt.rect(0, artShapeLoader.height - overlay.height, artShapeLoader.width, overlay.height);
79+ }
80+ vertexShader: "
81+ uniform highp mat4 qt_Matrix;
82+ attribute highp vec4 qt_Vertex;
83+ attribute highp vec2 qt_MultiTexCoord0;
84+ varying highp vec2 coord;
85+ void main() {
86+ coord = qt_MultiTexCoord0;
87+ gl_Position = qt_Matrix * qt_Vertex;
88+ }";
89+ fragmentShader: "
90+ varying highp vec2 coord;
91+ uniform sampler2D source;
92+ uniform lowp float qt_Opacity;
93+ void main() {
94+ lowp vec4 tex = texture2D(source, coord);
95+ gl_FragColor = vec4(0, 0, 0, tex.a) * qt_Opacity;
96+ }";
97+ }
98+ }
99+readonly property int headerHeight: titleLabel.height + titleLabel.anchors.topMargin * 2 + subtitleLabel.height + subtitleLabel.anchors.topMargin;
100+Label {
101+ id: titleLabel;
102+ objectName: "titleLabel";
103+ anchors { left: parent.left;
104+ leftMargin: units.gu(1);
105+ right: parent.right;
106+ top: overlayLoader.top;
107+ topMargin: units.gu(1);
108+}
109+ elide: Text.ElideRight;
110+ fontSize: "small";
111+ wrapMode: Text.Wrap;
112+ maximumLineCount: 2;
113+ font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
114+ color: "white";
115+ visible: showHeader && overlayLoader.active;
116+ text: root.title;
117+ font.weight: components && components["subtitle"] ? Font.DemiBold : Font.Normal;
118+ horizontalAlignment: root.headerAlignment;
119+ }
120+Label {
121+ id: subtitleLabel;
122+ objectName: "subtitleLabel";
123+ anchors { left: titleLabel.left;
124+ leftMargin: titleLabel.leftMargin;
125+ right: titleLabel.right;
126+ top: titleLabel.bottom;
127+ topMargin: units.dp(2);
128+ }
129+ elide: Text.ElideRight;
130+ fontSize: "small";
131+ font.pixelSize: Math.round(FontUtils.sizeToPixels(fontSize) * fontScale);
132+ color: "white";
133+ visible: titleLabel.visible && titleLabel.text;
134+ text: cardData && cardData["subtitle"] || "";
135+ font.weight: Font.Light;
136+ horizontalAlignment: root.headerAlignment;
137+ }
138+implicitHeight: subtitleLabel.y + subtitleLabel.height + units.gu(1);
139+}
tests/plugins/Dash/cardcreator/5.tstnew file+3
@@ -0,0 +1,3 @@
1+template: {"card-layout":"vertical","card-size":"medium","category-layout":"carousel","collapsed-rows":2,"overlay":true}
2+components: {"art":{"aspect-ratio":1,"field":"art","fill-mode":"crop"},"subtitle":{"field":"artist"},"title":{"field":"title"}}
3+result: 5.res
tests/plugins/Dash/cardcreatortest.cppnew file+91
@@ -0,0 +1,91 @@
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 <QDir>
18+#include <QQmlEngine>
19+#include <QQuickItem>
20+#include <QQuickView>
21+#include <QtTestGui>
22+
23+class CardCreatorTest : public QObject
24+{
25+ Q_OBJECT
26+
27+private Q_SLOTS:
28+
29+ void initTestCase()
30+ {
31+ }
32+
33+ void init()
34+ {
35+ view = new QQuickView();
36+ view->engine()->addImportPath(BUILT_PLUGINS_DIR);
37+ view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/cardcreatortest.qml"));
38+ view->show();
39+ QTest::qWaitForWindowExposed(view);
40+ }
41+
42+ void cleanup()
43+ {
44+ delete view;
45+ }
46+
47+ void testKnownCases()
48+ {
49+ const QString templateString("template: ");
50+ const QString componentsString("components: ");
51+ const QString resultString("result: ");
52+
53+ const QString testDirPath = DASHVIEWSTEST_FOLDER "/cardcreator/";
54+ QDir d(testDirPath);
55+ const QStringList testFiles = d.entryList(QStringList() << "*.tst");
56+ foreach(const QString &testFileName, testFiles) {
57+ qDebug() << testFileName;
58+ QFile testFile(testDirPath + testFileName);
59+ QVERIFY(testFile.open(QIODevice::ReadOnly));
60+ QTextStream ts(&testFile);
61+ const QStringList lines = ts.readAll().split("\n");
62+
63+ QVERIFY(lines[0].startsWith(templateString));
64+ QVERIFY(lines[1].startsWith(componentsString));
65+ QVERIFY(lines[2].startsWith(resultString));
66+ const QString templateJSON = lines[0].mid(templateString.length());
67+ const QString componentsJSON = lines[1].mid(componentsString.length());
68+ const QString resultFileName = lines[2].mid(resultString.length());
69+
70+ QVariant cardStringResult;
71+ QMetaObject::invokeMethod(view->rootObject(), "cardString", Q_RETURN_ARG(QVariant, cardStringResult), Q_ARG(QVariant, templateJSON), Q_ARG(QVariant, componentsJSON));
72+
73+ QFile testResultFile(testDirPath + resultFileName);
74+ QVERIFY(testResultFile.open(QIODevice::ReadOnly));
75+ QTextStream ts2(&testResultFile);
76+ const QString expectedResult = ts2.readAll();
77+ QCOMPARE(cardStringResult.toString().simplified(), expectedResult.simplified());
78+
79+ QVariant createCardComponentResult;
80+ QMetaObject::invokeMethod(view->rootObject(), "createCardComponent", Q_RETURN_ARG(QVariant, createCardComponentResult), Q_ARG(QVariant, templateJSON), Q_ARG(QVariant, componentsJSON));
81+ QVERIFY(createCardComponentResult.toBool());
82+ }
83+ }
84+
85+private:
86+ QQuickView *view;
87+};
88+
89+QTEST_MAIN(CardCreatorTest)
90+
91+#include "cardcreatortest.moc"
tests/plugins/Dash/cardcreatortest.qmlnew 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+import QtQuick 2.2
18+import "../../../plugins/Dash/CardCreator.js" as CardCreator
19+
20+Item {
21+ id: root
22+ function cardString(template, components) {
23+ return CardCreator.cardString(JSON.parse(template), JSON.parse(components));
24+ }
25+
26+ function createCardComponent(template, components) {
27+ return CardCreator.createCardComponent(root, JSON.parse(template), JSON.parse(components)) !== null;
28+ }
29+}
tests/plugins/DashViews/horizontaljournaltest.cpp → tests/plugins/Dash/horizontaljournaltest.cpprenamed+6−6
@@ -258,8 +258,8 @@ private Q_SLOTS:
258258
259259 void testDelegateCreationRanges()
260260 {
261− hj->setDelegateCreationBegin(300);
262− hj->setDelegateCreationEnd(view->height());
261+ hj->setDisplayMarginBeginning(-300);
262+ hj->setDisplayMarginEnd(-(hj->height() - view->height()));
263263
264264 QTRY_COMPARE(hj->m_firstVisibleIndex, 6);
265265 QTRY_COMPARE(hj->m_visibleItems.count(), 7);
@@ -274,8 +274,8 @@ private Q_SLOTS:
274274 QTRY_COMPARE(hj->m_lastInRowIndexPosition[ 7], 210.);
275275 QTRY_COMPARE(hj->m_lastInRowIndexPosition[12], 305.);
276276
277− hj->resetDelegateCreationBegin();
278− hj->resetDelegateCreationEnd();
277+ hj->setDisplayMarginBeginning(0);
278+ hj->setDisplayMarginEnd(0);
279279
280280 // This is exactly the same block as the first again
281281 checkInitialPositions();
@@ -469,8 +469,8 @@ private Q_SLOTS:
469469
470470 void testNegativeDelegateCreationRange()
471471 {
472− hj->setDelegateCreationBegin(0);
473− hj->setDelegateCreationEnd(-100);
472+ hj->setDisplayMarginBeginning(0);
473+ hj->setDisplayMarginEnd(-(hj->height() + 100));
474474
475475 QStringList widthList;
476476 widthList << "100" << "50" << "50" << "30";
tests/plugins/DashViews/horizontaljournaltest.qml → tests/plugins/Dash/horizontaljournaltest.qmlrenamed+1−1
@@ -15,7 +15,7 @@
1515 */
1616
1717import QtQuick 2.1
18−import DashViews 0.1
18+import Dash 0.1
1919
2020Item {
2121
tests/plugins/DashViews/horizontaljournaltry.cpp → tests/plugins/Dash/horizontaljournaltry.cpprenamed

The content is the same.

tests/plugins/DashViews/horizontaljournaltry.qml → tests/plugins/Dash/horizontaljournaltry.qmlrenamed+24−3
@@ -15,7 +15,7 @@
1515 */
1616
1717import QtQuick 2.1
18−import DashViews 0.1
18+import Dash 0.1
1919
2020Item {
2121 id: root
@@ -29,14 +29,35 @@ Item {
2929 width: parent.width - controls.width
3030
3131 delegate: HorizontalJournal {
32+ id: hj
3233 model: vjModel
3334 rowHeight: 100
3435 columnSpacing: 10
3536 rowSpacing: 10
3637 width: parent.width
3738 height: implicitHeight > 100 ? implicitHeight : 100
38− delegateCreationBegin: lvwph.contentY
39− delegateCreationEnd: lvwph.contentY + lvwph.height
39+ displayMarginBeginning: {
40+ if (hj.y + hj.height <= 0) {
41+ // Not visible (item at top of the list viewport)
42+ return -hj.height;
43+ } else if (hj.y >= lvwph.height) {
44+ // Not visible (item at bottom of the list viewport)
45+ return 0;
46+ } else {
47+ return -Math.max(-hj.y, 0);
48+ }
49+ }
50+ displayMarginEnd: {
51+ if (hj.y + hj.height <= 0) {
52+ // Not visible (item at top of the list viewport)
53+ return 0;
54+ } else if (hj.y >= lvwph.height) {
55+ // Not visible (item at bottom of the list viewport)
56+ return -hj.height;
57+ } else {
58+ return -Math.max(hj.height - lvwph.height + hj.y, 0)
59+ }
60+ }
4061
4162 delegate: Rectangle {
4263 height: 100
tests/plugins/DashViews/listviewwithpageheadersectionexternalmodeltest.cpp → tests/plugins/Dash/listviewwithpageheadersectionexternalmodeltest.cpprenamed+3−3
@@ -82,10 +82,10 @@ private:
8282 QTRY_COMPARE(lvwph->m_visibleItems[visibleIndex]->y(), pos);
8383 QTRY_COMPARE(lvwph->m_visibleItems[visibleIndex]->height(), height);
8484 QCOMPARE(QQuickItemPrivate::get(lvwph->m_visibleItems[visibleIndex]->m_item)->culled, culled);
85− QCOMPARE(section(lvwph->m_visibleItems[visibleIndex]->m_sectionItem), sectionHeader);
85+ QCOMPARE(section(lvwph->m_visibleItems[visibleIndex]->sectionItem()), sectionHeader);
8686 if (!sectionHeader.isNull()) {
87− QCOMPARE(QQuickItemPrivate::get(lvwph->m_visibleItems[visibleIndex]->m_sectionItem)->culled, sectionHeaderCulled);
88− QCOMPARE(sectionDelegateIndex(lvwph->m_visibleItems[visibleIndex]->m_sectionItem), lvwph->m_firstVisibleIndex + visibleIndex);
87+ QCOMPARE(QQuickItemPrivate::get(lvwph->m_visibleItems[visibleIndex]->sectionItem())->culled, sectionHeaderCulled);
88+ QCOMPARE(sectionDelegateIndex(lvwph->m_visibleItems[visibleIndex]->sectionItem()), lvwph->m_firstVisibleIndex + visibleIndex);
8989 }
9090 }
9191
tests/plugins/DashViews/listviewwithpageheadersectiontest.cpp → tests/plugins/Dash/listviewwithpageheadersectiontest.cpprenamed+11−5
@@ -39,10 +39,11 @@ private:
3939 QTRY_COMPARE(lvwph->m_visibleItems[visibleIndex]->y(), pos);
4040 QTRY_COMPARE(lvwph->m_visibleItems[visibleIndex]->height(), height);
4141 QCOMPARE(QQuickItemPrivate::get(lvwph->m_visibleItems[visibleIndex]->m_item)->culled, culled);
42− QCOMPARE(section(lvwph->m_visibleItems[visibleIndex]->m_sectionItem), sectionHeader);
42+ QCOMPARE(section(lvwph->m_visibleItems[visibleIndex]->sectionItem()), sectionHeader);
43+ QTRY_COMPARE(hasSectionHeaderProperty(lvwph->m_visibleItems[visibleIndex]->m_item), !sectionHeader.isNull());
4344 if (!sectionHeader.isNull()) {
44− QCOMPARE(QQuickItemPrivate::get(lvwph->m_visibleItems[visibleIndex]->m_sectionItem)->culled, sectionHeaderCulled);
45− QCOMPARE(sectionDelegateIndex(lvwph->m_visibleItems[visibleIndex]->m_sectionItem), lvwph->m_firstVisibleIndex + visibleIndex);
45+ QCOMPARE(QQuickItemPrivate::get(lvwph->m_visibleItems[visibleIndex]->sectionItem())->culled, sectionHeaderCulled);
46+ QCOMPARE(sectionDelegateIndex(lvwph->m_visibleItems[visibleIndex]->sectionItem()), lvwph->m_firstVisibleIndex + visibleIndex);
4647 }
4748 }
4849
@@ -109,12 +110,17 @@ private:
109110 QVERIFY(QQuickItemPrivate::get(lvwph->m_topSectionItem)->culled);
110111 }
111112
112− QString section(QQuickItem *item)
113+ bool hasSectionHeaderProperty(QQuickItem *item) const
114+ {
115+ return item ? QQmlEngine::contextForObject(item)->parentContext()->contextProperty(QLatin1String("hasSectionHeader")).toBool() : false;
116+ }
117+
118+ QString section(QQuickItem *item) const
113119 {
114120 return item ? QQmlEngine::contextForObject(item)->parentContext()->contextProperty(QLatin1String("section")).toString() : QString();
115121 }
116122
117− int sectionDelegateIndex(QQuickItem *item)
123+ int sectionDelegateIndex(QQuickItem *item) const
118124 {
119125 return item ? QQmlEngine::contextForObject(item)->parentContext()->contextProperty(QLatin1String("delegateIndex")).toInt() : -1;
120126 }
tests/plugins/DashViews/listviewwithpageheadertest.cpp → tests/plugins/Dash/listviewwithpageheadertest.cpprenamed

The content is the same.

tests/plugins/DashViews/listviewwithpageheadertest.qml → tests/plugins/Dash/listviewwithpageheadertest.qmlrenamed+1−1
@@ -15,7 +15,7 @@
1515 */
1616
1717import QtQuick 2.0
18−import DashViews 0.1
18+import Dash 0.1
1919
2020Rectangle {
2121 width: 300
tests/plugins/DashViews/listviewwithpageheadertestsection.qml → tests/plugins/Dash/listviewwithpageheadertestsection.qmlrenamed+1−1
@@ -15,7 +15,7 @@
1515 */
1616
1717import QtQuick 2.0
18−import DashViews 0.1
18+import Dash 0.1
1919
2020Rectangle {
2121 width: 300
tests/plugins/DashViews/listviewwithpageheadertestsectionexternalmodel.qml → tests/plugins/Dash/listviewwithpageheadertestsectionexternalmodel.qmlrenamed+1−1
@@ -15,7 +15,7 @@
1515 */
1616
1717import QtQuick 2.0
18−import DashViews 0.1
18+import Dash 0.1
1919
2020Rectangle {
2121 width: 300
tests/plugins/DashViews/organicgridtest.cpp → tests/plugins/Dash/organicgridtest.cpprenamed+7−5
@@ -499,17 +499,14 @@ private Q_SLOTS:
499499 QTRY_COMPARE(grid->m_firstVisibleIndex, 0);
500500 QTRY_COMPARE(grid->m_visibleItems.count(), 198);
501501
502− grid->setDelegateCreationBegin(300);
503− grid->setDelegateCreationEnd(400);
502+ grid->setDisplayMarginBeginning(-300);
503+ grid->setDisplayMarginEnd(-(grid->height() - 400));
504504 checkImplicitHeight(2290);
505505
506506 QTRY_COMPARE(grid->m_firstVisibleIndex, 36);
507507 QTRY_COMPARE(grid->m_visibleItems.count(), 54);
508508 checkImplicitHeight(2290);
509509
510− grid->resetDelegateCreationBegin();
511− grid->resetDelegateCreationEnd();
512−
513510 view->resize(470, 470);
514511
515512 grid->setSmallDelegateSize(QSizeF(90, 90));
@@ -517,6 +514,11 @@ private Q_SLOTS:
517514
518515 model->setCount(21);
519516
517+ QTRY_COMPARE(grid->m_visibleItems.count(), 0);
518+
519+ grid->setDisplayMarginBeginning(0);
520+ grid->setDisplayMarginEnd(0);
521+
520522 // This is exactly the same block as the first again
521523 checkInitialPositions();
522524 }
tests/plugins/DashViews/organicgridtest.qml → tests/plugins/Dash/organicgridtest.qmlrenamed+1−1
@@ -15,7 +15,7 @@
1515 */
1616
1717import QtQuick 2.1
18−import DashViews 0.1
18+import Dash 0.1
1919
2020Item {
2121
tests/plugins/DashViews/organicgridtry.cpp → tests/plugins/Dash/organicgridtry.cpprenamed

The content is the same.

tests/plugins/DashViews/organicgridtry.qml → tests/plugins/Dash/organicgridtry.qmlrenamed+23−3
@@ -15,7 +15,7 @@
1515 */
1616
1717import QtQuick 2.1
18−import DashViews 0.1
18+import Dash 0.1
1919
2020Item {
2121 id: root
@@ -37,8 +37,28 @@ Item {
3737 rowSpacing: 10
3838 width: parent.width
3939 height: implicitHeight > 100 ? implicitHeight : 100
40− delegateCreationBegin: lvwph.contentY
41− delegateCreationEnd: lvwph.contentY + lvwph.height
40+ displayMarginBeginning: {
41+ if (grid.y + grid.height <= 0) {
42+ // Not visible (item at top of the list viewport)
43+ return -grid.height;
44+ } else if (grid.y >= lvwph.height) {
45+ // Not visible (item at bottom of the list viewport)
46+ return 0;
47+ } else {
48+ return -Math.max(-grid.y, 0);
49+ }
50+ }
51+ displayMarginEnd: {
52+ if (grid.y + grid.height <= 0) {
53+ // Not visible (item at top of the list viewport)
54+ return 0;
55+ } else if (grid.y >= lvwph.height) {
56+ // Not visible (item at bottom of the list viewport)
57+ return -grid.height;
58+ } else {
59+ return -Math.max(grid.height - lvwph.height + grid.y, 0)
60+ }
61+ }
4262
4363 delegate: Rectangle {
4464 width: 100
tests/plugins/DashViews/tst_ListViewWithPageHeaderQML.qml → tests/plugins/Dash/tst_ListViewWithPageHeaderQML.qmlrenamed+1−1
@@ -16,7 +16,7 @@
1616
1717import QtQuick 2.0
1818import QtTest 1.0
19−import DashViews 0.1
19+import Dash 0.1
2020
2121Rectangle {
2222 width: 300
tests/plugins/DashViews/verticaljournaltest.cpp → tests/plugins/Dash/verticaljournaltest.cpprenamed+6−6
@@ -263,8 +263,8 @@ private Q_SLOTS:
263263
264264 void testDelegateCreationRanges()
265265 {
266− vj->setDelegateCreationBegin(200);
267− vj->setDelegateCreationEnd(view->height());
266+ vj->setDisplayMarginBeginning(-200);
267+ vj->setDisplayMarginEnd(-(vj->height() - view->height()));
268268
269269 QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
270270 QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 4);
@@ -286,8 +286,8 @@ private Q_SLOTS:
286286 verifyItem(vj->m_columnVisibleItems[1][3], 15, 160, 430, false);
287287 QCOMPARE(vj->implicitHeight(), 690. + 4. * 690. / 16.);
288288
289− vj->resetDelegateCreationBegin();
290− vj->resetDelegateCreationEnd();
289+ vj->setDisplayMarginBeginning(0);
290+ vj->setDisplayMarginEnd(0);
291291
292292 // This is exactly the same block as the first again
293293 checkInitialPositions();
@@ -478,8 +478,8 @@ private Q_SLOTS:
478478
479479 void testNegativeDelegateCreationRange()
480480 {
481− vj->setDelegateCreationBegin(0);
482− vj->setDelegateCreationEnd(-100);
481+ vj->setDisplayMarginBeginning(0);
482+ vj->setDisplayMarginEnd(-(vj->height() + 100));
483483
484484 QStringList heightList;
485485 heightList << "100" << "50" << "50" << "30";
tests/plugins/DashViews/verticaljournaltest.qml → tests/plugins/Dash/verticaljournaltest.qmlrenamed+1−1
@@ -15,7 +15,7 @@
1515 */
1616
1717import QtQuick 2.1
18−import DashViews 0.1
18+import Dash 0.1
1919
2020Item {
2121
tests/plugins/DashViews/verticaljournaltry.cpp → tests/plugins/Dash/verticaljournaltry.cpprenamed

The content is the same.

tests/plugins/DashViews/verticaljournaltry.qml → tests/plugins/Dash/verticaljournaltry.qmlrenamed+24−3
@@ -15,7 +15,7 @@
1515 */
1616
1717import QtQuick 2.1
18−import DashViews 0.1
18+import Dash 0.1
1919
2020Item {
2121 id: root
@@ -36,8 +36,29 @@ Item {
3636 rowSpacing: 10
3737 width: parent.width
3838 height: implicitHeight > 100 ? implicitHeight : 100
39− delegateCreationBegin: lvwph.contentY
40− delegateCreationEnd: lvwph.contentY + lvwph.height
39+
40+ displayMarginBeginning: {
41+ if (vj.y + vj.height <= 0) {
42+ // Not visible (item at top of the list viewport)
43+ return -vj.height;
44+ } else if (vj.y >= lvwph.height) {
45+ // Not visible (item at bottom of the list viewport)
46+ return 0;
47+ } else {
48+ return -Math.max(-vj.y, 0);
49+ }
50+ }
51+ displayMarginEnd: {
52+ if (vj.y + vj.height <= 0) {
53+ // Not visible (item at top of the list viewport)
54+ return 0;
55+ } else if (vj.y >= lvwph.height) {
56+ // Not visible (item at bottom of the list viewport)
57+ return -vj.height;
58+ } else {
59+ return -Math.max(vj.height - lvwph.height + vj.y, 0)
60+ }
61+ }
4162
4263 delegate: Rectangle {
4364 width: 100
tests/plugins/Unity/Indicators/rootactionstatetest.cpp+37
@@ -21,6 +21,7 @@
2121
2222#include <unitymenumodel.h>
2323#include <QtTest>
24+#include <gio/gio.h>
2425
2526class RootActionStateTest : public QObject
2627{
@@ -52,6 +53,42 @@ private Q_SLOTS:
5253 QVERIFY(rootState->menu() == NULL);
5354 delete rootState;
5455 }
56+
57+ void testToQVariantIcons()
58+ {
59+ GVariantBuilder builderIcons;
60+ g_variant_builder_init(&builderIcons, G_VARIANT_TYPE("av"));
61+ for (int i = 0; i < 3; i ++) {
62+
63+ GIcon* icon = NULL;
64+ icon = g_icon_new_for_string (QString("testIcon%1").arg(i).toUtf8().constData(), NULL);
65+
66+ g_variant_builder_add(&builderIcons,
67+ "v",
68+ g_icon_serialize (icon));
69+ g_object_unref(icon);
70+ }
71+
72+ GVariantBuilder builderParams;
73+ g_variant_builder_init(&builderParams, G_VARIANT_TYPE_ARRAY);
74+ GVariant* icons = g_variant_builder_end (&builderIcons);
75+ g_variant_ref_sink (icons);
76+ g_variant_builder_add (&builderParams, "{sv}", g_strdup ("icons"), icons, NULL);
77+
78+ GVariant* params = g_variant_builder_end (&builderParams);
79+
80+ RootActionState rootState;
81+ QVariant result = rootState.toQVariant(params);
82+ g_variant_unref(params);
83+
84+ QVariantMap paramResult = result.toMap();
85+ QVERIFY(paramResult.contains("icons"));
86+
87+ QStringList serializedIcons = paramResult["icons"].toStringList();
88+ QVERIFY(serializedIcons[0] == "image://theme/testIcon0");
89+ QVERIFY(serializedIcons[1] == "image://theme/testIcon1");
90+ QVERIFY(serializedIcons[2] == "image://theme/testIcon2");
91+ }
5592};
5693
5794QTEST_GUILESS_MAIN(RootActionStateTest)
tests/plugins/Unity/Launcher/CMakeLists.txt+1−1
@@ -49,7 +49,7 @@ add_executable(launchermodeltestExec
4949 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationManagerInterface.h
5050 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
5151 )
52−target_link_libraries(launchermodeltestExec ${GSETTINGS_QT_LDFLAGS} )
52+target_link_libraries(launchermodeltestExec ${GSETTINGS_QT_LDFLAGS})
5353qt5_use_modules(launchermodeltestExec Test Core DBus)
5454
5555# copy .desktop files into build directory for shadow builds
tests/plugins/Unity/Launcher/launchermodeltest.cpp+9
@@ -274,6 +274,15 @@ private Q_SLOTS:
274274 QCOMPARE(launcherModel->rowCount(QModelIndex()), 1);
275275 QCOMPARE(launcherModel->get(0)->appId(), QLatin1String("abs-icon"));
276276 }
277+
278+ void testGetUrlForAppId() {
279+ QCOMPARE(launcherModel->getUrlForAppId(QString()), QString());
280+ QCOMPARE(launcherModel->getUrlForAppId(""), QString());
281+ QCOMPARE(launcherModel->getUrlForAppId("no-name"), QString("application:///no-name.desktop"));
282+ QCOMPARE(launcherModel->getUrlForAppId("com.test.good"), QString("appid://com.test.good/first-listed-app/current-user-version"));
283+ QCOMPARE(launcherModel->getUrlForAppId("com.test.good_application"), QString("appid://com.test.good/application/current-user-version"));
284+ QCOMPARE(launcherModel->getUrlForAppId("com.test.good_application_1.2.3"), QString("appid://com.test.good/application/current-user-version"));
285+ }
277286};
278287
279288QTEST_GUILESS_MAIN(LauncherModelTest)
tests/qmltests/CMakeLists.txt+35−46
@@ -4,6 +4,7 @@ include(QmlTest)
44add_subdirectory(Components)
55
66set(qmltest_DEFAULT_IMPORT_PATHS
7+ ${CMAKE_BINARY_DIR}/plugins
78 ${CMAKE_BINARY_DIR}/tests/utils/modules
89 ${CMAKE_BINARY_DIR}/tests/mocks
910)
@@ -23,65 +24,53 @@ add_qml_test(. Shell IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_
2324add_qml_test(Components Carousel)
2425add_qml_test(Components DraggingArea)
2526add_qml_test(Components EdgeDemoOverlay)
26−add_qml_test(Components FilterGrid IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/plugins)
27+add_qml_test(Components FilterGrid)
2728add_qml_test(Components LazyImage)
2829add_qml_test(Components Rating)
2930add_qml_test(Components ResponsiveFlowView)
3031add_qml_test(Components ResponsiveGridView)
31−add_qml_test(Components Revealer)
3232add_qml_test(Components SeeMore)
3333add_qml_test(Components Showable)
3434add_qml_test(Components PageHeaderLabel)
3535add_qml_test(Components ZoomableImage)
36−add_qml_test(Dash Dash IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
37−add_qml_test(Dash DashContent IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
36+add_qml_test(Dash Dash)
37+add_qml_test(Dash DashContent)
3838add_qml_test(Dash Card)
3939add_qml_benchmark(Dash CardBenchmark 1000)
40−add_qml_test(Dash CardHeader)
4140add_qml_test(Dash CardTool)
42−add_qml_test(Dash GenericScopeView IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
43−add_qml_test(Dash/Apps RunningApplicationsGrid IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS}
44− ${CMAKE_BINARY_DIR}/tests/mocks
45− ${CMAKE_BINARY_DIR}/plugins)
46−add_qml_test(Dash/Previews Preview IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
47−add_qml_test(Dash/Previews PreviewActions IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
48−add_qml_test(Dash/Previews PreviewAudioPlayback IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
49−add_qml_test(Dash/Previews PreviewHeader IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
50−add_qml_test(Dash/Previews PreviewImageGallery IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
51−add_qml_test(Dash/Previews PreviewProgress IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
52−add_qml_test(Dash/Previews PreviewRatingDisplay IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
53−add_qml_test(Dash/Previews PreviewRatingInput IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
54−add_qml_test(Dash/Previews PreviewTextSummary IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
55−add_qml_test(Dash/Previews PreviewVideoPlayback IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
56−add_qml_test(Dash/Previews PreviewWidgetFactory IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
57−add_qml_test(Dash/Previews PreviewZoomableImage IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/tests/mocks)
58−add_qml_test(Greeter Lockscreen IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS}
59− PROPERTIES ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full")
60−add_qml_test(Greeter Tablet IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS}
61− ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full")
62−add_qml_test(Greeter Phone IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS}
63− ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/single")
64−add_qml_test(Greeter Infographics IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS}
65− ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full")
66−add_qml_test(Greeter Clock IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS}
67− ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel")
41+add_qml_test(Dash GenericScopeView)
42+add_qml_test(Dash/Apps RunningApplicationsGrid)
43+add_qml_test(Dash/Previews Preview)
44+add_qml_test(Dash/Previews PreviewActions)
45+add_qml_test(Dash/Previews PreviewAudioPlayback)
46+add_qml_test(Dash/Previews PreviewHeader)
47+add_qml_test(Dash/Previews PreviewImageGallery)
48+add_qml_test(Dash/Previews PreviewProgress)
49+add_qml_test(Dash/Previews PreviewRatingDisplay)
50+add_qml_test(Dash/Previews PreviewRatingInput)
51+add_qml_test(Dash/Previews PreviewTextSummary)
52+add_qml_test(Dash/Previews PreviewVideoPlayback)
53+add_qml_test(Dash/Previews PreviewWidgetFactory)
54+add_qml_test(Dash/Previews PreviewZoomableImage)
55+add_qml_test(Greeter Lockscreen ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full")
56+add_qml_test(Greeter MultiGreeter ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full")
57+add_qml_test(Greeter SingleGreeter ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/single")
58+add_qml_test(Greeter Infographics ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/libusermetrics:${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full")
59+add_qml_test(Greeter Clock ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel")
6860add_qml_test(Hud Hud)
6961add_qml_test(Hud Result)
70−add_qml_test(Launcher Launcher IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
71−add_qml_test(Notifications Notifications IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/plugins)
72−add_qml_test(Notifications VisualSnapDecisionsQueue IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/plugins)
62+add_qml_test(Launcher Launcher)
63+add_qml_test(Notifications Notifications)
64+add_qml_test(Notifications VisualSnapDecisionsQueue)
7365add_qml_test(Panel ActiveCallHint)
7466add_qml_test(Panel IndicatorRow)
75−add_qml_test(Panel Indicators IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
76−add_qml_test(Panel MenuContent IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
77−add_qml_test(Panel Panel IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
67+add_qml_test(Panel Indicators)
68+add_qml_test(Panel MenuContent)
69+add_qml_test(Panel Panel)
7870add_qml_test(Panel SearchIndicator)
79−add_qml_test(Panel/Indicators DefaultIndicatorWidget IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS}
80− ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel")
81−add_qml_test(Panel/Indicators DefaultIndicatorPage IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS}
82− ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel")
83−add_qml_test(Panel/Indicators MenuItemFactory IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/plugins)
84−add_qml_test(Panel/Indicators MessageMenuItemFactory IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_BINARY_DIR}/plugins)
85−add_qml_test(Stages PhoneStage IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS}
86− ${CMAKE_BINARY_DIR}/tests/mocks
87− ${CMAKE_BINARY_DIR}/plugins)
71+add_qml_test(Panel/Indicators DefaultIndicatorWidget ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel")
72+add_qml_test(Panel/Indicators DefaultIndicatorPage ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel")
73+# These MenuItemFactory tests need the test/mocks/ to come before plugins/
74+add_qml_test(Panel/Indicators MenuItemFactory IMPORT_PATHS ${CMAKE_BINARY_DIR}/tests/mocks ${qmltest_DEFAULT_IMPORT_PATHS})
75+add_qml_test(Panel/Indicators MessageMenuItemFactory IMPORT_PATHS ${CMAKE_BINARY_DIR}/tests/mocks ${qmltest_DEFAULT_IMPORT_PATHS})
76+add_qml_test(Stages PhoneStage)
tests/qmltests/Components/RevealingRectangle.qmldeleted−78
@@ -1,78 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import Ubuntu.Components 0.1
19−import "../../../qml/Components"
20−
21−Item {
22− id: revealingRectangle
23−
24− property int orientation: Qt.Vertical
25− property int direction: Qt.LeftToRight
26− property Revealer revealer: __revealer
27− property Showable showable: __showable
28−
29− Revealer {
30− id: __revealer
31−
32− target: __showable
33− width: target.width
34− height: target.height
35− x: orientation == Qt.Vertical ? 0 : direction == Qt.LeftToRight ? 0 : parent.width - width
36− y: orientation == Qt.Horizontal ? 0 : direction == Qt.LeftToRight ? 0 : parent.height - height
37− handleSize: orientation == Qt.Vertical ? handle.height : handle.width
38− hintDisplacement: handleSize
39− orientation: revealingRectangle.orientation
40− direction: revealingRectangle.direction
41− }
42−
43− Showable {
44− id: __showable
45−
46− width: orientation == Qt.Horizontal ? units.gu(24) : parent.width
47− height: orientation == Qt.Vertical ? units.gu(24) : parent.height
48−
49− shown: false
50− showAnimation: SmoothedAnimation {
51− property: orientation == Qt.Horizontal ? "x" : "y"
52− velocity: __revealer.dragVelocity
53− duration: 200
54− to: __revealer.openedValue
55− }
56− hideAnimation: SmoothedAnimation {
57− property: orientation == Qt.Horizontal ? "x" : "y"
58− velocity: __revealer.dragVelocity
59− duration: 200
60− to: __revealer.closedValue
61− }
62−
63− Rectangle {
64− anchors.fill: parent
65− color: "red"
66− }
67−
68− Rectangle {
69− id: handle
70−
71− x: orientation == Qt.Vertical ? 0 : direction == Qt.LeftToRight ? parent.width - width : 0
72− y: orientation == Qt.Horizontal ? 0 : direction == Qt.LeftToRight ? parent.height - height : 0
73− width: orientation == Qt.Horizontal ? units.gu(2) : parent.width
74− height: orientation == Qt.Vertical ? units.gu(2) : parent.height
75− color: "black"
76− }
77− }
78−}
tests/qmltests/Components/tst_LazyImage.qml+1−1
@@ -113,7 +113,7 @@ Rectangle {
113113 }
114114
115115 UT.UnityTestCase {
116− name: "Stage"
116+ name: "LazyImage"
117117 when: windowShown
118118
119119 function cleanup() {
tests/qmltests/Components/tst_PageHeaderLabel.qml+4−4
@@ -26,7 +26,7 @@ Item {
2626 width: units.gu(110)
2727 height: units.gu(30)
2828
29− Scope {
29+ MockScope {
3030 id: scopeMock
3131 }
3232
@@ -148,17 +148,17 @@ Item {
148148
149149 pageHeader.triggerSearch()
150150
151− scopeMock.searchInProgress = false
151+ scopeMock.setSearchInProgress(false);
152152 compare(searchIndicator.running, false, "Search indicator is running.")
153153 tryCompare(primaryImage, "visible", true)
154154
155− scopeMock.searchInProgress = true
155+ scopeMock.setSearchInProgress(true);
156156 compare(searchIndicator.running, true, "Search indicator isn't running.")
157157 tryCompare(primaryImage, "visible", false)
158158 }
159159
160160 function cleanup() {
161− scopeMock.searchInProgress = false;
161+ scopeMock.setSearchInProgress(false);
162162 pageHeader.resetSearch();
163163 }
164164
tests/qmltests/Components/tst_Revealer.qmldeleted−262
@@ -1,262 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import QtTest 1.0
19−import Unity.Test 0.1 as UT
20−import ".."
21−
22−/*
23− There's a revealer on each window edge. If you press and hold any edge you
24− should see a black bar appearing from that edge. If you them slide the
25− pointer/finger towards the opposite edge, that black bar should follow
26− the movement up to around the center of the window. Next to the black bar,
27− which represents the "handle" area of the Revealer, You should see a red rectangle,
28− which is the main body of the Showable concrolled by the Revealer (Showable = red
29− + black rects).
30− */
31−Item {
32− width: units.gu(75)
33− height: units.gu(50)
34−
35− RevealingRectangle {
36− id: topRevealingRectangle
37− anchors.fill: parent
38− orientation: Qt.Vertical
39− direction: Qt.LeftToRight
40− }
41−
42− RevealingRectangle {
43− id: bottomRevealingRectangle
44− anchors.fill: parent
45− orientation: Qt.Vertical
46− direction: Qt.RightToLeft
47− }
48−
49− RevealingRectangle {
50− id: leftRevealingRectangle
51− anchors.fill: parent
52− orientation: Qt.Horizontal
53− direction: Qt.LeftToRight
54− }
55−
56− RevealingRectangle {
57− id: rightRevealingRectangle
58− anchors.fill: parent
59− orientation: Qt.Horizontal
60− direction: Qt.RightToLeft
61− }
62−
63− UT.UnityTestCase {
64− name: "Revealer"
65− when: windowShown
66−
67− /*
68− A bit of the showable should be displayed when you press over the
69− handle area of the Revealer.
70−
71− Once released, it should go out of sight again.
72− */
73− function test_showHintOnPress() {
74− var revealer = topRevealingRectangle.revealer
75− var showable = topRevealingRectangle.showable
76−
77− // It starts out of sight
78− compare(showable.y, -showable.height)
79−
80− // (item, x, y, button, modifiers, delay)
81− mousePress(revealer,
82− revealer.width/2,
83− revealer.handleSize/2,
84− Qt.LeftButton, Qt.NoModifier, 0);
85−
86− tryCompare(showable, "y", -showable.height + revealer.handleSize)
87−
88− // (item, x, y, button, modifiers, delay)
89− mouseRelease(revealer,
90− revealer.width/2,
91− revealer.handleSize/2,
92− Qt.LeftButton, Qt.NoModifier, 0);
93−
94− tryCompare(showable, "y", -showable.height)
95− }
96−
97− /*
98− Press over the handle area of the Revealer and drag it to pull
99− its target Showable. Release it half-way and the Showable will
100− continue moving by itself until it's completely shown.
101−
102−
103− Press over the handle area and drag it back to hide the Showable.
104− Release it half-way and it will continue moving by itself until it's
105− completely hidden again.
106− */
107− function test_dragToRevealAndDragBackToHide_top() {
108− var revealer = topRevealingRectangle.revealer
109− var showable = topRevealingRectangle.showable
110− revealer.__dateTime = fakeDateTime
111−
112− // It starts out of sight
113− compare(showable.y, -showable.height)
114−
115− mouseFlick(revealer,
116− revealer.width/2, // from_x
117− revealer.handleSize/2, // from_y
118− revealer.width/2, // to_x
119− showable.height/2); // to_y
120−
121− // Should eventually get fully extended
122− tryCompare(showable, "y", 0)
123−
124− // Now drag it back to get it hidden
125−
126− mouseFlick(revealer,
127− revealer.width/2,
128− showable.height - (revealer.handleSize/2),
129− revealer.width/2,
130− showable.height/2)
131−
132− // Should eventually be completely out of sight
133− tryCompare(showable, "y", -showable.height)
134− }
135−
136− function test_dragToRevealAndDragBackToHide_bottom() {
137− var revealer = bottomRevealingRectangle.revealer
138− var showable = bottomRevealingRectangle.showable
139− var revRect = bottomRevealingRectangle
140− revealer.__dateTime = fakeDateTime
141−
142− // It starts out of sight
143− compare(showable.y, revRect.height)
144−
145− mouseFlick(revealer,
146− revealer.width/2, // from_x
147− revealer.height - revealer.handleSize/2, // from_y
148− revealer.width/2, // to_x
149− revealer.height - showable.height/2); // to_y
150−
151− // Should eventually get fully extended
152− tryCompare(showable, "y", revRect.height - showable.height)
153−
154− // Now drag it back to get it hidden
155−
156− mouseFlick(revealer,
157− revealer.width/2,
158− revealer.handleSize/2,
159− revealer.width/2,
160− revealer.height - showable.height/2)
161−
162− // Should eventually be completely out of sight
163− tryCompare(showable, "y", revRect.height)
164− }
165−
166− function test_dragToRevealAndDragBackToHide_left() {
167− var revealer = leftRevealingRectangle.revealer
168− var showable = leftRevealingRectangle.showable
169− revealer.__dateTime = fakeDateTime
170−
171− // It starts out of sight
172− compare(showable.x, -showable.width)
173−
174− mouseFlick(revealer,
175− revealer.handleSize/2, // from_x
176− revealer.height/2, // from_y
177− showable.width/2, // to_x
178− revealer.height/2) // to_y
179−
180− // Should eventually get fully extended
181− tryCompare(showable, "x", 0)
182−
183− // Now drag it back to get it hidden
184−
185− mouseFlick(revealer,
186− showable.width - (revealer.handleSize/2),
187− revealer.height/2,
188− showable.width/2,
189− revealer.height/2)
190−
191− // Should eventually be completely out of sight
192− tryCompare(showable, "x", -showable.width)
193− }
194−
195− function test_dragToRevealAndDragBackToHide_right() {
196− var revealer = rightRevealingRectangle.revealer
197− var showable = rightRevealingRectangle.showable
198− var revRect = rightRevealingRectangle
199− revealer.__dateTime = fakeDateTime
200−
201− // It starts out of sight
202− compare(showable.x, revRect.width)
203−
204− mouseFlick(revealer,
205− revealer.width - revealer.handleSize/2, // from_x
206− revealer.height/2, // from_y
207− revealer.width - showable.width/2, // to_x
208− revealer.height/2) // to_y
209−
210− // Should eventually get fully extended
211− tryCompare(showable, "x", revRect.width - showable.width)
212−
213− // Now drag it back to get it hidden
214−
215− mouseFlick(revealer,
216− revealer.handleSize/2,
217− revealer.height/2,
218− revealer.width - showable.width/2,
219− revealer.height/2)
220−
221− // Should eventually be completely out of sight
222− tryCompare(showable, "x", revRect.width)
223− }
224−
225− /*
226− Start dragging down (pulling the showable into view) and then,
227− midway, drag a bit upwards and release it.
228− The showable should keep moving away, ending up hidden again.
229− */
230− function test_dragForthAndBackReturnsOriginalState() {
231− var revealer = topRevealingRectangle.revealer
232− var showable = topRevealingRectangle.showable
233− revealer.__dateTime = fakeDateTime
234−
235− // It starts out of sight
236− compare(showable.y, -showable.height)
237−
238− mouseFlick(revealer,
239− revealer.width/2, // from_x
240− revealer.handleSize/2, // from_y
241− revealer.width/2, // to_x
242− showable.height/2, // to_y
243− true /* do press */, false /* don't release */);
244−
245− // Should be about half-extended
246− verify(showable.y > -showable.height*3/4)
247− verify(showable.y < -showable.height*1/4)
248−
249−
250− // Now drag it back a bit
251− mouseFlick(revealer,
252− revealer.width/2, // from_x
253− showable.height/2, // from_y
254− revealer.width/2, // to_x
255− showable.height/4, // to_y
256− false /* don't press */, true /* do release */);
257−
258− // Should eventually be completely out of sight again
259− tryCompare(showable, "y", -showable.height)
260− }
261− }
262−}
tests/qmltests/Components/tst_ZoomableImage.qml+21−19
@@ -98,22 +98,23 @@ Rectangle {
9898 // move mouse to center
9999 mouseMove(zoomableImage, zoomableImage.width / 2, zoomableImage.height / 2);
100100
101+ var oldScale = image.scale;
101102 // Test Zoom-in Zoom-out twice.
102103 for (var c=0; c<2; c++) {
103104 // zoom in
104105 for (var i=0; i<10; i++) {
105106 mouseWheel(zoomableImage, zoomableImage.width / 2, zoomableImage.height / 2, 0, 10);
106− tryCompare(image, "scale", 1.0 + (i + 1) * 0.1);
107− compare(flickable.contentWidth, lazyImage.width * image.scale);
108− compare(flickable.contentHeight, lazyImage.height * image.scale);
107+ tryCompare(image, "scale", oldScale + (i + 1) * 0.1);
108+ compare(flickable.contentWidth, Math.max(lazyImage.width * image.scale, flickable.width));
109+ compare(flickable.contentHeight, Math.max(lazyImage.height * image.scale, flickable.height));
109110 }
110111
111112 // zoom out
112113 for (var i=0; i<10; i++) {
113114 mouseWheel(zoomableImage, zoomableImage.width / 2, zoomableImage.height / 2, 0, -10);
114− tryCompare(image, "scale", 2.0 - (i + 1) * 0.1);
115− compare(flickable.contentWidth, lazyImage.width * image.scale);
116− compare(flickable.contentHeight, lazyImage.height * image.scale);
115+ tryCompare(image, "scale", oldScale + 1.0 - (i + 1) * 0.1);
116+ compare(flickable.contentWidth, Math.max(lazyImage.width * image.scale, flickable.width));
117+ compare(flickable.contentHeight, Math.max(lazyImage.height * image.scale, flickable.height));
117118 }
118119 }
119120 }
@@ -123,16 +124,12 @@ Rectangle {
123124 zoomable:false,
124125 answer1: true,
125126 answer2: false,
126− answer3: true,
127− answer4: 1.0,
128− answer5: 1.0 },
127+ answer3: true },
129128 { source:widgetData2["source"],
130129 zoomable:true,
131130 answer1: false,
132131 answer2: true,
133− answer3: false,
134− answer4: 1.7740461882048026,
135− answer5: 1.0 }
132+ answer3: false }
136133 ]
137134 }
138135
@@ -163,7 +160,7 @@ Rectangle {
163160 var y2End = zoomableImage.height * 5 / 6;
164161
165162 var oldScale = image.scale;
166−
163+ var newScale = -1;
167164 // move mouse to center
168165 mouseMove(zoomableImage, zoomableImage.width / 2, zoomableImage.height / 2);
169166
@@ -172,20 +169,25 @@ Rectangle {
172169 wait(3000); // have to delay between two consequent pinch event.
173170 // pinch zoom-in
174171 touchPinch(zoomableImage, x1Start, y1Start, x1End, y1End, x2Start, y2Start, x2End, y2End);
172+ waitForRendering(image);
175173
176− tryCompare(image, "scale", data.answer4);
177− var newScale = image.scale;
174+ if (newScale == -1) {
175+ newScale = image.scale;
176+ }
177+ tryCompare(image, "scale", newScale);
178178 compare(newScale == oldScale, data.answer1, "scale factor not equal: "+ oldScale + "=?" + newScale);
179179 compare(newScale > oldScale, data.answer2, "scale factor didn't changed");
180180 compare(signalSpy.count == 0, data.answer3, "scale signal count error");
181− compare(newScale, data.answer4, "scale factor error");
182− compare(flickable.contentWidth, lazyImage.width * image.scale);
183− compare(flickable.contentHeight, lazyImage.height * image.scale);
181+ compare(image.scale, newScale, "scale factor error");
182+ compare(flickable.contentWidth, Math.max(lazyImage.width * image.scale, flickable.width));
183+ compare(flickable.contentHeight, Math.max(lazyImage.height * image.scale, flickable.height));
184184
185185 wait(3000); // have to delay between two consequent pinch event.
186186 // pinch zoom-out
187187 touchPinch(zoomableImage, x1End, y1End, x1Start, y1Start, x2End, y2End, x2Start, y2Start);
188− tryCompare(image, "scale", data.answer5);
188+ tryCompare(image, "scale", oldScale);
189+ compare(flickable.contentWidth, Math.max(lazyImage.width * image.scale, flickable.width));
190+ compare(flickable.contentHeight, Math.max(lazyImage.height * image.scale, flickable.height));
189191 }
190192 }
191193 }
tests/qmltests/Dash/Previews/tst_Preview.qml+1−1
@@ -23,7 +23,7 @@ import Unity 0.2 as Unity
2323Rectangle {
2424 id: root
2525 width: units.gu(60)
26− height: units.gu(80)
26+ height: units.gu(60)
2727 color: Theme.palette.selected.background
2828
2929 Item {
tests/qmltests/Dash/Previews/tst_PreviewHeader.qml+71−4
@@ -24,6 +24,12 @@ Rectangle {
2424 width: units.gu(60)
2525 height: units.gu(80)
2626
27+ property var origHeaderjson: {
28+ "title": "THE TITLE",
29+ "subtitle": "Something catchy",
30+ "mascot": "../graphics/play_button.png"
31+ }
32+
2733 property var headerjson: {
2834 "title": "THE TITLE",
2935 "subtitle": "Something catchy",
@@ -43,14 +49,75 @@ Rectangle {
4349 }
4450
4551 UT.UnityTestCase {
52+ id: testCase
4653 name: "PreviewHeaderTest"
4754 when: windowShown
4855
56+ property Item mascotShapeLoader: findChild(previewHeader, "mascotShapeLoader")
57+ property Item outerRow: findChild(previewHeader, "outerRow")
58+ property Item column: findChild(previewHeader, "column")
59+
60+ function initTestCase() {
61+ verify(typeof testCase.mascotShapeLoader === "object", "Couldn't find mascot loader object.");
62+ verify(typeof testCase.outerRow === "object", "Couldn't find outerRow object.");
63+ verify(typeof testCase.column === "object", "Couldn't find column object.");
64+
65+ headerjson.mascot = "";
66+ headerjson.title = "";
67+ headerjson.subtitle = "";
68+ previewHeader.widgetData = headerjson;
69+ }
70+
71+ function test_mascot_data() {
72+ return [
73+ { tag: "Empty", source: "", loaderVisible: false, visible: false },
74+ { tag: "Invalid", source: "bad_path", loaderVisible: true, visible: false },
75+ { tag: "Valid", source: "../graphics/play_button.png", loaderVisible: true, visible: true },
76+ ]
77+ }
78+
79+ function test_mascot(data) {
80+ headerjson.mascot = data.source;
81+ previewHeader.widgetData = headerjson;
82+
83+ tryCompare(testCase.mascotShapeLoader, "visible", data.loaderVisible);
84+ if (data.loaderVisible) {
85+ tryCompareFunction(function() { return findChild(previewHeader, "mascotShape") != null }, true);
86+ var mascot = findChild(previewHeader, "mascotShape")
87+ tryCompare(mascot, "visible", data.visible);
88+ }
89+ }
90+
91+ function test_dimensions_data() {
92+ return [
93+ { tag: "Column width with mascot", object: column, width: previewHeader.width - mascotShapeLoader.width - outerRow.margins * 3, mascot: "artwork/avatar.png" },
94+ { tag: "Header height", object: previewHeader, height: function() { return outerRow.height + outerRow.margins * 2 } },
95+ ]
96+ }
97+
98+ function test_dimensions(data) {
99+ if (data.hasOwnProperty("mascot")) {
100+ headerjson.mascot = data.mascot;
101+ }
102+ previewHeader.widgetData = headerjson;
103+
104+ if (data.hasOwnProperty("width")) {
105+ tryCompare(data.object, "width", data.width);
106+ }
107+
108+ if (data.hasOwnProperty("height")) {
109+ tryCompareFunction(function() { return data.object.height === data.height() }, true);
110+ }
111+ }
112+
49113 function test_json() {
50− var cardHeader = findChild(previewHeader, "cardHeader");
51− compare(cardHeader.title, "THE TITLE");
52− compare(cardHeader.subtitle, "Something catchy");
53− compare(cardHeader.mascot.toString().slice(-24), "graphics/play_button.png");
114+ headerjson = origHeaderjson;
115+ previewHeader.widgetData = headerjson;
116+
117+ var innerPreviewHeader = findChild(previewHeader, "innerPreviewHeader");
118+ compare(innerPreviewHeader.title, "THE TITLE");
119+ compare(innerPreviewHeader.subtitle, "Something catchy");
120+ compare(innerPreviewHeader.mascot.toString().slice(-24), "graphics/play_button.png");
54121 }
55122 }
56123}
tests/qmltests/Dash/Previews/tst_PreviewTextSummary.qml+5−5
@@ -42,7 +42,7 @@ Rectangle {
4242
4343 PreviewTextSummary {
4444 id: previewTextSummary
45− anchors.fill: parent
45+ anchors { left: parent.left; right: parent.right }
4646 widgetData: widgetDataComplete
4747 }
4848
@@ -51,6 +51,7 @@ Rectangle {
5151 when: windowShown
5252
5353 property var textLabel: findChild(previewTextSummary, "textLabel")
54+ property var titleLabel: findChild(previewTextSummary, "titleLabel")
5455
5556 function init() {
5657 verify(typeof textLabel === "object", "TextLabel object could not be found.")
@@ -61,16 +62,14 @@ Rectangle {
6162 }
6263
6364 function test_optional_title() {
64− var titleLabel = findChild(previewTextSummary, "titleLabel")
65−
6665 // verify titleLabel is visible and textLabel is anchored below it
6766 compare(titleLabel.visible, true)
68− compare(textLabel.y, titleLabel.height)
67+ tryCompare(textLabel, "y", titleLabel.height)
6968
7069 // verify titleLabel disappears and textLabel moves up
7170 previewTextSummary.widgetData = widgetDataNoTitle
7271 compare(titleLabel.visible, false)
73− compare(textLabel.y, 0)
72+ tryCompare(textLabel, "y", 0)
7473 }
7574
7675 function test_see_more() {
@@ -96,6 +95,7 @@ Rectangle {
9695 verify(textLabel.lineCount <= textLabel.maximumCollapsedLineCount)
9796 compare(seeMore.visible, false)
9897 tryCompare(textLabel, "height", textLabel.contentHeight)
98+ tryCompare(previewTextSummary, "height", titleLabel.height + textLabel.height)
9999 }
100100 }
101101}
tests/qmltests/Dash/Previews/tst_PreviewZoomableImage.qml+7−5
@@ -26,12 +26,12 @@ Rectangle {
2626 color: "lightgrey"
2727
2828 property var widgetData0: {
29− "source": ""
29+ "source": Qt.resolvedUrl("../artwork/checkers.png"),
30+ "zoomable": false
3031 }
3132
3233 property var widgetData1: {
33− "source": Qt.resolvedUrl("../artwork/checkers.png"),
34− "zoomable": false
34+ "source": ""
3535 }
3636
3737 PreviewZoomableImage {
@@ -49,11 +49,13 @@ Rectangle {
4949
5050 zoomableImage.widgetData = widgetData0;
5151 waitForRendering(zoomableImage);
52− tryCompare(image, "imageState", "default");
52+ waitForRendering(image);
53+ tryCompare(image, "imageState", "ready");
5354
5455 zoomableImage.widgetData = widgetData1;
5556 waitForRendering(zoomableImage);
56− tryCompare(image, "imageState", "ready");
57+ waitForRendering(image);
58+ tryCompare(image, "imageState", "default");
5759 }
5860 }
5961}
tests/qmltests/Dash/tst_Card.qml+78−92
@@ -29,8 +29,8 @@ Rectangle {
2929
3030 property string cardData: '
3131 {
32− "art": "../../tests/qmltests/Dash/artwork/music-player-design.png",
33− "mascot": "../../tests/qmltests/Dash/artwork/avatar.png",
32+ "art": "../../../tests/qmltests/Dash/artwork/music-player-design.png",
33+ "mascot": "../../../tests/qmltests/Dash/artwork/avatar.png",
3434 "title": "foo",
3535 "subtitle": "bar",
3636 "summary": "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
@@ -98,21 +98,26 @@ Rectangle {
9898
9999 CardTool {
100100 id: cardTool
101− template: card.template
102− components: card.components
101+ template: Helpers.update(JSON.parse(Helpers.defaultLayout), Helpers.tryParse(layoutArea.text, layoutError))['template'];
102+ components: Helpers.update(JSON.parse(Helpers.defaultLayout), Helpers.tryParse(layoutArea.text, layoutError))['components'];
103103 viewWidth: units.gu(48)
104104 }
105105
106− Card {
107− id: card
108− anchors { top: parent.top; left: parent.left; margins: units.gu(1) }
106+ readonly property var card: loader.item
109107
110− width: cardTool.cardWidth || implicitWidth
111− height: cardTool.cardHeight || implicitHeight
108+ Loader {
109+ id: loader
110+ anchors { top: parent.top; left: parent.left; margins: units.gu(1) }
112111
113− template: Helpers.update(JSON.parse(Helpers.defaultLayout), Helpers.tryParse(layoutArea.text, layoutError))['template'];
114− components: Helpers.update(JSON.parse(Helpers.defaultLayout), Helpers.tryParse(layoutArea.text, layoutError))['components'];
115− cardData: Helpers.mapData(dataArea.text, components, dataError)
112+ sourceComponent: cardTool.cardComponent
113+ onLoaded: {
114+ item.template = Qt.binding(function() { return cardTool.template; });
115+ item.components = Qt.binding(function() { return cardTool.components; });
116+ item.cardData = Qt.binding(function() { return Helpers.mapData(dataArea.text, cardTool.components, dataError); });
117+ item.width = Qt.binding(function() { return cardTool.cardWidth || item.implicitWidth; });
118+ item.height = Qt.binding(function() { return cardTool.cardHeight || item.implicitHeight; });
119+ item.fixedHeaderHeight = Qt.binding(function() { return cardTool.headerHeight; });
120+ }
116121 }
117122
118123 Rectangle {
@@ -181,60 +186,45 @@ Rectangle {
181186
182187 when: windowShown
183188
184− property Item header: findChild(card, "cardHeader")
185− property Item headerLoader: findChild(card, "cardHeaderLoader")
186− property Item title: findChild(header, "titleLabel")
187− property Item art: findChild(card, "artShape")
189+ property Item title: findChild(card, "titleLabel")
190+ property Item subtitle: findChild(card, "subtitleLabel")
191+ property var headerRow: findChild(card, "outerRow")
192+ property var art: findChild(card, "artShape")
188193 property Item artImage: findChild(card, "artImage")
189194 property Item summary: findChild(card, "summaryLabel")
190195 property Item background: findChild(card, "background")
191196 property Item backgroundLoader: findChild(card, "backgroundLoader")
192197 property Item backgroundImage: findChild(card, "backgroundImage")
193−
194− function initTestCase() {
195− verify(typeof testCase.header === "object", "Couldn't find header object.");
196− verify(typeof testCase.art === "object", "Couldn't find art object.");
197− verify(typeof testCase.artImage === "object", "Couldn't find artImage object.");
198− verify(typeof testCase.summary === "object", "Couldn't find summary object.");
199− verify(typeof testCase.artImage === "object", "Couldn't find background object.");
200− verify(typeof testCase.summary === "object", "Couldn't find backgroundImage object.");
201− }
198+ property Item mascotImage: findChild(card, "mascotImage");
202199
203200 function cleanup() {
204201 selector.selectedIndex = -1;
205202 }
206203
207−
208− function test_header_binding_data() {
209− return [
210− { tag: "Mascot", property: "mascot", value: Qt.resolvedUrl("artwork/avatar.png"), index: 0 },
211− { tag: "Title", property: "title", value: "foo", index: 0 },
212− { tag: "Subtitle", property: "subtitle", value: "bar", index: 0 },
213− ];
214− }
215−
216− function test_header_binding(data) {
217− selector.selectedIndex = data.index;
218− tryCompare(testCase.header, data.property, data.value);
219− }
220−
221204 function test_card_binding_data() {
222205 return [
223− { tag: "Art", object: artImage, property: "source", value: Qt.resolvedUrl("artwork/music-player-design.png"), index: 0 },
224− { tag: "Summary", object: summary, property: "text", field: "summary", index: 0 },
225− { tag: "Fit", object: art, fill: Image.PreserveAspectFit, index: 4 },
206+ { tag: "Art", object: "artImage", property: "source", value: Qt.resolvedUrl("artwork/music-player-design.png"), index: 0 },
207+ { tag: "Summary", object: "summary", property: "text", field: "summary", index: 0 },
208+ { tag: "Fit", object: "art", fill: Image.PreserveAspectFit, index: 4 },
209+ { tag: "Mascot", object: "mascotImage", property: "source", value: Qt.resolvedUrl("artwork/avatar.png"), index: 0 },
210+ { tag: "Title", object: "title", property: "text", value: "foo", index: 0 },
211+ { tag: "Subtitle", object: "subtitle", property: "text", value: "bar", index: 0 },
226212 ];
227213 }
228214
229215 function test_card_binding(data) {
230216 selector.selectedIndex = data.index;
217+ waitForRendering(card);
218+
219+ tryCompareFunction(function() { return testCase[data.object] !== null }, true);
220+ var object = testCase[data.object];
231221
232222 if (data.hasOwnProperty('value')) {
233− tryCompare(data.object, data.property, data.value);
223+ tryCompare(object, data.property, data.value);
234224 }
235225
236226 if (data.hasOwnProperty('field')) {
237− tryCompare(data.object, data.property, card.cardData[data.field]);
227+ tryCompare(object, data.property, card.cardData[data.field]);
238228 }
239229 }
240230
@@ -243,31 +233,21 @@ Rectangle {
243233 { tag: "Medium", width: units.gu(18.5), index: 0 },
244234 { tag: "Small", width: units.gu(12), index: 1 },
245235 { tag: "Large", width: units.gu(38), index: 2 },
246− { tag: "Wide", width: units.gu(18.5), aspect: 0.5, index: 0 },
236+ { tag: "Wide", width: units.gu(18.5), index: 0 },
247237 { tag: "Horizontal", width: units.gu(38), index: 5 },
248238 // Make sure card ends with header when there's no summary
249− { tag: "NoSummary", height: function() { return headerLoader.y + headerLoader.height }, index: 6 },
250− { tag: "HorizontalNoSummary", height: function() { return headerLoader.height }, card_layout: "horizontal", index: 6 },
239+ { tag: "NoSummary", height: function() { var cardToolRow = findChild(cardTool, "outerRow");
240+ return cardToolRow.y + cardToolRow.height + units.gu(1) }, index: 6 },
241+ { tag: "HorizontalNoSummary", height: function() { return headerRow.height + units.gu(2) }, card_layout: "horizontal", index: 6 },
251242 ]
252243 }
253244
254245 function test_card_size(data) {
255− waitForRendering(card);
256246 selector.selectedIndex = data.index;
257247
258− if (data.hasOwnProperty("size")) {
259− card.template['card-size'] = data.size;
260− card.templateChanged();
261− }
262−
263248 if (data.hasOwnProperty("card_layout")) {
264− card.template['card-layout'] = data.card_layout;
265− card.templateChanged();
266− }
267−
268− if (data.hasOwnProperty("aspect")) {
269− card.components['art']['aspect-ratio'] = data.aspect;
270− card.componentsChanged();
249+ cardTool.template['card-layout'] = data.card_layout;
250+ cardTool.templateChanged();
271251 }
272252
273253 if (data.hasOwnProperty("width")) {
@@ -288,25 +268,26 @@ Rectangle {
288268 { tag: "Large", width: units.gu(38), index: 2 },
289269 { tag: "Wide", height: units.gu(19), size: "large", index: 3 },
290270 { tag: "Fit", height: units.gu(38), size: "large", width: units.gu(19), index: 4 },
291− { tag: "VerticalWidth", width: function() { return header.width }, index: 0 },
292− { tag: "HorizontalHeight", height: function() { return header.height }, index: 5 },
293− { tag: "HorizontalWidth", width: function() { return headerLoader.x }, index: 5 },
271+ { tag: "VerticalWidth", width: function() { return headerRow.width + units.gu(1) * 2 }, index: 0 },
272+ { tag: "HorizontalHeight", height: function() { return headerRow.height + units.gu(1) * 2 }, index: 5 },
273+ { tag: "HorizontalWidth", width: function() { return headerRow.x - units.gu(1) }, index: 5 },
294274 ]
295275 }
296276
297277 function test_art_size(data) {
298278 selector.selectedIndex = data.index;
299−
300279 if (data.hasOwnProperty("size")) {
301− card.template['card-size'] = data.size;
302− card.templateChanged();
280+ cardTool.template['card-size'] = data.size;
281+ cardTool.templateChanged();
303282 }
304283
305284 if (data.hasOwnProperty("aspect")) {
306− card.components['art']['aspect-ratio'] = data.aspect;
307− card.componentsChanged();
285+ cardTool.components['art']['aspect-ratio'] = data.aspect;
286+ cardTool.componentsChanged();
308287 }
309288
289+ waitForRendering(card);
290+
310291 if (data.hasOwnProperty("width")) {
311292 if (typeof data.width === "function") {
312293 tryCompareFunction(function() { return art.width === data.width() }, true);
@@ -326,38 +307,40 @@ Rectangle {
326307
327308 function test_art_layout_data() {
328309 return [
329− { tag: "Vertical", left: function() { return 0 }, index: 0},
330− { tag: "Horizontal", left: function() { return art.width }, index: 5 },
310+ { tag: "Vertical", left: function() { return units.gu(1); }, index: 0},
311+ { tag: "Horizontal", left: function() { return art.width + units.gu(1); }, index: 5 },
331312 ];
332313 }
333314
334315 function test_art_layout(data) {
335316 selector.selectedIndex = data.index;
317+ waitForRendering(card);
336318
337− tryCompare(testCase.headerLoader, "x", data.left());
319+ tryCompare(headerRow, "x", data.left());
338320 }
339321
340322 function test_header_layout_data() {
341323 return [
342− { tag: "Vertical", top: function() { return art.y + art.height },
343− left: function() { return art.x }, index: 0 },
344− { tag: "Horizontal", top: function() { return art.y },
345− left: function() { return art.x + art.width }, index: 5 },
346− { tag: "Overlay", top: function() { return art.y + art.height - header.height },
347− left: function() { return art.x }, index: 9 },
324+ { tag: "Vertical", top: function() { return art.y + art.height + units.gu(1) },
325+ left: function() { return art.x + units.gu(1) }, index: 0 },
326+ { tag: "Horizontal", top: function() { return art.y + units.gu(1) },
327+ left: function() { return art.x + art.width + units.gu(1) }, index: 5 },
328+ { tag: "Overlay", top: function() { return art.y + art.height - headerRow.height - units.gu(1) },
329+ left: function() { return art.x + units.gu(1) }, index: 9 },
348330 ]
349331 }
350332
351333 function test_header_layout(data) {
352334 selector.selectedIndex = data.index;
335+ waitForRendering(card);
353336
354− tryCompareFunction(function() { return testCase.headerLoader.y === data.top() }, true);
355− tryCompareFunction(function() { return testCase.headerLoader.x === data.left() }, true);
337+ tryCompareFunction(function() { return testCase.headerRow.y === data.top() }, true);
338+ tryCompareFunction(function() { return testCase.headerRow.x === data.left() }, true);
356339 }
357340
358341 function test_summary_layout_data() {
359342 return [
360− { tag: "With header", top: function() { return headerLoader.y + headerLoader.height }, index: 0 },
343+ { tag: "With header", top: function() { return headerRow.y + headerRow.height + units.gu(1); }, index: 0 },
361344 { tag: "Without header", top: function() { return art.y + art.height }, index: 7 },
362345 ]
363346 }
@@ -365,16 +348,16 @@ Rectangle {
365348 function test_summary_layout(data) {
366349 selector.selectedIndex = data.index;
367350
351+ waitForRendering(card);
352+
368353 tryCompareFunction(function() { return testCase.summary.y === data.top() }, true);
369354 }
370355
371356 function test_art_visibility() {
372357 selector.selectedIndex = 8;
373358
374− tryCompare(testCase.artImage, "source", "");
375− compare(testCase.art.visible, false);
376− compare(testCase.art.height, 0);
377− compare(testCase.art.width, 0);
359+ compare(testCase.artImage, null);
360+ compare(testCase.art, null);
378361 }
379362
380363 function test_background_data() {
@@ -402,7 +385,11 @@ Rectangle {
402385
403386 waitForRendering(card);
404387
405− tryCompare(backgroundLoader, "active", data.visible);
388+ if (data.visible) {
389+ tryCompare(backgroundLoader, "active", true);
390+ } else {
391+ compare(backgroundLoader, null);
392+ }
406393
407394 if (data.hasOwnProperty("color")) {
408395 tryCompare(background, "color", data.color);
@@ -449,13 +436,15 @@ Rectangle {
449436
450437 function test_fontColor(data) {
451438 selector.selectedIndex = 10;
439+ waitForRendering(card);
452440
453441 background.color = data.tag;
454442
455443 var fontColor = data.dark ? "grey" : "white";
456444
457445 tryCompareFunction(function() { return Qt.colorEqual(summary.color, fontColor); }, true);
458− tryCompareFunction(function() { return Qt.colorEqual(header.fontColor, fontColor); }, true);
446+ tryCompareFunction(function() { return Qt.colorEqual(title.color, fontColor); }, true);
447+ tryCompareFunction(function() { return Qt.colorEqual(subtitle.color, fontColor); }, true);
459448 }
460449
461450 function test_mascotShape_data() {
@@ -468,15 +457,12 @@ Rectangle {
468457
469458 function test_mascotShape(data) {
470459 selector.selectedIndex = data.index;
460+ waitForRendering(card);
471461
472462 var shape = findChild(card, "mascotShapeLoader");
473− var image = findChild(card, "mascotImage");
474−
475− verify(shape, "Could not find shape.");
476− verify(image, "Could not find image.");
477463
478− tryCompare(shape, "active", data.shape);
479− tryCompare(image, "visible", !data.shape);
464+ compare(shape !== null, data.shape);
465+ tryCompare(mascotImage, "visible", !data.shape);
480466 }
481467 }
482468}
tests/qmltests/Dash/tst_CardBenchmark.qml+10−7
@@ -54,13 +54,16 @@ Rectangle {
5454 Repeater {
5555 id: cardRepeater
5656 model: 0
57− Card {
58− width: cardTool.cardWidth || implicitWidth
59− height: cardTool.cardHeight || implicitHeight
60−
61− template: cardTool.template
62− components: cardTool.components
63− cardData: Helpers.mapData(root.cardData, components)
57+ Loader {
58+ sourceComponent: cardTool.cardComponent
59+ onLoaded: {
60+ item.objectName = "delegate" + index;
61+ item.width = Qt.binding(function() { return cardTool.cardWidth || implicitWidth; });
62+ item.height = Qt.binding(function() { return cardTool.cardHeight || implicitHeight; });
63+ item.cardData = Qt.binding(function() { return Helpers.mapData(root.cardData, cardTool.components); });
64+ item.template = Qt.binding(function() { return cardTool.template; });
65+ item.components = Qt.binding(function() { return cardTool.components; });
66+ }
6467 }
6568 }
6669
tests/qmltests/Dash/tst_CardHeader.qmldeleted−116
@@ -1,116 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import QtTest 1.0
19−import Ubuntu.Components 0.1
20−import Unity.Test 0.1 as UT
21−import "../../../qml/Dash"
22−
23−
24−Rectangle {
25− width: units.gu(40)
26− height: units.gu(72)
27− color: "lightgrey"
28−
29− CardHeader {
30− id: cardHeader
31− anchors { left: parent.left; right: parent.right }
32− }
33−
34− Rectangle {
35− anchors.fill: cardHeader
36− color: "lightblue"
37− opacity: 0.5
38− }
39−
40− UT.UnityTestCase {
41− id: testCase
42− name: "CardHeader"
43−
44− when: windowShown
45−
46− property Item mascot: findChild(cardHeader, "mascotShapeLoader")
47− property Item titleLabel: findChild(cardHeader, "titleLabel")
48− property Item subtitleLabel: findChild(cardHeader, "subtitleLabel")
49− property Item oldPriceLabel: findChild(cardHeader, "oldPriceLabel")
50− property Item outerRow: findChild(cardHeader, "outerRow")
51− property Item column: findChild(cardHeader, "column")
52−
53− function initTestCase() {
54− verify(typeof testCase.mascot === "object", "Couldn't find mascot object.");
55− verify(typeof testCase.titleLabel === "object", "Couldn't find titleLabel object.");
56− verify(typeof testCase.subtitleLabel === "object", "Couldn't find subtitleLabel object.");
57− verify(typeof testCase.oldPriceLabel === "object", "Couldn't find oldPriceLabel object.");
58− }
59−
60− function cleanup() {
61− cardHeader.mascot = "";
62− cardHeader.title = "";
63− cardHeader.subtitle = "";
64− }
65−
66− function test_mascot_data() {
67− return [
68− { tag: "Empty", source: "", visible: false },
69− { tag: "Invalid", source: "bad_path", visible: false },
70− { tag: "Valid", source: Qt.resolvedUrl("artwork/avatar.png"), visible: true },
71− ]
72− }
73−
74− function test_mascot(data) {
75− cardHeader.mascot = data.source;
76− tryCompare(testCase.mascot, "visible", data.visible);
77− }
78−
79− function test_labels_data() {
80− return [
81− { tag: "Empty", visible: false },
82− { tag: "Title only", title: "Foo", visible: true },
83− { tag: "Subtitle only", subtitle: "Bar", visible: false },
84− { tag: "Both", title: "Foo", subtitle: "Bar", visible: true },
85− ]
86− }
87−
88− function test_labels(data) {
89− cardHeader.title = data.title !== undefined ? data.title : "";
90− cardHeader.subtitle = data.subtitle !== undefined ? data.subtitle : "";
91− tryCompare(cardHeader, "visible", data.visible);
92− }
93−
94− function test_dimensions_data() {
95− return [
96− { tag: "Column width", object: column, width: cardHeader.width },
97− { tag: "Column width with mascot", object: column, width: cardHeader.width - mascot.width - outerRow.margins * 3, mascot: "artwork/avatar.png" },
98− { tag: "Header height", object: cardHeader, height: function() { return outerRow.height + outerRow.margins * 2 } },
99− ]
100− }
101−
102− function test_dimensions(data) {
103− if (data.hasOwnProperty("mascot")) {
104− cardHeader.mascot = data.mascot;
105− }
106−
107− if (data.hasOwnProperty("width")) {
108− tryCompare(data.object, "width", data.width);
109− }
110−
111− if (data.hasOwnProperty("height")) {
112− tryCompareFunction(function() { return data.object.height === data.height() }, true);
113− }
114− }
115− }
116−}
tests/qmltests/Dash/tst_CardTool.qml+11−31
@@ -127,26 +127,6 @@ Rectangle {
127127 }
128128 }
129129 }
130−
131− Card {
132− id: card
133− template: cardTool.template;
134− components: cardTool.components;
135− cardData: Helpers.mapData(dataArea.text, components, dataError)
136−
137− width: cardTool.cardWidth || implicitWidth
138− height: cardTool.cardHeight || implicitHeight
139−
140− clip: true
141− headerAlignment: cardTool.headerAlignment
142−
143− Rectangle {
144− anchors.fill: parent
145− color: "transparent"
146− border.width: 1
147− border.color: "green"
148− }
149− }
150130 }
151131
152132 Rectangle {
@@ -257,7 +237,7 @@ Rectangle {
257237 id: testCase
258238 name: "Card"
259239
260− property Card internalCard: findChild(cardTool, "cardToolCard")
240+ property var internalCard: findChild(cardTool, "cardToolCard")
261241
262242 when: windowShown
263243
@@ -272,16 +252,16 @@ Rectangle {
272252
273253 function test_card_size_data() {
274254 return [
275− { tag: "Medium", width: units.gu(18.5), height: function() { return card.height }, index: 0 },
276− { tag: "No art", width: units.gu(18.5), height: function() { return card.height }, index: 1 },
277− { tag: "No summary", width: units.gu(18.5), height: function() { return card.height }, index: 2 },
278− { tag: "Just header", width: units.gu(18.5), height: function() { return card.height }, index: 3 },
279− { tag: "Just title", width: units.gu(18.5), height: function() { return card.height }, index: 4 },
280− { tag: "Title and subtitle", width: units.gu(18.5), height: function() { return card.height }, index: 5 },
281− { tag: "Title and mascot", width: units.gu(18.5), height: function() { return card.height }, index: 6 },
282− { tag: "Small", width: units.gu(12), height: function() { return card.height }, index: 7 },
283− { tag: "Large", width: units.gu(38), height: function() { return card.height }, index: 8 },
284− { tag: "Horizontal", width: units.gu(38), height: function() { return card.height }, index: 9 },
255+ { tag: "Medium", width: units.gu(18.5), height: function() { return internalCard ? internalCard.height : 0 }, index: 0 },
256+ { tag: "No art", width: units.gu(18.5), height: function() { return internalCard ? internalCard.height : 0 }, index: 1 },
257+ { tag: "No summary", width: units.gu(18.5), height: function() { return internalCard ? internalCard.height : 0 }, index: 2 },
258+ { tag: "Just header", width: units.gu(18.5), height: function() { return internalCard ? internalCard.height : 0 }, index: 3 },
259+ { tag: "Just title", width: units.gu(18.5), height: function() { return internalCard ? internalCard.height : 0 }, index: 4 },
260+ { tag: "Title and subtitle", width: units.gu(18.5), height: function() { return internalCard ? internalCard.height : 0 }, index: 5 },
261+ { tag: "Title and mascot", width: units.gu(18.5), height: function() { return internalCard ? internalCard.height : 0 }, index: 6 },
262+ { tag: "Small", width: units.gu(12), height: function() { return internalCard ? internalCard.height : 0 }, index: 7 },
263+ { tag: "Large", width: units.gu(38), height: function() { return internalCard ? internalCard.height : 0 }, index: 8 },
264+ { tag: "Horizontal", width: units.gu(38), height: function() { return internalCard ? internalCard.height : 0 }, index: 9 },
285265 { tag: "OrganicGrid", width: undefined, height: undefined, index: 0, layout_index: 1},
286266 { tag: "Journal", width: undefined, height: units.gu(20), size: 20, index: 0, layout_index: 2 },
287267 { tag: "OversizedJournal", width: undefined, height: units.gu(18.5), size: 40, index: 0, layout_index: 2 },
tests/qmltests/Dash/tst_Dash.qml+1−1
@@ -127,7 +127,7 @@ Item {
127127 var dashContent = findChild(dash, "dashContent");
128128 var current_index = dashContent.currentIndex;
129129
130− tabbar.selectedIndex = data.visualIndex;
130+ tabbar.model.selectedIndex = data.visualIndex;
131131 compare(dashContent.currentIndex, data.shouldBeVisible ? data.visualIndex : current_index);
132132 }
133133 }
tests/qmltests/Dash/tst_DashContent.qml+34−19
@@ -67,13 +67,17 @@ Item {
6767 name: "DashContent"
6868 when: scopesModel.loaded && windowShown
6969
70− function init() {
71− scopesModel.clear();
70+ function loadScopes() {
7271 scopeLoadedSpy.clear();
7372 scopesModel.load();
7473 tryCompare(scopeLoadedSpy, "count", 4);
7574 }
7675
76+ function init() {
77+ scopesModel.clear();
78+ loadScopes();
79+ }
80+
7781 function cleanup() {
7882 movementStartedSpy.clear();
7983 dashContent.visible = true;
@@ -93,9 +97,7 @@ Item {
9397 compare(dashContentList.count, 0, "DashContent should have 0 items when it starts");
9498 tryCompare(dashContentList, "currentIndex", -1);
9599
96− scopeLoadedSpy.clear();
97− scopesModel.load();
98− tryCompare(scopeLoadedSpy, "count", 4);
100+ loadScopes();
99101
100102 verify(dashContentList.currentIndex >= 0);
101103 }
@@ -109,9 +111,7 @@ Item {
109111 // pretend we're running after a model reset
110112 dashContentList.currentIndex = 27;
111113
112− scopeLoadedSpy.clear();
113− scopesModel.load();
114− tryCompare(scopeLoadedSpy, "count", 4);
114+ loadScopes();
115115
116116 verify(dashContentList.currentIndex >= 0 && dashContentList.currentIndex < 5);
117117 }
@@ -166,7 +166,7 @@ Item {
166166
167167 // test greater than scope count.
168168 var currentScopeIndex = dashContent.currentIndex;
169− dashContent.setCurrentScopeAtIndex(scopesModel.count, true, false);
169+ dashContent.setCurrentScopeAtIndex(8, true, false);
170170 compare(dashContent.currentIndex, currentScopeIndex, "Scope should not change if changing to greater index than count");
171171 }
172172
@@ -195,7 +195,7 @@ Item {
195195 dashContent.setCurrentScopeAtIndex(data.index, true, false);
196196 tryCompareFunction(get_current_item_object_name, data.objectName)
197197 var pageHeader = findChild(dashContent, "pageHeader");
198− compare(pageHeader.scope, scopesModel.get(data.index));
198+ compare(pageHeader.scope, scopesModel.getScope(data.index));
199199 }
200200
201201 function test_is_active_data() {
@@ -212,9 +212,9 @@ Item {
212212 dashContent.setCurrentScopeAtIndex(data.select, true, false);
213213 dashContent.visible = data.visible;
214214
215− tryCompare(scopesModel.get(0), "isActive", data.active0);
216− tryCompare(scopesModel.get(1), "isActive", data.active1);
217− tryCompare(scopesModel.get(2), "isActive", data.active2);
215+ tryCompare(scopesModel.getScope(0), "isActive", data.active0);
216+ tryCompare(scopesModel.getScope(1), "isActive", data.active1);
217+ tryCompare(scopesModel.getScope(2), "isActive", data.active2);
218218 }
219219
220220 function doFindMusicButton(parent) {
@@ -326,8 +326,6 @@ Item {
326326 }
327327
328328 function test_previewOpenClose() {
329− tryCompare(scopeLoadedSpy, "count", 4);
330−
331329 var previewListView = findChild(dashContent, "dashContentPreviewList");
332330 tryCompare(previewListView, "open", false);
333331
@@ -352,8 +350,6 @@ Item {
352350 },
353351 true);
354352
355− tryCompare(scopeLoadedSpy, "count", 4);
356−
357353 var previewListView = findChild(dashContent, "dashContentPreviewList");
358354 tryCompare(previewListView, "open", false);
359355
@@ -368,8 +364,6 @@ Item {
368364 }
369365
370366 function test_previewCycle() {
371− tryCompare(scopeLoadedSpy, "count", 4);
372−
373367 var categoryListView = findChild(dashContent, "categoryListView");
374368 categoryListView.positionAtBeginning();
375369
@@ -392,5 +386,26 @@ Item {
392386 }
393387 closePreview();
394388 }
389+
390+ function test_carouselAspectRatio() {
391+ tryCompareFunction(function() {
392+ var scope = findChild(dashContent, "MockScope1 loader");
393+ if (scope != null) {
394+ var dashCategory1 = findChild(scope, "dashCategory1");
395+ if (dashCategory1 != null) {
396+ var tile = findChild(dashCategory1, "carouselDelegate1");
397+ return tile != null;
398+ }
399+ }
400+ return false;
401+ },
402+ true);
403+
404+ var scope = findChild(dashContent, "MockScope1 loader");
405+ var dashCategory1 = findChild(scope, "dashCategory1");
406+ var cardTool = findChild(dashCategory1, "cardTool");
407+ var carouselLV = findChild(dashCategory1, "listView");
408+ verify(carouselLV.tileWidth / carouselLV.tileHeight == cardTool.components["art"]["aspect-ratio"]);
409+ }
395410 }
396411}
tests/qmltests/Dash/tst_GenericScopeView.qml+12−11
@@ -39,7 +39,7 @@ Item {
3939 id: scopes
4040
4141 onLoadedChanged: {
42− genericScopeView.scope = scopes.get(2)
42+ genericScopeView.scope = scopes.getScope(2)
4343 }
4444 }
4545
@@ -67,7 +67,7 @@ Item {
6767 when: scopes.loaded && windowShown
6868
6969 function init() {
70− genericScopeView.scope = scopes.get(2)
70+ genericScopeView.scope = scopes.getScope(2)
7171 shell.width = units.gu(120)
7272 genericScopeView.categoryView.positionAtBeginning();
7373 tryCompare(genericScopeView.categoryView, "contentY", 0)
@@ -96,36 +96,37 @@ Item {
9696
9797 function test_showDash() {
9898 previewListView.open = true;
99− scopes.get(2).showDash();
99+ scopes.getScope(2).showDash();
100100 tryCompare(previewListView, "open", false);
101101 }
102102
103103 function test_hideDash() {
104104 previewListView.open = true;
105− scopes.get(2).hideDash();
105+ scopes.getScope(2).hideDash();
106106 tryCompare(previewListView, "open", false);
107107 }
108108
109109 function test_searchQuery() {
110− genericScopeView.scope = scopes.get(0);
110+ genericScopeView.scope = scopes.getScope(0);
111111 genericScopeView.scope.searchQuery = "test";
112− genericScopeView.scope = scopes.get(1);
112+ genericScopeView.scope = scopes.getScope(1);
113113 genericScopeView.scope.searchQuery = "test2";
114− genericScopeView.scope = scopes.get(0);
114+ genericScopeView.scope = scopes.getScope(0);
115115 tryCompare(genericScopeView.scope, "searchQuery", "test");
116− genericScopeView.scope = scopes.get(1);
116+ genericScopeView.scope = scopes.getScope(1);
117117 tryCompare(genericScopeView.scope, "searchQuery", "test2");
118118 }
119119
120120 function test_changeScope() {
121121 genericScopeView.scope.searchQuery = "test"
122− genericScopeView.scope = scopes.get(1)
123− genericScopeView.scope = scopes.get(2)
122+ genericScopeView.scope = scopes.getScope(1)
123+ genericScopeView.scope = scopes.getScope(2)
124124 tryCompare(genericScopeView.scope, "searchQuery", "test")
125125 }
126126
127127 function test_filter_expand_collapse() {
128128 // wait for the item to be there
129+ waitForRendering(genericScopeView);
129130 tryCompareFunction(function() { return findChild(genericScopeView, "dashSectionHeader0") != null; }, true);
130131
131132 var header = findChild(genericScopeView, "dashSectionHeader0")
@@ -199,7 +200,7 @@ Item {
199200 var header0 = findChild(genericScopeView, "dashSectionHeader0")
200201 mouseClick(header0, header0.width / 2, header0.height / 2);
201202 tryCompare(category, "filtered", false);
202− tryCompare(category.item, "delegateCreationEnd", category.item.delegateCreationBegin + genericScopeView.height);
203+ tryCompareFunction(function() { return category.item.height == genericScopeView.height - category.item.displayMarginBeginning - category.item.displayMarginEnd; }, true);
203204 mouseClick(header0, header0.width / 2, header0.height / 2);
204205 tryCompare(category, "filtered", true);
205206 }
tests/qmltests/Greeter/tst_Lockscreen.qml+209−31
@@ -17,31 +17,40 @@
1717import QtQuick 2.0
1818import QtTest 1.0
1919import ".."
20−import "../../../qml/Greeter"
20+import "../../../qml/Components"
2121import Ubuntu.Components 0.1
2222import LightDM 0.1 as LightDM
2323import Unity.Test 0.1 as UT
2424
2525Rectangle {
26− width: units.gu(60)
26+ id: root
27+ width: units.gu(80)
2728 height: units.gu(80)
2829 color: "orange"
2930
3031 Lockscreen {
3132 id: lockscreen
3233 anchors.fill: parent
33− anchors.rightMargin: units.gu(18)
34+ anchors.rightMargin: units.gu(30)
3435 placeholderText: "Please enter your PIN"
36+ wrongPlaceholderText: "Incorrect PIN"
37+ retryText: retryCountTextField.text
3538 alphaNumeric: pinPadCheckBox.checked
36− pinLength: pinLengthTextField.text
39+ minPinLength: minPinLengthTextField.text
40+ maxPinLength: maxPinLengthTextField.text
3741 username: "Lola"
42+ background: "../../../qml/graphics/phone_background.jpg"
43+ infoText: infoTextTextField.text
3844 }
3945
4046 Connections {
4147 target: lockscreen
4248
4349 onEmergencyCall: emergencyCheckBox.checked = true
44− onEntered: enteredLabel.text = passphrase
50+ onEntered: {
51+ enteredLabel.text = passphrase
52+ lockscreen.clear(true)
53+ }
4554 }
4655
4756 Connections {
@@ -49,9 +58,9 @@ Rectangle {
4958
5059 onShowPrompt: {
5160 if (text.indexOf("PIN") >= 0) {
52− lockscreen.alphaNumeric = false
61+ pinPadCheckBox.checked = false
5362 } else {
54− lockscreen.alphaNumeric = true
63+ pinPadCheckBox.checked = true
5564 }
5665 lockscreen.placeholderText = text;
5766 }
@@ -65,6 +74,7 @@ Rectangle {
6574 Column {
6675 anchors.fill: parent
6776 anchors.margins: units.gu(1)
77+ spacing: units.gu(1)
6878
6979 Row {
7080 CheckBox {
@@ -86,12 +96,32 @@ Rectangle {
8696 }
8797 Row {
8898 TextField {
89− id: pinLengthTextField
99+ id: minPinLengthTextField
90100 width: units.gu(7)
91101 text: "4"
92102 }
93103 Label {
94− text: "PIN length"
104+ text: "Min PIN length"
105+ }
106+ }
107+ Row {
108+ TextField {
109+ id: maxPinLengthTextField
110+ width: units.gu(7)
111+ text: "4"
112+ }
113+ Label {
114+ text: "Max PIN length"
115+ }
116+ }
117+ Row {
118+ TextField {
119+ id: retryCountTextField
120+ width: units.gu(7)
121+ text: "3 retries left"
122+ }
123+ Label {
124+ text: "Retries left"
95125 }
96126 }
97127 Label {
@@ -108,12 +138,40 @@ Rectangle {
108138 }
109139 Button {
110140 text: "start auth (1234)"
141+ width: parent.width
111142 onClicked: LightDM.Greeter.authenticate("has-pin")
112143 }
113144 Button {
114145 text: "start auth (password)"
146+ width: parent.width
115147 onClicked: LightDM.Greeter.authenticate("has-password")
116148 }
149+
150+ TextField {
151+ id: infoTextTextField
152+ width: parent.width
153+ placeholderText: "Infotext"
154+ text: "+49 179 3253553"
155+ }
156+
157+ TextField {
158+ id: infoPopupTitleTextField
159+ width: parent.width
160+ placeholderText: "Popup title"
161+ text: "This will be the last attempt"
162+ }
163+
164+ TextArea {
165+ id: infoPopupTextArea
166+ width: parent.width
167+ text: "If the SIM PIN is entered incorrectly, your SIM will be blocked and would require the PUK code to unlock."
168+ }
169+
170+ Button {
171+ text: "open info popup"
172+ width: parent.width
173+ onClicked: lockscreen.showInfoPopup(infoPopupTitleTextField.text, infoPopupTextArea.text)
174+ }
117175 }
118176 }
119177
@@ -121,6 +179,16 @@ Rectangle {
121179 name: "Lockscreen"
122180 when: windowShown
123181
182+ function cleanup() {
183+ lockscreen.clear(false);
184+ }
185+
186+ function waitForLockscreenReady() {
187+ var pinPadLoader = findChild(lockscreen, "pinPadLoader");
188+ tryCompare(pinPadLoader, "status", Loader.Ready)
189+ waitForRendering(lockscreen)
190+ }
191+
124192 function test_loading_data() {
125193 return [
126194 {tag: "numeric", alphanumeric: false, pinPadAvailable: true },
@@ -129,8 +197,8 @@ Rectangle {
129197 }
130198
131199 function test_loading(data) {
132− lockscreen.alphaNumeric = data.alphanumeric
133− waitForRendering(lockscreen)
200+ pinPadCheckBox.checked = data.alphanumeric
201+ waitForLockscreenReady();
134202 if (data.pinPadAvailable) {
135203 compare(findChild(lockscreen, "pinPadButton8").text, "8", "Could not find number 8 on PinPad")
136204 } else {
@@ -147,8 +215,8 @@ Rectangle {
147215
148216 function test_emergency_call(data) {
149217 emergencyCheckBox.checked = false
150− lockscreen.alphaNumeric = data.alphanumeric
151− waitForRendering(lockscreen)
218+ pinPadCheckBox.checked = data.alphanumeric
219+ waitForLockscreenReady();
152220 var emergencyButton = findChild(lockscreen, "emergencyCallIcon")
153221 mouseClick(emergencyButton, units.gu(1), units.gu(1))
154222 tryCompare(emergencyCheckBox, "checked", true)
@@ -163,9 +231,9 @@ Rectangle {
163231 }
164232
165233 function test_labels(data) {
166− lockscreen.alphaNumeric = data.alphanumeric
234+ pinPadCheckBox.checked = data.alphanumeric
167235 lockscreen.placeholderText = data.placeholderText
168− waitForRendering(lockscreen)
236+ waitForLockscreenReady();
169237 compare(findChild(lockscreen, "pinentryField").placeholderText, data.placeholderText, "Placeholdertext is not what it should be")
170238 if (data.alphanumeric) {
171239 compare(findChild(lockscreen, "greeterLabel").text, "Hello " + data.username, "Greeter is not set correctly")
@@ -175,23 +243,25 @@ Rectangle {
175243
176244 function test_unlock_data() {
177245 return [
178− {tag: "numeric", alphanumeric: false, username: "has-pin", password: "1234", pinLength: 4},
179− {tag: "alphanumeric", alphanumeric: true, username: "has-password", password: "password", pinLength: -1},
180− {tag: "numeric (wrong)", alphanumeric: false, username: "has-pin", password: "4321", pinLength: 4},
181− {tag: "alphanumeric (wrong)", alphanumeric: true, username: "has-password", password: "drowssap", pinLength: -1},
182− {tag: "flexible length", alphanumeric: false, username: "has-pin", password: "1234", pinLength: -1},
246+ {tag: "numeric", alphanumeric: false, username: "has-pin", password: "1234", minPinLength: 4, maxPinLength: 4},
247+ {tag: "alphanumeric", alphanumeric: true, username: "has-password", password: "password", minPinLength: -1, maxPinLength: -1},
248+ {tag: "numeric (wrong)", alphanumeric: false, username: "has-pin", password: "4321", minPinLength: 4, maxPinLength: 4},
249+ {tag: "alphanumeric (wrong)", alphanumeric: true, username: "has-password", password: "drowssap", minPinLength: -1, maxPinLength: -1},
250+ {tag: "flexible length", alphanumeric: false, username: "has-pin", password: "1234", minPinLength: -1, maxPinLength: -1},
183251 ]
184252 }
185253
186254 function test_unlock(data) {
187255 enteredLabel.text = ""
188− pinLengthTextField.text = data.pinLength
256+ minPinLengthTextField.text = data.minPinLength
257+ maxPinLengthTextField.text = data.maxPinLength
189258 LightDM.Greeter.authenticate(data.username)
190− waitForRendering(lockscreen)
259+ waitForLockscreenReady();
191260
192261 var inputField = findChild(lockscreen, "pinentryField")
193262 if (data.alphanumeric) {
194263 mouseClick(inputField, units.gu(1), units.gu(1))
264+ tryCompare(inputField, "focus", true);
195265 typeString(data.password)
196266 keyClick(Qt.Key_Enter)
197267 } else {
@@ -200,7 +270,7 @@ Rectangle {
200270 var button = findChild(lockscreen, "pinPadButton" + character)
201271 mouseClick(button, units.gu(1), units.gu(1))
202272 }
203− if (data.pinLength == -1) {
273+ if (data.minPinLength !== data.maxPinLength || data.minPinLength == -1) {
204274 var pinPadButtonErase = findChild(lockscreen, "pinPadButtonErase");
205275 mouseClick(pinPadButtonErase, units.gu(1), units.gu(1));
206276 }
@@ -219,11 +289,12 @@ Rectangle {
219289
220290 function test_clear(data) {
221291 pinPadCheckBox.checked = data.alphanumeric
222− waitForRendering(lockscreen)
292+ waitForLockscreenReady();
223293
224294 var inputField = findChild(lockscreen, "pinentryField")
225295 if (data.alphanumeric) {
226296 mouseClick(inputField, units.gu(1), units.gu(1))
297+ tryCompare(inputField, "activeFocus", true);
227298 typeString("1")
228299 } else {
229300 var button = findChild(lockscreen, "pinPadButton1")
@@ -239,6 +310,16 @@ Rectangle {
239310
240311 wait(0) // Trigger event loop to make sure the animation would start running
241312 compare(animation.running, data.animation)
313+ if (data.animation) {
314+ if (data.alphanumeric) {
315+ tryCompare(inputField, "placeholderText", lockscreen.wrongPlaceholderText)
316+ tryCompare(inputField, "placeholderText", lockscreen.placeholderText)
317+ } else {
318+ var label = findChild(lockscreen, "pinentryFieldPlaceHolder");
319+ tryCompare(label, "text", lockscreen.wrongPlaceholderText)
320+ tryCompare(label, "text", lockscreen.placeholderText)
321+ }
322+ }
242323
243324 // wait for animation to finish to not disturb other tests
244325 tryCompare(animation, "running", false)
@@ -246,33 +327,130 @@ Rectangle {
246327
247328 function test_backspace_data() {
248329 return [
249− {tag: "fixed length", pinLength: 4},
250− {tag: "variable length", pinLength: -1}
330+ {tag: "fixed length", minPinLength: 4, maxPinLength: 4},
331+ {tag: "variable undefined length", minPinLength: -1, maxPinLength: -1},
332+ {tag: "variable restricted length", minPinLength: 4, maxPinLength: 8}
251333 ];
252334 }
253335
254336 function test_backspace(data) {
255337 pinPadCheckBox.checked = false
256− pinLengthTextField.text = data.pinLength
257− waitForRendering(lockscreen);
338+ minPinLengthTextField.text = data.minPinLength
339+ maxPinLengthTextField.text = data.maxPinLength
340+ waitForLockscreenReady();
258341
259342 var pinPadButtonErase = findChild(lockscreen, "pinPadButtonErase");
260343 var backspaceIcon = findChild(lockscreen, "backspaceIcon");
261344 var pinEntryField = findChild(lockscreen, "pinentryField");
262345
263− compare(pinPadButtonErase.iconName, data.pinLength == -1 ? "" : "erase");
264− compare(backspaceIcon.visible, data.pinLength == -1);
346+ var autoConfirmEnabled = data.minPinLength === data.maxPinLength && data.minPinLength !== -1;
347+ compare(pinPadButtonErase.iconName, autoConfirmEnabled ? "erase" : "");
348+ compare(backspaceIcon.visible, !autoConfirmEnabled);
265349
266350 var pinPadButton5 = findChild(lockscreen, "pinPadButton5");
267351 mouseClick(pinPadButton5, units.gu(1), units.gu(1));
268352 compare(pinEntryField.text, "5");
269353
270− if (data.pinLength == -1) {
354+ if (data.minPinLength !== data.maxPinLength) {
271355 mouseClick(backspaceIcon, units.gu(1), units.gu(1));
272356 } else {
273357 mouseClick(pinPadButtonErase, units.gu(1), units.gu(1));
274358 }
275359 compare(pinEntryField.text, "");
276360 }
361+
362+ function test_minMaxLength_data() {
363+ return [
364+ {tag: "undefined", minPinLength: -1, maxPinLength: -1},
365+ {tag: "fixed", minPinLength: 4, maxPinLength: 4},
366+ {tag: "variable, limited", minPinLength: 4, maxPinLength: 8},
367+ ];
368+ }
369+
370+ function test_minMaxLength(data) {
371+ pinPadCheckBox.checked = false
372+ minPinLengthTextField.text = data.minPinLength
373+ maxPinLengthTextField.text = data.maxPinLength
374+ waitForLockscreenReady();
375+
376+ var pinPadButton5 = findChild(lockscreen, "pinPadButton5");
377+ var pinPadButtonErase = findChild(lockscreen, "pinPadButtonErase");
378+ var inputField = findChild(lockscreen, "pinentryField")
379+
380+ for (var i = 0; i < 10; i++) {
381+ mouseClick(pinPadButton5, units.gu(1), units.gu(1));
382+
383+ if (data.minPinLength == data.maxPinLength && data.minPinLength != -1) {
384+ // auto confirm mode...
385+ compare(inputField.text.length, (i+1) % data.minPinLength);
386+ } else {
387+ // manual confirm mode
388+ tryCompare(pinPadButtonErase, "enabled", (i+1) >= data.minPinLength)
389+ if (data.maxPinLength == -1) {
390+ compare(inputField.text.length, i+1);
391+ } else {
392+ compare(inputField.text.length, Math.min(data.maxPinLength, i+1));
393+ }
394+
395+ }
396+ }
397+ }
398+
399+ function test_retryDisplay_data() {
400+ return [
401+ {tag: "empty", retryText: "", shown: false},
402+ {tag: "3 retries left", retryText: "3 retries left", shown: true},
403+ ]
404+ }
405+
406+ function test_retryDisplay(data) {
407+ pinPadCheckBox.checked = false
408+ waitForLockscreenReady();
409+
410+ retryCountTextField.text = data.retryText;
411+ var label = findChild(lockscreen, "retryCountLabel")
412+ compare(label.visible, data.shown);
413+ }
414+
415+ function test_infoPopup() {
416+ verify(findChild(root, "infoPopup") === null);
417+ lockscreen.showInfoPopup("foo", "bar");
418+ tryCompareFunction(function() { return findChild(root, "infoPopup") !== null}, true);
419+
420+ var infoPopup = findChild(root, "infoPopup");
421+ compare(infoPopup.title, "foo");
422+ compare(infoPopup.text, "bar");
423+
424+ signalSpy.signalName = "infoPopupConfirmed"
425+ signalSpy.clear();
426+
427+ var okButton = findChild(root, "infoPopupOkButton");
428+ mouseClick(okButton, okButton.width / 2, okButton.height / 2);
429+
430+ tryCompareFunction(function() { return findChild(root, "infoPopup") === null}, true);
431+
432+ tryCompare(signalSpy, "count", 1);
433+ }
434+
435+ function test_infoTextDisplay_data() {
436+ return [
437+ {tag: "empty string", text: "", shown: false},
438+ {tag: "hello world", text: "hello world", shown: true},
439+ ]
440+ }
441+
442+ function test_infoTextDisplay(data) {
443+ pinPadCheckBox.checked = false
444+ waitForLockscreenReady();
445+
446+ infoTextTextField.text = data.text;
447+ var label = findChild(lockscreen, "infoTextLabel")
448+ compare(label.visible, data.shown);
449+ }
450+ }
451+
452+ SignalSpy {
453+ id: signalSpy
454+ target: lockscreen
277455 }
278456}
tests/qmltests/Greeter/tst_Tablet.qml → tests/qmltests/Greeter/tst_MultiGreeter.qmlrenamed+1−1
@@ -61,7 +61,7 @@ Item {
6161 }
6262
6363 UT.UnityTestCase {
64− name: "Greeter"
64+ name: "MultiGreeter"
6565 when: windowShown
6666
6767 function select_index(i) {
tests/qmltests/Greeter/tst_Phone.qml → tests/qmltests/Greeter/tst_SingleGreeter.qmlrenamed+1−19
@@ -33,8 +33,6 @@ Item {
3333 height: parent.height
3434 x: 0; y: 0
3535
36− defaultBackground: Qt.resolvedUrl("../../../qml/graphics/phone_background.jpg")
37−
3836 property int minX: 0
3937
4038 onXChanged: {
@@ -68,7 +66,7 @@ Item {
6866 }
6967
7068 UT.UnityTestCase {
71− name: "Greeter"
69+ name: "SingleGreeter"
7270 when: windowShown
7371
7472 function cleanup() {
@@ -104,22 +102,6 @@ Item {
104102 tryCompare(LightDM.Infographic, "username", "single")
105103 }
106104
107− function test_background_data() {
108− return [
109− {tag: "set", accounts: Qt.resolvedUrl("../../data/unity/backgrounds/blue.png"), expected: "blue.png"},
110− {tag: "unset", accounts: "", expected: "background.jpg"},
111− {tag: "invalid", accounts: "invalid", expected: "background.jpg"},
112− ]
113− }
114−
115− function test_background(data) {
116− var loader = findChild(greeter, "greeterContentLoader")
117− var background = findChild(loader.item, "greeterBackground")
118− AccountsService.backgroundFile = data.accounts
119− tryCompareFunction(function() { return background.source.toString().indexOf(data.expected) !== -1; }, true)
120− tryCompare(background, "status", Image.Ready)
121− }
122−
123105 function test_initial_selected_signal() {
124106 var greeterObj = greeterComponent.createObject(this)
125107 var spy = findChild(greeterObj, "selectedSpy")
tests/qmltests/tst_Shell.qml−9
@@ -475,15 +475,6 @@ Item {
475475 } while (!isStill);
476476 }
477477
478− function test_background_data() {
479− return [
480− {tag: "red", url: Qt.resolvedUrl("../data/unity/backgrounds/red.png"), expectedUrl: "tests/data/unity/backgrounds/red.png"},
481− {tag: "blue", url: Qt.resolvedUrl("../data/unity/backgrounds/blue.png"), expectedUrl: "tests/data/unity/backgrounds/blue.png"},
482− {tag: "invalid", url: "invalid", expectedUrl: shell.defaultBackground},
483− {tag: "empty", url: "", expectedUrl: shell.defaultBackground}
484− ]
485− }
486−
487478 function test_DashShown_data() {
488479 return [
489480 {tag: "in focus", greeter: false, app: false, launcher: false, indicators: false, expectedShown: true},
tests/utils/modules/Unity/Test/CMakeLists.txt+4−7
@@ -1,3 +1,5 @@
1+include(QmlPlugins)
2+
13add_definitions(-DQT_NO_KEYWORDS)
24
35include_directories(
@@ -14,10 +16,5 @@ add_library(UnityTestQml MODULE ${UnityTestQML_SOURCES})
1416
1517qt5_use_modules(UnityTestQml Core Quick Test)
1618
17−# copy qml files into build directory for shadow builds
18−file(GLOB QML_JS_FILES *.js *.qml qmldir)
19−
20−add_custom_target(UnityTestQmlJsFiles ALL
21− COMMAND cp ${QML_JS_FILES} ${CMAKE_CURRENT_BINARY_DIR}
22− DEPENDS ${QML_JS_FILES}
23−)
19+export_qmlfiles(Unity.Test Unity/Test)
20+export_qmlplugin(Unity.Test 0.1 Unity/Test TARGETS UnityTestQml)
tests/utils/modules/Unity/Test/qmldir+2
@@ -1,3 +1,5 @@
11module Unity.Test
22plugin UnityTestQml
3+typeinfo Test.qmltypes
4+
35UnityTestCase 0.1 UnityTestCase.qml
tools/registry-tracker.cpp+33−26
@@ -49,58 +49,66 @@ RegistryTracker::~RegistryTracker()
4949"Registry.Identity = Registry\n" \
5050"Registry.ConfigFile = %1\n" \
5151"Default.Middleware = Zmq\n" \
52−"Zmq.ConfigFile = %2\n"
52+"Zmq.ConfigFile = %2\n" \
53+"Smartscopes.Registry.Identity = %3\n"
5354
5455#define REGISTRY_CONFIG \
5556"[Registry]\n" \
5657"Middleware = Zmq\n" \
57−"Zmq.Endpoint = ipc://%1/Registry\n" \
58−"Zmq.EndpointDir = %2\n" \
59−"Zmq.ConfigFile = %3\n" \
60−"Scope.InstallDir = %4\n" \
61−"Scoperunner.Path = %5\n" \
62−"%6"
58+"Zmq.ConfigFile = %1\n" \
59+"Scope.InstallDir = %2\n" \
60+"Scoperunner.Path = %3\n"
6361
6462#define MW_CONFIG \
6563"[Zmq]\n" \
66−"EndpointDir.Public = %1\n" \
67−"EndpointDir.Private = %2\n"
64+"EndpointDir = %1\n"
6865
6966void RegistryTracker::runRegistry()
7067{
7168 QDir tmp(QDir::temp());
72− m_runtime_config.setFileTemplate(tmp.filePath("Runtime.ini.XXXXXX"));
73− m_registry_config.setFileTemplate(tmp.filePath("Registry.ini.XXXXXX"));
74− m_mw_config.setFileTemplate(tmp.filePath("Zmq.ini.XXXXXX"));
69+ m_runtime_config.setFileTemplate(tmp.filePath("Runtime.XXXXXX.ini"));
70+ m_registry_config.setFileTemplate(tmp.filePath("Registry.XXXXXX.ini"));
71+ m_mw_config.setFileTemplate(tmp.filePath("Zmq.XXXXXX.ini"));
7572
7673 if (!m_runtime_config.open() || !m_registry_config.open() || !m_mw_config.open() || !m_endpoints_dir.isValid()) {
7774 qWarning("Unable to open temporary files!");
7875 return;
7976 }
8077
81− QString scopesLibdir;
78+ QString scopeInstallDir;
79+ QString scopeRegistryBin;
80+ QString scopeRunnerBin;
8281 {
8382 QProcess pkg_config;
83+ QByteArray output;
8484 QStringList arguments;
85− arguments << "--variable=libdir";
85+ arguments << "--variable=scopesdir";
8686 arguments << "libunity-scopes";
8787 pkg_config.start("pkg-config", arguments);
8888 pkg_config.waitForFinished();
89− QByteArray libdir = pkg_config.readAllStandardOutput();
90− scopesLibdir = QDir(QString::fromLocal8Bit(libdir)).path().trimmed();
89+ output = pkg_config.readAllStandardOutput();
90+ scopeInstallDir = QDir(QString::fromLocal8Bit(output)).path().trimmed();
91+
92+ arguments[0] = "--variable=scoperegistry_bin";
93+ pkg_config.start("pkg-config", arguments);
94+ pkg_config.waitForFinished();
95+ output = pkg_config.readAllStandardOutput();
96+ scopeRegistryBin = QString::fromLocal8Bit(output).trimmed();
97+
98+ arguments[0] = "--variable=scoperunner_bin";
99+ pkg_config.start("pkg-config", arguments);
100+ pkg_config.waitForFinished();
101+ output = pkg_config.readAllStandardOutput();
102+ scopeRunnerBin = QString::fromLocal8Bit(output).trimmed();
91103 }
92104
93− if (scopesLibdir.size() == 0) {
105+ if (scopeInstallDir.isEmpty() || scopeRegistryBin.isEmpty() || scopeRunnerBin.isEmpty()) {
94106 qWarning("Unable to find libunity-scopes package config file");
95107 return;
96108 }
97109
98− QString scopeRunnerPath = QDir(scopesLibdir).filePath("scoperunner/scoperunner");
99−
100− QString runtime_ini = QString(RUNTIME_CONFIG).arg(m_registry_config.fileName()).arg(m_mw_config.fileName());
101110 // FIXME: keep in sync with the SSRegistry config
102− QString serverRegistryConfig(m_serverScopes ? "SS.Registry.Identity = SSRegistry\nSS.Registry.Endpoint = ipc:///tmp/SSRegistry" : "");
103− QString scopeInstallDir(scopesLibdir + "/unity-scopes");
111+ QString runtime_ini = QString(RUNTIME_CONFIG).arg(m_registry_config.fileName()).arg(m_mw_config.fileName()).arg(m_serverScopes ? "SSRegistry" : "");
104112 if (!m_systemScopes) {
105113 m_scopeInstallDir.reset(new QTemporaryDir(tmp.filePath("scopes.XXXXXX")));
106114 if (!m_scopeInstallDir->isValid()) {
@@ -108,8 +116,8 @@ void RegistryTracker::runRegistry()
108116 }
109117 scopeInstallDir = m_scopeInstallDir->path();
110118 }
111− QString registry_ini = QString(REGISTRY_CONFIG).arg(m_endpoints_dir.path()).arg(m_endpoints_dir.path()).arg(m_mw_config.fileName()).arg(scopeInstallDir).arg(scopeRunnerPath).arg(serverRegistryConfig);
112− QString mw_ini = QString(MW_CONFIG).arg(m_endpoints_dir.path()).arg(m_endpoints_dir.path());
119+ QString registry_ini = QString(REGISTRY_CONFIG).arg(m_mw_config.fileName()).arg(scopeInstallDir).arg(scopeRunnerBin);
120+ QString mw_ini = QString(MW_CONFIG).arg(m_endpoints_dir.path());
113121
114122 m_runtime_config.write(runtime_ini.toUtf8());
115123 m_registry_config.write(registry_ini.toUtf8());
@@ -121,11 +129,10 @@ void RegistryTracker::runRegistry()
121129
122130 qputenv("UNITY_SCOPES_RUNTIME_PATH", m_runtime_config.fileName().toLocal8Bit());
123131
124− QString registryBin(QDir(scopesLibdir).filePath("scoperegistry/scoperegistry"));
125132 QStringList arguments;
126133 arguments << m_runtime_config.fileName();
127134 arguments << m_scopes;
128135
129136 m_registry.setProcessChannelMode(QProcess::ForwardedChannels);
130− m_registry.start(registryBin, arguments);
137+ m_registry.start(scopeRegistryBin, arguments);
131138}
tools/unlock-device+2−4
@@ -4,7 +4,7 @@
44# Our goal here is to get an Ubuntu Touch device into a testable unlocked state.
55# This will include a reboot.
66
7−WAIT_COMMAND="sleep 20"
7+WAIT_COMMAND="adb reboot; sleep 5; adb wait-for-device; sleep 20"
88
99while getopts s:w: opt; do
1010 case $opt in
@@ -28,10 +28,8 @@ bus.clearSysState(cookie, dbus_interface="com.canonical.powerd");
2828helpers.unlock_unity()
2929'
3030
31−adb reboot
32−sleep 5
33−adb "wait-for-device"
3431eval "$WAIT_COMMAND"
32+
3533UNLOCK_OUTPUT=$(adb shell "sudo -u phablet -i python3 -c '$UNLOCK_SCRIPT'" 2>&1)
3634if echo "$UNLOCK_OUTPUT" | grep 'Greeter unlocked' >/dev/null; then
3735 echo "I: Unlock passed"