on xenial help sign in
Merge remote-tracking branch 'u8t/master' into xenial_-_mir26
525969aMarius Gripsgard
CMakeLists.txt+29−12
@@ -40,6 +40,19 @@ if(cmake_build_type_lower MATCHES coverage)
40 ENABLE_COVERAGE_REPORT(TARGETS ${SHELL_APP} FILTER /usr/include ${CMAKE_SOURCE_DIR}/tests/* ${CMAKE_BINARY_DIR}/*)
40 ENABLE_COVERAGE_REPORT(TARGETS ${SHELL_APP} FILTER /usr/include ${CMAKE_SOURCE_DIR}/tests/* ${CMAKE_BINARY_DIR}/*)
41endif()
41endif()
42
42
43+find_package (ECM 1.7.0 QUIET NO_MODULE)
44+if (ECM_FOUND)
45+ # Provides us with -DECM_ENABLE_SANITIZERS='X'
46+ # Where X can be address, thread, memory, leak, undefined
47+ include("${ECM_MODULE_DIR}/ECMEnableSanitizers.cmake")
48+endif()
49+
50+if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
51+ if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.0.0")
52+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsuggest-override" )
53+ endif()
54+endif()
55+
43# Make sure we have all the needed symbols
56# Make sure we have all the needed symbols
44set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,defs")
57set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,defs")
45set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-z,defs")
58set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-z,defs")
@@ -49,22 +62,28 @@ add_custom_target(cppcheck COMMAND cppcheck --enable=all -q --error-exitcode=2
49 ${CMAKE_SOURCE_DIR}/src ${CMAKE_SOURCE_DIR}/tests)
62 ${CMAKE_SOURCE_DIR}/src ${CMAKE_SOURCE_DIR}/tests)
50
63
51include(FindPkgConfig)
64include(FindPkgConfig)
52−find_package(Qt5Core 5.4 REQUIRED)
65+find_package(Qt5Core 5.6 REQUIRED)
53−find_package(Qt5Qml 5.4 REQUIRED)
66+find_package(Qt5Qml 5.6 REQUIRED)
54−find_package(Qt5Quick 5.4 REQUIRED)
67+find_package(Qt5Quick 5.6 REQUIRED)
55−find_package(Qt5Gui 5.4 REQUIRED)
68+find_package(Qt5Gui 5.6 REQUIRED)
56−find_package(Qt5DBus 5.4 REQUIRED)
69+find_package(Qt5DBus 5.6 REQUIRED)
57−find_package(Qt5Concurrent 5.4 REQUIRED)
70+find_package(Qt5Concurrent 5.6 REQUIRED)
58−find_package(Qt5Sql 5.4 REQUIRED)
71+find_package(Qt5Sql 5.6 REQUIRED)
59−
72+find_package(Qt5Test 5.6 REQUIRED)
73+
60−pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=22)
74+pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=27)
61pkg_check_modules(GEONAMES REQUIRED geonames>=0.2)
75pkg_check_modules(GEONAMES REQUIRED geonames>=0.2)
62pkg_check_modules(GIO REQUIRED gio-2.0>=2.32)
76pkg_check_modules(GIO REQUIRED gio-2.0>=2.32)
63pkg_check_modules(GLIB REQUIRED glib-2.0>=2.32)
77pkg_check_modules(GLIB REQUIRED glib-2.0>=2.32)
78+pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=12)
64pkg_check_modules(QMENUMODEL REQUIRED qmenumodel)
79pkg_check_modules(QMENUMODEL REQUIRED qmenumodel)
65pkg_check_modules(GD3 REQUIRED gnome-desktop-3.0)
80pkg_check_modules(GD3 REQUIRED gnome-desktop-3.0)
66−pkg_check_modules(UAL REQUIRED ubuntu-app-launch-2)
81+pkg_check_modules(UAL REQUIRED ubuntu-app-launch-3)
67pkg_check_modules(UBUNTUGESTURES REQUIRED UbuntuGestures)
82pkg_check_modules(UBUNTUGESTURES REQUIRED UbuntuGestures)
83+pkg_check_modules(QTDBUSTEST REQUIRED
84+ libqtdbustest-1
85+ libqtdbusmock-1
86+ )
68
87
69### Check UbuntuGestures private headers. No pkg-config (.pc) file is provided for them
88### Check UbuntuGestures private headers. No pkg-config (.pc) file is provided for them
70find_path(UBUNTUGESTUREPRIV
89find_path(UBUNTUGESTUREPRIV
@@ -138,8 +157,6 @@ include_directories(
138 ${APPLICATION_API_INCLUDE_DIRS}
157 ${APPLICATION_API_INCLUDE_DIRS}
139)
158)
140
159
141−set(ARTIFACTS_DIR "" CACHE PATH "Store test artifacts in this directory.")
142−
143# Quiet logger
160# Quiet logger
144set(QUIET_LOGGER OFF CACHE BOOL "Disable test output on stdout.")
161set(QUIET_LOGGER OFF CACHE BOOL "Disable test output on stdout.")
145if(NOT QUIET_LOGGER)
162if(NOT QUIET_LOGGER)
CODING+24
@@ -162,3 +162,27 @@ $ PYTHONPATH=../tests/autopilot autopilot3 run unity8.some.very.long.test.name
162or run them all with
162or run them all with
163
163
164$ PYTHONPATH=../tests/autopilot autopilot3 run unity8
164$ PYTHONPATH=../tests/autopilot autopilot3 run unity8
165+
166+Debugging techniques
167+====================
168+
169+Unity8 heavily uses Qt and with that Qt debugging techniques mostly apply in the
170+same fashion. There are, however, some additional unity8-specific notes:
171+
172+* Enable/disable Qt scenegraph visualizer on the fly:
173+
174+ $ qdbus com.canonical.Unity8.Debugging /com/canonical/Unity8/Debugging SetSceneGraphVisualizer <mode>
175+
176+ This is equivalent to exporting QSG_VISUALIZE=<mode> before running unity8, except it does it on the
177+ fly.
178+
179+* Toggle slow animations on the fly:
180+
181+ $ qdbus com.canonical.Unity8.Debugging /com/canonical/Unity8/Debugging SetSlowAnimations <true|false>
182+
183+* Change logging filter rules on the fly:
184+
185+ $ qdbus com.canonical.Unity8.Debugging /com/canonical/Unity8/Debugging SetLoggingFilterRules <filter>
186+
187+ This is equivalent to exporting QT_LOGGING_RULES or defining them in QT_LOGGING_CONF, except it does
188+ it on the fly.
build.sh+16
@@ -1,5 +1,21 @@
1#!/bin/sh
1#!/bin/sh
2
2
3+#
4+# Copyright (C) 2017 Canonical Ltd
5+#
6+# This program is free software: you can redistribute it and/or modify
7+# it under the terms of the GNU General Public License version 3 as
8+# published by the Free Software Foundation.
9+#
10+# This program is distributed in the hope that it will be useful,
11+# but WITHOUT ANY WARRANTY; without even the implied warranty of
12+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+# GNU General Public License for more details.
14+#
15+# You should have received a copy of the GNU General Public License
16+# along with this program. If not, see <http://www.gnu.org/licenses/>.
17+#
18+
3SETUP=false
19SETUP=false
4CLEAN=false
20CLEAN=false
5NUM_JOBS=$(( `grep -c ^processor /proc/cpuinfo` + 1 ))
21NUM_JOBS=$(( `grep -c ^processor /proc/cpuinfo` + 1 ))
cmake/modules/QmlTest.cmake+188−12
@@ -55,6 +55,55 @@ function(add_qml_test PATH COMPONENT_NAME)
55endfunction()
55endfunction()
56
56
57
57
58+# add_qml_test_data(path component_name
59+# [...]
60+# )
61+#
62+# Install file called ${component_name} (or ${component_name}.qml) under
63+# ${path}.
64+
65+function(add_qml_test_data PATH COMPONENT_NAME)
66+ cmake_parse_arguments(TEST "" "DESTINATION" "" ${ARGN})
67+
68+ set(filename "${CMAKE_CURRENT_SOURCE_DIR}/${PATH}/${COMPONENT_NAME}")
69+
70+ if (IS_DIRECTORY "${filename}")
71+ # As a convenience, allow specifying a directory and we will install
72+ # all files in the dir. We do it this way rather than passing
73+ # DIRECTORY to install() because we want to process any qml files.
74+ file(GLOB subfiles RELATIVE "${filename}" "${filename}/*")
75+ foreach(subfile ${subfiles})
76+ add_qml_test_data("${PATH}/${COMPONENT_NAME}" "${subfile}")
77+ endforeach()
78+ return()
79+ endif()
80+
81+ if (NOT EXISTS "${filename}")
82+ set(filename "${filename}.qml")
83+ set(COMPONENT_NAME "${COMPONENT_NAME}.qml")
84+ endif()
85+
86+ if ("${filename}" MATCHES "\\.qml$")
87+ file(READ "${filename}" contents)
88+ string(REGEX REPLACE "(\"[./]*)/qml(/|\")" "\\1\\2" contents "${contents}")
89+ # this is for (at least) cardcreatortest which pulls in an architecture-specific
90+ # import into the plugins directory (which is a 'qml' once installed).
91+ string(REGEX REPLACE "(import \"[./]*)/plugins(/|\")" "\\1/qml\\2" contents "${contents}")
92+ set(filename "${CMAKE_CURRENT_BINARY_DIR}/${PATH}/${COMPONENT_NAME}")
93+ file(WRITE "${filename}" "${contents}")
94+ endif()
95+
96+ if (TEST_DESTINATION)
97+ set(DESTINATION "${TEST_DESTINATION}")
98+ else()
99+ file(RELATIVE_PATH relcurpath "${CMAKE_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}")
100+ set(DESTINATION "${SHELL_APP_DIR}/${relcurpath}/${PATH}")
101+ endif()
102+
103+ install(FILES "${filename}" DESTINATION "${DESTINATION}")
104+endfunction()
105+
106+
58# add_qml_unittest(path component_name
107# add_qml_unittest(path component_name
59# [...]
108# [...]
60# )
109# )
@@ -71,6 +120,10 @@ function(add_qml_unittest PATH COMPONENT_NAME)
71 ${ARGN}
120 ${ARGN}
72 ARGS -input ${CMAKE_CURRENT_SOURCE_DIR}/${PATH}/tst_${COMPONENT_NAME}.qml ${QMLTEST_ARGS}
121 ARGS -input ${CMAKE_CURRENT_SOURCE_DIR}/${PATH}/tst_${COMPONENT_NAME}.qml ${QMLTEST_ARGS}
73 )
122 )
123+
124+ if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${PATH}/tst_${COMPONENT_NAME}.qml")
125+ add_qml_test_data("${PATH}" "tst_${COMPONENT_NAME}.qml")
126+ endif()
74endfunction()
127endfunction()
75
128
76
129
@@ -91,6 +144,10 @@ function(add_manual_qml_test PATH COMPONENT_NAME)
91 ${ARGN}
144 ${ARGN}
92 ARGS ${CMAKE_CURRENT_SOURCE_DIR}/${PATH}/tst_${COMPONENT_NAME}.qml ${QMLTEST_ARGS}
145 ARGS ${CMAKE_CURRENT_SOURCE_DIR}/${PATH}/tst_${COMPONENT_NAME}.qml ${QMLTEST_ARGS}
93 )
146 )
147+
148+ if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${PATH}/tst_${COMPONENT_NAME}.qml")
149+ add_qml_test_data("${PATH}" "tst_${COMPONENT_NAME}.qml")
150+ endif()
94endfunction()
151endfunction()
95
152
96
153
@@ -108,8 +165,7 @@ endfunction()
108#
165#
109# Logging options in the standard form of "-o filename,format"
166# Logging options in the standard form of "-o filename,format"
110# will be appended to the arguments list, prefixed with ARG_PREFIX.
167# will be appended to the arguments list, prefixed with ARG_PREFIX.
111−# XUnitXML files will be stored in current binary dir or under
168+# XUnitXML files will be stored in current binary dir.
112−# ARTIFACTS_DIR, if set.
113#
169#
114# Three targets will be created:
170# Three targets will be created:
115# - test${component_name} - Runs the test
171# - test${component_name} - Runs the test
@@ -122,14 +178,8 @@ function(add_executable_test COMPONENT_NAME TARGET)
122 cmake_parse_arguments(QMLTEST "${QMLTEST_OPTIONS}" "${QMLTEST_SINGLE}" "${QMLTEST_MULTI}" ${ARGN})
178 cmake_parse_arguments(QMLTEST "${QMLTEST_OPTIONS}" "${QMLTEST_SINGLE}" "${QMLTEST_MULTI}" ${ARGN})
123 mangle_arguments()
179 mangle_arguments()
124
180
125− if(ARTIFACTS_DIR)
181+ file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
126− file(RELATIVE_PATH path ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
127− file(MAKE_DIRECTORY ${ARTIFACTS_DIR}/${path})
128− set(file_logger -o ${ARTIFACTS_DIR}/${path}/test${COMPONENT_NAME}.xml,xunitxml)
129− else()
130− file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
131− set(file_logger -o ${CMAKE_CURRENT_BINARY_DIR}/test${COMPONENT_NAME}.xml,xunitxml)
182+ set(file_logger -o ${CMAKE_CURRENT_BINARY_DIR}/test${COMPONENT_NAME}.xml,xunitxml)
132− endif()
133
183
134 bake_arguments("${QMLTEST_ARG_PREFIX}" args ${iterations} ${file_logger} ${STDOUT_LOGGER})
184 bake_arguments("${QMLTEST_ARG_PREFIX}" args ${iterations} ${file_logger} ${STDOUT_LOGGER})
135
185
@@ -151,7 +201,7 @@ function(add_executable_test COMPONENT_NAME TARGET)
151 add_qmltest_target(xvfbtest${COMPONENT_NAME} ${TARGET}
201 add_qmltest_target(xvfbtest${COMPONENT_NAME} ${TARGET}
152 COMMAND $<TARGET_FILE:xvfb-run> --server-args "-screen 0 1024x768x24" --auto-servernum ${qmltest_command}
202 COMMAND $<TARGET_FILE:xvfb-run> --server-args "-screen 0 1024x768x24" --auto-servernum ${qmltest_command}
153 ${depends}
203 ${depends}
154− ENVIRONMENT QML2_IMPORT_PATH=${imports} ${QMLTEST_ENVIRONMENT} LD_PRELOAD=/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}/mesa/libGL.so.1
204+ ENVIRONMENT QML2_IMPORT_PATH=${imports} LD_PRELOAD=/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}/mesa/libGL.so.1 ${QMLTEST_ENVIRONMENT}
155 TARGETS ${xvfb_targets}
205 TARGETS ${xvfb_targets}
156 )
206 )
157 endif()
207 endif()
@@ -207,8 +257,129 @@ function(add_manual_test COMPONENT_NAME TARGET)
207endfunction()
257endfunction()
208
258
209
259
260+# add_meta_test(target)
261+#
262+# Adds a test target that will run one of our "meta" test targets, like
263+# xvfbuitests. This script will run the specified suite of tests on an
264+# installed system.
265+
266+function(add_meta_test TARGET_NAME)
267+ cmake_parse_arguments(TEST "SERIAL" "" "DEPENDS" ${ARGN})
268+
269+ add_custom_target(${TARGET_NAME})
270+
271+ set(filename "${CMAKE_BINARY_DIR}/tests/scripts/${TARGET_NAME}.sh")
272+ if(TEST_SERIAL)
273+ file(WRITE "${filename}" "#!/bin/sh\n\n")
274+ else()
275+ file(WRITE "${filename}" "#!/usr/bin/parallel --shebang --no-notice\n\n")
276+ endif()
277+
278+ add_meta_dependencies(${TARGET_NAME} DEPENDS ${TEST_DEPENDS})
279+ # else we will write the rest of the script as we add cmake targets
280+
281+ install(FILES "${filename}"
282+ PERMISSIONS OWNER_EXECUTE OWNER_READ OWNER_WRITE
283+ GROUP_EXECUTE GROUP_READ
284+ WORLD_EXECUTE WORLD_READ
285+ DESTINATION "${SHELL_PRIVATE_LIBDIR}/tests/scripts"
286+ )
287+endfunction()
288+
289+
210################### INTERNAL ####################
290################### INTERNAL ####################
211
291
292+function(install_test_script TARGET_NAME)
293+ cmake_parse_arguments(TEST "" "" "COMMAND;ENVIRONMENT" ${ARGN})
294+
295+ # Now write the above test into a shell script that we can run on an
296+ # installed system.
297+ set(script "#!/bin/sh\n\nset -x\n\n")
298+ foreach(ONE_ENV ${TEST_ENVIRONMENT})
299+ set(script "${script}export ${ONE_ENV}\n")
300+ endforeach()
301+ set(script "${script}export UNITY_TESTING_DATADIR=\"${CMAKE_INSTALL_PREFIX}/${SHELL_APP_DIR}\"\n")
302+ set(script "${script}export UNITY_TESTING_LIBDIR=\"${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}\"\n")
303+ set(script "${script}\n")
304+ set(script "${script}XML_ARGS=\n")
305+ set(script "${script}if [ -n \"\$ARTIFACTS_DIR\" ]; then\n")
306+ set(script "${script} XML_ARGS=\"@XML_ARGS@\"\n")
307+ set(script "${script} mkdir -p \"@XML_DIR@\"\n")
308+ set(script "${script} touch \"@XML_FILE@\"\n")
309+ set(script "${script}fi\n")
310+ set(script "${script}\n")
311+ foreach(ONE_CMD ${TEST_COMMAND})
312+ set(script "${script}'${ONE_CMD}' ")
313+ endforeach()
314+ set(script "${script}\"\$@\"") # Allow passing arguments if desired
315+
316+ set(filename "${CMAKE_BINARY_DIR}/tests/scripts/${TARGET_NAME}.sh")
317+
318+ # Generate script to file then read it back to resolve any generator
319+ # expressions before we try to replace paths.
320+ file(GENERATE
321+ OUTPUT "${filename}"
322+ CONTENT "${script}"
323+ )
324+
325+ # Do replacement at install time to save needless work and to make sure
326+ # we are modifying file after generate step above (which doesn't happen
327+ # immediately). We can't use a custom-defined function or macro here...
328+ # So instead we use a giant ugly code block.
329+
330+ # START OF CODE BLOCK --------------------------------------------------
331+ install(CODE "
332+ file(READ \"${filename}\" replacestr)
333+
334+ # Now some replacements...
335+ # tests like to write xml output to our builddir; we don't need that, but we do want them in ARTIFACTS_DIR
336+ string(REGEX MATCH \"( '--parameter')? '-o'( '--parameter')? '[^']*,xunitxml' \" xmlargs \"\${replacestr}\")
337+ string(REGEX REPLACE \"( '--parameter')? '-o'( '--parameter')? '[^']*,xunitxml' \" \" \\\$XML_ARGS \" replacestr \"\${replacestr}\")
338+ string(REGEX REPLACE \"'[^']*/tests/\" \"'\\\$ARTIFACTS_DIR/tests/\" xmlargs \"\${xmlargs}\")
339+ string(REGEX REPLACE \".*'([^']*),xunitxml'.*\" \"\\\\1\" xmlfile \"\${xmlargs}\")
340+ string(REGEX REPLACE \"(.*)/[^/]*\" \"\\\\1\" xmldir \"\${xmlfile}\")
341+ string(REGEX REPLACE \"'\" \"\" xmlargs \"\${xmlargs}\") # strip single quotes
342+ string(REGEX REPLACE \"@XML_ARGS@\" \"\${xmlargs}\" replacestr \"\${replacestr}\")
343+ string(REGEX REPLACE \"@XML_DIR@\" \"\${xmldir}\" replacestr \"\${replacestr}\")
344+ string(REGEX REPLACE \"@XML_FILE@\" \"\${xmlfile}\" replacestr \"\${replacestr}\")
345+ # replace build/source roots with their install paths
346+ string(REPLACE \"${CMAKE_BINARY_DIR}/libs\" \"${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}\" replacestr \"\${replacestr}\")
347+ string(REPLACE \"${CMAKE_BINARY_DIR}/plugins\" \"${CMAKE_INSTALL_PREFIX}/${SHELL_INSTALL_QML}\" replacestr \"\${replacestr}\")
348+ string(REPLACE \"${CMAKE_BINARY_DIR}/tests/libs\" \"${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}/tests/libs\" replacestr \"\${replacestr}\")
349+ string(REPLACE \"${CMAKE_BINARY_DIR}/tests/mocks\" \"${CMAKE_INSTALL_PREFIX}/${SHELL_INSTALL_QML}/mocks\" replacestr \"\${replacestr}\")
350+ string(REPLACE \"${CMAKE_BINARY_DIR}/tests/plugins\" \"${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}/tests/plugins\" replacestr \"\${replacestr}\")
351+ string(REPLACE \"${CMAKE_BINARY_DIR}/tests/qmltests\" \"${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}/tests/qmltests\" replacestr \"\${replacestr}\")
352+ string(REPLACE \"${CMAKE_BINARY_DIR}/tests/uqmlscene\" \"${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}\" replacestr \"\${replacestr}\")
353+ string(REPLACE \"${CMAKE_BINARY_DIR}/tests/utils/modules\" \"${CMAKE_INSTALL_PREFIX}/${SHELL_INSTALL_QML}/utils\" replacestr \"\${replacestr}\")
354+ string(REPLACE \"${CMAKE_SOURCE_DIR}/tests/plugins\" \"${CMAKE_INSTALL_PREFIX}/${SHELL_APP_DIR}/tests/plugins\" replacestr \"\${replacestr}\")
355+ string(REPLACE \"${CMAKE_SOURCE_DIR}/tests/qmltests\" \"${CMAKE_INSTALL_PREFIX}/${SHELL_APP_DIR}/tests/qmltests\" replacestr \"\${replacestr}\")
356+
357+ file(WRITE \"${filename}\" \"\${replacestr}\")
358+ ")
359+ # END OF CODE BLOCK --------------------------------------------------
360+
361+ install(FILES "${filename}"
362+ PERMISSIONS OWNER_EXECUTE OWNER_READ OWNER_WRITE
363+ GROUP_EXECUTE GROUP_READ
364+ WORLD_EXECUTE WORLD_READ
365+ DESTINATION "${SHELL_PRIVATE_LIBDIR}/tests/scripts"
366+ )
367+endfunction()
368+
369+function(add_meta_dependencies UPSTREAM_TARGET)
370+ cmake_parse_arguments(TEST "" "" "DEPENDS" ${ARGN})
371+
372+ foreach(depend ${TEST_DEPENDS})
373+ add_dependencies(${UPSTREAM_TARGET} ${depend})
374+
375+ # add depend to the meta test script that we will install on system
376+ set(filename "${CMAKE_BINARY_DIR}/tests/scripts/${UPSTREAM_TARGET}.sh")
377+ if (EXISTS "${filename}")
378+ file(APPEND "${filename}" "${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}/tests/scripts/${depend}.sh \"\$@\" 2>&1\n")
379+ endif()
380+ endforeach()
381+endfunction()
382+
212# add_qmltest_target(target_name target
383# add_qmltest_target(target_name target
213# COMMAND test_exe [arg1 [...]] # execute this test with arguments
384# COMMAND test_exe [arg1 [...]] # execute this test with arguments
214# [...] # see above for available arguments:
385# [...] # see above for available arguments:
@@ -231,6 +402,11 @@ function(add_qmltest_target TARGET_NAME TARGET)
231 DEPENDS ${TARGET} ${QMLTEST_DEPENDS}
402 DEPENDS ${TARGET} ${QMLTEST_DEPENDS}
232 )
403 )
233
404
405+ install_test_script(${TARGET_NAME}
406+ ENVIRONMENT ${QMLTEST_ENVIRONMENT}
407+ COMMAND ${QMLTEST_COMMAND}
408+ )
409+
234 if(QMLTEST_ADD_TEST)
410 if(QMLTEST_ADD_TEST)
235 add_test(
411 add_test(
236 NAME ${TARGET_NAME}
412 NAME ${TARGET_NAME}
@@ -248,7 +424,7 @@ function(add_qmltest_target TARGET_NAME TARGET)
248 endif()
424 endif()
249
425
250 foreach(UPSTREAM_TARGET ${QMLTEST_TARGETS})
426 foreach(UPSTREAM_TARGET ${QMLTEST_TARGETS})
251− add_dependencies(${UPSTREAM_TARGET} ${TARGET_NAME})
427+ add_meta_dependencies(${UPSTREAM_TARGET} DEPENDS ${TARGET_NAME})
252 endforeach()
428 endforeach()
253endfunction()
429endfunction()
254
430
data/com.canonical.Unity8.gschema.xml+18−3
@@ -12,7 +12,7 @@
12 <description>The usage mode chosen will affect the Window Management behaviour.</description>
12 <description>The usage mode chosen will affect the Window Management behaviour.</description>
13 </key>
13 </key>
14 <key type="y" name="edge-barrier-sensitivity">
14 <key type="y" name="edge-barrier-sensitivity">
15− <default>35</default>
15+ <default>50</default>
16 <range min="1" max="100"/>
16 <range min="1" max="100"/>
17 <summary>Sensitivity of screen edge barriers for the mouse pointer.</summary>
17 <summary>Sensitivity of screen edge barriers for the mouse pointer.</summary>
18 <description>Some UI actions like revealing the launcher or the applications spread are triggered by pushing the mouse pointer against a screen edge. This key defines how much you have to push in order to trigger the associated action.</description>
18 <description>Some UI actions like revealing the launcher or the applications spread are triggered by pushing the mouse pointer against a screen edge. This key defines how much you have to push in order to trigger the associated action.</description>
@@ -23,7 +23,7 @@
23 <description>How much you have to push (in grid units)the mouse against an edge barrier when sensibility is 100.</description>
23 <description>How much you have to push (in grid units)the mouse against an edge barrier when sensibility is 100.</description>
24 </key>
24 </key>
25 <key type="u" name="edge-barrier-max-push">
25 <key type="u" name="edge-barrier-max-push">
26− <default>60</default>
26+ <default>120</default>
27 <summary>Maximum push needed to overcome edge barrier</summary>
27 <summary>Maximum push needed to overcome edge barrier</summary>
28 <description>How much you have to push (in grid units) the mouse against an edge barrier when sensibility is 1.</description>
28 <description>How much you have to push (in grid units) the mouse against an edge barrier when sensibility is 1.</description>
29 </key>
29 </key>
@@ -33,7 +33,7 @@
33 <description>How big (in grid units) the edge-drag sensitive area should be.</description>
33 <description>How big (in grid units) the edge-drag sensitive area should be.</description>
34 </key>
34 </key>
35 <key type="b" name="autohide-launcher">
35 <key type="b" name="autohide-launcher">
36− <default>true</default>
36+ <default>false</default>
37 <summary>Autohide the launcher</summary>
37 <summary>Autohide the launcher</summary>
38 <description>This will only be applied in windowed mode. In staged mode, the launcher will always hide.</description>
38 <description>This will only be applied in windowed mode. In staged mode, the launcher will always hide.</description>
39 </key>
39 </key>
@@ -53,6 +53,21 @@
53 <summary>Enable or disable the indicator pull down menus</summary>
53 <summary>Enable or disable the indicator pull down menus</summary>
54 <description>Toggle the availability of the indicator pull down menus</description>
54 <description>Toggle the availability of the indicator pull down menus</description>
55 </key>
55 </key>
56+ <key type="s" name="appstore-uri">
57+ <default>'application:///org.gnome.Software.desktop'</default>
58+ <summary>The uri to the app store</summary>
59+ <description>This will be used whenever the user triggers an action to open the app store.</description>
60+ </key>
61+ <key type="b" name="always-show-osk">
62+ <default>false</default>
63+ <summary>Force showing/hiding the OSK</summary>
64+ <description>Toggle the visibility of the On Screen Keyboard unconditionally</description>
65+ </key>
66+ <key type="b" name="osk-switch-visible">
67+ <default>false</default>
68+ <summary>Whether the OSK switch should be visible</summary>
69+ <description>Toggle the visibility of the OSK switch</description>
70+ </key>
56 </schema>
71 </schema>
57
72
58 <schema path="/com/canonical/unity8/greeter/" id="com.canonical.Unity8.Greeter" gettext-domain="unity8">
73 <schema path="/com/canonical/unity8/greeter/" id="com.canonical.Unity8.Greeter" gettext-domain="unity8">
data/unity8-dash.desktop.in−1
@@ -5,5 +5,4 @@ Comment=An interface for using the Scopes system
5Exec=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@/unity8-dash
5Exec=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@/unity8-dash
6Terminal=false
6Terminal=false
7Icon=@CMAKE_INSTALL_PREFIX@/@SHELL_APP_DIR@/Dash/unity8-dash.png
7Icon=@CMAKE_INSTALL_PREFIX@/@SHELL_APP_DIR@/Dash/unity8-dash.png
8−NoDisplay=true
9X-Ubuntu-Touch=true
8X-Ubuntu-Touch=true
data/unity8-greeter-wrapper+7−4
@@ -49,9 +49,12 @@ if which ubuntu-touch-session >/dev/null; then
49 TOUCH_WRAPPER=ubuntu-touch-session
49 TOUCH_WRAPPER=ubuntu-touch-session
50fi
50fi
51
51
52−# Pretend that we're in an ubuntu-touch session, so that indicator-network
52+# Advertise as a unity8 session, so that indicator-network will start.
53−# will start.
53+export XDG_SESSION_DESKTOP=unity8
54−export DESKTOP_SESSION=ubuntu-touch
54+export DESKTOP_SESSION=$XDG_SESSION_DESKTOP
55+
56+set_greeter_var QT_IM_MODULE maliitphablet
57+set_greeter_var QT_QPA_PLATFORM ubuntumirclient
55
58
56# We disable ofono using pulse. It causes problems with racing with the user's
59# We disable ofono using pulse. It causes problems with racing with the user's
57# pulse. We need to come up with a better long-term fix for this, because we
60# pulse. We need to come up with a better long-term fix for this, because we
@@ -100,7 +103,7 @@ if [ "$(id -u phablet 2>/dev/null)" = "32011" ]; then
100fi
103fi
101
104
102# And finally actually start the greeter
105# And finally actually start the greeter
103−exec env QT_QPA_PLATFORM=ubuntumirclient MIR_SERVER_FILE=$SUB_SOCKET $TOUCH_WRAPPER $@ &
106+exec env MIR_SERVER_FILE=$SUB_SOCKET $TOUCH_WRAPPER $@ &
104CMD_PID=$!
107CMD_PID=$!
105wait $CMD_PID
108wait $CMD_PID
106CMD_PID=
109CMD_PID=
data/unity8.conf+28−30
@@ -8,31 +8,44 @@ stop on desktop-end
8
8
9kill timeout 120
9kill timeout 120
10
10
11+#
12+# Ensure the shell always gets unthrottled touch events, so that applications
13+# who want full speed low-latency input can get it (LP: #1497105) and so that
14+# apps can use QML touch compression safely (the QML touch compression
15+# algorithm does not support nesting well - LP: #1486341, LP: #1556763 - so
16+# must be fed by the raw input event stream from Unity8).
17+#
18+env QML_NO_TOUCH_COMPRESSION=1
19+
11respawn
20respawn
12expect stop
21expect stop
13
22
23+# FIXME Create an autopilot test that makes sure start+stop and restart
24+# work fine at least 2 times
25+
14pre-start script
26pre-start script
15 # Tell unity-mir to raise SIGSTOP after we start
27 # Tell unity-mir to raise SIGSTOP after we start
16 initctl set-env UNITY_MIR_EMITS_SIGSTOP=1
28 initctl set-env UNITY_MIR_EMITS_SIGSTOP=1
17
29
18− if [ -n "$MIR_SOCKET" ]; then
19− # FIXME Create an autopilot test that makes sure start+stop and restart
20− # work fine at least 2 times
21− # Save original value of MIR_SOCKET in case we are stopped,
30+ # Save original value of MIR_SOCKET so that we can restore it when stopped,
22− # as we modify the variable for future jobs, including ourself.
31+ # as we modify the variable for future jobs, including ourself.
23− UNITY_MIR_SOCKET=$(initctl get-env --global MIR_SOCKET)
24− initctl set-env --global UNITY_MIR_SOCKET=$UNITY_MIR_SOCKET
32+ initctl set-env UNITY_MIR_SOCKET=$MIR_SOCKET
25
33
26− # Point unity8 at unity-system-compositor
34+ # Decide where we are going to put our own socket file
35+ if [ -n "$SNAP" ]; then
36+ # In snappy, we want to hard code our path because our apparmor profile
37+ # only lets us put the socket in one place. And consumers expect it
38+ # there.
39+ MIR_SERVER_FILE=/run/user/$(id -u)/mir_socket
40+ else
27 MIR_SERVER_FILE=$XDG_RUNTIME_DIR/mir_socket
41 MIR_SERVER_FILE=$XDG_RUNTIME_DIR/mir_socket
28− initctl set-env MIR_SERVER_FILE=$MIR_SERVER_FILE
29− initctl set-env MIR_SERVER_HOST_SOCKET=$UNITY_MIR_SOCKET
30−
31− # Point all future jobs in this session to our Mir socket instead of
32− # unity-system-compositor's socket.
33− initctl set-env --global MIR_SOCKET=$MIR_SERVER_FILE
34− gdbus call --session --dest org.freedesktop.DBus --object-path /org/freedesktop/DBus --method org.freedesktop.DBus.UpdateActivationEnvironment "@a{ss} {'MIR_SOCKET': '$MIR_SERVER_FILE'}"
35 fi
42 fi
43+ initctl set-env MIR_SERVER_FILE=$MIR_SERVER_FILE
44+
45+ # Point all future jobs in this session to our Mir socket instead of
46+ # unity-system-compositor's socket.
47+ initctl set-env --global MIR_SOCKET=$MIR_SERVER_FILE
48+ gdbus call --session --dest org.freedesktop.DBus --object-path /org/freedesktop/DBus --method org.freedesktop.DBus.UpdateActivationEnvironment "@a{ss} {'MIR_SOCKET': '$MIR_SERVER_FILE'}"
36
49
37 # Remove the normal and trusted sockets if still there
50 # Remove the normal and trusted sockets if still there
38 if [ -S "$MIR_SERVER_FILE" ]; then
51 if [ -S "$MIR_SERVER_FILE" ]; then
@@ -54,7 +67,6 @@ pre-start script
54 # Workaround for text not rendering correctly
67 # Workaround for text not rendering correctly
55 initctl set-env --global QT_ENABLE_GLYPH_CACHE_WORKAROUND=1
68 initctl set-env --global QT_ENABLE_GLYPH_CACHE_WORKAROUND=1
56
69
57−
58 if [ "$XDG_SESSION_DESKTOP" = "ubuntu-touch" ]; then
70 if [ "$XDG_SESSION_DESKTOP" = "ubuntu-touch" ]; then
59 # On Ubuntu Touch, we currently use a trick where we auto-login the
71 # On Ubuntu Touch, we currently use a trick where we auto-login the
60 # user without a LightDM greeter at all. In this case, we want to
72 # user without a LightDM greeter at all. In this case, we want to
@@ -73,25 +85,11 @@ end script
73exec ${BINARY:-unity8} --mode=$MODE $ARGS
85exec ${BINARY:-unity8} --mode=$MODE $ARGS
74
86
75post-start script
87post-start script
76− # If no MIR_SOCKET was defined on launch, we try to set one here
77− if [ -z "$(initctl get-env --global UNITY_MIR_SOCKET)" ]; then
78− if [ -S "$XDG_RUNTIME_DIR/mir_socket" ]; then
79− mir_socket=$XDG_RUNTIME_DIR/mir_socket
80− elif [ -S "/tmp/mir_socket" ]; then
81− mir_socket=/tmp/mir_socket
82− fi
83−
84− if [ -n "$mir_socket" ]; then
85− initctl set-env --global MIR_SOCKET="$mir_socket"
86− fi
87− fi
88−
89 initctl emit --no-wait indicator-services-start
88 initctl emit --no-wait indicator-services-start
90end script
89end script
91
90
92post-stop script
91post-stop script
93 initctl set-env --global MIR_SOCKET=$UNITY_MIR_SOCKET
92 initctl set-env --global MIR_SOCKET=$UNITY_MIR_SOCKET
94− initctl unset-env --global UNITY_MIR_SOCKET
95 initctl unset-env --global MIR_SERVER_PROMPT_FILE
93 initctl unset-env --global MIR_SERVER_PROMPT_FILE
96 initctl emit application-end
94 initctl emit application-end
97end script
95end script
debian/changelog+401
@@ -4,6 +4,402 @@ unity8 (8.16+ubports) xenial; urgency=medium
4
4
5 -- UBports auto importer <infra@ubports.com> Mon, 31 Jul 2017 03:12:43 +0200
5 -- UBports auto importer <infra@ubports.com> Mon, 31 Jul 2017 03:12:43 +0200
6
6
7+unity8 (8.15+17.04.20170404.7-0ubuntu2) zesty; urgency=medium
8+
9+ [ Michael Zanetti ]
10+ * Make the default store uri point to gnome software center
11+
12+ -- Timo Jyrinki <timo-jyrinki@ubuntu.com> Thu, 06 Apr 2017 10:49:29 +0300
13+
14+unity8 (8.15+17.04.20170404.7-0ubuntu1) zesty; urgency=medium
15+
16+ [ Albert Astals Cid ]
17+ * Tweak app drawer a bit (LP: #1667570)
18+
19+ [ Josh Arenson ]
20+ * Make some small changes to the greeter's session list
21+ * Handle a user in the greeter having never selected a session better
22+ (LP: #1673199)
23+
24+ [ Lukáš Tinkl ]
25+ * Do not occlude windows with an ongoing unmaximize transition (LP:
26+ #1666363)
27+ * Show and implement close buttons for child windows (LP: #1668053)
28+ * Sanitize the logic for pointer vs. touch menus, fixes hiding the
29+ window title in staged mode, when hovering the panel with mouse and
30+ no menus available.
31+
32+ [ Michael Zanetti ]
33+ * Don't hide the launcher on super press if it's locked visible (LP:
34+ #1675373)
35+ * fix searchfield selection in drawer (LP: #1677259)
36+ * make sure the stage has focus when going to spread (LP: #1672053,
37+ #1672673, #1676995)
38+ * don't autostart the dash app, but show its .desktop file instead
39+
40+ -- Michał Sawicz <michal.sawicz@canonical.com> Tue, 04 Apr 2017 22:56:06 +0000
41+
42+unity8 (8.15+17.04.20170328.3-0ubuntu1) zesty; urgency=medium
43+
44+ [ Albert Astals Cid ]
45+ * mock: Remove empty property and move invokable
46+ * Tune quicklist item selection
47+ * Fix unminimizing going to the wrong position the second time (LP:
48+ #1671458)
49+ * Remove unclickable gaps on the menubar (LP: #1672722)
50+ * indicators client is a tool
51+ * Make sure we destroy the popups when the item goes away (LP:
52+ #1670338)
53+ * UnityApplicationMocks: Initialize m_state and m_requestedState
54+ * Don't use appInfo after checking it if is null
55+ * Initialize m_privateMode
56+ * Hook up aboutToShow for overflow menus (LP: #1676016)
57+
58+ [ Daniel d'Andrada ]
59+ * Give active focus to child surface qml items (LP: #1671072)
60+ * Satellite child windows (LP: #1673415)
61+ * Tell qtmir/miral about the available desktop area
62+
63+ [ Florian Boucault ]
64+ * WindowStateStorage: use a private QThreadPool to ensure that
65+ WindowStateStorage::saveValue always has a thread available to
66+ execute the query in. (LP: #1675424)
67+
68+ [ Lukáš Tinkl ]
69+ * Protect against loading invalid window geometry (LP: #1674262)
70+ * Remove usage of the deprecated (and non-functional) system-image-
71+ dbus service.
72+ * Implement Ctrl+Alt+T to launch the terminal app (LP: #1673500)
73+ * Only take normal and dialog surface types into account for launcher
74+ items (LP: #1669047)
75+ * Fix the shutdown dialog after recent refactoring in
76+ DBusUnitySessionService (LP: #1676426)
77+
78+ [ Michael Zanetti ]
79+ * drop the grey background behind icons in the drawer (LP: #1675688)
80+
81+ [ Pete Woods ]
82+ * Fix Unity/Platform::isPC, and add tests (LP: #1670657)
83+
84+ -- Michał Sawicz <michal.sawicz@canonical.com> Tue, 28 Mar 2017 21:50:20 +0000
85+
86+unity8 (8.15+17.04.20170321-0ubuntu1) zesty; urgency=medium
87+
88+ [ Albert Astals Cid ]
89+ * Signal aboutToShow (LP: #1664578)
90+ * Support Panel top level items to be disabled (LP: #1670694)
91+ * Improve Launcher ←→ touch menu interaction (LP: #1667620, #1671069)
92+ * Fix real world submenus (e.g. kate) not getting their first item
93+ selected on open (LP: #1666859)
94+
95+ [ Daniel d'Andrada ]
96+ * Really disable the window decoration when in staged mode (LP:
97+ #1670361)
98+ * Don't let clients resize their surfaces while in staged
99+ (phone/tablet) mode (LP: #1670390)
100+ * TopLevelWindowModel: don't put hidden windows in the model (LP:
101+ #1665286)
102+
103+ [ Lukáš Tinkl ]
104+ * Reset always-show-osk gsetting on startup to default value (false
105+ atm)
106+ * Fix the restored-to position with Miral due to the state changes
107+ being async (LP: #1669819)
108+ * Add a cursor name fallback mapping "grabbing" -> "closedhand" for
109+ Breeze
110+ * Fix unsnapping a maximized window from the panel (LP: #1671721)
111+ * Disable altDrag feature outside windowed mode
112+
113+ [ Michael Terry ]
114+ * Don't lock the screen for guest users or users in the nopasswdlogin
115+ group. (LP: #1644237)
116+ * Support GNOME-style logout DBus API (making the Logout, Reboot, and
117+ Shutdown launcher commands work) (LP: #1673229)
118+
119+ [ Michael Zanetti ]
120+ * Add support for closing apps from the spread with "Q" (LP: #1670327)
121+ * hide "private" launcher quicklist entries when the greeter is locked
122+ (LP: #1667649)
123+ * add surface titles to launcher's quicklist (LP: #1661668)
124+ * properly reset the drawer state when cancelling a horizontal drag
125+ (LP: #1669536)
126+ * fix the focus moving correctly between launcher and drawer (LP:
127+ #1669880)
128+ * unfocus the drawer's textfield when it is moved (LP: #1669839)
129+
130+ [ Pete Woods ]
131+ * Fix up indicators-client after refactoring (LP: #1672797)
132+
133+ -- Michał Sawicz <michal.sawicz@canonical.com> Tue, 21 Mar 2017 10:58:13 +0000
134+
135+unity8 (8.15+17.04.20170308-0ubuntu1) zesty; urgency=medium
136+
137+ [ Albert Astals Cid ]
138+ * Let's follow the keyboard order
139+ * Enable the license check (LP: #1590044)
140+ * Show a barebones error message if loading the QML doesn't work
141+ * Make sure cursor is back to normal when closing the window (LP:
142+ #1666158)
143+ * Fix small warning when sensitive is undefined
144+ * Remove unused member variable
145+ * Initialize m_msecsSinceReference
146+ * Add warning if registerService fails
147+ * Move menus Component {} out of the repeater
148+ * Add tool to browse menus of a running app
149+
150+ [ Daniel d'Andrada ]
151+ * Drag child windows with Alt+LeftMouseButton (LP: #1664947)
152+
153+ [ Gerry Boland ]
154+ * TopLevelWindowModel: connect to the OSK surface to know when it goes
155+ away so we can clean up after it. (LP: #1670681)
156+
157+ [ Josh Arenson ]
158+ * Initialize sessionMode to single when mock is reset (LP: #1667463)
159+
160+ [ Lukáš Tinkl ]
161+ * Make the menu string "Back" translatable
162+ * Let the OSK be driven by a switch in indicator-keyboard (LP:
163+ #1521518)
164+ * Disable the tutorial when there's no touchscreen (LP: #1661557)
165+ * Shell chrome fixes (LP: #1658117, #1665723, #1665724, #1669010)
166+ * Cancel the drag as soon as we're entering the spread (LP: #1668642)
167+ * Fix being unable to use window control buttons or menus with touch
168+ (LP: #1667604, #1668387)
169+
170+ [ Michael Terry ]
171+ * Set QT_IM_MODULE in the greeter so that the OSK can come up. (LP:
172+ #1670383)
173+ * Simplify our startup handling of Mir environment variables and set
174+ the right socket path in snappy.
175+
176+ [ Michael Zanetti ]
177+ * Cancel the home key activation if something else is pressed along
178+ with Meta (LP: #1670678)
179+ * close the drawer when something is launched from the launcher (LP:
180+ #1660367)
181+ * use a svg instead of a png for the Launcher's BFB (LP: #1668057)
182+ * change the default setting for the launcher autohiding (LP:
183+ #1670655)
184+
185+ [ Nick Dedekind ]
186+ * Split up Shell::test_spreadDisabled to ensure initial state for each
187+ test.
188+
189+ -- Michał Sawicz <michal.sawicz@canonical.com> Wed, 08 Mar 2017 09:56:46 +0000
190+
191+unity8 (8.15+17.04.20170221-0ubuntu1) zesty; urgency=medium
192+
193+ * Handle ubuntu-app-launch API/ABI break
194+
195+ -- Ken VanDine <ken.vandine@canonical.com> Tue, 21 Feb 2017 13:23:23 +0000
196+
197+unity8 (8.15+17.04.20170216.1-0ubuntu1) zesty; urgency=medium
198+
199+ [ Albert Astals Cid ]
200+ * Make menus items close the menu when clicking on them (LP: #1657082,
201+ #1657399)
202+ * Clicking on an open menu closes it + test
203+ * Make the menus and submenus do not go outside the screen when
204+ popping out
205+ * Auto open submenus on hover (LP: #1657085)
206+ * Make the double click on a menu not be maximize the window below
207+ (LP: #1657079)
208+ * Make the MenuBar InverseMouseArea eat hover events when there's a
209+ popup open (LP: #1657763)
210+ * Make double click on the window decoration maximize (LP: #1657758)
211+ * Eat hover events when the launcher quicklist is open (LP: #1640776)
212+ * Remove TODO now that we require Qt > 5.5
213+ * Serialize two make targets that want to cp to the same target file
214+ (LP: #1660576)
215+ * Remove variable that is always false (LP: #1585910)
216+
217+ [ Daniel d'Andrada ]
218+ * Consolidate launcher API checks
219+
220+ [ Lukáš Tinkl ]
221+ * Fixes for activating minimized windows and restoring fullscreen ones
222+ (LP: #1656808, #1658937, #1658938)
223+
224+ [ Michael Zanetti ]
225+ * move right edge push area up some levels so it can be used on top of
226+ the indicators
227+ * fix minimizing/restoring transitions (LP: #1658936)
228+ * fix some glitches with spread positioning
229+ * fix jumpy animation when closing an item from the spread
230+ * Show the wallpaper while the focused app is moving in staged mode
231+ (LP: #1648251)
232+ * Update the tutorial to mention the app drawer instead of the dash on
233+ long left edge swipe (LP: #1658932)
234+ * prevent hiding the launcher when the mouse hover event is eaten by
235+ the EdgePushArea (LP: #1657045)
236+ * properly invalidate the whole model (LP: #1658190)
237+ * stabilize OrientedShell test (LP: #1658994)
238+
239+ [ Nick Dedekind ]
240+ * Added overflow support to application menus.
241+ * Updated menu colors
242+
243+ -- Michał Sawicz <michal.sawicz@canonical.com> Thu, 16 Feb 2017 13:49:18 +0000
244+
245+unity8 (8.15+17.04.20170206-0ubuntu1) zesty; urgency=medium
246+
247+ [ Daniel d'Andrada ]
248+ * Initial support for child windows (menus, dialogs, tooltips) (LP:
249+ #1543467, #1591384, #1656727)
250+
251+ -- Albert Astals Cid <albert.astals@canonical.com> Mon, 06 Feb 2017 09:12:23 +0000
252+
253+unity8 (8.15+17.04.20170131.1-0ubuntu1) zesty; urgency=medium
254+
255+ [ Rodney Dawes ]
256+ * Remove dependencies on clickscope.
257+
258+ -- Albert Astals Cid <albert.astals@canonical.com> Tue, 31 Jan 2017 14:40:33 +0000
259+
260+unity8 (8.15+17.04.20170124-0ubuntu1) zesty; urgency=medium
261+
262+ [ Albert Astals Cid ]
263+ * Limit tab-focus travelling on dialogs with a fence
264+ * Restore focus to where it was when our ShellDialogs get unloaded
265+ * Update current session after changing the user
266+ * Add keyboard navigation for Indicators
267+ * a window -> the current window
268+ * There's no spreadDelegate_ anymore
269+
270+ [ Daniel d'Andrada ]
271+ * Simplify DecoratedWindow
272+ * Remove unnecessary warning message
273+
274+ [ Josh Arenson ]
275+ * Add a test for the session chooser icon in the greeter's sessions
276+ list
277+
278+ [ Lukáš Tinkl ]
279+ * Fix keymap not being applied on the shell itself (LP: #1626435)
280+ * Shell dialog improvements (kbd focus, mouse eater)
281+ * Start searching directly as you type, w/o having to first
282+ focus/click the search field.
283+ * Add a test for the real implementation of WindowStateStorage
284+ * Use a four finger gesture to open the drawer, much like in u7
285+
286+ [ Michael Terry ]
287+ * Simplify the lightdm mock to make future greeter improvements easier
288+ to test.
289+ * Add support for guest sessions in unity8-greeter.
290+ * Use a model for PAM prompts, supporting more possible interactions.
291+ * Fix grouping of autopkg output and allow optionally passing
292+ arguments to installed test scripts.
293+ * Add support for LightDM hints for manual logins and hiding normal
294+ users.
295+
296+ [ Michael Zanetti ]
297+ * hint the launcher to indicate a successful size change to the user
298+ (LP: #1646457)
299+ * Improvements for the appdrawer (LP: #1648173)
300+ * Adjust home key to still focus the dash instead of messing with the
301+ drawer
302+ * allow 4 finger simulation with mousetouchadaptor
303+
304+ [ Nick Dedekind ]
305+ * Added Alt+F10 shortcut to open app menus. (LP: #1656896)
306+ * Fixed menu layout width calculations. (LP: #1657050)
307+ * Skip Panel::test_drag_indicator_item_down_shows_menu
308+
309+ -- Michał Sawicz <michal.sawicz@canonical.com> Tue, 24 Jan 2017 07:46:58 +0000
310+
311+unity8 (8.15+17.04.20170110.4-0ubuntu1) zesty; urgency=medium
312+
313+ [ Albert Astals Cid ]
314+ * Give focus to one of the buttons of the dialog
315+ * tst_WindowResizeArea: Use default values for mouseFlick speed and
316+ iterations (LP: #1651580)
317+ * Require Qt 5.6 & misc fixes
318+
319+ [ Daniel van Vugt ]
320+ * Deprecate usage of Mir's input resampling, instead opting for: (LP:
321+ #1497105, #1591328)
322+
323+ [ Josh Arenson ]
324+ * Allow the scopes list to automatically scroll when a scope is being
325+ dragged past the bounds of the screen. (LP: #1575319)
326+
327+ [ Lukáš Tinkl ]
328+ * Fix touch window controls being unreachable when the overlay is
329+ being displayed (LP: #1648167)
330+ * Fixup paths for window state storage in snappy environment
331+ * Add Unity.Platform mock for our tests (LP: #1655336)
332+
333+ [ Michael Zanetti ]
334+ * PreviewRatingInput: Use displayText instead of text to
335+ enable/disable the Send button (LP: #1595910)
336+ * Add a D-Bus interface to control some debug facilities on the fly
337+ * some launcher workarounds for the snapping
338+
339+ [ Michał Sawicz ]
340+ * Nuke leftover Platform in IndicatorsManager
341+
342+ [ Nick Dedekind ]
343+ * Added registry for application menus
344+
345+ [ Michael Terry, Nick Dedekind ]
346+ * Run the qmluitests.sh autopkg test against the installed package.
347+
348+ [ Michał Sawicz, Nick Dedekind ]
349+ * Application menus
350+
351+ [ Rodney Dawes ]
352+ * Remove the payments widget and dependency on libpay as no longer
353+ needed.
354+
355+ -- Michał Sawicz <michal.sawicz@canonical.com> Tue, 10 Jan 2017 14:48:42 +0000
356+
357+unity8 (8.15+17.04.20161215-0ubuntu2~1) zesty; urgency=medium
358+
359+ * No change rebuild
360+
361+ -- Timo Jyrinki <timo-jyrinki@ubuntu.com> Wed, 04 Jan 2017 10:54:32 +0200
362+
363+unity8 (8.15+17.04.20161215-0ubuntu1) zesty; urgency=medium
364+
365+ * Let the model deal with some window management decisions (LP:
366+ #1346633)
367+
368+ -- Daniel d'Andrada <daniel.dandrada@canonical.com> Thu, 15 Dec 2016 16:17:29 +0000
369+
370+unity8 (8.15+17.04.20161207.1-0ubuntu1) zesty; urgency=medium
371+
372+ [ Albert Astals Cid ]
373+ * Add the Wsuggest-override flag to gcc
374+ * Add support for compiler sanitizers via ECM
375+ * Use timeStep as delay time (LP: #1642919)
376+ * Bring back fix for 1517830 (LP: #1517830)
377+ * Fix compile warnings in mocks
378+ * Do not hide panel when launching an application if the mouse is on
379+ the panel (LP: #1591311)
380+
381+ [ Daniel d'Andrada ]
382+ * Fix "make tryApplicationWindow"
383+ * Take save/restore functions out of WindowResizeArea
384+
385+ [ Josh Arenson ]
386+ * Enable the greeter to remember which session the user last logged
387+ into (LP: #1631365)
388+
389+ [ Lukáš Tinkl ]
390+ * Fix the Super key not invoking the dash scope home (LP: #1607427)
391+
392+ [ Michael Zanetti ]
393+ * Add the ApplicationDrawer
394+ * tune right edge push (LP: #1646094)
395+ * improve close button visiblity when hovering with the mouse
396+ * Update virtual touchpad visuals and add a tutorial. (LP: #1585220)
397+
398+ [ Pete Woods ]
399+ * MenuItemFactory: Add subtitle support to SwitchItem widget
400+
401+ -- Michał Sawicz <michal.sawicz@canonical.com> Wed, 07 Dec 2016 13:49:24 +0000
402+
7unity8 (8.15+17.04.20161129-0ubuntu1) zesty; urgency=medium
403unity8 (8.15+17.04.20161129-0ubuntu1) zesty; urgency=medium
8
404
9 [ Albert Astals Cid ]
405 [ Albert Astals Cid ]
@@ -7766,3 +8162,8 @@ qml-phone-shell (0.1) quantal; urgency=low
7766 * Initial release
8162 * Initial release
7767
8163
7768 -- Bill Filler <bill.filler@canonical.com> Wed, 10 Oct 2012 10:19:53 -0400
8164 -- Bill Filler <bill.filler@canonical.com> Wed, 10 Oct 2012 10:19:53 -0400
8165+unity8 (8.15+17.04.20170404.7-0ubuntu2) zesty; urgency=medium
8166+
8167+ [ Michael Zanetti ]
8168+ * Make the default store uri point to gnome software center
8169+
debian/control+39−26
@@ -11,6 +11,7 @@ Build-Depends: cmake,
11# to g++ so we don't try to run arm g++
11# to g++ so we don't try to run arm g++
12# on an x86 CPU for example, when cross-compiling.
12# on an x86 CPU for example, when cross-compiling.
13 g++:native,
13 g++:native,
14+ gdb,
14 graphviz,
15 graphviz,
15 gsettings-ubuntu-schemas (>= 0.0.2+14.10.20140815),
16 gsettings-ubuntu-schemas (>= 0.0.2+14.10.20140815),
16 libandroid-properties-dev,
17 libandroid-properties-dev,
@@ -26,19 +27,20 @@ Build-Depends: cmake,
26 libhardware-dev,
27 libhardware-dev,
27 liblightdm-qt5-3-dev,
28 liblightdm-qt5-3-dev,
28 libpam0g-dev,
29 libpam0g-dev,
29− libpay2-dev,
30 libpulse-dev,
30 libpulse-dev,
31− libqmenumodel-dev (>= 0.2.10),
31+ libqmenumodel-dev (>= 0.2.12),
32+ libqtdbusmock1-dev (>= 0.7),
33+ libqtdbustest1-dev,
32 libqt5svg5-dev,
34 libqt5svg5-dev,
33 libqt5xmlpatterns5-dev,
35 libqt5xmlpatterns5-dev,
34 libsystemsettings-dev,
36 libsystemsettings-dev,
35− libubuntu-app-launch2-dev,
37+ libubuntu-app-launch3-dev,
36 libubuntu-download-manager-common-dev,
38 libubuntu-download-manager-common-dev,
37 libubuntugestures5-dev (>= 1.3.2030),
39 libubuntugestures5-dev (>= 1.3.2030),
38 libubuntugestures5-private-dev (>= 1.3.2030),
40 libubuntugestures5-private-dev (>= 1.3.2030),
39 libudev-dev,
41 libudev-dev,
40 libudm-common-dev,
42 libudm-common-dev,
41− libunity-api-dev (>= 7.120),
43+ libunity-api-dev (>= 8.6),
42 libusermetricsoutput1-dev,
44 libusermetricsoutput1-dev,
43# Need those X11 libs touch emulation from mouse events in manual QML tests on a X11 desktop
45# Need those X11 libs touch emulation from mouse events in manual QML tests on a X11 desktop
44 libx11-dev[!arm64 !armhf],
46 libx11-dev[!arm64 !armhf],
@@ -48,9 +50,11 @@ Build-Depends: cmake,
48 pkg-config,
50 pkg-config,
49 python3-all:any,
51 python3-all:any,
50 python3-setuptools,
52 python3-setuptools,
53+ qtdbustest-runner,
51 qml-module-qt-labs-folderlistmodel,
54 qml-module-qt-labs-folderlistmodel,
55+ qml-module-qt-labs-settings,
52 qml-module-qtqml-statemachine,
56 qml-module-qtqml-statemachine,
53− qml-module-qtmultimedia (>= 5.4.1-1ubuntu19~overlay2),
57+ qml-module-qtmultimedia (>= 5.6),
54 qml-module-qtquick-layouts,
58 qml-module-qtquick-layouts,
55 qml-module-qtquick-xmllistmodel,
59 qml-module-qtquick-xmllistmodel,
56 qml-module-qtquick2,
60 qml-module-qtquick2,
@@ -59,15 +63,16 @@ Build-Depends: cmake,
59 qml-module-ubuntu-components (>= 1.3.2030) | qml-module-ubuntu-components-gles (>= 1.3.2030),
63 qml-module-ubuntu-components (>= 1.3.2030) | qml-module-ubuntu-components-gles (>= 1.3.2030),
60 qml-module-ubuntu-web,
64 qml-module-ubuntu-web,
61 qt5-default,
65 qt5-default,
62− qtbase5-dev (>= 5.4),
66+ qtbase5-dev (>= 5.6),
63 qtbase5-dev-tools,
67 qtbase5-dev-tools,
64− qtbase5-private-dev (>= 5.4),
68+ qtbase5-private-dev (>= 5.6),
65− qtdeclarative5-dev (>= 5.4),
69+ qtdeclarative5-dev (>= 5.6),
66 qtdeclarative5-dev-tools,
70 qtdeclarative5-dev-tools,
67− qtdeclarative5-private-dev (>= 5.4),
71+ qtdeclarative5-private-dev (>= 5.6),
68 qtdeclarative5-ubuntu-content1,
72 qtdeclarative5-ubuntu-content1,
69 qtdeclarative5-ubuntu-settings-components (>= 0.11),
73 qtdeclarative5-ubuntu-settings-components (>= 0.11),
70 ttf-ubuntu-font-family,
74 ttf-ubuntu-font-family,
75+ xvfb,
71Standards-Version: 3.9.4
76Standards-Version: 3.9.4
72Homepage: http://launchpad.net/unity
77Homepage: http://launchpad.net/unity
73# If you aren't a member of ~unity-team but need to upload
78# If you aren't a member of ~unity-team but need to upload
@@ -80,7 +85,7 @@ X-Ubuntu-Use-Langpack: yes
80
85
81Package: indicators-client
86Package: indicators-client
82Architecture: any
87Architecture: any
83−Depends: qmenumodel-qml (>= 0.2.10),
88+Depends: qmenumodel-qml (>= 0.2.11),
84 qml-module-ubuntu-components (>= 1.3.2030) | qml-module-ubuntu-components-gles (>= 1.3.2030),
89 qml-module-ubuntu-components (>= 1.3.2030) | qml-module-ubuntu-components-gles (>= 1.3.2030),
85 unity8 (= ${binary:Version}),
90 unity8 (= ${binary:Version}),
86 ${misc:Depends},
91 ${misc:Depends},
@@ -119,9 +124,10 @@ Depends: dmz-cursor-theme,
119 gsettings-desktop-schemas,
124 gsettings-desktop-schemas,
120 libcap2-bin,
125 libcap2-bin,
121 libglib2.0-bin,
126 libglib2.0-bin,
122− qmenumodel-qml (>= 0.2.10),
127+ qmenumodel-qml (>= 0.2.11),
123 qml-module-biometryd,
128 qml-module-biometryd,
124 qml-module-qt-labs-folderlistmodel,
129 qml-module-qt-labs-folderlistmodel,
130+ qml-module-qt-labs-settings,
125 qml-module-qtqml-statemachine,
131 qml-module-qtqml-statemachine,
126 qml-module-qtquick-xmllistmodel,
132 qml-module-qtquick-xmllistmodel,
127 qml-module-qtsysteminfo,
133 qml-module-qtsysteminfo,
@@ -129,7 +135,7 @@ Depends: dmz-cursor-theme,
129 qtdeclarative5-qtmir-plugin (>= 0.4.8),
135 qtdeclarative5-qtmir-plugin (>= 0.4.8),
130 qtdeclarative5-ubuntu-telephony0.1,
136 qtdeclarative5-ubuntu-telephony0.1,
131 ubuntu-system-settings (>= 0.4),
137 ubuntu-system-settings (>= 0.4),
132− unity-launcher-impl-10,
138+ unity-launcher-impl-12,
133 unity8-common (= ${source:Version}),
139 unity8-common (= ${source:Version}),
134 unity8-private (= ${binary:Version}),
140 unity8-private (= ${binary:Version}),
135 unity8-private | unity-launcher-impl,
141 unity8-private | unity-launcher-impl,
@@ -138,7 +144,6 @@ Depends: dmz-cursor-theme,
138Recommends: indicator-keyboard,
144Recommends: indicator-keyboard,
139 indicator-session,
145 indicator-session,
140 unity-greeter-session-broadcast,
146 unity-greeter-session-broadcast,
141− unity-scope-click,
142Suggests: unity-scope-mediascanner2,
147Suggests: unity-scope-mediascanner2,
143Breaks: indicator-network (<< 0.5.1+14.10.20141014),
148Breaks: indicator-network (<< 0.5.1+14.10.20141014),
144 ubuntu-touch-session (<< 0.107),
149 ubuntu-touch-session (<< 0.107),
@@ -160,11 +165,11 @@ Depends: qml-module-qtquick-layouts,
160 qttranslations5-l10n,
165 qttranslations5-l10n,
161 ubuntu-thumbnailer-impl-0,
166 ubuntu-thumbnailer-impl-0,
162 ubuntu-wallpapers,
167 ubuntu-wallpapers,
163− unity-application-impl-22,
168+ unity-application-impl-27,
164 unity-notifications-impl-3,
169 unity-notifications-impl-3,
165 unity-plugin-scopes | unity-scopes-impl,
170 unity-plugin-scopes | unity-scopes-impl,
166 unity-scopes-impl-12,
171 unity-scopes-impl-12,
167− unity8-fake-env | unity-application-impl,
172+ unity8-tests | unity-application-impl,
168 ${misc:Depends},
173 ${misc:Depends},
169Breaks: unity8 (<< 7.86),
174Breaks: unity8 (<< 7.86),
170Replaces: unity8 (<< 7.86),
175Replaces: unity8 (<< 7.86),
@@ -188,29 +193,38 @@ Depends: autopilot-qt5 (>= 1.4),
188 python3-gi,
193 python3-gi,
189 qttestability-autopilot (>= 1.4),
194 qttestability-autopilot (>= 1.4),
190 ubuntu-ui-toolkit-autopilot (>= 1.3.2030),
195 ubuntu-ui-toolkit-autopilot (>= 1.3.2030),
191− unity-scope-click,
192 unity8 (= ${source:Version}),
196 unity8 (= ${source:Version}),
193− unity8-fake-env (= ${source:Version}),
197+ unity8-tests (= ${source:Version}),
194 url-dispatcher-tools,
198 url-dispatcher-tools,
195 xvfb,
199 xvfb,
196 ${misc:Depends},
200 ${misc:Depends},
197 ${python3:Depends},
201 ${python3:Depends},
198− ${shlibs:Depends},
199Description: Test package for Unity 8 shell
202Description: Test package for Unity 8 shell
200 Autopilot tests for the unity8 package
203 Autopilot tests for the unity8 package
201
204
202−Package: unity8-fake-env
205+Package: unity8-tests
203Architecture: any
206Architecture: any
204Multi-Arch: same
207Multi-Arch: same
205Pre-Depends: ${misc:Pre-Depends},
208Pre-Depends: ${misc:Pre-Depends},
209+Depends: dbus-test-runner,
210+ parallel,
211+ qtdbustest-runner,
212+ qt5-default,
213+ qtdeclarative5-dev-tools,
214+ unity8 (= ${source:Version}),
215+ xvfb,
206−Depends: ${misc:Depends},
216+ ${misc:Depends},
207 ${shlibs:Depends},
217 ${shlibs:Depends},
208Provides: unity-application-impl,
218Provides: unity-application-impl,
209− unity-application-impl-22,
219+ unity-application-impl-27,
220+ unity8-fake-env,
210−Replaces: unity8-autopilot (<< 8.02+15.04.20150422-0ubuntu1)
221+Replaces: unity8-autopilot (<< 8.02+15.04.20150422-0ubuntu1),
222+ unity8-fake-env,
223+Conflicts: unity8-fake-env,
211−Description: Fake environment for running Unity 8 shell
224+Description: Scripts and mocks for running Unity 8 shell tests
212 Provides fake implementations of some QML modules used by Unity 8 shell
225 Provides fake implementations of some QML modules used by Unity 8 shell
213− (e.g Ubuntu.Application) so that you can run it in a sandboxed environment.
226+ (e.g Ubuntu.Application) so that you can run it in a sandboxed environment
227+ and scripts to run its test suite.
214
228
215Package: unity8-private
229Package: unity8-private
216Architecture: any
230Architecture: any
@@ -219,14 +233,13 @@ Pre-Depends: ${misc:Pre-Depends},
219Depends: accountsservice-ubuntu-schemas (>= 0.0.7),
233Depends: accountsservice-ubuntu-schemas (>= 0.0.7),
220 gsettings-ubuntu-schemas (>= 0.0.2+14.10.20140815),
234 gsettings-ubuntu-schemas (>= 0.0.2+14.10.20140815),
221 libhardware2,
235 libhardware2,
222− pay-service,
223 unity-schemas (>= 7.3.1+14.10.20140915),
236 unity-schemas (>= 7.3.1+14.10.20140915),
224 qtdeclarative5-gsettings1.0,
237 qtdeclarative5-gsettings1.0,
225 qml-module-qtmultimedia,
238 qml-module-qtmultimedia,
226 ${misc:Depends},
239 ${misc:Depends},
227 ${shlibs:Depends},
240 ${shlibs:Depends},
228Provides: unity-launcher-impl,
241Provides: unity-launcher-impl,
229− unity-launcher-impl-10,
242+ unity-launcher-impl-12,
230Description: Unity 8 private libs
243Description: Unity 8 private libs
231 The Unity 8 shell is the primary user interface for Ubuntu devices.
244 The Unity 8 shell is the primary user interface for Ubuntu devices.
232 .
245 .
debian/rules+2−2
@@ -35,9 +35,9 @@ override_dh_installdeb:
35
35
36# use private lib directories
36# use private lib directories
37override_dh_makeshlibs:
37override_dh_makeshlibs:
38− dh_makeshlibs -Nunity8-private -Nunity8-fake-env
38+ dh_makeshlibs -Nunity8-private -Nunity8-tests
39
39
40override_dh_shlibdeps:
40override_dh_shlibdeps:
41 # Some mock libraries link against liblightdm-qt5-3.so which we want to
41 # Some mock libraries link against liblightdm-qt5-3.so which we want to
42 # avoid, since we only really link against our mock one, not the system one.
42 # avoid, since we only really link against our mock one, not the system one.
43− dh_shlibdeps -XlibMockLightDM-qml.so -XlibMockAccountsService-qml.so
43+ dh_shlibdeps -XlibMockAccountsService-qml.so -Lunity8-private
debian/shlibs.localnew file+1
@@ -0,0 +1 @@
1+libunity8-private 0 unity8-private
debian/tests/control+2−3
@@ -1,8 +1,7 @@
1Tests: qmluitests.sh
1Tests: qmluitests.sh
2Restrictions: allow-stderr
2Restrictions: allow-stderr
3−Depends: @,
3+Depends: dpkg-dev,
4− @builddeps@,
4+ unity8-tests,
5− xvfb,
6
5
7Tests: autopilot.sh
6Tests: autopilot.sh
8Restrictions: allow-stderr,
7Restrictions: allow-stderr,
debian/tests/qmluitests.sh+4−14
@@ -1,21 +1,11 @@
1#!/bin/sh
1#!/bin/sh
2+# -*- Mode: sh; indent-tabs-mode: nil; tab-width: 4 -*-
2
3
3# log all commands and abort on error
4# log all commands and abort on error
4set -xe
5set -xe
5
6
6−SHELL_QML_PATH=$(pkg-config --variable=plugindir unity-shell-api)
7+DEB_HOST_MULTIARCH=$(dpkg-architecture -qDEB_HOST_MULTIARCH)
7−UNITY_SOURCE_DIR=$(readlink -f $(dirname $(readlink -f $0))/../..)
8
8
9−dh_auto_configure -- -DCMAKE_INSTALL_LOCALSTATEDIR="/var" \
10− -DARTIFACTS_DIR=${ADT_ARTIFACTS} \
9+export ARTIFACTS_DIR="${ADT_ARTIFACTS}"
11− -DUNITY_PLUGINPATH=${SHELL_QML_PATH} \
12− -DUNITY_MOCKPATH=${SHELL_QML_PATH}/mocks
13−dh_auto_build --parallel -- -C tests/mocks
14−dh_auto_build --parallel -- -C tests/plugins
15−dh_auto_build --parallel -- -C tests/qmltests
16−dh_auto_build --parallel -- -C tests/uqmlscene
17−dh_auto_build --parallel -- -C tests/utils
18
10
19−export UNITY_SOURCE_DIR
11+/usr/lib/$DEB_HOST_MULTIARCH/unity8/tests/scripts/xvfballtests.sh
20−
21−dh_auto_build --parallel -- -k xvfballtests
debian/unity8-fake-env.install → debian/unity8-tests.installrenamed+4
@@ -3,4 +3,8 @@ usr/bin/unity-mock-indicator-service
3usr/lib/*/unity8/qml/mocks
3usr/lib/*/unity8/qml/mocks
4usr/lib/*/unity8/qml/nonmirplugins
4usr/lib/*/unity8/qml/nonmirplugins
5usr/lib/*/unity8/qml/scopefakes
5usr/lib/*/unity8/qml/scopefakes
6+usr/lib/*/unity8/qml/utils
7+usr/lib/*/unity8/tests
8+usr/lib/*/unity8/uqmlscene
6usr/share/unity8/mocks
9usr/share/unity8/mocks
10+usr/share/unity8/tests
debian/unity8-tests.lintian-overridesnew file+1
@@ -0,0 +1 @@
1+unity8-tests: unusual-interpreter usr/lib/*/unity8/tests/scripts/*.sh #!/usr/bin/parallel
debian/unity8.install+1−1
@@ -1,6 +1,5 @@
1debian/usr.bin.unity8-dash etc/apparmor.d
1debian/usr.bin.unity8-dash etc/apparmor.d
2var/lib/unity8/version
2var/lib/unity8/version
3−data/unity8-dash.conf usr/share/upstart/sessions/
4data/unity8-filewatcher.conf usr/share/upstart/sessions/
3data/unity8-filewatcher.conf usr/share/upstart/sessions/
5data/unity8.conf usr/share/upstart/sessions/
4data/unity8.conf usr/share/upstart/sessions/
6data/devices.conf etc/ubuntu/
5data/devices.conf etc/ubuntu/
@@ -9,6 +8,7 @@ usr/bin/unity8
9usr/bin/unity8-dash
8usr/bin/unity8-dash
10usr/share/applications/unity8-dash.desktop
9usr/share/applications/unity8-dash.desktop
11usr/share/applications/unity8.desktop
10usr/share/applications/unity8.desktop
11+usr/share/unity8/ApplicationMenus
12usr/share/unity8/Greeter
12usr/share/unity8/Greeter
13usr/share/unity8/Launcher
13usr/share/unity8/Launcher
14usr/share/unity8/Panel
14usr/share/unity8/Panel
include/paths.h.in+26−1
@@ -41,7 +41,10 @@ inline QString installRoot() {
41}
41}
42
42
43inline bool isRunningInstalled() {
43inline bool isRunningInstalled() {
44+ // Tests don't use the normal binary, so we want to check binary *and*
45+ // the environment. Installed tests have UNITY_TESTING_DATADIR set.
46+ static bool installed_test_env = !qgetenv("UNITY_TESTING_DATADIR").isEmpty();
44− return !installRoot().isNull();
47+ return !installRoot().isNull() || installed_test_env;
45}
48}
46
49
47inline QString buildDirectory() {
50inline QString buildDirectory() {
@@ -62,6 +65,28 @@ inline QString translationDirectory() {
62 }
65 }
63}
66}
64
67
68+inline QString testDataDir() {
69+ // Can't use isRunningInstalled, since tests don't use the normal unity8
70+ // executable. $UNITY_TESTING_DATADIR is set by installed tests.
71+ QString datadir(qgetenv("UNITY_TESTING_DATADIR"));
72+ if (datadir.isEmpty()) {
73+ return sourceDirectory() + "/tests";
74+ } else {
75+ return datadir + "/tests";
76+ }
77+}
78+
79+inline QString testLibDir() {
80+ // Can't use isRunningInstalled, since tests don't use the normal unity8
81+ // executable. $UNITY_TESTING_DATADIR is set by installed tests.
82+ QString libdir(qgetenv("UNITY_TESTING_LIBDIR"));
83+ if (libdir.isEmpty()) {
84+ return buildDirectory() + "/tests";
85+ } else {
86+ return libdir + "/tests";
87+ }
88+}
89+
65inline QString qmlDirectory() {
90inline QString qmlDirectory() {
66 if (isRunningInstalled()) {
91 if (isRunningInstalled()) {
67 return installRoot() + QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_APP_DIR@/");
92 return installRoot() + QStringLiteral("@CMAKE_INSTALL_PREFIX@/@SHELL_APP_DIR@/");
plugins/AccountsService/AccountsService.h+1−1
@@ -29,7 +29,6 @@ class QDBusInterface;
29class AccountsService: public QObject
29class AccountsService: public QObject
30{
30{
31 Q_OBJECT
31 Q_OBJECT
32− Q_ENUMS(PasswordDisplayHint)
33 Q_PROPERTY (QString user
32 Q_PROPERTY (QString user
34 READ user
33 READ user
35 WRITE setUser
34 WRITE setUser
@@ -86,6 +85,7 @@ public:
86 Keyboard,
85 Keyboard,
87 Numeric,
86 Numeric,
88 };
87 };
88+ Q_ENUM(PasswordDisplayHint)
89
89
90 explicit AccountsService(QObject *parent = 0, const QString & user = QString());
90 explicit AccountsService(QObject *parent = 0, const QString & user = QString());
91 ~AccountsService() = default;
91 ~AccountsService() = default;
plugins/Cursor/CursorImageInfo.cpp+1−2
@@ -108,8 +108,7 @@ int CursorImageInfo::frameDuration() const
108QUrl CursorImageInfo::imageSource() const
108QUrl CursorImageInfo::imageSource() const
109{
109{
110 auto urlString = QString("image://cursor/%1/%2/%3")
110 auto urlString = QString("image://cursor/%1/%2/%3")
111− .arg(m_themeName)
111+ .arg(m_themeName, m_cursorName)
112− .arg(m_cursorName)
113 .arg(m_cursorHeight);
112 .arg(m_cursorHeight);
114
113
115 return QUrl(urlString);
114 return QUrl(urlString);
plugins/Cursor/CursorImageProvider.cpp+2
@@ -174,6 +174,8 @@ CursorImageProvider::CursorImageProvider()
174 m_fallbackNames[QStringLiteral("forbidden")].append(QStringLiteral("not-allowed"));
174 m_fallbackNames[QStringLiteral("forbidden")].append(QStringLiteral("not-allowed"));
175 m_fallbackNames[QStringLiteral("forbidden")].append(QStringLiteral("circle"));
175 m_fallbackNames[QStringLiteral("forbidden")].append(QStringLiteral("circle"));
176
176
177+ m_fallbackNames[QStringLiteral("grabbing")].append(QStringLiteral("closedhand")); // Breeze
178+
177 m_fallbackNames[QStringLiteral("hand")].append(QStringLiteral("pointing_hand"));
179 m_fallbackNames[QStringLiteral("hand")].append(QStringLiteral("pointing_hand"));
178 m_fallbackNames[QStringLiteral("hand")].append(QStringLiteral("pointer"));
180 m_fallbackNames[QStringLiteral("hand")].append(QStringLiteral("pointer"));
179
181
plugins/Dash/abstractdashview.cpp+1−1
@@ -23,7 +23,7 @@ AbstractDashView::AbstractDashView()
23 , m_asyncRequestedIndex(-1)
23 , m_asyncRequestedIndex(-1)
24 , m_columnSpacing(0)
24 , m_columnSpacing(0)
25 , m_rowSpacing(0)
25 , m_rowSpacing(0)
26− , m_buffer(320) // Same value used in qquickitemview.cpp in Qt 5.4
26+ , m_buffer(320) // Same value as QML_VIEW_DEFAULTCACHEBUFFER in qquickitemview.cpp (Qt 5.6)
27 , m_displayMarginBeginning(0)
27 , m_displayMarginBeginning(0)
28 , m_displayMarginEnd(0)
28 , m_displayMarginEnd(0)
29 , m_needsRelayout(false)
29 , m_needsRelayout(false)
plugins/GlobalShortcut/globalshortcut.cpp+12−4
@@ -63,10 +63,18 @@ void GlobalShortcut::componentComplete()
63
63
64void GlobalShortcut::keyPressEvent(QKeyEvent * event)
64void GlobalShortcut::keyPressEvent(QKeyEvent * event)
65{
65{
66− Q_UNUSED(event)
67− if (m_active) {
66+ if (!m_active) return;
67+
68+ event->accept();
68− Q_EMIT triggered(m_shortcut.toString());
69+ Q_EMIT triggered(m_shortcut.toString());
69− }
70+}
71+
72+void GlobalShortcut::keyReleaseEvent(QKeyEvent * event)
73+{
74+ if (!m_active) return;
75+
76+ event->accept();
77+ Q_EMIT released(m_shortcut.toString());
70}
78}
71
79
72void GlobalShortcut::setupFilterOnWindow(QQuickWindow *window)
80void GlobalShortcut::setupFilterOnWindow(QQuickWindow *window)
plugins/GlobalShortcut/globalshortcut.h+5
@@ -55,6 +55,7 @@ public:
55protected:
55protected:
56 void componentComplete() override;
56 void componentComplete() override;
57 void keyPressEvent(QKeyEvent * event) override;
57 void keyPressEvent(QKeyEvent * event) override;
58+ void keyReleaseEvent(QKeyEvent * event) override;
58
59
59Q_SIGNALS:
60Q_SIGNALS:
60 void shortcutChanged(const QVariant &shortcut);
61 void shortcutChanged(const QVariant &shortcut);
@@ -62,6 +63,10 @@ Q_SIGNALS:
62 * Emitted when a global keypress of @p shortcut is detected
63 * Emitted when a global keypress of @p shortcut is detected
63 */
64 */
64 void triggered(const QString &shortcut);
65 void triggered(const QString &shortcut);
66+ /**
67+ * Emitted when a global keypress of @p shortcut is released
68+ */
69+ void released(const QString &shortcut);
65 void activeChanged(bool active);
70 void activeChanged(bool active);
66
71
67private Q_SLOTS:
72private Q_SLOTS:
plugins/GlobalShortcut/globalshortcutregistry.cpp+14−4
@@ -73,20 +73,30 @@ bool GlobalShortcutRegistry::eventFilter(QObject *obj, QEvent *event)
73 Q_ASSERT(m_filteredWindow);
73 Q_ASSERT(m_filteredWindow);
74 Q_ASSERT(obj == static_cast<QObject*>(m_filteredWindow.data()));
74 Q_ASSERT(obj == static_cast<QObject*>(m_filteredWindow.data()));
75
75
76− if (event->type() == QEvent::KeyPress) {
76+ if (event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease) {
77+
77 QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
78 QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
79+
80+ // Make a copy of the event so we don't alter it for passing on.
81+ QKeyEvent eCopy(keyEvent->type(),
82+ keyEvent->key(),
83+ keyEvent->modifiers(),
84+ keyEvent->text(),
85+ keyEvent->isAutoRepeat(),
86+ keyEvent->count());
87+ eCopy.ignore();
88+
78 int seq = keyEvent->key() + keyEvent->modifiers();
89 int seq = keyEvent->key() + keyEvent->modifiers();
79 if (m_shortcuts.contains(seq)) {
90 if (m_shortcuts.contains(seq)) {
80 const auto shortcuts = m_shortcuts.value(seq);
91 const auto shortcuts = m_shortcuts.value(seq);
81 Q_FOREACH(const auto &shortcut, shortcuts) {
92 Q_FOREACH(const auto &shortcut, shortcuts) {
82 if (shortcut) {
93 if (shortcut) {
83− qApp->sendEvent(shortcut, keyEvent);
94+ qApp->sendEvent(shortcut, &eCopy);
84− event->accept();
85 }
95 }
86 }
96 }
87 }
97 }
88
98
89− return event->isAccepted();
99+ return eCopy.isAccepted();
90 }
100 }
91
101
92 return QObject::eventFilter(obj, event);
102 return QObject::eventFilter(obj, event);
plugins/Greeter/Unity/Launcher/CMakeLists.txt−1
@@ -1,4 +1,3 @@
1−pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=10)
2pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
1pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
3
2
4add_definitions(-DSM_BUSNAME=systemBus)
3add_definitions(-DSM_BUSNAME=systemBus)
plugins/Greeter/Unity/Launcher/launcheritem.cpp+13
@@ -76,6 +76,19 @@ void LauncherItem::setIcon(const QString &icon)
76 }
76 }
77}
77}
78
78
79+QStringList LauncherItem::keywords() const
80+{
81+ return m_keywords;
82+}
83+
84+void LauncherItem::setKeywords(const QStringList &keywords)
85+{
86+ if (m_keywords != keywords) {
87+ m_keywords = keywords;
88+ Q_EMIT keywordsChanged(keywords);
89+ }
90+}
91+
79bool LauncherItem::pinned() const
92bool LauncherItem::pinned() const
80{
93{
81 return m_pinned;
94 return m_pinned;
plugins/Greeter/Unity/Launcher/launcheritem.h+3
@@ -34,6 +34,7 @@ public:
34 QString appId() const override;
34 QString appId() const override;
35 QString name() const override;
35 QString name() const override;
36 QString icon() const override;
36 QString icon() const override;
37+ QStringList keywords() const override;
37 bool pinned() const override;
38 bool pinned() const override;
38 bool running() const override;
39 bool running() const override;
39 bool recent() const override;
40 bool recent() const override;
@@ -49,6 +50,7 @@ public:
49private:
50private:
50 void setName(const QString &name);
51 void setName(const QString &name);
51 void setIcon(const QString &icon);
52 void setIcon(const QString &icon);
53+ void setKeywords(const QStringList &keywords);
52 void setPinned(bool pinned);
54 void setPinned(bool pinned);
53 void setRunning(bool running);
55 void setRunning(bool running);
54 void setRecent(bool recent);
56 void setRecent(bool recent);
@@ -63,6 +65,7 @@ private:
63 QString m_appId;
65 QString m_appId;
64 QString m_name;
66 QString m_name;
65 QString m_icon;
67 QString m_icon;
68+ QStringList m_keywords;
66 bool m_pinned;
69 bool m_pinned;
67 bool m_running;
70 bool m_running;
68 bool m_recent;
71 bool m_recent;
plugins/Greeter/Unity/Launcher/quicklistmodel.cpp+2
@@ -65,6 +65,8 @@ QVariant QuickListModel::data(const QModelIndex &index, int role) const
65 return m_list.at(index.row()).icon();
65 return m_list.at(index.row()).icon();
66 case RoleClickable:
66 case RoleClickable:
67 return m_list.at(index.row()).clickable();
67 return m_list.at(index.row()).clickable();
68+ case RoleIsPrivate:
69+ return false; // The greeter plugin would just not add any private entries
68 }
70 }
69 return QVariant();
71 return QVariant();
70}
72}
plugins/LightDM/CMakeLists.txt+1−1
@@ -7,7 +7,6 @@ include_directories(
7 ${CMAKE_CURRENT_SOURCE_DIR}
7 ${CMAKE_CURRENT_SOURCE_DIR}
8 ${CMAKE_CURRENT_BINARY_DIR}
8 ${CMAKE_CURRENT_BINARY_DIR}
9 ${CMAKE_SOURCE_DIR}/plugins/Utils
9 ${CMAKE_SOURCE_DIR}/plugins/Utils
10− ${CMAKE_BINARY_DIR}/tests/mocks/LightDM/IntegratedLightDM
11 ${libunity8-private_SOURCE_DIR}
10 ${libunity8-private_SOURCE_DIR}
12 ${LIBUSERMETRICSOUTPUT_INCLUDE_DIRS}
11 ${LIBUSERMETRICSOUTPUT_INCLUDE_DIRS}
13)
12)
@@ -18,6 +17,7 @@ set(QMLPLUGIN_SRC
18 DBusGreeterList.cpp
17 DBusGreeterList.cpp
19 Greeter.cpp
18 Greeter.cpp
20 plugin.cpp
19 plugin.cpp
20+ PromptsModel.cpp
21 SessionsModel.cpp
21 SessionsModel.cpp
22 UsersModel.cpp
22 UsersModel.cpp
23 )
23 )
plugins/LightDM/DBusGreeterList.cpp+6−6
@@ -25,7 +25,7 @@ DBusGreeterList::DBusGreeterList(Greeter *greeter, const QString &path)
25 m_greeter(greeter)
25 m_greeter(greeter)
26{
26{
27 connect(m_greeter, &Greeter::authenticationUserChanged, this, &DBusGreeterList::authenticationUserChangedHandler);
27 connect(m_greeter, &Greeter::authenticationUserChanged, this, &DBusGreeterList::authenticationUserChangedHandler);
28− connect(m_greeter, &Greeter::promptlessChanged, this, &DBusGreeterList::promptlessChangedHandler);
28+ connect(m_greeter, &Greeter::isAuthenticatedChanged, this, &DBusGreeterList::authenticatedChangedHandler);
29}
29}
30
30
31QString DBusGreeterList::GetActiveEntry() const
31QString DBusGreeterList::GetActiveEntry() const
@@ -40,16 +40,16 @@ void DBusGreeterList::SetActiveEntry(const QString &entry)
40
40
41bool DBusGreeterList::entryIsLocked() const
41bool DBusGreeterList::entryIsLocked() const
42{
42{
43− return !m_greeter->promptless();
43+ return !m_greeter->isAuthenticated();
44}
44}
45
45
46−void DBusGreeterList::authenticationUserChangedHandler(const QString &user)
46+void DBusGreeterList::authenticationUserChangedHandler()
47{
47{
48− notifyPropertyChanged(QStringLiteral("ActiveEntry"), user);
48+ notifyPropertyChanged(QStringLiteral("ActiveEntry"), m_greeter->authenticationUser());
49− Q_EMIT EntrySelected(user);
49+ Q_EMIT EntrySelected(m_greeter->authenticationUser());
50}
50}
51
51
52−void DBusGreeterList::promptlessChangedHandler()
52+void DBusGreeterList::authenticatedChangedHandler()
53{
53{
54 notifyPropertyChanged(QStringLiteral("EntryIsLocked"), entryIsLocked());
54 notifyPropertyChanged(QStringLiteral("EntryIsLocked"), entryIsLocked());
55 Q_EMIT entryIsLockedChanged();
55 Q_EMIT entryIsLockedChanged();
plugins/LightDM/DBusGreeterList.h+2−2
@@ -47,8 +47,8 @@ Q_SIGNALS:
47 void entryIsLockedChanged();
47 void entryIsLockedChanged();
48
48
49private Q_SLOTS:
49private Q_SLOTS:
50− void authenticationUserChangedHandler(const QString &user);
50+ void authenticationUserChangedHandler();
51− void promptlessChangedHandler();
51+ void authenticatedChangedHandler();
52
52
53private:
53private:
54 Greeter *m_greeter;
54 Greeter *m_greeter;
plugins/LightDM/FullLightDM/CMakeLists.txt+5−1
@@ -6,10 +6,14 @@ add_definitions(-DFULL_LIGHTDM)
6
6
7include_directories(
7include_directories(
8 ../
8 ../
9− ${LIBLIGHTDM_INCLUDE_DIRS}
10 ${CMAKE_CURRENT_BINARY_DIR}
9 ${CMAKE_CURRENT_BINARY_DIR}
11 )
10 )
12
11
12+include_directories(
13+ SYSTEM
14+ ${LIBLIGHTDM_INCLUDE_DIRS}
15+ )
16+
13foreach(source_file ${QMLPLUGIN_SRC})
17foreach(source_file ${QMLPLUGIN_SRC})
14 list(APPEND RELATIVE_QMLPLUGIN_SRC ../${source_file})
18 list(APPEND RELATIVE_QMLPLUGIN_SRC ../${source_file})
15endforeach()
19endforeach()
plugins/LightDM/Greeter.cpp+137−23
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2013, 2015 Canonical, Ltd.
2+ * Copyright (C) 2013-2017 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
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
5 * it under the terms of the GNU General Public License as published by
@@ -17,13 +17,16 @@
17
17
18#include "Greeter.h"
18#include "Greeter.h"
19#include "GreeterPrivate.h"
19#include "GreeterPrivate.h"
20+#include <QCoreApplication>
20#include <libintl.h>
21#include <libintl.h>
21
22
23+static Greeter *singleton = nullptr;
24+
22GreeterPrivate::GreeterPrivate(Greeter* parent)
25GreeterPrivate::GreeterPrivate(Greeter* parent)
23 : m_greeter(new QLightDM::Greeter(parent)),
26 : m_greeter(new QLightDM::Greeter(parent)),
24 m_active(false),
27 m_active(false),
25− wasPrompted(false),
28+ responded(false),
26− promptless(false),
29+ everResponded(false),
27 q_ptr(parent)
30 q_ptr(parent)
28{
31{
29}
32}
@@ -41,9 +44,32 @@ Greeter::Greeter(QObject* parent)
41 connect(d->m_greeter, &QLightDM::Greeter::authenticationComplete,
44 connect(d->m_greeter, &QLightDM::Greeter::authenticationComplete,
42 this, &Greeter::authenticationCompleteFilter);
45 this, &Greeter::authenticationCompleteFilter);
43
46
47+ // Don't get stuck waiting for PAM as we shut down.
48+ connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit,
49+ d->m_greeter, &QLightDM::Greeter::cancelAuthentication);
50+
44 d->m_greeter->connectSync();
51 d->m_greeter->connectSync();
45}
52}
46
53
54+Greeter::~Greeter()
55+{
56+ singleton = nullptr;
57+}
58+
59+Greeter *Greeter::instance()
60+{
61+ if (!singleton) {
62+ singleton = new Greeter;
63+ }
64+ return singleton;
65+}
66+
67+PromptsModel *Greeter::promptsModel()
68+{
69+ Q_D(Greeter);
70+ return &d->prompts;
71+}
72+
47bool Greeter::isActive() const
73bool Greeter::isActive() const
48{
74{
49 Q_D(const Greeter);
75 Q_D(const Greeter);
@@ -68,7 +94,16 @@ bool Greeter::isAuthenticated() const
68QString Greeter::authenticationUser() const
94QString Greeter::authenticationUser() const
69{
95{
70 Q_D(const Greeter);
96 Q_D(const Greeter);
97+ return d->cachedAuthUser;
98+}
99+
100+void Greeter::checkAuthenticationUser()
101+{
102+ Q_D(Greeter);
103+ if (d->cachedAuthUser != d->m_greeter->authenticationUser()) {
71− return d->m_greeter->authenticationUser();
104+ d->cachedAuthUser = d->m_greeter->authenticationUser();
105+ Q_EMIT authenticationUserChanged();
106+ }
72}
107}
73
108
74QString Greeter::defaultSessionHint() const
109QString Greeter::defaultSessionHint() const
@@ -77,35 +112,64 @@ QString Greeter::defaultSessionHint() const
77 return d->m_greeter->defaultSessionHint();
112 return d->m_greeter->defaultSessionHint();
78}
113}
79
114
80−bool Greeter::promptless() const
115+QString Greeter::selectUser() const
81{
116{
82 Q_D(const Greeter);
117 Q_D(const Greeter);
83− return d->promptless;
118+ if (hasGuestAccount() && d->m_greeter->selectGuestHint()) {
119+ return QStringLiteral("*guest");
120+ } else {
121+ return d->m_greeter->selectUserHint();
122+ }
84}
123}
85
124
86−QString Greeter::selectUser() const
125+bool Greeter::hasGuestAccount() const
126+{
127+ Q_D(const Greeter);
128+ return d->m_greeter->hasGuestAccountHint();
129+}
130+
131+bool Greeter::showManualLoginHint() const
87{
132{
88 Q_D(const Greeter);
133 Q_D(const Greeter);
89− return d->m_greeter->selectUserHint();
134+ return d->m_greeter->showManualLoginHint();
135+}
136+
137+bool Greeter::hideUsersHint() const
138+{
139+ Q_D(const Greeter);
140+ return d->m_greeter->hideUsersHint();
90}
141}
91
142
92void Greeter::authenticate(const QString &username)
143void Greeter::authenticate(const QString &username)
93{
144{
94 Q_D(Greeter);
145 Q_D(Greeter);
95− d->wasPrompted = false;
146+ d->prompts.clear();
96− if (d->promptless) {
147+ d->responded = false;
97− d->promptless = false;
148+ d->everResponded = false;
98− Q_EMIT promptlessChanged();
149+
150+ if (authenticationUser() == username) {
151+ d->prompts = d->leftovers;
99 }
152 }
153+ d->leftovers.clear();
100
154
155+ if (username == QStringLiteral("*guest")) {
156+ d->m_greeter->authenticateAsGuest();
157+ } else if (username == QStringLiteral("*other")) {
101− d->m_greeter->authenticate(username);
158+ d->m_greeter->authenticate(nullptr);
159+ } else {
160+ d->m_greeter->authenticate(username);
161+ }
162+
163+ Q_EMIT authenticationStarted();
102 Q_EMIT isAuthenticatedChanged();
164 Q_EMIT isAuthenticatedChanged();
103− Q_EMIT authenticationUserChanged(username);
165+ checkAuthenticationUser();
104}
166}
105
167
106void Greeter::respond(const QString &response)
168void Greeter::respond(const QString &response)
107{
169{
108 Q_D(Greeter);
170 Q_D(Greeter);
171+ d->responded = true;
172+ d->everResponded = true;
109 d->m_greeter->respond(response);
173 d->m_greeter->respond(response);
110}
174}
111
175
@@ -118,32 +182,82 @@ bool Greeter::startSessionSync(const QString &session)
118void Greeter::showPromptFilter(const QString &text, QLightDM::Greeter::PromptType type)
182void Greeter::showPromptFilter(const QString &text, QLightDM::Greeter::PromptType type)
119{
183{
120 Q_D(Greeter);
184 Q_D(Greeter);
121− d->wasPrompted = true;
185+
186+ checkAuthenticationUser(); // may have changed in liblightdm
122
187
123 bool isDefaultPrompt = (text == dgettext("Linux-PAM", "Password: "));
188 bool isDefaultPrompt = (text == dgettext("Linux-PAM", "Password: "));
189+ bool isSecret = type == QLightDM::Greeter::PromptTypeSecret;
190+
191+ QString trimmedText;
192+ if (!isDefaultPrompt)
193+ trimmedText = text.trimmed();
124
194
125 // Strip prompt of any colons at the end
195 // Strip prompt of any colons at the end
126− QString trimmedText = text.trimmed();
127 if (trimmedText.endsWith(':') || trimmedText.endsWith(QStringLiteral(":"))) {
196 if (trimmedText.endsWith(':') || trimmedText.endsWith(QStringLiteral(":"))) {
128 trimmedText.chop(1);
197 trimmedText.chop(1);
129 }
198 }
130
199
131− Q_EMIT showPrompt(trimmedText, type == QLightDM::Greeter::PromptTypeSecret, isDefaultPrompt);
200+ if (trimmedText == "login") {
201+ // 'login' is provided untranslated by LightDM when asking for a manual
202+ // login username.
203+ trimmedText = gettext("Username");
204+ }
205+
206+ if (d->responded) {
207+ d->prompts.clear();
208+ d->responded = false;
209+ }
210+
211+ d->prompts.append(trimmedText, isSecret ? PromptsModel::Secret : PromptsModel::Question);
132}
212}
133
213
134void Greeter::showMessageFilter(const QString &text, QLightDM::Greeter::MessageType type)
214void Greeter::showMessageFilter(const QString &text, QLightDM::Greeter::MessageType type)
135{
215{
216+ Q_D(Greeter);
217+
218+ checkAuthenticationUser(); // may have changed in liblightdm
219+
136− Q_EMIT showMessage(text, type == QLightDM::Greeter::MessageTypeError);
220+ bool isError = type == QLightDM::Greeter::MessageTypeError;
221+
222+ if (d->responded) {
223+ d->prompts.clear();
224+ d->responded = false;
225+ }
226+ d->prompts.append(text, isError? PromptsModel::Error : PromptsModel::Message);
137}
227}
138
228
139void Greeter::authenticationCompleteFilter()
229void Greeter::authenticationCompleteFilter()
140{
230{
141 Q_D(Greeter);
231 Q_D(Greeter);
142− if (!d->wasPrompted) {
143− d->promptless = true;
144− Q_EMIT promptlessChanged();
145− }
146
232
147 Q_EMIT isAuthenticatedChanged();
233 Q_EMIT isAuthenticatedChanged();
148− Q_EMIT authenticationComplete();
234+
235+ bool automatic = !d->everResponded;
236+ bool pamHasLeftoverMessages = !d->prompts.hasPrompt() && d->prompts.rowCount() > 0;
237+
238+ if (!isAuthenticated()) {
239+ if (pamHasLeftoverMessages) {
240+ d->leftovers = d->prompts; // Prefer PAM's messages
241+ } else if (automatic) {
242+ d->leftovers.append(gettext("Failed to authenticate"), PromptsModel::Error);
243+ } else {
244+ d->leftovers.append(gettext("Invalid password, please try again"), PromptsModel::Error);
245+ }
246+ } else if (pamHasLeftoverMessages) {
247+ automatic = true; // treat this successful login as automatic, so user sees message
248+ d->leftovers = d->prompts;
249+ }
250+
251+ if (automatic) {
252+ d->prompts = d->leftovers; // OK, we'll just use these now
253+ d->leftovers.clear();
254+ d->prompts.append(isAuthenticated() ? gettext("Log In") : gettext("Retry"),
255+ PromptsModel::Button);
256+ }
257+
258+ if (isAuthenticated()) {
259+ Q_EMIT loginSuccess(automatic);
260+ } else {
261+ Q_EMIT loginError(automatic);
262+ }
149}
263}
plugins/LightDM/Greeter.h+17−13
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2012,2013,2015 Canonical, Ltd.
2+ * Copyright (C) 2012-2016 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
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
5 * it under the terms of the GNU General Public License as published by
@@ -21,13 +21,13 @@
21 such edits in the future, and by inserting ourselves here, we have more
21 such edits in the future, and by inserting ourselves here, we have more
22 control. */
22 control. */
23
23
24−#ifndef UNITY_GREETER_H
24+#pragma once
25−#define UNITY_GREETER_H
26
25
27#include <QLightDM/Greeter>
26#include <QLightDM/Greeter>
28#include <QtCore/QObject>
27#include <QtCore/QObject>
29
28
30class GreeterPrivate;
29class GreeterPrivate;
30+class PromptsModel;
31
31
32class Greeter : public QObject
32class Greeter : public QObject
33{
33{
@@ -37,18 +37,22 @@ class Greeter : public QObject
37 Q_PROPERTY(bool authenticated READ isAuthenticated NOTIFY isAuthenticatedChanged)
37 Q_PROPERTY(bool authenticated READ isAuthenticated NOTIFY isAuthenticatedChanged)
38 Q_PROPERTY(QString authenticationUser READ authenticationUser NOTIFY authenticationUserChanged)
38 Q_PROPERTY(QString authenticationUser READ authenticationUser NOTIFY authenticationUserChanged)
39 Q_PROPERTY(QString defaultSession READ defaultSessionHint CONSTANT)
39 Q_PROPERTY(QString defaultSession READ defaultSessionHint CONSTANT)
40− Q_PROPERTY(bool promptless READ promptless NOTIFY promptlessChanged)
41 Q_PROPERTY(QString selectUser READ selectUser CONSTANT)
40 Q_PROPERTY(QString selectUser READ selectUser CONSTANT)
42
41
43public:
42public:
44− explicit Greeter(QObject* parent=0);
43+ static Greeter *instance();
44+ virtual ~Greeter();
45
45
46 bool isActive() const;
46 bool isActive() const;
47 bool isAuthenticated() const;
47 bool isAuthenticated() const;
48 QString authenticationUser() const;
48 QString authenticationUser() const;
49 QString defaultSessionHint() const;
49 QString defaultSessionHint() const;
50− bool promptless() const;
51 QString selectUser() const;
50 QString selectUser() const;
51+ bool hasGuestAccount() const;
52+ bool showManualLoginHint() const;
53+ bool hideUsersHint() const;
54+
55+ PromptsModel *promptsModel();
52
56
53public Q_SLOTS:
57public Q_SLOTS:
54 void authenticate(const QString &username=QString());
58 void authenticate(const QString &username=QString());
@@ -57,21 +61,22 @@ public Q_SLOTS:
57 void setIsActive(bool isActive);
61 void setIsActive(bool isActive);
58
62
59Q_SIGNALS:
63Q_SIGNALS:
60− void showMessage(const QString &text, bool isError);
61− void showPrompt(const QString &text, bool isSecret, bool isDefaultPrompt);
62− void authenticationComplete();
63− void authenticationUserChanged(const QString &user);
64+ void authenticationUserChanged();
64 void isActiveChanged();
65 void isActiveChanged();
65 void isAuthenticatedChanged();
66 void isAuthenticatedChanged();
66− void promptlessChanged();
67 void showGreeter();
67 void showGreeter();
68 void hideGreeter();
68 void hideGreeter();
69+ void loginError(bool automatic);
70+ void loginSuccess(bool automatic);
71+ void authenticationStarted(); // useful for testing
69
72
70 // This signal is emitted by external agents like indicators, and the UI
73 // This signal is emitted by external agents like indicators, and the UI
71 // should switch to this user if possible.
74 // should switch to this user if possible.
72 void requestAuthenticationUser(const QString &user);
75 void requestAuthenticationUser(const QString &user);
73
76
74protected:
77protected:
78+ explicit Greeter(QObject* parent=0);
79+
75 GreeterPrivate * const d_ptr;
80 GreeterPrivate * const d_ptr;
76
81
77 Q_DECLARE_PRIVATE(Greeter)
82 Q_DECLARE_PRIVATE(Greeter)
@@ -80,6 +85,5 @@ private Q_SLOTS:
80 void showMessageFilter(const QString &text, QLightDM::Greeter::MessageType type);
85 void showMessageFilter(const QString &text, QLightDM::Greeter::MessageType type);
81 void showPromptFilter(const QString &text, QLightDM::Greeter::PromptType type);
86 void showPromptFilter(const QString &text, QLightDM::Greeter::PromptType type);
82 void authenticationCompleteFilter();
87 void authenticationCompleteFilter();
88+ void checkAuthenticationUser();
83};
89};
84−
85−#endif
plugins/LightDM/GreeterPrivate.h+13−8
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2014 Canonical, Ltd.
2+ * Copyright (C) 2015-2017 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
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
5 * it under the terms of the GNU General Public License as published by
@@ -14,10 +14,14 @@
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
15 */
16
16
17−#ifndef UNITY_GREETER_PRIVATE_H
17+#pragma once
18−#define UNITY_GREETER_PRIVATE_H
19
18
19+#include "PromptsModel.h"
20+#include <QObject>
21+
20−#include <QLightDM/Greeter>
22+namespace QLightDM {
23+ class Greeter;
24+}
21
25
22class GreeterPrivate
26class GreeterPrivate
23{
27{
@@ -26,8 +30,11 @@ public:
26
30
27 QLightDM::Greeter *m_greeter;
31 QLightDM::Greeter *m_greeter;
28 bool m_active;
32 bool m_active;
29− bool wasPrompted;
33+ PromptsModel prompts;
30− bool promptless;
34+ PromptsModel leftovers; // prompts to show during next auth for same user
35+ bool responded;
36+ bool everResponded;
37+ QString cachedAuthUser;
31
38
32protected:
39protected:
33 Greeter * const q_ptr;
40 Greeter * const q_ptr;
@@ -35,5 +42,3 @@ protected:
35private:
42private:
36 Q_DECLARE_PUBLIC(Greeter)
43 Q_DECLARE_PUBLIC(Greeter)
37};
44};
38−
39−#endif // UNITY_GREETER_PRIVATE_H
plugins/LightDM/IntegratedLightDM/liblightdm/Greeter.cpp+7−4
@@ -49,7 +49,7 @@ QString Greeter::authenticationUser() const
49
49
50bool Greeter::hasGuestAccountHint() const
50bool Greeter::hasGuestAccountHint() const
51{
51{
52− return true;
52+ return false;
53}
53}
54
54
55QString Greeter::getHint(const QString &name) const
55QString Greeter::getHint(const QString &name) const
@@ -70,12 +70,12 @@ bool Greeter::hideUsersHint() const
70
70
71bool Greeter::showManualLoginHint() const
71bool Greeter::showManualLoginHint() const
72{
72{
73− return true;
73+ return false;
74}
74}
75
75
76bool Greeter::showRemoteLoginHint() const
76bool Greeter::showRemoteLoginHint() const
77{
77{
78− return true;
78+ return false;
79}
79}
80
80
81QString Greeter::selectUserHint() const
81QString Greeter::selectUserHint() const
@@ -146,7 +146,10 @@ void Greeter::authenticateRemote(const QString &session, const QString &username
146}
146}
147
147
148void Greeter::cancelAuthentication()
148void Greeter::cancelAuthentication()
149−{}
149+{
150+ Q_D(Greeter);
151+ d->cancelAuthentication();
152+}
150
153
151void Greeter::setLanguage (const QString &language)
154void Greeter::setLanguage (const QString &language)
152{
155{
plugins/LightDM/IntegratedLightDM/liblightdm/Greeter.h+2−2
@@ -46,18 +46,18 @@ class Q_DECL_EXPORT Greeter : public QObject
46 Q_PROPERTY(QString hostname READ hostname CONSTANT)
46 Q_PROPERTY(QString hostname READ hostname CONSTANT)
47 Q_PROPERTY(bool hasGuestAccount READ hasGuestAccountHint CONSTANT)
47 Q_PROPERTY(bool hasGuestAccount READ hasGuestAccountHint CONSTANT)
48
48
49− Q_ENUMS(PromptType MessageType)
50−
51public:
49public:
52 enum PromptType {
50 enum PromptType {
53 PromptTypeQuestion,
51 PromptTypeQuestion,
54 PromptTypeSecret
52 PromptTypeSecret
55 };
53 };
54+ Q_ENUM(PromptType)
56
55
57 enum MessageType {
56 enum MessageType {
58 MessageTypeInfo,
57 MessageTypeInfo,
59 MessageTypeError
58 MessageTypeError
60 };
59 };
60+ Q_ENUM(MessageType)
61
61
62 explicit Greeter(QObject* parent=0);
62 explicit Greeter(QObject* parent=0);
63 virtual ~Greeter();
63 virtual ~Greeter();
plugins/LightDM/IntegratedLightDM/liblightdm/GreeterPrivate.cpp+27−22
@@ -206,6 +206,28 @@ public Q_SLOTS:
206 }
206 }
207 }
207 }
208
208
209+ void cancelPam()
210+ {
211+ if (pamHandle != nullptr) {
212+ QFuture<int> pamFuture = futureWatcher.future();
213+ pam_handle *handle = pamHandle;
214+ pamHandle = nullptr; // to disable normal finishPam() handling
215+ pamFuture.cancel();
216+
217+ // Note the empty loop, we just want to clear the futures queue.
218+ // Any further prompts from the pam thread will be immediately
219+ // responded to/dismissed in handlePrompt().
220+ while (respond(QString()));
221+
222+ // Now let signal/slot handling happen so the thread can finish
223+ while (!pamFuture.isFinished()) {
224+ QCoreApplication::processEvents();
225+ }
226+
227+ pam_end(handle, PAM_CONV_ERR);
228+ }
229+ }
230+
209Q_SIGNALS:
231Q_SIGNALS:
210 void showMessage(pam_handle *handle, QString text, QLightDM::Greeter::MessageType type);
232 void showMessage(pam_handle *handle, QString text, QLightDM::Greeter::MessageType type);
211 void showPrompt(pam_handle *handle, QString text, QLightDM::Greeter::PromptType type, QLightDM::GreeterImpl::ResponseFuture response);
233 void showPrompt(pam_handle *handle, QString text, QLightDM::Greeter::PromptType type, QLightDM::GreeterImpl::ResponseFuture response);
@@ -247,28 +269,6 @@ private Q_SLOTS:
247 }
269 }
248
270
249private:
271private:
250− void cancelPam()
251− {
252− if (pamHandle != nullptr) {
253− QFuture<int> pamFuture = futureWatcher.future();
254− pam_handle *handle = pamHandle;
255− pamHandle = nullptr; // to disable normal finishPam() handling
256− pamFuture.cancel();
257−
258− // Note the empty loop, we just want to clear the futures queue.
259− // Any further prompts from the pam thread will be immediately
260− // responded to/dismissed in handlePrompt().
261− while (respond(QString()));
262−
263− // Now let signal/slot handling happen so the thread can finish
264− while (!pamFuture.isFinished()) {
265− QCoreApplication::processEvents();
266− }
267−
268− pam_end(handle, PAM_CONV_ERR);
269− }
270− }
271−
272 Greeter *greeter;
272 Greeter *greeter;
273 GreeterPrivate *greeterPrivate;
273 GreeterPrivate *greeterPrivate;
274 pam_handle* pamHandle;
274 pam_handle* pamHandle;
@@ -299,6 +299,11 @@ void GreeterPrivate::handleRespond(const QString &response)
299 m_impl->respond(response);
299 m_impl->respond(response);
300}
300}
301
301
302+void GreeterPrivate::cancelAuthentication()
303+{
304+ m_impl->cancelPam();
305+}
306+
302}
307}
303
308
304#include "GreeterPrivate.moc"
309#include "GreeterPrivate.moc"
plugins/LightDM/IntegratedLightDM/liblightdm/GreeterPrivate.h+1
@@ -38,6 +38,7 @@ public:
38
38
39 void handleAuthenticate();
39 void handleAuthenticate();
40 void handleRespond(const QString &response);
40 void handleRespond(const QString &response);
41+ void cancelAuthentication();
41
42
42protected:
43protected:
43 GreeterImpl *m_impl; // if the backend needs more private data
44 GreeterImpl *m_impl; // if the backend needs more private data
plugins/LightDM/IntegratedLightDM/liblightdm/SessionsModel.cpp−1
@@ -38,7 +38,6 @@ SessionsModel::SessionsModel(QObject* parent) :
38 QAbstractListModel(parent),
38 QAbstractListModel(parent),
39 d_ptr(new SessionsModelPrivate(this))
39 d_ptr(new SessionsModelPrivate(this))
40{
40{
41− Q_D(SessionsModel);
42 m_roleNames = QAbstractListModel::roleNames();
41 m_roleNames = QAbstractListModel::roleNames();
43 m_roleNames[KeyRole] = "key";
42 m_roleNames[KeyRole] = "key";
44 m_roleNames[TypeRole] = "type";
43 m_roleNames[TypeRole] = "type";
plugins/LightDM/IntegratedLightDM/liblightdm/SessionsModel.h+2−2
@@ -35,8 +35,6 @@ class Q_DECL_EXPORT SessionsModel : public QAbstractListModel
35 {
35 {
36 Q_OBJECT
36 Q_OBJECT
37
37
38− Q_ENUMS(SessionModelRoles SessionType)
39−
40 public:
38 public:
41
39
42 enum SessionModelRoles {
40 enum SessionModelRoles {
@@ -46,11 +44,13 @@ class Q_DECL_EXPORT SessionsModel : public QAbstractListModel
46 IdRole = KeyRole, /** Deprecated */
44 IdRole = KeyRole, /** Deprecated */
47 TypeRole
45 TypeRole
48 };
46 };
47+ Q_ENUM(SessionModelRoles)
49
48
50 enum SessionType {
49 enum SessionType {
51 LocalSessions,
50 LocalSessions,
52 RemoteSessions
51 RemoteSessions
53 };
52 };
53+ Q_ENUM(SessionType)
54
54
55 explicit SessionsModel(QObject* parent=0); /** Deprecated. Loads local sessions*/
55 explicit SessionsModel(QObject* parent=0); /** Deprecated. Loads local sessions*/
56 explicit SessionsModel(SessionsModel::SessionType, QObject* parent=0);
56 explicit SessionsModel(SessionsModel::SessionType, QObject* parent=0);
plugins/LightDM/IntegratedLightDM/liblightdm/UsersModel.h+1−2
@@ -37,8 +37,6 @@ class Q_DECL_EXPORT UsersModel : public QAbstractListModel
37{
37{
38 Q_OBJECT
38 Q_OBJECT
39
39
40− Q_ENUMS(UserModelRoles)
41−
42public:
40public:
43 explicit UsersModel(QObject *parent = 0);
41 explicit UsersModel(QObject *parent = 0);
44 virtual ~UsersModel() = default;
42 virtual ~UsersModel() = default;
@@ -53,6 +51,7 @@ public:
53 BackgroundPathRole,
51 BackgroundPathRole,
54 UidRole
52 UidRole
55 };
53 };
54+ Q_ENUM(UserModelRoles)
56
55
57 int rowCount(const QModelIndex &parent) const override;
56 int rowCount(const QModelIndex &parent) const override;
58 QVariant data(const QModelIndex &index, int role) const override;
57 QVariant data(const QModelIndex &index, int role) const override;
plugins/LightDM/PromptsModel.cppnew file+97
@@ -0,0 +1,97 @@
1+/*
2+ * Copyright (C) 2017 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ */
17+
18+#include "PromptsModel.h"
19+
20+PromptsModel::PromptsModel(QObject* parent)
21+ : QAbstractListModel(parent)
22+{
23+ m_roleNames[TypeRole] = "type";
24+ m_roleNames[TextRole] = "text";
25+}
26+
27+PromptsModel& PromptsModel::operator=(const PromptsModel &other)
28+{
29+ beginResetModel();
30+ m_prompts = other.m_prompts;
31+ endResetModel();
32+ Q_EMIT countChanged();
33+ return *this;
34+}
35+
36+int PromptsModel::rowCount(const QModelIndex &parent) const
37+{
38+ if (parent.isValid())
39+ return 0;
40+
41+ return m_prompts.size();
42+}
43+
44+QVariant PromptsModel::data(const QModelIndex &index, int role) const
45+{
46+ if (!index.isValid() || index.column() > 0 || index.row() >= m_prompts.size())
47+ return QVariant();
48+
49+ switch (role) {
50+ case Qt::DisplayRole: // fallthrough
51+ case TextRole: return m_prompts[index.row()].prompt;
52+ case TypeRole: return m_prompts[index.row()].type;
53+ default: return QVariant();
54+ }
55+}
56+
57+QHash<int, QByteArray> PromptsModel::roleNames() const
58+{
59+ return m_roleNames;
60+}
61+
62+void PromptsModel::prepend(const QString &text, PromptType type)
63+{
64+ beginInsertRows(QModelIndex(), 0, 0);
65+ m_prompts.prepend(PromptInfo{text, type});
66+ endInsertRows();
67+
68+ Q_EMIT countChanged();
69+}
70+
71+void PromptsModel::append(const QString &text, PromptType type)
72+{
73+ beginInsertRows(QModelIndex(), m_prompts.size(), m_prompts.size());
74+ m_prompts.append(PromptInfo{text, type});
75+ endInsertRows();
76+
77+ Q_EMIT countChanged();
78+}
79+
80+void PromptsModel::clear()
81+{
82+ beginResetModel();
83+ m_prompts.clear();
84+ endResetModel();
85+
86+ Q_EMIT countChanged();
87+}
88+
89+bool PromptsModel::hasPrompt() const
90+{
91+ Q_FOREACH(const PromptInfo &info, m_prompts) {
92+ if (info.type == PromptType::Secret || info.type == PromptType::Question) {
93+ return true;
94+ }
95+ }
96+ return false;
97+}
plugins/LightDM/PromptsModel.hnew file+70
@@ -0,0 +1,70 @@
1+/*
2+ * Copyright (C) 2017 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ *
16+ */
17+
18+#pragma once
19+
20+#include <QAbstractListModel>
21+
22+class PromptsModel : public QAbstractListModel
23+{
24+ Q_OBJECT
25+
26+ Q_PROPERTY(int count READ rowCount NOTIFY countChanged)
27+
28+public:
29+ enum PromptsModelRoles {
30+ TypeRole = Qt::UserRole,
31+ TextRole,
32+ };
33+ Q_ENUM(PromptsModelRoles)
34+
35+ enum PromptType {
36+ Message,
37+ Error,
38+ Secret,
39+ Question,
40+ Button,
41+ };
42+ Q_ENUM(PromptType)
43+
44+ explicit PromptsModel(QObject* parent=0);
45+
46+ PromptsModel& operator=(const PromptsModel &other);
47+
48+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
49+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
50+ QHash<int, QByteArray> roleNames() const override;
51+
52+ Q_INVOKABLE void prepend(const QString &text, PromptType type);
53+ Q_INVOKABLE void append(const QString &text, PromptType type);
54+
55+ void clear();
56+
57+ bool hasPrompt() const;
58+
59+Q_SIGNALS:
60+ void countChanged();
61+
62+private:
63+ struct PromptInfo {
64+ QString prompt;
65+ PromptType type;
66+ };
67+
68+ QList<PromptInfo> m_prompts;
69+ QHash<int, QByteArray> m_roleNames;
70+};
plugins/LightDM/SessionsModel.cpp+1−2
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2015 Canonical, Ltd.
2+ * Copyright (C) 2015-2016 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
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
5 * it under the terms of the GNU General Public License as published by
@@ -128,7 +128,6 @@ SessionsModel::SessionsModel(QObject* parent)
128 }
128 }
129
129
130 setModel(m_model);
130 setModel(m_model);
131− setSourceModel(m_model);
132 setSortCaseSensitivity(Qt::CaseInsensitive);
131 setSortCaseSensitivity(Qt::CaseInsensitive);
133 setSortLocaleAware(true);
132 setSortLocaleAware(true);
134 setSortRole(Qt::DisplayRole);
133 setSortRole(Qt::DisplayRole);
plugins/LightDM/SessionsModel.h+5−7
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2015 Canonical, Ltd.
2+ * Copyright (C) 2015-2016 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
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
5 * it under the terms of the GNU General Public License as published by
@@ -15,8 +15,7 @@
15 *
15 *
16 */
16 */
17
17
18−#ifndef UNITY_SESSIONSMODEL_H
18+#pragma once
19−#define UNITY_SESSIONSMODEL_H
20
19
21#include <unitysortfilterproxymodelqml.h>
20#include <unitysortfilterproxymodelqml.h>
22#include <QLightDM/SessionsModel>
21#include <QLightDM/SessionsModel>
@@ -28,10 +27,9 @@ class SessionsModel : public UnitySortFilterProxyModelQML
28{
27{
29 Q_OBJECT
28 Q_OBJECT
30
29
31− Q_ENUMS(SessionModelRoles)
32−
33 Q_PROPERTY(QList<QUrl> iconSearchDirectories READ iconSearchDirectories
30 Q_PROPERTY(QList<QUrl> iconSearchDirectories READ iconSearchDirectories
34 WRITE setIconSearchDirectories NOTIFY iconSearchDirectoriesChanged)
31 WRITE setIconSearchDirectories NOTIFY iconSearchDirectoriesChanged)
32+
35Q_SIGNALS:
33Q_SIGNALS:
36 void iconSearchDirectoriesChanged();
34 void iconSearchDirectoriesChanged();
37
35
@@ -45,6 +43,7 @@ public:
45 TypeRole = QLightDM::SessionsModel::SessionModelRoles::TypeRole,
43 TypeRole = QLightDM::SessionsModel::SessionModelRoles::TypeRole,
46 IconRole
44 IconRole
47 };
45 };
46+ Q_ENUM(SessionModelRoles)
48
47
49 explicit SessionsModel(QObject* parent=nullptr);
48 explicit SessionsModel(QObject* parent=nullptr);
50
49
@@ -55,6 +54,7 @@ public:
55 Q_INVOKABLE QUrl iconUrl(const QString sessionName) const;
54 Q_INVOKABLE QUrl iconUrl(const QString sessionName) const;
56
55
57 void setIconSearchDirectories(const QList<QUrl> searchDirectories);
56 void setIconSearchDirectories(const QList<QUrl> searchDirectories);
57+
58private:
58private:
59 QLightDM::SessionsModel* m_model;
59 QLightDM::SessionsModel* m_model;
60 QHash<int, QByteArray> m_roleNames;
60 QHash<int, QByteArray> m_roleNames;
@@ -64,5 +64,3 @@ private:
64 QUrl("/usr/share/unity-greeter/")};
64 QUrl("/usr/share/unity-greeter/")};
65
65
66};
66};
67−
68−#endif // UNITY_SESSIONSMODEL_H
plugins/LightDM/UsersModel.cpp+176−9
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2013 Canonical, Ltd.
2+ * Copyright (C) 2013,2015-2016 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
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
5 * it under the terms of the GNU General Public License as published by
@@ -12,20 +12,22 @@
12 *
12 *
13 * You should have received a copy of the GNU General Public License
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/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Author: Michael Terry <michael.terry@canonical.com>
17 */
15 */
18
16
17+#include "Greeter.h"
19#include "UsersModel.h"
18#include "UsersModel.h"
19+#include <QIdentityProxyModel>
20#include <QLightDM/UsersModel>
20#include <QLightDM/UsersModel>
21−#include <QtCore/QSortFilterProxyModel>
21+
22+#include <libintl.h>
22
23
23// First, we define an internal class that wraps LightDM's UsersModel. This
24// First, we define an internal class that wraps LightDM's UsersModel. This
24// class will modify some of the data coming from LightDM. For example, we
25// class will modify some of the data coming from LightDM. For example, we
25−// modify any empty Real Names into just normal Names.
26+// modify any empty Real Names into just normal Names. We also add optional
27+// rows, depending on configuration.
26// (We can't modify the data directly in UsersModel below because it won't sort
28// (We can't modify the data directly in UsersModel below because it won't sort
27// using the modified data.)
29// using the modified data.)
28−class MangleModel : public QSortFilterProxyModel
30+class MangleModel : public QIdentityProxyModel
29{
31{
30 Q_OBJECT
32 Q_OBJECT
31
33
@@ -33,29 +35,177 @@ public:
33 explicit MangleModel(QObject* parent=0);
35 explicit MangleModel(QObject* parent=0);
34
36
35 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
37 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
38+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
39+ QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
40+
41+private:
42+ struct CustomRow {
43+ QString name;
44+ QString realName;
45+ };
46+
47+ int sourceRowCount() const;
48+
49+ void updateGuestRow();
50+ void updateManualRow();
51+ void updateCustomRows();
52+
53+ void addCustomRow(const CustomRow &newRow);
54+ void removeCustomRow(const QString &rowName);
55+
56+ QList<CustomRow> m_customRows;
57+ bool m_updatingCustomRows;
36};
58};
37
59
38MangleModel::MangleModel(QObject* parent)
60MangleModel::MangleModel(QObject* parent)
39− : QSortFilterProxyModel(parent)
61+ : QIdentityProxyModel(parent)
62+ , m_updatingCustomRows(false)
40{
63{
41 setSourceModel(new QLightDM::UsersModel(this));
64 setSourceModel(new QLightDM::UsersModel(this));
65+
66+ updateCustomRows();
67+
68+ // Would be nice if there were a rowCountChanged signal in the base class.
69+ // We redo all custom rows on any row count change, because (A) some of
70+ // custom rows (manual login) use row count information and (B) when
71+ // testing, we use a modelReset signal as a way to indicate that a custom
72+ // row has been toggled off or on.
73+ connect(this, &QIdentityProxyModel::modelReset,
74+ this, &MangleModel::updateCustomRows);
75+ connect(this, &QIdentityProxyModel::rowsInserted,
76+ this, &MangleModel::updateCustomRows);
77+ connect(this, &QIdentityProxyModel::rowsRemoved,
78+ this, &MangleModel::updateCustomRows);
42}
79}
43
80
44QVariant MangleModel::data(const QModelIndex &index, int role) const
81QVariant MangleModel::data(const QModelIndex &index, int role) const
45{
82{
46− QVariant variantData = QSortFilterProxyModel::data(index, role);
83+ QVariant variantData;
84+
85+ if (index.row() >= rowCount())
86+ return QVariant();
87+
88+ bool isCustomRow = index.row() >= sourceRowCount();
89+ if (isCustomRow && index.column() == 0) {
90+ int customIndex = index.row() - sourceRowCount();
91+ if (role == QLightDM::UsersModel::NameRole) {
92+ variantData = m_customRows[customIndex].name;
93+ } else if (role == QLightDM::UsersModel::RealNameRole) {
94+ variantData = m_customRows[customIndex].realName;
95+ } else if (role == QLightDM::UsersModel::LoggedInRole) {
96+ variantData = false;
97+ } else if (role == QLightDM::UsersModel::SessionRole) {
98+ variantData = Greeter::instance()->defaultSessionHint();
99+ }
100+ } else {
101+ variantData = QIdentityProxyModel::data(index, role);
102+ }
47
103
48 // If user's real name is empty, switch to unix name
104 // If user's real name is empty, switch to unix name
49 if (role == QLightDM::UsersModel::RealNameRole && variantData.toString().isEmpty()) {
105 if (role == QLightDM::UsersModel::RealNameRole && variantData.toString().isEmpty()) {
50− variantData = QSortFilterProxyModel::data(index, QLightDM::UsersModel::NameRole);
106+ variantData = data(index, QLightDM::UsersModel::NameRole);
51 } else if (role == QLightDM::UsersModel::BackgroundPathRole && variantData.toString().startsWith('#')) {
107 } else if (role == QLightDM::UsersModel::BackgroundPathRole && variantData.toString().startsWith('#')) {
52 const QString stringData = "data:image/svg+xml,<svg><rect width='100%' height='100%' fill='" + variantData.toString() + "'/></svg>";
108 const QString stringData = "data:image/svg+xml,<svg><rect width='100%' height='100%' fill='" + variantData.toString() + "'/></svg>";
53 variantData = stringData;
109 variantData = stringData;
54 }
110 }
55
111
112+ // Workaround for liblightdm returning "" when a user has no default session
113+ if (Q_UNLIKELY(role == QLightDM::UsersModel::SessionRole && variantData.toString().isEmpty())) {
114+ variantData = Greeter::instance()->defaultSessionHint();
115+ }
116+
56 return variantData;
117 return variantData;
57}
118}
58
119
120+void MangleModel::addCustomRow(const CustomRow &newRow)
121+{
122+ for (int i = 0; i < m_customRows.size(); i++) {
123+ if (m_customRows[i].name == newRow.name) {
124+ return; // we don't have custom rows that change content yet
125+ }
126+ }
127+
128+ beginInsertRows(QModelIndex(), rowCount(), rowCount());
129+ m_customRows << newRow;
130+ endInsertRows();
131+}
132+
133+void MangleModel::removeCustomRow(const QString &rowName)
134+{
135+ for (int i = 0; i < m_customRows.size(); i++) {
136+ if (m_customRows[i].name == rowName) {
137+ int rowNum = sourceRowCount() + i;
138+ beginRemoveRows(QModelIndex(), rowNum, rowNum);
139+ m_customRows.removeAt(i);
140+ endRemoveRows();
141+ break;
142+ }
143+ }
144+}
145+
146+void MangleModel::updateManualRow()
147+{
148+ bool hasAnotherEntry = sourceRowCount() > 0;
149+ for (int i = 0; !hasAnotherEntry && i < m_customRows.size(); i++) {
150+ if (m_customRows[i].name != QStringLiteral("*other")) {
151+ hasAnotherEntry = true;
152+ }
153+ }
154+
155+ // Show manual login if we are asked to OR if no other entry exists
156+ if (Greeter::instance()->showManualLoginHint() || !hasAnotherEntry)
157+ addCustomRow({QStringLiteral("*other"), gettext("Login")});
158+ else
159+ removeCustomRow(QStringLiteral("*other"));
160+}
161+
162+void MangleModel::updateGuestRow()
163+{
164+ if (Greeter::instance()->hasGuestAccount())
165+ addCustomRow({QStringLiteral("*guest"), gettext("Guest Session")});
166+ else
167+ removeCustomRow(QStringLiteral("*guest"));
168+}
169+
170+void MangleModel::updateCustomRows()
171+{
172+ // We update when rowCount changes, but we also insert/remove rows here.
173+ // So guard this function to avoid recursion.
174+ if (m_updatingCustomRows)
175+ return;
176+
177+ m_updatingCustomRows = true;
178+ updateGuestRow();
179+ updateManualRow();
180+ m_updatingCustomRows = false;
181+}
182+
183+int MangleModel::rowCount(const QModelIndex &parent) const
184+{
185+ if (parent.isValid())
186+ return 0;
187+ else
188+ return sourceRowCount() + m_customRows.size();
189+}
190+
191+int MangleModel::sourceRowCount() const
192+{
193+ return Greeter::instance()->hideUsersHint() ? 0 : sourceModel()->rowCount();
194+}
195+
196+QModelIndex MangleModel::index(int row, int column, const QModelIndex &parent) const
197+{
198+ if (row >= rowCount())
199+ return QModelIndex();
200+
201+ bool isCustomRow = row >= sourceRowCount();
202+ if (isCustomRow && !parent.isValid()) {
203+ return createIndex(row, column);
204+ } else {
205+ return QIdentityProxyModel::index(row, column, parent);
206+ }
207+}
208+
59// **** Now we continue with actual UsersModel class ****
209// **** Now we continue with actual UsersModel class ****
60
210
61UsersModel::UsersModel(QObject* parent)
211UsersModel::UsersModel(QObject* parent)
@@ -68,4 +218,21 @@ UsersModel::UsersModel(QObject* parent)
68 sort(0);
218 sort(0);
69}
219}
70
220
221+bool UsersModel::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const
222+{
223+ auto leftName = source_left.data(QLightDM::UsersModel::NameRole);
224+ auto rightName = source_right.data(QLightDM::UsersModel::NameRole);
225+
226+ if (leftName == QStringLiteral("*guest"))
227+ return false;
228+ if (rightName == QStringLiteral("*guest"))
229+ return true;
230+ if (leftName == QStringLiteral("*other"))
231+ return false;
232+ if (rightName == QStringLiteral("*other"))
233+ return true;
234+
235+ return UnitySortFilterProxyModelQML::lessThan(source_left, source_right);
236+}
237+
71#include "UsersModel.moc"
238#include "UsersModel.moc"
plugins/LightDM/UsersModel.h+6−8
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2012,2013 Canonical, Ltd.
2+ * Copyright (C) 2012-2013,2015-2016 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
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
5 * it under the terms of the GNU General Public License as published by
@@ -12,19 +12,16 @@
12 *
12 *
13 * You should have received a copy of the GNU General Public License
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/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16− * Authors: Michael Terry <michael.terry@canonical.com>
17 */
15 */
18
16
19/* This class is a really tiny filter around QLightDM::UsersModel. There are
17/* This class is a really tiny filter around QLightDM::UsersModel. There are
20 some operations that we want to edit a bit for the benefit of Qml.
18 some operations that we want to edit a bit for the benefit of Qml.
21 Specifically, we want to sort users according to realName. */
19 Specifically, we want to sort users according to realName. */
22
20
23−#ifndef UNITY_USERSMODEL_H
21+#pragma once
24−#define UNITY_USERSMODEL_H
25
22
26#include <unitysortfilterproxymodelqml.h>
23#include <unitysortfilterproxymodelqml.h>
27−#include <QtCore/QObject>
24+#include <QObject>
28
25
29class UsersModel : public UnitySortFilterProxyModelQML
26class UsersModel : public UnitySortFilterProxyModelQML
30{
27{
@@ -32,6 +29,7 @@ class UsersModel : public UnitySortFilterProxyModelQML
32
29
33public:
30public:
34 explicit UsersModel(QObject* parent=0);
31 explicit UsersModel(QObject* parent=0);
35−};
36
32
37−#endif
33+protected:
34+ bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override;
35+};
plugins/LightDM/plugin.cpp+12−4
@@ -19,6 +19,7 @@
19#include "DBusGreeter.h"
19#include "DBusGreeter.h"
20#include "DBusGreeterList.h"
20#include "DBusGreeterList.h"
21#include "Greeter.h"
21#include "Greeter.h"
22+#include "PromptsModel.h"
22#include "SessionsModel.h"
23#include "SessionsModel.h"
23#include "UsersModel.h"
24#include "UsersModel.h"
24#include <libusermetricsoutput/ColorTheme.h>
25#include <libusermetricsoutput/ColorTheme.h>
@@ -32,16 +33,24 @@
32
33
33static QObject *greeter_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
34static QObject *greeter_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
34{
35{
35− Q_UNUSED(engine)
36 Q_UNUSED(scriptEngine)
36 Q_UNUSED(scriptEngine)
37
37
38− Greeter *greeter = new Greeter();
38+ Greeter *greeter = Greeter::instance();
39 new DBusGreeter(greeter, QStringLiteral("/"));
39 new DBusGreeter(greeter, QStringLiteral("/"));
40 new DBusGreeterList(greeter, QStringLiteral("/list"));
40 new DBusGreeterList(greeter, QStringLiteral("/list"));
41
41
42+ engine->setObjectOwnership(greeter, QQmlEngine::CppOwnership);
43+
42 return greeter;
44 return greeter;
43}
45}
44
46
47+static QObject *prompts_provider(QQmlEngine *engine, QJSEngine *)
48+{
49+ auto model = Greeter::instance()->promptsModel();
50+ engine->setObjectOwnership(model, QQmlEngine::CppOwnership);
51+ return model;
52+}
53+
45static QObject *sessions_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
54static QObject *sessions_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
46{
55{
47 Q_UNUSED(engine)
56 Q_UNUSED(engine)
@@ -78,8 +87,7 @@ void PLUGIN_CLASSNAME::registerTypes(const char *uri)
78 #error No library defined in LightDM plugin
87 #error No library defined in LightDM plugin
79#endif
88#endif
80
89
81− qRegisterMetaType<QLightDM::Greeter::MessageType>("QLightDM::Greeter::MessageType");
90+ qmlRegisterSingletonType<PromptsModel>(uri, 0, 1, "Prompts", prompts_provider);
82− qRegisterMetaType<QLightDM::Greeter::PromptType>("QLightDM::Greeter::PromptType");
83
91
84 qmlRegisterSingletonType<SessionsModel>(uri, 0, 1, "Sessions", sessions_provider);
92 qmlRegisterSingletonType<SessionsModel>(uri, 0, 1, "Sessions", sessions_provider);
85 qmlRegisterUncreatableType<QLightDM::SessionsModel>(uri, 0, 1, "SessionRoles", QStringLiteral("Type is not instantiable"));
93 qmlRegisterUncreatableType<QLightDM::SessionsModel>(uri, 0, 1, "SessionRoles", QStringLiteral("Type is not instantiable"));
plugins/Lights/Lights.h+1−1
@@ -27,7 +27,6 @@ struct light_device_t;
27class Lights: public QObject
27class Lights: public QObject
28{
28{
29 Q_OBJECT
29 Q_OBJECT
30− Q_ENUMS(State)
31 Q_PROPERTY(State state READ state WRITE setState NOTIFY stateChanged)
30 Q_PROPERTY(State state READ state WRITE setState NOTIFY stateChanged)
32 Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
31 Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
33 Q_PROPERTY(int onMillisec READ onMillisec WRITE setOnMillisec NOTIFY onMillisecChanged)
32 Q_PROPERTY(int onMillisec READ onMillisec WRITE setOnMillisec NOTIFY onMillisecChanged)
@@ -38,6 +37,7 @@ public:
38 Off,
37 Off,
39 On,
38 On,
40 };
39 };
40+ Q_ENUM(State)
41
41
42 explicit Lights(QObject *parent = 0);
42 explicit Lights(QObject *parent = 0);
43 ~Lights();
43 ~Lights();
plugins/Powerd/Powerd.h+2−2
@@ -27,8 +27,6 @@
27class Powerd: public QObject
27class Powerd: public QObject
28{
28{
29 Q_OBJECT
29 Q_OBJECT
30− Q_ENUMS(Status)
31− Q_ENUMS(DisplayStateChangeReason)
32 Q_PROPERTY(Status status READ status NOTIFY statusChanged)
30 Q_PROPERTY(Status status READ status NOTIFY statusChanged)
33
31
34public:
32public:
@@ -41,11 +39,13 @@ public:
41 SnapDecision = 5, // Display changed state due to snap decision prompt
39 SnapDecision = 5, // Display changed state due to snap decision prompt
42 CallDone = 6, // Display changed state due to voice call end
40 CallDone = 6, // Display changed state due to voice call end
43 };
41 };
42+ Q_ENUM(DisplayStateChangeReason)
44
43
45 enum Status {
44 enum Status {
46 Off,
45 Off,
47 On,
46 On,
48 };
47 };
48+ Q_ENUM(Status)
49
49
50 explicit Powerd(QObject *parent = 0);
50 explicit Powerd(QObject *parent = 0);
51 ~Powerd();
51 ~Powerd();
plugins/UInput/uinput.h+1−1
@@ -27,7 +27,6 @@
27class UInput : public QObject
27class UInput : public QObject
28{
28{
29 Q_OBJECT
29 Q_OBJECT
30− Q_ENUMS(Button)
31
30
32public:
31public:
33 enum Button {
32 enum Button {
@@ -35,6 +34,7 @@ public:
35 ButtonRight,
34 ButtonRight,
36 ButtonMiddle
35 ButtonMiddle
37 };
36 };
37+ Q_ENUM(Button)
38
38
39 explicit UInput(QObject *parent = nullptr);
39 explicit UInput(QObject *parent = nullptr);
40 ~UInput();
40 ~UInput();
plugins/Ubuntu/CMakeLists.txt−2
@@ -1,4 +1,2 @@
1add_subdirectory(Gestures)
1add_subdirectory(Gestures)
2add_subdirectory(DownloadDaemonListener)
2add_subdirectory(DownloadDaemonListener)
3−add_subdirectory(Payments)
4−add_subdirectory(SystemImage)
plugins/Ubuntu/Gestures/CMakeLists.txt+1−1
@@ -16,7 +16,7 @@ pkg_check_modules(UBUNTUGESTURES REQUIRED UbuntuGestures)
16
16
17add_definitions(-DUBUNTUGESTURESQML_LIBRARY)
17add_definitions(-DUBUNTUGESTURESQML_LIBRARY)
18
18
19−add_library(UbuntuGesturesQml MODULE ${UbuntuGesturesQml_SOURCES})
19+add_library(UbuntuGesturesQml SHARED ${UbuntuGesturesQml_SOURCES})
20target_link_libraries(UbuntuGesturesQml ${UBUNTUGESTURES_LIBRARIES})
20target_link_libraries(UbuntuGesturesQml ${UBUNTUGESTURES_LIBRARIES})
21
21
22qt5_use_modules(UbuntuGesturesQml Core Quick)
22qt5_use_modules(UbuntuGesturesQml Core Quick)
plugins/Ubuntu/Gestures/Direction.h+1−1
@@ -26,7 +26,6 @@
26 */
26 */
27class UBUNTUGESTURESQML_EXPORT Direction : public QObject {
27class UBUNTUGESTURESQML_EXPORT Direction : public QObject {
28 Q_OBJECT
28 Q_OBJECT
29− Q_ENUMS(Type)
30
29
31public:
30public:
32 // Make sure it is kept synchronized with SDK UCSwipeArea::Direction
31 // Make sure it is kept synchronized with SDK UCSwipeArea::Direction
@@ -38,6 +37,7 @@ public:
38 Horizontal, // Along the X axis, in any direction
37 Horizontal, // Along the X axis, in any direction
39 Vertical // Along the Y axis, in any direction
38 Vertical // Along the Y axis, in any direction
40 };
39 };
40+ Q_ENUM(Type)
41
41
42 Q_INVOKABLE static bool isHorizontal(Direction::Type type);
42 Q_INVOKABLE static bool isHorizontal(Direction::Type type);
43 Q_INVOKABLE static bool isVertical(Direction::Type type);
43 Q_INVOKABLE static bool isVertical(Direction::Type type);
plugins/Ubuntu/Gestures/TouchGestureArea.cpp−5
@@ -735,7 +735,6 @@ void TouchGestureArea::resyncCachedTouchPoints()
735 bool added = false;
735 bool added = false;
736 bool ended = false;
736 bool ended = false;
737 bool moved = false;
737 bool moved = false;
738− bool wantsDrag = false;
739
738
740 // list of deletes
739 // list of deletes
741 QMutableHashIterator<int, GestureTouchPoint*> removeIter(m_cachedTouchPoints);
740 QMutableHashIterator<int, GestureTouchPoint*> removeIter(m_cachedTouchPoints);
@@ -765,10 +764,6 @@ void TouchGestureArea::resyncCachedTouchPoints()
765 }
764 }
766 }
765 }
767
766
768− if (wantsDrag && !dragging()) {
769− setDragging(true);
770− }
771−
772 if (ended) {
767 if (ended) {
773 if (m_cachedTouchPoints.isEmpty()) {
768 if (m_cachedTouchPoints.isEmpty()) {
774 if (!dragging()) Q_EMIT clicked();
769 if (!dragging()) Q_EMIT clicked();
plugins/Ubuntu/Gestures/TouchGestureArea.h+1−1
@@ -114,7 +114,6 @@ private:
114class UBUNTUGESTURESQML_EXPORT TouchGestureArea : public QQuickItem
114class UBUNTUGESTURESQML_EXPORT TouchGestureArea : public QQuickItem
115{
115{
116 Q_OBJECT
116 Q_OBJECT
117− Q_ENUMS(Status)
118
117
119 Q_PROPERTY(int status READ status NOTIFY statusChanged)
118 Q_PROPERTY(int status READ status NOTIFY statusChanged)
120 Q_PROPERTY(bool dragging READ dragging NOTIFY draggingChanged)
119 Q_PROPERTY(bool dragging READ dragging NOTIFY draggingChanged)
@@ -137,6 +136,7 @@ public:
137 Recognized,
136 Recognized,
138 Rejected
137 Rejected
139 };
138 };
139+ Q_ENUM(Status)
140 TouchGestureArea(QQuickItem* parent = nullptr);
140 TouchGestureArea(QQuickItem* parent = nullptr);
141 ~TouchGestureArea();
141 ~TouchGestureArea();
142
142
plugins/Ubuntu/Payments/CMakeLists.txtdeleted−20
@@ -1,20 +0,0 @@
1−include_directories(
2− ${CMAKE_CURRENT_SOURCE_DIR}
3− ${CMAKE_CURRENT_BINARY_DIR}
4−)
5−
6−set(PAYMENTS_SOURCES
7− plugin.cpp
8− Payments.cpp
9−)
10−
11−add_library(Payments MODULE ${PAYMENTS_SOURCES})
12−
13−qt5_use_modules(Payments Qml Quick DBus Core)
14−
15−add_unity8_plugin(Ubuntu.Payments 0.1 Ubuntu/Payments TARGETS Payments)
16−
17−pkg_check_modules(LIBPAY REQUIRED pay-2)
18−add_definitions(${LIBPAY_CFLAGS} ${LIBPAY_CFLAGS_OTHER})
19−
20−target_link_libraries(Payments ${LIBPAY_LDFLAGS})
plugins/Ubuntu/Payments/Payments.cppdeleted−136
@@ -1,136 +0,0 @@
1−/*
2− * Copyright (C) 2014 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−#include "Payments.h"
18−
19−#include <QLocale>
20−
21−#include <libpay/pay-package.h>
22−
23−
24−// The observer callback for the package we are watching.
25−static void observer(PayPackage* /* package */, const char* itemid, PayPackageItemStatus status, void* user_data) {
26− // This function is called in libpay's thread, so be careful what you call
27− // Emitting signals should be fine as long as they use Queued or Auto
28− // connections (the default)
29− // http://qt-project.org/doc/qt-5/threads-qobject.html#signals-and-slots-across-threads
30−
31− Payments *self = static_cast<Payments*>(user_data);
32−
33− // If the item ID is different, ignore it.
34− if (itemid != self->storeItemId()) {
35− return;
36− }
37−
38− // FIXME: No error reporting from libpay, but we need to show some
39− // types of errors to the user. https://launchpad.net/bugs/1333403
40− switch (status) {
41− case PAY_PACKAGE_ITEM_STATUS_PURCHASED:
42− Q_EMIT self->purchaseCompleted();
43− break;
44− case PAY_PACKAGE_ITEM_STATUS_PURCHASING:
45− self->setPurchasing(true);
46− break;
47− case PAY_PACKAGE_ITEM_STATUS_NOT_PURCHASED:
48− if (self->purchasing()) {
49− self->setPurchasing(false);
50− Q_EMIT self->purchaseCancelled();
51− }
52− break;
53− default:
54− break;
55− }
56−}
57−
58−Payments::Payments(QObject *parent)
59− : QObject(parent),
60− m_purchasing(false)
61−{
62− m_package = pay_package_new("click-scope");
63− pay_package_item_observer_install(m_package, observer, this);
64−}
65−
66−Payments::~Payments()
67−{
68− pay_package_item_observer_uninstall(m_package, observer, this);
69− pay_package_delete(m_package);
70−}
71−
72−QString Payments::currency() const
73−{
74− return m_currency;
75−}
76−
77−double Payments::price() const
78−{
79− return m_price;
80−}
81−
82−QString Payments::storeItemId() const
83−{
84− return m_store_item_id;
85−}
86−
87−QString Payments::formattedPrice() const
88−{
89− QLocale locale;
90− return locale.toCurrencyString(m_price, m_currency);
91−}
92−
93−bool Payments::purchasing() const
94−{
95− return m_purchasing;
96−}
97−
98−void Payments::setCurrency(const QString &currency)
99−{
100− if(m_currency != currency) {
101− m_currency = currency;
102− Q_EMIT currencyChanged(currency);
103− Q_EMIT formattedPriceChanged(formattedPrice());
104− }
105−}
106−
107−void Payments::setPrice(const double price)
108−{
109− if(m_price != price) {
110− m_price = price;
111− Q_EMIT priceChanged(price);
112− Q_EMIT formattedPriceChanged(formattedPrice());
113− }
114−}
115−
116−void Payments::setStoreItemId(const QString &store_item_id)
117−{
118− if (m_store_item_id != store_item_id) {
119− m_store_item_id = store_item_id;
120− Q_EMIT storeItemIdChanged(m_store_item_id);
121− }
122−
123− if (m_store_item_id.isEmpty()) {
124− return;
125− }
126−}
127−
128−void Payments::setPurchasing(bool is_purchasing)
129−{
130− m_purchasing = is_purchasing;
131−}
132−
133−void Payments::start()
134−{
135− pay_package_item_start_purchase(m_package, m_store_item_id.toLocal8Bit().data());
136−}
plugins/Ubuntu/Payments/Payments.hdeleted−69
@@ -1,69 +0,0 @@
1−/*
2− * Copyright (C) 2014 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−#ifndef PAYMENTS_H
18−#define PAYMENTS_H
19−
20−#include <QObject>
21−
22−#include <libpay/pay-package.h>
23−
24−
25−class Payments : public QObject
26−{
27− Q_OBJECT
28− Q_DISABLE_COPY(Payments)
29− Q_PROPERTY(QString currency READ currency WRITE setCurrency NOTIFY currencyChanged)
30− Q_PROPERTY(double price READ price WRITE setPrice NOTIFY priceChanged)
31− Q_PROPERTY(QString storeItemId READ storeItemId WRITE setStoreItemId NOTIFY storeItemIdChanged)
32− Q_PROPERTY(QString formattedPrice READ formattedPrice NOTIFY formattedPriceChanged)
33−
34−public:
35− explicit Payments(QObject *parent = 0);
36− virtual ~Payments();
37−
38− QString currency() const;
39− double price() const;
40− QString storeItemId() const;
41− QString formattedPrice() const;
42− bool purchasing() const;
43−
44− void setCurrency(const QString& currency);
45− void setPrice(const double price);
46− void setStoreItemId(const QString& store_item_id);
47− void setPurchasing(bool is_purchasing);
48− Q_INVOKABLE void start();
49−
50−Q_SIGNALS:
51− void currencyChanged(const QString& currency);
52− void priceChanged(const double price);
53− void storeItemIdChanged(const QString &store_item_id);
54− void formattedPriceChanged(const QString &formatted_price);
55−
56− void purchaseError(const QString &error);
57− void purchaseCompleted();
58− void purchaseCancelled();
59−
60−private:
61− QString m_currency;
62− double m_price;
63− QString m_store_item_id;
64− bool m_purchasing;
65−
66− PayPackage *m_package;
67−};
68−
69−#endif // PAYMENTS_H
plugins/Ubuntu/Payments/qmldirdeleted−3
@@ -1,3 +0,0 @@
1−module Ubuntu.Payments
2−plugin Payments
3−typeinfo Payments.qmltypes
plugins/Ubuntu/SystemImage/CMakeLists.txtdeleted−15
@@ -1,15 +0,0 @@
1−include_directories(
2− ${GLIB_INCLUDE_DIRS}
3−)
4−
5−set(SYSTEMIMAGE_SOURCES
6− plugin.cpp
7− SystemImage.cpp
8−)
9−
10−add_library(SystemImage MODULE ${SYSTEMIMAGE_SOURCES})
11−
12−qt5_use_modules(SystemImage Qml DBus Core)
13−target_link_libraries(SystemImage ${GLIB_LIBRARIES})
14−
15−add_unity8_plugin(Ubuntu.SystemImage 0.1 Ubuntu/SystemImage TARGETS SystemImage)
plugins/Ubuntu/SystemImage/SystemImage.cppdeleted−155
@@ -1,155 +0,0 @@
1−/*
2− * Copyright (C) 2014-2016 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−#include <QDBusConnection>
18−#include <QDBusPendingCall>
19−#include <QDBusReply>
20−#include <QDebug>
21−
22−#include <glib.h>
23−
24−#include "SystemImage.h"
25−
26−#define SYSTEMIMAGE_SERVICE QStringLiteral("com.canonical.SystemImage")
27−#define SYSTEMIMAGE_PATH QStringLiteral("/Service")
28−#define SYSTEMIMAGE_IFACE QStringLiteral("com.canonical.SystemImage")
29−
30−Q_LOGGING_CATEGORY(SYSTEMIMAGEPLUGIN, "unity8.systemimage", QtWarningMsg)
31−
32−#define DEBUG_MSG qCDebug(SYSTEMIMAGEPLUGIN).nospace().noquote() << Q_FUNC_INFO
33−#define WARNING_MSG qCWarning(SYSTEMIMAGEPLUGIN).nospace().noquote() << Q_FUNC_INFO
34−
35−SystemImage::SystemImage(QObject *parent)
36− : QObject(parent)
37−{
38− QDBusConnection::systemBus().connect(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE, QStringLiteral("UpdateAvailableStatus"),
39− this, SLOT(onUpdateAvailableStatus(bool,bool,QString,int,QString,QString)));
40− QDBusConnection::systemBus().connect(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE, QStringLiteral("UpdateDownloaded"),
41− this, SLOT(onUpdateDownloaded()));
42− QDBusConnection::systemBus().connect(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE, QStringLiteral("UpdateFailed"),
43− this, SLOT(onUpdateFailed(int,QString)));
44− QDBusConnection::systemBus().connect(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE, QStringLiteral("Applied"),
45− this, SLOT(onUpdateApplied(bool)));
46− QDBusConnection::systemBus().connect(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE, QStringLiteral("Rebooting"),
47− this, SLOT(onRebooting(bool)));
48−}
49−
50−void SystemImage::checkForUpdate()
51−{
52− DEBUG_MSG << "Checking for update";
53− const QDBusMessage msg = QDBusMessage::createMethodCall(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE,
54− QStringLiteral("CheckForUpdate"));
55− QDBusConnection::systemBus().asyncCall(msg);
56−}
57−
58−void SystemImage::applyUpdate()
59−{
60− DEBUG_MSG << "Applying update";
61− setUpdateApplying(true);
62−
63− const QDBusMessage msg = QDBusMessage::createMethodCall(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE,
64− QStringLiteral("ApplyUpdate"));
65− QDBusConnection::systemBus().asyncCall(msg);
66−}
67−
68−void SystemImage::factoryReset()
69−{
70− const QDBusMessage msg = QDBusMessage::createMethodCall(SYSTEMIMAGE_SERVICE, SYSTEMIMAGE_PATH, SYSTEMIMAGE_IFACE,
71− QStringLiteral("FactoryReset"));
72− QDBusConnection::systemBus().asyncCall(msg);
73−}
74−
75−void SystemImage::onUpdateAvailableStatus(bool is_available, bool downloading, const QString &available_version, int update_size,
76− const QString &last_update_date, const QString &error_reason)
77−{
78− DEBUG_MSG << "A new update is " << (is_available ? "" : "NOT") << "available";
79−
80− if (is_available == m_updateAvailable) {
81− return;
82− }
83−
84− m_updateAvailable = is_available;
85− m_downloading = downloading;
86− m_availableVersion = available_version;
87− m_updateSize = formatSize(update_size);
88− m_lastUpdateDate = last_update_date;
89− m_errorReason = error_reason;
90− Q_EMIT updateAvailableStatus();
91−
92− DEBUG_MSG << "Downloading: " << downloading << ", version: " << available_version << ", last update: " << last_update_date <<
93− ", size: " << m_updateSize;
94−}
95−
96−void SystemImage::onUpdateDownloaded()
97−{
98− DEBUG_MSG << "Update downloaded";
99−
100− m_downloaded = true;
101− Q_EMIT updateDownloadedChanged();
102−}
103−
104−void SystemImage::onUpdateFailed(int /*consecutive_failure_count*/, const QString &last_reason)
105−{
106− WARNING_MSG << "System Update failed: " << last_reason;
107− setUpdateApplying(false);
108−}
109−
110−void SystemImage::onUpdateApplied(bool applied)
111−{
112− DEBUG_MSG << "System Update applied with status: " << applied;
113− setUpdateApplying(false);
114− if (applied) {
115− resetUpdateStatus();
116− Q_EMIT updateAvailableStatus();
117− }
118−}
119−
120−void SystemImage::onRebooting(bool status)
121−{
122− setUpdateApplying(false);
123− DEBUG_MSG << "Rebooting: " << status;
124−}
125−
126−void SystemImage::setUpdateApplying(bool status)
127−{
128− if (status != m_updateApplying) {
129− m_updateApplying = status;
130− Q_EMIT updateApplyingChanged();
131− }
132−}
133−
134−void SystemImage::resetUpdateStatus()
135−{
136− m_updateAvailable = false;
137− m_updateApplying = false;
138− m_downloading = false;
139− m_downloaded = false;
140− m_availableVersion.clear();
141− m_updateSize.clear();
142− m_lastUpdateDate.clear();
143− m_errorReason.clear();
144−}
145−
146−QString SystemImage::formatSize(quint64 size) const
147−{
148− guint64 g_size = size;
149−
150− gchar * formatted_size = g_format_size(g_size);
151− QString q_formatted_size = QString::fromLocal8Bit(formatted_size);
152− g_free(formatted_size);
153−
154− return q_formatted_size;
155−}
plugins/Ubuntu/SystemImage/SystemImage.hdeleted−84
@@ -1,84 +0,0 @@
1−/*
2− * Copyright (C) 2014-2016 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−#ifndef SYSTEMIMAGE_H
18−#define SYSTEMIMAGE_H
19−
20−#include <QObject>
21−#include <QLoggingCategory>
22−
23−Q_DECLARE_LOGGING_CATEGORY(SYSTEMIMAGEPLUGIN)
24−
25−class SystemImage : public QObject
26−{
27− Q_OBJECT
28− Q_DISABLE_COPY(SystemImage)
29−
30− Q_PROPERTY(bool updateAvailable READ updateAvailable NOTIFY updateAvailableStatus)
31− Q_PROPERTY(bool updateDownloading READ updateDownloading NOTIFY updateAvailableStatus)
32− Q_PROPERTY(QString availableVersion READ availableVersion NOTIFY updateAvailableStatus)
33− Q_PROPERTY(QString updateSize READ updateSize NOTIFY updateAvailableStatus)
34− Q_PROPERTY(bool updateApplying READ updateApplying NOTIFY updateApplyingChanged)
35− Q_PROPERTY(bool updateDownloaded READ updateDownloaded NOTIFY updateDownloadedChanged)
36−
37−public:
38− explicit SystemImage(QObject *parent = nullptr);
39− ~SystemImage() = default;
40−
41− bool updateAvailable() const { return m_updateAvailable; }
42− bool updateDownloading() const { return m_downloading; }
43− QString availableVersion() const { return m_availableVersion; }
44− QString updateSize() const { return m_updateSize; }
45− bool updateApplying() const { return m_updateApplying; }
46− bool updateDownloaded() const { return m_downloaded; }
47−
48−public Q_SLOTS:
49− Q_INVOKABLE void checkForUpdate();
50− Q_INVOKABLE void applyUpdate();
51− Q_INVOKABLE void factoryReset();
52−
53−private Q_SLOTS:
54− void onUpdateAvailableStatus(bool is_available, bool updateDownloading, const QString &available_version,
55− int update_size, const QString &last_update_date, const QString &error_reason);
56− void onUpdateDownloaded();
57− void onUpdateFailed(int consecutive_failure_count, const QString & last_reason);
58− void onUpdateApplied(bool applied);
59− void onRebooting(bool status);
60−
61−Q_SIGNALS:
62− void updateAvailableStatus();
63− void updateDownloadedChanged();
64− void updateApplyingChanged();
65−
66−private Q_SLOTS:
67− void setUpdateApplying(bool status);
68−
69−private:
70− void resetUpdateStatus();
71− QString formatSize(quint64 size) const;
72−
73−private:
74− bool m_updateAvailable = false;
75− bool m_updateApplying = false;
76− bool m_downloading = false;
77− bool m_downloaded = false;
78− QString m_availableVersion;
79− QString m_updateSize;
80− QString m_lastUpdateDate;
81− QString m_errorReason;
82−};
83−
84−#endif // SYSTEMIMAGE_H
plugins/Ubuntu/SystemImage/plugin.cppdeleted−28
@@ -1,28 +0,0 @@
1−/*
2− * Copyright (C) 2014-2016 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−#include "plugin.h"
18−#include "SystemImage.h"
19−
20−#include <QtQml>
21−
22−void BackendPlugin::registerTypes(const char *uri)
23−{
24− Q_ASSERT(uri == QLatin1String("Ubuntu.SystemImage"));
25−
26− qmlRegisterSingletonType<SystemImage>(uri, 0, 1, "SystemImage",
27− [](QQmlEngine*, QJSEngine*) -> QObject* { return new SystemImage; });
28−}
plugins/Ubuntu/SystemImage/qmldirdeleted−3
@@ -1,3 +0,0 @@
1−module Ubuntu.SystemImage
2−plugin SystemImage
3−typeinfo SystemImage.qmltypes
plugins/Unity/ApplicationMenu/CMakeLists.txtnew file+19
@@ -0,0 +1,19 @@
1+find_package(Qt5DBus REQUIRED)
2+
3+include_directories(
4+ ${CMAKE_CURRENT_SOURCE_DIR}
5+ ${CMAKE_CURRENT_BINARY_DIR}
6+)
7+
8+set(applicationMenu_SRCS
9+ applicationmenuregistry.cpp
10+ dbusapplicationmenuregistry.cpp
11+ plugin.cpp)
12+
13+qt5_add_dbus_adaptor(applicationMenu_SRCS com.ubuntu.MenuRegistrar.xml dbusapplicationmenuregistry.h DBusApplicationMenuRegistry)
14+
15+add_library(ApplicationMenu-qml MODULE ${applicationMenu_SRCS})
16+
17+qt5_use_modules(ApplicationMenu-qml DBus Qml)
18+
19+add_unity8_plugin(Unity.ApplicationMenu 0.1 Unity/ApplicationMenu TARGETS ApplicationMenu-qml)
plugins/Unity/ApplicationMenu/applicationmenuregistry.cppnew file+141
@@ -0,0 +1,141 @@
1+/*
2+ * Copyright (C) 2016 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "applicationmenuregistry.h"
18+
19+#include <QQmlEngine>
20+#include <QDebug>
21+
22+Q_LOGGING_CATEGORY(UNITY_APPMENU, "unity.appmenu", QtDebugMsg)
23+
24+#define DEBUG_MSG qCDebug(UNITY_APPMENU).nospace().noquote() << "ApplicationMenuRegistry::" << __func__
25+#define WARNING_MSG qCWarning(UNITY_APPMENU).nospace().noquote() << "ApplicationMenuRegistry::" << __func__
26+
27+ApplicationMenuRegistry::ApplicationMenuRegistry(QObject *parent)
28+ : QObject(parent)
29+{
30+}
31+
32+ApplicationMenuRegistry::~ApplicationMenuRegistry()
33+{
34+ qDeleteAll(m_appMenus);
35+ m_appMenus.clear();
36+
37+ qDeleteAll(m_surfaceMenus);
38+ m_surfaceMenus.clear();
39+}
40+
41+void ApplicationMenuRegistry::RegisterAppMenu(pid_t processId,
42+ const QDBusObjectPath &menuObjectPath,
43+ const QDBusObjectPath &actionObjectPath,
44+ const QString &service)
45+{
46+ DEBUG_MSG << "(pid=" << processId
47+ << ", menuPath=" << menuObjectPath.path()
48+ << ", actionPath=" << actionObjectPath.path()
49+ << ", service=" << service;
50+
51+ auto i = m_appMenus.find(processId);
52+ while (i != m_appMenus.end() && i.key() == processId) {
53+ if (i.value()->m_menuPath == menuObjectPath.path().toUtf8()) {
54+ WARNING_MSG << "Already have a menu for application (pid= " << processId
55+ << ", service=" << service
56+ << ", menuPath=" << menuObjectPath.path() << ")";
57+ return;
58+ }
59+ ++i;
60+ }
61+
62+ auto menu = new MenuServicePath(service, menuObjectPath, actionObjectPath);
63+ QQmlEngine::setObjectOwnership(menu, QQmlEngine::CppOwnership);
64+
65+ m_appMenus.insert(processId, menu);
66+ Q_EMIT appMenuRegistered(processId);
67+}
68+
69+void ApplicationMenuRegistry::UnregisterAppMenu(pid_t processId, const QDBusObjectPath &menuObjectPath)
70+{
71+ DEBUG_MSG << "(pid=" << processId
72+ << ", menuPath=" << menuObjectPath.path();
73+
74+ auto i = m_appMenus.find(processId);
75+ while (i != m_appMenus.end() && i.key() == processId) {
76+ if (i.value()->m_menuPath == menuObjectPath.path().toUtf8()) {
77+ i.value()->deleteLater();
78+ m_appMenus.erase(i);
79+ Q_EMIT appMenuUnregistered(processId);
80+ break;
81+ }
82+ ++i;
83+ }
84+}
85+
86+void ApplicationMenuRegistry::RegisterSurfaceMenu(const QString &surfaceId,
87+ const QDBusObjectPath &menuObjectPath,
88+ const QDBusObjectPath &actionObjectPath,
89+ const QString &service)
90+{
91+ DEBUG_MSG << "(surfaceId=" << surfaceId
92+ << ", menuPath=" << menuObjectPath.path()
93+ << ", actionPath=" << actionObjectPath.path()
94+ << ", service=" << service;
95+
96+ auto i = m_surfaceMenus.find(surfaceId);
97+ while (i != m_surfaceMenus.end() && i.key() == surfaceId) {
98+ if (i.value()->m_menuPath == menuObjectPath.path().toUtf8()) {
99+ WARNING_MSG << "Already have a menu for surface (surfaceId= " << surfaceId
100+ << ", service=" << service
101+ << ", menuPath=" << menuObjectPath.path() << ")";
102+ return;
103+ }
104+ ++i;
105+ }
106+
107+ auto menu = new MenuServicePath(service, menuObjectPath, actionObjectPath);
108+ QQmlEngine::setObjectOwnership(menu, QQmlEngine::CppOwnership);
109+
110+ m_surfaceMenus.insert(surfaceId, menu);
111+ Q_EMIT surfaceMenuRegistered(surfaceId);
112+}
113+
114+void ApplicationMenuRegistry::UnregisterSurfaceMenu(const QString &surfaceId, const QDBusObjectPath &menuObjectPath)
115+{
116+ DEBUG_MSG << "(surfaceId=" << surfaceId
117+ << ", menuPath=" << menuObjectPath.path();
118+
119+ auto i = m_surfaceMenus.find(surfaceId);
120+ while (i != m_surfaceMenus.end() && i.key() == surfaceId) {
121+ if (i.value()->m_menuPath == menuObjectPath.path().toUtf8()) {
122+ i.value()->deleteLater();
123+ m_surfaceMenus.erase(i);
124+ Q_EMIT surfaceMenuUnregistered(surfaceId);
125+ break;
126+ }
127+ ++i;
128+ }
129+}
130+
131+QList<QObject*> ApplicationMenuRegistry::getMenusForSurface(const QString &surfaceId) const
132+{
133+ QList<QObject*> list;
134+
135+ auto i = m_surfaceMenus.find(surfaceId);
136+ while (i != m_surfaceMenus.constEnd() && i.key() == surfaceId) {
137+ list << i.value();
138+ ++i;
139+ }
140+ return list;
141+}
plugins/Unity/ApplicationMenu/applicationmenuregistry.hnew file+83
@@ -0,0 +1,83 @@
1+/*
2+ * Copyright (C) 2016 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef APPLICATIONMENUREGISTRY_H
18+#define APPLICATIONMENUREGISTRY_H
19+
20+#include <QObject>
21+#include <QDBusContext>
22+#include <QDBusObjectPath>
23+#include <QtQml>
24+
25+Q_DECLARE_LOGGING_CATEGORY(UNITY_APPMENU)
26+
27+class MenuServicePath : public QObject
28+{
29+ Q_OBJECT
30+ Q_PROPERTY(QByteArray service MEMBER m_service CONSTANT)
31+ Q_PROPERTY(QByteArray menuPath MEMBER m_menuPath CONSTANT)
32+ Q_PROPERTY(QByteArray actionPath MEMBER m_actionPath CONSTANT)
33+public:
34+ explicit MenuServicePath(const QString &service,
35+ const QDBusObjectPath &menuPath,
36+ const QDBusObjectPath &actionPath)
37+ : m_service(service.toUtf8())
38+ , m_menuPath(menuPath.path().toUtf8())
39+ , m_actionPath(actionPath.path().toUtf8())
40+ {}
41+
42+ const QByteArray m_service;
43+ const QByteArray m_menuPath;
44+ const QByteArray m_actionPath;
45+};
46+
47+class ApplicationMenuRegistry : public QObject
48+{
49+ Q_OBJECT
50+public:
51+ virtual ~ApplicationMenuRegistry();
52+
53+ // for qml
54+ Q_INVOKABLE QList<QObject*> getMenusForSurface(const QString &surfaceId) const;
55+
56+ // for dbus
57+ void RegisterAppMenu(pid_t processId,
58+ const QDBusObjectPath &menuObjectPath,
59+ const QDBusObjectPath &actionObjectPath,
60+ const QString &service);
61+ void UnregisterAppMenu(pid_t processId, const QDBusObjectPath &menuObjectPath);
62+
63+ void RegisterSurfaceMenu(const QString &surfaceId,
64+ const QDBusObjectPath &menuObjectPath,
65+ const QDBusObjectPath &actionObjectPath,
66+ const QString &service);
67+ void UnregisterSurfaceMenu(const QString &surfaceId, const QDBusObjectPath &menuObjectPath);
68+
69+Q_SIGNALS:
70+ void appMenuRegistered(uint processId);
71+ void appMenuUnregistered(uint processId);
72+
73+ void surfaceMenuRegistered(const QString& surfaceId);
74+ void surfaceMenuUnregistered(const QString& surfaceId);
75+
76+protected:
77+ explicit ApplicationMenuRegistry(QObject *parent = 0);
78+
79+ QMultiMap<pid_t, MenuServicePath*> m_appMenus;
80+ QMultiMap<QString, MenuServicePath*> m_surfaceMenus;
81+};
82+
83+#endif // APPLICATIONMENUREGISTRY_H
plugins/Unity/ApplicationMenu/com.ubuntu.MenuRegistrar.xmlnew file+83
@@ -0,0 +1,83 @@
1+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
2+<node xmlns:dox="http://www.ayatana.org/dbus/dox.dtd">
3+ <dox:d><![CDATA[
4+ @mainpage
5+
6+ An interface to register menus that are associated with a window in an application. The
7+ main interface is documented here: @ref com::ubuntu::MenuRegistrar.
8+
9+ The actual menus are transported using the gmenumodel protocol
10+ ]]></dox:d>
11+ <interface name="com.ubuntu.MenuRegistrar" xmlns:dox="http://www.ayatana.org/dbus/dox.dtd">
12+ <dox:d>
13+ An interface to register a menu from an application to be displayed in another
14+ window. This manages that association between processes and/or Mir surface IDs and the dbus
15+ address and object that provides the menus using the org.gtk.Menus interface.
16+ </dox:d>
17+ <method name="RegisterAppMenu">
18+ <dox:d><![CDATA[
19+ Associates a gmenumodel with an application
20+
21+ /note this method assumes that the connection from the caller is the DBus connection
22+ to use for the object. Applications that use multiple DBus connections will need to
23+ ensure this method is called with the same connection that implements the object.
24+ ]]></dox:d>
25+ <arg name="pid" type="u" direction="in">
26+ <dox:d>The process ID of the application for which the menu is associated</dox:d>
27+ </arg>
28+ <arg name="menuObjectPath" type="o" direction="in">
29+ <dox:d>The dbus path where the gmenumodel interface for the application menu has been exported</dox:d>
30+ </arg>
31+ <arg name="actionObjectPath" type="o" direction="in">
32+ <dox:d>The dbus path where the gactionmenu interface for the application menu actions has been exported</dox:d>
33+ </arg>
34+ <arg name="service" type="s" direction="in">
35+ <dox:d>The dbus conection name of the client application to be registered (e.g. :1.23 or org.example.service)</dox:d>
36+ </arg>
37+ </method>
38+ <method name="UnregisterAppMenu">
39+ <dox:d>
40+ A method to allow removing an application menu from the database.
41+ </dox:d>
42+ <arg name="pid" type="u" direction="in">
43+ <dox:d>The process id of the application</dox:d>
44+ </arg>
45+ <arg name="menuObjectPath" type="o" direction="in">
46+ <dox:d>The dbus path for the registered application menu to be unregistered</dox:d>
47+ </arg>
48+ </method>
49+
50+ <method name="RegisterSurfaceMenu">
51+ <dox:d><![CDATA[
52+ Associates a gmenumodel with a surface
53+
54+ /note this method assumes that the connection from the caller is the DBus connection
55+ to use for the object. Applications that use multiple DBus connections will need to
56+ ensure this method is called with the same connection that implements the object.
57+ ]]></dox:d>
58+ <arg name="surface" type="s" direction="in">
59+ <dox:d>The surface ID of the surface</dox:d>
60+ </arg>
61+ <arg name="menuObjectPath" type="o" direction="in">
62+ <dox:d>The dbus path where the gmenumodel interface for the surface menu has been exported</dox:d>
63+ </arg>
64+ <arg name="actionObjectPath" type="o" direction="in">
65+ <dox:d>The dbus path where the gactionmenu interface for the surface menu actions has been exported</dox:d>
66+ </arg>
67+ <arg name="service" type="s" direction="in">
68+ <dox:d>The dbus conection name of the client application to be registered (e.g. :1.23 or org.example.service)</dox:d>
69+ </arg>
70+ </method>
71+ <method name="UnregisterSurfaceMenu">
72+ <dox:d>
73+ A method to allow removing a surface menu from the database.
74+ </dox:d>
75+ <arg name="surfaceId" type="s" direction="in">
76+ <dox:d>The surface id of the surface</dox:d>
77+ </arg>
78+ <arg name="menuObjectPath" type="o" direction="in">
79+ <dox:d>The dbus path for the registered surface menu to be unregistered</dox:d>
80+ </arg>
81+ </method>
82+ </interface>
83+</node>
plugins/Unity/ApplicationMenu/dbusapplicationmenuregistry.cppnew file+44
@@ -0,0 +1,44 @@
1+/*
2+ * Copyright (C) 2016 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "dbusapplicationmenuregistry.h"
18+#include "menuregistraradaptor.h"
19+
20+DBusApplicationMenuRegistry::DBusApplicationMenuRegistry(QObject *parent)
21+ : ApplicationMenuRegistry(parent)
22+{
23+ new MenuRegistrarAdaptor(this);
24+
25+ QDBusConnection connection = QDBusConnection::sessionBus();
26+ if (!connection.registerObject("/com/ubuntu/MenuRegistrar", this)) {
27+ qCWarning(UNITY_APPMENU) << "Unable to register DBus object /com/ubuntu/MenuRegistrar";
28+ }
29+ if (!connection.registerService("com.ubuntu.MenuRegistrar")) {
30+ qCWarning(UNITY_APPMENU) << "Unable to register DBus service com.ubuntu.MenuRegistrar";
31+ }
32+}
33+
34+DBusApplicationMenuRegistry::~DBusApplicationMenuRegistry()
35+{
36+ QDBusConnection connection = QDBusConnection::sessionBus();
37+ connection.unregisterObject("/com/ubuntu/MenuRegistrar");
38+}
39+
40+ApplicationMenuRegistry *DBusApplicationMenuRegistry::instance()
41+{
42+ static ApplicationMenuRegistry* reg(new DBusApplicationMenuRegistry());
43+ return reg;
44+}
tests/mocks/LightDM/IntegratedLightDM/MockUsersModel.h → plugins/Unity/ApplicationMenu/dbusapplicationmenuregistry.hrenamed+11−16
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2014 Canonical, Ltd.
2+ * Copyright (C) 2016 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
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
5 * it under the terms of the GNU General Public License as published by
@@ -12,28 +12,23 @@
12 *
12 *
13 * You should have received a copy of the GNU General Public License
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/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− *
16 */
15 */
17
16
18−#ifndef MOCK_UNITY_USERSMODEL_H
17+#ifndef DBUSAPPLICATIONMENUREGISTRY_H
19−#define MOCK_UNITY_USERSMODEL_H
18+#define DBUSAPPLICATIONMENUREGISTRY_H
20
19
21−#include <UsersModel.h>
20+#include "applicationmenuregistry.h"
22
21
23−class MockUsersModel : public UsersModel
22+class DBusApplicationMenuRegistry : public ApplicationMenuRegistry,
23+ protected QDBusContext
24{
24{
25 Q_OBJECT
25 Q_OBJECT
26−
27− Q_PROPERTY(QString mockMode READ mockMode WRITE setMockMode NOTIFY mockModeChanged)
28−
29public:
26public:
30− explicit MockUsersModel(QObject* parent=0);
27+ ~DBusApplicationMenuRegistry();
31−
28+ static ApplicationMenuRegistry* instance();
32− QString mockMode() const;
33− void setMockMode(QString mockMode);
34
29
35−Q_SIGNALS:
30+protected:
36− void mockModeChanged(QString mode);
31+ explicit DBusApplicationMenuRegistry(QObject *parent = 0);
37};
32};
38
33
39−#endif // MOCK_UNITY_USERSMODEL_H
34+#endif // DBUSAPPLICATIONMENUREGISTRY_H
plugins/Unity/ApplicationMenu/plugin.cppnew file+42
@@ -0,0 +1,42 @@
1+/*
2+ * Copyright (C) 2016 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "plugin.h"
18+#include "dbusapplicationmenuregistry.h"
19+
20+#include <QtQml>
21+
22+static QObject *menuRegistry(QQmlEngine *engine, QJSEngine *scriptEngine)
23+{
24+ Q_UNUSED(engine)
25+ Q_UNUSED(scriptEngine)
26+ return DBusApplicationMenuRegistry::instance();
27+}
28+
29+void ApplicationMenuPlugin::registerTypes(const char *uri)
30+{
31+ Q_ASSERT(uri == QLatin1String("Unity.ApplicationMenu"));
32+
33+ qmlRegisterUncreatableType<MenuServicePath>(uri, 0, 1, "MenuServicePath", "You cannot create a MenuServicePath");
34+ qmlRegisterSingletonType<DBusApplicationMenuRegistry>(uri, 0, 1, "ApplicationMenuRegistry", menuRegistry);
35+}
36+
37+void ApplicationMenuPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
38+{
39+ QQmlExtensionPlugin::initializeEngine(engine, uri);
40+
41+ menuRegistry(nullptr, nullptr);
42+}
plugins/Ubuntu/Payments/plugin.h → plugins/Unity/ApplicationMenu/plugin.hrenamed+6−5
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2014 Canonical, Ltd.
2+ * Copyright (C) 2016 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
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
5 * it under the terms of the GNU General Public License as published by
@@ -14,18 +14,19 @@
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
15 */
16
16
17−#ifndef PAYMENTS_PLUGIN_H
17+#ifndef APPLICATIONMENU_PLUGIN_H
18−#define PAYMENTS_PLUGIN_H
18+#define APPLICATIONMENU_PLUGIN_H
19
19
20#include <QQmlExtensionPlugin>
20#include <QQmlExtensionPlugin>
21
21
22−class BackendPlugin : public QQmlExtensionPlugin
22+class ApplicationMenuPlugin : public QQmlExtensionPlugin
23{
23{
24 Q_OBJECT
24 Q_OBJECT
25 Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
25 Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
26
26
27public:
27public:
28 void registerTypes(const char *uri) override;
28 void registerTypes(const char *uri) override;
29+ void initializeEngine(QQmlEngine *engine, const char *uri) override;
29};
30};
30
31
31−#endif // PAYMENTS_PLUGIN_H
32+#endif // APPLICATIONMENU_PLUGIN_H
plugins/Unity/ApplicationMenu/qmldirnew file+3
@@ -0,0 +1,3 @@
1+module Unity.ApplicationMenu
2+plugin ApplicationMenu-qml
3+typeinfo ApplicationMenu.qmltypes
plugins/Unity/CMakeLists.txt+1
@@ -1,3 +1,4 @@
1+add_subdirectory(ApplicationMenu)
1add_subdirectory(Connectivity)
2add_subdirectory(Connectivity)
2add_subdirectory(Indicators)
3add_subdirectory(Indicators)
3add_subdirectory(Launcher)
4add_subdirectory(Launcher)
plugins/Unity/DashCommunicator/CMakeLists.txt+1
@@ -1,5 +1,6 @@
1include_directories(
1include_directories(
2 ${CMAKE_CURRENT_SOURCE_DIR}
2 ${CMAKE_CURRENT_SOURCE_DIR}
3+ ${CMAKE_CURRENT_BINARY_DIR}
3 ${libunity8-private_SOURCE_DIR}
4 ${libunity8-private_SOURCE_DIR}
4)
5)
5
6
plugins/Unity/DashCommunicator/dashconnection.cpp+3
@@ -32,6 +32,7 @@
32 */
32 */
33class AsyncDBusInterface : public QDBusAbstractInterface
33class AsyncDBusInterface : public QDBusAbstractInterface
34{
34{
35+ Q_OBJECT
35public:
36public:
36 AsyncDBusInterface(const QString &service, const QString &path,
37 AsyncDBusInterface(const QString &service, const QString &path,
37 const QString &interface, const QDBusConnection &connection,
38 const QString &interface, const QDBusConnection &connection,
@@ -61,3 +62,5 @@ void DashConnection::setCurrentScope(int index, bool animate, bool isSwipe)
61 dbusInterface()->asyncCall(QStringLiteral("SetCurrentScope"), index, animate, isSwipe);
62 dbusInterface()->asyncCall(QStringLiteral("SetCurrentScope"), index, animate, isSwipe);
62 }
63 }
63}
64}
65+
66+#include "dashconnection.moc"
plugins/Unity/Indicators/CMakeLists.txt+3
@@ -11,6 +11,9 @@ include_directories(
11include_directories(
11include_directories(
12 SYSTEM
12 SYSTEM
13 ${GLIB_INCLUDE_DIRS}
13 ${GLIB_INCLUDE_DIRS}
14+)
15+include_directories(
16+ SYSTEM
14 ${GIO_INCLUDE_DIRS}
17 ${GIO_INCLUDE_DIRS}
15 ${QMENUMODEL_INCLUDE_DIRS}
18 ${QMENUMODEL_INCLUDE_DIRS}
16)
19)
plugins/Unity/Indicators/indicators.h+5−5
@@ -27,13 +27,13 @@ class UNITYINDICATORS_EXPORT ActionState : public QObject
27{
27{
28 Q_OBJECT
28 Q_OBJECT
29public:
29public:
30− Q_ENUMS(ActionStates)
31 enum ActionStates {
30 enum ActionStates {
32 Label = 0x00,
31 Label = 0x00,
33 IconSource = 0x01,
32 IconSource = 0x01,
34 AccessableName = 0x02,
33 AccessableName = 0x02,
35 Visible = 0x03,
34 Visible = 0x03,
36 };
35 };
36+ Q_ENUM(ActionStates)
37
37
38 ActionState(QObject*parent=0):QObject(parent) {}
38 ActionState(QObject*parent=0):QObject(parent) {}
39};
39};
@@ -42,11 +42,11 @@ class UNITYINDICATORS_EXPORT NetworkActionState : public QObject
42{
42{
43 Q_OBJECT
43 Q_OBJECT
44public:
44public:
45− Q_ENUMS(NetworkActionStates)
46 enum NetworkActionStates {
45 enum NetworkActionStates {
47 Connection = 0x01,
46 Connection = 0x01,
48 SignalStrength = 0x02,
47 SignalStrength = 0x02,
49 };
48 };
49+ Q_ENUM(NetworkActionStates)
50
50
51 NetworkActionState(QObject*parent=0):QObject(parent) {}
51 NetworkActionState(QObject*parent=0):QObject(parent) {}
52};
52};
@@ -55,13 +55,13 @@ class UNITYINDICATORS_EXPORT NetworkConnection : public QObject
55{
55{
56 Q_OBJECT
56 Q_OBJECT
57public:
57public:
58− Q_ENUMS(NetworkConnectionStates)
59 enum NetworkConnectionStates {
58 enum NetworkConnectionStates {
60 Initial = 0x00,
59 Initial = 0x00,
61 Activating = 0x01,
60 Activating = 0x01,
62 Activated = 0x02,
61 Activated = 0x02,
63 Deactivating = 0x03,
62 Deactivating = 0x03,
64 };
63 };
64+ Q_ENUM(NetworkConnectionStates)
65
65
66 NetworkConnection(QObject*parent=0):QObject(parent) {}
66 NetworkConnection(QObject*parent=0):QObject(parent) {}
67};
67};
@@ -70,12 +70,12 @@ class UNITYINDICATORS_EXPORT IndicatorsModelRole : public QObject
70{
70{
71 Q_OBJECT
71 Q_OBJECT
72public:
72public:
73− Q_ENUMS(Roles)
74 enum Roles {
73 enum Roles {
75 Identifier = 0,
74 Identifier = 0,
76 Position,
75 Position,
77 IndicatorProperties
76 IndicatorProperties
78 };
77 };
78+ Q_ENUM(Roles)
79
79
80 IndicatorsModelRole(QObject*parent=0):QObject(parent) {}
80 IndicatorsModelRole(QObject*parent=0):QObject(parent) {}
81};
81};
@@ -84,7 +84,6 @@ class UNITYINDICATORS_EXPORT FlatMenuProxyModelRole : public QObject
84{
84{
85 Q_OBJECT
85 Q_OBJECT
86public:
86public:
87− Q_ENUMS(Roles)
88 enum Roles {
87 enum Roles {
89 Action = Qt::DisplayRole + 1,
88 Action = Qt::DisplayRole + 1,
90 Label,
89 Label,
@@ -93,6 +92,7 @@ public:
93 hasSection,
92 hasSection,
94 hasSubMenu
93 hasSubMenu
95 };
94 };
95+ Q_ENUM(Roles)
96
96
97 FlatMenuProxyModelRole(QObject*parent=0):QObject(parent) {}
97 FlatMenuProxyModelRole(QObject*parent=0):QObject(parent) {}
98};
98};
plugins/Unity/Indicators/indicatorsmanager.h−2
@@ -76,8 +76,6 @@ private:
76 QSharedPointer<QFileSystemWatcher> m_fsWatcher;
76 QSharedPointer<QFileSystemWatcher> m_fsWatcher;
77 bool m_loaded;
77 bool m_loaded;
78 QString m_profile;
78 QString m_profile;
79−
80− Platform m_platform;
81};
79};
82
80
83#endif // INDICATORS_MANAGER_H
81#endif // INDICATORS_MANAGER_H
plugins/Unity/Indicators/indicatorsmodel.h−1
@@ -32,7 +32,6 @@ class IndicatorsManager;
32class UNITYINDICATORS_EXPORT IndicatorsModel : public QAbstractListModel
32class UNITYINDICATORS_EXPORT IndicatorsModel : public QAbstractListModel
33{
33{
34 Q_OBJECT
34 Q_OBJECT
35− Q_ENUMS(Roles)
36 Q_PROPERTY(int count READ count NOTIFY countChanged)
35 Q_PROPERTY(int count READ count NOTIFY countChanged)
37 Q_PROPERTY(QString profile READ profile WRITE setProfile NOTIFY profileChanged)
36 Q_PROPERTY(QString profile READ profile WRITE setProfile NOTIFY profileChanged)
38
37
plugins/Unity/Indicators/sharedunitymenumodel.cpp+4
@@ -81,12 +81,16 @@ void SharedUnityMenuModel::initialize()
81 }
81 }
82 } else {
82 } else {
83 QSharedPointer<UnityMenuModel> model = UnityMenuModelCache::singleton()->model(m_menuObjectPath);
83 QSharedPointer<UnityMenuModel> model = UnityMenuModelCache::singleton()->model(m_menuObjectPath);
84+
84 if (model != m_model) {
85 if (model != m_model) {
85 if (model->busName() != m_busName) model->setBusName(m_busName);
86 if (model->busName() != m_busName) model->setBusName(m_busName);
86 if (model->actions() != m_actions) model->setActions(m_actions);
87 if (model->actions() != m_actions) model->setActions(m_actions);
87
88
88 m_model = model;
89 m_model = model;
89 Q_EMIT modelChanged();
90 Q_EMIT modelChanged();
91+ } else if (m_model) {
92+ if (m_model->busName() != m_busName) m_model->setBusName(m_busName);
93+ if (m_model->actions() != m_actions) m_model->setActions(m_actions);
90 }
94 }
91 }
95 }
92}
96}
plugins/Unity/InputInfo/qinputinfo.h+2−3
@@ -57,8 +57,6 @@ class QInputDeviceManager;
57class QInputDevice : public QObject
57class QInputDevice : public QObject
58{
58{
59 Q_OBJECT
59 Q_OBJECT
60− Q_ENUMS(InputType)
61− Q_FLAGS(InputType InputTypeFlags)
62 friend class QInputDeviceManagerPrivate;
60 friend class QInputDeviceManagerPrivate;
63
61
64public:
62public:
@@ -72,8 +70,9 @@ public:
72 Keyboard = 16,
70 Keyboard = 16,
73 Switch = 32
71 Switch = 32
74 };
72 };
75− Q_ENUMS(InputType)
73+ Q_FLAG(InputType)
76 Q_DECLARE_FLAGS(InputTypeFlags, InputType)
74 Q_DECLARE_FLAGS(InputTypeFlags, InputType)
75+ Q_FLAG(InputTypeFlags)
77
76
78 explicit QInputDevice(QObject *parent = 0);
77 explicit QInputDevice(QObject *parent = 0);
79 QString name() const;
78 QString name() const;
plugins/Unity/Launcher/CMakeLists.txt+5−1
@@ -1,4 +1,3 @@
1−pkg_check_modules(LAUNCHER_API REQUIRED unity-shell-launcher=10)
2pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
1pkg_check_modules(GSETTINGS_QT REQUIRED gsettings-qt)
3
2
4add_definitions(-DSM_BUSNAME=systemBus)
3add_definitions(-DSM_BUSNAME=systemBus)
@@ -25,13 +24,18 @@ set(QMLLAUNCHERPLUGIN_SRC
25 dbusinterface.cpp
24 dbusinterface.cpp
26 gsettings.cpp
25 gsettings.cpp
27 asadapter.cpp
26 asadapter.cpp
27+ appdrawermodel.cpp
28+ ualwrapper.cpp
28 ${CMAKE_SOURCE_DIR}/plugins/AccountsService/AccountsServiceDBusAdaptor.cpp
29 ${CMAKE_SOURCE_DIR}/plugins/AccountsService/AccountsServiceDBusAdaptor.cpp
29 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationManagerInterface.h
30 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationManagerInterface.h
30 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
31 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
31 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceListInterface.h
32 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceListInterface.h
33+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceInterface.h
34+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/Mir.h
32 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherItemInterface.h
35 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherItemInterface.h
33 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherModelInterface.h
36 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherModelInterface.h
34 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/QuickListModelInterface.h
37 ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/QuickListModelInterface.h
38+ ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/AppDrawerModelInterface.h
35 )
39 )
36
40
37add_library(UnityLauncher-qml MODULE
41add_library(UnityLauncher-qml MODULE
plugins/Unity/Launcher/appdrawermodel.cppnew file+62
@@ -0,0 +1,62 @@
1+/*
2+ * Copyright (C) 2016 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "appdrawermodel.h"
18+#include "ualwrapper.h"
19+
20+#include <QDebug>
21+#include <QDateTime>
22+
23+AppDrawerModel::AppDrawerModel(QObject *parent):
24+ AppDrawerModelInterface(parent)
25+{
26+ Q_FOREACH (const QString &appId, UalWrapper::installedApps()) {
27+ UalWrapper::AppInfo info = UalWrapper::getApplicationInfo(appId);
28+ if (!info.valid) {
29+ qWarning() << "Failed to get app info for app" << appId;
30+ continue;
31+ }
32+ m_list.append(new LauncherItem(appId, info.name, info.icon, this));
33+ m_list.last()->setKeywords(info.keywords);
34+ }
35+ qsrand(QDateTime::currentMSecsSinceEpoch() / 100);
36+}
37+
38+int AppDrawerModel::rowCount(const QModelIndex &parent) const
39+{
40+ Q_UNUSED(parent)
41+ return m_list.count();
42+}
43+
44+QVariant AppDrawerModel::data(const QModelIndex &index, int role) const
45+{
46+ switch (role) {
47+ case RoleAppId:
48+ return m_list.at(index.row())->appId();
49+ case RoleName:
50+ return m_list.at(index.row())->name();
51+ case RoleIcon:
52+ return m_list.at(index.row())->icon();
53+ case RoleKeywords:
54+ return m_list.at(index.row())->keywords();
55+ case RoleUsage:
56+ // FIXME: u-a-l needs to provide API for usage stats.
57+ // don't forget to drop the qsrand() call in the ctor when dropping this.
58+ return qrand();
59+ }
60+
61+ return QVariant();
62+}
plugins/Ubuntu/SystemImage/plugin.h → plugins/Unity/Launcher/appdrawermodel.hrenamed+12−10
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2014 Canonical, Ltd.
2+ * Copyright (C) 2016 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
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
5 * it under the terms of the GNU General Public License as published by
@@ -14,18 +14,20 @@
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
15 */
16
16
17−#ifndef SYSTEMIMAGE_PLUGIN_H
18−#define SYSTEMIMAGE_PLUGIN_H
19
17
20−#include <QQmlExtensionPlugin>
18+#include <unity/shell/launcher/AppDrawerModelInterface.h>
21
19
22−class BackendPlugin : public QQmlExtensionPlugin
20+#include "launcheritem.h"
21+
22+class AppDrawerModel: public AppDrawerModelInterface
23{
23{
24 Q_OBJECT
24 Q_OBJECT
25− Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
26−
27public:
25public:
28− void registerTypes(const char *uri) override;
26+ AppDrawerModel(QObject* parent = nullptr);
29−};
30
27
31−#endif // SYSTEMIMAGE_PLUGIN_H
28+ int rowCount(const QModelIndex &parent) const override;
29+ QVariant data(const QModelIndex &index, int role) const override;
30+
31+private:
32+ QList<LauncherItem*> m_list;
33+};
plugins/Unity/Launcher/launcheritem.cpp+43−6
@@ -35,7 +35,6 @@ LauncherItem::LauncherItem(const QString &appId, const QString &name, const QStr
35 m_countVisible(false),
35 m_countVisible(false),
36 m_focused(false),
36 m_focused(false),
37 m_alerting(false),
37 m_alerting(false),
38− m_surfaceCount(0),
39 m_quickList(new QuickListModel(this))
38 m_quickList(new QuickListModel(this))
40{
39{
41 Q_ASSERT(parent != nullptr);
40 Q_ASSERT(parent != nullptr);
@@ -48,11 +47,13 @@ LauncherItem::LauncherItem(const QString &appId, const QString &name, const QStr
48 QuickListEntry pinningAction;
47 QuickListEntry pinningAction;
49 pinningAction.setActionId(QStringLiteral("pin_item"));
48 pinningAction.setActionId(QStringLiteral("pin_item"));
50 pinningAction.setText(gettext("Pin shortcut"));
49 pinningAction.setText(gettext("Pin shortcut"));
50+ pinningAction.setIsPrivate(true);
51 m_quickList->appendAction(pinningAction);
51 m_quickList->appendAction(pinningAction);
52
52
53 m_quitAction.setActionId(QStringLiteral("stop_item"));
53 m_quitAction.setActionId(QStringLiteral("stop_item"));
54 m_quitAction.setIcon(QStringLiteral("application-exit"));
54 m_quitAction.setIcon(QStringLiteral("application-exit"));
55 m_quitAction.setText(gettext("Quit"));
55 m_quitAction.setText(gettext("Quit"));
56+ m_quitAction.setIsPrivate(true);
56}
57}
57
58
58QString LauncherItem::appId() const
59QString LauncherItem::appId() const
@@ -90,6 +91,19 @@ void LauncherItem::setIcon(const QString &icon)
90 }
91 }
91}
92}
92
93
94+QStringList LauncherItem::keywords() const
95+{
96+ return m_keywords;
97+}
98+
99+void LauncherItem::setKeywords(const QStringList &keywords)
100+{
101+ if (m_keywords != keywords) {
102+ m_keywords = keywords;
103+ Q_EMIT keywordsChanged(keywords);
104+ }
105+}
106+
93bool LauncherItem::pinned() const
107bool LauncherItem::pinned() const
94{
108{
95 return m_pinned;
109 return m_pinned;
@@ -107,6 +121,7 @@ void LauncherItem::setPinned(bool pinned)
107 QuickListEntry entry;
121 QuickListEntry entry;
108 entry.setActionId(QStringLiteral("pin_item"));
122 entry.setActionId(QStringLiteral("pin_item"));
109 entry.setText(pinned ? gettext("Unpin shortcut") : gettext("Pin shortcut"));
123 entry.setText(pinned ? gettext("Unpin shortcut") : gettext("Pin shortcut"));
124+ entry.setIsPrivate(true);
110 m_quickList->updateAction(entry);
125 m_quickList->updateAction(entry);
111}
126}
112
127
@@ -208,14 +223,36 @@ void LauncherItem::setAlerting(bool alerting)
208
223
209int LauncherItem::surfaceCount() const
224int LauncherItem::surfaceCount() const
210{
225{
211− return m_surfaceCount;
226+ return m_surfaces.count();
212}
227}
213
228
214−void LauncherItem::setSurfaceCount(int surfaceCount)
229+void LauncherItem::setSurfaces(const QList<QPair<QString, QString> > &surfaces)
215{
230{
216− if (m_surfaceCount != surfaceCount) {
231+ if (m_surfaces != surfaces) {
217− m_surfaceCount = surfaceCount;
232+ m_surfaces = surfaces;
233+
234+ QList<QuickListEntry> removedEntries;
235+ for (int i = 0; i < m_quickList->rowCount(); ++i) {
236+ QuickListEntry entry = m_quickList->get(i);
237+ if (entry.actionId().startsWith(QStringLiteral("surface_"))) {
238+ removedEntries.append(entry);
239+ }
240+ }
241+ Q_FOREACH (const QuickListEntry &entry, removedEntries) {
242+ m_quickList->removeAction(entry);
243+ }
244+ for (int i = 0; i < surfaces.count(); ++i) {
245+ QuickListEntry entry;
246+ entry.setActionId(QStringLiteral("surface_") + surfaces.at(i).first);
247+ entry.setText(surfaces.at(i).second);
248+ entry.setIsPrivate(true);
249+ if (i == surfaces.count() - 1) {
250+ entry.setHasSeparator(true);
251+ }
252+ m_quickList->insertAction(entry, i + 1);
253+ }
254+
218− Q_EMIT surfaceCountChanged(surfaceCount);
255+ Q_EMIT surfaceCountChanged(m_surfaces.count());
219 }
256 }
220}
257}
221
258
plugins/Unity/Launcher/launcheritem.h+7−2
@@ -23,6 +23,7 @@
23#include "quicklistmodel.h"
23#include "quicklistmodel.h"
24
24
25#include <unity/shell/launcher/LauncherItemInterface.h>
25#include <unity/shell/launcher/LauncherItemInterface.h>
26+#include <unity/shell/application/MirSurfaceInterface.h>
26
27
27class QuickListModel;
28class QuickListModel;
28
29
@@ -37,6 +38,7 @@ public:
37 QString appId() const override;
38 QString appId() const override;
38 QString name() const override;
39 QString name() const override;
39 QString icon() const override;
40 QString icon() const override;
41+ QStringList keywords() const override;
40 bool pinned() const override;
42 bool pinned() const override;
41 bool running() const override;
43 bool running() const override;
42 bool recent() const override;
44 bool recent() const override;
@@ -52,6 +54,7 @@ public:
52private:
54private:
53 void setName(const QString &name);
55 void setName(const QString &name);
54 void setIcon(const QString &icon);
56 void setIcon(const QString &icon);
57+ void setKeywords(const QStringList &keywords);
55 void setPinned(bool pinned);
58 void setPinned(bool pinned);
56 void setRunning(bool running);
59 void setRunning(bool running);
57 void setRecent(bool recent);
60 void setRecent(bool recent);
@@ -60,12 +63,13 @@ private:
60 void setCountVisible(bool countVisible);
63 void setCountVisible(bool countVisible);
61 void setFocused(bool focused);
64 void setFocused(bool focused);
62 void setAlerting(bool alerting);
65 void setAlerting(bool alerting);
63− void setSurfaceCount(int surfaceCount);
66+ void setSurfaces(const QList<QPair<QString, QString >> &surfaces);
64
67
65private:
68private:
66 QString m_appId;
69 QString m_appId;
67 QString m_name;
70 QString m_name;
68 QString m_icon;
71 QString m_icon;
72+ QStringList m_keywords;
69 bool m_pinned;
73 bool m_pinned;
70 bool m_running;
74 bool m_running;
71 bool m_recent;
75 bool m_recent;
@@ -74,11 +78,12 @@ private:
74 bool m_countVisible;
78 bool m_countVisible;
75 bool m_focused;
79 bool m_focused;
76 bool m_alerting;
80 bool m_alerting;
77− int m_surfaceCount;
81+ QList<QPair<QString, QString> > m_surfaces;
78 QuickListModel *m_quickList;
82 QuickListModel *m_quickList;
79 QuickListEntry m_quitAction;
83 QuickListEntry m_quitAction;
80
84
81 friend class LauncherModel;
85 friend class LauncherModel;
86+ friend class AppDrawerModel;
82};
87};
83
88
84#endif // LAUNCHERITEM_H
89#endif // LAUNCHERITEM_H
plugins/Unity/Launcher/launchermodel.cpp+56−52
@@ -19,18 +19,15 @@
19#include "gsettings.h"
19#include "gsettings.h"
20#include "dbusinterface.h"
20#include "dbusinterface.h"
21#include "asadapter.h"
21#include "asadapter.h"
22+#include "ualwrapper.h"
22
23
23−#include <ubuntu-app-launch/appid.h>
24−#include <ubuntu-app-launch/application.h>
25−#include <ubuntu-app-launch/registry.h>
26#include <unity/shell/application/ApplicationInfoInterface.h>
24#include <unity/shell/application/ApplicationInfoInterface.h>
27#include <unity/shell/application/MirSurfaceListInterface.h>
25#include <unity/shell/application/MirSurfaceListInterface.h>
26+#include <unity/shell/application/MirSurfaceInterface.h>
28
27
29#include <QDesktopServices>
28#include <QDesktopServices>
30#include <QDebug>
29#include <QDebug>
31
30
32−namespace ual = ubuntu::app_launch;
33−
34using namespace unity::shell::application;
31using namespace unity::shell::application;
35
32
36LauncherModel::LauncherModel(QObject *parent):
33LauncherModel::LauncherModel(QObject *parent):
@@ -38,8 +35,7 @@ LauncherModel::LauncherModel(QObject *parent):
38 m_settings(new GSettings(this)),
35 m_settings(new GSettings(this)),
39 m_dbusIface(new DBusInterface(this)),
36 m_dbusIface(new DBusInterface(this)),
40 m_asAdapter(new ASAdapter()),
37 m_asAdapter(new ASAdapter()),
41− m_appManager(nullptr),
38+ m_appManager(nullptr)
42− m_ualRegistry(std::make_shared<ual::Registry>())
43{
39{
44 connect(m_dbusIface, &DBusInterface::countChanged, this, &LauncherModel::countChanged);
40 connect(m_dbusIface, &DBusInterface::countChanged, this, &LauncherModel::countChanged);
45 connect(m_dbusIface, &DBusInterface::countVisibleChanged, this, &LauncherModel::countVisibleChanged);
41 connect(m_dbusIface, &DBusInterface::countVisibleChanged, this, &LauncherModel::countVisibleChanged);
@@ -159,7 +155,7 @@ void LauncherModel::pin(const QString &appId, int index)
159 index = m_list.count();
155 index = m_list.count();
160 }
156 }
161
157
162− auto appInfo = getApplicationInfo(appId);
158+ UalWrapper::AppInfo appInfo = UalWrapper::getApplicationInfo(appId);
163 if (!appInfo.valid) {
159 if (!appInfo.valid) {
164 qWarning() << "Can't pin application, appId not found:" << appId;
160 qWarning() << "Can't pin application, appId not found:" << appId;
165 return;
161 return;
@@ -203,12 +199,26 @@ void LauncherModel::quickListActionInvoked(const QString &appId, int actionIndex
203 } else {
199 } else {
204 pin(appId);
200 pin(appId);
205 }
201 }
206− } else if (actionId == QLatin1String("launch_item")) {
202+ } else if (actionId == QStringLiteral("launch_item")) {
207 QDesktopServices::openUrl(getUrlForAppId(appId));
203 QDesktopServices::openUrl(getUrlForAppId(appId));
208− } else if (actionId == QLatin1String("stop_item")) { // Quit
204+ } else if (actionId == QStringLiteral("stop_item")) { // Quit
209 if (m_appManager) {
205 if (m_appManager) {
210 m_appManager->stopApplication(appId);
206 m_appManager->stopApplication(appId);
211 }
207 }
208+ } else if (actionId.startsWith(QStringLiteral("surface_"))){
209+ ApplicationInfoInterface *appInfo = m_appManager->findApplication(appId);
210+ if (appInfo) {
211+ for (int i = 0; i < appInfo->surfaceList()->count(); ++i) {
212+ MirSurfaceInterface *iface = appInfo->surfaceList()->get(i);
213+ QString id = actionId;
214+ id.remove(QRegExp("^surface_"));
215+ if (id == iface->persistentId()) {
216+ iface->activate();
217+ }
218+ }
219+ } else {
220+ qWarning() << "App for" << appId << "not found in launcher. Cannot invoke quicklist action";
221+ }
212 // Nope, we don't know this action, let the backend forward it to the application
222 // Nope, we don't know this action, let the backend forward it to the application
213 } else {
223 } else {
214 // TODO: forward quicklist action to app, possibly via m_dbusIface
224 // TODO: forward quicklist action to app, possibly via m_dbusIface
@@ -219,7 +229,6 @@ void LauncherModel::quickListActionInvoked(const QString &appId, int actionIndex
219void LauncherModel::setUser(const QString &username)
229void LauncherModel::setUser(const QString &username)
220{
230{
221 Q_UNUSED(username)
231 Q_UNUSED(username)
222− qWarning() << "This backend doesn't support multiple users";
223}
232}
224
233
225QString LauncherModel::getUrlForAppId(const QString &appId) const
234QString LauncherModel::getUrlForAppId(const QString &appId) const
@@ -335,32 +344,6 @@ int LauncherModel::findApplication(const QString &appId)
335 return -1;
344 return -1;
336}
345}
337
346
338−LauncherModel::AppInfo LauncherModel::getApplicationInfo(const QString &appId)
339−{
340− AppInfo info;
341−
342− ual::AppID ualAppId = ual::AppID::find(m_ualRegistry, appId.toStdString());
343− if (ualAppId.empty()) {
344− return info;
345− }
346−
347− std::shared_ptr<ual::Application> ualApp;
348− try
349− {
350− ualApp = ual::Application::create(ualAppId, m_ualRegistry);
351− }
352− catch (std::runtime_error &e)
353− {
354− qWarning() << "Couldn't find application info for" << appId << "-" << e.what();
355− return info;
356− }
357−
358− info.valid = true;
359− info.name = QString::fromStdString(ualApp->info()->name());
360− info.icon = QString::fromStdString(ualApp->info()->iconPath());
361− return info;
362−}
363−
364void LauncherModel::progressChanged(const QString &appId, int progress)
347void LauncherModel::progressChanged(const QString &appId, int progress)
365{
348{
366 const int idx = findApplication(appId);
349 const int idx = findApplication(appId);
@@ -408,7 +391,7 @@ void LauncherModel::countVisibleChanged(const QString &appId, bool countVisible)
408 }
391 }
409 } else {
392 } else {
410 // Need to create a new LauncherItem and show the highlight
393 // Need to create a new LauncherItem and show the highlight
411− auto appInfo = getApplicationInfo(appId);
394+ UalWrapper::AppInfo appInfo = UalWrapper::getApplicationInfo(appId);
412 if (countVisible && appInfo.valid) {
395 if (countVisible && appInfo.valid) {
413 LauncherItem *item = new LauncherItem(appId,
396 LauncherItem *item = new LauncherItem(appId,
414 appInfo.name,
397 appInfo.name,
@@ -428,7 +411,7 @@ void LauncherModel::refresh()
428 // First walk through all the existing items and see if we need to remove something
411 // First walk through all the existing items and see if we need to remove something
429 QList<LauncherItem*> toBeRemoved;
412 QList<LauncherItem*> toBeRemoved;
430 Q_FOREACH (LauncherItem* item, m_list) {
413 Q_FOREACH (LauncherItem* item, m_list) {
431− auto appInfo = getApplicationInfo(item->appId());
414+ UalWrapper::AppInfo appInfo = UalWrapper::getApplicationInfo(item->appId());
432 if (!appInfo.valid) {
415 if (!appInfo.valid) {
433 // Application no longer available => drop it!
416 // Application no longer available => drop it!
434 toBeRemoved << item;
417 toBeRemoved << item;
@@ -480,7 +463,7 @@ void LauncherModel::refresh()
480 if (itemIndex == -1) {
463 if (itemIndex == -1) {
481 // Need to add it. Just add it into the addedIndex to keep same ordering as the list
464 // Need to add it. Just add it into the addedIndex to keep same ordering as the list
482 // in the settings.
465 // in the settings.
483− auto appInfo = getApplicationInfo(entry);
466+ UalWrapper::AppInfo appInfo = UalWrapper::getApplicationInfo(entry);
484 if (!appInfo.valid) {
467 if (!appInfo.valid) {
485 continue;
468 continue;
486 }
469 }
@@ -549,40 +532,61 @@ void LauncherModel::applicationAdded(const QModelIndex &parent, int row)
549 item->setRecent(true);
532 item->setRecent(true);
550 Q_EMIT dataChanged(index(itemIndex), index(itemIndex), {RoleRecent});
533 Q_EMIT dataChanged(index(itemIndex), index(itemIndex), {RoleRecent});
551 }
534 }
552− if (item->surfaceCount() != app->surfaceCount()) {
553− item->setSurfaceCount(app->surfaceCount());
554− Q_EMIT dataChanged(index(itemIndex), index(itemIndex), {RoleSurfaceCount});
555− }
556−
557 item->setRunning(true);
535 item->setRunning(true);
558 } else {
536 } else {
559 LauncherItem *item = new LauncherItem(app->appId(), app->name(), app->icon().toString(), this);
537 LauncherItem *item = new LauncherItem(app->appId(), app->name(), app->icon().toString(), this);
560 item->setRecent(true);
538 item->setRecent(true);
561 item->setRunning(true);
539 item->setRunning(true);
562 item->setFocused(app->focused());
540 item->setFocused(app->focused());
563− item->setSurfaceCount(app->surfaceCount());
564 beginInsertRows(QModelIndex(), m_list.count(), m_list.count());
541 beginInsertRows(QModelIndex(), m_list.count(), m_list.count());
565 m_list.append(item);
542 m_list.append(item);
566 endInsertRows();
543 endInsertRows();
567 }
544 }
568− connect(app, &ApplicationInfoInterface::surfaceCountChanged, this, &LauncherModel::applicationSurfaceCountChanged);
545+ connect(app, &ApplicationInfoInterface::surfaceCountChanged, this, &LauncherModel::updateSurfaceList);
569 m_asAdapter->syncItems(m_list);
546 m_asAdapter->syncItems(m_list);
570 Q_EMIT dataChanged(index(itemIndex), index(itemIndex), {RoleRunning});
547 Q_EMIT dataChanged(index(itemIndex), index(itemIndex), {RoleRunning});
571}
548}
572
549
573−void LauncherModel::applicationSurfaceCountChanged(int count)
550+void LauncherModel::updateSurfaceList()
574{
551{
575 ApplicationInfoInterface *app = static_cast<ApplicationInfoInterface*>(sender());
552 ApplicationInfoInterface *app = static_cast<ApplicationInfoInterface*>(sender());
553+ updateSurfaceListForApp(app);
554+}
555+
556+void LauncherModel::updateSurfaceListForSurface()
557+{
558+ MirSurfaceInterface *iface = static_cast<MirSurfaceInterface*>(sender());
559+ ApplicationInfoInterface* app = m_appManager->findApplication(iface->appId());
560+ if (!app) {
561+ return;
562+ }
563+ updateSurfaceListForApp(app);
564+}
565+
566+void LauncherModel::updateSurfaceListForApp(ApplicationInfoInterface* app)
567+{
576 int idx = findApplication(app->appId());
568 int idx = findApplication(app->appId());
577 if (idx < 0) {
569 if (idx < 0) {
578 qWarning() << "Received a surface count changed event from an app that's not in the Launcher model";
570 qWarning() << "Received a surface count changed event from an app that's not in the Launcher model";
579 return;
571 return;
580 }
572 }
581 LauncherItem *item = m_list.at(idx);
573 LauncherItem *item = m_list.at(idx);
582− if (item->surfaceCount() != count) {
574+ QList<QPair<QString, QString> > surfaces;
583− item->setSurfaceCount(count);
575+ for (int i = 0; i < app->surfaceList()->count(); ++i) {
584− Q_EMIT dataChanged(index(idx), index(idx), {RoleSurfaceCount});
576+ MirSurfaceInterface* iface = app->surfaceList()->get(i);
577+ if (iface->type() == Mir::NormalType || iface->type() == Mir::DialogType) {
578+ // Avoid duplicate connections, so let's just disconnect first to be sure
579+ disconnect(iface, &MirSurfaceInterface::nameChanged, this, &LauncherModel::updateSurfaceListForSurface);
580+ connect(iface, &MirSurfaceInterface::nameChanged, this, &LauncherModel::updateSurfaceListForSurface);
581+ QString name = iface->name();
582+ if (name.isEmpty()) {
583+ name = app->name();
584+ }
585+ surfaces.append({iface->persistentId(), name});
586+ }
585 }
587 }
588+ item->setSurfaces(surfaces);
589+ Q_EMIT dataChanged(index(idx), index(idx), {RoleSurfaceCount});
586}
590}
587
591
588void LauncherModel::applicationRemoved(const QModelIndex &parent, int row)
592void LauncherModel::applicationRemoved(const QModelIndex &parent, int row)
@@ -603,7 +607,7 @@ void LauncherModel::applicationRemoved(const QModelIndex &parent, int row)
603 return;
607 return;
604 }
608 }
605
609
606− disconnect(app, &ApplicationInfoInterface::surfaceCountChanged, this, &LauncherModel::applicationSurfaceCountChanged);
610+ disconnect(app, &ApplicationInfoInterface::surfaceCountChanged, this, &LauncherModel::updateSurfaceList);
607
611
608 LauncherItem * item = m_list.at(appIndex);
612 LauncherItem * item = m_list.at(appIndex);
609
613
plugins/Unity/Launcher/launchermodel.h+3−15
@@ -27,12 +27,6 @@ class GSettings;
27class DBusInterface;
27class DBusInterface;
28class ASAdapter;
28class ASAdapter;
29
29
30−namespace ubuntu {
31− namespace app_launch {
32− class Registry;
33− }
34−}
35−
36using namespace unity::shell::launcher;
30using namespace unity::shell::launcher;
37using namespace unity::shell::application;
31using namespace unity::shell::application;
38
32
@@ -73,13 +67,6 @@ private:
73
67
74 void unpin(const QString &appId);
68 void unpin(const QString &appId);
75
69
76− struct AppInfo {
77− bool valid = false;
78− QString name;
79− QString icon;
80− };
81− AppInfo getApplicationInfo(const QString &appId);
82−
83private Q_SLOTS:
70private Q_SLOTS:
84 void countChanged(const QString &appId, int count);
71 void countChanged(const QString &appId, int count);
85 void countVisibleChanged(const QString &appId, bool count);
72 void countVisibleChanged(const QString &appId, bool count);
@@ -88,7 +75,9 @@ private Q_SLOTS:
88 void applicationAdded(const QModelIndex &parent, int row);
75 void applicationAdded(const QModelIndex &parent, int row);
89 void applicationRemoved(const QModelIndex &parent, int row);
76 void applicationRemoved(const QModelIndex &parent, int row);
90 void focusedAppIdChanged();
77 void focusedAppIdChanged();
91− void applicationSurfaceCountChanged(int);
78+ void updateSurfaceList();
79+ void updateSurfaceListForApp(ApplicationInfoInterface *app);
80+ void updateSurfaceListForSurface();
92
81
93private:
82private:
94 QList<LauncherItem*> m_list;
83 QList<LauncherItem*> m_list;
@@ -98,7 +87,6 @@ private:
98 ASAdapter *m_asAdapter;
87 ASAdapter *m_asAdapter;
99
88
100 ApplicationManagerInterface *m_appManager;
89 ApplicationManagerInterface *m_appManager;
101− std::shared_ptr<ubuntu::app_launch::Registry> m_ualRegistry;
102
90
103 friend class LauncherModelTest;
91 friend class LauncherModelTest;
104};
92};
plugins/Unity/Launcher/plugin.cpp+2−1
@@ -26,7 +26,7 @@
26// local
26// local
27#include "launchermodel.h"
27#include "launchermodel.h"
28#include "launcheritem.h"
28#include "launcheritem.h"
29−
29+#include "appdrawermodel.h"
30
30
31using namespace unity::shell::launcher;
31using namespace unity::shell::launcher;
32
32
@@ -46,4 +46,5 @@ void UnityLauncherPlugin::registerTypes(const char *uri)
46 qmlRegisterSingletonType<LauncherModel>(uri, 0, 1, "LauncherModel", modelProvider);
46 qmlRegisterSingletonType<LauncherModel>(uri, 0, 1, "LauncherModel", modelProvider);
47 qmlRegisterUncreatableType<LauncherItem>(uri, 0, 1, "LauncherItem", QStringLiteral("Can't create new Launcher Items in QML. Get them from the LauncherModel."));
47 qmlRegisterUncreatableType<LauncherItem>(uri, 0, 1, "LauncherItem", QStringLiteral("Can't create new Launcher Items in QML. Get them from the LauncherModel."));
48 qmlRegisterUncreatableType<QuickListModel>(uri, 0, 1, "QuickListModel", QStringLiteral("Can't create a QuickListModel in QML. Get them from the LauncherItems."));
48 qmlRegisterUncreatableType<QuickListModel>(uri, 0, 1, "QuickListModel", QStringLiteral("Can't create a QuickListModel in QML. Get them from the LauncherItems."));
49+ qmlRegisterType<AppDrawerModel>(uri, 0, 1, "AppDrawerModel");
49}
50}
plugins/Unity/Launcher/quicklistentry.cpp+11
@@ -20,6 +20,7 @@
20
20
21QuickListEntry::QuickListEntry()
21QuickListEntry::QuickListEntry()
22 : m_hasSeparator(false)
22 : m_hasSeparator(false)
23+ , m_isPrivate(false)
23{
24{
24}
25}
25
26
@@ -72,3 +73,13 @@ bool QuickListEntry::operator==(const QuickListEntry &other)
72{
73{
73 return !other.actionId().isEmpty() && other.actionId() == m_actionId;
74 return !other.actionId().isEmpty() && other.actionId() == m_actionId;
74}
75}
76+
77+bool QuickListEntry::isPrivate() const
78+{
79+ return m_isPrivate;
80+}
81+
82+void QuickListEntry::setIsPrivate(bool isPrivate)
83+{
84+ m_isPrivate = isPrivate;
85+}
plugins/Unity/Launcher/quicklistentry.h+4
@@ -42,11 +42,15 @@ public:
42
42
43 bool operator==(const QuickListEntry & other);
43 bool operator==(const QuickListEntry & other);
44
44
45+ bool isPrivate() const;
46+ void setIsPrivate(bool isPrivate);
47+
45private:
48private:
46 QString m_actionId;
49 QString m_actionId;
47 QString m_text;
50 QString m_text;
48 QString m_icon;
51 QString m_icon;
49 bool m_hasSeparator;
52 bool m_hasSeparator;
53+ bool m_isPrivate;
50};
54};
51
55
52#endif // QUICKLISTENTRY
56#endif // QUICKLISTENTRY
plugins/Unity/Launcher/quicklistmodel.cpp+9
@@ -37,6 +37,13 @@ void QuickListModel::appendAction(const QuickListEntry &entry)
37 endInsertRows();
37 endInsertRows();
38}
38}
39
39
40+void QuickListModel::insertAction(const QuickListEntry &entry, int index)
41+{
42+ beginInsertRows(QModelIndex(), index, index);
43+ m_list.insert(index, entry);
44+ endInsertRows();
45+}
46+
40void QuickListModel::updateAction(const QuickListEntry &entry)
47void QuickListModel::updateAction(const QuickListEntry &entry)
41{
48{
42 for (int i = 0; i < m_list.count(); ++i) {
49 for (int i = 0; i < m_list.count(); ++i) {
@@ -81,6 +88,8 @@ QVariant QuickListModel::data(const QModelIndex &index, int role) const
81 return m_list.at(index.row()).clickable();
88 return m_list.at(index.row()).clickable();
82 case RoleHasSeparator:
89 case RoleHasSeparator:
83 return m_list.at(index.row()).hasSeparator();
90 return m_list.at(index.row()).hasSeparator();
91+ case RoleIsPrivate:
92+ return m_list.at(index.row()).isPrivate();
84 }
93 }
85 return QVariant();
94 return QVariant();
86}
95}
plugins/Unity/Launcher/quicklistmodel.h+1
@@ -36,6 +36,7 @@ public:
36 ~QuickListModel();
36 ~QuickListModel();
37
37
38 void appendAction(const QuickListEntry &entry);
38 void appendAction(const QuickListEntry &entry);
39+ void insertAction(const QuickListEntry &entry, int index);
39
40
40 /**
41 /**
41 * @brief Update an existing action
42 * @brief Update an existing action
plugins/Unity/Launcher/ualwrapper.cppnew file+73
@@ -0,0 +1,73 @@
1+/*
2+ * Copyright (C) 2016 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include <QDebug>
18+
19+#include "ualwrapper.h"
20+
21+#include <ubuntu-app-launch/registry.h>
22+using namespace ubuntu::app_launch;
23+
24+UalWrapper::UalWrapper(QObject *parent):
25+ QObject(parent)
26+{
27+
28+}
29+
30+QStringList UalWrapper::installedApps()
31+{
32+ QStringList appIds;
33+ try {
34+ for (const std::shared_ptr<Application> &app : Registry::installedApps()) {
35+ if (!app->appId().package.value().empty()) {
36+ appIds << QString::fromStdString(app->appId().package.value() + "_" + app->appId().appname.value());
37+ } else {
38+ appIds << QString::fromStdString(app->appId().appname);
39+ }
40+ }
41+ } catch (const std::runtime_error &e) {
42+ qWarning() << "ubuntu-all-launch threw an exception listing apps:" << e.what();
43+ }
44+
45+ return appIds;
46+}
47+
48+UalWrapper::AppInfo UalWrapper::getApplicationInfo(const QString &appId)
49+{
50+ AppInfo info;
51+
52+ try {
53+ AppID ualAppId = AppID::find(appId.toStdString());
54+ if (ualAppId.empty()) {
55+ qWarning() << "Empty ualAppId result for" << appId;
56+ return info;
57+ }
58+
59+ std::shared_ptr<Application> ualApp;
60+ ualApp = Application::create(ualAppId, Registry::getDefault());
61+
62+ info.name = QString::fromStdString(ualApp->info()->name());
63+ info.icon = QString::fromStdString(ualApp->info()->iconPath());
64+ for (const std::string &keyword : ualApp->info()->keywords().value()) {
65+ info.keywords << QString::fromStdString(keyword);
66+ }
67+ info.valid = true;
68+ } catch (const std::runtime_error &e) {
69+ qWarning() << "ubuntu-app-launch threw an exception getting app info for appId:" << appId << ":" << e.what();
70+ }
71+
72+ return info;
73+}
tests/mocks/LightDM/IntegratedLightDM/plugin.h → plugins/Unity/Launcher/ualwrapper.hrenamed+15−12
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2014, 2015 Canonical, Ltd.
2+ * Copyright (C) 2016 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
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
5 * it under the terms of the GNU General Public License as published by
@@ -14,19 +14,22 @@
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
15 */
16
16
17−#ifndef MOCK_LIGHTDM_PLUGIN_H
17+#include <QObject>
18−#define MOCK_LIGHTDM_PLUGIN_H
19
18
20−#include <QtQml/QQmlEngine>
19+class UalWrapper: public QObject
21−#include <QtQml/QQmlExtensionPlugin>
22−
23−class LightDMPlugin : public QQmlExtensionPlugin
24{
20{
25 Q_OBJECT
21 Q_OBJECT
26− Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
27−
28public:
22public:
29− void registerTypes(const char *uri) override;
23+ struct AppInfo {
24+ bool valid = false;
25+ QString name;
26+ QString icon;
27+ QStringList keywords;
30−};
28+ };
31
29
32−#endif
30+ UalWrapper(QObject* parent = nullptr);
31+
32+ static QStringList installedApps();
33+ static AppInfo getApplicationInfo(const QString &appId);
34+
35+};
plugins/Unity/Platform/platform.cpp+16−2
@@ -17,9 +17,11 @@
17#include "platform.h"
17#include "platform.h"
18
18
19#include <QDBusConnection>
19#include <QDBusConnection>
20+#include <QSet>
21+#include <QString>
20
22
21Platform::Platform(QObject *parent)
23Platform::Platform(QObject *parent)
22− : QObject(parent)
24+ : QObject(parent), m_isPC(true), m_isMultiSession(true)
23{
25{
24 QMetaObject::invokeMethod(this, "init");
26 QMetaObject::invokeMethod(this, "init");
25}
27}
@@ -31,8 +33,20 @@ void Platform::init()
31 QDBusInterface seatIface("org.freedesktop.login1", "/org/freedesktop/login1/seat/self", "org.freedesktop.login1.Seat",
33 QDBusInterface seatIface("org.freedesktop.login1", "/org/freedesktop/login1/seat/self", "org.freedesktop.login1.Seat",
32 QDBusConnection::systemBus(), this);
34 QDBusConnection::systemBus(), this);
33
35
36+ // From the source at https://cgit.freedesktop.org/systemd/systemd/tree/src/hostname/hostnamed.c#n130
37+ // "vm\0"
38+ // "container\0"
39+ // "desktop\0"
40+ // "laptop\0"
41+ // "server\0"
42+ // "tablet\0"
43+ // "handset\0"
44+ // "watch\0"
45+ // "embedded\0",
34 m_chassis = iface.property("Chassis").toString();
46 m_chassis = iface.property("Chassis").toString();
35− m_isPC = (m_chassis == "desktop" || m_chassis == "laptop" || m_chassis == "server");
47+
48+ // A PC is not a handset, tablet or watch.
49+ m_isPC = !QSet<QString>{"handset", "tablet", "watch"}.contains(m_chassis);
36 m_isMultiSession = seatIface.property("CanMultiSession").toBool() && seatIface.property("CanGraphical").toBool();
50 m_isMultiSession = seatIface.property("CanMultiSession").toBool() && seatIface.property("CanGraphical").toBool();
37}
51}
38
52
plugins/Unity/Session/dbusunitysessionservice.cpp+75−4
@@ -18,6 +18,7 @@
18#include "dbusunitysessionservice.h"
18#include "dbusunitysessionservice.h"
19
19
20// system
20// system
21+#include <grp.h>
21#include <sys/types.h>
22#include <sys/types.h>
22#include <unistd.h>
23#include <unistd.h>
23#include <pwd.h>
24#include <pwd.h>
@@ -211,6 +212,23 @@ public:
211 QDBusConnection::SM_BUSNAME().asyncCall(msg);
212 QDBusConnection::SM_BUSNAME().asyncCall(msg);
212 }
213 }
213
214
215+ bool isUserInGroup(const QString &user, const QString &groupName) const
216+ {
217+ auto group = getgrnam(groupName.toUtf8().data());
218+
219+ if (group && group->gr_mem)
220+ {
221+ for (int i = 0; group->gr_mem[i]; ++i)
222+ {
223+ if (g_strcmp0(group->gr_mem[i], user.toUtf8().data()) == 0) {
224+ return true;
225+ }
226+ }
227+ }
228+
229+ return false;
230+ }
231+
214private Q_SLOTS:
232private Q_SLOTS:
215 void onPropertiesChanged(const QString &iface, const QVariantMap &changedProps, const QStringList &invalidatedProps)
233 void onPropertiesChanged(const QString &iface, const QVariantMap &changedProps, const QStringList &invalidatedProps)
216 {
234 {
@@ -297,7 +315,13 @@ bool DBusUnitySessionService::CanShutdown() const
297
315
298bool DBusUnitySessionService::CanLock() const
316bool DBusUnitySessionService::CanLock() const
299{
317{
318+ auto user = UserName();
319+ if (user.startsWith(QStringLiteral("guest-")) ||
320+ d->isUserInGroup(user, QStringLiteral("nopasswdlogin"))) {
321+ return false;
322+ } else {
300− return true; // FIXME
323+ return true;
324+ }
301}
325}
302
326
303QString DBusUnitySessionService::UserName() const
327QString DBusUnitySessionService::UserName() const
@@ -335,8 +359,10 @@ void DBusUnitySessionService::PromptLock()
335 // Prompt as in quick. No locking animation needed. Usually used by
359 // Prompt as in quick. No locking animation needed. Usually used by
336 // indicator-session in combination with a switch to greeter or other
360 // indicator-session in combination with a switch to greeter or other
337 // user session.
361 // user session.
362+ if (CanLock()) {
338− Q_EMIT LockRequested();
363+ Q_EMIT LockRequested();
339− Q_EMIT lockRequested();
364+ Q_EMIT lockRequested();
365+ }
340}
366}
341
367
342void DBusUnitySessionService::Lock()
368void DBusUnitySessionService::Lock()
@@ -468,11 +494,56 @@ void performAsyncUnityCall(const QString &method)
468
494
469
495
470DBusGnomeSessionManagerWrapper::DBusGnomeSessionManagerWrapper()
496DBusGnomeSessionManagerWrapper::DBusGnomeSessionManagerWrapper()
497+ : UnityDBusObject(QStringLiteral("/org/gnome/SessionManager"), QStringLiteral("org.gnome.SessionManager"))
498+{
499+}
500+
501+void DBusGnomeSessionManagerWrapper::Logout(quint32 mode)
502+{
503+ auto call = QStringLiteral("RequestLogout");
504+
505+ // These modes are documented as bitwise flags, not an enum, even though
506+ // they only ever seem to be used as enums.
507+
508+ if (mode & 1) // without dialog
509+ call = QStringLiteral("Logout");
510+ if (mode & 2) // without dialog, ignoring inhibitors (which we don't have)
511+ call = QStringLiteral("Logout");
512+
513+ performAsyncUnityCall(call);
514+}
515+
516+void DBusGnomeSessionManagerWrapper::Reboot()
517+{
518+ // GNOME's Reboot means with dialog (they use Request differently than us).
519+ performAsyncUnityCall(QStringLiteral("RequestReboot"));
520+}
521+
522+void DBusGnomeSessionManagerWrapper::RequestReboot()
523+{
524+ // GNOME's RequestReboot means no dialog (they use Request differently than us).
525+ performAsyncUnityCall(QStringLiteral("Reboot"));
526+}
527+
528+void DBusGnomeSessionManagerWrapper::RequestShutdown()
529+{
530+ // GNOME's RequestShutdown means no dialog (they use Request differently than us).
531+ performAsyncUnityCall(QStringLiteral("Shutdown"));
532+}
533+
534+void DBusGnomeSessionManagerWrapper::Shutdown()
535+{
536+ // GNOME's Shutdown means with dialog (they use Request differently than us).
537+ performAsyncUnityCall(QStringLiteral("RequestShutdown"));
538+}
539+
540+
541+DBusGnomeSessionManagerDialogWrapper::DBusGnomeSessionManagerDialogWrapper()
471 : UnityDBusObject(QStringLiteral("/org/gnome/SessionManager/EndSessionDialog"), QStringLiteral("com.canonical.Unity"))
542 : UnityDBusObject(QStringLiteral("/org/gnome/SessionManager/EndSessionDialog"), QStringLiteral("com.canonical.Unity"))
472{
543{
473}
544}
474
545
475−void DBusGnomeSessionManagerWrapper::Open(const unsigned type, const unsigned arg_1, const unsigned max_wait, const QList<QDBusObjectPath> &inhibitors)
546+void DBusGnomeSessionManagerDialogWrapper::Open(const unsigned type, const unsigned arg_1, const unsigned max_wait, const QList<QDBusObjectPath> &inhibitors)
476{
547{
477 Q_UNUSED(arg_1);
548 Q_UNUSED(arg_1);
478 Q_UNUSED(max_wait);
549 Q_UNUSED(max_wait);
plugins/Unity/Session/dbusunitysessionservice.h+18−4
@@ -270,17 +270,31 @@ private:
270class DBusGnomeSessionManagerWrapper : public UnityDBusObject
270class DBusGnomeSessionManagerWrapper : public UnityDBusObject
271{
271{
272 Q_OBJECT
272 Q_OBJECT
273− Q_CLASSINFO("D-Bus Interface", "org.gnome.SessionManager.EndSessionDialog")
273+ Q_CLASSINFO("D-Bus Interface", "org.gnome.SessionManager")
274
274
275public:
275public:
276 DBusGnomeSessionManagerWrapper();
276 DBusGnomeSessionManagerWrapper();
277 ~DBusGnomeSessionManagerWrapper() = default;
277 ~DBusGnomeSessionManagerWrapper() = default;
278
278
279public Q_SLOTS:
279public Q_SLOTS:
280− Q_SCRIPTABLE void Open(const unsigned int type, const unsigned int arg_1, const unsigned int max_wait, const QList<QDBusObjectPath> &inhibitors);
280+ Q_SCRIPTABLE void Logout(quint32 mode);
281+ Q_SCRIPTABLE void Reboot();
282+ Q_SCRIPTABLE void RequestReboot();
283+ Q_SCRIPTABLE void RequestShutdown();
284+ Q_SCRIPTABLE void Shutdown();
285+};
281
286
282−private:
287+class DBusGnomeSessionManagerDialogWrapper : public UnityDBusObject
283− void performAsyncCall(const QString &method);
288+{
289+ Q_OBJECT
290+ Q_CLASSINFO("D-Bus Interface", "org.gnome.SessionManager.EndSessionDialog")
291+
292+public:
293+ DBusGnomeSessionManagerDialogWrapper();
294+ ~DBusGnomeSessionManagerDialogWrapper() = default;
295+
296+public Q_SLOTS:
297+ Q_SCRIPTABLE void Open(const unsigned int type, const unsigned int arg_1, const unsigned int max_wait, const QList<QDBusObjectPath> &inhibitors);
284};
298};
285
299
286class DBusGnomeScreensaverWrapper: public UnityDBusObject
300class DBusGnomeScreensaverWrapper: public UnityDBusObject
plugins/Unity/Session/plugin.cpp+1
@@ -26,6 +26,7 @@
26
26
27static QObject *dbusunitysessionservice_provider(QQmlEngine */*engine*/, QJSEngine */*jsEngine*/)
27static QObject *dbusunitysessionservice_provider(QQmlEngine */*engine*/, QJSEngine */*jsEngine*/)
28{
28{
29+ new DBusGnomeSessionManagerDialogWrapper();
29 new DBusGnomeSessionManagerWrapper();
30 new DBusGnomeSessionManagerWrapper();
30 new DBusGnomeScreensaverWrapper();
31 new DBusGnomeScreensaverWrapper();
31 new DBusScreensaverWrapper();
32 new DBusScreensaverWrapper();
plugins/Utils/CMakeLists.txt+7
@@ -15,6 +15,10 @@ set(QMLPLUGIN_SRC
15 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationManagerInterface.h
15 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationManagerInterface.h
16 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
16 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
17 applicationsfiltermodel.cpp
17 applicationsfiltermodel.cpp
18+ ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/AppDrawerModelInterface.h
19+ ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherItemInterface.h
20+ ${LAUNCHER_API_INCLUDEDIR}/unity/shell/launcher/LauncherModelInterface.h
21+ appdrawerproxymodel.cpp
18 constants.cpp
22 constants.cpp
19 WindowInputMonitor.cpp
23 WindowInputMonitor.cpp
20 inputwatcher.cpp
24 inputwatcher.cpp
@@ -30,6 +34,9 @@ set(QMLPLUGIN_SRC
30 deviceconfigparser.cpp
34 deviceconfigparser.cpp
31 globalfunctions.cpp
35 globalfunctions.cpp
32 URLDispatcher.cpp
36 URLDispatcher.cpp
37+ tabfocusfence.cpp
38+ expressionfiltermodel.cpp
39+ quicklistproxymodel.cpp
33 plugin.cpp
40 plugin.cpp
34 )
41 )
35
42
plugins/Utils/ElapsedTimer.h+1−1
@@ -41,7 +41,7 @@ class ElapsedTimer : public AbstractElapsedTimer {
41public:
41public:
42 void start() override { m_timer.start(); }
42 void start() override { m_timer.start(); }
43 qint64 msecsSinceReference() const override { return m_timer.msecsSinceReference(); }
43 qint64 msecsSinceReference() const override { return m_timer.msecsSinceReference(); }
44− qint64 elapsed() const override { return m_timer.elapsed(); }
44+ qint64 elapsed() const override { return m_timer.isValid() ? m_timer.elapsed() : 0; }
45private:
45private:
46 QElapsedTimer m_timer;
46 QElapsedTimer m_timer;
47};
47};
plugins/Utils/Timer.cpp+5−2
@@ -37,13 +37,16 @@ void Timer::setInterval(int msecs)
37void Timer::start()
37void Timer::start()
38{
38{
39 m_timer.start();
39 m_timer.start();
40− AbstractTimer::start();
41}
40}
42
41
43void Timer::stop()
42void Timer::stop()
44{
43{
45 m_timer.stop();
44 m_timer.stop();
46− AbstractTimer::stop();
45+}
46+
47+bool Timer::isRunning() const
48+{
49+ return m_timer.isActive();
47}
50}
48
51
49bool Timer::isSingleShot() const
52bool Timer::isSingleShot() const
plugins/Utils/Timer.h+5−6
@@ -30,18 +30,16 @@ class AbstractTimer : public QObject
30{
30{
31 Q_OBJECT
31 Q_OBJECT
32public:
32public:
33− AbstractTimer(QObject *parent) : QObject(parent), m_isRunning(false) {}
33+ AbstractTimer(QObject *parent) : QObject(parent) {}
34 virtual int interval() const = 0;
34 virtual int interval() const = 0;
35 virtual void setInterval(int msecs) = 0;
35 virtual void setInterval(int msecs) = 0;
36− virtual void start() { m_isRunning = true; }
36+ virtual void start() = 0;
37− virtual void stop() { m_isRunning = false; }
37+ virtual void stop() = 0;
38− bool isRunning() const { return m_isRunning; }
38+ virtual bool isRunning() const = 0;
39 virtual bool isSingleShot() const = 0;
39 virtual bool isSingleShot() const = 0;
40 virtual void setSingleShot(bool value) = 0;
40 virtual void setSingleShot(bool value) = 0;
41Q_SIGNALS:
41Q_SIGNALS:
42 void timeout();
42 void timeout();
43−private:
44− bool m_isRunning;
45};
43};
46
44
47/** A QTimer wrapper */
45/** A QTimer wrapper */
@@ -55,6 +53,7 @@ public:
55 void setInterval(int msecs) override;
53 void setInterval(int msecs) override;
56 void start() override;
54 void start() override;
57 void stop() override;
55 void stop() override;
56+ bool isRunning() const override;
58 bool isSingleShot() const override;
57 bool isSingleShot() const override;
59 void setSingleShot(bool value) override;
58 void setSingleShot(bool value) override;
60private:
59private:
plugins/Utils/URLDispatcher.cpp+5−2
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2016 Canonical, Ltd.
2+ * Copyright (C) 2016-2017 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
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
5 * it under the terms of the GNU General Public License as published by
@@ -17,6 +17,7 @@
17#include "URLDispatcher.h"
17#include "URLDispatcher.h"
18
18
19#include <QDBusConnection>
19#include <QDBusConnection>
20+#include <QDebug>
20
21
21class URLDispatcherInterface : public QObject
22class URLDispatcherInterface : public QObject
22{
23{
@@ -63,7 +64,9 @@ void URLDispatcher::setActive(bool value)
63 connection.registerObject(QStringLiteral("/com/canonical/URLDispatcher"),
64 connection.registerObject(QStringLiteral("/com/canonical/URLDispatcher"),
64 dispatcher,
65 dispatcher,
65 QDBusConnection::ExportScriptableContents);
66 QDBusConnection::ExportScriptableContents);
66− connection.registerService(QStringLiteral("com.canonical.URLDispatcher"));
67+ if (!connection.registerService(QStringLiteral("com.canonical.URLDispatcher"))) {
68+ qWarning() << "Unable to register DBus service com.canonical.URLDispatcher";
69+ }
67 m_dispatcher = dispatcher;
70 m_dispatcher = dispatcher;
68 } else {
71 } else {
69 connection.unregisterService(QStringLiteral("com.canonical.URLDispatcher"));
72 connection.unregisterService(QStringLiteral("com.canonical.URLDispatcher"));
plugins/Utils/WindowInputMonitor.cpp+3
@@ -73,6 +73,9 @@ void WindowInputMonitor::update(QEvent *event)
73 && m_windowLastTouchedTimer->elapsed() >= msecsWithoutTouches) {
73 && m_windowLastTouchedTimer->elapsed() >= msecsWithoutTouches) {
74 m_pressedHomeKey = keyEvent->key();
74 m_pressedHomeKey = keyEvent->key();
75 m_activationTimer->start();
75 m_activationTimer->start();
76+ } else if (m_pressedHomeKey != 0 && !m_homeKeys.contains(keyEvent->key())) {
77+ // something else came in... cancel activation
78+ m_activationTimer->stop();
76 }
79 }
77
80
78 } else if (event->type() == QEvent::KeyRelease) {
81 } else if (event->type() == QEvent::KeyRelease) {
plugins/Utils/appdrawerproxymodel.cppnew file+189
@@ -0,0 +1,189 @@
1+/*
2+ * Copyright (C) 2016 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "appdrawerproxymodel.h"
18+
19+#include <unity/shell/launcher/LauncherItemInterface.h>
20+
21+#include <QDebug>
22+
23+AppDrawerProxyModel::AppDrawerProxyModel(QObject *parent):
24+ QSortFilterProxyModel(parent)
25+{
26+ setSortRole(AppDrawerModelInterface::RoleName);
27+ setSortLocaleAware(true);
28+ sort(0);
29+
30+ connect(this, &QAbstractListModel::rowsInserted, this, &AppDrawerProxyModel::countChanged);
31+ connect(this, &QAbstractListModel::rowsRemoved, this, &AppDrawerProxyModel::countChanged);
32+ connect(this, &QAbstractListModel::layoutChanged, this, &AppDrawerProxyModel::countChanged);
33+}
34+
35+QAbstractItemModel *AppDrawerProxyModel::source() const
36+{
37+ return m_source;
38+}
39+
40+void AppDrawerProxyModel::setSource(QAbstractItemModel *source)
41+{
42+ if (m_source != source) {
43+ m_source = source;
44+ setSourceModel(m_source);
45+ setSortRole(m_sortBy == SortByAToZ ? AppDrawerModelInterface::RoleName : AppDrawerModelInterface::RoleUsage);
46+ connect(m_source, &QAbstractItemModel::rowsRemoved, this, &AppDrawerProxyModel::invalidate);
47+ connect(m_source, &QAbstractItemModel::rowsInserted, this, &AppDrawerProxyModel::invalidate);
48+ Q_EMIT sourceChanged();
49+ }
50+}
51+
52+AppDrawerProxyModel::GroupBy AppDrawerProxyModel::group() const
53+{
54+ return m_group;
55+}
56+
57+void AppDrawerProxyModel::setGroup(AppDrawerProxyModel::GroupBy group)
58+{
59+ if (m_group != group) {
60+ m_group = group;
61+ Q_EMIT groupChanged();
62+ invalidateFilter();
63+ }
64+}
65+
66+QString AppDrawerProxyModel::filterLetter() const
67+{
68+ return m_filterLetter;
69+}
70+
71+void AppDrawerProxyModel::setFilterLetter(const QString &filterLetter)
72+{
73+ if (m_filterLetter != filterLetter) {
74+ m_filterLetter = filterLetter;
75+ Q_EMIT filterLetterChanged();
76+ invalidateFilter();
77+ }
78+}
79+
80+QString AppDrawerProxyModel::filterString() const
81+{
82+ return m_filterString;
83+}
84+
85+void AppDrawerProxyModel::setFilterString(const QString &filterString)
86+{
87+ if (m_filterString != filterString) {
88+ m_filterString = filterString;
89+ Q_EMIT filterStringChanged();
90+ invalidateFilter();
91+ }
92+}
93+
94+AppDrawerProxyModel::SortBy AppDrawerProxyModel::sortBy() const
95+{
96+ return m_sortBy;
97+}
98+
99+void AppDrawerProxyModel::setSortBy(AppDrawerProxyModel::SortBy sortBy)
100+{
101+ if (m_sortBy != sortBy) {
102+ m_sortBy = sortBy;
103+ Q_EMIT sortByChanged();
104+ setSortRole(m_sortBy == SortByAToZ ? AppDrawerModelInterface::RoleName : AppDrawerModelInterface::RoleUsage);
105+ sort(0);
106+ }
107+}
108+
109+int AppDrawerProxyModel::count() const
110+{
111+ return rowCount();
112+}
113+
114+QVariant AppDrawerProxyModel::data(const QModelIndex &index, int role) const
115+{
116+ QModelIndex idx = mapToSource(index);
117+ if (role == Qt::UserRole) {
118+ QString name = m_source->data(idx, AppDrawerModelInterface::RoleName).toString();
119+ return name.length() > 0 ? QString(name.at(0)).toUpper() : QChar();
120+ }
121+ return m_source->data(idx, role);
122+}
123+
124+QHash<int, QByteArray> AppDrawerProxyModel::roleNames() const
125+{
126+ if (m_source) {
127+ QHash<int, QByteArray> roles = m_source->roleNames();
128+ roles.insert(Qt::UserRole, "letter");
129+ return roles;
130+ }
131+ return QHash<int, QByteArray>();
132+}
133+
134+bool AppDrawerProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
135+{
136+ Q_UNUSED(source_parent)
137+
138+ if (m_group == GroupByAToZ && source_row > 0) {
139+ QString currentName = m_source->data(m_source->index(source_row, 0), AppDrawerModelInterface::RoleName).toString();
140+ QChar currentLetter = currentName.length() > 0 ? currentName.at(0) : QChar();
141+ QString previousName = m_source->data(m_source->index(source_row - 1,0 ), AppDrawerModelInterface::RoleName).toString();
142+ QChar previousLetter = previousName.length() > 0 ? previousName.at(0) : QChar();
143+ if (currentLetter.toLower() == previousLetter.toLower()) {
144+ return false;
145+ }
146+ } else if(m_group == GroupByAll && source_row > 0) {
147+ return false;
148+ }
149+ if (!m_filterLetter.isEmpty()) {
150+ QString currentName = m_source->data(m_source->index(source_row, 0), AppDrawerModelInterface::RoleName).toString();
151+ QString currentLetter = currentName.length() > 0 ? QString(currentName.at(0)) : QString();
152+ if (currentLetter.toLower() != m_filterLetter.toLower()) {
153+ return false;
154+ }
155+ }
156+ if (!m_filterString.isEmpty()) {
157+ QStringList allWords = m_source->data(m_source->index(source_row, 0), AppDrawerModelInterface::RoleKeywords).toStringList();
158+ allWords.prepend(m_source->data(m_source->index(source_row, 0), AppDrawerModelInterface::RoleName).toString());
159+ bool found = false;
160+ Q_FOREACH (const QString &currentWord, allWords) {
161+ if (currentWord.startsWith(m_filterString, Qt::CaseInsensitive)) {
162+ found = true;
163+ break;
164+ }
165+ }
166+ if (!found) {
167+ return false;
168+ }
169+ }
170+ return true;
171+}
172+
173+QString AppDrawerProxyModel::appId(int index) const
174+{
175+ if (index >= 0 && index < rowCount()) {
176+ QModelIndex sourceIndex = mapToSource(this->index(index, 0));
177+
178+ AppDrawerModelInterface* adm = dynamic_cast<AppDrawerModelInterface*>(m_source);
179+ if (adm) {
180+ return adm->data(sourceIndex, AppDrawerModelInterface::RoleAppId).toString();
181+ }
182+
183+ AppDrawerProxyModel* adpm = qobject_cast<AppDrawerProxyModel*>(m_source);
184+ if (adpm) {
185+ return adpm->appId(sourceIndex.row());
186+ }
187+ }
188+ return QString();
189+}
plugins/Utils/appdrawerproxymodel.hnew file+87
@@ -0,0 +1,87 @@
1+/*
2+ * Copyright (C) 2016 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include <QSortFilterProxyModel>
18+
19+#include <unity/shell/launcher/AppDrawerModelInterface.h>
20+
21+using namespace unity::shell::launcher;
22+
23+class AppDrawerProxyModel: public QSortFilterProxyModel
24+{
25+ Q_OBJECT
26+ Q_PROPERTY(QAbstractItemModel* source READ source WRITE setSource NOTIFY sourceChanged)
27+ Q_PROPERTY(GroupBy group READ group WRITE setGroup NOTIFY groupChanged)
28+ Q_PROPERTY(QString filterLetter READ filterLetter WRITE setFilterLetter NOTIFY filterLetterChanged)
29+ Q_PROPERTY(QString filterString READ filterString WRITE setFilterString NOTIFY filterStringChanged)
30+ Q_PROPERTY(SortBy sortBy READ sortBy WRITE setSortBy NOTIFY sortByChanged)
31+ Q_PROPERTY(int count READ count NOTIFY countChanged)
32+
33+public:
34+ enum GroupBy {
35+ GroupByNone,
36+ GroupByAll,
37+ GroupByAToZ
38+ };
39+ Q_ENUM(GroupBy)
40+ enum SortBy {
41+ SortByAToZ,
42+ SortByUsage
43+ };
44+ Q_ENUM(SortBy)
45+
46+ AppDrawerProxyModel(QObject* parent = nullptr);
47+
48+ QAbstractItemModel* source() const;
49+ void setSource(QAbstractItemModel* source);
50+
51+ GroupBy group() const;
52+ void setGroup(GroupBy group);
53+
54+ QString filterLetter() const;
55+ void setFilterLetter(const QString &filterLetter);
56+
57+ QString filterString() const;
58+ void setFilterString(const QString &filterString);
59+
60+ SortBy sortBy() const;
61+ void setSortBy(SortBy sortBy);
62+
63+ int count() const;
64+
65+ QVariant data(const QModelIndex &index, int role) const override;
66+ QHash<int, QByteArray> roleNames() const override;
67+
68+ Q_INVOKABLE QString appId(int index) const;
69+
70+protected:
71+ bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
72+
73+Q_SIGNALS:
74+ void sourceChanged();
75+ void groupChanged();
76+ void filterLetterChanged();
77+ void filterStringChanged();
78+ void sortByChanged();
79+ void countChanged();
80+
81+private:
82+ QAbstractItemModel* m_source = nullptr;
83+ GroupBy m_group = GroupByNone;
84+ QString m_filterLetter;
85+ QString m_filterString;
86+ SortBy m_sortBy = SortByAToZ;
87+};
plugins/Utils/easingcurve.h−1
@@ -36,7 +36,6 @@
36class EasingCurve: public QObject
36class EasingCurve: public QObject
37{
37{
38 Q_OBJECT
38 Q_OBJECT
39− Q_ENUMS(QEasingCurve::Type)
40 Q_PROPERTY(QEasingCurve::Type type READ type WRITE setType NOTIFY typeChanged)
39 Q_PROPERTY(QEasingCurve::Type type READ type WRITE setType NOTIFY typeChanged)
41 Q_PROPERTY(qreal period READ period WRITE setPeriod NOTIFY periodChanged)
40 Q_PROPERTY(qreal period READ period WRITE setPeriod NOTIFY periodChanged)
42 Q_PROPERTY(qreal progress READ progress WRITE setProgress NOTIFY progressChanged)
41 Q_PROPERTY(qreal progress READ progress WRITE setProgress NOTIFY progressChanged)
plugins/Utils/expressionfiltermodel.cppnew file+49
@@ -0,0 +1,49 @@
1+/*
2+ * Copyright (C) 2017 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 "expressionfiltermodel.h"
18+
19+ExpressionFilterModel::ExpressionFilterModel(QObject *parent)
20+ : UnitySortFilterProxyModelQML(parent)
21+{
22+}
23+
24+QJSValue ExpressionFilterModel::matchExpression() const
25+{
26+ return m_matchExpression;
27+}
28+
29+void ExpressionFilterModel::setMatchExpression(const QJSValue &value)
30+{
31+ m_matchExpression = value;
32+ invalidateFilter();
33+}
34+
35+bool
36+ExpressionFilterModel::filterAcceptsRow(int sourceRow,
37+ const QModelIndex &sourceParent) const
38+{
39+ if (m_matchExpression.isCallable()) {
40+ QJSValueList args;
41+ args << sourceRow;
42+ QJSValue ret = m_matchExpression.call(args);
43+ if (ret.isBool()) {
44+ return ret.toBool();
45+ }
46+ }
47+
48+ return UnitySortFilterProxyModelQML::filterAcceptsRow(sourceRow, sourceParent);
49+}
plugins/Utils/expressionfiltermodel.hnew file+42
@@ -0,0 +1,42 @@
1+/*
2+ * Copyright (C) 2017 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 EXPRESSIONFILTERMODEL_H
18+#define EXPRESSIONFILTERMODEL_H
19+
20+#include "unitysortfilterproxymodelqml.h"
21+#include <QJSValue>
22+
23+class ExpressionFilterModel : public UnitySortFilterProxyModelQML
24+{
25+ Q_OBJECT
26+ Q_PROPERTY(QJSValue matchExpression READ matchExpression WRITE setMatchExpression NOTIFY matchExpressionChanged)
27+public:
28+ explicit ExpressionFilterModel(QObject *parent = 0);
29+
30+ bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
31+
32+ QJSValue matchExpression() const;
33+ void setMatchExpression(const QJSValue& value);
34+
35+Q_SIGNALS:
36+ void matchExpressionChanged();
37+
38+private:
39+ mutable QJSValue m_matchExpression;
40+};
41+
42+#endif // EXPRESSIONFILTERMODEL_H
plugins/Utils/globalfunctions.cpp+5
@@ -51,3 +51,8 @@ QQuickItem *GlobalFunctions::itemAt(QQuickItem* parent, int x, int y, QJSValue m
51 }
51 }
52 return nullptr;
52 return nullptr;
53}
53}
54+
55+bool GlobalFunctions::itemUnderMouse(QQuickItem* item)
56+{
57+ return item && item->isUnderMouse();
58+}
plugins/Utils/globalfunctions.h+2
@@ -37,6 +37,8 @@ public:
37 int x,
37 int x,
38 int y,
38 int y,
39 QJSValue matcher);
39 QJSValue matcher);
40+
41+ static Q_INVOKABLE bool itemUnderMouse(QQuickItem* item);
40};
42};
41
43
42#endif // GLOBALFUNCTIONS_H
44#endif // GLOBALFUNCTIONS_H
plugins/Utils/plugin.cpp+9−1
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2012-2015 Canonical, Ltd.
2+ * Copyright (C) 2012-2017 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
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
5 * it under the terms of the GNU General Public License as published by
@@ -39,6 +39,10 @@
39#include "deviceconfigparser.h"
39#include "deviceconfigparser.h"
40#include "globalfunctions.h"
40#include "globalfunctions.h"
41#include "URLDispatcher.h"
41#include "URLDispatcher.h"
42+#include "appdrawerproxymodel.h"
43+#include "tabfocusfence.h"
44+#include "expressionfiltermodel.h"
45+#include "quicklistproxymodel.h"
42
46
43static QObject *createWindowStateStorage(QQmlEngine *engine, QJSEngine *scriptEngine)
47static QObject *createWindowStateStorage(QQmlEngine *engine, QJSEngine *scriptEngine)
44{
48{
@@ -82,4 +86,8 @@ void UtilsPlugin::registerTypes(const char *uri)
82 qmlRegisterType<DeviceConfigParser>(uri, 0, 1, "DeviceConfigParser");
86 qmlRegisterType<DeviceConfigParser>(uri, 0, 1, "DeviceConfigParser");
83 qmlRegisterSingletonType<GlobalFunctions>(uri, 0, 1, "Functions", createGlobalFunctions);
87 qmlRegisterSingletonType<GlobalFunctions>(uri, 0, 1, "Functions", createGlobalFunctions);
84 qmlRegisterType<URLDispatcher>(uri, 0, 1, "URLDispatcher");
88 qmlRegisterType<URLDispatcher>(uri, 0, 1, "URLDispatcher");
89+ qmlRegisterType<AppDrawerProxyModel>(uri, 0, 1, "AppDrawerProxyModel");
90+ qmlRegisterType<TabFocusFenceItem>(uri, 0, 1, "TabFocusFence");
91+ qmlRegisterType<ExpressionFilterModel>(uri, 0, 1, "ExpressionFilterModel");
92+ qmlRegisterType<QuickListProxyModel>(uri, 0, 1, "QuickListProxyModel");
85}
93}
plugins/Utils/quicklistproxymodel.cppnew file+72
@@ -0,0 +1,72 @@
1+/*
2+ * Copyright (C) 2017 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 "quicklistproxymodel.h"
18+
19+#include <QDebug>
20+
21+QuickListProxyModel::QuickListProxyModel(QObject *parent):
22+ QSortFilterProxyModel(parent)
23+{
24+ connect(this, &QAbstractListModel::rowsInserted, this, &QuickListProxyModel::countChanged);
25+ connect(this, &QAbstractListModel::rowsRemoved, this, &QuickListProxyModel::countChanged);
26+ connect(this, &QAbstractListModel::layoutChanged, this, &QuickListProxyModel::countChanged);
27+}
28+
29+QAbstractItemModel *QuickListProxyModel::source() const
30+{
31+ return m_source;
32+}
33+
34+bool QuickListProxyModel::privateMode() const
35+{
36+ return m_privateMode;
37+}
38+
39+void QuickListProxyModel::setPrivateMode(bool privateMode)
40+{
41+ if (m_privateMode != privateMode) {
42+ m_privateMode = privateMode;
43+ invalidateFilter();
44+ Q_EMIT privateModeChanged();
45+ }
46+}
47+
48+void QuickListProxyModel::setSource(QAbstractItemModel *source)
49+{
50+ if (m_source != source) {
51+ m_source = source;
52+ setSourceModel(m_source);
53+ connect(m_source, &QAbstractItemModel::rowsRemoved, this, &QuickListProxyModel::invalidate);
54+ connect(m_source, &QAbstractItemModel::rowsInserted, this, &QuickListProxyModel::invalidate);
55+ Q_EMIT sourceChanged();
56+ }
57+}
58+
59+int QuickListProxyModel::count() const
60+{
61+ return rowCount();
62+}
63+
64+bool QuickListProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
65+{
66+ Q_UNUSED(source_parent)
67+
68+ if (m_privateMode) {
69+ return !m_source->data(m_source->index(source_row, 0), QuickListModelInterface::RoleIsPrivate).toBool();
70+ }
71+ return true;
72+}
plugins/Utils/quicklistproxymodel.hnew file+52
@@ -0,0 +1,52 @@
1+/*
2+ * Copyright (C) 2017 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 <QSortFilterProxyModel>
18+
19+#include <unity/shell/launcher/QuickListModelInterface.h>
20+
21+using namespace unity::shell::launcher;
22+
23+class QuickListProxyModel: public QSortFilterProxyModel
24+{
25+ Q_OBJECT
26+ Q_PROPERTY(QAbstractItemModel* source READ source WRITE setSource NOTIFY sourceChanged)
27+ Q_PROPERTY(bool privateMode READ privateMode WRITE setPrivateMode NOTIFY privateModeChanged)
28+ Q_PROPERTY(int count READ count NOTIFY countChanged)
29+
30+public:
31+ QuickListProxyModel(QObject* parent = nullptr);
32+
33+ QAbstractItemModel* source() const;
34+ void setSource(QAbstractItemModel* source);
35+
36+ bool privateMode() const;
37+ void setPrivateMode(bool privateMode);
38+
39+ int count() const;
40+
41+protected:
42+ bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
43+
44+Q_SIGNALS:
45+ void sourceChanged();
46+ void privateModeChanged();
47+ void countChanged();
48+
49+private:
50+ QAbstractItemModel* m_source = nullptr;
51+ bool m_privateMode = false;
52+};
plugins/Utils/tabfocusfence.cppnew file+72
@@ -0,0 +1,72 @@
1+/*
2+ * Copyright 2017 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU Lesser General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+*/
16+
17+#include "tabfocusfence.h"
18+
19+#include <private/qquickitem_p.h>
20+
21+TabFocusFenceItem::TabFocusFenceItem(QQuickItem *parent) : QQuickItem(parent)
22+{
23+ QQuickItemPrivate *d = QQuickItemPrivate::get(this);
24+ d->isTabFence = true;
25+ setFlag(ItemIsFocusScope);
26+}
27+
28+bool TabFocusFenceItem::focusNext()
29+{
30+ QQuickItem * current = scopedFocusItem();
31+ if (current) {
32+ QQuickItem * next = current->nextItemInFocusChain(true);
33+ if (next) {
34+ next->setFocus(true, Qt::TabFocusReason);
35+ return true;
36+ }
37+ }
38+ return false;
39+}
40+
41+bool TabFocusFenceItem::focusPrev()
42+{
43+ QQuickItem * current = scopedFocusItem();
44+ if (current) {
45+ QQuickItem * prev = current->nextItemInFocusChain(false);
46+ if (prev) {
47+ prev->setFocus(true, Qt::BacktabFocusReason);
48+ return true;
49+ }
50+ }
51+ return false;
52+}
53+
54+void TabFocusFenceItem::keyPressEvent(QKeyEvent *event)
55+{
56+ // Needed so we eat Tab keys when there's only one item inside the fence
57+ if (event->key() == Qt::Key_Tab) {
58+ event->accept();
59+ } else {
60+ QQuickItem::keyPressEvent(event);
61+ }
62+}
63+
64+void TabFocusFenceItem::keyReleaseEvent(QKeyEvent *event)
65+{
66+ // Needed so we eat Tab keys when there's only one item inside the fence
67+ if (event->key() == Qt::Key_Tab) {
68+ event->accept();
69+ } else {
70+ QQuickItem::keyReleaseEvent(event);
71+ }
72+}
plugins/Utils/tabfocusfence.hnew file+38
@@ -0,0 +1,38 @@
1+/*
2+ * Copyright 2017 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU Lesser General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+*/
16+
17+#ifndef TABFOCUSFENCE_H
18+#define TABFOCUSFENCE_H
19+
20+#include <QQuickItem>
21+
22+// An item that restricts focus Tab travelling
23+// to its children
24+class TabFocusFenceItem : public QQuickItem
25+{
26+Q_OBJECT
27+
28+public:
29+ TabFocusFenceItem(QQuickItem *parent = nullptr);
30+
31+ Q_INVOKABLE bool focusNext();
32+ Q_INVOKABLE bool focusPrev();
33+
34+ void keyPressEvent(QKeyEvent *event) override;
35+ void keyReleaseEvent(QKeyEvent *event) override;
36+};
37+
38+#endif
plugins/Utils/unitysortfilterproxymodelqml.h+5
@@ -38,6 +38,11 @@ public:
38 Q_INVOKABLE int mapRowToSource(int row);
38 Q_INVOKABLE int mapRowToSource(int row);
39 bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
39 bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
40
40
41+ // Make the QSortFilterProxyModel variants also accessible
42+ using QSortFilterProxyModel::data;
43+ using QSortFilterProxyModel::mapFromSource;
44+ using QSortFilterProxyModel::mapToSource;
45+
41 /* getters */
46 /* getters */
42 int totalCount() const;
47 int totalCount() const;
43 bool invertMatch() const;
48 bool invertMatch() const;
plugins/Utils/windowstatestorage.cpp+37−7
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright 2015 Canonical Ltd.
2+ * Copyright 2015-2016 Canonical Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU Lesser General Public License as published by
5 * it under the terms of the GNU Lesser General Public License as published by
@@ -36,7 +36,7 @@ inline QString sanitiseString(QString string) {
36WindowStateStorage::WindowStateStorage(QObject *parent):
36WindowStateStorage::WindowStateStorage(QObject *parent):
37 QObject(parent)
37 QObject(parent)
38{
38{
39− QString dbPath = QDir::homePath() + "/.cache/unity8/";
39+ const QString dbPath = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + QStringLiteral("/unity8/");
40 m_db = QSqlDatabase::addDatabase(QStringLiteral("QSQLITE"));
40 m_db = QSqlDatabase::addDatabase(QStringLiteral("QSQLITE"));
41 QDir dir;
41 QDir dir;
42 dir.mkpath(dbPath);
42 dir.mkpath(dbPath);
@@ -65,7 +65,7 @@ void WindowStateStorage::saveState(const QString &windowId, WindowStateStorage::
65
65
66WindowStateStorage::WindowState WindowStateStorage::getState(const QString &windowId, WindowStateStorage::WindowState defaultValue) const
66WindowStateStorage::WindowState WindowStateStorage::getState(const QString &windowId, WindowStateStorage::WindowState defaultValue) const
67{
67{
68− const QString queryString = QStringLiteral("SELECT * FROM state WHERE windowId = '%1';")
68+ const QString queryString = QStringLiteral("SELECT state FROM state WHERE windowId = '%1';")
69 .arg(sanitiseString(windowId));
69 .arg(sanitiseString(windowId));
70
70
71 QSqlQuery query = getValue(queryString);
71 QSqlQuery query = getValue(queryString);
@@ -99,7 +99,7 @@ void WindowStateStorage::saveStage(const QString &appId, int stage)
99
99
100int WindowStateStorage::getStage(const QString &appId, int defaultValue) const
100int WindowStateStorage::getStage(const QString &appId, int defaultValue) const
101{
101{
102− const QString queryString = QStringLiteral("SELECT * FROM stage WHERE appId = '%1';")
102+ const QString queryString = QStringLiteral("SELECT stage FROM stage WHERE appId = '%1';")
103 .arg(sanitiseString(appId));
103 .arg(sanitiseString(appId));
104
104
105 QSqlQuery query = getValue(queryString);
105 QSqlQuery query = getValue(queryString);
@@ -133,8 +133,15 @@ QRect WindowStateStorage::getGeometry(const QString &windowId, const QRect &defa
133 if (!query.first()) {
133 if (!query.first()) {
134 return defaultValue;
134 return defaultValue;
135 }
135 }
136+
136− return QRect(query.value(QStringLiteral("x")).toInt(), query.value(QStringLiteral("y")).toInt(),
137+ const QRect result(query.value(QStringLiteral("x")).toInt(), query.value(QStringLiteral("y")).toInt(),
137− query.value(QStringLiteral("width")).toInt(), query.value(QStringLiteral("height")).toInt());
138+ query.value(QStringLiteral("width")).toInt(), query.value(QStringLiteral("height")).toInt());
139+
140+ if (result.isValid()) {
141+ return result;
142+ }
143+
144+ return defaultValue;
138}
145}
139
146
140void WindowStateStorage::initdb()
147void WindowStateStorage::initdb()
@@ -165,7 +172,7 @@ void WindowStateStorage::saveValue(const QString &queryString)
165{
172{
166 QMutexLocker mutexLocker(&s_mutex);
173 QMutexLocker mutexLocker(&s_mutex);
167
174
168− QFuture<void> future = QtConcurrent::run(executeAsyncQuery, queryString);
175+ QFuture<void> future = QtConcurrent::run(&m_threadPool, executeAsyncQuery, queryString);
169 m_asyncQueries.append(future);
176 m_asyncQueries.append(future);
170
177
171 QFutureWatcher<void> *futureWatcher = new QFutureWatcher<void>();
178 QFutureWatcher<void> *futureWatcher = new QFutureWatcher<void>();
@@ -189,3 +196,26 @@ QSqlQuery WindowStateStorage::getValue(const QString &queryString) const
189 }
196 }
190 return query;
197 return query;
191}
198}
199+
200+Mir::State WindowStateStorage::toMirState(WindowState state) const
201+{
202+ // assumes a single state (not an OR of several)
203+ switch (state) {
204+ case WindowStateMaximized: return Mir::MaximizedState;
205+ case WindowStateMinimized: return Mir::MinimizedState;
206+ case WindowStateFullscreen: return Mir::FullscreenState;
207+ case WindowStateMaximizedLeft: return Mir::MaximizedLeftState;
208+ case WindowStateMaximizedRight: return Mir::MaximizedRightState;
209+ case WindowStateMaximizedHorizontally: return Mir::HorizMaximizedState;
210+ case WindowStateMaximizedVertically: return Mir::VertMaximizedState;
211+ case WindowStateMaximizedTopLeft: return Mir::MaximizedTopLeftState;
212+ case WindowStateMaximizedTopRight: return Mir::MaximizedTopRightState;
213+ case WindowStateMaximizedBottomLeft: return Mir::MaximizedBottomLeftState;
214+ case WindowStateMaximizedBottomRight: return Mir::MaximizedBottomRightState;
215+
216+ case WindowStateNormal:
217+ case WindowStateRestored:
218+ default:
219+ return Mir::RestoredState;
220+ }
221+}
plugins/Utils/windowstatestorage.h+10−5
@@ -18,11 +18,14 @@
18#include <QSqlDatabase>
18#include <QSqlDatabase>
19#include <QMutex>
19#include <QMutex>
20#include <QFuture>
20#include <QFuture>
21+#include <QThreadPool>
22+
23+// unity-api
24+#include <unity/shell/application/Mir.h>
21
25
22class WindowStateStorage: public QObject
26class WindowStateStorage: public QObject
23{
27{
24 Q_OBJECT
28 Q_OBJECT
25− Q_ENUMS(WindowState)
26public:
29public:
27 enum WindowState {
30 enum WindowState {
28 WindowStateNormal = 1 << 0,
31 WindowStateNormal = 1 << 0,
@@ -39,12 +42,11 @@ public:
39 WindowStateMaximizedBottomRight = 1 << 11,
42 WindowStateMaximizedBottomRight = 1 << 11,
40 WindowStateRestored = 1 << 12
43 WindowStateRestored = 1 << 12
41 };
44 };
45+ Q_ENUM(WindowState)
42 Q_DECLARE_FLAGS(WindowStates, WindowState)
46 Q_DECLARE_FLAGS(WindowStates, WindowState)
43−#if (QT_VERSION >= QT_VERSION_CHECK(5, 5, 0))
44 Q_FLAG(WindowStates)
47 Q_FLAG(WindowStates)
45−#endif
46
48
47− WindowStateStorage(QObject *parent = 0);
49+ WindowStateStorage(QObject *parent = nullptr);
48 virtual ~WindowStateStorage();
50 virtual ~WindowStateStorage();
49
51
50 Q_INVOKABLE void saveState(const QString &windowId, WindowState state);
52 Q_INVOKABLE void saveState(const QString &windowId, WindowState state);
@@ -56,6 +58,8 @@ public:
56 Q_INVOKABLE void saveStage(const QString &appId, int stage);
58 Q_INVOKABLE void saveStage(const QString &appId, int stage);
57 Q_INVOKABLE int getStage(const QString &appId, int defaultValue) const;
59 Q_INVOKABLE int getStage(const QString &appId, int defaultValue) const;
58
60
61+ Q_INVOKABLE Mir::State toMirState(WindowState state) const;
62+
59private:
63private:
60 void initdb();
64 void initdb();
61
65
@@ -68,5 +72,6 @@ private:
68 // NB: This is accessed from threads. Make sure to mutex it.
72 // NB: This is accessed from threads. Make sure to mutex it.
69 QSqlDatabase m_db;
73 QSqlDatabase m_db;
70
74
71− QList< QFuture<void> > m_asyncQueries;
75+ QList<QFuture<void>> m_asyncQueries;
76+ QThreadPool m_threadPool;
72};
77};
plugins/WindowManager/AvailableDesktopArea.cppnew file+50
@@ -0,0 +1,50 @@
1+/*
2+ * Copyright (C) 2017 Canonical, Ltd.
3+ *
4+ * This program is free software: you can redistribute it and/or modify it under
5+ * the terms of the GNU Lesser General Public License version 3, as published by
6+ * the Free Software Foundation.
7+ *
8+ * This program is distributed in the hope that it will be useful, but WITHOUT
9+ * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY,
10+ * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11+ * Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "AvailableDesktopArea.h"
18+
19+#include <QGuiApplication>
20+#include <QQuickWindow>
21+#include <qpa/qplatformnativeinterface.h>
22+
23+AvailableDesktopArea::AvailableDesktopArea(QQuickItem *parent)
24+ : QQuickItem(parent)
25+{
26+ connect(this, &QQuickItem::xChanged, this, &AvailableDesktopArea::updatePlatformWindowProperty);
27+ connect(this, &QQuickItem::yChanged, this, &AvailableDesktopArea::updatePlatformWindowProperty);
28+ connect(this, &QQuickItem::widthChanged, this, &AvailableDesktopArea::updatePlatformWindowProperty);
29+ connect(this, &QQuickItem::heightChanged, this, &AvailableDesktopArea::updatePlatformWindowProperty);
30+}
31+
32+void AvailableDesktopArea::updatePlatformWindowProperty()
33+{
34+ if (!window()) {
35+ return;
36+ }
37+
38+ QPlatformNativeInterface *nativeInterface = QGuiApplication::platformNativeInterface();
39+
40+ QRect rect(x(), y(), width(), height());
41+
42+ nativeInterface->setWindowProperty(window()->handle(), "availableDesktopArea", QVariant(rect));
43+}
44+
45+void AvailableDesktopArea::itemChange(ItemChange change, const ItemChangeData &)
46+{
47+ if (change == ItemSceneChange) {
48+ updatePlatformWindowProperty();
49+ }
50+}
plugins/WindowManager/AvailableDesktopArea.hnew file+38
@@ -0,0 +1,38 @@
1+/*
2+ * Copyright (C) 2017 Canonical, Ltd.
3+ *
4+ * This program is free software: you can redistribute it and/or modify it under
5+ * the terms of the GNU Lesser General Public License version 3, as published by
6+ * the Free Software Foundation.
7+ *
8+ * This program is distributed in the hope that it will be useful, but WITHOUT
9+ * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY,
10+ * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11+ * Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef AVAILABLEDESKTOPAREA_H
18+#define AVAILABLEDESKTOPAREA_H
19+
20+#include <QQuickItem>
21+
22+/**
23+ @brief Used to inform qtmir/miral about the available desktop area of shell
24+
25+ So that qtmir/miral can take correct window management decisions.
26+ */
27+class AvailableDesktopArea : public QQuickItem
28+{
29+ Q_OBJECT
30+public:
31+ AvailableDesktopArea(QQuickItem *parent = nullptr);
32+protected:
33+ void itemChange(ItemChange change, const ItemChangeData &value) override;
34+private Q_SLOTS:
35+ void updatePlatformWindowProperty();
36+};
37+
38+#endif // AVAILABLEDESKTOPAREA_H
plugins/WindowManager/CMakeLists.txt+12−1
@@ -1,12 +1,23 @@
1set(WINDOWMANAGER_SRC
1set(WINDOWMANAGER_SRC
2− TopLevelSurfaceList.cpp
2+ AvailableDesktopArea.cpp
3+ TopLevelWindowModel.cpp
4+ Window.cpp
3 WindowManagerPlugin.cpp
5 WindowManagerPlugin.cpp
6+ WindowMargins.cpp
4 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
7 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/ApplicationInfoInterface.h
5 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/Mir.h
8 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/Mir.h
6 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceInterface.h
9 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceInterface.h
7 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceListInterface.h
10 ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/MirSurfaceListInterface.h
11+ ${APPLICATION_API_INCLUDEDIR}/unity/shell/application/SurfaceManagerInterface.h
8 )
12 )
9
13
14+add_definitions(-DWINDOWMANAGERQML_LIBRARY)
15+
16+include_directories(
17+ SYSTEM
18+ ${Qt5Gui_PRIVATE_INCLUDE_DIRS}
19+)
20+
10add_library(windowmanager-qml SHARED ${WINDOWMANAGER_SRC})
21add_library(windowmanager-qml SHARED ${WINDOWMANAGER_SRC})
11
22
12qt5_use_modules(windowmanager-qml Qml Quick Gui)
23qt5_use_modules(windowmanager-qml Qml Quick Gui)
plugins/WindowManager/TopLevelSurfaceList.cppdeleted−481
@@ -1,481 +0,0 @@
1−/*
2− * Copyright (C) 2016 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−#include "TopLevelSurfaceList.h"
18−
19−// unity-api
20−#include <unity/shell/application/ApplicationInfoInterface.h>
21−#include <unity/shell/application/MirSurfaceInterface.h>
22−#include <unity/shell/application/MirSurfaceListInterface.h>
23−
24−#include <QMetaObject>
25−
26−Q_LOGGING_CATEGORY(UNITY_TOPSURFACELIST, "unity.topsurfacelist", QtDebugMsg)
27−
28−#define DEBUG_MSG qCDebug(UNITY_TOPSURFACELIST).nospace().noquote() << __func__
29−
30−using namespace unity::shell::application;
31−
32−TopLevelSurfaceList::TopLevelSurfaceList(QObject *parent) :
33− QAbstractListModel(parent)
34−{
35− DEBUG_MSG << "()";
36−}
37−
38−TopLevelSurfaceList::~TopLevelSurfaceList()
39−{
40− DEBUG_MSG << "()";
41−}
42−
43−int TopLevelSurfaceList::rowCount(const QModelIndex &parent) const
44−{
45− return !parent.isValid() ? m_surfaceList.size() : 0;
46−}
47−
48−QVariant TopLevelSurfaceList::data(const QModelIndex& index, int role) const
49−{
50− if (index.row() < 0 || index.row() >= m_surfaceList.size())
51− return QVariant();
52−
53− if (role == SurfaceRole) {
54− MirSurfaceInterface *surface = m_surfaceList.at(index.row()).surface;
55− return QVariant::fromValue(surface);
56− } else if (role == ApplicationRole) {
57− return QVariant::fromValue(m_surfaceList.at(index.row()).application);
58− } else if (role == IdRole) {
59− return QVariant::fromValue(m_surfaceList.at(index.row()).id);
60− } else {
61− return QVariant();
62− }
63−}
64−
65−void TopLevelSurfaceList::raise(MirSurfaceInterface *surface)
66−{
67− if (!surface)
68− return;
69−
70− DEBUG_MSG << "(MirSurface[" << (void*)surface << "])";
71−
72− int i = indexOf(surface);
73− if (i != -1) {
74− raiseId(m_surfaceList.at(i).id);
75− }
76−}
77−
78−void TopLevelSurfaceList::appendPlaceholder(ApplicationInfoInterface *application)
79−{
80− DEBUG_MSG << "(" << application->appId() << ")";
81−
82− appendSurfaceHelper(nullptr, application);
83−}
84−
85−void TopLevelSurfaceList::appendSurface(MirSurfaceInterface *surface, ApplicationInfoInterface *application)
86−{
87− Q_ASSERT(surface != nullptr);
88−
89− bool filledPlaceholder = false;
90− for (int i = 0; i < m_surfaceList.count() && !filledPlaceholder; ++i) {
91− ModelEntry &entry = m_surfaceList[i];
92− if (entry.application == application && entry.surface == nullptr) {
93− entry.surface = surface;
94− connectSurface(surface);
95− DEBUG_MSG << " appId=" << application->appId() << " surface=" << surface
96− << ", filling out placeholder. after: " << toString();
97− Q_EMIT dataChanged(index(i) /* topLeft */, index(i) /* bottomRight */, QVector<int>() << SurfaceRole);
98− filledPlaceholder = true;
99− }
100− }
101−
102− if (!filledPlaceholder) {
103− DEBUG_MSG << " appId=" << application->appId() << " surface=" << surface << ", adding new row";
104− appendSurfaceHelper(surface, application);
105− }
106−}
107−
108−void TopLevelSurfaceList::appendSurfaceHelper(MirSurfaceInterface *surface, ApplicationInfoInterface *application)
109−{
110− if (m_modelState == IdleState) {
111− m_modelState = InsertingState;
112− beginInsertRows(QModelIndex(), m_surfaceList.size() /*first*/, m_surfaceList.size() /*last*/);
113− } else {
114− Q_ASSERT(m_modelState == ResettingState);
115− // No point in signaling anything if we're resetting the whole model
116− }
117−
118− int id = generateId();
119− m_surfaceList.append(ModelEntry(surface, application, id));
120− if (surface) {
121− connectSurface(surface);
122− }
123−
124− if (m_modelState == InsertingState) {
125− endInsertRows();
126− Q_EMIT countChanged();
127− Q_EMIT listChanged();
128− m_modelState = IdleState;
129− }
130−
131− DEBUG_MSG << " after " << toString();
132−}
133−
134−void TopLevelSurfaceList::connectSurface(MirSurfaceInterface *surface)
135−{
136− connect(surface, &MirSurfaceInterface::liveChanged, this, [this, surface](bool live){
137− if (!live) {
138− onSurfaceDied(surface);
139− }
140− });
141− connect(surface, &QObject::destroyed, this, [this, surface](){ this->onSurfaceDestroyed(surface); });
142−}
143−
144−void TopLevelSurfaceList::onSurfaceDied(MirSurfaceInterface *surface)
145−{
146− int i = indexOf(surface);
147− if (i == -1) {
148− return;
149− }
150−
151− auto application = m_surfaceList[i].application;
152−
153− // can't be starting if it already has a surface
154− Q_ASSERT(application->state() != ApplicationInfoInterface::Starting);
155−
156− if (application->state() == ApplicationInfoInterface::Running) {
157− m_surfaceList[i].removeOnceSurfaceDestroyed = true;
158− } else {
159− // assume it got killed by the out-of-memory daemon.
160− //
161− // So leave entry in the model and only remove its surface, so shell can display a screenshot
162− // in its place.
163− m_surfaceList[i].removeOnceSurfaceDestroyed = false;
164− }
165−}
166−
167−void TopLevelSurfaceList::onSurfaceDestroyed(MirSurfaceInterface *surface)
168−{
169− int i = indexOf(surface);
170− if (i == -1) {
171− return;
172− }
173−
174− if (m_surfaceList[i].removeOnceSurfaceDestroyed) {
175− removeAt(i);
176− } else {
177− m_surfaceList[i].surface = nullptr;
178− Q_EMIT dataChanged(index(i) /* topLeft */, index(i) /* bottomRight */, QVector<int>() << SurfaceRole);
179− DEBUG_MSG << " Removed surface from entry. After: " << toString();
180− }
181−}
182−
183−void TopLevelSurfaceList::removeAt(int index)
184−{
185− if (m_modelState == IdleState) {
186− beginRemoveRows(QModelIndex(), index, index);
187− m_modelState = RemovingState;
188− } else {
189− Q_ASSERT(m_modelState == ResettingState);
190− // No point in signaling anything if we're resetting the whole model
191− }
192−
193− m_surfaceList.removeAt(index);
194−
195− if (m_modelState == RemovingState) {
196− endRemoveRows();
197− Q_EMIT countChanged();
198− Q_EMIT listChanged();
199− m_modelState = IdleState;
200− }
201−
202− DEBUG_MSG << " after " << toString();
203−}
204−
205−int TopLevelSurfaceList::indexOf(MirSurfaceInterface *surface)
206−{
207− for (int i = 0; i < m_surfaceList.count(); ++i) {
208− if (m_surfaceList.at(i).surface == surface) {
209− return i;
210− }
211− }
212− return -1;
213−}
214−
215−void TopLevelSurfaceList::move(int from, int to)
216−{
217− if (from == to) return;
218− DEBUG_MSG << " from=" << from << " to=" << to;
219−
220− if (from >= 0 && from < m_surfaceList.size() && to >= 0 && to < m_surfaceList.size()) {
221− QModelIndex parent;
222− /* When moving an item down, the destination index needs to be incremented
223− by one, as explained in the documentation:
224− http://qt-project.org/doc/qt-5.0/qtcore/qabstractitemmodel.html#beginMoveRows */
225−
226− Q_ASSERT(m_modelState == IdleState);
227− m_modelState = MovingState;
228−
229− beginMoveRows(parent, from, from, parent, to + (to > from ? 1 : 0));
230− m_surfaceList.move(from, to);
231− endMoveRows();
232− Q_EMIT listChanged();
233−
234− m_modelState = IdleState;
235−
236− DEBUG_MSG << " after " << toString();
237− }
238−}
239−
240−MirSurfaceInterface *TopLevelSurfaceList::surfaceAt(int index) const
241−{
242− if (index >=0 && index < m_surfaceList.count()) {
243− return m_surfaceList[index].surface;
244− } else {
245− return nullptr;
246− }
247−}
248−
249−ApplicationInfoInterface *TopLevelSurfaceList::applicationAt(int index) const
250−{
251− if (index >=0 && index < m_surfaceList.count()) {
252− return m_surfaceList[index].application;
253− } else {
254− return nullptr;
255− }
256−}
257−
258−int TopLevelSurfaceList::idAt(int index) const
259−{
260− if (index >=0 && index < m_surfaceList.count()) {
261− return m_surfaceList[index].id;
262− } else {
263− return 0;
264− }
265−}
266−
267−int TopLevelSurfaceList::indexForId(int id) const
268−{
269− for (int i = 0; i < m_surfaceList.count(); ++i) {
270− if (m_surfaceList[i].id == id) {
271− return i;
272− }
273− }
274− return -1;
275−}
276−
277−void TopLevelSurfaceList::doRaiseId(int id)
278−{
279− int fromIndex = indexForId(id);
280− if (fromIndex != -1) {
281− move(fromIndex, 0 /* toIndex */);
282− }
283−}
284−
285−void TopLevelSurfaceList::raiseId(int id)
286−{
287− if (m_modelState == IdleState) {
288− DEBUG_MSG << "(id=" << id << ") - do it now.";
289− doRaiseId(id);
290− } else {
291− DEBUG_MSG << "(id=" << id << ") - Model busy (modelState=" << m_modelState << "). Try again in the next event loop.";
292− // The model has just signalled some change. If we have a Repeater responding to this update, it will get nuts
293− // if we perform yet another model change straight away.
294− //
295− // A bad sympton of this problem is a Repeater.itemAt(index) call returning null event though Repeater.count says
296− // the index is definitely within bounds.
297− QMetaObject::invokeMethod(this, "raiseId", Qt::QueuedConnection, Q_ARG(int, id));
298− }
299−}
300−
301−int TopLevelSurfaceList::generateId()
302−{
303− int id = m_nextId;
304− m_nextId = nextFreeId(m_nextId + 1);
305− Q_EMIT nextIdChanged();
306− return id;
307−}
308−
309−int TopLevelSurfaceList::nextFreeId(int candidateId)
310−{
311− if (candidateId > m_maxId) {
312− return nextFreeId(1);
313− } else {
314− if (indexForId(candidateId) == -1) {
315− // it's indeed free
316− return candidateId;
317− } else {
318− return nextFreeId(candidateId + 1);
319− }
320− }
321−}
322−
323−QString TopLevelSurfaceList::toString()
324−{
325− QString str;
326− for (int i = 0; i < m_surfaceList.count(); ++i) {
327− auto item = m_surfaceList.at(i);
328−
329− QString itemStr = QString("(index=%1,appId=%2,surface=0x%3,id=%4)")
330− .arg(i)
331− .arg(item.application->appId())
332− .arg((qintptr)item.surface, 0, 16)
333− .arg(item.id);
334−
335− if (i > 0) {
336− str.append(",");
337− }
338− str.append(itemStr);
339− }
340− return str;
341−}
342−
343−void TopLevelSurfaceList::addApplication(ApplicationInfoInterface *application)
344−{
345− DEBUG_MSG << "(" << application->appId() << ")";
346− Q_ASSERT(!m_applications.contains(application));
347− m_applications.append(application);
348−
349− MirSurfaceListInterface *surfaceList = application->surfaceList();
350−
351− if (application->state() != ApplicationInfoInterface::Stopped) {
352− if (surfaceList->count() == 0) {
353− appendPlaceholder(application);
354− } else {
355− for (int i = 0; i < surfaceList->count(); ++i) {
356− appendSurface(surfaceList->get(i), application);
357− }
358− }
359− }
360−
361− connect(surfaceList, &QAbstractItemModel::rowsInserted, this,
362− [this, application, surfaceList](const QModelIndex & /*parent*/, int first, int last)
363− {
364− for (int i = last; i >= first; --i) {
365− this->appendSurface(surfaceList->get(i), application);
366− }
367− });
368−}
369−
370−void TopLevelSurfaceList::removeApplication(ApplicationInfoInterface *application)
371−{
372− DEBUG_MSG << "(" << application->appId() << ")";
373− Q_ASSERT(m_applications.contains(application));
374−
375− MirSurfaceListInterface *surfaceList = application->surfaceList();
376−
377− disconnect(surfaceList, 0, this, 0);
378−
379− Q_ASSERT(m_modelState == IdleState);
380− m_modelState = RemovingState;
381−
382− int i = 0;
383− while (i < m_surfaceList.count()) {
384− if (m_surfaceList.at(i).application == application) {
385− beginRemoveRows(QModelIndex(), i, i);
386− m_surfaceList.removeAt(i);
387− endRemoveRows();
388− Q_EMIT countChanged();
389− Q_EMIT listChanged();
390− } else {
391− ++i;
392− }
393− }
394−
395− m_modelState = IdleState;
396−
397− DEBUG_MSG << " after " << toString();
398−
399− m_applications.removeAll(application);
400−}
401−
402−QAbstractListModel *TopLevelSurfaceList::applicationsModel() const
403−{
404− return m_applicationsModel;
405−}
406−
407−void TopLevelSurfaceList::setApplicationsModel(QAbstractListModel* value)
408−{
409− if (m_applicationsModel == value) {
410− return;
411− }
412−
413− DEBUG_MSG << "(" << value << ")";
414−
415− Q_ASSERT(m_modelState == IdleState);
416− m_modelState = ResettingState;
417−
418− beginResetModel();
419−
420− if (m_applicationsModel) {
421− m_surfaceList.clear();
422− m_applications.clear();
423− disconnect(m_applicationsModel, 0, this, 0);
424− }
425−
426− m_applicationsModel = value;
427−
428− if (m_applicationsModel) {
429− findApplicationRole();
430−
431− connect(m_applicationsModel, &QAbstractItemModel::rowsInserted,
432− this, [this](const QModelIndex &/*parent*/, int first, int last) {
433− for (int i = first; i <= last; ++i) {
434− auto application = getApplicationFromModelAt(i);
435− addApplication(application);
436− }
437− });
438−
439− connect(m_applicationsModel, &QAbstractItemModel::rowsAboutToBeRemoved,
440− this, [this](const QModelIndex &/*parent*/, int first, int last) {
441− for (int i = first; i <= last; ++i) {
442− auto application = getApplicationFromModelAt(i);
443− removeApplication(application);
444− }
445− });
446−
447− for (int i = 0; i < m_applicationsModel->rowCount(); ++i) {
448− auto application = getApplicationFromModelAt(i);
449− addApplication(application);
450− }
451− }
452−
453− endResetModel();
454− m_modelState = IdleState;
455−}
456−
457−ApplicationInfoInterface *TopLevelSurfaceList::getApplicationFromModelAt(int index)
458−{
459− QModelIndex modelIndex = m_applicationsModel->index(index);
460−
461− QVariant variant = m_applicationsModel->data(modelIndex, m_applicationRole);
462−
463− // variant.value<ApplicationInfoInterface*>() returns null for some reason.
464− return static_cast<ApplicationInfoInterface*>(variant.value<QObject*>());
465−}
466−
467−void TopLevelSurfaceList::findApplicationRole()
468−{
469− QHash<int, QByteArray> namesHash = m_applicationsModel->roleNames();
470−
471− m_applicationRole = -1;
472− for (auto i = namesHash.begin(); i != namesHash.end() && m_applicationRole == -1; ++i) {
473− if (i.value() == "application") {
474− m_applicationRole = i.key();
475− }
476− }
477−
478− if (m_applicationRole == -1) {
479− qFatal("TopLevelSurfaceList: applicationsModel must have a \"application\" role.");
480− }
481−}
plugins/WindowManager/TopLevelSurfaceList.hdeleted−223
@@ -1,223 +0,0 @@
1−/*
2− * Copyright (C) 2016 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−#ifndef TOPLEVELSURFACELIST_H
18−#define TOPLEVELSURFACELIST_H
19−
20−#include <QAbstractListModel>
21−#include <QList>
22−#include <QLoggingCategory>
23−
24−Q_DECLARE_LOGGING_CATEGORY(UNITY_TOPSURFACELIST)
25−
26−namespace unity {
27− namespace shell {
28− namespace application {
29− class ApplicationInfoInterface;
30− class MirSurfaceInterface;
31− }
32− }
33−}
34−
35−/**
36− * @brief A model of top-level surfaces
37− *
38− * It's an abstraction of top-level application windows.
39− *
40− * When an entry first appears, it normaly doesn't have a surface yet, meaning that the application is
41− * still starting up. A shell should then display a splash screen or saved screenshot of the application
42− * until its surface comes up.
43− *
44− * As applications can have multiple surfaces and you can also have entries without surfaces at all,
45− * the only way to unambiguously refer to an entry in this model is through its id.
46− */
47−class TopLevelSurfaceList : public QAbstractListModel
48−{
49−
50− Q_OBJECT
51−
52− /**
53− * @brief A list model of applications.
54− *
55− * It's expected to have a role called "application" which returns a ApplicationInfoInterface
56− */
57− Q_PROPERTY(QAbstractListModel* applicationsModel READ applicationsModel
58− WRITE setApplicationsModel
59− NOTIFY applicationsModelChanged)
60−
61− /**
62− * @brief Number of top-level surfaces in this model
63− *
64− * This is the same as rowCount, added in order to keep compatibility with QML ListModels.
65− */
66− Q_PROPERTY(int count READ rowCount NOTIFY countChanged)
67−
68− /**
69− The id to be used on the next entry created
70− Useful for tests
71− */
72− Q_PROPERTY(int nextId READ nextId NOTIFY nextIdChanged)
73−public:
74−
75− /**
76− * @brief The Roles supported by the model
77− *
78− * SurfaceRole - A MirSurfaceInterface. It will be null if the application is still starting up
79− * ApplicationRole - An ApplicationInfoInterface
80− * IdRole - A unique identifier for this entry. Useful to unambiguosly track elements as they move around in the list
81− */
82− enum Roles {
83− SurfaceRole = Qt::UserRole,
84− ApplicationRole = Qt::UserRole + 1,
85− IdRole = Qt::UserRole + 2,
86− };
87−
88− explicit TopLevelSurfaceList(QObject *parent = nullptr);
89− virtual ~TopLevelSurfaceList();
90−
91− // QAbstractItemModel methods
92− int rowCount(const QModelIndex &parent = QModelIndex()) const override;
93− QVariant data(const QModelIndex& index, int role) const override;
94− QHash<int, QByteArray> roleNames() const override {
95− QHash<int, QByteArray> roleNames { {SurfaceRole, "surface"},
96− {ApplicationRole, "application"},
97− {IdRole, "id"} };
98− return roleNames;
99− }
100−
101− int nextId() const { return m_nextId; }
102−
103− QAbstractListModel *applicationsModel() const;
104− void setApplicationsModel(QAbstractListModel*);
105−
106−public Q_SLOTS:
107− /**
108− * @brief Returns the surface at the given index
109− *
110− * It will be a nullptr if the application is still starting up and thus hasn't yet created
111− * and drawn into a surface.
112− */
113− unity::shell::application::MirSurfaceInterface *surfaceAt(int index) const;
114−
115− /**
116− * @brief Returns the application at the given index
117− */
118− unity::shell::application::ApplicationInfoInterface *applicationAt(int index) const;
119−
120− /**
121− * @brief Returns the unique id of the element at the given index
122− */
123− int idAt(int index) const;
124−
125− /**
126− * @brief Returns the index where the row with the given id is located
127− *
128− * Returns -1 if there's no row with the given id.
129− */
130− int indexForId(int id) const;
131−
132− /**
133− * @brief Raises the row with the given id to index 0
134− */
135− void raiseId(int id);
136−
137− void doRaiseId(int id);
138−
139−Q_SIGNALS:
140− void countChanged();
141−
142− /**
143− * @brief Emitted when the list changes
144− *
145− * Emitted when model gains an element, loses an element or when elements exchange positions.
146− */
147− void listChanged();
148−
149− void nextIdChanged();
150−
151− void applicationsModelChanged();
152−
153−private:
154− void addApplication(unity::shell::application::ApplicationInfoInterface *application);
155− void removeApplication(unity::shell::application::ApplicationInfoInterface *application);
156−
157− int indexOf(unity::shell::application::MirSurfaceInterface *surface);
158− void raise(unity::shell::application::MirSurfaceInterface *surface);
159− void move(int from, int to);
160− void appendSurfaceHelper(unity::shell::application::MirSurfaceInterface *surface,
161− unity::shell::application::ApplicationInfoInterface *application);
162− void connectSurface(unity::shell::application::MirSurfaceInterface *surface);
163− int generateId();
164− int nextFreeId(int candidateId);
165− QString toString();
166− void onSurfaceDestroyed(unity::shell::application::MirSurfaceInterface *surface);
167− void onSurfaceDied(unity::shell::application::MirSurfaceInterface *surface);
168− void removeAt(int index);
169− void findApplicationRole();
170−
171− unity::shell::application::ApplicationInfoInterface *getApplicationFromModelAt(int index);
172−
173− /*
174− Placeholder for a future surface from a starting or running application.
175− Enables shell to give immediate feedback to the user by showing, eg,
176− a splash screen.
177−
178− It's a model row containing a null surface and the given application.
179− */
180− void appendPlaceholder(unity::shell::application::ApplicationInfoInterface *application);
181−
182− /*
183− Adds a model row with the given surface and application
184−
185− Alternatively, if a placeholder exists for the given application it's
186− filled with the given surface instead.
187− */
188− void appendSurface(unity::shell::application::MirSurfaceInterface *surface,
189− unity::shell::application::ApplicationInfoInterface *application);
190−
191− struct ModelEntry {
192− ModelEntry(unity::shell::application::MirSurfaceInterface *surface, unity::shell::application::ApplicationInfoInterface *application, int id)
193− : surface(surface), application(application), id(id) {}
194− unity::shell::application::MirSurfaceInterface *surface;
195− unity::shell::application::ApplicationInfoInterface *application;
196− int id;
197− bool removeOnceSurfaceDestroyed{false};
198− };
199−
200− QList<ModelEntry> m_surfaceList;
201− int m_nextId{1};
202− static const int m_maxId{1000000};
203−
204− // applications that are being monitored
205− QList<unity::shell::application::ApplicationInfoInterface *> m_applications;
206−
207− QAbstractListModel* m_applicationsModel{nullptr};
208− int m_applicationRole{-1};
209−
210− enum ModelState {
211− IdleState,
212− InsertingState,
213− RemovingState,
214− MovingState,
215− ResettingState
216− };
217− ModelState m_modelState{IdleState};
218−};
219−
220−Q_DECLARE_METATYPE(TopLevelSurfaceList*)
221−Q_DECLARE_METATYPE(QAbstractListModel*)
222−
223−#endif // TOPLEVELSURFACELIST_H
plugins/WindowManager/TopLevelWindowModel.cppnew file+721
@@ -0,0 +1,721 @@
1+/*
2+ * Copyright (C) 2016-2017 Canonical, Ltd.
3+ *
4+ * This program is free software: you can redistribute it and/or modify it under
5+ * the terms of the GNU Lesser General Public License version 3, as published by
6+ * the Free Software Foundation.
7+ *
8+ * This program is distributed in the hope that it will be useful, but WITHOUT
9+ * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY,
10+ * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11+ * Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "TopLevelWindowModel.h"
18+
19+// unity-api
20+#include <unity/shell/application/ApplicationInfoInterface.h>
21+#include <unity/shell/application/ApplicationManagerInterface.h>
22+#include <unity/shell/application/MirSurfaceInterface.h>
23+#include <unity/shell/application/MirSurfaceListInterface.h>
24+#include <unity/shell/application/SurfaceManagerInterface.h>
25+
26+// Qt
27+#include <QGuiApplication>
28+#include <QDebug>
29+
30+// local
31+#include "Window.h"
32+
33+Q_LOGGING_CATEGORY(TOPLEVELWINDOWMODEL, "toplevelwindowmodel", QtInfoMsg)
34+
35+#define DEBUG_MSG qCDebug(TOPLEVELWINDOWMODEL).nospace().noquote() << __func__
36+#define INFO_MSG qCInfo(TOPLEVELWINDOWMODEL).nospace().noquote() << __func__
37+
38+namespace unityapi = unity::shell::application;
39+
40+TopLevelWindowModel::TopLevelWindowModel()
41+{
42+}
43+
44+void TopLevelWindowModel::setApplicationManager(unityapi::ApplicationManagerInterface* value)
45+{
46+ if (m_applicationManager == value) {
47+ return;
48+ }
49+
50+ DEBUG_MSG << "(" << value << ")";
51+
52+ Q_ASSERT(m_modelState == IdleState);
53+ m_modelState = ResettingState;
54+
55+ beginResetModel();
56+
57+ if (m_applicationManager) {
58+ m_windowModel.clear();
59+ disconnect(m_applicationManager, 0, this, 0);
60+ }
61+
62+ m_applicationManager = value;
63+
64+ if (m_applicationManager) {
65+ connect(m_applicationManager, &QAbstractItemModel::rowsInserted,
66+ this, [this](const QModelIndex &/*parent*/, int first, int last) {
67+ for (int i = first; i <= last; ++i) {
68+ auto application = m_applicationManager->get(i);
69+ addApplication(application);
70+ }
71+ });
72+
73+ connect(m_applicationManager, &QAbstractItemModel::rowsAboutToBeRemoved,
74+ this, [this](const QModelIndex &/*parent*/, int first, int last) {
75+ for (int i = first; i <= last; ++i) {
76+ auto application = m_applicationManager->get(i);
77+ removeApplication(application);
78+ }
79+ });
80+
81+ for (int i = 0; i < m_applicationManager->rowCount(); ++i) {
82+ auto application = m_applicationManager->get(i);
83+ addApplication(application);
84+ }
85+ }
86+
87+ endResetModel();
88+ m_modelState = IdleState;
89+}
90+
91+void TopLevelWindowModel::setSurfaceManager(unityapi::SurfaceManagerInterface *surfaceManager)
92+{
93+ if (surfaceManager == m_surfaceManager) {
94+ return;
95+ }
96+
97+ DEBUG_MSG << "(" << surfaceManager << ")";
98+
99+ if (m_surfaceManager) {
100+ disconnect(m_surfaceManager, 0, this, 0);
101+ }
102+
103+ m_surfaceManager = surfaceManager;
104+
105+ if (m_surfaceManager) {
106+ connect(m_surfaceManager, &unityapi::SurfaceManagerInterface::surfaceCreated, this, &TopLevelWindowModel::onSurfaceCreated);
107+ connect(m_surfaceManager, &unityapi::SurfaceManagerInterface::surfacesRaised, this, &TopLevelWindowModel::onSurfacesRaised);
108+ connect(m_surfaceManager, &unityapi::SurfaceManagerInterface::modificationsStarted, this, &TopLevelWindowModel::onModificationsStarted);
109+ connect(m_surfaceManager, &unityapi::SurfaceManagerInterface::modificationsEnded, this, &TopLevelWindowModel::onModificationsEnded);
110+ }
111+
112+ Q_EMIT surfaceManagerChanged(m_surfaceManager);
113+}
114+
115+void TopLevelWindowModel::addApplication(unityapi::ApplicationInfoInterface *application)
116+{
117+ DEBUG_MSG << "(" << application->appId() << ")";
118+
119+ if (application->state() != unityapi::ApplicationInfoInterface::Stopped && application->surfaceList()->count() == 0) {
120+ prependPlaceholder(application);
121+ }
122+}
123+
124+void TopLevelWindowModel::removeApplication(unityapi::ApplicationInfoInterface *application)
125+{
126+ DEBUG_MSG << "(" << application->appId() << ")";
127+
128+ Q_ASSERT(m_modelState == IdleState);
129+
130+ int i = 0;
131+ while (i < m_windowModel.count()) {
132+ if (m_windowModel.at(i).application == application) {
133+ deleteAt(i);
134+ } else {
135+ ++i;
136+ }
137+ }
138+}
139+
140+void TopLevelWindowModel::prependPlaceholder(unityapi::ApplicationInfoInterface *application)
141+{
142+ INFO_MSG << "(" << application->appId() << ")";
143+
144+ prependSurfaceHelper(nullptr, application);
145+}
146+
147+void TopLevelWindowModel::prependSurface(unityapi::MirSurfaceInterface *surface, unityapi::ApplicationInfoInterface *application)
148+{
149+ Q_ASSERT(surface != nullptr);
150+
151+ connectSurface(surface);
152+
153+ bool filledPlaceholder = false;
154+ for (int i = 0; i < m_windowModel.count() && !filledPlaceholder; ++i) {
155+ ModelEntry &entry = m_windowModel[i];
156+ if (entry.application == application && entry.window->surface() == nullptr) {
157+ entry.window->setSurface(surface);
158+ INFO_MSG << " appId=" << application->appId() << " surface=" << surface
159+ << ", filling out placeholder. after: " << toString();
160+ filledPlaceholder = true;
161+ }
162+ }
163+
164+ if (!filledPlaceholder) {
165+ INFO_MSG << " appId=" << application->appId() << " surface=" << surface << ", adding new row";
166+ prependSurfaceHelper(surface, application);
167+ }
168+}
169+
170+void TopLevelWindowModel::prependSurfaceHelper(unityapi::MirSurfaceInterface *surface, unityapi::ApplicationInfoInterface *application)
171+{
172+
173+ Window *window = createWindow(surface);
174+
175+ connect(window, &Window::stateChanged, this, [=](Mir::State newState) {
176+ if (newState == Mir::HiddenState) {
177+ // Comply, removing it from our model. Just as if it didn't exist anymore.
178+ removeAt(indexForId(window->id()));
179+ } else {
180+ if (indexForId(window->id()) == -1) {
181+ // was probably hidden before. put it back on the list
182+ auto *application = m_applicationManager->findApplicationWithSurface(window->surface());
183+ Q_ASSERT(application);
184+ prependWindow(window, application);
185+ }
186+ }
187+ });
188+
189+ prependWindow(window, application);
190+
191+ if (!surface) {
192+ activateEmptyWindow(window);
193+ }
194+
195+ INFO_MSG << " after " << toString();
196+}
197+
198+void TopLevelWindowModel::prependWindow(Window *window, unityapi::ApplicationInfoInterface *application)
199+{
200+ if (m_modelState == IdleState) {
201+ m_modelState = InsertingState;
202+ beginInsertRows(QModelIndex(), 0 /*first*/, 0 /*last*/);
203+ } else {
204+ Q_ASSERT(m_modelState == ResettingState);
205+ // No point in signaling anything if we're resetting the whole model
206+ }
207+
208+ m_windowModel.prepend(ModelEntry(window, application));
209+
210+ if (m_modelState == InsertingState) {
211+ endInsertRows();
212+ Q_EMIT countChanged();
213+ Q_EMIT listChanged();
214+ m_modelState = IdleState;
215+ }
216+}
217+
218+void TopLevelWindowModel::connectWindow(Window *window)
219+{
220+ connect(window, &Window::focusRequested, this, [this, window]() {
221+ if (!window->surface()) {
222+ activateEmptyWindow(window);
223+ }
224+ });
225+
226+ connect(window, &Window::focusedChanged, this, [this, window](bool focused) {
227+ if (window->surface()) {
228+ // Condense changes to the focused window
229+ // eg: Do focusedWindow=A to focusedWindow=B instead of
230+ // focusedWindow=A to focusedWindow=null to focusedWindow=B
231+ if (focused) {
232+ Q_ASSERT(m_newlyFocusedWindow == nullptr);
233+ m_focusedWindowChanged = true;
234+ m_newlyFocusedWindow = window;
235+ } else if (m_focusedWindow == window) {
236+ m_focusedWindowChanged = true;
237+ } else {
238+ // don't clear the focused window if you were not there in the first place
239+ // happens when a filled window gets replaced with an empty one (no surface) as the focused window.
240+ }
241+ }
242+ });
243+
244+ connect(window, &Window::closeRequested, this, [this, window]() {
245+ if (!window->surface()) {
246+ // do things ourselves as miral doesn't know about this window
247+ int id = window->id();
248+ int index = indexForId(id);
249+ bool focusOther = false;
250+ Q_ASSERT(index >= 0);
251+ if (window->focused()) {
252+ focusOther = true;
253+ }
254+ m_windowModel[index].application->close();
255+ if (focusOther) {
256+ activateTopMostWindowWithoutId(id);
257+ }
258+ }
259+ });
260+
261+ connect(window, &Window::emptyWindowActivated, this, [this, window]() {
262+ activateEmptyWindow(window);
263+ });
264+
265+ connect(window, &Window::liveChanged, this, [this, window](bool isAlive) {
266+ if (!isAlive && window->state() == Mir::HiddenState) {
267+ // Hidden windows are not in the model. So just delete it right away.
268+ delete window;
269+ }
270+ });
271+}
272+
273+void TopLevelWindowModel::activateEmptyWindow(Window *window)
274+{
275+ Q_ASSERT(!window->surface());
276+ DEBUG_MSG << "(" << window << ")";
277+
278+ // miral doesn't know about empty windows (ie, windows that are not backed up by MirSurfaces)
279+ // So we have to activate them ourselves (instead of asking SurfaceManager to do it for us).
280+
281+ window->setFocused(true);
282+ raiseId(window->id());
283+ Window *previousWindow = m_focusedWindow;
284+ setFocusedWindow(window);
285+ if (previousWindow && previousWindow->surface() && previousWindow->surface()->focused()) {
286+ m_surfaceManager->activate(nullptr);
287+ }
288+}
289+
290+void TopLevelWindowModel::connectSurface(unityapi::MirSurfaceInterface *surface)
291+{
292+ connect(surface, &unityapi::MirSurfaceInterface::liveChanged, this, [this, surface](bool live){
293+ if (!live) {
294+ onSurfaceDied(surface);
295+ }
296+ });
297+ connect(surface, &QObject::destroyed, this, [this, surface](){ this->onSurfaceDestroyed(surface); });
298+}
299+
300+void TopLevelWindowModel::onSurfaceDied(unityapi::MirSurfaceInterface *surface)
301+{
302+ if (surface->type() == Mir::InputMethodType) {
303+ removeInputMethodWindow();
304+ return;
305+ }
306+
307+ int i = indexOf(surface);
308+ if (i == -1) {
309+ return;
310+ }
311+
312+ auto application = m_windowModel[i].application;
313+
314+ // can't be starting if it already has a surface
315+ Q_ASSERT(application->state() != unityapi::ApplicationInfoInterface::Starting);
316+
317+ if (application->state() == unityapi::ApplicationInfoInterface::Running) {
318+ m_windowModel[i].removeOnceSurfaceDestroyed = true;
319+ } else {
320+ // assume it got killed by the out-of-memory daemon.
321+ //
322+ // So leave entry in the model and only remove its surface, so shell can display a screenshot
323+ // in its place.
324+ m_windowModel[i].removeOnceSurfaceDestroyed = false;
325+ }
326+}
327+
328+void TopLevelWindowModel::onSurfaceDestroyed(unityapi::MirSurfaceInterface *surface)
329+{
330+ int i = indexOf(surface);
331+ if (i == -1) {
332+ return;
333+ }
334+
335+ if (m_windowModel[i].removeOnceSurfaceDestroyed) {
336+ deleteAt(i);
337+ } else {
338+ auto window = m_windowModel[i].window;
339+ window->setSurface(nullptr);
340+ window->setFocused(false);
341+ INFO_MSG << " Removed surface from entry. After: " << toString();
342+ }
343+}
344+
345+Window *TopLevelWindowModel::createWindow(unityapi::MirSurfaceInterface *surface)
346+{
347+ int id = generateId();
348+ Window *qmlWindow = new Window(id, this);
349+ connectWindow(qmlWindow);
350+ if (surface) {
351+ qmlWindow->setSurface(surface);
352+ }
353+ return qmlWindow;
354+}
355+
356+void TopLevelWindowModel::onSurfaceCreated(unityapi::MirSurfaceInterface *surface)
357+{
358+ DEBUG_MSG << "(" << surface << ")";
359+
360+ if (surface->parentSurface()) {
361+ // Wrap it in a Window so that we keep focusedWindow() up to date.
362+ Window *window = createWindow(surface);
363+ connect(surface, &QObject::destroyed, window, [=](){
364+ window->setSurface(nullptr);
365+ window->deleteLater();
366+ });
367+ } else {
368+ if (surface->type() == Mir::InputMethodType) {
369+ connectSurface(surface);
370+ setInputMethodWindow(createWindow(surface));
371+ } else {
372+ auto *application = m_applicationManager->findApplicationWithSurface(surface);
373+ if (application) {
374+ if (surface->state() == Mir::HiddenState) {
375+ // Ignore it until it's finally shown
376+ connect(surface, &unityapi::MirSurfaceInterface::stateChanged, this, [=](Mir::State newState) {
377+ Q_ASSERT(newState != Mir::HiddenState);
378+ disconnect(surface, &unityapi::MirSurfaceInterface::stateChanged, this, 0);
379+ prependSurface(surface, application);
380+ });
381+ } else {
382+ prependSurface(surface, application);
383+ }
384+ } else {
385+ // Must be a prompt session. No need to do add it as a prompt surface is not top-level.
386+ // It will show up in the ApplicationInfoInterface::promptSurfaceList of some application.
387+ // Still wrap it in a Window though, so that we keep focusedWindow() up to date.
388+ Window *promptWindow = createWindow(surface);
389+ connect(surface, &QObject::destroyed, promptWindow, [=](){
390+ promptWindow->setSurface(nullptr);
391+ promptWindow->deleteLater();
392+ });
393+ }
394+ }
395+ }
396+}
397+
398+void TopLevelWindowModel::deleteAt(int index)
399+{
400+ auto window = m_windowModel[index].window;
401+
402+ removeAt(index);
403+
404+ window->setSurface(nullptr);
405+
406+ delete window;
407+}
408+
409+void TopLevelWindowModel::removeAt(int index)
410+{
411+ if (m_modelState == IdleState) {
412+ beginRemoveRows(QModelIndex(), index, index);
413+ m_modelState = RemovingState;
414+ } else {
415+ Q_ASSERT(m_modelState == ResettingState);
416+ // No point in signaling anything if we're resetting the whole model
417+ }
418+
419+ auto window = m_windowModel[index].window;
420+
421+ if (!window->surface()) {
422+ window->setFocused(false);
423+ }
424+
425+ m_windowModel.removeAt(index);
426+
427+ if (m_modelState == RemovingState) {
428+ endRemoveRows();
429+ Q_EMIT countChanged();
430+ Q_EMIT listChanged();
431+ m_modelState = IdleState;
432+ }
433+
434+ if (m_focusedWindow == window) {
435+ setFocusedWindow(nullptr);
436+ }
437+
438+ INFO_MSG << " after " << toString();
439+}
440+
441+void TopLevelWindowModel::setInputMethodWindow(Window *window)
442+{
443+ if (m_inputMethodWindow) {
444+ qWarning("Multiple Input Method Surfaces created, removing the old one!");
445+ delete m_inputMethodWindow;
446+ }
447+ m_inputMethodWindow = window;
448+ Q_EMIT inputMethodSurfaceChanged(m_inputMethodWindow->surface());
449+}
450+
451+void TopLevelWindowModel::removeInputMethodWindow()
452+{
453+ if (m_inputMethodWindow) {
454+ delete m_inputMethodWindow;
455+ m_inputMethodWindow = nullptr;
456+ Q_EMIT inputMethodSurfaceChanged(nullptr);
457+ }
458+}
459+
460+void TopLevelWindowModel::onSurfacesRaised(const QVector<unityapi::MirSurfaceInterface*> &surfaces)
461+{
462+ DEBUG_MSG << "(" << surfaces << ")";
463+ const int raiseCount = surfaces.size();
464+ for (int i = 0; i < raiseCount; i++) {
465+ int fromIndex = findIndexOf(surfaces[i]);
466+ if (fromIndex != -1) {
467+ move(fromIndex, 0);
468+ }
469+ }
470+}
471+
472+int TopLevelWindowModel::rowCount(const QModelIndex &/*parent*/) const
473+{
474+ return m_windowModel.count();
475+}
476+
477+QVariant TopLevelWindowModel::data(const QModelIndex& index, int role) const
478+{
479+ if (index.row() < 0 || index.row() >= m_windowModel.size())
480+ return QVariant();
481+
482+ if (role == WindowRole) {
483+ Window *window = m_windowModel.at(index.row()).window;
484+ return QVariant::fromValue(window);
485+ } else if (role == ApplicationRole) {
486+ return QVariant::fromValue(m_windowModel.at(index.row()).application);
487+ } else {
488+ return QVariant();
489+ }
490+}
491+
492+int TopLevelWindowModel::findIndexOf(const unityapi::MirSurfaceInterface *surface) const
493+{
494+ for (int i=0; i<m_windowModel.count(); i++) {
495+ if (m_windowModel[i].window->surface() == surface) {
496+ return i;
497+ }
498+ }
499+ return -1;
500+}
501+
502+int TopLevelWindowModel::generateId()
503+{
504+ int id = m_nextId;
505+ m_nextId = nextFreeId(nextId(id), id);
506+ return id;
507+}
508+
509+int TopLevelWindowModel::nextId(int id) const
510+{
511+ if (id == m_maxId) {
512+ return id = 1;
513+ } else {
514+ return id + 1;
515+ }
516+}
517+
518+int TopLevelWindowModel::nextFreeId(int candidateId, const int latestId)
519+{
520+ int firstCandidateId = candidateId;
521+
522+ while (indexForId(candidateId) != -1 || candidateId == latestId) {
523+ candidateId = nextId(candidateId);
524+
525+ if (candidateId == firstCandidateId) {
526+ qFatal("TopLevelWindowModel: run out of window ids.");
527+ }
528+ }
529+
530+ return candidateId;
531+}
532+
533+QString TopLevelWindowModel::toString()
534+{
535+ QString str;
536+ for (int i = 0; i < m_windowModel.count(); ++i) {
537+ auto item = m_windowModel.at(i);
538+
539+ QString itemStr = QString("(index=%1,appId=%2,surface=0x%3,id=%4)")
540+ .arg(QString::number(i),
541+ item.application->appId(),
542+ QString::number((qintptr)item.window->surface(), 16),
543+ QString::number(item.window->id()));
544+
545+ if (i > 0) {
546+ str.append(",");
547+ }
548+ str.append(itemStr);
549+ }
550+ return str;
551+}
552+
553+int TopLevelWindowModel::indexOf(unityapi::MirSurfaceInterface *surface)
554+{
555+ for (int i = 0; i < m_windowModel.count(); ++i) {
556+ if (m_windowModel.at(i).window->surface() == surface) {
557+ return i;
558+ }
559+ }
560+ return -1;
561+}
562+
563+int TopLevelWindowModel::indexForId(int id) const
564+{
565+ for (int i = 0; i < m_windowModel.count(); ++i) {
566+ if (m_windowModel[i].window->id() == id) {
567+ return i;
568+ }
569+ }
570+ return -1;
571+}
572+
573+Window *TopLevelWindowModel::windowAt(int index) const
574+{
575+ if (index >=0 && index < m_windowModel.count()) {
576+ return m_windowModel[index].window;
577+ } else {
578+ return nullptr;
579+ }
580+}
581+
582+unityapi::MirSurfaceInterface *TopLevelWindowModel::surfaceAt(int index) const
583+{
584+ if (index >=0 && index < m_windowModel.count()) {
585+ return m_windowModel[index].window->surface();
586+ } else {
587+ return nullptr;
588+ }
589+}
590+
591+unityapi::ApplicationInfoInterface *TopLevelWindowModel::applicationAt(int index) const
592+{
593+ if (index >=0 && index < m_windowModel.count()) {
594+ return m_windowModel[index].application;
595+ } else {
596+ return nullptr;
597+ }
598+}
599+
600+int TopLevelWindowModel::idAt(int index) const
601+{
602+ if (index >=0 && index < m_windowModel.count()) {
603+ return m_windowModel[index].window->id();
604+ } else {
605+ return 0;
606+ }
607+}
608+
609+void TopLevelWindowModel::raiseId(int id)
610+{
611+ if (m_modelState == IdleState) {
612+ DEBUG_MSG << "(id=" << id << ") - do it now.";
613+ doRaiseId(id);
614+ } else {
615+ DEBUG_MSG << "(id=" << id << ") - Model busy (modelState=" << m_modelState << "). Try again in the next event loop.";
616+ // The model has just signalled some change. If we have a Repeater responding to this update, it will get nuts
617+ // if we perform yet another model change straight away.
618+ //
619+ // A bad sympton of this problem is a Repeater.itemAt(index) call returning null event though Repeater.count says
620+ // the index is definitely within bounds.
621+ QMetaObject::invokeMethod(this, "raiseId", Qt::QueuedConnection, Q_ARG(int, id));
622+ }
623+}
624+
625+void TopLevelWindowModel::doRaiseId(int id)
626+{
627+ int fromIndex = indexForId(id);
628+ // can't raise something that doesn't exist or that it's already on top
629+ if (fromIndex != -1 && fromIndex != 0) {
630+ auto surface = m_windowModel[fromIndex].window->surface();
631+ if (surface) {
632+ m_surfaceManager->raise(surface);
633+ } else {
634+ // move it ourselves. Since there's no mir::scene::Surface/miral::Window, there's nothing
635+ // miral can do about it.
636+ move(fromIndex, 0);
637+ }
638+ }
639+}
640+
641+void TopLevelWindowModel::setFocusedWindow(Window *window)
642+{
643+ if (window != m_focusedWindow) {
644+ INFO_MSG << "(" << window << ")";
645+
646+ Window* previousWindow = m_focusedWindow;
647+
648+ m_focusedWindow = window;
649+ Q_EMIT focusedWindowChanged(m_focusedWindow);
650+
651+ if (previousWindow && previousWindow->focused() && !previousWindow->surface()) {
652+ // do it ourselves. miral doesn't know about this window
653+ previousWindow->setFocused(false);
654+ }
655+ }
656+}
657+
658+unityapi::MirSurfaceInterface* TopLevelWindowModel::inputMethodSurface() const
659+{
660+ return m_inputMethodWindow ? m_inputMethodWindow->surface() : nullptr;
661+}
662+
663+Window* TopLevelWindowModel::focusedWindow() const
664+{
665+ return m_focusedWindow;
666+}
667+
668+void TopLevelWindowModel::move(int from, int to)
669+{
670+ if (from == to) return;
671+ DEBUG_MSG << " from=" << from << " to=" << to;
672+
673+ if (from >= 0 && from < m_windowModel.size() && to >= 0 && to < m_windowModel.size()) {
674+ QModelIndex parent;
675+ /* When moving an item down, the destination index needs to be incremented
676+ by one, as explained in the documentation:
677+ http://qt-project.org/doc/qt-5.0/qtcore/qabstractitemmodel.html#beginMoveRows */
678+
679+ Q_ASSERT(m_modelState == IdleState);
680+ m_modelState = MovingState;
681+
682+ beginMoveRows(parent, from, from, parent, to + (to > from ? 1 : 0));
683+#if QT_VERSION < QT_VERSION_CHECK(5, 6, 0)
684+ const auto &window = m_windowModel.takeAt(from);
685+ m_windowModel.insert(to, window);
686+#else
687+ m_windowModel.move(from, to);
688+#endif
689+ endMoveRows();
690+
691+ Q_EMIT listChanged();
692+ m_modelState = IdleState;
693+
694+ INFO_MSG << " after " << toString();
695+ }
696+}
697+void TopLevelWindowModel::onModificationsStarted()
698+{
699+}
700+
701+void TopLevelWindowModel::onModificationsEnded()
702+{
703+ if (m_focusedWindowChanged) {
704+ setFocusedWindow(m_newlyFocusedWindow);
705+ }
706+ // reset
707+ m_focusedWindowChanged = false;
708+ m_newlyFocusedWindow = nullptr;
709+}
710+
711+void TopLevelWindowModel::activateTopMostWindowWithoutId(int forbiddenId)
712+{
713+ DEBUG_MSG << "(" << forbiddenId << ")";
714+
715+ for (int i = 0; i < m_windowModel.count(); ++i) {
716+ Window *window = m_windowModel[i].window;
717+ if (window->id() != forbiddenId) {
718+ window->activate();
719+ }
720+ }
721+}
plugins/WindowManager/TopLevelWindowModel.hnew file+266
@@ -0,0 +1,266 @@
1+/*
2+ * Copyright (C) 2016-2017 Canonical, Ltd.
3+ *
4+ * This program is free software: you can redistribute it and/or modify it under
5+ * the terms of the GNU Lesser General Public License version 3, as published by
6+ * the Free Software Foundation.
7+ *
8+ * This program is distributed in the hope that it will be useful, but WITHOUT
9+ * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY,
10+ * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11+ * Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef TOPLEVELWINDOWMODEL_H
18+#define TOPLEVELWINDOWMODEL_H
19+
20+#include <QAbstractListModel>
21+#include <QLoggingCategory>
22+
23+#include "WindowManagerGlobal.h"
24+
25+Q_DECLARE_LOGGING_CATEGORY(TOPLEVELWINDOWMODEL)
26+
27+class Window;
28+
29+namespace unity {
30+ namespace shell {
31+ namespace application {
32+ class ApplicationInfoInterface;
33+ class ApplicationManagerInterface;
34+ class MirSurfaceInterface;
35+ class SurfaceManagerInterface;
36+ }
37+ }
38+}
39+
40+/**
41+ * @brief A model of top-level surfaces
42+ *
43+ * It's an abstraction of top-level application windows.
44+ *
45+ * When an entry first appears, it normaly doesn't have a surface yet, meaning that the application is
46+ * still starting up. A shell should then display a splash screen or saved screenshot of the application
47+ * until its surface comes up.
48+ *
49+ * As applications can have multiple surfaces and you can also have entries without surfaces at all,
50+ * the only way to unambiguously refer to an entry in this model is through its id.
51+ */
52+class WINDOWMANAGERQML_EXPORT TopLevelWindowModel : public QAbstractListModel
53+{
54+ Q_OBJECT
55+
56+ /**
57+ * @brief Number of top-level surfaces in this model
58+ *
59+ * This is the same as rowCount, added in order to keep compatibility with QML ListModels.
60+ */
61+ Q_PROPERTY(int count READ rowCount NOTIFY countChanged)
62+
63+ /**
64+ * @brief The input method surface, if any
65+ *
66+ * The surface of a onscreen keyboard (akak "virtual keyboard") would be kept here and not in the model itself.
67+ */
68+ Q_PROPERTY(unity::shell::application::MirSurfaceInterface* inputMethodSurface READ inputMethodSurface NOTIFY inputMethodSurfaceChanged)
69+
70+ /**
71+ * @brief The currently focused window, if any
72+ */
73+ Q_PROPERTY(Window* focusedWindow READ focusedWindow NOTIFY focusedWindowChanged)
74+
75+ Q_PROPERTY(unity::shell::application::SurfaceManagerInterface* surfaceManager
76+ READ surfaceManager
77+ WRITE setSurfaceManager
78+ NOTIFY surfaceManagerChanged)
79+
80+ Q_PROPERTY(unity::shell::application::ApplicationManagerInterface* applicationManager
81+ READ applicationManager
82+ WRITE setApplicationManager
83+ NOTIFY applicationManagerChanged)
84+
85+ /**
86+ The id to be used on the next entry created
87+ Useful for tests
88+ */
89+ Q_PROPERTY(int nextId READ nextId NOTIFY nextIdChanged)
90+
91+public:
92+ /**
93+ * @brief The Roles supported by the model
94+ *
95+ * WindowRole - A Window.
96+ * ApplicationRole - An ApplicationInfoInterface
97+ */
98+ enum Roles {
99+ WindowRole = Qt::UserRole,
100+ ApplicationRole = Qt::UserRole + 1,
101+ };
102+
103+ TopLevelWindowModel();
104+
105+ // From QAbstractItemModel
106+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
107+ QVariant data(const QModelIndex& index, int role) const override;
108+ QHash<int, QByteArray> roleNames() const override {
109+ QHash<int, QByteArray> roleNames { {WindowRole, "window"},
110+ {ApplicationRole, "application"} };
111+ return roleNames;
112+ }
113+
114+ // Own API
115+
116+ unity::shell::application::MirSurfaceInterface* inputMethodSurface() const;
117+ Window* focusedWindow() const;
118+
119+ unity::shell::application::ApplicationManagerInterface *applicationManager() const { return m_applicationManager; }
120+ void setApplicationManager(unity::shell::application::ApplicationManagerInterface*);
121+
122+ unity::shell::application::SurfaceManagerInterface *surfaceManager() const { return m_surfaceManager; }
123+ void setSurfaceManager(unity::shell::application::SurfaceManagerInterface*);
124+
125+ int nextId() const { return m_nextId; }
126+
127+public:
128+ /**
129+ * @brief Returns the surface at the given index
130+ *
131+ * It will be a nullptr if the application is still starting up and thus hasn't yet created
132+ * and drawn into a surface.
133+ *
134+ * Same as windowAt(index).surface()
135+ */
136+ Q_INVOKABLE unity::shell::application::MirSurfaceInterface *surfaceAt(int index) const;
137+
138+ /**
139+ * @brief Returns the window at the given index
140+ *
141+ * Will always be valid
142+ */
143+ Q_INVOKABLE Window *windowAt(int index) const;
144+
145+ /**
146+ * @brief Returns the application at the given index
147+ */
148+ Q_INVOKABLE unity::shell::application::ApplicationInfoInterface *applicationAt(int index) const;
149+
150+ /**
151+ * @brief Returns the unique id of the element at the given index
152+ */
153+ Q_INVOKABLE int idAt(int index) const;
154+
155+ /**
156+ * @brief Returns the index where the row with the given id is located
157+ *
158+ * Returns -1 if there's no row with the given id.
159+ */
160+ Q_INVOKABLE int indexForId(int id) const;
161+
162+ /**
163+ * @brief Raises the row with the given id to the top of the window stack (index == count-1)
164+ */
165+ Q_INVOKABLE void raiseId(int id);
166+
167+Q_SIGNALS:
168+ void countChanged();
169+ void inputMethodSurfaceChanged(unity::shell::application::MirSurfaceInterface* inputMethodSurface);
170+ void focusedWindowChanged(Window *focusedWindow);
171+ void applicationManagerChanged(unity::shell::application::ApplicationManagerInterface*);
172+ void surfaceManagerChanged(unity::shell::application::SurfaceManagerInterface*);
173+
174+ /**
175+ * @brief Emitted when the list changes
176+ *
177+ * Emitted when model gains an element, loses an element or when elements exchange positions.
178+ */
179+ void listChanged();
180+
181+ void nextIdChanged();
182+
183+private Q_SLOTS:
184+ void onSurfaceCreated(unity::shell::application::MirSurfaceInterface *surface);
185+ void onSurfacesRaised(const QVector<unity::shell::application::MirSurfaceInterface*> &surfaces);
186+
187+ void onModificationsStarted();
188+ void onModificationsEnded();
189+
190+private:
191+ void doRaiseId(int id);
192+ int generateId();
193+ int nextFreeId(int candidateId, const int latestId);
194+ int nextId(int id) const;
195+ QString toString();
196+ int indexOf(unity::shell::application::MirSurfaceInterface *surface);
197+
198+ void setInputMethodWindow(Window *window);
199+ void setFocusedWindow(Window *window);
200+ void removeInputMethodWindow();
201+ int findIndexOf(const unity::shell::application::MirSurfaceInterface *surface) const;
202+ void deleteAt(int index);
203+ void removeAt(int index);
204+
205+ void addApplication(unity::shell::application::ApplicationInfoInterface *application);
206+ void removeApplication(unity::shell::application::ApplicationInfoInterface *application);
207+
208+ void prependPlaceholder(unity::shell::application::ApplicationInfoInterface *application);
209+ void prependSurface(unity::shell::application::MirSurfaceInterface *surface,
210+ unity::shell::application::ApplicationInfoInterface *application);
211+ void prependSurfaceHelper(unity::shell::application::MirSurfaceInterface *surface,
212+ unity::shell::application::ApplicationInfoInterface *application);
213+ void prependWindow(Window *window, unity::shell::application::ApplicationInfoInterface *application);
214+
215+ void connectWindow(Window *window);
216+ void connectSurface(unity::shell::application::MirSurfaceInterface *surface);
217+
218+ void onSurfaceDied(unity::shell::application::MirSurfaceInterface *surface);
219+ void onSurfaceDestroyed(unity::shell::application::MirSurfaceInterface *surface);
220+
221+ void move(int from, int to);
222+
223+ void activateEmptyWindow(Window *window);
224+
225+ void activateTopMostWindowWithoutId(int forbiddenId);
226+
227+ Window *createWindow(unity::shell::application::MirSurfaceInterface *surface);
228+
229+ struct ModelEntry {
230+ ModelEntry() {}
231+ ModelEntry(Window *window,
232+ unity::shell::application::ApplicationInfoInterface *application)
233+ : window(window), application(application) {}
234+ Window *window{nullptr};
235+ unity::shell::application::ApplicationInfoInterface *application{nullptr};
236+ bool removeOnceSurfaceDestroyed{false};
237+ };
238+
239+ QVector<ModelEntry> m_windowModel;
240+ Window* m_inputMethodWindow{nullptr};
241+ Window* m_focusedWindow{nullptr};
242+
243+ int m_nextId{1};
244+ // Just something big enough that we don't risk running out of unused id numbers.
245+ // Not sure if QML int type supports something close to std::numeric_limits<int>::max() and
246+ // there's no reason to try out its limits.
247+ static const int m_maxId{1000000};
248+
249+ unity::shell::application::ApplicationManagerInterface* m_applicationManager{nullptr};
250+ unity::shell::application::SurfaceManagerInterface *m_surfaceManager{nullptr};
251+
252+ enum ModelState {
253+ IdleState,
254+ InsertingState,
255+ RemovingState,
256+ MovingState,
257+ ResettingState
258+ };
259+ ModelState m_modelState{IdleState};
260+
261+ // Valid between modificationsStarted and modificationsEnded
262+ bool m_focusedWindowChanged{false};
263+ Window *m_newlyFocusedWindow{nullptr};
264+};
265+
266+#endif // TOPLEVELWINDOWMODEL_H
plugins/WindowManager/Window.cppnew file+268
@@ -0,0 +1,268 @@
1+/*
2+ * Copyright (C) 2016-2017 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 "Window.h"
18+
19+// unity-api
20+#include <unity/shell/application/MirSurfaceInterface.h>
21+
22+#include <QQmlEngine>
23+#include <QTextStream>
24+
25+namespace unityapi = unity::shell::application;
26+
27+Q_LOGGING_CATEGORY(UNITY_WINDOW, "unity.window", QtWarningMsg)
28+
29+#define DEBUG_MSG qCDebug(UNITY_WINDOW).nospace() << qPrintable(toString()) << "::" << __func__
30+
31+Window::Window(int id, QObject *parent)
32+ : QObject(parent)
33+ , m_id(id)
34+{
35+ DEBUG_MSG << "()";
36+ QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership);
37+}
38+
39+Window::~Window()
40+{
41+ DEBUG_MSG << "()";
42+}
43+
44+QPoint Window::position() const
45+{
46+ return m_position;
47+}
48+
49+QPoint Window::requestedPosition() const
50+{
51+ return m_requestedPosition;
52+}
53+
54+void Window::setRequestedPosition(const QPoint &value)
55+{
56+ m_positionRequested = true;
57+ if (value != m_requestedPosition) {
58+ m_requestedPosition = value;
59+ Q_EMIT requestedPositionChanged(m_requestedPosition);
60+ if (m_surface) {
61+ m_surface->setRequestedPosition(value);
62+ } else {
63+ // fake-miral: always comply
64+ m_position = m_requestedPosition;
65+ Q_EMIT positionChanged(m_position);
66+ }
67+ }
68+}
69+
70+bool Window::allowClientResize() const
71+{
72+ return m_allowClientResize;
73+}
74+
75+void Window::setAllowClientResize(bool value)
76+{
77+ if (value != m_allowClientResize) {
78+ DEBUG_MSG << "("<<value<<")";
79+ m_allowClientResize = value;
80+ if (m_surface) {
81+ m_surface->setAllowClientResize(value);
82+ }
83+ Q_EMIT allowClientResizeChanged(m_allowClientResize);
84+ }
85+}
86+
87+Mir::State Window::state() const
88+{
89+ return m_state;
90+}
91+
92+bool Window::focused() const
93+{
94+ return m_focused;
95+}
96+
97+bool Window::confinesMousePointer() const
98+{
99+ if (m_surface) {
100+ return m_surface->confinesMousePointer();
101+ } else {
102+ return false;
103+ }
104+}
105+
106+int Window::id() const
107+{
108+ return m_id;
109+}
110+
111+unityapi::MirSurfaceInterface* Window::surface() const
112+{
113+ return m_surface;
114+}
115+
116+void Window::requestState(Mir::State state)
117+{
118+ m_stateRequested = true;
119+ if (m_surface) {
120+ m_surface->requestState(state);
121+ } else if (m_state != state) {
122+ m_state = state;
123+ Q_EMIT stateChanged(m_state);
124+ }
125+}
126+
127+void Window::close()
128+{
129+ if (m_surface) {
130+ m_surface->close();
131+ } else {
132+ Q_EMIT closeRequested();
133+ }
134+}
135+
136+void Window::activate()
137+{
138+ DEBUG_MSG << "()";
139+ if (m_surface) {
140+ m_surface->activate();
141+ } else {
142+ Q_EMIT emptyWindowActivated();
143+ }
144+}
145+
146+void Window::setSurface(unityapi::MirSurfaceInterface *surface)
147+{
148+ DEBUG_MSG << "(" << surface << ")";
149+ if (m_surface) {
150+ disconnect(m_surface, 0, this, 0);
151+ }
152+
153+ m_surface = surface;
154+
155+ if (m_surface) {
156+ connect(surface, &unityapi::MirSurfaceInterface::focusRequested, this, [this]() {
157+ Q_EMIT focusRequested();
158+ });
159+
160+ connect(surface, &unityapi::MirSurfaceInterface::closeRequested, this, &Window::closeRequested);
161+
162+ connect(surface, &unityapi::MirSurfaceInterface::positionChanged, this, [this]() {
163+ updatePosition();
164+ });
165+
166+ connect(surface, &unityapi::MirSurfaceInterface::stateChanged, this, [this]() {
167+ updateState();
168+ });
169+
170+ connect(surface, &unityapi::MirSurfaceInterface::focusedChanged, this, [this]() {
171+ updateFocused();
172+ });
173+
174+ connect(surface, &unityapi::MirSurfaceInterface::allowClientResizeChanged, this, [this]() {
175+ if (m_surface->allowClientResize() != m_allowClientResize) {
176+ m_allowClientResize = m_surface->allowClientResize();
177+ Q_EMIT allowClientResizeChanged(m_allowClientResize);
178+ }
179+ });
180+
181+ connect(surface, &unityapi::MirSurfaceInterface::liveChanged, this, &Window::liveChanged);
182+
183+ connect(surface, &QObject::destroyed, this, [this]() {
184+ setSurface(nullptr);
185+ });
186+
187+ // bring it up to speed
188+ if (m_positionRequested) {
189+ m_surface->setRequestedPosition(m_requestedPosition);
190+ }
191+ if (m_stateRequested && m_surface->state() == Mir::RestoredState) {
192+ m_surface->requestState(m_state);
193+ }
194+ m_surface->setAllowClientResize(m_allowClientResize);
195+
196+ // and sync with surface
197+ updatePosition();
198+ updateState();
199+ updateFocused();
200+ }
201+
202+ Q_EMIT surfaceChanged(surface);
203+}
204+
205+void Window::updatePosition()
206+{
207+ if (m_surface->position() != m_position) {
208+ m_position = m_surface->position();
209+ Q_EMIT positionChanged(m_position);
210+ }
211+}
212+
213+void Window::updateState()
214+{
215+ if (m_surface->state() != m_state) {
216+ m_state = m_surface->state();
217+ Q_EMIT stateChanged(m_state);
218+ }
219+}
220+
221+void Window::updateFocused()
222+{
223+ if (m_surface->focused() != m_focused) {
224+ m_focused = m_surface->focused();
225+ Q_EMIT focusedChanged(m_focused);
226+ }
227+}
228+
229+void Window::setFocused(bool value)
230+{
231+ if (value != m_focused) {
232+ DEBUG_MSG << "(" << value << ")";
233+ m_focused = value;
234+ Q_EMIT focusedChanged(m_focused);
235+ // when we have a surface we get focus changes from updateFocused() instead
236+ Q_ASSERT(!m_surface);
237+ }
238+}
239+
240+QString Window::toString() const
241+{
242+ QString result;
243+ {
244+ QTextStream stream(&result);
245+ stream << "Window["<<(void*)this<<", id="<<id()<<", ";
246+ if (surface()) {
247+ stream << "MirSurface["<<(void*)surface()<<",\""<<surface()->name()<<"\"]";
248+ } else {
249+ stream << "null";
250+ }
251+ stream << "]";
252+ }
253+ return result;
254+}
255+
256+QDebug operator<<(QDebug dbg, const Window *window)
257+{
258+ QDebugStateSaver saver(dbg);
259+ dbg.nospace();
260+
261+ if (window) {
262+ dbg << qPrintable(window->toString());
263+ } else {
264+ dbg << (void*)(window);
265+ }
266+
267+ return dbg;
268+}
plugins/WindowManager/Window.hnew file+176
@@ -0,0 +1,176 @@
1+/*
2+ * Copyright (C) 2016-2017 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef UNITY_WINDOW_H
18+#define UNITY_WINDOW_H
19+
20+#include <QLoggingCategory>
21+#include <QObject>
22+#include <QPoint>
23+
24+// Unity API
25+#include <unity/shell/application/Mir.h>
26+
27+#include "WindowManagerGlobal.h"
28+
29+namespace unity {
30+ namespace shell {
31+ namespace application {
32+ class MirSurfaceInterface;
33+ }
34+ }
35+}
36+
37+Q_DECLARE_LOGGING_CATEGORY(UNITY_WINDOW)
38+
39+/**
40+ @brief A slightly higher concept than MirSurface
41+
42+ A Window exists before its MirSurface gets created (for splashscreen purposes)
43+ and might also hang around after the backing surface is gone (In case the application
44+ was killed to free up memory, as it should still remain in the window list since the user
45+ did not explicitly close it).
46+ */
47+class WINDOWMANAGERQML_EXPORT Window : public QObject
48+{
49+ Q_OBJECT
50+
51+ /**
52+ * @brief Position of the current surface buffer, in pixels.
53+ */
54+ Q_PROPERTY(QPoint position READ position NOTIFY positionChanged)
55+
56+ /**
57+ * @brief Requested position of the current surface buffer, in pixels.
58+ */
59+ Q_PROPERTY(QPoint requestedPosition READ requestedPosition WRITE setRequestedPosition NOTIFY requestedPositionChanged)
60+
61+ /**
62+ * @brief State of the surface
63+ */
64+ Q_PROPERTY(Mir::State state READ state NOTIFY stateChanged)
65+
66+ /**
67+ * @brief Whether the surface is focused
68+ *
69+ * It will be true if this surface is MirFocusControllerInterface::focusedSurface
70+ */
71+ Q_PROPERTY(bool focused READ focused NOTIFY focusedChanged)
72+
73+ /**
74+ * @brief Whether the surface wants to confine the mouse pointer within its boundaries
75+ *
76+ * If true, the surface doesn't want the mouse pointer to leave its boundaries while it's focused.
77+ */
78+ Q_PROPERTY(bool confinesMousePointer READ confinesMousePointer NOTIFY confinesMousePointerChanged)
79+
80+ /**
81+ * @brief A unique identifier for this window.
82+ * Useful for telling windows apart in a list model as they get moved around
83+ */
84+ Q_PROPERTY(int id READ id CONSTANT)
85+
86+ /**
87+ * @brief Surface backing up this window
88+ * It might be null if a surface hasn't been created yet (application is starting up) or if
89+ * the corresponding application has been killed (but can still get restarted to continue from
90+ * where it left)
91+ */
92+ Q_PROPERTY(unity::shell::application::MirSurfaceInterface* surface READ surface NOTIFY surfaceChanged)
93+
94+ /**
95+ * @brief Whether to comply to resize requests coming from the client side
96+ *
97+ * It's true by default
98+ */
99+ Q_PROPERTY(bool allowClientResize READ allowClientResize WRITE setAllowClientResize NOTIFY allowClientResizeChanged)
100+
101+public:
102+ Window(int id, QObject *parent = nullptr);
103+ virtual ~Window();
104+ QPoint position() const;
105+ QPoint requestedPosition() const;
106+ void setRequestedPosition(const QPoint &);
107+ Mir::State state() const;
108+ bool focused() const;
109+ bool confinesMousePointer() const;
110+ int id() const;
111+ unity::shell::application::MirSurfaceInterface* surface() const;
112+
113+ void setSurface(unity::shell::application::MirSurfaceInterface *surface);
114+ void setFocused(bool value);
115+
116+ bool allowClientResize() const;
117+ void setAllowClientResize(bool);
118+
119+ QString toString() const;
120+
121+public Q_SLOTS:
122+ /**
123+ * @brief Requests a change to the specified state
124+ */
125+ void requestState(Mir::State state);
126+
127+ /**
128+ * @brief Sends a close request
129+ *
130+ */
131+ void close();
132+
133+ /**
134+ * @brief Focuses and raises the window
135+ */
136+ void activate();
137+
138+Q_SIGNALS:
139+ void closeRequested();
140+ void emptyWindowActivated();
141+
142+ void positionChanged(QPoint position);
143+ void requestedPositionChanged(QPoint position);
144+ void stateChanged(Mir::State value);
145+ void focusedChanged(bool value);
146+ void confinesMousePointerChanged(bool value);
147+ void surfaceChanged(unity::shell::application::MirSurfaceInterface *surface);
148+ void allowClientResizeChanged(bool value);
149+ void liveChanged(bool value);
150+
151+ /**
152+ * @brief Emitted when focus for this window is requested by an external party
153+ */
154+ void focusRequested();
155+
156+private:
157+ void updatePosition();
158+ void updateState();
159+ void updateFocused();
160+
161+ QPoint m_position;
162+ QPoint m_requestedPosition;
163+ bool m_positionRequested{false};
164+ bool m_focused{false};
165+ int m_id;
166+ Mir::State m_state{Mir::RestoredState};
167+ bool m_stateRequested{false};
168+ unity::shell::application::MirSurfaceInterface *m_surface{nullptr};
169+
170+ bool m_allowClientResize{true};
171+};
172+
173+QDebug operator<<(QDebug dbg, const Window *window);
174+
175+Q_DECLARE_METATYPE(Window*)
176+#endif // UNITY_WINDOW_H
tests/mocks/LightDM/IntegratedLightDM/QLightDM/Greeter → plugins/WindowManager/WindowManagerGlobal.hrenamed+8−2
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2014 Canonical, Ltd.
2+ * Copyright (C) 2017 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
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
5 * it under the terms of the GNU General Public License as published by
@@ -14,4 +14,10 @@
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
15 */
16
16
17−#include "../liblightdm/Greeter.h"
17+#include <QtCore/QtGlobal>
18+
19+#if defined(WINDOWMANAGERQML_LIBRARY)
20+# define WINDOWMANAGERQML_EXPORT Q_DECL_EXPORT
21+#else
22+# define WINDOWMANAGERQML_EXPORT Q_DECL_IMPORT
23+#endif
plugins/WindowManager/WindowManagerPlugin.cpp+10−3
@@ -1,5 +1,5 @@
1/*
1/*
2− * Copyright (C) 2016 Canonical, Ltd.
2+ * Copyright (C) 2016-2017 Canonical, Ltd.
3 *
3 *
4 * This program is free software; you can redistribute it and/or modify
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
5 * it under the terms of the GNU General Public License as published by
@@ -16,13 +16,20 @@
16
16
17#include "WindowManagerPlugin.h"
17#include "WindowManagerPlugin.h"
18
18
19−#include "TopLevelSurfaceList.h"
19+#include "AvailableDesktopArea.h"
20+#include "TopLevelWindowModel.h"
21+#include "Window.h"
22+#include "WindowMargins.h"
20
23
21#include <QtQml>
24#include <QtQml>
22
25
23void WindowManagerPlugin::registerTypes(const char *uri)
26void WindowManagerPlugin::registerTypes(const char *uri)
24{
27{
25− qmlRegisterType<TopLevelSurfaceList>(uri, 0, 1, "TopLevelSurfaceList");
28+ qmlRegisterType<AvailableDesktopArea>(uri, 1, 0, "AvailableDesktopArea");
29+ qmlRegisterType<TopLevelWindowModel>(uri, 1, 0, "TopLevelWindowModel");
30+ qmlRegisterType<WindowMargins>(uri, 1, 0, "WindowMargins");
31+
32+ qRegisterMetaType<Window*>("Window*");
26
33
27 qRegisterMetaType<QAbstractListModel*>("QAbstractListModel*");
34 qRegisterMetaType<QAbstractListModel*>("QAbstractListModel*");
28}
35}
plugins/WindowManager/WindowMargins.cppnew file+74
@@ -0,0 +1,74 @@
1+/*
2+ * Copyright (C) 2017 Canonical, Ltd.
3+ *
4+ * This program is free software: you can redistribute it and/or modify it under
5+ * the terms of the GNU Lesser General Public License version 3, as published by
6+ * the Free Software Foundation.
7+ *
8+ * This program is distributed in the hope that it will be useful, but WITHOUT
9+ * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY,
10+ * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11+ * Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#include "WindowMargins.h"
18+
19+#include <QGuiApplication>
20+#include <QQuickWindow>
21+#include <qpa/qplatformnativeinterface.h>
22+
23+void WindowMargins::setNormal(QRectF value)
24+{
25+ if (m_normal == value) {
26+ return;
27+ }
28+
29+ m_normal = value;
30+
31+ if (window()) {
32+ QPlatformNativeInterface *nativeInterface = QGuiApplication::platformNativeInterface();
33+ nativeInterface->setWindowProperty(window()->handle(), "normalWindowMargins", QVariant(m_normal.toRect()));
34+ }
35+
36+ Q_EMIT normalChanged();
37+}
38+
39+QRectF WindowMargins::normal() const
40+{
41+ return m_normal;
42+}
43+
44+void WindowMargins::setDialog(QRectF value)
45+{
46+ if (m_dialog == value) {
47+ return;
48+ }
49+
50+ m_dialog = value;
51+
52+ if (window()) {
53+ QPlatformNativeInterface *nativeInterface = QGuiApplication::platformNativeInterface();
54+ nativeInterface->setWindowProperty(window()->handle(), "dialogWindowMargins", QVariant(m_dialog.toRect()));
55+ }
56+
57+ Q_EMIT dialogChanged();
58+}
59+
60+QRectF WindowMargins::dialog() const
61+{
62+ return m_dialog;
63+}
64+
65+void WindowMargins::itemChange(ItemChange change, const ItemChangeData &data)
66+{
67+ if (change == ItemSceneChange && data.window != nullptr) {
68+ QPlatformNativeInterface *nativeInterface = QGuiApplication::platformNativeInterface();
69+ if (!m_normal.isNull()) {
70+ nativeInterface->setWindowProperty(data.window->handle(), "normalWindowMargins", QVariant(m_normal.toRect()));
71+ nativeInterface->setWindowProperty(data.window->handle(), "dialogWindowMargins", QVariant(m_dialog.toRect()));
72+ }
73+ }
74+}
plugins/WindowManager/WindowMargins.hnew file+59
@@ -0,0 +1,59 @@
1+/*
2+ * Copyright (C) 2017 Canonical, Ltd.
3+ *
4+ * This program is free software: you can redistribute it and/or modify it under
5+ * the terms of the GNU Lesser General Public License version 3, as published by
6+ * the Free Software Foundation.
7+ *
8+ * This program is distributed in the hope that it will be useful, but WITHOUT
9+ * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY,
10+ * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11+ * Lesser General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU Lesser General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef WINDOWMARGINS_H
18+#define WINDOWMARGINS_H
19+
20+#include <QQuickItem>
21+#include <QRectF>
22+
23+/*
24+ * Specifies window margins for different Mir window types
25+ *
26+ * Used to inform MirAL so that it can take window management decisions that match
27+ * the visuals drawn by Unity.
28+ */
29+class WindowMargins : public QQuickItem
30+{
31+ Q_OBJECT
32+
33+ // Margins for windows of normal type
34+ Q_PROPERTY(QRectF normal READ normal WRITE setNormal NOTIFY normalChanged)
35+
36+ // Margins for windows of dialog type
37+ Q_PROPERTY(QRectF dialog READ dialog WRITE setDialog NOTIFY dialogChanged)
38+
39+ // TODO: Add margins for other window types as needed
40+
41+public:
42+ QRectF normal() const;
43+ void setNormal(QRectF value);
44+
45+ QRectF dialog() const;
46+ void setDialog(QRectF value);
47+
48+protected:
49+ void itemChange(ItemChange change, const ItemChangeData &value) override;
50+
51+Q_SIGNALS:
52+ void normalChanged();
53+ void dialogChanged();
54+private:
55+ QRectF m_normal;
56+ QRectF m_dialog;
57+};
58+
59+#endif // WINDOWMARGINS_H
plugins/Wizard/PageList.cpp+5−6
@@ -46,7 +46,9 @@ PageList::PageList(QObject *parent)
46 QSet<QString> disabledPages;
46 QSet<QString> disabledPages;
47 QStringList dataDirs;
47 QStringList dataDirs;
48
48
49− if (!isRunningInstalled() && getenv("WIZARD_TESTING") == nullptr) {
49+ if (getenv("WIZARD_TESTING") != nullptr) {
50+ dataDirs = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation);
51+ } else if (!isRunningInstalled()) {
50 dataDirs << qmlDirectory();
52 dataDirs << qmlDirectory();
51 } else {
53 } else {
52 dataDirs = shellDataDirs();
54 dataDirs = shellDataDirs();
@@ -71,11 +73,8 @@ PageList::PageList(QObject *parent)
71 // If there was a system update installed, skip until the last page to just greet the user
73 // If there was a system update installed, skip until the last page to just greet the user
72 QSettings settings;
74 QSettings settings;
73 if (settings.value(QStringLiteral("Wizard/SkipUntilFinishedPage")).toBool()) {
75 if (settings.value(QStringLiteral("Wizard/SkipUntilFinishedPage")).toBool()) {
74− const QString lastPage = m_pages.lastKey();
76+ while (m_pages.count() > 1) {
75− Q_FOREACH(const QString &page, m_pages.keys()) {
77+ m_pages.erase(m_pages.begin());
76− if (Q_UNLIKELY(page != lastPage)) {
77− m_pages.remove(page);
78− }
79 }
78 }
80
79
81 // ... and reset it again for the next run
80 // ... and reset it again for the next run
plugins/Wizard/timezonemodel.h+1−1
@@ -27,7 +27,6 @@ class TimeZoneLocationModel: public QAbstractListModel
27 Q_PROPERTY(bool listUpdating READ listUpdating NOTIFY listUpdatingChanged)
27 Q_PROPERTY(bool listUpdating READ listUpdating NOTIFY listUpdatingChanged)
28 Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged)
28 Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged)
29 Q_PROPERTY(QString country READ country WRITE setCountry NOTIFY countryChanged)
29 Q_PROPERTY(QString country READ country WRITE setCountry NOTIFY countryChanged)
30− Q_ENUMS(Roles)
31
30
32public:
31public:
33 explicit TimeZoneLocationModel(QObject *parent = nullptr);
32 explicit TimeZoneLocationModel(QObject *parent = nullptr);
@@ -42,6 +41,7 @@ public:
42 LatitudeRole,
41 LatitudeRole,
43 LongitudeRole
42 LongitudeRole
44 };
43 };
44+ Q_ENUM(Roles)
45
45
46 int rowCount(const QModelIndex &parent = QModelIndex()) const override;
46 int rowCount(const QModelIndex &parent = QModelIndex()) const override;
47 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
47 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
po/aa.po+184−137
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-11-16 10:44+0000\n"
10+"POT-Creation-Date: 2017-04-04 22:56+0000\n"
11"PO-Revision-Date: 2016-02-12 10:18+0000\n"
11"PO-Revision-Date: 2016-02-12 10:18+0000\n"
12"Last-Translator: Charif AYFARAH <ayfarah@ymail.com>\n"
12"Last-Translator: Charif AYFARAH <ayfarah@ymail.com>\n"
13"Language-Team: Afar <aa@li.org>\n"
13"Language-Team: Afar <aa@li.org>\n"
@@ -15,86 +15,114 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-11-23 06:34+0000\n"
18+"X-Launchpad-Export-Date: 2017-04-07 06:29+0000\n"
19−"X-Generator: Launchpad (build 18269)\n"
19+"X-Generator: Launchpad (build 18343)\n"
20
20
21−#: plugins/LightDM/Greeter.cpp:123
21+#: plugins/LightDM/Greeter.cpp:188
22msgid "Password: "
22msgid "Password: "
23msgstr "Cuumita "
23msgstr "Cuumita "
24
24
25+#: plugins/LightDM/Greeter.cpp:203
26+msgid "Username"
27+msgstr ""
28+
29+#: plugins/LightDM/Greeter.cpp:242
30+msgid "Failed to authenticate"
31+msgstr ""
32+
33+#: plugins/LightDM/Greeter.cpp:244
34+msgid "Invalid password, please try again"
35+msgstr ""
36+
37+#: plugins/LightDM/Greeter.cpp:254
38+msgid "Log In"
39+msgstr ""
40+
41+#: plugins/LightDM/Greeter.cpp:254
42+msgid "Retry"
43+msgstr "Qagis"
44+
45+#: plugins/LightDM/UsersModel.cpp:157
46+msgid "Login"
47+msgstr ""
48+
49+#: plugins/LightDM/UsersModel.cpp:165
50+msgid "Guest Session"
51+msgstr ""
52+
25#: plugins/Unity/Launcher/launcheritem.cpp:49
53#: plugins/Unity/Launcher/launcheritem.cpp:49
26−#: plugins/Unity/Launcher/launcheritem.cpp:108
54+#: plugins/Unity/Launcher/launcheritem.cpp:123
27msgid "Pin shortcut"
55msgid "Pin shortcut"
28msgstr ""
56msgstr ""
29
57
30−#: plugins/Unity/Launcher/launcheritem.cpp:54
58+#: plugins/Unity/Launcher/launcheritem.cpp:55
31msgid "Quit"
59msgid "Quit"
32msgstr "Kat"
60msgstr "Kat"
33
61
34−#: plugins/Unity/Launcher/launcheritem.cpp:108
62+#: plugins/Unity/Launcher/launcheritem.cpp:123
35msgid "Unpin shortcut"
63msgid "Unpin shortcut"
36msgstr ""
64msgstr ""
37
65
38−#: qml/Components/Dialogs.qml:149
66+#: qml/Components/Dialogs.qml:176
39msgctxt "Title: Lock/Log out dialog"
67msgctxt "Title: Lock/Log out dialog"
40msgid "Log out"
68msgid "Log out"
41msgstr "Eweq"
69msgstr "Eweq"
42
70
43−#: qml/Components/Dialogs.qml:150
71+#: qml/Components/Dialogs.qml:177
44msgid "Are you sure you want to log out?"
72msgid "Are you sure you want to log out?"
45msgstr ""
73msgstr ""
46
74
47−#: qml/Components/Dialogs.qml:152
75+#: qml/Components/Dialogs.qml:180
48msgctxt "Button: Lock the system"
76msgctxt "Button: Lock the system"
49msgid "Lock"
77msgid "Lock"
50msgstr "Koflis"
78msgstr "Koflis"
51
79
52−#: qml/Components/Dialogs.qml:159
80+#: qml/Components/Dialogs.qml:191
53msgctxt "Button: Log out from the system"
81msgctxt "Button: Log out from the system"
54msgid "Log Out"
82msgid "Log Out"
55msgstr "Eweq"
83msgstr "Eweq"
56
84
57−#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
85+#: qml/Components/Dialogs.qml:199 qml/Components/Dialogs.qml:264
58−#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
86+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:208
59#: qml/Wizard/Pages/passcode-confirm.qml:32
87#: qml/Wizard/Pages/passcode-confirm.qml:32
60#: qml/Wizard/Pages/passcode-set.qml:32
88#: qml/Wizard/Pages/passcode-set.qml:32
61msgid "Cancel"
89msgid "Cancel"
62msgstr "Bayis"
90msgstr "Bayis"
63
91
64−#: qml/Components/Dialogs.qml:178
92+#: qml/Components/Dialogs.qml:211
65msgctxt "Title: Reboot dialog"
93msgctxt "Title: Reboot dialog"
66msgid "Reboot"
94msgid "Reboot"
67msgstr "Wadir-ugus"
95msgstr "Wadir-ugus"
68
96
69−#: qml/Components/Dialogs.qml:179
97+#: qml/Components/Dialogs.qml:212
70msgid "Are you sure you want to reboot?"
98msgid "Are you sure you want to reboot?"
71msgstr "Wadir-ugussuh digga maay litoo?"
99msgstr "Wadir-ugussuh digga maay litoo?"
72
100
73−#: qml/Components/Dialogs.qml:181
101+#: qml/Components/Dialogs.qml:215
74msgid "No"
102msgid "No"
75msgstr "Maleey"
103msgstr "Maleey"
76
104
77−#: qml/Components/Dialogs.qml:187
105+#: qml/Components/Dialogs.qml:223
78msgid "Yes"
106msgid "Yes"
79msgstr "Yeey"
107msgstr "Yeey"
80
108
81−#: qml/Components/Dialogs.qml:202
109+#: qml/Components/Dialogs.qml:239
82msgctxt "Title: Power off/Restart dialog"
110msgctxt "Title: Power off/Restart dialog"
83msgid "Power"
111msgid "Power"
84msgstr "Cayla"
112msgstr "Cayla"
85
113
86−#: qml/Components/Dialogs.qml:203
114+#: qml/Components/Dialogs.qml:240
87msgid ""
115msgid ""
88"Are you sure you would like\n"
116"Are you sure you would like\n"
89"to power off?"
117"to power off?"
90msgstr "Timmi haytuh digga maay litoo?"
118msgstr "Timmi haytuh digga maay litoo?"
91
119
92−#: qml/Components/Dialogs.qml:205
120+#: qml/Components/Dialogs.qml:244
93msgctxt "Button: Power off the system"
121msgctxt "Button: Power off the system"
94msgid "Power off"
122msgid "Power off"
95msgstr "Timmi hayis"
123msgstr "Timmi hayis"
96
124
97−#: qml/Components/Dialogs.qml:214
125+#: qml/Components/Dialogs.qml:255
98msgctxt "Button: Restart the system"
126msgctxt "Button: Restart the system"
99msgid "Restart"
127msgid "Restart"
100msgstr "Wadir-qimbis"
128msgstr "Wadir-qimbis"
@@ -120,7 +148,7 @@ msgid "Alt + PrtScr"
120msgstr ""
148msgstr ""
121
149
122#: qml/Components/KeyboardShortcutsOverlay.qml:80
150#: qml/Components/KeyboardShortcutsOverlay.qml:80
123−msgid "Takes a screenshot of a window."
151+msgid "Takes a screenshot of the current window."
124msgstr ""
152msgstr ""
125
153
126#: qml/Components/KeyboardShortcutsOverlay.qml:88
154#: qml/Components/KeyboardShortcutsOverlay.qml:88
@@ -139,127 +167,143 @@ msgstr ""
139msgid "Switches to previous keyboard layout."
167msgid "Switches to previous keyboard layout."
140msgstr ""
168msgstr ""
141
169
142−#: qml/Components/KeyboardShortcutsOverlay.qml:118
170+#: qml/Components/KeyboardShortcutsOverlay.qml:114
171+msgid "Ctrl + Alt + T"
172+msgstr ""
173+
174+#: qml/Components/KeyboardShortcutsOverlay.qml:119
175+msgid "Starts the Terminal application."
176+msgstr ""
177+
178+#: qml/Components/KeyboardShortcutsOverlay.qml:131
143msgid "Launcher"
179msgid "Launcher"
144msgstr ""
180msgstr ""
145
181
146−#: qml/Components/KeyboardShortcutsOverlay.qml:125
182+#: qml/Components/KeyboardShortcutsOverlay.qml:138
147msgid "Super (Hold)"
183msgid "Super (Hold)"
148msgstr ""
184msgstr ""
149
185
150−#: qml/Components/KeyboardShortcutsOverlay.qml:130
186+#: qml/Components/KeyboardShortcutsOverlay.qml:143
151msgid "Opens the launcher, displays shortcuts."
187msgid "Opens the launcher, displays shortcuts."
152msgstr ""
188msgstr ""
153
189
154−#: qml/Components/KeyboardShortcutsOverlay.qml:138
190+#: qml/Components/KeyboardShortcutsOverlay.qml:151
155msgid "Alt + F1"
191msgid "Alt + F1"
156msgstr ""
192msgstr ""
157
193
158−#: qml/Components/KeyboardShortcutsOverlay.qml:143
194+#: qml/Components/KeyboardShortcutsOverlay.qml:156
159msgid "Opens launcher keyboard navigation mode."
195msgid "Opens launcher keyboard navigation mode."
160msgstr ""
196msgstr ""
161
197
162−#: qml/Components/KeyboardShortcutsOverlay.qml:151
198+#: qml/Components/KeyboardShortcutsOverlay.qml:164
163msgid "Super + Tab"
199msgid "Super + Tab"
164msgstr ""
200msgstr ""
165
201
166−#: qml/Components/KeyboardShortcutsOverlay.qml:156
202+#: qml/Components/KeyboardShortcutsOverlay.qml:169
167msgid "Switches applications via the launcher."
203msgid "Switches applications via the launcher."
168msgstr ""
204msgstr ""
169
205
170−#: qml/Components/KeyboardShortcutsOverlay.qml:164
206+#: qml/Components/KeyboardShortcutsOverlay.qml:177
171−msgid "Super + 0 to 9"
207+msgid "Super + 1 to 0"
172msgstr ""
208msgstr ""
173
209
174−#: qml/Components/KeyboardShortcutsOverlay.qml:169
210+#: qml/Components/KeyboardShortcutsOverlay.qml:182
175msgid "Same as clicking on a launcher icon."
211msgid "Same as clicking on a launcher icon."
176msgstr ""
212msgstr ""
177
213
178−#: qml/Components/KeyboardShortcutsOverlay.qml:181
214+#: qml/Components/KeyboardShortcutsOverlay.qml:190
215+msgid "Super + A"
216+msgstr ""
217+
218+#: qml/Components/KeyboardShortcutsOverlay.qml:195
219+msgid "Opens the Application Drawer."
220+msgstr ""
221+
222+#: qml/Components/KeyboardShortcutsOverlay.qml:207
179msgid "Scopes"
223msgid "Scopes"
180msgstr ""
224msgstr ""
181
225
182−#: qml/Components/KeyboardShortcutsOverlay.qml:188
226+#: qml/Components/KeyboardShortcutsOverlay.qml:214
183msgid "Super (Tap)"
227msgid "Super (Tap)"
184msgstr ""
228msgstr ""
185
229
186−#: qml/Components/KeyboardShortcutsOverlay.qml:193
230+#: qml/Components/KeyboardShortcutsOverlay.qml:219
187msgid "Opens the Scopes home."
231msgid "Opens the Scopes home."
188msgstr ""
232msgstr ""
189
233
190−#: qml/Components/KeyboardShortcutsOverlay.qml:209
234+#: qml/Components/KeyboardShortcutsOverlay.qml:235
191msgid "Switching"
235msgid "Switching"
192msgstr ""
236msgstr ""
193
237
194−#: qml/Components/KeyboardShortcutsOverlay.qml:216
238+#: qml/Components/KeyboardShortcutsOverlay.qml:242
195msgid "Alt + Tab"
239msgid "Alt + Tab"
196msgstr ""
240msgstr ""
197
241
198−#: qml/Components/KeyboardShortcutsOverlay.qml:221
242+#: qml/Components/KeyboardShortcutsOverlay.qml:247
199msgid "Switches between applications."
243msgid "Switches between applications."
200msgstr ""
244msgstr ""
201
245
202−#: qml/Components/KeyboardShortcutsOverlay.qml:229
246+#: qml/Components/KeyboardShortcutsOverlay.qml:255
203msgid "Super + W"
247msgid "Super + W"
204msgstr ""
248msgstr ""
205
249
206−#: qml/Components/KeyboardShortcutsOverlay.qml:234
250+#: qml/Components/KeyboardShortcutsOverlay.qml:260
207msgid "Opens the desktop spread."
251msgid "Opens the desktop spread."
208msgstr ""
252msgstr ""
209
253
210−#: qml/Components/KeyboardShortcutsOverlay.qml:242
254+#: qml/Components/KeyboardShortcutsOverlay.qml:268
211msgid "Cursor Left or Right"
255msgid "Cursor Left or Right"
212msgstr ""
256msgstr ""
213
257
214−#: qml/Components/KeyboardShortcutsOverlay.qml:247
258+#: qml/Components/KeyboardShortcutsOverlay.qml:273
215msgid "Moves the focus."
259msgid "Moves the focus."
216msgstr ""
260msgstr ""
217
261
218−#: qml/Components/KeyboardShortcutsOverlay.qml:259
262+#: qml/Components/KeyboardShortcutsOverlay.qml:285
219msgid "Windows"
263msgid "Windows"
220msgstr ""
264msgstr ""
221
265
222−#: qml/Components/KeyboardShortcutsOverlay.qml:266
266+#: qml/Components/KeyboardShortcutsOverlay.qml:292
223msgid "Ctrl + Super + D"
267msgid "Ctrl + Super + D"
224msgstr ""
268msgstr ""
225
269
226−#: qml/Components/KeyboardShortcutsOverlay.qml:271
270+#: qml/Components/KeyboardShortcutsOverlay.qml:297
227msgid "Minimizes all windows."
271msgid "Minimizes all windows."
228msgstr ""
272msgstr ""
229
273
230−#: qml/Components/KeyboardShortcutsOverlay.qml:279
274+#: qml/Components/KeyboardShortcutsOverlay.qml:305
231msgid "Ctrl + Super + Up"
275msgid "Ctrl + Super + Up"
232msgstr ""
276msgstr ""
233
277
234−#: qml/Components/KeyboardShortcutsOverlay.qml:284
278+#: qml/Components/KeyboardShortcutsOverlay.qml:310
235msgid "Maximizes the current window."
279msgid "Maximizes the current window."
236msgstr ""
280msgstr ""
237
281
238−#: qml/Components/KeyboardShortcutsOverlay.qml:292
282+#: qml/Components/KeyboardShortcutsOverlay.qml:318
239msgid "Ctrl + Super + Down"
283msgid "Ctrl + Super + Down"
240msgstr ""
284msgstr ""
241
285
242−#: qml/Components/KeyboardShortcutsOverlay.qml:297
286+#: qml/Components/KeyboardShortcutsOverlay.qml:323
243msgid "Minimizes or restores the current window."
287msgid "Minimizes or restores the current window."
244msgstr ""
288msgstr ""
245
289
246−#: qml/Components/KeyboardShortcutsOverlay.qml:305
290+#: qml/Components/KeyboardShortcutsOverlay.qml:331
247msgid "Ctrl + Super + Left or Right"
291msgid "Ctrl + Super + Left or Right"
248msgstr ""
292msgstr ""
249
293
250−#: qml/Components/KeyboardShortcutsOverlay.qml:310
294+#: qml/Components/KeyboardShortcutsOverlay.qml:336
251msgid "Semi-maximizes the current window."
295msgid "Semi-maximizes the current window."
252msgstr ""
296msgstr ""
253
297
254−#: qml/Components/KeyboardShortcutsOverlay.qml:318
298+#: qml/Components/KeyboardShortcutsOverlay.qml:344
255msgid "Alt + F4"
299msgid "Alt + F4"
256msgstr ""
300msgstr ""
257
301
258−#: qml/Components/KeyboardShortcutsOverlay.qml:323
302+#: qml/Components/KeyboardShortcutsOverlay.qml:349
259msgid "Closes the current window."
303msgid "Closes the current window."
260msgstr ""
304msgstr ""
261
305
262−#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
306+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:228
263msgid "Return to Call"
307msgid "Return to Call"
264msgstr "Seecol gacis"
308msgstr "Seecol gacis"
265
309
@@ -267,7 +311,7 @@ msgstr "Seecol gacis"
267msgid "Emergency Call"
311msgid "Emergency Call"
268msgstr ""
312msgstr ""
269
313
270−#: qml/Components/Lockscreen.qml:244
314+#: qml/Components/Lockscreen.qml:245
271msgid "OK"
315msgid "OK"
272msgstr "Hayya"
316msgstr "Hayya"
273
317
@@ -281,29 +325,29 @@ msgstr ""
281msgid "%1:%2"
325msgid "%1:%2"
282msgstr ""
326msgstr ""
283
327
284−#: qml/Components/ModeSwitchWarningDialog.qml:32
328+#: qml/Components/ModeSwitchWarningDialog.qml:33
285msgid "Apps may have unsaved data:"
329msgid "Apps may have unsaved data:"
286msgstr ""
330msgstr ""
287
331
288−#: qml/Components/ModeSwitchWarningDialog.qml:57
332+#: qml/Components/ModeSwitchWarningDialog.qml:60
289msgctxt ""
333msgctxt ""
290"Re-dock means connect the device again to an external screen/mouse/keyboard"
334"Re-dock means connect the device again to an external screen/mouse/keyboard"
291msgid "Re-dock, save your work and close these apps to continue."
335msgid "Re-dock, save your work and close these apps to continue."
292msgstr ""
336msgstr ""
293
337
294−#: qml/Components/ModeSwitchWarningDialog.qml:63
338+#: qml/Components/ModeSwitchWarningDialog.qml:67
295msgid "Or force close now (unsaved data will be lost)."
339msgid "Or force close now (unsaved data will be lost)."
296msgstr ""
340msgstr ""
297
341
298−#: qml/Components/ModeSwitchWarningDialog.qml:75
342+#: qml/Components/ModeSwitchWarningDialog.qml:80
299msgid "OK, I will reconnect"
343msgid "OK, I will reconnect"
300msgstr ""
344msgstr ""
301
345
302−#: qml/Components/ModeSwitchWarningDialog.qml:76
346+#: qml/Components/ModeSwitchWarningDialog.qml:81
303msgid "Reconnect now!"
347msgid "Reconnect now!"
304msgstr ""
348msgstr ""
305
349
306−#: qml/Components/ModeSwitchWarningDialog.qml:88
350+#: qml/Components/ModeSwitchWarningDialog.qml:94
307msgid "Close all"
351msgid "Close all"
308msgstr "Inkih alif"
352msgstr "Inkih alif"
309
353
@@ -311,6 +355,28 @@ msgstr "Inkih alif"
311msgid "Preview Share Item"
355msgid "Preview Share Item"
312msgstr ""
356msgstr ""
313
357
358+#: qml/Components/VirtualTouchPad.qml:317
359+msgid ""
360+"Your device is now connected to an external display. Use this screen as a "
361+"touch pad to interact with the pointer."
362+msgstr ""
363+
364+#: qml/Components/VirtualTouchPad.qml:327
365+msgid "Tap left button to click."
366+msgstr ""
367+
368+#: qml/Components/VirtualTouchPad.qml:339
369+msgid "Tap right button to right click."
370+msgstr ""
371+
372+#: qml/Components/VirtualTouchPad.qml:351
373+msgid "Swipe with two fingers to scroll."
374+msgstr ""
375+
376+#: qml/Components/VirtualTouchPad.qml:396
377+msgid "Find more settings in the system settings."
378+msgstr ""
379+
314#: qml/Dash/DashPageHeader.qml:361
380#: qml/Dash/DashPageHeader.qml:361
315msgctxt "Button: Open the Ubuntu Store"
381msgctxt "Button: Open the Ubuntu Store"
316msgid "Store"
382msgid "Store"
@@ -342,24 +408,24 @@ msgstr ""
342msgid "Reset"
408msgid "Reset"
343msgstr ""
409msgstr ""
344
410
345−#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
411+#: qml/Dash/GenericScopeView.qml:547 qml/Dash/GenericScopeView.qml:718
346msgid "Show less"
412msgid "Show less"
347msgstr ""
413msgstr ""
348
414
349−#: qml/Dash/GenericScopeView.qml:545
415+#: qml/Dash/GenericScopeView.qml:547
350msgid "Show all"
416msgid "Show all"
351msgstr ""
417msgstr ""
352
418
353−#: qml/Dash/GenericScopeView.qml:576
419+#: qml/Dash/GenericScopeView.qml:578
354msgctxt "Label: Hint for dash search line edit"
420msgctxt "Label: Hint for dash search line edit"
355msgid "Search"
421msgid "Search"
356msgstr "Goranto"
422msgstr "Goranto"
357
423
358−#: qml/Dash/PageHeaderExtraPanel.qml:57
424+#: qml/Dash/PageHeaderExtraPanel.qml:67
359msgid "Recent Searches"
425msgid "Recent Searches"
360msgstr ""
426msgstr ""
361
427
362−#: qml/Dash/PageHeaderExtraPanel.qml:68
428+#: qml/Dash/PageHeaderExtraPanel.qml:78
363msgid "Clear All"
429msgid "Clear All"
364msgstr ""
430msgstr ""
365
431
@@ -396,24 +462,18 @@ msgstr ""
396msgid "Enable location data"
462msgid "Enable location data"
397msgstr ""
463msgstr ""
398
464
399−#: qml/Dash/ScopesList.qml:57
465+#: qml/Dash/ScopesList.qml:146
400msgid "Manage"
466msgid "Manage"
401msgstr ""
467msgstr ""
402
468
403−#: qml/Dash/ScopesList.qml:104
469+#: qml/Dash/ScopesList.qml:187
404msgid "Home"
470msgid "Home"
405msgstr "Dabqi"
471msgstr "Dabqi"
406
472
407−#: qml/Dash/ScopesList.qml:105
473+#: qml/Dash/ScopesList.qml:188
408msgid "Also installed"
474msgid "Also installed"
409msgstr ""
475msgstr ""
410
476
411−#: qml/DisabledScreenNotice.qml:109
412−msgid ""
413−"Your device is now connected to an external display. Use this screen as a "
414−"touch pad to interact with the pointer."
415−msgstr ""
416−
417#: qml/Greeter/CoverPage.qml:127
477#: qml/Greeter/CoverPage.qml:127
418msgid "Unlock"
478msgid "Unlock"
419msgstr ""
479msgstr ""
@@ -437,32 +497,45 @@ msgid_plural "Please wait %1 minutes and then try again…"
437msgstr[0] "Maganak %1 minit qambaalaay, kaadu gabbat"
497msgstr[0] "Maganak %1 minit qambaalaay, kaadu gabbat"
438msgstr[1] "Maganak %1 minit qambaalaay, kaadu gabbat"
498msgstr[1] "Maganak %1 minit qambaalaay, kaadu gabbat"
439
499
440−#: qml/Greeter/Greeter.qml:596
500+#: qml/Greeter/Greeter.qml:550
441msgid "Try again"
501msgid "Try again"
442msgstr ""
502msgstr ""
443
503
444−#: qml/Greeter/LoginList.qml:70
504+#: qml/Greeter/Greeter.qml:551
505+msgid "Enter passphrase to unlock"
506+msgstr ""
507+
508+#: qml/Greeter/Greeter.qml:552
509+msgid "Enter passcode to unlock"
510+msgstr ""
511+
512+#: qml/Greeter/NarrowView.qml:228
513+msgid "Emergency"
514+msgstr ""
515+
516+#: qml/Greeter/PromptList.qml:126
445msgid "Passphrase"
517msgid "Passphrase"
446msgstr ""
518msgstr ""
447
519
448−#: qml/Greeter/LoginList.qml:71
520+#: qml/Greeter/PromptList.qml:126
449msgid "Passcode"
521msgid "Passcode"
450msgstr ""
522msgstr ""
451
523
452−#: qml/Greeter/LoginList.qml:98
524+#: qml/Greeter/SessionsList.qml:124
453−msgid "Retry"
525+msgid "Select desktop environment"
454−msgstr "Qagis"
526+msgstr ""
455
527
456−#: qml/Greeter/LoginList.qml:99
528+#: qml/Launcher/Drawer.qml:94
457−msgid "Log In"
529+msgid "Search…"
458msgstr ""
530msgstr ""
459
531
460−#: qml/Greeter/NarrowView.qml:252
532+#: qml/Launcher/Drawer.qml:129
533+msgctxt "Apps sorted alphabetically"
461−msgid "Emergency"
534+msgid "A-Z"
462msgstr ""
535msgstr ""
463
536
464−#: qml/Greeter/SessionsList.qml:122
537+#: qml/Launcher/MoreAppsHeader.qml:55
465−msgid "Select desktop environment"
538+msgid "More apps in the store"
466msgstr ""
539msgstr ""
467
540
468#: qml/Notifications/NotificationMenuItemFactory.qml:124
541#: qml/Notifications/NotificationMenuItemFactory.qml:124
@@ -477,62 +550,62 @@ msgstr ""
477msgid "Conference"
550msgid "Conference"
478msgstr "Koboxu"
551msgstr "Koboxu"
479
552
480−#: qml/Panel/Indicators/MenuItemFactory.qml:847
553+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:869
481msgid "Nothing is playing"
554msgid "Nothing is playing"
482msgstr ""
555msgstr ""
483
556
484−#: qml/Panel/Indicators/MenuItemFactory.qml:975
557+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:997
485#, qt-format
558#, qt-format
486msgid "%1 hour"
559msgid "%1 hour"
487msgid_plural "%1 hours"
560msgid_plural "%1 hours"
488msgstr[0] "%1 saaqata"
561msgstr[0] "%1 saaqata"
489msgstr[1] "%1 saaqata"
562msgstr[1] "%1 saaqata"
490
563
491−#: qml/Panel/Indicators/MenuItemFactory.qml:979
564+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1001
492#, qt-format
565#, qt-format
493msgid "%1 minute"
566msgid "%1 minute"
494msgid_plural "%1 minutes"
567msgid_plural "%1 minutes"
495msgstr[0] "%1 miniti"
568msgstr[0] "%1 miniti"
496msgstr[1] "%1 miniti"
569msgstr[1] "%1 miniti"
497
570
498−#: qml/Panel/Indicators/MenuItemFactory.qml:984
571+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1006
499#, qt-format
572#, qt-format
500msgid "%1 second"
573msgid "%1 second"
501msgid_plural "%1 seconds"
574msgid_plural "%1 seconds"
502msgstr[0] "%1 nammayye"
575msgstr[0] "%1 nammayye"
503msgstr[1] "%1 nammayye"
576msgstr[1] "%1 nammayye"
504
577
505−#: qml/Panel/Indicators/MenuItemFactory.qml:987
578+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1009
506msgid "0 seconds"
579msgid "0 seconds"
507msgstr "0 nammayye"
580msgstr "0 nammayye"
508
581
509#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
582#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
510−#: qml/Panel/Indicators/MenuItemFactory.qml:989
583+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1011
511#, qt-format
584#, qt-format
512msgid "%1 remaining"
585msgid "%1 remaining"
513msgstr "%1 raaqe"
586msgstr "%1 raaqe"
514
587
515−#: qml/Panel/Indicators/MenuItemFactory.qml:995
588+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1017
516msgid "In queue…"
589msgid "In queue…"
517msgstr ""
590msgstr ""
518
591
519−#: qml/Panel/Indicators/MenuItemFactory.qml:999
592+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1021
520msgid "Downloading"
593msgid "Downloading"
521msgstr "Qulluumah"
594msgstr "Qulluumah"
522
595
523−#: qml/Panel/Indicators/MenuItemFactory.qml:1001
596+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1023
524msgid "Paused, tap to resume"
597msgid "Paused, tap to resume"
525msgstr ""
598msgstr ""
526
599
527−#: qml/Panel/Indicators/MenuItemFactory.qml:1003
600+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1025
528msgid "Canceled"
601msgid "Canceled"
529msgstr "Bayteh"
602msgstr "Bayteh"
530
603
531−#: qml/Panel/Indicators/MenuItemFactory.qml:1005
604+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1027
532msgid "Finished"
605msgid "Finished"
533msgstr "Duudumteh"
606msgstr "Duudumteh"
534
607
535−#: qml/Panel/Indicators/MenuItemFactory.qml:1007
608+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1029
536msgid "Failed, tap to retry"
609msgid "Failed, tap to retry"
537msgstr ""
610msgstr ""
538
611
@@ -552,12 +625,16 @@ msgctxt "Button: Call back on phone"
552msgid "Call back"
625msgid "Call back"
553msgstr ""
626msgstr ""
554
627
628+#: qml/Panel/PanelMenuPage.qml:92
629+msgid "Back"
630+msgstr ""
631+
555#: qml/Stage/SideStage.qml:76
632#: qml/Stage/SideStage.qml:76
556msgid "Drag using 3 fingers any application from one window to the other"
633msgid "Drag using 3 fingers any application from one window to the other"
557msgstr ""
634msgstr ""
558
635
559#: qml/Tutorial/TutorialLeftLong.qml:49
636#: qml/Tutorial/TutorialLeftLong.qml:49
560−msgid "Long swipe from the left edge to open the Today scope"
637+msgid "Long swipe from the left edge to open the Application Drawer"
561msgstr ""
638msgstr ""
562
639
563#: qml/Tutorial/TutorialLeft.qml:47
640#: qml/Tutorial/TutorialLeft.qml:47
@@ -586,7 +663,7 @@ msgid "Language"
586msgstr ""
663msgstr ""
587
664
588#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
665#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
589−#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
666+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/40-location.qml:271
590#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
667#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
591#: qml/Wizard/Pages/70-passwd-type.qml:145
668#: qml/Wizard/Pages/70-passwd-type.qml:145
592#: qml/Wizard/Pages/75-report-check.qml:84
669#: qml/Wizard/Pages/75-report-check.qml:84
@@ -607,25 +684,24 @@ msgstr ""
607msgid "Keyboard layout"
684msgid "Keyboard layout"
608msgstr ""
685msgstr ""
609
686
610−#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
687+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:206
611−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
688+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/sim.qml:101
612−#: qml/Wizard/Pages/sim.qml:101
613msgid "Skip"
689msgid "Skip"
614msgstr "Kaqit"
690msgstr "Kaqit"
615
691
616−#: qml/Wizard/Pages/30-wifi.qml:31
692+#: qml/Wizard/Pages/30-wifi.qml:30
617msgid "Connect to Wi‑Fi"
693msgid "Connect to Wi‑Fi"
618msgstr ""
694msgstr ""
619
695
620−#: qml/Wizard/Pages/30-wifi.qml:132
696+#: qml/Wizard/Pages/30-wifi.qml:131
621msgid "Connected"
697msgid "Connected"
622msgstr ""
698msgstr ""
623
699
624−#: qml/Wizard/Pages/30-wifi.qml:165
700+#: qml/Wizard/Pages/30-wifi.qml:164
625msgid "Available Wi-Fi networks"
701msgid "Available Wi-Fi networks"
626msgstr ""
702msgstr ""
627
703
628−#: qml/Wizard/Pages/30-wifi.qml:166
704+#: qml/Wizard/Pages/30-wifi.qml:165
629msgid "No available Wi-Fi networks"
705msgid "No available Wi-Fi networks"
630msgstr ""
706msgstr ""
631
707
@@ -712,35 +788,6 @@ msgstr ""
712msgid "Privacy policy"
788msgid "Privacy policy"
713msgstr ""
789msgstr ""
714
790
715−#: qml/Wizard/Pages/77-system-update.qml:28
716−msgid "Update Device"
717−msgstr ""
718−
719−#: qml/Wizard/Pages/77-system-update.qml:55
720−msgid ""
721−"There is a system update available and ready to install. Afterwards, the "
722−"device will automatically restart."
723−msgstr ""
724−
725−#: qml/Wizard/Pages/77-system-update.qml:76
726−msgctxt "string identifying name of the update"
727−msgid "Ubuntu system"
728−msgstr ""
729−
730−#: qml/Wizard/Pages/77-system-update.qml:83
731−#, qt-format
732−msgctxt "version of the system update"
733−msgid "Version %1"
734−msgstr ""
735−
736−#: qml/Wizard/Pages/77-system-update.qml:102
737−msgid "This could take a few minutes..."
738−msgstr ""
739−
740−#: qml/Wizard/Pages/77-system-update.qml:116
741−msgid "Install and restart now"
742−msgstr ""
743−
744#: qml/Wizard/Pages/80-finished.qml:89
791#: qml/Wizard/Pages/80-finished.qml:89
745msgid "Welcome to Ubuntu"
792msgid "Welcome to Ubuntu"
746msgstr ""
793msgstr ""
po/am.po+223−144
@@ -7,83 +7,111 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-11-16 10:44+0000\n"
10+"POT-Creation-Date: 2017-04-04 22:56+0000\n"
11−"PO-Revision-Date: 2016-08-13 14:45+0000\n"
11+"PO-Revision-Date: 2017-01-26 15:04+0000\n"
12"Last-Translator: samson <Unknown>\n"
12"Last-Translator: samson <Unknown>\n"
13"Language-Team: Amharic <am@li.org>\n"
13"Language-Team: Amharic <am@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2016-11-23 06:34+0000\n"
18+"X-Launchpad-Export-Date: 2017-04-07 06:29+0000\n"
19−"X-Generator: Launchpad (build 18269)\n"
19+"X-Generator: Launchpad (build 18343)\n"
20
20
21−#: plugins/LightDM/Greeter.cpp:123
21+#: plugins/LightDM/Greeter.cpp:188
22msgid "Password: "
22msgid "Password: "
23msgstr "የ መግቢያ ቃል: "
23msgstr "የ መግቢያ ቃል: "
24
24
25+#: plugins/LightDM/Greeter.cpp:203
26+msgid "Username"
27+msgstr "የ ተጠቃሚ ስም"
28+
29+#: plugins/LightDM/Greeter.cpp:242
30+msgid "Failed to authenticate"
31+msgstr "ማረጋገጥ አልተቻለም"
32+
33+#: plugins/LightDM/Greeter.cpp:244
34+msgid "Invalid password, please try again"
35+msgstr "እባክዎን እንደገና ይሞክሩ ዋጋ የሌለው የመግቢያ ቃል"
36+
37+#: plugins/LightDM/Greeter.cpp:254
38+msgid "Log In"
39+msgstr "መግቢያ"
40+
41+#: plugins/LightDM/Greeter.cpp:254
42+msgid "Retry"
43+msgstr "እንደገና ይሞክሩ"
44+
45+#: plugins/LightDM/UsersModel.cpp:157
46+msgid "Login"
47+msgstr "መግቢያ"
48+
49+#: plugins/LightDM/UsersModel.cpp:165
50+msgid "Guest Session"
51+msgstr "የ እንግዳ ክፍለ ጊዜ"
52+
25#: plugins/Unity/Launcher/launcheritem.cpp:49
53#: plugins/Unity/Launcher/launcheritem.cpp:49
26−#: plugins/Unity/Launcher/launcheritem.cpp:108
54+#: plugins/Unity/Launcher/launcheritem.cpp:123
27msgid "Pin shortcut"
55msgid "Pin shortcut"
28msgstr "አቋራጭ ማጣበቂያ"
56msgstr "አቋራጭ ማጣበቂያ"
29
57
30−#: plugins/Unity/Launcher/launcheritem.cpp:54
58+#: plugins/Unity/Launcher/launcheritem.cpp:55
31msgid "Quit"
59msgid "Quit"
32msgstr "ማጥፊያ"
60msgstr "ማጥፊያ"
33
61
34−#: plugins/Unity/Launcher/launcheritem.cpp:108
62+#: plugins/Unity/Launcher/launcheritem.cpp:123
35msgid "Unpin shortcut"
63msgid "Unpin shortcut"
36msgstr "አቋራጭ መለያያ"
64msgstr "አቋራጭ መለያያ"
37
65
38−#: qml/Components/Dialogs.qml:149
66+#: qml/Components/Dialogs.qml:176
39msgctxt "Title: Lock/Log out dialog"
67msgctxt "Title: Lock/Log out dialog"
40msgid "Log out"
68msgid "Log out"
41msgstr "መውጫ"
69msgstr "መውጫ"
42
70
43−#: qml/Components/Dialogs.qml:150
71+#: qml/Components/Dialogs.qml:177
44msgid "Are you sure you want to log out?"
72msgid "Are you sure you want to log out?"
45msgstr "በእርግጥ መውጣት ይፈልጋሉ?"
73msgstr "በእርግጥ መውጣት ይፈልጋሉ?"
46
74
47−#: qml/Components/Dialogs.qml:152
75+#: qml/Components/Dialogs.qml:180
48msgctxt "Button: Lock the system"
76msgctxt "Button: Lock the system"
49msgid "Lock"
77msgid "Lock"
50msgstr "መቆለፊያ"
78msgstr "መቆለፊያ"
51
79
52−#: qml/Components/Dialogs.qml:159
80+#: qml/Components/Dialogs.qml:191
53msgctxt "Button: Log out from the system"
81msgctxt "Button: Log out from the system"
54msgid "Log Out"
82msgid "Log Out"
55msgstr "መውጫ"
83msgstr "መውጫ"
56
84
57−#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
85+#: qml/Components/Dialogs.qml:199 qml/Components/Dialogs.qml:264
58−#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
86+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:208
59#: qml/Wizard/Pages/passcode-confirm.qml:32
87#: qml/Wizard/Pages/passcode-confirm.qml:32
60#: qml/Wizard/Pages/passcode-set.qml:32
88#: qml/Wizard/Pages/passcode-set.qml:32
61msgid "Cancel"
89msgid "Cancel"
62msgstr "መሰረዣ"
90msgstr "መሰረዣ"
63
91
64−#: qml/Components/Dialogs.qml:178
92+#: qml/Components/Dialogs.qml:211
65msgctxt "Title: Reboot dialog"
93msgctxt "Title: Reboot dialog"
66msgid "Reboot"
94msgid "Reboot"
67msgstr "እንደገና ማስነሻ"
95msgstr "እንደገና ማስነሻ"
68
96
69−#: qml/Components/Dialogs.qml:179
97+#: qml/Components/Dialogs.qml:212
70msgid "Are you sure you want to reboot?"
98msgid "Are you sure you want to reboot?"
71msgstr "በእርግጥ እንደገና ማስነሳት ይፈልጋሉ?"
99msgstr "በእርግጥ እንደገና ማስነሳት ይፈልጋሉ?"
72
100
73−#: qml/Components/Dialogs.qml:181
101+#: qml/Components/Dialogs.qml:215
74msgid "No"
102msgid "No"
75msgstr "አይ"
103msgstr "አይ"
76
104
77−#: qml/Components/Dialogs.qml:187
105+#: qml/Components/Dialogs.qml:223
78msgid "Yes"
106msgid "Yes"
79msgstr "አዎ"
107msgstr "አዎ"
80
108
81−#: qml/Components/Dialogs.qml:202
109+#: qml/Components/Dialogs.qml:239
82msgctxt "Title: Power off/Restart dialog"
110msgctxt "Title: Power off/Restart dialog"
83msgid "Power"
111msgid "Power"
84msgstr "ሐይል"
112msgstr "ሐይል"
85
113
86−#: qml/Components/Dialogs.qml:203
114+#: qml/Components/Dialogs.qml:240
87msgid ""
115msgid ""
88"Are you sure you would like\n"
116"Are you sure you would like\n"
89"to power off?"
117"to power off?"
@@ -91,12 +119,12 @@ msgstr ""
91"በእርግጥ ሐይሉን ማጥፋት\n"
119"በእርግጥ ሐይሉን ማጥፋት\n"
92"ይፈልጋሉ?"
120"ይፈልጋሉ?"
93
121
94−#: qml/Components/Dialogs.qml:205
122+#: qml/Components/Dialogs.qml:244
95msgctxt "Button: Power off the system"
123msgctxt "Button: Power off the system"
96msgid "Power off"
124msgid "Power off"
97msgstr "ሐይል ማጥፊያ"
125msgstr "ሐይል ማጥፊያ"
98
126
99−#: qml/Components/Dialogs.qml:214
127+#: qml/Components/Dialogs.qml:255
100msgctxt "Button: Restart the system"
128msgctxt "Button: Restart the system"
101msgid "Restart"
129msgid "Restart"
102msgstr "እንደገና ማስጀመሪያ"
130msgstr "እንደገና ማስጀመሪያ"
@@ -122,8 +150,8 @@ msgid "Alt + PrtScr"
122msgstr "Alt + PrtScr"
150msgstr "Alt + PrtScr"
123
151
124#: qml/Components/KeyboardShortcutsOverlay.qml:80
152#: qml/Components/KeyboardShortcutsOverlay.qml:80
125−msgid "Takes a screenshot of a window."
153+msgid "Takes a screenshot of the current window."
126−msgstr "የ መስኮት መመልከቻ ፎቶ ማንሻ"
154+msgstr "የ አሁኑን መስኮት ፎቶ ማንሻ"
127
155
128#: qml/Components/KeyboardShortcutsOverlay.qml:88
156#: qml/Components/KeyboardShortcutsOverlay.qml:88
129msgid "Super + Space"
157msgid "Super + Space"
@@ -141,127 +169,143 @@ msgstr "Super + Shift + Space"
141msgid "Switches to previous keyboard layout."
169msgid "Switches to previous keyboard layout."
142msgstr "ወዳለፈው የ ፊደል ገበታ እቅድ መቀየሪያ"
170msgstr "ወዳለፈው የ ፊደል ገበታ እቅድ መቀየሪያ"
143
171
144−#: qml/Components/KeyboardShortcutsOverlay.qml:118
172+#: qml/Components/KeyboardShortcutsOverlay.qml:114
173+msgid "Ctrl + Alt + T"
174+msgstr "Ctrl + Alt + T"
175+
176+#: qml/Components/KeyboardShortcutsOverlay.qml:119
177+msgid "Starts the Terminal application."
178+msgstr "የ ተርሚናል መተግበሪያ ማስጀመሪያ"
179+
180+#: qml/Components/KeyboardShortcutsOverlay.qml:131
145msgid "Launcher"
181msgid "Launcher"
146msgstr "ማስነሻ"
182msgstr "ማስነሻ"
147
183
148−#: qml/Components/KeyboardShortcutsOverlay.qml:125
184+#: qml/Components/KeyboardShortcutsOverlay.qml:138
149msgid "Super (Hold)"
185msgid "Super (Hold)"
150msgstr "Super (ይጫኑ)"
186msgstr "Super (ይጫኑ)"
151
187
152−#: qml/Components/KeyboardShortcutsOverlay.qml:130
188+#: qml/Components/KeyboardShortcutsOverlay.qml:143
153msgid "Opens the launcher, displays shortcuts."
189msgid "Opens the launcher, displays shortcuts."
154msgstr "ማስነሻውን መክፈቻ እና አቋራጮች ማሳያ"
190msgstr "ማስነሻውን መክፈቻ እና አቋራጮች ማሳያ"
155
191
156−#: qml/Components/KeyboardShortcutsOverlay.qml:138
192+#: qml/Components/KeyboardShortcutsOverlay.qml:151
157msgid "Alt + F1"
193msgid "Alt + F1"
158msgstr "Alt + F1"
194msgstr "Alt + F1"
159
195
160−#: qml/Components/KeyboardShortcutsOverlay.qml:143
196+#: qml/Components/KeyboardShortcutsOverlay.qml:156
161msgid "Opens launcher keyboard navigation mode."
197msgid "Opens launcher keyboard navigation mode."
162msgstr "መክፈቻ በ ፊደል ገበታ መቃኛ ዘዴ ማስነሻ"
198msgstr "መክፈቻ በ ፊደል ገበታ መቃኛ ዘዴ ማስነሻ"
163
199
164−#: qml/Components/KeyboardShortcutsOverlay.qml:151
200+#: qml/Components/KeyboardShortcutsOverlay.qml:164
165msgid "Super + Tab"
201msgid "Super + Tab"
166msgstr "Super + Tab"
202msgstr "Super + Tab"
167
203
168−#: qml/Components/KeyboardShortcutsOverlay.qml:156
204+#: qml/Components/KeyboardShortcutsOverlay.qml:169
169msgid "Switches applications via the launcher."
205msgid "Switches applications via the launcher."
170msgstr "መተግበሪያዎችን በ ማስጀመሪያ መቀየሪያ"
206msgstr "መተግበሪያዎችን በ ማስጀመሪያ መቀየሪያ"
171
207
172−#: qml/Components/KeyboardShortcutsOverlay.qml:164
208+#: qml/Components/KeyboardShortcutsOverlay.qml:177
173−msgid "Super + 0 to 9"
209+msgid "Super + 1 to 0"
174−msgstr "Super + 0 እስከ 9"
210+msgstr "Super + 1 ወደ 0"
175
211
176−#: qml/Components/KeyboardShortcutsOverlay.qml:169
212+#: qml/Components/KeyboardShortcutsOverlay.qml:182
177msgid "Same as clicking on a launcher icon."
213msgid "Same as clicking on a launcher icon."
178msgstr "ተመሳሳይ በ ማስጀመሪያ ምልክት ላይ እንደ መጫን"
214msgstr "ተመሳሳይ በ ማስጀመሪያ ምልክት ላይ እንደ መጫን"
179
215
180−#: qml/Components/KeyboardShortcutsOverlay.qml:181
216+#: qml/Components/KeyboardShortcutsOverlay.qml:190
217+msgid "Super + A"
218+msgstr "Super + A"
219+
220+#: qml/Components/KeyboardShortcutsOverlay.qml:195
221+msgid "Opens the Application Drawer."
222+msgstr "መተግበሪያ መክፈቻ"
223+
224+#: qml/Components/KeyboardShortcutsOverlay.qml:207
181msgid "Scopes"
225msgid "Scopes"
182msgstr "ክልል"
226msgstr "ክልል"
183
227
184−#: qml/Components/KeyboardShortcutsOverlay.qml:188
228+#: qml/Components/KeyboardShortcutsOverlay.qml:214
185msgid "Super (Tap)"
229msgid "Super (Tap)"
186msgstr "Super (Tap)"
230msgstr "Super (Tap)"
187
231
188−#: qml/Components/KeyboardShortcutsOverlay.qml:193
232+#: qml/Components/KeyboardShortcutsOverlay.qml:219
189msgid "Opens the Scopes home."
233msgid "Opens the Scopes home."
190msgstr "የ ክልል ቤት መክፈቻ"
234msgstr "የ ክልል ቤት መክፈቻ"
191
235
192−#: qml/Components/KeyboardShortcutsOverlay.qml:209
236+#: qml/Components/KeyboardShortcutsOverlay.qml:235
193msgid "Switching"
237msgid "Switching"
194msgstr "በ መቀየር ላይ"
238msgstr "በ መቀየር ላይ"
195
239
196−#: qml/Components/KeyboardShortcutsOverlay.qml:216
240+#: qml/Components/KeyboardShortcutsOverlay.qml:242
197msgid "Alt + Tab"
241msgid "Alt + Tab"
198msgstr "Alt + Tab"
242msgstr "Alt + Tab"
199
243
200−#: qml/Components/KeyboardShortcutsOverlay.qml:221
244+#: qml/Components/KeyboardShortcutsOverlay.qml:247
201msgid "Switches between applications."
245msgid "Switches between applications."
202msgstr "በ መተግበሪያዎች መካከል መቀያየሪያ"
246msgstr "በ መተግበሪያዎች መካከል መቀያየሪያ"
203
247
204−#: qml/Components/KeyboardShortcutsOverlay.qml:229
248+#: qml/Components/KeyboardShortcutsOverlay.qml:255
205msgid "Super + W"
249msgid "Super + W"
206msgstr "Super + W"
250msgstr "Super + W"
207
251
208−#: qml/Components/KeyboardShortcutsOverlay.qml:234
252+#: qml/Components/KeyboardShortcutsOverlay.qml:260
209msgid "Opens the desktop spread."
253msgid "Opens the desktop spread."
210msgstr "የ ዴስክቶፕ ማስፊያ መክፈቻ"
254msgstr "የ ዴስክቶፕ ማስፊያ መክፈቻ"
211
255
212−#: qml/Components/KeyboardShortcutsOverlay.qml:242
256+#: qml/Components/KeyboardShortcutsOverlay.qml:268
213msgid "Cursor Left or Right"
257msgid "Cursor Left or Right"
214msgstr "መጠቆሚያ የ ግራ ወይንም የ ቀኝ"
258msgstr "መጠቆሚያ የ ግራ ወይንም የ ቀኝ"
215
259
216−#: qml/Components/KeyboardShortcutsOverlay.qml:247
260+#: qml/Components/KeyboardShortcutsOverlay.qml:273
217msgid "Moves the focus."
261msgid "Moves the focus."
218msgstr "ትኩረት ማንቀሳቀሻ"
262msgstr "ትኩረት ማንቀሳቀሻ"
219
263
220−#: qml/Components/KeyboardShortcutsOverlay.qml:259
264+#: qml/Components/KeyboardShortcutsOverlay.qml:285
221msgid "Windows"
265msgid "Windows"
222msgstr "መስኮቶች"
266msgstr "መስኮቶች"
223
267
224−#: qml/Components/KeyboardShortcutsOverlay.qml:266
268+#: qml/Components/KeyboardShortcutsOverlay.qml:292
225msgid "Ctrl + Super + D"
269msgid "Ctrl + Super + D"
226msgstr "Ctrl + Super + D"
270msgstr "Ctrl + Super + D"
227
271
228−#: qml/Components/KeyboardShortcutsOverlay.qml:271
272+#: qml/Components/KeyboardShortcutsOverlay.qml:297
229msgid "Minimizes all windows."
273msgid "Minimizes all windows."
230msgstr "ሁሉንም መስኮቶች ማሳነሻ"
274msgstr "ሁሉንም መስኮቶች ማሳነሻ"
231
275
232−#: qml/Components/KeyboardShortcutsOverlay.qml:279
276+#: qml/Components/KeyboardShortcutsOverlay.qml:305
233msgid "Ctrl + Super + Up"
277msgid "Ctrl + Super + Up"
234msgstr "Ctrl + Super + Up"
278msgstr "Ctrl + Super + Up"
235
279
236−#: qml/Components/KeyboardShortcutsOverlay.qml:284
280+#: qml/Components/KeyboardShortcutsOverlay.qml:310
237msgid "Maximizes the current window."
281msgid "Maximizes the current window."
238msgstr "የ አሁኑን መስኮት ማሳደጊያ"
282msgstr "የ አሁኑን መስኮት ማሳደጊያ"
239
283
240−#: qml/Components/KeyboardShortcutsOverlay.qml:292
284+#: qml/Components/KeyboardShortcutsOverlay.qml:318
241msgid "Ctrl + Super + Down"
285msgid "Ctrl + Super + Down"
242msgstr "Ctrl + Super + Down"
286msgstr "Ctrl + Super + Down"
243
287
244−#: qml/Components/KeyboardShortcutsOverlay.qml:297
288+#: qml/Components/KeyboardShortcutsOverlay.qml:323
245msgid "Minimizes or restores the current window."
289msgid "Minimizes or restores the current window."
246msgstr "የ አሁኑን መስኮትማሳነሻ ወይንም እንደ ነበር መመለሻ"
290msgstr "የ አሁኑን መስኮትማሳነሻ ወይንም እንደ ነበር መመለሻ"
247
291
248−#: qml/Components/KeyboardShortcutsOverlay.qml:305
292+#: qml/Components/KeyboardShortcutsOverlay.qml:331
249msgid "Ctrl + Super + Left or Right"
293msgid "Ctrl + Super + Left or Right"
250msgstr "Ctrl + Super + Left or Right"
294msgstr "Ctrl + Super + Left or Right"
251
295
252−#: qml/Components/KeyboardShortcutsOverlay.qml:310
296+#: qml/Components/KeyboardShortcutsOverlay.qml:336
253msgid "Semi-maximizes the current window."
297msgid "Semi-maximizes the current window."
254msgstr "የ አሁኑን መስኮት በ ንዑስ-ማሳደጊያ"
298msgstr "የ አሁኑን መስኮት በ ንዑስ-ማሳደጊያ"
255
299
256−#: qml/Components/KeyboardShortcutsOverlay.qml:318
300+#: qml/Components/KeyboardShortcutsOverlay.qml:344
257msgid "Alt + F4"
301msgid "Alt + F4"
258msgstr "Alt + F4"
302msgstr "Alt + F4"
259
303
260−#: qml/Components/KeyboardShortcutsOverlay.qml:323
304+#: qml/Components/KeyboardShortcutsOverlay.qml:349
261msgid "Closes the current window."
305msgid "Closes the current window."
262msgstr "የ አሁኑን መስኮት መዝጊያ"
306msgstr "የ አሁኑን መስኮት መዝጊያ"
263
307
264−#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
308+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:228
265msgid "Return to Call"
309msgid "Return to Call"
266msgstr "ወደ ጥሪ መመለሻ"
310msgstr "ወደ ጥሪ መመለሻ"
267
311
@@ -269,7 +313,7 @@ msgstr "ወደ ጥሪ መመለሻ"
269msgid "Emergency Call"
313msgid "Emergency Call"
270msgstr "የ ድንገተኛ ጥሪ"
314msgstr "የ ድንገተኛ ጥሪ"
271
315
272−#: qml/Components/Lockscreen.qml:244
316+#: qml/Components/Lockscreen.qml:245
273msgid "OK"
317msgid "OK"
274msgstr "እሺ"
318msgstr "እሺ"
275
319
@@ -283,29 +327,29 @@ msgstr "%1:%2:%3"
283msgid "%1:%2"
327msgid "%1:%2"
284msgstr "%1:%2"
328msgstr "%1:%2"
285
329
286−#: qml/Components/ModeSwitchWarningDialog.qml:32
330+#: qml/Components/ModeSwitchWarningDialog.qml:33
287msgid "Apps may have unsaved data:"
331msgid "Apps may have unsaved data:"
288msgstr "መተግበሪያው ያልተቀመጠ ዳታ ይዟል:"
332msgstr "መተግበሪያው ያልተቀመጠ ዳታ ይዟል:"
289
333
290−#: qml/Components/ModeSwitchWarningDialog.qml:57
334+#: qml/Components/ModeSwitchWarningDialog.qml:60
291msgctxt ""
335msgctxt ""
292"Re-dock means connect the device again to an external screen/mouse/keyboard"
336"Re-dock means connect the device again to an external screen/mouse/keyboard"
293msgid "Re-dock, save your work and close these apps to continue."
337msgid "Re-dock, save your work and close these apps to continue."
294msgstr "እንደገና-ማሳረፊያ: ስራዎትን ያስቀምጡ እና ይዝጉ መተግበሪያው እንዲቀጥል"
338msgstr "እንደገና-ማሳረፊያ: ስራዎትን ያስቀምጡ እና ይዝጉ መተግበሪያው እንዲቀጥል"
295
339
296−#: qml/Components/ModeSwitchWarningDialog.qml:63
340+#: qml/Components/ModeSwitchWarningDialog.qml:67
297msgid "Or force close now (unsaved data will be lost)."
341msgid "Or force close now (unsaved data will be lost)."
298msgstr "ወይንም አሁን አስገድዶ ማጥፊያ (ያልተቀመጠ ዳታ ይጠፋል)"
342msgstr "ወይንም አሁን አስገድዶ ማጥፊያ (ያልተቀመጠ ዳታ ይጠፋል)"
299
343
300−#: qml/Components/ModeSwitchWarningDialog.qml:75
344+#: qml/Components/ModeSwitchWarningDialog.qml:80
301msgid "OK, I will reconnect"
345msgid "OK, I will reconnect"
302msgstr "እሺ: እኔ አሁን እንደገና እገናኛለሁ"
346msgstr "እሺ: እኔ አሁን እንደገና እገናኛለሁ"
303
347
304−#: qml/Components/ModeSwitchWarningDialog.qml:76
348+#: qml/Components/ModeSwitchWarningDialog.qml:81
305msgid "Reconnect now!"
349msgid "Reconnect now!"
306msgstr "አሁን እንደገና መገናኛ!"
350msgstr "አሁን እንደገና መገናኛ!"
307
351
308−#: qml/Components/ModeSwitchWarningDialog.qml:88
352+#: qml/Components/ModeSwitchWarningDialog.qml:94
309msgid "Close all"
353msgid "Close all"
310msgstr "ሁሉንም መዝጊያ"
354msgstr "ሁሉንም መዝጊያ"
311
355
@@ -313,6 +357,28 @@ msgstr "ሁሉንም መዝጊያ"
313msgid "Preview Share Item"
357msgid "Preview Share Item"
314msgstr "የሚካፈሉትን እቃ ቅድመ እይታ"
358msgstr "የሚካፈሉትን እቃ ቅድመ እይታ"
315
359
360+#: qml/Components/VirtualTouchPad.qml:317
361+msgid ""
362+"Your device is now connected to an external display. Use this screen as a "
363+"touch pad to interact with the pointer."
364+msgstr "የ እርስዎ አካል አሁን ከ ውጪ ማሳያ ጋር ተገናኝቷል: ይህን መመልከቻ እንደ ተችፓድ መጠቀሚያ"
365+
366+#: qml/Components/VirtualTouchPad.qml:327
367+msgid "Tap left button to click."
368+msgstr "መታ ያድርጉ በ ግራ ቁልፍ ላይ ለ መጫን"
369+
370+#: qml/Components/VirtualTouchPad.qml:339
371+msgid "Tap right button to right click."
372+msgstr "መታ ያድርጉ በ ቀኝ ቁልፍ ላይ ለ መጫን"
373+
374+#: qml/Components/VirtualTouchPad.qml:351
375+msgid "Swipe with two fingers to scroll."
376+msgstr "ለ መሽብለል በ ሁለት ጣት ይጥረጉ"
377+
378+#: qml/Components/VirtualTouchPad.qml:396
379+msgid "Find more settings in the system settings."
380+msgstr "ተጨማሪ ማሰናጃዎችን ያግኙ በ ስርአት ማሰናጃ ውስጥ"
381+
316#: qml/Dash/DashPageHeader.qml:361
382#: qml/Dash/DashPageHeader.qml:361
317msgctxt "Button: Open the Ubuntu Store"
383msgctxt "Button: Open the Ubuntu Store"
318msgid "Store"
384msgid "Store"
@@ -344,24 +410,24 @@ msgstr "የ እርስዎን ውጤቶች እንደገና ማጣሪያ"
344msgid "Reset"
410msgid "Reset"
345msgstr "እንደ ነበረ መመለሻ"
411msgstr "እንደ ነበረ መመለሻ"
346
412
347−#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
413+#: qml/Dash/GenericScopeView.qml:547 qml/Dash/GenericScopeView.qml:718
348msgid "Show less"
414msgid "Show less"
349msgstr "ትንሽ ማሳያ"
415msgstr "ትንሽ ማሳያ"
350
416
351−#: qml/Dash/GenericScopeView.qml:545
417+#: qml/Dash/GenericScopeView.qml:547
352msgid "Show all"
418msgid "Show all"
353msgstr "ሁሉንም ማሳያ"
419msgstr "ሁሉንም ማሳያ"
354
420
355−#: qml/Dash/GenericScopeView.qml:576
421+#: qml/Dash/GenericScopeView.qml:578
356msgctxt "Label: Hint for dash search line edit"
422msgctxt "Label: Hint for dash search line edit"
357msgid "Search"
423msgid "Search"
358msgstr "መፈለጊያ"
424msgstr "መፈለጊያ"
359
425
360−#: qml/Dash/PageHeaderExtraPanel.qml:57
426+#: qml/Dash/PageHeaderExtraPanel.qml:67
361msgid "Recent Searches"
427msgid "Recent Searches"
362msgstr "የ ቅርብ ጊዜ ፍለጋዎች"
428msgstr "የ ቅርብ ጊዜ ፍለጋዎች"
363
429
364−#: qml/Dash/PageHeaderExtraPanel.qml:68
430+#: qml/Dash/PageHeaderExtraPanel.qml:78
365msgid "Clear All"
431msgid "Clear All"
366msgstr "ሁሉንም ማጽጃ"
432msgstr "ሁሉንም ማጽጃ"
367
433
@@ -398,24 +464,18 @@ msgstr "ይልቀቁ ለማነቃቃት…"
398msgid "Enable location data"
464msgid "Enable location data"
399msgstr "የአካባቢ ዳታ ማስቻያ"
465msgstr "የአካባቢ ዳታ ማስቻያ"
400
466
401−#: qml/Dash/ScopesList.qml:57
467+#: qml/Dash/ScopesList.qml:146
402msgid "Manage"
468msgid "Manage"
403msgstr "አስተዳዳሪ"
469msgstr "አስተዳዳሪ"
404
470
405−#: qml/Dash/ScopesList.qml:104
471+#: qml/Dash/ScopesList.qml:187
406msgid "Home"
472msgid "Home"
407msgstr "ቤት"
473msgstr "ቤት"
408
474
409−#: qml/Dash/ScopesList.qml:105
475+#: qml/Dash/ScopesList.qml:188
410msgid "Also installed"
476msgid "Also installed"
411msgstr "እንዲሁም የተገጠሙ"
477msgstr "እንዲሁም የተገጠሙ"
412
478
413−#: qml/DisabledScreenNotice.qml:109
414−msgid ""
415−"Your device is now connected to an external display. Use this screen as a "
416−"touch pad to interact with the pointer."
417−msgstr "የ እርስዎ አካል አሁን ከ ውጪ ማሳያ ጋር ተገናኝቷል: ይህን መመልከቻ እንደ ተችፓድ መጠቀሚያ"
418−
419#: qml/Greeter/CoverPage.qml:127
479#: qml/Greeter/CoverPage.qml:127
420msgid "Unlock"
480msgid "Unlock"
421msgstr "መክፈቻ"
481msgstr "መክፈቻ"
@@ -439,33 +499,46 @@ msgid_plural "Please wait %1 minutes and then try again…"
439msgstr[0] "እባክዎን ይቆዩ %1 ደቂቃ እና ከዛ እንደ ገና ይምክሩ…"
499msgstr[0] "እባክዎን ይቆዩ %1 ደቂቃ እና ከዛ እንደ ገና ይምክሩ…"
440msgstr[1] "እባክዎን ይቆዩ %1 ደቂቃዎች እና ከዛ እንደ ገና ይምክሩ…"
500msgstr[1] "እባክዎን ይቆዩ %1 ደቂቃዎች እና ከዛ እንደ ገና ይምክሩ…"
441
501
442−#: qml/Greeter/Greeter.qml:596
502+#: qml/Greeter/Greeter.qml:550
443msgid "Try again"
503msgid "Try again"
444msgstr "እንደገና ይሞክሩ"
504msgstr "እንደገና ይሞክሩ"
445
505
446−#: qml/Greeter/LoginList.qml:70
506+#: qml/Greeter/Greeter.qml:551
507+msgid "Enter passphrase to unlock"
508+msgstr "የ ማለፊያ ሀረግ ያስገቡ ለ መክፈት"
509+
510+#: qml/Greeter/Greeter.qml:552
511+msgid "Enter passcode to unlock"
512+msgstr "የ ማለፊያ ኮድ ያስገቡ ለ መክፈት"
513+
514+#: qml/Greeter/NarrowView.qml:228
515+msgid "Emergency"
516+msgstr "ድንገተኛ"
517+
518+#: qml/Greeter/PromptList.qml:126
447msgid "Passphrase"
519msgid "Passphrase"
448msgstr "የማለፊያ ሐረግ"
520msgstr "የማለፊያ ሐረግ"
449
521
450−#: qml/Greeter/LoginList.qml:71
522+#: qml/Greeter/PromptList.qml:126
451msgid "Passcode"
523msgid "Passcode"
452msgstr "ማለፊያ ኮድ"
524msgstr "ማለፊያ ኮድ"
453
525
454−#: qml/Greeter/LoginList.qml:98
526+#: qml/Greeter/SessionsList.qml:124
455−msgid "Retry"
527+msgid "Select desktop environment"
456−msgstr "እንደገና ይሞክሩ"
528+msgstr "የ ዴስክቶፕ አይነት ይምረጡ"
457
529
458−#: qml/Greeter/LoginList.qml:99
530+#: qml/Launcher/Drawer.qml:94
459−msgid "Log In"
531+msgid "Search…"
460−msgstr "መግቢያ"
532+msgstr "መፈለጊያ..."
461
533
462−#: qml/Greeter/NarrowView.qml:252
534+#: qml/Launcher/Drawer.qml:129
535+msgctxt "Apps sorted alphabetically"
463−msgid "Emergency"
536+msgid "A-Z"
464−msgstr "ድንገተኛ"
537+msgstr "A-Z"
465
538
466−#: qml/Greeter/SessionsList.qml:122
539+#: qml/Launcher/MoreAppsHeader.qml:55
467−msgid "Select desktop environment"
540+msgid "More apps in the store"
468−msgstr "የ ዴስክቶፕ አይነት ይምረጡ"
541+msgstr "ተጨማሪ መተግበሪያ በ ሱቅ ውስጥ"
469
542
470#: qml/Notifications/NotificationMenuItemFactory.qml:124
543#: qml/Notifications/NotificationMenuItemFactory.qml:124
471msgid "Show password"
544msgid "Show password"
@@ -479,62 +552,62 @@ msgstr "ወደ ጥሪው ለመመለስ መታ ያድርጉ..."
479msgid "Conference"
552msgid "Conference"
480msgstr "ስብሰባ"
553msgstr "ስብሰባ"
481
554
482−#: qml/Panel/Indicators/MenuItemFactory.qml:847
555+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:869
483msgid "Nothing is playing"
556msgid "Nothing is playing"
484msgstr "ምንም አይጫወትም"
557msgstr "ምንም አይጫወትም"
485
558
486−#: qml/Panel/Indicators/MenuItemFactory.qml:975
559+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:997
487#, qt-format
560#, qt-format
488msgid "%1 hour"
561msgid "%1 hour"
489msgid_plural "%1 hours"
562msgid_plural "%1 hours"
490msgstr[0] "%1 ሰአት"
563msgstr[0] "%1 ሰአት"
491msgstr[1] "%1 ሰአቶች"
564msgstr[1] "%1 ሰአቶች"
492
565
493−#: qml/Panel/Indicators/MenuItemFactory.qml:979
566+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1001
494#, qt-format
567#, qt-format
495msgid "%1 minute"
568msgid "%1 minute"
496msgid_plural "%1 minutes"
569msgid_plural "%1 minutes"
497msgstr[0] "%1 ደቂቃ"
570msgstr[0] "%1 ደቂቃ"
498msgstr[1] "%1 ደቂቃዎች"
571msgstr[1] "%1 ደቂቃዎች"
499
572
500−#: qml/Panel/Indicators/MenuItemFactory.qml:984
573+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1006
501#, qt-format
574#, qt-format
502msgid "%1 second"
575msgid "%1 second"
503msgid_plural "%1 seconds"
576msgid_plural "%1 seconds"
504msgstr[0] "%1 ሰከንድ"
577msgstr[0] "%1 ሰከንድ"
505msgstr[1] "%1 ሰከንዶች"
578msgstr[1] "%1 ሰከንዶች"
506
579
507−#: qml/Panel/Indicators/MenuItemFactory.qml:987
580+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1009
508msgid "0 seconds"
581msgid "0 seconds"
509msgstr "0 ሰከንዶች"
582msgstr "0 ሰከንዶች"
510
583
511#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
584#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
512−#: qml/Panel/Indicators/MenuItemFactory.qml:989
585+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1011
513#, qt-format
586#, qt-format
514msgid "%1 remaining"
587msgid "%1 remaining"
515msgstr "%1 የቀረው"
588msgstr "%1 የቀረው"
516
589
517−#: qml/Panel/Indicators/MenuItemFactory.qml:995
590+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1017
518msgid "In queue…"
591msgid "In queue…"
519msgstr "ወረፋ በመጠበቅ ላይ…"
592msgstr "ወረፋ በመጠበቅ ላይ…"
520
593
521−#: qml/Panel/Indicators/MenuItemFactory.qml:999
594+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1021
522msgid "Downloading"
595msgid "Downloading"
523msgstr "በማውረድ ላይ"
596msgstr "በማውረድ ላይ"
524
597
525−#: qml/Panel/Indicators/MenuItemFactory.qml:1001
598+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1023
526msgid "Paused, tap to resume"
599msgid "Paused, tap to resume"
527msgstr "ማስቆሚያ: ለመቀጠል መታ ያድርጉ"
600msgstr "ማስቆሚያ: ለመቀጠል መታ ያድርጉ"
528
601
529−#: qml/Panel/Indicators/MenuItemFactory.qml:1003
602+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1025
530msgid "Canceled"
603msgid "Canceled"
531msgstr "ተሰርዟል"
604msgstr "ተሰርዟል"
532
605
533−#: qml/Panel/Indicators/MenuItemFactory.qml:1005
606+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1027
534msgid "Finished"
607msgid "Finished"
535msgstr "ጨርሷል"
608msgstr "ጨርሷል"
536
609
537−#: qml/Panel/Indicators/MenuItemFactory.qml:1007
610+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1029
538msgid "Failed, tap to retry"
611msgid "Failed, tap to retry"
539msgstr "አልተቻለም: እንደገና ለመሞከር መታ ያድርጉ"
612msgstr "አልተቻለም: እንደገና ለመሞከር መታ ያድርጉ"
540
613
@@ -554,13 +627,17 @@ msgctxt "Button: Call back on phone"
554msgid "Call back"
627msgid "Call back"
555msgstr "መልሶ መደወያ"
628msgstr "መልሶ መደወያ"
556
629
630+#: qml/Panel/PanelMenuPage.qml:92
631+msgid "Back"
632+msgstr "ወደ ኋላ"
633+
557#: qml/Stage/SideStage.qml:76
634#: qml/Stage/SideStage.qml:76
558msgid "Drag using 3 fingers any application from one window to the other"
635msgid "Drag using 3 fingers any application from one window to the other"
559msgstr "መጎተቻ 3 ጣቶች በ መጠቀም ማንኛውንም መተግበሪያ ከ አንድ መስኮት ወደ ሌላ"
636msgstr "መጎተቻ 3 ጣቶች በ መጠቀም ማንኛውንም መተግበሪያ ከ አንድ መስኮት ወደ ሌላ"
560
637
561#: qml/Tutorial/TutorialLeftLong.qml:49
638#: qml/Tutorial/TutorialLeftLong.qml:49
562−msgid "Long swipe from the left edge to open the Today scope"
639+msgid "Long swipe from the left edge to open the Application Drawer"
563−msgstr "በ ረጅሙ ከ ግራ ጠርዝ በኩል ይጥረጉ የ ዛሬን ክልል ለ መክፈት"
640+msgstr "በረጅሙ ይጥረጉ ከ ግራ ጠርዝ በኩል መተግበሪያ ለ መክፈት ከ መሳቢያ ውስጥ"
564
641
565#: qml/Tutorial/TutorialLeft.qml:47
642#: qml/Tutorial/TutorialLeft.qml:47
566msgid "Short swipe from the left edge to open the launcher"
643msgid "Short swipe from the left edge to open the launcher"
@@ -588,7 +665,7 @@ msgid "Language"
588msgstr "ቋንቋ"
665msgstr "ቋንቋ"
589
666
590#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
667#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
591−#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
668+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/40-location.qml:271
592#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
669#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
593#: qml/Wizard/Pages/70-passwd-type.qml:145
670#: qml/Wizard/Pages/70-passwd-type.qml:145
594#: qml/Wizard/Pages/75-report-check.qml:84
671#: qml/Wizard/Pages/75-report-check.qml:84
@@ -609,25 +686,24 @@ msgstr "የ ፊደል ገበታ ቋንቋ"
609msgid "Keyboard layout"
686msgid "Keyboard layout"
610msgstr "የ ፊደል ገበታ አቀራረብ"
687msgstr "የ ፊደል ገበታ አቀራረብ"
611
688
612−#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
689+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:206
613−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
690+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/sim.qml:101
614−#: qml/Wizard/Pages/sim.qml:101
615msgid "Skip"
691msgid "Skip"
616msgstr "መዝለያ"
692msgstr "መዝለያ"
617
693
618−#: qml/Wizard/Pages/30-wifi.qml:31
694+#: qml/Wizard/Pages/30-wifi.qml:30
619msgid "Connect to Wi‑Fi"
695msgid "Connect to Wi‑Fi"
620msgstr "ወደ ዋይ‑ፋይ መገናኛ"
696msgstr "ወደ ዋይ‑ፋይ መገናኛ"
621
697
622−#: qml/Wizard/Pages/30-wifi.qml:132
698+#: qml/Wizard/Pages/30-wifi.qml:131
623msgid "Connected"
699msgid "Connected"
624msgstr "ተገናኝቷል"
700msgstr "ተገናኝቷል"
625
701
626−#: qml/Wizard/Pages/30-wifi.qml:165
702+#: qml/Wizard/Pages/30-wifi.qml:164
627msgid "Available Wi-Fi networks"
703msgid "Available Wi-Fi networks"
628msgstr "ዝግጁ የ ዋይ-ፋይ ኔትዎርኮች"
704msgstr "ዝግጁ የ ዋይ-ፋይ ኔትዎርኮች"
629
705
630−#: qml/Wizard/Pages/30-wifi.qml:166
706+#: qml/Wizard/Pages/30-wifi.qml:165
631msgid "No available Wi-Fi networks"
707msgid "No available Wi-Fi networks"
632msgstr "ምንም ዝግጁ ዋይ-ፋይ ኔትዎርኮች አልተገኙም"
708msgstr "ምንም ዝግጁ ዋይ-ፋይ ኔትዎርኮች አልተገኙም"
633
709
@@ -714,35 +790,6 @@ msgstr "የ ስርአቱን አፈጻጸም ለማሻሻል የ ግጭት እና
714msgid "Privacy policy"
790msgid "Privacy policy"
715msgstr "የ ግላዊነት መመሪያ"
791msgstr "የ ግላዊነት መመሪያ"
716
792
717−#: qml/Wizard/Pages/77-system-update.qml:28
718−msgid "Update Device"
719−msgstr "አካሉን ማሻሻያ"
720−
721−#: qml/Wizard/Pages/77-system-update.qml:55
722−msgid ""
723−"There is a system update available and ready to install. Afterwards, the "
724−"device will automatically restart."
725−msgstr "የ ስርአት ማሻሻያ ዝግጁ ነው ለ መግጠም: ከዚያ በኋላ አካሉ ራሱ በራሱ እንደገና ይጀምራል"
726−
727−#: qml/Wizard/Pages/77-system-update.qml:76
728−msgctxt "string identifying name of the update"
729−msgid "Ubuntu system"
730−msgstr "የ ኡቡቱ ስርአት"
731−
732−#: qml/Wizard/Pages/77-system-update.qml:83
733−#, qt-format
734−msgctxt "version of the system update"
735−msgid "Version %1"
736−msgstr "እትም %1"
737−
738−#: qml/Wizard/Pages/77-system-update.qml:102
739−msgid "This could take a few minutes..."
740−msgstr "ይህ ትንሽ ደቂቆች ይወስዳል"
741−
742−#: qml/Wizard/Pages/77-system-update.qml:116
743−msgid "Install and restart now"
744−msgstr "መግጠሚያ እና እንደገና ማስጀመሪያ"
745−
746#: qml/Wizard/Pages/80-finished.qml:89
793#: qml/Wizard/Pages/80-finished.qml:89
747msgid "Welcome to Ubuntu"
794msgid "Welcome to Ubuntu"
748msgstr "እንኳን ደህና መጡ ወደ ኡቡንቱ"
795msgstr "እንኳን ደህና መጡ ወደ ኡቡንቱ"
@@ -1286,8 +1333,40 @@ msgstr "በጣም ደካማ የ መግቢያ ቃል"
1286#~ msgid "Short or long swipe from the right edge to view your open apps"
1333#~ msgid "Short or long swipe from the right edge to view your open apps"
1287#~ msgstr "በ አጭሩ ወይንም በ ረጅሙ ይጥረጉ ከ ቀኝ ጠረዝ በኩል የ ተከፈቱ መተግበሪያዎችን ለማየት"
1334#~ msgstr "በ አጭሩ ወይንም በ ረጅሙ ይጥረጉ ከ ቀኝ ጠረዝ በኩል የ ተከፈቱ መተግበሪያዎችን ለማየት"
1288
1335
1336+#~ msgid "Long swipe from the left edge to open the Today scope"
1337+#~ msgstr "በ ረጅሙ ከ ግራ ጠርዝ በኩል ይጥረጉ የ ዛሬን ክልል ለ መክፈት"
1338+
1289#~ msgid "Swipe from the left edge to open the launcher"
1339#~ msgid "Swipe from the left edge to open the launcher"
1290#~ msgstr "ከ ግራ ጠርዝ በኩል ይጥረጉ ማስጀመሪያውን ለ መክፈት"
1340#~ msgstr "ከ ግራ ጠርዝ በኩል ይጥረጉ ማስጀመሪያውን ለ መክፈት"
1291
1341
1292#~ msgid "Hover your mouse on the right edge to view your open apps"
1342#~ msgid "Hover your mouse on the right edge to view your open apps"
1293#~ msgstr "የ እርስዎን አይጥ ወደ ቀኝ ጠርዝ በኩል ሲያደርጉ የ ተከፈቱ መተግበሪያዎች መመልከቻ"
1343#~ msgstr "የ እርስዎን አይጥ ወደ ቀኝ ጠርዝ በኩል ሲያደርጉ የ ተከፈቱ መተግበሪያዎች መመልከቻ"
1344+
1345+#~ msgid "Takes a screenshot of a window."
1346+#~ msgstr "የ መስኮት መመልከቻ ፎቶ ማንሻ"
1347+
1348+#~ msgid "Super + 0 to 9"
1349+#~ msgstr "Super + 0 እስከ 9"
1350+
1351+#~ msgid "Install and restart now"
1352+#~ msgstr "መግጠሚያ እና እንደገና ማስጀመሪያ"
1353+
1354+#~ msgid "This could take a few minutes..."
1355+#~ msgstr "ይህ ትንሽ ደቂቆች ይወስዳል"
1356+
1357+#, qt-format
1358+#~ msgctxt "version of the system update"
1359+#~ msgid "Version %1"
1360+#~ msgstr "እትም %1"
1361+
1362+#~ msgctxt "string identifying name of the update"
1363+#~ msgid "Ubuntu system"
1364+#~ msgstr "የ ኡቡቱ ስርአት"
1365+
1366+#~ msgid "Update Device"
1367+#~ msgstr "አካሉን ማሻሻያ"
1368+
1369+#~ msgid ""
1370+#~ "There is a system update available and ready to install. Afterwards, the "
1371+#~ "device will automatically restart."
1372+#~ msgstr "የ ስርአት ማሻሻያ ዝግጁ ነው ለ መግጠም: ከዚያ በኋላ አካሉ ራሱ በራሱ እንደገና ይጀምራል"
po/ar.po+219−166
@@ -7,8 +7,8 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-11-16 10:44+0000\n"
10+"POT-Creation-Date: 2017-04-04 22:56+0000\n"
11−"PO-Revision-Date: 2015-07-29 09:41+0000\n"
11+"PO-Revision-Date: 2017-01-14 05:20+0000\n"
12"Last-Translator: Ibrahim Saed <ibraheem5000@gmail.com>\n"
12"Last-Translator: Ibrahim Saed <ibraheem5000@gmail.com>\n"
13"Language-Team: Arabic <ar@li.org>\n"
13"Language-Team: Arabic <ar@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
@@ -16,75 +16,103 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= "
17"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= "
18"3 && n % 100 <= 10 ? 3 : n % 100 >= 11 && n % 100 <= 99 ? 4 : 5;\n"
18"3 && n % 100 <= 10 ? 3 : n % 100 >= 11 && n % 100 <= 99 ? 4 : 5;\n"
19−"X-Launchpad-Export-Date: 2016-11-23 06:34+0000\n"
19+"X-Launchpad-Export-Date: 2017-04-07 06:29+0000\n"
20−"X-Generator: Launchpad (build 18269)\n"
20+"X-Generator: Launchpad (build 18343)\n"
21
21
22−#: plugins/LightDM/Greeter.cpp:123
22+#: plugins/LightDM/Greeter.cpp:188
23msgid "Password: "
23msgid "Password: "
24msgstr "كلمة السر: "
24msgstr "كلمة السر: "
25
25
26+#: plugins/LightDM/Greeter.cpp:203
27+msgid "Username"
28+msgstr ""
29+
30+#: plugins/LightDM/Greeter.cpp:242
31+msgid "Failed to authenticate"
32+msgstr ""
33+
34+#: plugins/LightDM/Greeter.cpp:244
35+msgid "Invalid password, please try again"
36+msgstr ""
37+
38+#: plugins/LightDM/Greeter.cpp:254
39+msgid "Log In"
40+msgstr ""
41+
42+#: plugins/LightDM/Greeter.cpp:254
43+msgid "Retry"
44+msgstr "إعادة المحاولة"
45+
46+#: plugins/LightDM/UsersModel.cpp:157
47+msgid "Login"
48+msgstr ""
49+
50+#: plugins/LightDM/UsersModel.cpp:165
51+msgid "Guest Session"
52+msgstr ""
53+
26#: plugins/Unity/Launcher/launcheritem.cpp:49
54#: plugins/Unity/Launcher/launcheritem.cpp:49
27−#: plugins/Unity/Launcher/launcheritem.cpp:108
55+#: plugins/Unity/Launcher/launcheritem.cpp:123
28msgid "Pin shortcut"
56msgid "Pin shortcut"
29msgstr "تثبيت الاختصار"
57msgstr "تثبيت الاختصار"
30
58
31−#: plugins/Unity/Launcher/launcheritem.cpp:54
59+#: plugins/Unity/Launcher/launcheritem.cpp:55
32msgid "Quit"
60msgid "Quit"
33msgstr "خروج"
61msgstr "خروج"
34
62
35−#: plugins/Unity/Launcher/launcheritem.cpp:108
63+#: plugins/Unity/Launcher/launcheritem.cpp:123
36msgid "Unpin shortcut"
64msgid "Unpin shortcut"
37msgstr "إزالة تثبيت الاختصار"
65msgstr "إزالة تثبيت الاختصار"
38
66
39−#: qml/Components/Dialogs.qml:149
67+#: qml/Components/Dialogs.qml:176
40msgctxt "Title: Lock/Log out dialog"
68msgctxt "Title: Lock/Log out dialog"
41msgid "Log out"
69msgid "Log out"
42msgstr "خروج"
70msgstr "خروج"
43
71
44−#: qml/Components/Dialogs.qml:150
72+#: qml/Components/Dialogs.qml:177
45msgid "Are you sure you want to log out?"
73msgid "Are you sure you want to log out?"
46msgstr "هل أنت متأكد من رغبتك في تسجيل الخروج؟"
74msgstr "هل أنت متأكد من رغبتك في تسجيل الخروج؟"
47
75
48−#: qml/Components/Dialogs.qml:152
76+#: qml/Components/Dialogs.qml:180
49msgctxt "Button: Lock the system"
77msgctxt "Button: Lock the system"
50msgid "Lock"
78msgid "Lock"
51msgstr "أوصِد"
79msgstr "أوصِد"
52
80
53−#: qml/Components/Dialogs.qml:159
81+#: qml/Components/Dialogs.qml:191
54msgctxt "Button: Log out from the system"
82msgctxt "Button: Log out from the system"
55msgid "Log Out"
83msgid "Log Out"
56msgstr "خروج"
84msgstr "خروج"
57
85
58−#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
86+#: qml/Components/Dialogs.qml:199 qml/Components/Dialogs.qml:264
59−#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
87+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:208
60#: qml/Wizard/Pages/passcode-confirm.qml:32
88#: qml/Wizard/Pages/passcode-confirm.qml:32
61#: qml/Wizard/Pages/passcode-set.qml:32
89#: qml/Wizard/Pages/passcode-set.qml:32
62msgid "Cancel"
90msgid "Cancel"
63msgstr "إلغاء"
91msgstr "إلغاء"
64
92
65−#: qml/Components/Dialogs.qml:178
93+#: qml/Components/Dialogs.qml:211
66msgctxt "Title: Reboot dialog"
94msgctxt "Title: Reboot dialog"
67msgid "Reboot"
95msgid "Reboot"
68msgstr "إعادة التشغيل"
96msgstr "إعادة التشغيل"
69
97
70−#: qml/Components/Dialogs.qml:179
98+#: qml/Components/Dialogs.qml:212
71msgid "Are you sure you want to reboot?"
99msgid "Are you sure you want to reboot?"
72msgstr "هل أنت متأكد من رغبتك في إعادة تشغيل الجهاز؟"
100msgstr "هل أنت متأكد من رغبتك في إعادة تشغيل الجهاز؟"
73
101
74−#: qml/Components/Dialogs.qml:181
102+#: qml/Components/Dialogs.qml:215
75msgid "No"
103msgid "No"
76msgstr "لا"
104msgstr "لا"
77
105
78−#: qml/Components/Dialogs.qml:187
106+#: qml/Components/Dialogs.qml:223
79msgid "Yes"
107msgid "Yes"
80msgstr "نعم"
108msgstr "نعم"
81
109
82−#: qml/Components/Dialogs.qml:202
110+#: qml/Components/Dialogs.qml:239
83msgctxt "Title: Power off/Restart dialog"
111msgctxt "Title: Power off/Restart dialog"
84msgid "Power"
112msgid "Power"
85msgstr "الطاقة"
113msgstr "الطاقة"
86
114
87−#: qml/Components/Dialogs.qml:203
115+#: qml/Components/Dialogs.qml:240
88msgid ""
116msgid ""
89"Are you sure you would like\n"
117"Are you sure you would like\n"
90"to power off?"
118"to power off?"
@@ -92,177 +120,193 @@ msgstr ""
92"هل أنت متأكد من رغبتك\n"
120"هل أنت متأكد من رغبتك\n"
93"في إيقاف التشغيل؟"
121"في إيقاف التشغيل؟"
94
122
95−#: qml/Components/Dialogs.qml:205
123+#: qml/Components/Dialogs.qml:244
96msgctxt "Button: Power off the system"
124msgctxt "Button: Power off the system"
97msgid "Power off"
125msgid "Power off"
98msgstr "إيقاف التشغيل"
126msgstr "إيقاف التشغيل"
99
127
100−#: qml/Components/Dialogs.qml:214
128+#: qml/Components/Dialogs.qml:255
101msgctxt "Button: Restart the system"
129msgctxt "Button: Restart the system"
102msgid "Restart"
130msgid "Restart"
103msgstr "إعادة التشغيل"
131msgstr "إعادة التشغيل"
104
132
105#: qml/Components/KeyboardShortcutsOverlay.qml:41
133#: qml/Components/KeyboardShortcutsOverlay.qml:41
106msgid "Keyboard Shortcuts"
134msgid "Keyboard Shortcuts"
107−msgstr ""
135+msgstr "اختصارات لوحة المفاتيح"
108
136
109#: qml/Components/KeyboardShortcutsOverlay.qml:55
137#: qml/Components/KeyboardShortcutsOverlay.qml:55
110msgid "Unity 8"
138msgid "Unity 8"
111−msgstr ""
139+msgstr "يونتي 8"
112
140
113#: qml/Components/KeyboardShortcutsOverlay.qml:62
141#: qml/Components/KeyboardShortcutsOverlay.qml:62
114msgid "PrtScr"
142msgid "PrtScr"
115−msgstr ""
143+msgstr "PrtScr"
116
144
117#: qml/Components/KeyboardShortcutsOverlay.qml:67
145#: qml/Components/KeyboardShortcutsOverlay.qml:67
118msgid "Takes a screenshot."
146msgid "Takes a screenshot."
119−msgstr ""
147+msgstr "أخذ لقطة للشاشة"
120
148
121#: qml/Components/KeyboardShortcutsOverlay.qml:75
149#: qml/Components/KeyboardShortcutsOverlay.qml:75
122msgid "Alt + PrtScr"
150msgid "Alt + PrtScr"
123−msgstr ""
151+msgstr "Alt + PrtScr"
124
152
125#: qml/Components/KeyboardShortcutsOverlay.qml:80
153#: qml/Components/KeyboardShortcutsOverlay.qml:80
126−msgid "Takes a screenshot of a window."
154+msgid "Takes a screenshot of the current window."
127msgstr ""
155msgstr ""
128
156
129#: qml/Components/KeyboardShortcutsOverlay.qml:88
157#: qml/Components/KeyboardShortcutsOverlay.qml:88
130msgid "Super + Space"
158msgid "Super + Space"
131−msgstr ""
159+msgstr "Super + Space"
132
160
133#: qml/Components/KeyboardShortcutsOverlay.qml:93
161#: qml/Components/KeyboardShortcutsOverlay.qml:93
134msgid "Switches to next keyboard layout."
162msgid "Switches to next keyboard layout."
135−msgstr ""
163+msgstr "للتحويل إلى مخطط لوحة المفاتيح التالي."
136
164
137#: qml/Components/KeyboardShortcutsOverlay.qml:101
165#: qml/Components/KeyboardShortcutsOverlay.qml:101
138msgid "Super + Shift + Space"
166msgid "Super + Shift + Space"
139−msgstr ""
167+msgstr "Super + Shift + Space"
140
168
141#: qml/Components/KeyboardShortcutsOverlay.qml:106
169#: qml/Components/KeyboardShortcutsOverlay.qml:106
142msgid "Switches to previous keyboard layout."
170msgid "Switches to previous keyboard layout."
171+msgstr "للتحويل إلى مخطط لوحة المفاتيح السابق."
172+
173+#: qml/Components/KeyboardShortcutsOverlay.qml:114
174+msgid "Ctrl + Alt + T"
143msgstr ""
175msgstr ""
144
176
145−#: qml/Components/KeyboardShortcutsOverlay.qml:118
177+#: qml/Components/KeyboardShortcutsOverlay.qml:119
146−msgid "Launcher"
178+msgid "Starts the Terminal application."
147msgstr ""
179msgstr ""
148
180
149−#: qml/Components/KeyboardShortcutsOverlay.qml:125
181+#: qml/Components/KeyboardShortcutsOverlay.qml:131
182+msgid "Launcher"
183+msgstr "شريط بدء التطبيقات"
184+
185+#: qml/Components/KeyboardShortcutsOverlay.qml:138
150msgid "Super (Hold)"
186msgid "Super (Hold)"
151−msgstr ""
187+msgstr "Super (Hold)"
152
188
153−#: qml/Components/KeyboardShortcutsOverlay.qml:130
189+#: qml/Components/KeyboardShortcutsOverlay.qml:143
154msgid "Opens the launcher, displays shortcuts."
190msgid "Opens the launcher, displays shortcuts."
155−msgstr ""
191+msgstr "لفتح شريط بدء التطبيقات، وإظهار الاختصارات."
156
192
157−#: qml/Components/KeyboardShortcutsOverlay.qml:138
193+#: qml/Components/KeyboardShortcutsOverlay.qml:151
158msgid "Alt + F1"
194msgid "Alt + F1"
159−msgstr ""
195+msgstr "Alt + F1"
160
196
161−#: qml/Components/KeyboardShortcutsOverlay.qml:143
197+#: qml/Components/KeyboardShortcutsOverlay.qml:156
162msgid "Opens launcher keyboard navigation mode."
198msgid "Opens launcher keyboard navigation mode."
163msgstr ""
199msgstr ""
164
200
165−#: qml/Components/KeyboardShortcutsOverlay.qml:151
201+#: qml/Components/KeyboardShortcutsOverlay.qml:164
166msgid "Super + Tab"
202msgid "Super + Tab"
167−msgstr ""
203+msgstr "Super + Tab"
168
204
169−#: qml/Components/KeyboardShortcutsOverlay.qml:156
205+#: qml/Components/KeyboardShortcutsOverlay.qml:169
170msgid "Switches applications via the launcher."
206msgid "Switches applications via the launcher."
171−msgstr ""
207+msgstr "للتحويل بين التطبيقات عبر شريط بدء التطبيقات."
172
208
173−#: qml/Components/KeyboardShortcutsOverlay.qml:164
209+#: qml/Components/KeyboardShortcutsOverlay.qml:177
174−msgid "Super + 0 to 9"
210+msgid "Super + 1 to 0"
175msgstr ""
211msgstr ""
176
212
177−#: qml/Components/KeyboardShortcutsOverlay.qml:169
213+#: qml/Components/KeyboardShortcutsOverlay.qml:182
178msgid "Same as clicking on a launcher icon."
214msgid "Same as clicking on a launcher icon."
215+msgstr "نفس إجراء الضغط على أيقونة في الشريط."
216+
217+#: qml/Components/KeyboardShortcutsOverlay.qml:190
218+msgid "Super + A"
219+msgstr "Super + A"
220+
221+#: qml/Components/KeyboardShortcutsOverlay.qml:195
222+msgid "Opens the Application Drawer."
179msgstr ""
223msgstr ""
180
224
181−#: qml/Components/KeyboardShortcutsOverlay.qml:181
225+#: qml/Components/KeyboardShortcutsOverlay.qml:207
182msgid "Scopes"
226msgid "Scopes"
183msgstr ""
227msgstr ""
184
228
185−#: qml/Components/KeyboardShortcutsOverlay.qml:188
229+#: qml/Components/KeyboardShortcutsOverlay.qml:214
186msgid "Super (Tap)"
230msgid "Super (Tap)"
187msgstr ""
231msgstr ""
188
232
189−#: qml/Components/KeyboardShortcutsOverlay.qml:193
233+#: qml/Components/KeyboardShortcutsOverlay.qml:219
190msgid "Opens the Scopes home."
234msgid "Opens the Scopes home."
191msgstr ""
235msgstr ""
192
236
193−#: qml/Components/KeyboardShortcutsOverlay.qml:209
237+#: qml/Components/KeyboardShortcutsOverlay.qml:235
194msgid "Switching"
238msgid "Switching"
195−msgstr ""
239+msgstr "التبديل"
196
240
197−#: qml/Components/KeyboardShortcutsOverlay.qml:216
241+#: qml/Components/KeyboardShortcutsOverlay.qml:242
198msgid "Alt + Tab"
242msgid "Alt + Tab"
199−msgstr ""
243+msgstr "Alt + Tab"
200
244
201−#: qml/Components/KeyboardShortcutsOverlay.qml:221
245+#: qml/Components/KeyboardShortcutsOverlay.qml:247
202msgid "Switches between applications."
246msgid "Switches between applications."
203−msgstr ""
247+msgstr "للتبديل بين التطبيقات المفتوحة."
204
248
205−#: qml/Components/KeyboardShortcutsOverlay.qml:229
249+#: qml/Components/KeyboardShortcutsOverlay.qml:255
206msgid "Super + W"
250msgid "Super + W"
207msgstr ""
251msgstr ""
208
252
209−#: qml/Components/KeyboardShortcutsOverlay.qml:234
253+#: qml/Components/KeyboardShortcutsOverlay.qml:260
210msgid "Opens the desktop spread."
254msgid "Opens the desktop spread."
211msgstr ""
255msgstr ""
212
256
213−#: qml/Components/KeyboardShortcutsOverlay.qml:242
257+#: qml/Components/KeyboardShortcutsOverlay.qml:268
214msgid "Cursor Left or Right"
258msgid "Cursor Left or Right"
215msgstr ""
259msgstr ""
216
260
217−#: qml/Components/KeyboardShortcutsOverlay.qml:247
261+#: qml/Components/KeyboardShortcutsOverlay.qml:273
218msgid "Moves the focus."
262msgid "Moves the focus."
219−msgstr ""
263+msgstr "لنقل التركيز."
220
264
221−#: qml/Components/KeyboardShortcutsOverlay.qml:259
265+#: qml/Components/KeyboardShortcutsOverlay.qml:285
222msgid "Windows"
266msgid "Windows"
223−msgstr ""
267+msgstr "النوافذ"
224
268
225−#: qml/Components/KeyboardShortcutsOverlay.qml:266
269+#: qml/Components/KeyboardShortcutsOverlay.qml:292
226msgid "Ctrl + Super + D"
270msgid "Ctrl + Super + D"
227−msgstr ""
271+msgstr "Ctrl + Super + D"
228
272
229−#: qml/Components/KeyboardShortcutsOverlay.qml:271
273+#: qml/Components/KeyboardShortcutsOverlay.qml:297
230msgid "Minimizes all windows."
274msgid "Minimizes all windows."
231−msgstr ""
275+msgstr "لتصغير جميع النوافذ."
232
276
233−#: qml/Components/KeyboardShortcutsOverlay.qml:279
277+#: qml/Components/KeyboardShortcutsOverlay.qml:305
234msgid "Ctrl + Super + Up"
278msgid "Ctrl + Super + Up"
235−msgstr ""
279+msgstr "Ctrl + Super + Up"
236
280
237−#: qml/Components/KeyboardShortcutsOverlay.qml:284
281+#: qml/Components/KeyboardShortcutsOverlay.qml:310
238msgid "Maximizes the current window."
282msgid "Maximizes the current window."
239−msgstr ""
283+msgstr "لتكبير النافذة الحالية."
240
284
241−#: qml/Components/KeyboardShortcutsOverlay.qml:292
285+#: qml/Components/KeyboardShortcutsOverlay.qml:318
242msgid "Ctrl + Super + Down"
286msgid "Ctrl + Super + Down"
243−msgstr ""
287+msgstr "Ctrl + Super + Down"
244
288
245−#: qml/Components/KeyboardShortcutsOverlay.qml:297
289+#: qml/Components/KeyboardShortcutsOverlay.qml:323
246msgid "Minimizes or restores the current window."
290msgid "Minimizes or restores the current window."
247−msgstr ""
291+msgstr "لتصغير او استعادة النافذة الحالية."
248
292
249−#: qml/Components/KeyboardShortcutsOverlay.qml:305
293+#: qml/Components/KeyboardShortcutsOverlay.qml:331
250msgid "Ctrl + Super + Left or Right"
294msgid "Ctrl + Super + Left or Right"
251msgstr ""
295msgstr ""
252
296
253−#: qml/Components/KeyboardShortcutsOverlay.qml:310
297+#: qml/Components/KeyboardShortcutsOverlay.qml:336
254msgid "Semi-maximizes the current window."
298msgid "Semi-maximizes the current window."
255msgstr ""
299msgstr ""
256
300
257−#: qml/Components/KeyboardShortcutsOverlay.qml:318
301+#: qml/Components/KeyboardShortcutsOverlay.qml:344
258msgid "Alt + F4"
302msgid "Alt + F4"
259msgstr ""
303msgstr ""
260
304
261−#: qml/Components/KeyboardShortcutsOverlay.qml:323
305+#: qml/Components/KeyboardShortcutsOverlay.qml:349
262msgid "Closes the current window."
306msgid "Closes the current window."
263msgstr ""
307msgstr ""
264
308
265−#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
309+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:228
266msgid "Return to Call"
310msgid "Return to Call"
267msgstr "العودة إلى المكالمة"
311msgstr "العودة إلى المكالمة"
268
312
@@ -270,7 +314,7 @@ msgstr "العودة إلى المكالمة"
270msgid "Emergency Call"
314msgid "Emergency Call"
271msgstr "مكالمة طوارئ"
315msgstr "مكالمة طوارئ"
272
316
273−#: qml/Components/Lockscreen.qml:244
317+#: qml/Components/Lockscreen.qml:245
274msgid "OK"
318msgid "OK"
275msgstr "موافق"
319msgstr "موافق"
276
320
@@ -284,29 +328,29 @@ msgstr ""
284msgid "%1:%2"
328msgid "%1:%2"
285msgstr ""
329msgstr ""
286
330
287−#: qml/Components/ModeSwitchWarningDialog.qml:32
331+#: qml/Components/ModeSwitchWarningDialog.qml:33
288msgid "Apps may have unsaved data:"
332msgid "Apps may have unsaved data:"
289msgstr ""
333msgstr ""
290
334
291−#: qml/Components/ModeSwitchWarningDialog.qml:57
335+#: qml/Components/ModeSwitchWarningDialog.qml:60
292msgctxt ""
336msgctxt ""
293"Re-dock means connect the device again to an external screen/mouse/keyboard"
337"Re-dock means connect the device again to an external screen/mouse/keyboard"
294msgid "Re-dock, save your work and close these apps to continue."
338msgid "Re-dock, save your work and close these apps to continue."
295msgstr ""
339msgstr ""
296
340
297−#: qml/Components/ModeSwitchWarningDialog.qml:63
341+#: qml/Components/ModeSwitchWarningDialog.qml:67
298msgid "Or force close now (unsaved data will be lost)."
342msgid "Or force close now (unsaved data will be lost)."
299−msgstr ""
343+msgstr "أو أغلق إجباريا الآن (ستفقد أي بيانات غير محفوظة)."
300
344
301−#: qml/Components/ModeSwitchWarningDialog.qml:75
345+#: qml/Components/ModeSwitchWarningDialog.qml:80
302msgid "OK, I will reconnect"
346msgid "OK, I will reconnect"
303msgstr ""
347msgstr ""
304
348
305−#: qml/Components/ModeSwitchWarningDialog.qml:76
349+#: qml/Components/ModeSwitchWarningDialog.qml:81
306msgid "Reconnect now!"
350msgid "Reconnect now!"
307msgstr ""
351msgstr ""
308
352
309−#: qml/Components/ModeSwitchWarningDialog.qml:88
353+#: qml/Components/ModeSwitchWarningDialog.qml:94
310msgid "Close all"
354msgid "Close all"
311msgstr ""
355msgstr ""
312
356
@@ -314,6 +358,28 @@ msgstr ""
314msgid "Preview Share Item"
358msgid "Preview Share Item"
315msgstr ""
359msgstr ""
316
360
361+#: qml/Components/VirtualTouchPad.qml:317
362+msgid ""
363+"Your device is now connected to an external display. Use this screen as a "
364+"touch pad to interact with the pointer."
365+msgstr ""
366+
367+#: qml/Components/VirtualTouchPad.qml:327
368+msgid "Tap left button to click."
369+msgstr "اضغط الزر الأيسر للنقر."
370+
371+#: qml/Components/VirtualTouchPad.qml:339
372+msgid "Tap right button to right click."
373+msgstr "اضغط الزر الأيمن للنقر الأيمن."
374+
375+#: qml/Components/VirtualTouchPad.qml:351
376+msgid "Swipe with two fingers to scroll."
377+msgstr ""
378+
379+#: qml/Components/VirtualTouchPad.qml:396
380+msgid "Find more settings in the system settings."
381+msgstr "اعثر على مزيد من الإعدادات في إعدادات النظام."
382+
317#: qml/Dash/DashPageHeader.qml:361
383#: qml/Dash/DashPageHeader.qml:361
318msgctxt "Button: Open the Ubuntu Store"
384msgctxt "Button: Open the Ubuntu Store"
319msgid "Store"
385msgid "Store"
@@ -345,24 +411,24 @@ msgstr ""
345msgid "Reset"
411msgid "Reset"
346msgstr ""
412msgstr ""
347
413
348−#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
414+#: qml/Dash/GenericScopeView.qml:547 qml/Dash/GenericScopeView.qml:718
349msgid "Show less"
415msgid "Show less"
350−msgstr ""
416+msgstr "عرض أقل"
351
417
352−#: qml/Dash/GenericScopeView.qml:545
418+#: qml/Dash/GenericScopeView.qml:547
353msgid "Show all"
419msgid "Show all"
354−msgstr ""
420+msgstr "عرض الكل"
355
421
356−#: qml/Dash/GenericScopeView.qml:576
422+#: qml/Dash/GenericScopeView.qml:578
357msgctxt "Label: Hint for dash search line edit"
423msgctxt "Label: Hint for dash search line edit"
358msgid "Search"
424msgid "Search"
359msgstr "بحث"
425msgstr "بحث"
360
426
361−#: qml/Dash/PageHeaderExtraPanel.qml:57
427+#: qml/Dash/PageHeaderExtraPanel.qml:67
362msgid "Recent Searches"
428msgid "Recent Searches"
363msgstr ""
429msgstr ""
364
430
365−#: qml/Dash/PageHeaderExtraPanel.qml:68
431+#: qml/Dash/PageHeaderExtraPanel.qml:78
366msgid "Clear All"
432msgid "Clear All"
367msgstr ""
433msgstr ""
368
434
@@ -399,24 +465,18 @@ msgstr "حرّر للتحديث..."
399msgid "Enable location data"
465msgid "Enable location data"
400msgstr "تفعيل بيانات الموقع"
466msgstr "تفعيل بيانات الموقع"
401
467
402−#: qml/Dash/ScopesList.qml:57
468+#: qml/Dash/ScopesList.qml:146
403msgid "Manage"
469msgid "Manage"
404msgstr "إدارة"
470msgstr "إدارة"
405
471
406−#: qml/Dash/ScopesList.qml:104
472+#: qml/Dash/ScopesList.qml:187
407msgid "Home"
473msgid "Home"
408msgstr "الرئيسية"
474msgstr "الرئيسية"
409
475
410−#: qml/Dash/ScopesList.qml:105
476+#: qml/Dash/ScopesList.qml:188
411msgid "Also installed"
477msgid "Also installed"
412msgstr "أيضا تم تثبيت"
478msgstr "أيضا تم تثبيت"
413
479
414−#: qml/DisabledScreenNotice.qml:109
415−msgid ""
416−"Your device is now connected to an external display. Use this screen as a "
417−"touch pad to interact with the pointer."
418−msgstr ""
419−
420#: qml/Greeter/CoverPage.qml:127
480#: qml/Greeter/CoverPage.qml:127
421msgid "Unlock"
481msgid "Unlock"
422msgstr "فك القفل"
482msgstr "فك القفل"
@@ -446,32 +506,45 @@ msgstr[3] "برجاء الانتظار %1 دقائق ثم المحاولة مج
446msgstr[4] "برجاء الانتظار %1 دقيقة ثم المحاولة مجددًا..."
506msgstr[4] "برجاء الانتظار %1 دقيقة ثم المحاولة مجددًا..."
447msgstr[5] "برجاء الانتظار %1 دقيقة ثم المحاولة مجددًا..."
507msgstr[5] "برجاء الانتظار %1 دقيقة ثم المحاولة مجددًا..."
448
508
449−#: qml/Greeter/Greeter.qml:596
509+#: qml/Greeter/Greeter.qml:550
450msgid "Try again"
510msgid "Try again"
451msgstr ""
511msgstr ""
452
512
453−#: qml/Greeter/LoginList.qml:70
513+#: qml/Greeter/Greeter.qml:551
514+msgid "Enter passphrase to unlock"
515+msgstr ""
516+
517+#: qml/Greeter/Greeter.qml:552
518+msgid "Enter passcode to unlock"
519+msgstr ""
520+
521+#: qml/Greeter/NarrowView.qml:228
522+msgid "Emergency"
523+msgstr ""
524+
525+#: qml/Greeter/PromptList.qml:126
454msgid "Passphrase"
526msgid "Passphrase"
455msgstr ""
527msgstr ""
456
528
457−#: qml/Greeter/LoginList.qml:71
529+#: qml/Greeter/PromptList.qml:126
458msgid "Passcode"
530msgid "Passcode"
459msgstr ""
531msgstr ""
460
532
461−#: qml/Greeter/LoginList.qml:98
533+#: qml/Greeter/SessionsList.qml:124
462−msgid "Retry"
534+msgid "Select desktop environment"
463−msgstr "إعادة المحاولة"
535+msgstr ""
464
536
465−#: qml/Greeter/LoginList.qml:99
537+#: qml/Launcher/Drawer.qml:94
466−msgid "Log In"
538+msgid "Search…"
467msgstr ""
539msgstr ""
468
540
469−#: qml/Greeter/NarrowView.qml:252
541+#: qml/Launcher/Drawer.qml:129
542+msgctxt "Apps sorted alphabetically"
470−msgid "Emergency"
543+msgid "A-Z"
471msgstr ""
544msgstr ""
472
545
473−#: qml/Greeter/SessionsList.qml:122
546+#: qml/Launcher/MoreAppsHeader.qml:55
474−msgid "Select desktop environment"
547+msgid "More apps in the store"
475msgstr ""
548msgstr ""
476
549
477#: qml/Notifications/NotificationMenuItemFactory.qml:124
550#: qml/Notifications/NotificationMenuItemFactory.qml:124
@@ -486,11 +559,11 @@ msgstr "انقر للعودة إلى المكالمة..."
486msgid "Conference"
559msgid "Conference"
487msgstr "مؤتمر"
560msgstr "مؤتمر"
488
561
489−#: qml/Panel/Indicators/MenuItemFactory.qml:847
562+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:869
490msgid "Nothing is playing"
563msgid "Nothing is playing"
491msgstr "لا شيء مُشغّل"
564msgstr "لا شيء مُشغّل"
492
565
493−#: qml/Panel/Indicators/MenuItemFactory.qml:975
566+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:997
494#, qt-format
567#, qt-format
495msgid "%1 hour"
568msgid "%1 hour"
496msgid_plural "%1 hours"
569msgid_plural "%1 hours"
@@ -501,7 +574,7 @@ msgstr[3] "%1 ساعات"
501msgstr[4] "%1 ساعة"
574msgstr[4] "%1 ساعة"
502msgstr[5] "%1 ساعة"
575msgstr[5] "%1 ساعة"
503
576
504−#: qml/Panel/Indicators/MenuItemFactory.qml:979
577+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1001
505#, qt-format
578#, qt-format
506msgid "%1 minute"
579msgid "%1 minute"
507msgid_plural "%1 minutes"
580msgid_plural "%1 minutes"
@@ -512,7 +585,7 @@ msgstr[3] "%1 دقائق"
512msgstr[4] "%1 دقيقة"
585msgstr[4] "%1 دقيقة"
513msgstr[5] "%1 دقيقة"
586msgstr[5] "%1 دقيقة"
514
587
515−#: qml/Panel/Indicators/MenuItemFactory.qml:984
588+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1006
516#, qt-format
589#, qt-format
517msgid "%1 second"
590msgid "%1 second"
518msgid_plural "%1 seconds"
591msgid_plural "%1 seconds"
@@ -523,37 +596,37 @@ msgstr[3] "%1 ثوان"
523msgstr[4] "%1 ثانية"
596msgstr[4] "%1 ثانية"
524msgstr[5] "%1 ثانية"
597msgstr[5] "%1 ثانية"
525
598
526−#: qml/Panel/Indicators/MenuItemFactory.qml:987
599+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1009
527msgid "0 seconds"
600msgid "0 seconds"
528msgstr "أقل من ثانية"
601msgstr "أقل من ثانية"
529
602
530#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
603#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
531−#: qml/Panel/Indicators/MenuItemFactory.qml:989
604+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1011
532#, qt-format
605#, qt-format
533msgid "%1 remaining"
606msgid "%1 remaining"
534msgstr "باق %1"
607msgstr "باق %1"
535
608
536−#: qml/Panel/Indicators/MenuItemFactory.qml:995
609+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1017
537msgid "In queue…"
610msgid "In queue…"
538msgstr "في الانتظار..."
611msgstr "في الانتظار..."
539
612
540−#: qml/Panel/Indicators/MenuItemFactory.qml:999
613+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1021
541msgid "Downloading"
614msgid "Downloading"
542msgstr "التنزيل"
615msgstr "التنزيل"
543
616
544−#: qml/Panel/Indicators/MenuItemFactory.qml:1001
617+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1023
545msgid "Paused, tap to resume"
618msgid "Paused, tap to resume"
546msgstr "مُلبث، انقر للاستئناف"
619msgstr "مُلبث، انقر للاستئناف"
547
620
548−#: qml/Panel/Indicators/MenuItemFactory.qml:1003
621+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1025
549msgid "Canceled"
622msgid "Canceled"
550msgstr "تم إلغائه"
623msgstr "تم إلغائه"
551
624
552−#: qml/Panel/Indicators/MenuItemFactory.qml:1005
625+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1027
553msgid "Finished"
626msgid "Finished"
554msgstr "انتهى"
627msgstr "انتهى"
555
628
556−#: qml/Panel/Indicators/MenuItemFactory.qml:1007
629+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1029
557msgid "Failed, tap to retry"
630msgid "Failed, tap to retry"
558msgstr "فشل، انقل لإعادة المحاولة"
631msgstr "فشل، انقل لإعادة المحاولة"
559
632
@@ -573,12 +646,16 @@ msgctxt "Button: Call back on phone"
573msgid "Call back"
646msgid "Call back"
574msgstr ""
647msgstr ""
575
648
649+#: qml/Panel/PanelMenuPage.qml:92
650+msgid "Back"
651+msgstr ""
652+
576#: qml/Stage/SideStage.qml:76
653#: qml/Stage/SideStage.qml:76
577msgid "Drag using 3 fingers any application from one window to the other"
654msgid "Drag using 3 fingers any application from one window to the other"
578msgstr ""
655msgstr ""
579
656
580#: qml/Tutorial/TutorialLeftLong.qml:49
657#: qml/Tutorial/TutorialLeftLong.qml:49
581−msgid "Long swipe from the left edge to open the Today scope"
658+msgid "Long swipe from the left edge to open the Application Drawer"
582msgstr ""
659msgstr ""
583
660
584#: qml/Tutorial/TutorialLeft.qml:47
661#: qml/Tutorial/TutorialLeft.qml:47
@@ -607,7 +684,7 @@ msgid "Language"
607msgstr ""
684msgstr ""
608
685
609#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
686#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
610−#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
687+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/40-location.qml:271
611#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
688#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
612#: qml/Wizard/Pages/70-passwd-type.qml:145
689#: qml/Wizard/Pages/70-passwd-type.qml:145
613#: qml/Wizard/Pages/75-report-check.qml:84
690#: qml/Wizard/Pages/75-report-check.qml:84
@@ -628,25 +705,24 @@ msgstr ""
628msgid "Keyboard layout"
705msgid "Keyboard layout"
629msgstr ""
706msgstr ""
630
707
631−#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
708+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:206
632−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
709+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/sim.qml:101
633−#: qml/Wizard/Pages/sim.qml:101
634msgid "Skip"
710msgid "Skip"
635msgstr "تخطي"
711msgstr "تخطي"
636
712
637−#: qml/Wizard/Pages/30-wifi.qml:31
713+#: qml/Wizard/Pages/30-wifi.qml:30
638msgid "Connect to Wi‑Fi"
714msgid "Connect to Wi‑Fi"
639msgstr "اتصل بالواي فاي"
715msgstr "اتصل بالواي فاي"
640
716
641−#: qml/Wizard/Pages/30-wifi.qml:132
717+#: qml/Wizard/Pages/30-wifi.qml:131
642msgid "Connected"
718msgid "Connected"
643msgstr ""
719msgstr ""
644
720
645−#: qml/Wizard/Pages/30-wifi.qml:165
721+#: qml/Wizard/Pages/30-wifi.qml:164
646msgid "Available Wi-Fi networks"
722msgid "Available Wi-Fi networks"
647msgstr ""
723msgstr ""
648
724
649−#: qml/Wizard/Pages/30-wifi.qml:166
725+#: qml/Wizard/Pages/30-wifi.qml:165
650msgid "No available Wi-Fi networks"
726msgid "No available Wi-Fi networks"
651msgstr ""
727msgstr ""
652
728
@@ -733,35 +809,6 @@ msgstr ""
733msgid "Privacy policy"
809msgid "Privacy policy"
734msgstr ""
810msgstr ""
735
811
736−#: qml/Wizard/Pages/77-system-update.qml:28
737−msgid "Update Device"
738−msgstr ""
739−
740−#: qml/Wizard/Pages/77-system-update.qml:55
741−msgid ""
742−"There is a system update available and ready to install. Afterwards, the "
743−"device will automatically restart."
744−msgstr ""
745−
746−#: qml/Wizard/Pages/77-system-update.qml:76
747−msgctxt "string identifying name of the update"
748−msgid "Ubuntu system"
749−msgstr ""
750−
751−#: qml/Wizard/Pages/77-system-update.qml:83
752−#, qt-format
753−msgctxt "version of the system update"
754−msgid "Version %1"
755−msgstr ""
756−
757−#: qml/Wizard/Pages/77-system-update.qml:102
758−msgid "This could take a few minutes..."
759−msgstr ""
760−
761−#: qml/Wizard/Pages/77-system-update.qml:116
762−msgid "Install and restart now"
763−msgstr ""
764−
765#: qml/Wizard/Pages/80-finished.qml:89
812#: qml/Wizard/Pages/80-finished.qml:89
766msgid "Welcome to Ubuntu"
813msgid "Welcome to Ubuntu"
767msgstr ""
814msgstr ""
@@ -1233,3 +1280,9 @@ msgstr ""
1233#~ msgstr ""
1280#~ msgstr ""
1234#~ "إذا تم إدخال العبارة السرية بشكل خاطئ، فسوف يتم إعادة الهاتف لحالة ضبط "
1281#~ "إذا تم إدخال العبارة السرية بشكل خاطئ، فسوف يتم إعادة الهاتف لحالة ضبط "
1235#~ "المصنع وسيتم حذف كافة البيانات الشخصية."
1282#~ "المصنع وسيتم حذف كافة البيانات الشخصية."
1283+
1284+#~ msgid "Takes a screenshot of a window."
1285+#~ msgstr "أخذ لقطة شاشة للنافذة"
1286+
1287+#~ msgid "Super + 0 to 9"
1288+#~ msgstr "Super + 0 to 9"
po/ast.po+228−149
@@ -7,83 +7,111 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-11-16 10:44+0000\n"
10+"POT-Creation-Date: 2017-04-04 22:56+0000\n"
11−"PO-Revision-Date: 2016-09-28 13:40+0000\n"
11+"PO-Revision-Date: 2016-12-16 02:13+0000\n"
12−"Last-Translator: Xuacu Saturio <xuacusk8@gmail.com>\n"
12+"Last-Translator: enolp <enolp@softastur.org>\n"
13"Language-Team: Asturian <ast@li.org>\n"
13"Language-Team: Asturian <ast@li.org>\n"
14"MIME-Version: 1.0\n"
14"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-11-23 06:34+0000\n"
18+"X-Launchpad-Export-Date: 2017-04-07 06:29+0000\n"
19−"X-Generator: Launchpad (build 18269)\n"
19+"X-Generator: Launchpad (build 18343)\n"
20
20
21−#: plugins/LightDM/Greeter.cpp:123
21+#: plugins/LightDM/Greeter.cpp:188
22msgid "Password: "
22msgid "Password: "
23msgstr "Contraseña: "
23msgstr "Contraseña: "
24
24
25+#: plugins/LightDM/Greeter.cpp:203
26+msgid "Username"
27+msgstr ""
28+
29+#: plugins/LightDM/Greeter.cpp:242
30+msgid "Failed to authenticate"
31+msgstr ""
32+
33+#: plugins/LightDM/Greeter.cpp:244
34+msgid "Invalid password, please try again"
35+msgstr ""
36+
37+#: plugins/LightDM/Greeter.cpp:254
38+msgid "Log In"
39+msgstr "Aniciar sesión"
40+
41+#: plugins/LightDM/Greeter.cpp:254
42+msgid "Retry"
43+msgstr "Reintentar"
44+
45+#: plugins/LightDM/UsersModel.cpp:157
46+msgid "Login"
47+msgstr ""
48+
49+#: plugins/LightDM/UsersModel.cpp:165
50+msgid "Guest Session"
51+msgstr ""
52+
25#: plugins/Unity/Launcher/launcheritem.cpp:49
53#: plugins/Unity/Launcher/launcheritem.cpp:49
26−#: plugins/Unity/Launcher/launcheritem.cpp:108
54+#: plugins/Unity/Launcher/launcheritem.cpp:123
27msgid "Pin shortcut"
55msgid "Pin shortcut"
28msgstr "Anclar atayu"
56msgstr "Anclar atayu"
29
57
30−#: plugins/Unity/Launcher/launcheritem.cpp:54
58+#: plugins/Unity/Launcher/launcheritem.cpp:55
31msgid "Quit"
59msgid "Quit"
32msgstr "Colar"
60msgstr "Colar"
33
61
34−#: plugins/Unity/Launcher/launcheritem.cpp:108
62+#: plugins/Unity/Launcher/launcheritem.cpp:123
35msgid "Unpin shortcut"
63msgid "Unpin shortcut"
36msgstr "Desanclar atayu"
64msgstr "Desanclar atayu"
37
65
38−#: qml/Components/Dialogs.qml:149
66+#: qml/Components/Dialogs.qml:176
39msgctxt "Title: Lock/Log out dialog"
67msgctxt "Title: Lock/Log out dialog"
40msgid "Log out"
68msgid "Log out"
41msgstr "Zarrar sesión"
69msgstr "Zarrar sesión"
42
70
43−#: qml/Components/Dialogs.qml:150
71+#: qml/Components/Dialogs.qml:177
44msgid "Are you sure you want to log out?"
72msgid "Are you sure you want to log out?"
45msgstr "¿De xuru que quies zarrar la sesión?"
73msgstr "¿De xuru que quies zarrar la sesión?"
46
74
47−#: qml/Components/Dialogs.qml:152
75+#: qml/Components/Dialogs.qml:180
48msgctxt "Button: Lock the system"
76msgctxt "Button: Lock the system"
49msgid "Lock"
77msgid "Lock"
50msgstr "Bloquiar"
78msgstr "Bloquiar"
51
79
52−#: qml/Components/Dialogs.qml:159
80+#: qml/Components/Dialogs.qml:191
53msgctxt "Button: Log out from the system"
81msgctxt "Button: Log out from the system"
54msgid "Log Out"
82msgid "Log Out"
55msgstr "Zarrar sesión"
83msgstr "Zarrar sesión"
56
84
57−#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
85+#: qml/Components/Dialogs.qml:199 qml/Components/Dialogs.qml:264
58−#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
86+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:208
59#: qml/Wizard/Pages/passcode-confirm.qml:32
87#: qml/Wizard/Pages/passcode-confirm.qml:32
60#: qml/Wizard/Pages/passcode-set.qml:32
88#: qml/Wizard/Pages/passcode-set.qml:32
61msgid "Cancel"
89msgid "Cancel"
62msgstr "Encaboxar"
90msgstr "Encaboxar"
63
91
64−#: qml/Components/Dialogs.qml:178
92+#: qml/Components/Dialogs.qml:211
65msgctxt "Title: Reboot dialog"
93msgctxt "Title: Reboot dialog"
66msgid "Reboot"
94msgid "Reboot"
67msgstr "Reaniciu"
95msgstr "Reaniciu"
68
96
69−#: qml/Components/Dialogs.qml:179
97+#: qml/Components/Dialogs.qml:212
70msgid "Are you sure you want to reboot?"
98msgid "Are you sure you want to reboot?"
71msgstr "¿De xuru que quies reaniciar?"
99msgstr "¿De xuru que quies reaniciar?"
72
100
73−#: qml/Components/Dialogs.qml:181
101+#: qml/Components/Dialogs.qml:215
74msgid "No"
102msgid "No"
75msgstr "Non"
103msgstr "Non"
76
104
77−#: qml/Components/Dialogs.qml:187
105+#: qml/Components/Dialogs.qml:223
78msgid "Yes"
106msgid "Yes"
79msgstr "Sí"
107msgstr "Sí"
80
108
81−#: qml/Components/Dialogs.qml:202
109+#: qml/Components/Dialogs.qml:239
82msgctxt "Title: Power off/Restart dialog"
110msgctxt "Title: Power off/Restart dialog"
83msgid "Power"
111msgid "Power"
84msgstr "Apagáu"
112msgstr "Apagáu"
85
113
86−#: qml/Components/Dialogs.qml:203
114+#: qml/Components/Dialogs.qml:240
87msgid ""
115msgid ""
88"Are you sure you would like\n"
116"Are you sure you would like\n"
89"to power off?"
117"to power off?"
@@ -91,12 +119,12 @@ msgstr ""
91"¿De xuru que te prestaría\n"
119"¿De xuru que te prestaría\n"
92"apagar?"
120"apagar?"
93
121
94−#: qml/Components/Dialogs.qml:205
122+#: qml/Components/Dialogs.qml:244
95msgctxt "Button: Power off the system"
123msgctxt "Button: Power off the system"
96msgid "Power off"
124msgid "Power off"
97msgstr "Apagar"
125msgstr "Apagar"
98
126
99−#: qml/Components/Dialogs.qml:214
127+#: qml/Components/Dialogs.qml:255
100msgctxt "Button: Restart the system"
128msgctxt "Button: Restart the system"
101msgid "Restart"
129msgid "Restart"
102msgstr "Reaniciar"
130msgstr "Reaniciar"
@@ -122,8 +150,8 @@ msgid "Alt + PrtScr"
122msgstr "Alt + ImprPant"
150msgstr "Alt + ImprPant"
123
151
124#: qml/Components/KeyboardShortcutsOverlay.qml:80
152#: qml/Components/KeyboardShortcutsOverlay.qml:80
125−msgid "Takes a screenshot of a window."
153+msgid "Takes a screenshot of the current window."
126−msgstr "Saca una imaxe d'una ventana."
154+msgstr ""
127
155
128#: qml/Components/KeyboardShortcutsOverlay.qml:88
156#: qml/Components/KeyboardShortcutsOverlay.qml:88
129msgid "Super + Space"
157msgid "Super + Space"
@@ -141,127 +169,143 @@ msgstr "Super +Mayús + Espaciu"
141msgid "Switches to previous keyboard layout."
169msgid "Switches to previous keyboard layout."
142msgstr "Salta al diseñu de tecláu anterior."
170msgstr "Salta al diseñu de tecláu anterior."
143
171
144−#: qml/Components/KeyboardShortcutsOverlay.qml:118
172+#: qml/Components/KeyboardShortcutsOverlay.qml:114
173+msgid "Ctrl + Alt + T"
174+msgstr ""
175+
176+#: qml/Components/KeyboardShortcutsOverlay.qml:119
177+msgid "Starts the Terminal application."
178+msgstr ""
179+
180+#: qml/Components/KeyboardShortcutsOverlay.qml:131
145msgid "Launcher"
181msgid "Launcher"
146msgstr "Llanzador"
182msgstr "Llanzador"
147
183
148−#: qml/Components/KeyboardShortcutsOverlay.qml:125
184+#: qml/Components/KeyboardShortcutsOverlay.qml:138
149msgid "Super (Hold)"
185msgid "Super (Hold)"
150msgstr "Super (Caltener)"
186msgstr "Super (Caltener)"
151
187
152−#: qml/Components/KeyboardShortcutsOverlay.qml:130
188+#: qml/Components/KeyboardShortcutsOverlay.qml:143
153msgid "Opens the launcher, displays shortcuts."
189msgid "Opens the launcher, displays shortcuts."
154msgstr "Abre'l llanzador, amuesa atayos."
190msgstr "Abre'l llanzador, amuesa atayos."
155
191
156−#: qml/Components/KeyboardShortcutsOverlay.qml:138
192+#: qml/Components/KeyboardShortcutsOverlay.qml:151
157msgid "Alt + F1"
193msgid "Alt + F1"
158msgstr "Alt + F1"
194msgstr "Alt + F1"
159
195
160−#: qml/Components/KeyboardShortcutsOverlay.qml:143
196+#: qml/Components/KeyboardShortcutsOverlay.qml:156
161msgid "Opens launcher keyboard navigation mode."
197msgid "Opens launcher keyboard navigation mode."
162msgstr "Abre'l mou de navegación con tecláu del llanzador."
198msgstr "Abre'l mou de navegación con tecláu del llanzador."
163
199
164−#: qml/Components/KeyboardShortcutsOverlay.qml:151
200+#: qml/Components/KeyboardShortcutsOverlay.qml:164
165msgid "Super + Tab"
201msgid "Super + Tab"
166msgstr "Super + Tab"
202msgstr "Super + Tab"
167
203
168−#: qml/Components/KeyboardShortcutsOverlay.qml:156
204+#: qml/Components/KeyboardShortcutsOverlay.qml:169
169msgid "Switches applications via the launcher."
205msgid "Switches applications via the launcher."
170msgstr "Cambia d'aplicaciones col llanzador."
206msgstr "Cambia d'aplicaciones col llanzador."
171
207
172−#: qml/Components/KeyboardShortcutsOverlay.qml:164
208+#: qml/Components/KeyboardShortcutsOverlay.qml:177
173−msgid "Super + 0 to 9"
209+msgid "Super + 1 to 0"
174−msgstr "Super + 0 a 9"
210+msgstr ""
175
211
176−#: qml/Components/KeyboardShortcutsOverlay.qml:169
212+#: qml/Components/KeyboardShortcutsOverlay.qml:182
177msgid "Same as clicking on a launcher icon."
213msgid "Same as clicking on a launcher icon."
178msgstr "Igual que facer click nel iconu del llanzador."
214msgstr "Igual que facer click nel iconu del llanzador."
179
215
180−#: qml/Components/KeyboardShortcutsOverlay.qml:181
216+#: qml/Components/KeyboardShortcutsOverlay.qml:190
217+msgid "Super + A"
218+msgstr ""
219+
220+#: qml/Components/KeyboardShortcutsOverlay.qml:195
221+msgid "Opens the Application Drawer."
222+msgstr "Abre'l caxón d'aplicaciones."
223+
224+#: qml/Components/KeyboardShortcutsOverlay.qml:207
181msgid "Scopes"
225msgid "Scopes"
182msgstr "Ámbitos"
226msgstr "Ámbitos"
183
227
184−#: qml/Components/KeyboardShortcutsOverlay.qml:188
228+#: qml/Components/KeyboardShortcutsOverlay.qml:214
185msgid "Super (Tap)"
229msgid "Super (Tap)"
186msgstr "Super (Tocar)"
230msgstr "Super (Tocar)"
187
231
188−#: qml/Components/KeyboardShortcutsOverlay.qml:193
232+#: qml/Components/KeyboardShortcutsOverlay.qml:219
189msgid "Opens the Scopes home."
233msgid "Opens the Scopes home."
190msgstr "Abre'l principiu d'Ámbitos"
234msgstr "Abre'l principiu d'Ámbitos"
191
235
192−#: qml/Components/KeyboardShortcutsOverlay.qml:209
236+#: qml/Components/KeyboardShortcutsOverlay.qml:235
193msgid "Switching"
237msgid "Switching"
194msgstr "Conmutación"
238msgstr "Conmutación"
195
239
196−#: qml/Components/KeyboardShortcutsOverlay.qml:216
240+#: qml/Components/KeyboardShortcutsOverlay.qml:242
197msgid "Alt + Tab"
241msgid "Alt + Tab"
198msgstr "Alt + Tab"
242msgstr "Alt + Tab"
199
243
200−#: qml/Components/KeyboardShortcutsOverlay.qml:221
244+#: qml/Components/KeyboardShortcutsOverlay.qml:247
201msgid "Switches between applications."
245msgid "Switches between applications."
202msgstr "Conmuta ente aplicaciones."
246msgstr "Conmuta ente aplicaciones."
203
247
204−#: qml/Components/KeyboardShortcutsOverlay.qml:229
248+#: qml/Components/KeyboardShortcutsOverlay.qml:255
205msgid "Super + W"
249msgid "Super + W"
206msgstr "Super + W"
250msgstr "Super + W"
207
251
208−#: qml/Components/KeyboardShortcutsOverlay.qml:234
252+#: qml/Components/KeyboardShortcutsOverlay.qml:260
209msgid "Opens the desktop spread."
253msgid "Opens the desktop spread."
210msgstr "Abre esparder l'escritoriu."
254msgstr "Abre esparder l'escritoriu."
211
255
212−#: qml/Components/KeyboardShortcutsOverlay.qml:242
256+#: qml/Components/KeyboardShortcutsOverlay.qml:268
213msgid "Cursor Left or Right"
257msgid "Cursor Left or Right"
214msgstr "Flecha izq. o dre."
258msgstr "Flecha izq. o dre."
215
259
216−#: qml/Components/KeyboardShortcutsOverlay.qml:247
260+#: qml/Components/KeyboardShortcutsOverlay.qml:273
217msgid "Moves the focus."
261msgid "Moves the focus."
218msgstr "Mueve'l focu"
262msgstr "Mueve'l focu"
219
263
220−#: qml/Components/KeyboardShortcutsOverlay.qml:259
264+#: qml/Components/KeyboardShortcutsOverlay.qml:285
221msgid "Windows"
265msgid "Windows"
222msgstr "Ventanes"
266msgstr "Ventanes"
223
267
224−#: qml/Components/KeyboardShortcutsOverlay.qml:266
268+#: qml/Components/KeyboardShortcutsOverlay.qml:292
225msgid "Ctrl + Super + D"
269msgid "Ctrl + Super + D"
226msgstr "Ctrl + Super + D"
270msgstr "Ctrl + Super + D"
227
271
228−#: qml/Components/KeyboardShortcutsOverlay.qml:271
272+#: qml/Components/KeyboardShortcutsOverlay.qml:297
229msgid "Minimizes all windows."
273msgid "Minimizes all windows."
230msgstr "Amenorga toles ventanes."
274msgstr "Amenorga toles ventanes."
231
275
232−#: qml/Components/KeyboardShortcutsOverlay.qml:279
276+#: qml/Components/KeyboardShortcutsOverlay.qml:305
233msgid "Ctrl + Super + Up"
277msgid "Ctrl + Super + Up"
234msgstr "Ctrl + Super + Arriba"
278msgstr "Ctrl + Super + Arriba"
235
279
236−#: qml/Components/KeyboardShortcutsOverlay.qml:284
280+#: qml/Components/KeyboardShortcutsOverlay.qml:310
237msgid "Maximizes the current window."
281msgid "Maximizes the current window."
238msgstr "Maximiza la ventana actual."
282msgstr "Maximiza la ventana actual."
239
283
240−#: qml/Components/KeyboardShortcutsOverlay.qml:292
284+#: qml/Components/KeyboardShortcutsOverlay.qml:318
241msgid "Ctrl + Super + Down"
285msgid "Ctrl + Super + Down"
242msgstr "Ctrl + Super + Abaxo"
286msgstr "Ctrl + Super + Abaxo"
243
287
244−#: qml/Components/KeyboardShortcutsOverlay.qml:297
288+#: qml/Components/KeyboardShortcutsOverlay.qml:323
245msgid "Minimizes or restores the current window."
289msgid "Minimizes or restores the current window."
246msgstr "Amenorga o restaura la ventana actual."
290msgstr "Amenorga o restaura la ventana actual."
247
291
248−#: qml/Components/KeyboardShortcutsOverlay.qml:305
292+#: qml/Components/KeyboardShortcutsOverlay.qml:331
249msgid "Ctrl + Super + Left or Right"
293msgid "Ctrl + Super + Left or Right"
250msgstr "Ctrl + Super + Izquierda o Drecha"
294msgstr "Ctrl + Super + Izquierda o Drecha"
251
295
252−#: qml/Components/KeyboardShortcutsOverlay.qml:310
296+#: qml/Components/KeyboardShortcutsOverlay.qml:336
253msgid "Semi-maximizes the current window."
297msgid "Semi-maximizes the current window."
254msgstr "Semi-maximiza la ventana actual."
298msgstr "Semi-maximiza la ventana actual."
255
299
256−#: qml/Components/KeyboardShortcutsOverlay.qml:318
300+#: qml/Components/KeyboardShortcutsOverlay.qml:344
257msgid "Alt + F4"
301msgid "Alt + F4"
258msgstr "Alt + F4"
302msgstr "Alt + F4"
259
303
260−#: qml/Components/KeyboardShortcutsOverlay.qml:323
304+#: qml/Components/KeyboardShortcutsOverlay.qml:349
261msgid "Closes the current window."
305msgid "Closes the current window."
262msgstr "Zarra la ventana actual."
306msgstr "Zarra la ventana actual."
263
307
264−#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
308+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:228
265msgid "Return to Call"
309msgid "Return to Call"
266msgstr "Tornar a la llamada"
310msgstr "Tornar a la llamada"
267
311
@@ -269,7 +313,7 @@ msgstr "Tornar a la llamada"
269msgid "Emergency Call"
313msgid "Emergency Call"
270msgstr "Llamada d'emerxencia"
314msgstr "Llamada d'emerxencia"
271
315
272−#: qml/Components/Lockscreen.qml:244
316+#: qml/Components/Lockscreen.qml:245
273msgid "OK"
317msgid "OK"
274msgstr "Aceutar"
318msgstr "Aceutar"
275
319
@@ -283,29 +327,29 @@ msgstr "%1:%2:%3"
283msgid "%1:%2"
327msgid "%1:%2"
284msgstr "%1:%2"
328msgstr "%1:%2"
285
329
286−#: qml/Components/ModeSwitchWarningDialog.qml:32
330+#: qml/Components/ModeSwitchWarningDialog.qml:33
287msgid "Apps may have unsaved data:"
331msgid "Apps may have unsaved data:"
288msgstr "Apps que pueden tener datos sin guardar:"
332msgstr "Apps que pueden tener datos sin guardar:"
289
333
290−#: qml/Components/ModeSwitchWarningDialog.qml:57
334+#: qml/Components/ModeSwitchWarningDialog.qml:60
291msgctxt ""
335msgctxt ""
292"Re-dock means connect the device again to an external screen/mouse/keyboard"
336"Re-dock means connect the device again to an external screen/mouse/keyboard"
293msgid "Re-dock, save your work and close these apps to continue."
337msgid "Re-dock, save your work and close these apps to continue."
294msgstr "Reconeuta, guarda'l trabayu y zarra eses apps pa siguir."
338msgstr "Reconeuta, guarda'l trabayu y zarra eses apps pa siguir."
295
339
296−#: qml/Components/ModeSwitchWarningDialog.qml:63
340+#: qml/Components/ModeSwitchWarningDialog.qml:67
297msgid "Or force close now (unsaved data will be lost)."
341msgid "Or force close now (unsaved data will be lost)."
298msgstr "O fuerza salir agora (perderás tolos datos sin guardar)."
342msgstr "O fuerza salir agora (perderás tolos datos sin guardar)."
299
343
300−#: qml/Components/ModeSwitchWarningDialog.qml:75
344+#: qml/Components/ModeSwitchWarningDialog.qml:80
301msgid "OK, I will reconnect"
345msgid "OK, I will reconnect"
302msgstr "D'alcuerdu, reconeutaré"
346msgstr "D'alcuerdu, reconeutaré"
303
347
304−#: qml/Components/ModeSwitchWarningDialog.qml:76
348+#: qml/Components/ModeSwitchWarningDialog.qml:81
305msgid "Reconnect now!"
349msgid "Reconnect now!"
306msgstr "Reconeutar agora."
350msgstr "Reconeutar agora."
307
351
308−#: qml/Components/ModeSwitchWarningDialog.qml:88
352+#: qml/Components/ModeSwitchWarningDialog.qml:94
309msgid "Close all"
353msgid "Close all"
310msgstr "Zarrar too"
354msgstr "Zarrar too"
311
355
@@ -313,6 +357,30 @@ msgstr "Zarrar too"
313msgid "Preview Share Item"
357msgid "Preview Share Item"
314msgstr "Entever l'elementu compartíu"
358msgstr "Entever l'elementu compartíu"
315
359
360+#: qml/Components/VirtualTouchPad.qml:317
361+msgid ""
362+"Your device is now connected to an external display. Use this screen as a "
363+"touch pad to interact with the pointer."
364+msgstr ""
365+"El preséu agora ta coneutáu con una pantalla esterna. Usa esta pantalla como "
366+"touch pad pa interactuar col punteru."
367+
368+#: qml/Components/VirtualTouchPad.qml:327
369+msgid "Tap left button to click."
370+msgstr "Calca nel botón esquierdu pa facer clic."
371+
372+#: qml/Components/VirtualTouchPad.qml:339
373+msgid "Tap right button to right click."
374+msgstr "Calca nel botón drechu pa facer clic."
375+
376+#: qml/Components/VirtualTouchPad.qml:351
377+msgid "Swipe with two fingers to scroll."
378+msgstr "Esliza con dos deos pa desplazate."
379+
380+#: qml/Components/VirtualTouchPad.qml:396
381+msgid "Find more settings in the system settings."
382+msgstr "Alcuentra más axustes nos Axustes del Sistema."
383+
316#: qml/Dash/DashPageHeader.qml:361
384#: qml/Dash/DashPageHeader.qml:361
317msgctxt "Button: Open the Ubuntu Store"
385msgctxt "Button: Open the Ubuntu Store"
318msgid "Store"
386msgid "Store"
@@ -344,24 +412,24 @@ msgstr "Refina los resultaos"
344msgid "Reset"
412msgid "Reset"
345msgstr "Reafitar"
413msgstr "Reafitar"
346
414
347−#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
415+#: qml/Dash/GenericScopeView.qml:547 qml/Dash/GenericScopeView.qml:718
348msgid "Show less"
416msgid "Show less"
349msgstr "Ver menos"
417msgstr "Ver menos"
350
418
351−#: qml/Dash/GenericScopeView.qml:545
419+#: qml/Dash/GenericScopeView.qml:547
352msgid "Show all"
420msgid "Show all"
353msgstr "Ver too"
421msgstr "Ver too"
354
422
355−#: qml/Dash/GenericScopeView.qml:576
423+#: qml/Dash/GenericScopeView.qml:578
356msgctxt "Label: Hint for dash search line edit"
424msgctxt "Label: Hint for dash search line edit"
357msgid "Search"
425msgid "Search"
358msgstr "Guetar"
426msgstr "Guetar"
359
427
360−#: qml/Dash/PageHeaderExtraPanel.qml:57
428+#: qml/Dash/PageHeaderExtraPanel.qml:67
361msgid "Recent Searches"
429msgid "Recent Searches"
362msgstr "Guetes recién"
430msgstr "Guetes recién"
363
431
364−#: qml/Dash/PageHeaderExtraPanel.qml:68
432+#: qml/Dash/PageHeaderExtraPanel.qml:78
365msgid "Clear All"
433msgid "Clear All"
366msgstr "Llimpiar too"
434msgstr "Llimpiar too"
367
435
@@ -398,26 +466,18 @@ msgstr "Sueltar p'anovar..."
398msgid "Enable location data"
466msgid "Enable location data"
399msgstr "Habilitar datos d'allugamientu"
467msgstr "Habilitar datos d'allugamientu"
400
468
401−#: qml/Dash/ScopesList.qml:57
469+#: qml/Dash/ScopesList.qml:146
402msgid "Manage"
470msgid "Manage"
403msgstr "Xestionar"
471msgstr "Xestionar"
404
472
405−#: qml/Dash/ScopesList.qml:104
473+#: qml/Dash/ScopesList.qml:187
406msgid "Home"
474msgid "Home"
407msgstr "Aniciu"
475msgstr "Aniciu"
408
476
409−#: qml/Dash/ScopesList.qml:105
477+#: qml/Dash/ScopesList.qml:188
410msgid "Also installed"
478msgid "Also installed"
411msgstr "Tamién instalaos"
479msgstr "Tamién instalaos"
412
480
413−#: qml/DisabledScreenNotice.qml:109
414−msgid ""
415−"Your device is now connected to an external display. Use this screen as a "
416−"touch pad to interact with the pointer."
417−msgstr ""
418−"El preséu agora ta coneutáu con una pantalla esterna. Usa esta pantalla como "
419−"touch pad pa interactuar col punteru."
420−
421#: qml/Greeter/CoverPage.qml:127
481#: qml/Greeter/CoverPage.qml:127
422msgid "Unlock"
482msgid "Unlock"
423msgstr "Desbloquiar"
483msgstr "Desbloquiar"
@@ -442,33 +502,46 @@ msgid_plural "Please wait %1 minutes and then try again…"
442msgstr[0] "Por favor, espera %1 minutu y vuelvi a intentalo…"
502msgstr[0] "Por favor, espera %1 minutu y vuelvi a intentalo…"
443msgstr[1] "Por favor, espera %1 minutos y vuelvi a intentalo…"
503msgstr[1] "Por favor, espera %1 minutos y vuelvi a intentalo…"
444
504
445−#: qml/Greeter/Greeter.qml:596
505+#: qml/Greeter/Greeter.qml:550
446msgid "Try again"
506msgid "Try again"
447msgstr "Tentar otra vuelta"
507msgstr "Tentar otra vuelta"
448
508
449−#: qml/Greeter/LoginList.qml:70
509+#: qml/Greeter/Greeter.qml:551
510+msgid "Enter passphrase to unlock"
511+msgstr ""
512+
513+#: qml/Greeter/Greeter.qml:552
514+msgid "Enter passcode to unlock"
515+msgstr ""
516+
517+#: qml/Greeter/NarrowView.qml:228
518+msgid "Emergency"
519+msgstr "Emerxencia"
520+
521+#: qml/Greeter/PromptList.qml:126
450msgid "Passphrase"
522msgid "Passphrase"
451msgstr "Fras de pasu"
523msgstr "Fras de pasu"
452
524
453−#: qml/Greeter/LoginList.qml:71
525+#: qml/Greeter/PromptList.qml:126
454msgid "Passcode"
526msgid "Passcode"
455msgstr "Códigu de pasu"
527msgstr "Códigu de pasu"
456
528
457−#: qml/Greeter/LoginList.qml:98
529+#: qml/Greeter/SessionsList.qml:124
458−msgid "Retry"
530+msgid "Select desktop environment"
459−msgstr "Reintentar"
531+msgstr "Esbillar entornu d'escritoriu"
460
532
461−#: qml/Greeter/LoginList.qml:99
533+#: qml/Launcher/Drawer.qml:94
462−msgid "Log In"
534+msgid "Search…"
463−msgstr "Aniciar sesión"
535+msgstr "Guetar..."
464
536
465−#: qml/Greeter/NarrowView.qml:252
537+#: qml/Launcher/Drawer.qml:129
538+msgctxt "Apps sorted alphabetically"
466−msgid "Emergency"
539+msgid "A-Z"
467−msgstr "Emerxencia"
540+msgstr "A-Z"
468
541
469−#: qml/Greeter/SessionsList.qml:122
542+#: qml/Launcher/MoreAppsHeader.qml:55
470−msgid "Select desktop environment"
543+msgid "More apps in the store"
471−msgstr "Esbillar entornu d'escritoriu"
544+msgstr "Más aplicaciones na tienda"
472
545
473#: qml/Notifications/NotificationMenuItemFactory.qml:124
546#: qml/Notifications/NotificationMenuItemFactory.qml:124
474msgid "Show password"
547msgid "Show password"
@@ -482,62 +555,62 @@ msgstr "Toca pa tornar a la llamada..."
482msgid "Conference"
555msgid "Conference"
483msgstr "Conferencia"
556msgstr "Conferencia"
484
557
485−#: qml/Panel/Indicators/MenuItemFactory.qml:847
558+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:869
486msgid "Nothing is playing"
559msgid "Nothing is playing"
487msgstr "Nun ta reproduciéndose nada"
560msgstr "Nun ta reproduciéndose nada"
488
561
489−#: qml/Panel/Indicators/MenuItemFactory.qml:975
562+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:997
490#, qt-format
563#, qt-format
491msgid "%1 hour"
564msgid "%1 hour"
492msgid_plural "%1 hours"
565msgid_plural "%1 hours"
493msgstr[0] "%1 hora"
566msgstr[0] "%1 hora"
494msgstr[1] "%1 hores"
567msgstr[1] "%1 hores"
495
568
496−#: qml/Panel/Indicators/MenuItemFactory.qml:979
569+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1001
497#, qt-format
570#, qt-format
498msgid "%1 minute"
571msgid "%1 minute"
499msgid_plural "%1 minutes"
572msgid_plural "%1 minutes"
500msgstr[0] "%1 minutu"
573msgstr[0] "%1 minutu"
501msgstr[1] "%1 minutos"
574msgstr[1] "%1 minutos"
502
575
503−#: qml/Panel/Indicators/MenuItemFactory.qml:984
576+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1006
504#, qt-format
577#, qt-format
505msgid "%1 second"
578msgid "%1 second"
506msgid_plural "%1 seconds"
579msgid_plural "%1 seconds"
507msgstr[0] "%1 segundu"
580msgstr[0] "%1 segundu"
508msgstr[1] "%1 segundos"
581msgstr[1] "%1 segundos"
509
582
510−#: qml/Panel/Indicators/MenuItemFactory.qml:987
583+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1009
511msgid "0 seconds"
584msgid "0 seconds"
512msgstr "0 segundos"
585msgstr "0 segundos"
513
586
514#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
587#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
515−#: qml/Panel/Indicators/MenuItemFactory.qml:989
588+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1011
516#, qt-format
589#, qt-format
517msgid "%1 remaining"
590msgid "%1 remaining"
518msgstr "Queden %1"
591msgstr "Queden %1"
519
592
520−#: qml/Panel/Indicators/MenuItemFactory.qml:995
593+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1017
521msgid "In queue…"
594msgid "In queue…"
522msgstr "Na cola..."
595msgstr "Na cola..."
523
596
524−#: qml/Panel/Indicators/MenuItemFactory.qml:999
597+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1021
525msgid "Downloading"
598msgid "Downloading"
526msgstr "Baxando"
599msgstr "Baxando"
527
600
528−#: qml/Panel/Indicators/MenuItemFactory.qml:1001
601+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1023
529msgid "Paused, tap to resume"
602msgid "Paused, tap to resume"
530msgstr "Posáu, toca pa reanudar"
603msgstr "Posáu, toca pa reanudar"
531
604
532−#: qml/Panel/Indicators/MenuItemFactory.qml:1003
605+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1025
533msgid "Canceled"
606msgid "Canceled"
534msgstr "Encaboxáu"
607msgstr "Encaboxáu"
535
608
536−#: qml/Panel/Indicators/MenuItemFactory.qml:1005
609+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1027
537msgid "Finished"
610msgid "Finished"
538msgstr "Finó"
611msgstr "Finó"
539
612
540−#: qml/Panel/Indicators/MenuItemFactory.qml:1007
613+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1029
541msgid "Failed, tap to retry"
614msgid "Failed, tap to retry"
542msgstr "Falló, toca pa reintentar"
615msgstr "Falló, toca pa reintentar"
543
616
@@ -557,13 +630,17 @@ msgctxt "Button: Call back on phone"
557msgid "Call back"
630msgid "Call back"
558msgstr "Devolver llamada"
631msgstr "Devolver llamada"
559
632
633+#: qml/Panel/PanelMenuPage.qml:92
634+msgid "Back"
635+msgstr ""
636+
560#: qml/Stage/SideStage.qml:76
637#: qml/Stage/SideStage.qml:76
561msgid "Drag using 3 fingers any application from one window to the other"
638msgid "Drag using 3 fingers any application from one window to the other"
562msgstr "Abasnar cualquier aplicación d'una ventana a otra usando 3 deos"
639msgstr "Abasnar cualquier aplicación d'una ventana a otra usando 3 deos"
563
640
564#: qml/Tutorial/TutorialLeftLong.qml:49
641#: qml/Tutorial/TutorialLeftLong.qml:49
565−msgid "Long swipe from the left edge to open the Today scope"
642+msgid "Long swipe from the left edge to open the Application Drawer"
566−msgstr "Eslizamientu llargu dende'l berbesu izquierdu pa ver el scope Güei"
643+msgstr ""
567
644
568#: qml/Tutorial/TutorialLeft.qml:47
645#: qml/Tutorial/TutorialLeft.qml:47
569msgid "Short swipe from the left edge to open the launcher"
646msgid "Short swipe from the left edge to open the launcher"
@@ -593,7 +670,7 @@ msgid "Language"
593msgstr "Llingua"
670msgstr "Llingua"
594
671
595#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
672#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
596−#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
673+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/40-location.qml:271
597#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
674#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
598#: qml/Wizard/Pages/70-passwd-type.qml:145
675#: qml/Wizard/Pages/70-passwd-type.qml:145
599#: qml/Wizard/Pages/75-report-check.qml:84
676#: qml/Wizard/Pages/75-report-check.qml:84
@@ -614,25 +691,24 @@ msgstr "Llingua del tecláu"
614msgid "Keyboard layout"
691msgid "Keyboard layout"
615msgstr "Distribución del tecláu"
692msgstr "Distribución del tecláu"
616
693
617−#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
694+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:206
618−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
695+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/sim.qml:101
619−#: qml/Wizard/Pages/sim.qml:101
620msgid "Skip"
696msgid "Skip"
621msgstr "Saltar"
697msgstr "Saltar"
622
698
623−#: qml/Wizard/Pages/30-wifi.qml:31
699+#: qml/Wizard/Pages/30-wifi.qml:30
624msgid "Connect to Wi‑Fi"
700msgid "Connect to Wi‑Fi"
625msgstr "Coneutase al WiFi"
701msgstr "Coneutase al WiFi"
626
702
627−#: qml/Wizard/Pages/30-wifi.qml:132
703+#: qml/Wizard/Pages/30-wifi.qml:131
628msgid "Connected"
704msgid "Connected"
629msgstr "Coneutáu"
705msgstr "Coneutáu"
630
706
631−#: qml/Wizard/Pages/30-wifi.qml:165
707+#: qml/Wizard/Pages/30-wifi.qml:164
632msgid "Available Wi-Fi networks"
708msgid "Available Wi-Fi networks"
633msgstr "Redes Wi-Fi disponibles"
709msgstr "Redes Wi-Fi disponibles"
634
710
635−#: qml/Wizard/Pages/30-wifi.qml:166
711+#: qml/Wizard/Pages/30-wifi.qml:165
636msgid "No available Wi-Fi networks"
712msgid "No available Wi-Fi networks"
637msgstr "Nun hai redes Wi-Fi disponibles"
713msgstr "Nun hai redes Wi-Fi disponibles"
638
714
@@ -723,37 +799,6 @@ msgstr ""
723msgid "Privacy policy"
799msgid "Privacy policy"
724msgstr "Política d'intimidá"
800msgstr "Política d'intimidá"
725
801
726−#: qml/Wizard/Pages/77-system-update.qml:28
727−msgid "Update Device"
728−msgstr "Anovar preséu"
729−
730−#: qml/Wizard/Pages/77-system-update.qml:55
731−msgid ""
732−"There is a system update available and ready to install. Afterwards, the "
733−"device will automatically restart."
734−msgstr ""
735−"Hai un anovamientu del sistema disponible y preparáu pa instalar. Darréu, el "
736−"preséu reaniciará de mou automáticu."
737−
738−#: qml/Wizard/Pages/77-system-update.qml:76
739−msgctxt "string identifying name of the update"
740−msgid "Ubuntu system"
741−msgstr "Sistema Ubuntu"
742−
743−#: qml/Wizard/Pages/77-system-update.qml:83
744−#, qt-format
745−msgctxt "version of the system update"
746−msgid "Version %1"
747−msgstr "Versión %1"
748−
749−#: qml/Wizard/Pages/77-system-update.qml:102
750−msgid "This could take a few minutes..."
751−msgstr "Esto podría tardar dellos minutos..."
752−
753−#: qml/Wizard/Pages/77-system-update.qml:116
754−msgid "Install and restart now"
755−msgstr "Instalar y reaniciar agora"
756−
757#: qml/Wizard/Pages/80-finished.qml:89
802#: qml/Wizard/Pages/80-finished.qml:89
758msgid "Welcome to Ubuntu"
803msgid "Welcome to Ubuntu"
759msgstr "Bienveníu/a a Ubuntu"
804msgstr "Bienveníu/a a Ubuntu"
@@ -1311,3 +1356,37 @@ msgstr "Contraseña feble enforma"
1311
1356
1312#~ msgid "Swipe up to create a message"
1357#~ msgid "Swipe up to create a message"
1313#~ msgstr "Eslizar pa crear un mensaxe"
1358#~ msgstr "Eslizar pa crear un mensaxe"
1359+
1360+#~ msgid "Long swipe from the left edge to open the Today scope"
1361+#~ msgstr "Eslizamientu llargu dende'l berbesu izquierdu pa ver el scope Güei"
1362+
1363+#~ msgid "Takes a screenshot of a window."
1364+#~ msgstr "Saca una imaxe d'una ventana."
1365+
1366+#~ msgid "Super + 0 to 9"
1367+#~ msgstr "Super + 0 a 9"
1368+
1369+#~ msgid "Install and restart now"
1370+#~ msgstr "Instalar y reaniciar agora"
1371+
1372+#~ msgid "This could take a few minutes..."
1373+#~ msgstr "Esto podría tardar dellos minutos..."
1374+
1375+#, qt-format
1376+#~ msgctxt "version of the system update"
1377+#~ msgid "Version %1"
1378+#~ msgstr "Versión %1"
1379+
1380+#~ msgctxt "string identifying name of the update"
1381+#~ msgid "Ubuntu system"
1382+#~ msgstr "Sistema Ubuntu"
1383+
1384+#~ msgid "Update Device"
1385+#~ msgstr "Anovar preséu"
1386+
1387+#~ msgid ""
1388+#~ "There is a system update available and ready to install. Afterwards, the "
1389+#~ "device will automatically restart."
1390+#~ msgstr ""
1391+#~ "Hai un anovamientu del sistema disponible y preparáu pa instalar. Darréu, el "
1392+#~ "preséu reaniciará de mou automáticu."
po/az.po+183−136
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-11-16 10:44+0000\n"
10+"POT-Creation-Date: 2017-04-04 22:56+0000\n"
11"PO-Revision-Date: 2014-09-03 16:39+0000\n"
11"PO-Revision-Date: 2014-09-03 16:39+0000\n"
12"Last-Translator: Nicat Məmmədov <n1c4t97@gmail.com>\n"
12"Last-Translator: Nicat Məmmədov <n1c4t97@gmail.com>\n"
13"Language-Team: Azerbaijani <az@li.org>\n"
13"Language-Team: Azerbaijani <az@li.org>\n"
@@ -15,86 +15,114 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-11-23 06:34+0000\n"
18+"X-Launchpad-Export-Date: 2017-04-07 06:29+0000\n"
19−"X-Generator: Launchpad (build 18269)\n"
19+"X-Generator: Launchpad (build 18343)\n"
20
20
21−#: plugins/LightDM/Greeter.cpp:123
21+#: plugins/LightDM/Greeter.cpp:188
22msgid "Password: "
22msgid "Password: "
23msgstr "Şifrә: "
23msgstr "Şifrә: "
24
24
25+#: plugins/LightDM/Greeter.cpp:203
26+msgid "Username"
27+msgstr ""
28+
29+#: plugins/LightDM/Greeter.cpp:242
30+msgid "Failed to authenticate"
31+msgstr ""
32+
33+#: plugins/LightDM/Greeter.cpp:244
34+msgid "Invalid password, please try again"
35+msgstr ""
36+
37+#: plugins/LightDM/Greeter.cpp:254
38+msgid "Log In"
39+msgstr ""
40+
41+#: plugins/LightDM/Greeter.cpp:254
42+msgid "Retry"
43+msgstr ""
44+
45+#: plugins/LightDM/UsersModel.cpp:157
46+msgid "Login"
47+msgstr ""
48+
49+#: plugins/LightDM/UsersModel.cpp:165
50+msgid "Guest Session"
51+msgstr ""
52+
25#: plugins/Unity/Launcher/launcheritem.cpp:49
53#: plugins/Unity/Launcher/launcheritem.cpp:49
26−#: plugins/Unity/Launcher/launcheritem.cpp:108
54+#: plugins/Unity/Launcher/launcheritem.cpp:123
27msgid "Pin shortcut"
55msgid "Pin shortcut"
28msgstr "Pin qısayolu"
56msgstr "Pin qısayolu"
29
57
30−#: plugins/Unity/Launcher/launcheritem.cpp:54
58+#: plugins/Unity/Launcher/launcheritem.cpp:55
31msgid "Quit"
59msgid "Quit"
32msgstr ""
60msgstr ""
33
61
34−#: plugins/Unity/Launcher/launcheritem.cpp:108
62+#: plugins/Unity/Launcher/launcheritem.cpp:123
35msgid "Unpin shortcut"
63msgid "Unpin shortcut"
36msgstr "Açma qısayolu"
64msgstr "Açma qısayolu"
37
65
38−#: qml/Components/Dialogs.qml:149
66+#: qml/Components/Dialogs.qml:176
39msgctxt "Title: Lock/Log out dialog"
67msgctxt "Title: Lock/Log out dialog"
40msgid "Log out"
68msgid "Log out"
41msgstr ""
69msgstr ""
42
70
43−#: qml/Components/Dialogs.qml:150
71+#: qml/Components/Dialogs.qml:177
44msgid "Are you sure you want to log out?"
72msgid "Are you sure you want to log out?"
45msgstr "Çıxmaq istәdiyinizdәn әminsiniz?"
73msgstr "Çıxmaq istәdiyinizdәn әminsiniz?"
46
74
47−#: qml/Components/Dialogs.qml:152
75+#: qml/Components/Dialogs.qml:180
48msgctxt "Button: Lock the system"
76msgctxt "Button: Lock the system"
49msgid "Lock"
77msgid "Lock"
50msgstr ""
78msgstr ""
51
79
52−#: qml/Components/Dialogs.qml:159
80+#: qml/Components/Dialogs.qml:191
53msgctxt "Button: Log out from the system"
81msgctxt "Button: Log out from the system"
54msgid "Log Out"
82msgid "Log Out"
55msgstr ""
83msgstr ""
56
84
57−#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
85+#: qml/Components/Dialogs.qml:199 qml/Components/Dialogs.qml:264
58−#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
86+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:208
59#: qml/Wizard/Pages/passcode-confirm.qml:32
87#: qml/Wizard/Pages/passcode-confirm.qml:32
60#: qml/Wizard/Pages/passcode-set.qml:32
88#: qml/Wizard/Pages/passcode-set.qml:32
61msgid "Cancel"
89msgid "Cancel"
62msgstr "İmtina"
90msgstr "İmtina"
63
91
64−#: qml/Components/Dialogs.qml:178
92+#: qml/Components/Dialogs.qml:211
65msgctxt "Title: Reboot dialog"
93msgctxt "Title: Reboot dialog"
66msgid "Reboot"
94msgid "Reboot"
67msgstr ""
95msgstr ""
68
96
69−#: qml/Components/Dialogs.qml:179
97+#: qml/Components/Dialogs.qml:212
70msgid "Are you sure you want to reboot?"
98msgid "Are you sure you want to reboot?"
71msgstr "Yenidәn başlatmaq istәdiyinizә әminsiniz?"
99msgstr "Yenidәn başlatmaq istәdiyinizә әminsiniz?"
72
100
73−#: qml/Components/Dialogs.qml:181
101+#: qml/Components/Dialogs.qml:215
74msgid "No"
102msgid "No"
75msgstr "Yox"
103msgstr "Yox"
76
104
77−#: qml/Components/Dialogs.qml:187
105+#: qml/Components/Dialogs.qml:223
78msgid "Yes"
106msgid "Yes"
79msgstr "Hə"
107msgstr "Hə"
80
108
81−#: qml/Components/Dialogs.qml:202
109+#: qml/Components/Dialogs.qml:239
82msgctxt "Title: Power off/Restart dialog"
110msgctxt "Title: Power off/Restart dialog"
83msgid "Power"
111msgid "Power"
84msgstr ""
112msgstr ""
85
113
86−#: qml/Components/Dialogs.qml:203
114+#: qml/Components/Dialogs.qml:240
87msgid ""
115msgid ""
88"Are you sure you would like\n"
116"Are you sure you would like\n"
89"to power off?"
117"to power off?"
90msgstr ""
118msgstr ""
91
119
92−#: qml/Components/Dialogs.qml:205
120+#: qml/Components/Dialogs.qml:244
93msgctxt "Button: Power off the system"
121msgctxt "Button: Power off the system"
94msgid "Power off"
122msgid "Power off"
95msgstr ""
123msgstr ""
96
124
97−#: qml/Components/Dialogs.qml:214
125+#: qml/Components/Dialogs.qml:255
98msgctxt "Button: Restart the system"
126msgctxt "Button: Restart the system"
99msgid "Restart"
127msgid "Restart"
100msgstr ""
128msgstr ""
@@ -120,7 +148,7 @@ msgid "Alt + PrtScr"
120msgstr ""
148msgstr ""
121
149
122#: qml/Components/KeyboardShortcutsOverlay.qml:80
150#: qml/Components/KeyboardShortcutsOverlay.qml:80
123−msgid "Takes a screenshot of a window."
151+msgid "Takes a screenshot of the current window."
124msgstr ""
152msgstr ""
125
153
126#: qml/Components/KeyboardShortcutsOverlay.qml:88
154#: qml/Components/KeyboardShortcutsOverlay.qml:88
@@ -139,127 +167,143 @@ msgstr ""
139msgid "Switches to previous keyboard layout."
167msgid "Switches to previous keyboard layout."
140msgstr ""
168msgstr ""
141
169
142−#: qml/Components/KeyboardShortcutsOverlay.qml:118
170+#: qml/Components/KeyboardShortcutsOverlay.qml:114
171+msgid "Ctrl + Alt + T"
172+msgstr ""
173+
174+#: qml/Components/KeyboardShortcutsOverlay.qml:119
175+msgid "Starts the Terminal application."
176+msgstr ""
177+
178+#: qml/Components/KeyboardShortcutsOverlay.qml:131
143msgid "Launcher"
179msgid "Launcher"
144msgstr ""
180msgstr ""
145
181
146−#: qml/Components/KeyboardShortcutsOverlay.qml:125
182+#: qml/Components/KeyboardShortcutsOverlay.qml:138
147msgid "Super (Hold)"
183msgid "Super (Hold)"
148msgstr ""
184msgstr ""
149
185
150−#: qml/Components/KeyboardShortcutsOverlay.qml:130
186+#: qml/Components/KeyboardShortcutsOverlay.qml:143
151msgid "Opens the launcher, displays shortcuts."
187msgid "Opens the launcher, displays shortcuts."
152msgstr ""
188msgstr ""
153
189
154−#: qml/Components/KeyboardShortcutsOverlay.qml:138
190+#: qml/Components/KeyboardShortcutsOverlay.qml:151
155msgid "Alt + F1"
191msgid "Alt + F1"
156msgstr ""
192msgstr ""
157
193
158−#: qml/Components/KeyboardShortcutsOverlay.qml:143
194+#: qml/Components/KeyboardShortcutsOverlay.qml:156
159msgid "Opens launcher keyboard navigation mode."
195msgid "Opens launcher keyboard navigation mode."
160msgstr ""
196msgstr ""
161
197
162−#: qml/Components/KeyboardShortcutsOverlay.qml:151
198+#: qml/Components/KeyboardShortcutsOverlay.qml:164
163msgid "Super + Tab"
199msgid "Super + Tab"
164msgstr ""
200msgstr ""
165
201
166−#: qml/Components/KeyboardShortcutsOverlay.qml:156
202+#: qml/Components/KeyboardShortcutsOverlay.qml:169
167msgid "Switches applications via the launcher."
203msgid "Switches applications via the launcher."
168msgstr ""
204msgstr ""
169
205
170−#: qml/Components/KeyboardShortcutsOverlay.qml:164
206+#: qml/Components/KeyboardShortcutsOverlay.qml:177
171−msgid "Super + 0 to 9"
207+msgid "Super + 1 to 0"
172msgstr ""
208msgstr ""
173
209
174−#: qml/Components/KeyboardShortcutsOverlay.qml:169
210+#: qml/Components/KeyboardShortcutsOverlay.qml:182
175msgid "Same as clicking on a launcher icon."
211msgid "Same as clicking on a launcher icon."
176msgstr ""
212msgstr ""
177
213
178−#: qml/Components/KeyboardShortcutsOverlay.qml:181
214+#: qml/Components/KeyboardShortcutsOverlay.qml:190
215+msgid "Super + A"
216+msgstr ""
217+
218+#: qml/Components/KeyboardShortcutsOverlay.qml:195
219+msgid "Opens the Application Drawer."
220+msgstr ""
221+
222+#: qml/Components/KeyboardShortcutsOverlay.qml:207
179msgid "Scopes"
223msgid "Scopes"
180msgstr ""
224msgstr ""
181
225
182−#: qml/Components/KeyboardShortcutsOverlay.qml:188
226+#: qml/Components/KeyboardShortcutsOverlay.qml:214
183msgid "Super (Tap)"
227msgid "Super (Tap)"
184msgstr ""
228msgstr ""
185
229
186−#: qml/Components/KeyboardShortcutsOverlay.qml:193
230+#: qml/Components/KeyboardShortcutsOverlay.qml:219
187msgid "Opens the Scopes home."
231msgid "Opens the Scopes home."
188msgstr ""
232msgstr ""
189
233
190−#: qml/Components/KeyboardShortcutsOverlay.qml:209
234+#: qml/Components/KeyboardShortcutsOverlay.qml:235
191msgid "Switching"
235msgid "Switching"
192msgstr ""
236msgstr ""
193
237
194−#: qml/Components/KeyboardShortcutsOverlay.qml:216
238+#: qml/Components/KeyboardShortcutsOverlay.qml:242
195msgid "Alt + Tab"
239msgid "Alt + Tab"
196msgstr ""
240msgstr ""
197
241
198−#: qml/Components/KeyboardShortcutsOverlay.qml:221
242+#: qml/Components/KeyboardShortcutsOverlay.qml:247
199msgid "Switches between applications."
243msgid "Switches between applications."
200msgstr ""
244msgstr ""
201
245
202−#: qml/Components/KeyboardShortcutsOverlay.qml:229
246+#: qml/Components/KeyboardShortcutsOverlay.qml:255
203msgid "Super + W"
247msgid "Super + W"
204msgstr ""
248msgstr ""
205
249
206−#: qml/Components/KeyboardShortcutsOverlay.qml:234
250+#: qml/Components/KeyboardShortcutsOverlay.qml:260
207msgid "Opens the desktop spread."
251msgid "Opens the desktop spread."
208msgstr ""
252msgstr ""
209
253
210−#: qml/Components/KeyboardShortcutsOverlay.qml:242
254+#: qml/Components/KeyboardShortcutsOverlay.qml:268
211msgid "Cursor Left or Right"
255msgid "Cursor Left or Right"
212msgstr ""
256msgstr ""
213
257
214−#: qml/Components/KeyboardShortcutsOverlay.qml:247
258+#: qml/Components/KeyboardShortcutsOverlay.qml:273
215msgid "Moves the focus."
259msgid "Moves the focus."
216msgstr ""
260msgstr ""
217
261
218−#: qml/Components/KeyboardShortcutsOverlay.qml:259
262+#: qml/Components/KeyboardShortcutsOverlay.qml:285
219msgid "Windows"
263msgid "Windows"
220msgstr ""
264msgstr ""
221
265
222−#: qml/Components/KeyboardShortcutsOverlay.qml:266
266+#: qml/Components/KeyboardShortcutsOverlay.qml:292
223msgid "Ctrl + Super + D"
267msgid "Ctrl + Super + D"
224msgstr ""
268msgstr ""
225
269
226−#: qml/Components/KeyboardShortcutsOverlay.qml:271
270+#: qml/Components/KeyboardShortcutsOverlay.qml:297
227msgid "Minimizes all windows."
271msgid "Minimizes all windows."
228msgstr ""
272msgstr ""
229
273
230−#: qml/Components/KeyboardShortcutsOverlay.qml:279
274+#: qml/Components/KeyboardShortcutsOverlay.qml:305
231msgid "Ctrl + Super + Up"
275msgid "Ctrl + Super + Up"
232msgstr ""
276msgstr ""
233
277
234−#: qml/Components/KeyboardShortcutsOverlay.qml:284
278+#: qml/Components/KeyboardShortcutsOverlay.qml:310
235msgid "Maximizes the current window."
279msgid "Maximizes the current window."
236msgstr ""
280msgstr ""
237
281
238−#: qml/Components/KeyboardShortcutsOverlay.qml:292
282+#: qml/Components/KeyboardShortcutsOverlay.qml:318
239msgid "Ctrl + Super + Down"
283msgid "Ctrl + Super + Down"
240msgstr ""
284msgstr ""
241
285
242−#: qml/Components/KeyboardShortcutsOverlay.qml:297
286+#: qml/Components/KeyboardShortcutsOverlay.qml:323
243msgid "Minimizes or restores the current window."
287msgid "Minimizes or restores the current window."
244msgstr ""
288msgstr ""
245
289
246−#: qml/Components/KeyboardShortcutsOverlay.qml:305
290+#: qml/Components/KeyboardShortcutsOverlay.qml:331
247msgid "Ctrl + Super + Left or Right"
291msgid "Ctrl + Super + Left or Right"
248msgstr ""
292msgstr ""
249
293
250−#: qml/Components/KeyboardShortcutsOverlay.qml:310
294+#: qml/Components/KeyboardShortcutsOverlay.qml:336
251msgid "Semi-maximizes the current window."
295msgid "Semi-maximizes the current window."
252msgstr ""
296msgstr ""
253
297
254−#: qml/Components/KeyboardShortcutsOverlay.qml:318
298+#: qml/Components/KeyboardShortcutsOverlay.qml:344
255msgid "Alt + F4"
299msgid "Alt + F4"
256msgstr ""
300msgstr ""
257
301
258−#: qml/Components/KeyboardShortcutsOverlay.qml:323
302+#: qml/Components/KeyboardShortcutsOverlay.qml:349
259msgid "Closes the current window."
303msgid "Closes the current window."
260msgstr ""
304msgstr ""
261
305
262−#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
306+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:228
263msgid "Return to Call"
307msgid "Return to Call"
264msgstr ""
308msgstr ""
265
309
@@ -267,7 +311,7 @@ msgstr ""
267msgid "Emergency Call"
311msgid "Emergency Call"
268msgstr "Zərurət zəngi"
312msgstr "Zərurət zəngi"
269
313
270−#: qml/Components/Lockscreen.qml:244
314+#: qml/Components/Lockscreen.qml:245
271msgid "OK"
315msgid "OK"
272msgstr "Oldu"
316msgstr "Oldu"
273
317
@@ -281,29 +325,29 @@ msgstr ""
281msgid "%1:%2"
325msgid "%1:%2"
282msgstr ""
326msgstr ""
283
327
284−#: qml/Components/ModeSwitchWarningDialog.qml:32
328+#: qml/Components/ModeSwitchWarningDialog.qml:33
285msgid "Apps may have unsaved data:"
329msgid "Apps may have unsaved data:"
286msgstr ""
330msgstr ""
287
331
288−#: qml/Components/ModeSwitchWarningDialog.qml:57
332+#: qml/Components/ModeSwitchWarningDialog.qml:60
289msgctxt ""
333msgctxt ""
290"Re-dock means connect the device again to an external screen/mouse/keyboard"
334"Re-dock means connect the device again to an external screen/mouse/keyboard"
291msgid "Re-dock, save your work and close these apps to continue."
335msgid "Re-dock, save your work and close these apps to continue."
292msgstr ""
336msgstr ""
293
337
294−#: qml/Components/ModeSwitchWarningDialog.qml:63
338+#: qml/Components/ModeSwitchWarningDialog.qml:67
295msgid "Or force close now (unsaved data will be lost)."
339msgid "Or force close now (unsaved data will be lost)."
296msgstr ""
340msgstr ""
297
341
298−#: qml/Components/ModeSwitchWarningDialog.qml:75
342+#: qml/Components/ModeSwitchWarningDialog.qml:80
299msgid "OK, I will reconnect"
343msgid "OK, I will reconnect"
300msgstr ""
344msgstr ""
301
345
302−#: qml/Components/ModeSwitchWarningDialog.qml:76
346+#: qml/Components/ModeSwitchWarningDialog.qml:81
303msgid "Reconnect now!"
347msgid "Reconnect now!"
304msgstr ""
348msgstr ""
305
349
306−#: qml/Components/ModeSwitchWarningDialog.qml:88
350+#: qml/Components/ModeSwitchWarningDialog.qml:94
307msgid "Close all"
351msgid "Close all"
308msgstr ""
352msgstr ""
309
353
@@ -311,6 +355,28 @@ msgstr ""
311msgid "Preview Share Item"
355msgid "Preview Share Item"
312msgstr ""
356msgstr ""
313
357
358+#: qml/Components/VirtualTouchPad.qml:317
359+msgid ""
360+"Your device is now connected to an external display. Use this screen as a "
361+"touch pad to interact with the pointer."
362+msgstr ""
363+
364+#: qml/Components/VirtualTouchPad.qml:327
365+msgid "Tap left button to click."
366+msgstr ""
367+
368+#: qml/Components/VirtualTouchPad.qml:339
369+msgid "Tap right button to right click."
370+msgstr ""
371+
372+#: qml/Components/VirtualTouchPad.qml:351
373+msgid "Swipe with two fingers to scroll."
374+msgstr ""
375+
376+#: qml/Components/VirtualTouchPad.qml:396
377+msgid "Find more settings in the system settings."
378+msgstr ""
379+
314#: qml/Dash/DashPageHeader.qml:361
380#: qml/Dash/DashPageHeader.qml:361
315msgctxt "Button: Open the Ubuntu Store"
381msgctxt "Button: Open the Ubuntu Store"
316msgid "Store"
382msgid "Store"
@@ -342,24 +408,24 @@ msgstr ""
342msgid "Reset"
408msgid "Reset"
343msgstr ""
409msgstr ""
344
410
345−#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
411+#: qml/Dash/GenericScopeView.qml:547 qml/Dash/GenericScopeView.qml:718
346msgid "Show less"
412msgid "Show less"
347msgstr ""
413msgstr ""
348
414
349−#: qml/Dash/GenericScopeView.qml:545
415+#: qml/Dash/GenericScopeView.qml:547
350msgid "Show all"
416msgid "Show all"
351msgstr ""
417msgstr ""
352
418
353−#: qml/Dash/GenericScopeView.qml:576
419+#: qml/Dash/GenericScopeView.qml:578
354msgctxt "Label: Hint for dash search line edit"
420msgctxt "Label: Hint for dash search line edit"
355msgid "Search"
421msgid "Search"
356msgstr ""
422msgstr ""
357
423
358−#: qml/Dash/PageHeaderExtraPanel.qml:57
424+#: qml/Dash/PageHeaderExtraPanel.qml:67
359msgid "Recent Searches"
425msgid "Recent Searches"
360msgstr ""
426msgstr ""
361
427
362−#: qml/Dash/PageHeaderExtraPanel.qml:68
428+#: qml/Dash/PageHeaderExtraPanel.qml:78
363msgid "Clear All"
429msgid "Clear All"
364msgstr ""
430msgstr ""
365
431
@@ -396,24 +462,18 @@ msgstr ""
396msgid "Enable location data"
462msgid "Enable location data"
397msgstr ""
463msgstr ""
398
464
399−#: qml/Dash/ScopesList.qml:57
465+#: qml/Dash/ScopesList.qml:146
400msgid "Manage"
466msgid "Manage"
401msgstr ""
467msgstr ""
402
468
403−#: qml/Dash/ScopesList.qml:104
469+#: qml/Dash/ScopesList.qml:187
404msgid "Home"
470msgid "Home"
405msgstr ""
471msgstr ""
406
472
407−#: qml/Dash/ScopesList.qml:105
473+#: qml/Dash/ScopesList.qml:188
408msgid "Also installed"
474msgid "Also installed"
409msgstr ""
475msgstr ""
410
476
411−#: qml/DisabledScreenNotice.qml:109
412−msgid ""
413−"Your device is now connected to an external display. Use this screen as a "
414−"touch pad to interact with the pointer."
415−msgstr ""
416−
417#: qml/Greeter/CoverPage.qml:127
477#: qml/Greeter/CoverPage.qml:127
418msgid "Unlock"
478msgid "Unlock"
419msgstr ""
479msgstr ""
@@ -437,32 +497,45 @@ msgid_plural "Please wait %1 minutes and then try again…"
437msgstr[0] ""
497msgstr[0] ""
438msgstr[1] ""
498msgstr[1] ""
439
499
440−#: qml/Greeter/Greeter.qml:596
500+#: qml/Greeter/Greeter.qml:550
441msgid "Try again"
501msgid "Try again"
442msgstr ""
502msgstr ""
443
503
444−#: qml/Greeter/LoginList.qml:70
504+#: qml/Greeter/Greeter.qml:551
505+msgid "Enter passphrase to unlock"
506+msgstr ""
507+
508+#: qml/Greeter/Greeter.qml:552
509+msgid "Enter passcode to unlock"
510+msgstr ""
511+
512+#: qml/Greeter/NarrowView.qml:228
513+msgid "Emergency"
514+msgstr ""
515+
516+#: qml/Greeter/PromptList.qml:126
445msgid "Passphrase"
517msgid "Passphrase"
446msgstr ""
518msgstr ""
447
519
448−#: qml/Greeter/LoginList.qml:71
520+#: qml/Greeter/PromptList.qml:126
449msgid "Passcode"
521msgid "Passcode"
450msgstr ""
522msgstr ""
451
523
452−#: qml/Greeter/LoginList.qml:98
524+#: qml/Greeter/SessionsList.qml:124
453−msgid "Retry"
525+msgid "Select desktop environment"
454msgstr ""
526msgstr ""
455
527
456−#: qml/Greeter/LoginList.qml:99
528+#: qml/Launcher/Drawer.qml:94
457−msgid "Log In"
529+msgid "Search…"
458msgstr ""
530msgstr ""
459
531
460−#: qml/Greeter/NarrowView.qml:252
532+#: qml/Launcher/Drawer.qml:129
533+msgctxt "Apps sorted alphabetically"
461−msgid "Emergency"
534+msgid "A-Z"
462msgstr ""
535msgstr ""
463
536
464−#: qml/Greeter/SessionsList.qml:122
537+#: qml/Launcher/MoreAppsHeader.qml:55
465−msgid "Select desktop environment"
538+msgid "More apps in the store"
466msgstr ""
539msgstr ""
467
540
468#: qml/Notifications/NotificationMenuItemFactory.qml:124
541#: qml/Notifications/NotificationMenuItemFactory.qml:124
@@ -477,62 +550,62 @@ msgstr "Zəngə qayıtmaq üçün toxunun..."
477msgid "Conference"
550msgid "Conference"
478msgstr "Konfrans"
551msgstr "Konfrans"
479
552
480−#: qml/Panel/Indicators/MenuItemFactory.qml:847
553+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:869
481msgid "Nothing is playing"
554msgid "Nothing is playing"
482msgstr ""
555msgstr ""
483
556
484−#: qml/Panel/Indicators/MenuItemFactory.qml:975
557+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:997
485#, qt-format
558#, qt-format
486msgid "%1 hour"
559msgid "%1 hour"
487msgid_plural "%1 hours"
560msgid_plural "%1 hours"
488msgstr[0] ""
561msgstr[0] ""
489msgstr[1] ""
562msgstr[1] ""
490
563
491−#: qml/Panel/Indicators/MenuItemFactory.qml:979
564+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1001
492#, qt-format
565#, qt-format
493msgid "%1 minute"
566msgid "%1 minute"
494msgid_plural "%1 minutes"
567msgid_plural "%1 minutes"
495msgstr[0] ""
568msgstr[0] ""
496msgstr[1] ""
569msgstr[1] ""
497
570
498−#: qml/Panel/Indicators/MenuItemFactory.qml:984
571+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1006
499#, qt-format
572#, qt-format
500msgid "%1 second"
573msgid "%1 second"
501msgid_plural "%1 seconds"
574msgid_plural "%1 seconds"
502msgstr[0] ""
575msgstr[0] ""
503msgstr[1] ""
576msgstr[1] ""
504
577
505−#: qml/Panel/Indicators/MenuItemFactory.qml:987
578+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1009
506msgid "0 seconds"
579msgid "0 seconds"
507msgstr ""
580msgstr ""
508
581
509#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
582#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
510−#: qml/Panel/Indicators/MenuItemFactory.qml:989
583+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1011
511#, qt-format
584#, qt-format
512msgid "%1 remaining"
585msgid "%1 remaining"
513msgstr ""
586msgstr ""
514
587
515−#: qml/Panel/Indicators/MenuItemFactory.qml:995
588+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1017
516msgid "In queue…"
589msgid "In queue…"
517msgstr "Növbədədir..."
590msgstr "Növbədədir..."
518
591
519−#: qml/Panel/Indicators/MenuItemFactory.qml:999
592+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1021
520msgid "Downloading"
593msgid "Downloading"
521msgstr "Endirilir"
594msgstr "Endirilir"
522
595
523−#: qml/Panel/Indicators/MenuItemFactory.qml:1001
596+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1023
524msgid "Paused, tap to resume"
597msgid "Paused, tap to resume"
525msgstr "Dayandırıldı. Davam etmək üçün toxunun"
598msgstr "Dayandırıldı. Davam etmək üçün toxunun"
526
599
527−#: qml/Panel/Indicators/MenuItemFactory.qml:1003
600+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1025
528msgid "Canceled"
601msgid "Canceled"
529msgstr "İmtina edildi"
602msgstr "İmtina edildi"
530
603
531−#: qml/Panel/Indicators/MenuItemFactory.qml:1005
604+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1027
532msgid "Finished"
605msgid "Finished"
533msgstr "Bitdi"
606msgstr "Bitdi"
534
607
535−#: qml/Panel/Indicators/MenuItemFactory.qml:1007
608+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1029
536msgid "Failed, tap to retry"
609msgid "Failed, tap to retry"
537msgstr "Alınmadı. Yenidәn cәhd etmək üçün toxunun"
610msgstr "Alınmadı. Yenidәn cәhd etmək üçün toxunun"
538
611
@@ -552,12 +625,16 @@ msgctxt "Button: Call back on phone"
552msgid "Call back"
625msgid "Call back"
553msgstr ""
626msgstr ""
554
627
628+#: qml/Panel/PanelMenuPage.qml:92
629+msgid "Back"
630+msgstr ""
631+
555#: qml/Stage/SideStage.qml:76
632#: qml/Stage/SideStage.qml:76
556msgid "Drag using 3 fingers any application from one window to the other"
633msgid "Drag using 3 fingers any application from one window to the other"
557msgstr ""
634msgstr ""
558
635
559#: qml/Tutorial/TutorialLeftLong.qml:49
636#: qml/Tutorial/TutorialLeftLong.qml:49
560−msgid "Long swipe from the left edge to open the Today scope"
637+msgid "Long swipe from the left edge to open the Application Drawer"
561msgstr ""
638msgstr ""
562
639
563#: qml/Tutorial/TutorialLeft.qml:47
640#: qml/Tutorial/TutorialLeft.qml:47
@@ -586,7 +663,7 @@ msgid "Language"
586msgstr ""
663msgstr ""
587
664
588#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
665#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
589−#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
666+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/40-location.qml:271
590#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
667#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
591#: qml/Wizard/Pages/70-passwd-type.qml:145
668#: qml/Wizard/Pages/70-passwd-type.qml:145
592#: qml/Wizard/Pages/75-report-check.qml:84
669#: qml/Wizard/Pages/75-report-check.qml:84
@@ -607,25 +684,24 @@ msgstr ""
607msgid "Keyboard layout"
684msgid "Keyboard layout"
608msgstr ""
685msgstr ""
609
686
610−#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
687+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:206
611−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
688+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/sim.qml:101
612−#: qml/Wizard/Pages/sim.qml:101
613msgid "Skip"
689msgid "Skip"
614msgstr ""
690msgstr ""
615
691
616−#: qml/Wizard/Pages/30-wifi.qml:31
692+#: qml/Wizard/Pages/30-wifi.qml:30
617msgid "Connect to Wi‑Fi"
693msgid "Connect to Wi‑Fi"
618msgstr ""
694msgstr ""
619
695
620−#: qml/Wizard/Pages/30-wifi.qml:132
696+#: qml/Wizard/Pages/30-wifi.qml:131
621msgid "Connected"
697msgid "Connected"
622msgstr ""
698msgstr ""
623
699
624−#: qml/Wizard/Pages/30-wifi.qml:165
700+#: qml/Wizard/Pages/30-wifi.qml:164
625msgid "Available Wi-Fi networks"
701msgid "Available Wi-Fi networks"
626msgstr ""
702msgstr ""
627
703
628−#: qml/Wizard/Pages/30-wifi.qml:166
704+#: qml/Wizard/Pages/30-wifi.qml:165
629msgid "No available Wi-Fi networks"
705msgid "No available Wi-Fi networks"
630msgstr ""
706msgstr ""
631
707
@@ -712,35 +788,6 @@ msgstr ""
712msgid "Privacy policy"
788msgid "Privacy policy"
713msgstr ""
789msgstr ""
714
790
715−#: qml/Wizard/Pages/77-system-update.qml:28
716−msgid "Update Device"
717−msgstr ""
718−
719−#: qml/Wizard/Pages/77-system-update.qml:55
720−msgid ""
721−"There is a system update available and ready to install. Afterwards, the "
722−"device will automatically restart."
723−msgstr ""
724−
725−#: qml/Wizard/Pages/77-system-update.qml:76
726−msgctxt "string identifying name of the update"
727−msgid "Ubuntu system"
728−msgstr ""
729−
730−#: qml/Wizard/Pages/77-system-update.qml:83
731−#, qt-format
732−msgctxt "version of the system update"
733−msgid "Version %1"
734−msgstr ""
735−
736−#: qml/Wizard/Pages/77-system-update.qml:102
737−msgid "This could take a few minutes..."
738−msgstr ""
739−
740−#: qml/Wizard/Pages/77-system-update.qml:116
741−msgid "Install and restart now"
742−msgstr ""
743−
744#: qml/Wizard/Pages/80-finished.qml:89
791#: qml/Wizard/Pages/80-finished.qml:89
745msgid "Welcome to Ubuntu"
792msgid "Welcome to Ubuntu"
746msgstr ""
793msgstr ""
po/be.po+184−137
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-11-16 10:44+0000\n"
10+"POT-Creation-Date: 2017-04-04 22:56+0000\n"
11"PO-Revision-Date: 2015-12-13 13:12+0000\n"
11"PO-Revision-Date: 2015-12-13 13:12+0000\n"
12"Last-Translator: Mikhail_SaTuRn <mikhail_saturn@tut.by>\n"
12"Last-Translator: Mikhail_SaTuRn <mikhail_saturn@tut.by>\n"
13"Language-Team: Belarusian <be@li.org>\n"
13"Language-Team: Belarusian <be@li.org>\n"
@@ -16,75 +16,103 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
19−"X-Launchpad-Export-Date: 2016-11-23 06:34+0000\n"
19+"X-Launchpad-Export-Date: 2017-04-07 06:29+0000\n"
20−"X-Generator: Launchpad (build 18269)\n"
20+"X-Generator: Launchpad (build 18343)\n"
21
21
22−#: plugins/LightDM/Greeter.cpp:123
22+#: plugins/LightDM/Greeter.cpp:188
23msgid "Password: "
23msgid "Password: "
24msgstr "Пароль: "
24msgstr "Пароль: "
25
25
26+#: plugins/LightDM/Greeter.cpp:203
27+msgid "Username"
28+msgstr ""
29+
30+#: plugins/LightDM/Greeter.cpp:242
31+msgid "Failed to authenticate"
32+msgstr ""
33+
34+#: plugins/LightDM/Greeter.cpp:244
35+msgid "Invalid password, please try again"
36+msgstr ""
37+
38+#: plugins/LightDM/Greeter.cpp:254
39+msgid "Log In"
40+msgstr ""
41+
42+#: plugins/LightDM/Greeter.cpp:254
43+msgid "Retry"
44+msgstr "Паспрабаваць зноў"
45+
46+#: plugins/LightDM/UsersModel.cpp:157
47+msgid "Login"
48+msgstr ""
49+
50+#: plugins/LightDM/UsersModel.cpp:165
51+msgid "Guest Session"
52+msgstr ""
53+
26#: plugins/Unity/Launcher/launcheritem.cpp:49
54#: plugins/Unity/Launcher/launcheritem.cpp:49
27−#: plugins/Unity/Launcher/launcheritem.cpp:108
55+#: plugins/Unity/Launcher/launcheritem.cpp:123
28msgid "Pin shortcut"
56msgid "Pin shortcut"
29msgstr "Замацаваць кнопку"
57msgstr "Замацаваць кнопку"
30
58
31−#: plugins/Unity/Launcher/launcheritem.cpp:54
59+#: plugins/Unity/Launcher/launcheritem.cpp:55
32msgid "Quit"
60msgid "Quit"
33msgstr "Выйсці"
61msgstr "Выйсці"
34
62
35−#: plugins/Unity/Launcher/launcheritem.cpp:108
63+#: plugins/Unity/Launcher/launcheritem.cpp:123
36msgid "Unpin shortcut"
64msgid "Unpin shortcut"
37msgstr "Адмацаваць кнопку"
65msgstr "Адмацаваць кнопку"
38
66
39−#: qml/Components/Dialogs.qml:149
67+#: qml/Components/Dialogs.qml:176
40msgctxt "Title: Lock/Log out dialog"
68msgctxt "Title: Lock/Log out dialog"
41msgid "Log out"
69msgid "Log out"
42msgstr "Выйсці"
70msgstr "Выйсці"
43
71
44−#: qml/Components/Dialogs.qml:150
72+#: qml/Components/Dialogs.qml:177
45msgid "Are you sure you want to log out?"
73msgid "Are you sure you want to log out?"
46msgstr "Вы ўпэўненыя, што хочаце выйсці?"
74msgstr "Вы ўпэўненыя, што хочаце выйсці?"
47
75
48−#: qml/Components/Dialogs.qml:152
76+#: qml/Components/Dialogs.qml:180
49msgctxt "Button: Lock the system"
77msgctxt "Button: Lock the system"
50msgid "Lock"
78msgid "Lock"
51msgstr "Заблакаваць"
79msgstr "Заблакаваць"
52
80
53−#: qml/Components/Dialogs.qml:159
81+#: qml/Components/Dialogs.qml:191
54msgctxt "Button: Log out from the system"
82msgctxt "Button: Log out from the system"
55msgid "Log Out"
83msgid "Log Out"
56msgstr "Выйсці"
84msgstr "Выйсці"
57
85
58−#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
86+#: qml/Components/Dialogs.qml:199 qml/Components/Dialogs.qml:264
59−#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
87+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:208
60#: qml/Wizard/Pages/passcode-confirm.qml:32
88#: qml/Wizard/Pages/passcode-confirm.qml:32
61#: qml/Wizard/Pages/passcode-set.qml:32
89#: qml/Wizard/Pages/passcode-set.qml:32
62msgid "Cancel"
90msgid "Cancel"
63msgstr "Скасаваць"
91msgstr "Скасаваць"
64
92
65−#: qml/Components/Dialogs.qml:178
93+#: qml/Components/Dialogs.qml:211
66msgctxt "Title: Reboot dialog"
94msgctxt "Title: Reboot dialog"
67msgid "Reboot"
95msgid "Reboot"
68msgstr "Перазагрузіць"
96msgstr "Перазагрузіць"
69
97
70−#: qml/Components/Dialogs.qml:179
98+#: qml/Components/Dialogs.qml:212
71msgid "Are you sure you want to reboot?"
99msgid "Are you sure you want to reboot?"
72msgstr "Вы ўпэўнены, што жадаеце перазагрузіць?"
100msgstr "Вы ўпэўнены, што жадаеце перазагрузіць?"
73
101
74−#: qml/Components/Dialogs.qml:181
102+#: qml/Components/Dialogs.qml:215
75msgid "No"
103msgid "No"
76msgstr "Не"
104msgstr "Не"
77
105
78−#: qml/Components/Dialogs.qml:187
106+#: qml/Components/Dialogs.qml:223
79msgid "Yes"
107msgid "Yes"
80msgstr "Так"
108msgstr "Так"
81
109
82−#: qml/Components/Dialogs.qml:202
110+#: qml/Components/Dialogs.qml:239
83msgctxt "Title: Power off/Restart dialog"
111msgctxt "Title: Power off/Restart dialog"
84msgid "Power"
112msgid "Power"
85msgstr "Сілкаванне"
113msgstr "Сілкаванне"
86
114
87−#: qml/Components/Dialogs.qml:203
115+#: qml/Components/Dialogs.qml:240
88msgid ""
116msgid ""
89"Are you sure you would like\n"
117"Are you sure you would like\n"
90"to power off?"
118"to power off?"
@@ -92,12 +120,12 @@ msgstr ""
92"Вы ўпэўнены, што хочаце\n"
120"Вы ўпэўнены, што хочаце\n"
93"выключыць камп'ютэр?"
121"выключыць камп'ютэр?"
94
122
95−#: qml/Components/Dialogs.qml:205
123+#: qml/Components/Dialogs.qml:244
96msgctxt "Button: Power off the system"
124msgctxt "Button: Power off the system"
97msgid "Power off"
125msgid "Power off"
98msgstr "Выключыць"
126msgstr "Выключыць"
99
127
100−#: qml/Components/Dialogs.qml:214
128+#: qml/Components/Dialogs.qml:255
101msgctxt "Button: Restart the system"
129msgctxt "Button: Restart the system"
102msgid "Restart"
130msgid "Restart"
103msgstr "Перазапуск"
131msgstr "Перазапуск"
@@ -123,7 +151,7 @@ msgid "Alt + PrtScr"
123msgstr ""
151msgstr ""
124
152
125#: qml/Components/KeyboardShortcutsOverlay.qml:80
153#: qml/Components/KeyboardShortcutsOverlay.qml:80
126−msgid "Takes a screenshot of a window."
154+msgid "Takes a screenshot of the current window."
127msgstr ""
155msgstr ""
128
156
129#: qml/Components/KeyboardShortcutsOverlay.qml:88
157#: qml/Components/KeyboardShortcutsOverlay.qml:88
@@ -142,127 +170,143 @@ msgstr ""
142msgid "Switches to previous keyboard layout."
170msgid "Switches to previous keyboard layout."
143msgstr ""
171msgstr ""
144
172
145−#: qml/Components/KeyboardShortcutsOverlay.qml:118
173+#: qml/Components/KeyboardShortcutsOverlay.qml:114
174+msgid "Ctrl + Alt + T"
175+msgstr ""
176+
177+#: qml/Components/KeyboardShortcutsOverlay.qml:119
178+msgid "Starts the Terminal application."
179+msgstr ""
180+
181+#: qml/Components/KeyboardShortcutsOverlay.qml:131
146msgid "Launcher"
182msgid "Launcher"
147msgstr ""
183msgstr ""
148
184
149−#: qml/Components/KeyboardShortcutsOverlay.qml:125
185+#: qml/Components/KeyboardShortcutsOverlay.qml:138
150msgid "Super (Hold)"
186msgid "Super (Hold)"
151msgstr ""
187msgstr ""
152
188
153−#: qml/Components/KeyboardShortcutsOverlay.qml:130
189+#: qml/Components/KeyboardShortcutsOverlay.qml:143
154msgid "Opens the launcher, displays shortcuts."
190msgid "Opens the launcher, displays shortcuts."
155msgstr ""
191msgstr ""
156
192
157−#: qml/Components/KeyboardShortcutsOverlay.qml:138
193+#: qml/Components/KeyboardShortcutsOverlay.qml:151
158msgid "Alt + F1"
194msgid "Alt + F1"
159msgstr ""
195msgstr ""
160
196
161−#: qml/Components/KeyboardShortcutsOverlay.qml:143
197+#: qml/Components/KeyboardShortcutsOverlay.qml:156
162msgid "Opens launcher keyboard navigation mode."
198msgid "Opens launcher keyboard navigation mode."
163msgstr ""
199msgstr ""
164
200
165−#: qml/Components/KeyboardShortcutsOverlay.qml:151
201+#: qml/Components/KeyboardShortcutsOverlay.qml:164
166msgid "Super + Tab"
202msgid "Super + Tab"
167msgstr ""
203msgstr ""
168
204
169−#: qml/Components/KeyboardShortcutsOverlay.qml:156
205+#: qml/Components/KeyboardShortcutsOverlay.qml:169
170msgid "Switches applications via the launcher."
206msgid "Switches applications via the launcher."
171msgstr ""
207msgstr ""
172
208
173−#: qml/Components/KeyboardShortcutsOverlay.qml:164
209+#: qml/Components/KeyboardShortcutsOverlay.qml:177
174−msgid "Super + 0 to 9"
210+msgid "Super + 1 to 0"
175msgstr ""
211msgstr ""
176
212
177−#: qml/Components/KeyboardShortcutsOverlay.qml:169
213+#: qml/Components/KeyboardShortcutsOverlay.qml:182
178msgid "Same as clicking on a launcher icon."
214msgid "Same as clicking on a launcher icon."
179msgstr ""
215msgstr ""
180
216
181−#: qml/Components/KeyboardShortcutsOverlay.qml:181
217+#: qml/Components/KeyboardShortcutsOverlay.qml:190
218+msgid "Super + A"
219+msgstr ""
220+
221+#: qml/Components/KeyboardShortcutsOverlay.qml:195
222+msgid "Opens the Application Drawer."
223+msgstr ""
224+
225+#: qml/Components/KeyboardShortcutsOverlay.qml:207
182msgid "Scopes"
226msgid "Scopes"
183msgstr ""
227msgstr ""
184
228
185−#: qml/Components/KeyboardShortcutsOverlay.qml:188
229+#: qml/Components/KeyboardShortcutsOverlay.qml:214
186msgid "Super (Tap)"
230msgid "Super (Tap)"
187msgstr ""
231msgstr ""
188
232
189−#: qml/Components/KeyboardShortcutsOverlay.qml:193
233+#: qml/Components/KeyboardShortcutsOverlay.qml:219
190msgid "Opens the Scopes home."
234msgid "Opens the Scopes home."
191msgstr ""
235msgstr ""
192
236
193−#: qml/Components/KeyboardShortcutsOverlay.qml:209
237+#: qml/Components/KeyboardShortcutsOverlay.qml:235
194msgid "Switching"
238msgid "Switching"
195msgstr ""
239msgstr ""
196
240
197−#: qml/Components/KeyboardShortcutsOverlay.qml:216
241+#: qml/Components/KeyboardShortcutsOverlay.qml:242
198msgid "Alt + Tab"
242msgid "Alt + Tab"
199msgstr ""
243msgstr ""
200
244
201−#: qml/Components/KeyboardShortcutsOverlay.qml:221
245+#: qml/Components/KeyboardShortcutsOverlay.qml:247
202msgid "Switches between applications."
246msgid "Switches between applications."
203msgstr ""
247msgstr ""
204
248
205−#: qml/Components/KeyboardShortcutsOverlay.qml:229
249+#: qml/Components/KeyboardShortcutsOverlay.qml:255
206msgid "Super + W"
250msgid "Super + W"
207msgstr ""
251msgstr ""
208
252
209−#: qml/Components/KeyboardShortcutsOverlay.qml:234
253+#: qml/Components/KeyboardShortcutsOverlay.qml:260
210msgid "Opens the desktop spread."
254msgid "Opens the desktop spread."
211msgstr ""
255msgstr ""
212
256
213−#: qml/Components/KeyboardShortcutsOverlay.qml:242
257+#: qml/Components/KeyboardShortcutsOverlay.qml:268
214msgid "Cursor Left or Right"
258msgid "Cursor Left or Right"
215msgstr ""
259msgstr ""
216
260
217−#: qml/Components/KeyboardShortcutsOverlay.qml:247
261+#: qml/Components/KeyboardShortcutsOverlay.qml:273
218msgid "Moves the focus."
262msgid "Moves the focus."
219msgstr ""
263msgstr ""
220
264
221−#: qml/Components/KeyboardShortcutsOverlay.qml:259
265+#: qml/Components/KeyboardShortcutsOverlay.qml:285
222msgid "Windows"
266msgid "Windows"
223msgstr ""
267msgstr ""
224
268
225−#: qml/Components/KeyboardShortcutsOverlay.qml:266
269+#: qml/Components/KeyboardShortcutsOverlay.qml:292
226msgid "Ctrl + Super + D"
270msgid "Ctrl + Super + D"
227msgstr ""
271msgstr ""
228
272
229−#: qml/Components/KeyboardShortcutsOverlay.qml:271
273+#: qml/Components/KeyboardShortcutsOverlay.qml:297
230msgid "Minimizes all windows."
274msgid "Minimizes all windows."
231msgstr ""
275msgstr ""
232
276
233−#: qml/Components/KeyboardShortcutsOverlay.qml:279
277+#: qml/Components/KeyboardShortcutsOverlay.qml:305
234msgid "Ctrl + Super + Up"
278msgid "Ctrl + Super + Up"
235msgstr ""
279msgstr ""
236
280
237−#: qml/Components/KeyboardShortcutsOverlay.qml:284
281+#: qml/Components/KeyboardShortcutsOverlay.qml:310
238msgid "Maximizes the current window."
282msgid "Maximizes the current window."
239msgstr ""
283msgstr ""
240
284
241−#: qml/Components/KeyboardShortcutsOverlay.qml:292
285+#: qml/Components/KeyboardShortcutsOverlay.qml:318
242msgid "Ctrl + Super + Down"
286msgid "Ctrl + Super + Down"
243msgstr ""
287msgstr ""
244
288
245−#: qml/Components/KeyboardShortcutsOverlay.qml:297
289+#: qml/Components/KeyboardShortcutsOverlay.qml:323
246msgid "Minimizes or restores the current window."
290msgid "Minimizes or restores the current window."
247msgstr ""
291msgstr ""
248
292
249−#: qml/Components/KeyboardShortcutsOverlay.qml:305
293+#: qml/Components/KeyboardShortcutsOverlay.qml:331
250msgid "Ctrl + Super + Left or Right"
294msgid "Ctrl + Super + Left or Right"
251msgstr ""
295msgstr ""
252
296
253−#: qml/Components/KeyboardShortcutsOverlay.qml:310
297+#: qml/Components/KeyboardShortcutsOverlay.qml:336
254msgid "Semi-maximizes the current window."
298msgid "Semi-maximizes the current window."
255msgstr ""
299msgstr ""
256
300
257−#: qml/Components/KeyboardShortcutsOverlay.qml:318
301+#: qml/Components/KeyboardShortcutsOverlay.qml:344
258msgid "Alt + F4"
302msgid "Alt + F4"
259msgstr ""
303msgstr ""
260
304
261−#: qml/Components/KeyboardShortcutsOverlay.qml:323
305+#: qml/Components/KeyboardShortcutsOverlay.qml:349
262msgid "Closes the current window."
306msgid "Closes the current window."
263msgstr ""
307msgstr ""
264
308
265−#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
309+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:228
266msgid "Return to Call"
310msgid "Return to Call"
267msgstr "Вярнуцца да выкліку"
311msgstr "Вярнуцца да выкліку"
268
312
@@ -270,7 +314,7 @@ msgstr "Вярнуцца да выкліку"
270msgid "Emergency Call"
314msgid "Emergency Call"
271msgstr "Терміновы выклік"
315msgstr "Терміновы выклік"
272
316
273−#: qml/Components/Lockscreen.qml:244
317+#: qml/Components/Lockscreen.qml:245
274msgid "OK"
318msgid "OK"
275msgstr "Добра"
319msgstr "Добра"
276
320
@@ -284,29 +328,29 @@ msgstr ""
284msgid "%1:%2"
328msgid "%1:%2"
285msgstr ""
329msgstr ""
286
330
287−#: qml/Components/ModeSwitchWarningDialog.qml:32
331+#: qml/Components/ModeSwitchWarningDialog.qml:33
288msgid "Apps may have unsaved data:"
332msgid "Apps may have unsaved data:"
289msgstr "Прылады могуць мець незахованыя дадзеныя:"
333msgstr "Прылады могуць мець незахованыя дадзеныя:"
290
334
291−#: qml/Components/ModeSwitchWarningDialog.qml:57
335+#: qml/Components/ModeSwitchWarningDialog.qml:60
292msgctxt ""
336msgctxt ""
293"Re-dock means connect the device again to an external screen/mouse/keyboard"
337"Re-dock means connect the device again to an external screen/mouse/keyboard"
294msgid "Re-dock, save your work and close these apps to continue."
338msgid "Re-dock, save your work and close these apps to continue."
295msgstr ""
339msgstr ""
296
340
297−#: qml/Components/ModeSwitchWarningDialog.qml:63
341+#: qml/Components/ModeSwitchWarningDialog.qml:67
298msgid "Or force close now (unsaved data will be lost)."
342msgid "Or force close now (unsaved data will be lost)."
299msgstr "Прымусіць зачыніць (незахаваныя дадзеныя будуць страчаны)."
343msgstr "Прымусіць зачыніць (незахаваныя дадзеныя будуць страчаны)."
300
344
301−#: qml/Components/ModeSwitchWarningDialog.qml:75
345+#: qml/Components/ModeSwitchWarningDialog.qml:80
302msgid "OK, I will reconnect"
346msgid "OK, I will reconnect"
303msgstr "Добра, буду перападлучацца"
347msgstr "Добра, буду перападлучацца"
304
348
305−#: qml/Components/ModeSwitchWarningDialog.qml:76
349+#: qml/Components/ModeSwitchWarningDialog.qml:81
306msgid "Reconnect now!"
350msgid "Reconnect now!"
307msgstr "Перападлучыцца зараз!"
351msgstr "Перападлучыцца зараз!"
308
352
309−#: qml/Components/ModeSwitchWarningDialog.qml:88
353+#: qml/Components/ModeSwitchWarningDialog.qml:94
310msgid "Close all"
354msgid "Close all"
311msgstr "Зачыніць усё"
355msgstr "Зачыніць усё"
312
356
@@ -314,6 +358,28 @@ msgstr "Зачыніць усё"
314msgid "Preview Share Item"
358msgid "Preview Share Item"
315msgstr "Праглядзець элемент"
359msgstr "Праглядзець элемент"
316
360
361+#: qml/Components/VirtualTouchPad.qml:317
362+msgid ""
363+"Your device is now connected to an external display. Use this screen as a "
364+"touch pad to interact with the pointer."
365+msgstr ""
366+
367+#: qml/Components/VirtualTouchPad.qml:327
368+msgid "Tap left button to click."
369+msgstr ""
370+
371+#: qml/Components/VirtualTouchPad.qml:339
372+msgid "Tap right button to right click."
373+msgstr ""
374+
375+#: qml/Components/VirtualTouchPad.qml:351
376+msgid "Swipe with two fingers to scroll."
377+msgstr ""
378+
379+#: qml/Components/VirtualTouchPad.qml:396
380+msgid "Find more settings in the system settings."
381+msgstr ""
382+
317#: qml/Dash/DashPageHeader.qml:361
383#: qml/Dash/DashPageHeader.qml:361
318msgctxt "Button: Open the Ubuntu Store"
384msgctxt "Button: Open the Ubuntu Store"
319msgid "Store"
385msgid "Store"
@@ -345,24 +411,24 @@ msgstr ""
345msgid "Reset"
411msgid "Reset"
346msgstr ""
412msgstr ""
347
413
348−#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
414+#: qml/Dash/GenericScopeView.qml:547 qml/Dash/GenericScopeView.qml:718
349msgid "Show less"
415msgid "Show less"
350msgstr ""
416msgstr ""
351
417
352−#: qml/Dash/GenericScopeView.qml:545
418+#: qml/Dash/GenericScopeView.qml:547
353msgid "Show all"
419msgid "Show all"
354msgstr ""
420msgstr ""
355
421
356−#: qml/Dash/GenericScopeView.qml:576
422+#: qml/Dash/GenericScopeView.qml:578
357msgctxt "Label: Hint for dash search line edit"
423msgctxt "Label: Hint for dash search line edit"
358msgid "Search"
424msgid "Search"
359msgstr "Пошук"
425msgstr "Пошук"
360
426
361−#: qml/Dash/PageHeaderExtraPanel.qml:57
427+#: qml/Dash/PageHeaderExtraPanel.qml:67
362msgid "Recent Searches"
428msgid "Recent Searches"
363msgstr ""
429msgstr ""
364
430
365−#: qml/Dash/PageHeaderExtraPanel.qml:68
431+#: qml/Dash/PageHeaderExtraPanel.qml:78
366msgid "Clear All"
432msgid "Clear All"
367msgstr ""
433msgstr ""
368
434
@@ -399,24 +465,18 @@ msgstr "Адпусціце для абнаўлення..."
399msgid "Enable location data"
465msgid "Enable location data"
400msgstr "Уключыць дадзеныя аб месцазнаходжанні"
466msgstr "Уключыць дадзеныя аб месцазнаходжанні"
401
467
402−#: qml/Dash/ScopesList.qml:57
468+#: qml/Dash/ScopesList.qml:146
403msgid "Manage"
469msgid "Manage"
404msgstr "Кіраванне"
470msgstr "Кіраванне"
405
471
406−#: qml/Dash/ScopesList.qml:104
472+#: qml/Dash/ScopesList.qml:187
407msgid "Home"
473msgid "Home"
408msgstr "Хатняя папка"
474msgstr "Хатняя папка"
409
475
410−#: qml/Dash/ScopesList.qml:105
476+#: qml/Dash/ScopesList.qml:188
411msgid "Also installed"
477msgid "Also installed"
412msgstr "Таксама ўсталявана"
478msgstr "Таксама ўсталявана"
413
479
414−#: qml/DisabledScreenNotice.qml:109
415−msgid ""
416−"Your device is now connected to an external display. Use this screen as a "
417−"touch pad to interact with the pointer."
418−msgstr ""
419−
420#: qml/Greeter/CoverPage.qml:127
480#: qml/Greeter/CoverPage.qml:127
421msgid "Unlock"
481msgid "Unlock"
422msgstr "Разблакаваць"
482msgstr "Разблакаваць"
@@ -444,32 +504,45 @@ msgstr[0] "Пачакайце %1 хвіліну і паўтарыце спроб
444msgstr[1] "Пачакайце %1 хвіліны і паўтарыце спробу…"
504msgstr[1] "Пачакайце %1 хвіліны і паўтарыце спробу…"
445msgstr[2] "Пачакайце %1 хвілін і паўтарыце спробу…"
505msgstr[2] "Пачакайце %1 хвілін і паўтарыце спробу…"
446
506
447−#: qml/Greeter/Greeter.qml:596
507+#: qml/Greeter/Greeter.qml:550
448msgid "Try again"
508msgid "Try again"
449msgstr ""
509msgstr ""
450
510
451−#: qml/Greeter/LoginList.qml:70
511+#: qml/Greeter/Greeter.qml:551
512+msgid "Enter passphrase to unlock"
513+msgstr ""
514+
515+#: qml/Greeter/Greeter.qml:552
516+msgid "Enter passcode to unlock"
517+msgstr ""
518+
519+#: qml/Greeter/NarrowView.qml:228
520+msgid "Emergency"
521+msgstr ""
522+
523+#: qml/Greeter/PromptList.qml:126
452msgid "Passphrase"
524msgid "Passphrase"
453msgstr ""
525msgstr ""
454
526
455−#: qml/Greeter/LoginList.qml:71
527+#: qml/Greeter/PromptList.qml:126
456msgid "Passcode"
528msgid "Passcode"
457msgstr ""
529msgstr ""
458
530
459−#: qml/Greeter/LoginList.qml:98
531+#: qml/Greeter/SessionsList.qml:124
460−msgid "Retry"
532+msgid "Select desktop environment"
461−msgstr "Паспрабаваць зноў"
533+msgstr ""
462
534
463−#: qml/Greeter/LoginList.qml:99
535+#: qml/Launcher/Drawer.qml:94
464−msgid "Log In"
536+msgid "Search…"
465msgstr ""
537msgstr ""
466
538
467−#: qml/Greeter/NarrowView.qml:252
539+#: qml/Launcher/Drawer.qml:129
540+msgctxt "Apps sorted alphabetically"
468−msgid "Emergency"
541+msgid "A-Z"
469msgstr ""
542msgstr ""
470
543
471−#: qml/Greeter/SessionsList.qml:122
544+#: qml/Launcher/MoreAppsHeader.qml:55
472−msgid "Select desktop environment"
545+msgid "More apps in the store"
473msgstr ""
546msgstr ""
474
547
475#: qml/Notifications/NotificationMenuItemFactory.qml:124
548#: qml/Notifications/NotificationMenuItemFactory.qml:124
@@ -484,11 +557,11 @@ msgstr "Націсніце, каб вярнуцца да выкліку..."
484msgid "Conference"
557msgid "Conference"
485msgstr "Канферэнцыя"
558msgstr "Канферэнцыя"
486
559
487−#: qml/Panel/Indicators/MenuItemFactory.qml:847
560+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:869
488msgid "Nothing is playing"
561msgid "Nothing is playing"
489msgstr "Нічога не грае"
562msgstr "Нічога не грае"
490
563
491−#: qml/Panel/Indicators/MenuItemFactory.qml:975
564+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:997
492#, qt-format
565#, qt-format
493msgid "%1 hour"
566msgid "%1 hour"
494msgid_plural "%1 hours"
567msgid_plural "%1 hours"
@@ -496,7 +569,7 @@ msgstr[0] "%1 гадзіна"
496msgstr[1] "%1 гадзіны"
569msgstr[1] "%1 гадзіны"
497msgstr[2] "%1 гадзінаў"
570msgstr[2] "%1 гадзінаў"
498
571
499−#: qml/Panel/Indicators/MenuItemFactory.qml:979
572+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1001
500#, qt-format
573#, qt-format
501msgid "%1 minute"
574msgid "%1 minute"
502msgid_plural "%1 minutes"
575msgid_plural "%1 minutes"
@@ -504,7 +577,7 @@ msgstr[0] "%1 хвіліна"
504msgstr[1] "%1 хвіліны"
577msgstr[1] "%1 хвіліны"
505msgstr[2] "%1 хвілінаў"
578msgstr[2] "%1 хвілінаў"
506
579
507−#: qml/Panel/Indicators/MenuItemFactory.qml:984
580+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1006
508#, qt-format
581#, qt-format
509msgid "%1 second"
582msgid "%1 second"
510msgid_plural "%1 seconds"
583msgid_plural "%1 seconds"
@@ -512,37 +585,37 @@ msgstr[0] "%1 секунда"
512msgstr[1] "%1 секунды"
585msgstr[1] "%1 секунды"
513msgstr[2] "%1 секундаў"
586msgstr[2] "%1 секундаў"
514
587
515−#: qml/Panel/Indicators/MenuItemFactory.qml:987
588+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1009
516msgid "0 seconds"
589msgid "0 seconds"
517msgstr "0 секунд"
590msgstr "0 секунд"
518
591
519#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
592#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
520−#: qml/Panel/Indicators/MenuItemFactory.qml:989
593+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1011
521#, qt-format
594#, qt-format
522msgid "%1 remaining"
595msgid "%1 remaining"
523msgstr "%1 засталося"
596msgstr "%1 засталося"
524
597
525−#: qml/Panel/Indicators/MenuItemFactory.qml:995
598+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1017
526msgid "In queue…"
599msgid "In queue…"
527msgstr "У чарзе..."
600msgstr "У чарзе..."
528
601
529−#: qml/Panel/Indicators/MenuItemFactory.qml:999
602+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1021
530msgid "Downloading"
603msgid "Downloading"
531msgstr "Запампоўка"
604msgstr "Запампоўка"
532
605
533−#: qml/Panel/Indicators/MenuItemFactory.qml:1001
606+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1023
534msgid "Paused, tap to resume"
607msgid "Paused, tap to resume"
535msgstr "Прыпынена, націсніце для працягу"
608msgstr "Прыпынена, націсніце для працягу"
536
609
537−#: qml/Panel/Indicators/MenuItemFactory.qml:1003
610+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1025
538msgid "Canceled"
611msgid "Canceled"
539msgstr "Скасавана"
612msgstr "Скасавана"
540
613
541−#: qml/Panel/Indicators/MenuItemFactory.qml:1005
614+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1027
542msgid "Finished"
615msgid "Finished"
543msgstr "Скончана"
616msgstr "Скончана"
544
617
545−#: qml/Panel/Indicators/MenuItemFactory.qml:1007
618+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1029
546msgid "Failed, tap to retry"
619msgid "Failed, tap to retry"
547msgstr "Не атрымалася, націсніце, каб паўтарыць спробу"
620msgstr "Не атрымалася, націсніце, каб паўтарыць спробу"
548
621
@@ -562,12 +635,16 @@ msgctxt "Button: Call back on phone"
562msgid "Call back"
635msgid "Call back"
563msgstr "Патэлефанаваць"
636msgstr "Патэлефанаваць"
564
637
638+#: qml/Panel/PanelMenuPage.qml:92
639+msgid "Back"
640+msgstr ""
641+
565#: qml/Stage/SideStage.qml:76
642#: qml/Stage/SideStage.qml:76
566msgid "Drag using 3 fingers any application from one window to the other"
643msgid "Drag using 3 fingers any application from one window to the other"
567msgstr ""
644msgstr ""
568
645
569#: qml/Tutorial/TutorialLeftLong.qml:49
646#: qml/Tutorial/TutorialLeftLong.qml:49
570−msgid "Long swipe from the left edge to open the Today scope"
647+msgid "Long swipe from the left edge to open the Application Drawer"
571msgstr ""
648msgstr ""
572
649
573#: qml/Tutorial/TutorialLeft.qml:47
650#: qml/Tutorial/TutorialLeft.qml:47
@@ -596,7 +673,7 @@ msgid "Language"
596msgstr ""
673msgstr ""
597
674
598#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
675#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
599−#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
676+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/40-location.qml:271
600#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
677#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
601#: qml/Wizard/Pages/70-passwd-type.qml:145
678#: qml/Wizard/Pages/70-passwd-type.qml:145
602#: qml/Wizard/Pages/75-report-check.qml:84
679#: qml/Wizard/Pages/75-report-check.qml:84
@@ -617,25 +694,24 @@ msgstr ""
617msgid "Keyboard layout"
694msgid "Keyboard layout"
618msgstr ""
695msgstr ""
619
696
620−#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
697+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:206
621−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
698+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/sim.qml:101
622−#: qml/Wizard/Pages/sim.qml:101
623msgid "Skip"
699msgid "Skip"
624msgstr "Прапусціць"
700msgstr "Прапусціць"
625
701
626−#: qml/Wizard/Pages/30-wifi.qml:31
702+#: qml/Wizard/Pages/30-wifi.qml:30
627msgid "Connect to Wi‑Fi"
703msgid "Connect to Wi‑Fi"
628msgstr "Злучыцца з Wi-Fi"
704msgstr "Злучыцца з Wi-Fi"
629
705
630−#: qml/Wizard/Pages/30-wifi.qml:132
706+#: qml/Wizard/Pages/30-wifi.qml:131
631msgid "Connected"
707msgid "Connected"
632msgstr ""
708msgstr ""
633
709
634−#: qml/Wizard/Pages/30-wifi.qml:165
710+#: qml/Wizard/Pages/30-wifi.qml:164
635msgid "Available Wi-Fi networks"
711msgid "Available Wi-Fi networks"
636msgstr ""
712msgstr ""
637
713
638−#: qml/Wizard/Pages/30-wifi.qml:166
714+#: qml/Wizard/Pages/30-wifi.qml:165
639msgid "No available Wi-Fi networks"
715msgid "No available Wi-Fi networks"
640msgstr ""
716msgstr ""
641
717
@@ -722,35 +798,6 @@ msgstr ""
722msgid "Privacy policy"
798msgid "Privacy policy"
723msgstr ""
799msgstr ""
724
800
725−#: qml/Wizard/Pages/77-system-update.qml:28
726−msgid "Update Device"
727−msgstr ""
728−
729−#: qml/Wizard/Pages/77-system-update.qml:55
730−msgid ""
731−"There is a system update available and ready to install. Afterwards, the "
732−"device will automatically restart."
733−msgstr ""
734−
735−#: qml/Wizard/Pages/77-system-update.qml:76
736−msgctxt "string identifying name of the update"
737−msgid "Ubuntu system"
738−msgstr ""
739−
740−#: qml/Wizard/Pages/77-system-update.qml:83
741−#, qt-format
742−msgctxt "version of the system update"
743−msgid "Version %1"
744−msgstr ""
745−
746−#: qml/Wizard/Pages/77-system-update.qml:102
747−msgid "This could take a few minutes..."
748−msgstr ""
749−
750−#: qml/Wizard/Pages/77-system-update.qml:116
751−msgid "Install and restart now"
752−msgstr ""
753−
754#: qml/Wizard/Pages/80-finished.qml:89
801#: qml/Wizard/Pages/80-finished.qml:89
755msgid "Welcome to Ubuntu"
802msgid "Welcome to Ubuntu"
756msgstr ""
803msgstr ""
po/bg.po+183−136
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-11-16 10:44+0000\n"
10+"POT-Creation-Date: 2017-04-04 22:56+0000\n"
11"PO-Revision-Date: 2015-04-12 14:43+0000\n"
11"PO-Revision-Date: 2015-04-12 14:43+0000\n"
12"Last-Translator: George Karavasilev <kokoto-java@ubuntu.com>\n"
12"Last-Translator: George Karavasilev <kokoto-java@ubuntu.com>\n"
13"Language-Team: Bulgarian <bg@li.org>\n"
13"Language-Team: Bulgarian <bg@li.org>\n"
@@ -15,75 +15,103 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-11-23 06:34+0000\n"
18+"X-Launchpad-Export-Date: 2017-04-07 06:29+0000\n"
19−"X-Generator: Launchpad (build 18269)\n"
19+"X-Generator: Launchpad (build 18343)\n"
20
20
21−#: plugins/LightDM/Greeter.cpp:123
21+#: plugins/LightDM/Greeter.cpp:188
22msgid "Password: "
22msgid "Password: "
23msgstr ""
23msgstr ""
24
24
25+#: plugins/LightDM/Greeter.cpp:203
26+msgid "Username"
27+msgstr ""
28+
29+#: plugins/LightDM/Greeter.cpp:242
30+msgid "Failed to authenticate"
31+msgstr ""
32+
33+#: plugins/LightDM/Greeter.cpp:244
34+msgid "Invalid password, please try again"
35+msgstr ""
36+
37+#: plugins/LightDM/Greeter.cpp:254
38+msgid "Log In"
39+msgstr ""
40+
41+#: plugins/LightDM/Greeter.cpp:254
42+msgid "Retry"
43+msgstr ""
44+
45+#: plugins/LightDM/UsersModel.cpp:157
46+msgid "Login"
47+msgstr ""
48+
49+#: plugins/LightDM/UsersModel.cpp:165
50+msgid "Guest Session"
51+msgstr ""
52+
25#: plugins/Unity/Launcher/launcheritem.cpp:49
53#: plugins/Unity/Launcher/launcheritem.cpp:49
26−#: plugins/Unity/Launcher/launcheritem.cpp:108
54+#: plugins/Unity/Launcher/launcheritem.cpp:123
27msgid "Pin shortcut"
55msgid "Pin shortcut"
28msgstr ""
56msgstr ""
29
57
30−#: plugins/Unity/Launcher/launcheritem.cpp:54
58+#: plugins/Unity/Launcher/launcheritem.cpp:55
31msgid "Quit"
59msgid "Quit"
32msgstr ""
60msgstr ""
33
61
34−#: plugins/Unity/Launcher/launcheritem.cpp:108
62+#: plugins/Unity/Launcher/launcheritem.cpp:123
35msgid "Unpin shortcut"
63msgid "Unpin shortcut"
36msgstr ""
64msgstr ""
37
65
38−#: qml/Components/Dialogs.qml:149
66+#: qml/Components/Dialogs.qml:176
39msgctxt "Title: Lock/Log out dialog"
67msgctxt "Title: Lock/Log out dialog"
40msgid "Log out"
68msgid "Log out"
41msgstr ""
69msgstr ""
42
70
43−#: qml/Components/Dialogs.qml:150
71+#: qml/Components/Dialogs.qml:177
44msgid "Are you sure you want to log out?"
72msgid "Are you sure you want to log out?"
45msgstr ""
73msgstr ""
46
74
47−#: qml/Components/Dialogs.qml:152
75+#: qml/Components/Dialogs.qml:180
48msgctxt "Button: Lock the system"
76msgctxt "Button: Lock the system"
49msgid "Lock"
77msgid "Lock"
50msgstr ""
78msgstr ""
51
79
52−#: qml/Components/Dialogs.qml:159
80+#: qml/Components/Dialogs.qml:191
53msgctxt "Button: Log out from the system"
81msgctxt "Button: Log out from the system"
54msgid "Log Out"
82msgid "Log Out"
55msgstr ""
83msgstr ""
56
84
57−#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
85+#: qml/Components/Dialogs.qml:199 qml/Components/Dialogs.qml:264
58−#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
86+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:208
59#: qml/Wizard/Pages/passcode-confirm.qml:32
87#: qml/Wizard/Pages/passcode-confirm.qml:32
60#: qml/Wizard/Pages/passcode-set.qml:32
88#: qml/Wizard/Pages/passcode-set.qml:32
61msgid "Cancel"
89msgid "Cancel"
62msgstr ""
90msgstr ""
63
91
64−#: qml/Components/Dialogs.qml:178
92+#: qml/Components/Dialogs.qml:211
65msgctxt "Title: Reboot dialog"
93msgctxt "Title: Reboot dialog"
66msgid "Reboot"
94msgid "Reboot"
67msgstr ""
95msgstr ""
68
96
69−#: qml/Components/Dialogs.qml:179
97+#: qml/Components/Dialogs.qml:212
70msgid "Are you sure you want to reboot?"
98msgid "Are you sure you want to reboot?"
71msgstr ""
99msgstr ""
72
100
73−#: qml/Components/Dialogs.qml:181
101+#: qml/Components/Dialogs.qml:215
74msgid "No"
102msgid "No"
75msgstr ""
103msgstr ""
76
104
77−#: qml/Components/Dialogs.qml:187
105+#: qml/Components/Dialogs.qml:223
78msgid "Yes"
106msgid "Yes"
79msgstr ""
107msgstr ""
80
108
81−#: qml/Components/Dialogs.qml:202
109+#: qml/Components/Dialogs.qml:239
82msgctxt "Title: Power off/Restart dialog"
110msgctxt "Title: Power off/Restart dialog"
83msgid "Power"
111msgid "Power"
84msgstr ""
112msgstr ""
85
113
86−#: qml/Components/Dialogs.qml:203
114+#: qml/Components/Dialogs.qml:240
87msgid ""
115msgid ""
88"Are you sure you would like\n"
116"Are you sure you would like\n"
89"to power off?"
117"to power off?"
@@ -91,12 +119,12 @@ msgstr ""
91"Искате ли да \n"
119"Искате ли да \n"
92"изключите захранването на устройството?"
120"изключите захранването на устройството?"
93
121
94−#: qml/Components/Dialogs.qml:205
122+#: qml/Components/Dialogs.qml:244
95msgctxt "Button: Power off the system"
123msgctxt "Button: Power off the system"
96msgid "Power off"
124msgid "Power off"
97msgstr ""
125msgstr ""
98
126
99−#: qml/Components/Dialogs.qml:214
127+#: qml/Components/Dialogs.qml:255
100msgctxt "Button: Restart the system"
128msgctxt "Button: Restart the system"
101msgid "Restart"
129msgid "Restart"
102msgstr ""
130msgstr ""
@@ -122,7 +150,7 @@ msgid "Alt + PrtScr"
122msgstr ""
150msgstr ""
123
151
124#: qml/Components/KeyboardShortcutsOverlay.qml:80
152#: qml/Components/KeyboardShortcutsOverlay.qml:80
125−msgid "Takes a screenshot of a window."
153+msgid "Takes a screenshot of the current window."
126msgstr ""
154msgstr ""
127
155
128#: qml/Components/KeyboardShortcutsOverlay.qml:88
156#: qml/Components/KeyboardShortcutsOverlay.qml:88
@@ -141,127 +169,143 @@ msgstr ""
141msgid "Switches to previous keyboard layout."
169msgid "Switches to previous keyboard layout."
142msgstr ""
170msgstr ""
143
171
144−#: qml/Components/KeyboardShortcutsOverlay.qml:118
172+#: qml/Components/KeyboardShortcutsOverlay.qml:114
173+msgid "Ctrl + Alt + T"
174+msgstr ""
175+
176+#: qml/Components/KeyboardShortcutsOverlay.qml:119
177+msgid "Starts the Terminal application."
178+msgstr ""
179+
180+#: qml/Components/KeyboardShortcutsOverlay.qml:131
145msgid "Launcher"
181msgid "Launcher"
146msgstr ""
182msgstr ""
147
183
148−#: qml/Components/KeyboardShortcutsOverlay.qml:125
184+#: qml/Components/KeyboardShortcutsOverlay.qml:138
149msgid "Super (Hold)"
185msgid "Super (Hold)"
150msgstr ""
186msgstr ""
151
187
152−#: qml/Components/KeyboardShortcutsOverlay.qml:130
188+#: qml/Components/KeyboardShortcutsOverlay.qml:143
153msgid "Opens the launcher, displays shortcuts."
189msgid "Opens the launcher, displays shortcuts."
154msgstr ""
190msgstr ""
155
191
156−#: qml/Components/KeyboardShortcutsOverlay.qml:138
192+#: qml/Components/KeyboardShortcutsOverlay.qml:151
157msgid "Alt + F1"
193msgid "Alt + F1"
158msgstr ""
194msgstr ""
159
195
160−#: qml/Components/KeyboardShortcutsOverlay.qml:143
196+#: qml/Components/KeyboardShortcutsOverlay.qml:156
161msgid "Opens launcher keyboard navigation mode."
197msgid "Opens launcher keyboard navigation mode."
162msgstr ""
198msgstr ""
163
199
164−#: qml/Components/KeyboardShortcutsOverlay.qml:151
200+#: qml/Components/KeyboardShortcutsOverlay.qml:164
165msgid "Super + Tab"
201msgid "Super + Tab"
166msgstr ""
202msgstr ""
167
203
168−#: qml/Components/KeyboardShortcutsOverlay.qml:156
204+#: qml/Components/KeyboardShortcutsOverlay.qml:169
169msgid "Switches applications via the launcher."
205msgid "Switches applications via the launcher."
170msgstr ""
206msgstr ""
171
207
172−#: qml/Components/KeyboardShortcutsOverlay.qml:164
208+#: qml/Components/KeyboardShortcutsOverlay.qml:177
173−msgid "Super + 0 to 9"
209+msgid "Super + 1 to 0"
174msgstr ""
210msgstr ""
175
211
176−#: qml/Components/KeyboardShortcutsOverlay.qml:169
212+#: qml/Components/KeyboardShortcutsOverlay.qml:182
177msgid "Same as clicking on a launcher icon."
213msgid "Same as clicking on a launcher icon."
178msgstr ""
214msgstr ""
179
215
180−#: qml/Components/KeyboardShortcutsOverlay.qml:181
216+#: qml/Components/KeyboardShortcutsOverlay.qml:190
217+msgid "Super + A"
218+msgstr ""
219+
220+#: qml/Components/KeyboardShortcutsOverlay.qml:195
221+msgid "Opens the Application Drawer."
222+msgstr ""
223+
224+#: qml/Components/KeyboardShortcutsOverlay.qml:207
181msgid "Scopes"
225msgid "Scopes"
182msgstr ""
226msgstr ""
183
227
184−#: qml/Components/KeyboardShortcutsOverlay.qml:188
228+#: qml/Components/KeyboardShortcutsOverlay.qml:214
185msgid "Super (Tap)"
229msgid "Super (Tap)"
186msgstr ""
230msgstr ""
187
231
188−#: qml/Components/KeyboardShortcutsOverlay.qml:193
232+#: qml/Components/KeyboardShortcutsOverlay.qml:219
189msgid "Opens the Scopes home."
233msgid "Opens the Scopes home."
190msgstr ""
234msgstr ""
191
235
192−#: qml/Components/KeyboardShortcutsOverlay.qml:209
236+#: qml/Components/KeyboardShortcutsOverlay.qml:235
193msgid "Switching"
237msgid "Switching"
194msgstr ""
238msgstr ""
195
239
196−#: qml/Components/KeyboardShortcutsOverlay.qml:216
240+#: qml/Components/KeyboardShortcutsOverlay.qml:242
197msgid "Alt + Tab"
241msgid "Alt + Tab"
198msgstr ""
242msgstr ""
199
243
200−#: qml/Components/KeyboardShortcutsOverlay.qml:221
244+#: qml/Components/KeyboardShortcutsOverlay.qml:247
201msgid "Switches between applications."
245msgid "Switches between applications."
202msgstr ""
246msgstr ""
203
247
204−#: qml/Components/KeyboardShortcutsOverlay.qml:229
248+#: qml/Components/KeyboardShortcutsOverlay.qml:255
205msgid "Super + W"
249msgid "Super + W"
206msgstr ""
250msgstr ""
207
251
208−#: qml/Components/KeyboardShortcutsOverlay.qml:234
252+#: qml/Components/KeyboardShortcutsOverlay.qml:260
209msgid "Opens the desktop spread."
253msgid "Opens the desktop spread."
210msgstr ""
254msgstr ""
211
255
212−#: qml/Components/KeyboardShortcutsOverlay.qml:242
256+#: qml/Components/KeyboardShortcutsOverlay.qml:268
213msgid "Cursor Left or Right"
257msgid "Cursor Left or Right"
214msgstr ""
258msgstr ""
215
259
216−#: qml/Components/KeyboardShortcutsOverlay.qml:247
260+#: qml/Components/KeyboardShortcutsOverlay.qml:273
217msgid "Moves the focus."
261msgid "Moves the focus."
218msgstr ""
262msgstr ""
219
263
220−#: qml/Components/KeyboardShortcutsOverlay.qml:259
264+#: qml/Components/KeyboardShortcutsOverlay.qml:285
221msgid "Windows"
265msgid "Windows"
222msgstr ""
266msgstr ""
223
267
224−#: qml/Components/KeyboardShortcutsOverlay.qml:266
268+#: qml/Components/KeyboardShortcutsOverlay.qml:292
225msgid "Ctrl + Super + D"
269msgid "Ctrl + Super + D"
226msgstr ""
270msgstr ""
227
271
228−#: qml/Components/KeyboardShortcutsOverlay.qml:271
272+#: qml/Components/KeyboardShortcutsOverlay.qml:297
229msgid "Minimizes all windows."
273msgid "Minimizes all windows."
230msgstr ""
274msgstr ""
231
275
232−#: qml/Components/KeyboardShortcutsOverlay.qml:279
276+#: qml/Components/KeyboardShortcutsOverlay.qml:305
233msgid "Ctrl + Super + Up"
277msgid "Ctrl + Super + Up"
234msgstr ""
278msgstr ""
235
279
236−#: qml/Components/KeyboardShortcutsOverlay.qml:284
280+#: qml/Components/KeyboardShortcutsOverlay.qml:310
237msgid "Maximizes the current window."
281msgid "Maximizes the current window."
238msgstr ""
282msgstr ""
239
283
240−#: qml/Components/KeyboardShortcutsOverlay.qml:292
284+#: qml/Components/KeyboardShortcutsOverlay.qml:318
241msgid "Ctrl + Super + Down"
285msgid "Ctrl + Super + Down"
242msgstr ""
286msgstr ""
243
287
244−#: qml/Components/KeyboardShortcutsOverlay.qml:297
288+#: qml/Components/KeyboardShortcutsOverlay.qml:323
245msgid "Minimizes or restores the current window."
289msgid "Minimizes or restores the current window."
246msgstr ""
290msgstr ""
247
291
248−#: qml/Components/KeyboardShortcutsOverlay.qml:305
292+#: qml/Components/KeyboardShortcutsOverlay.qml:331
249msgid "Ctrl + Super + Left or Right"
293msgid "Ctrl + Super + Left or Right"
250msgstr ""
294msgstr ""
251
295
252−#: qml/Components/KeyboardShortcutsOverlay.qml:310
296+#: qml/Components/KeyboardShortcutsOverlay.qml:336
253msgid "Semi-maximizes the current window."
297msgid "Semi-maximizes the current window."
254msgstr ""
298msgstr ""
255
299
256−#: qml/Components/KeyboardShortcutsOverlay.qml:318
300+#: qml/Components/KeyboardShortcutsOverlay.qml:344
257msgid "Alt + F4"
301msgid "Alt + F4"
258msgstr ""
302msgstr ""
259
303
260−#: qml/Components/KeyboardShortcutsOverlay.qml:323
304+#: qml/Components/KeyboardShortcutsOverlay.qml:349
261msgid "Closes the current window."
305msgid "Closes the current window."
262msgstr ""
306msgstr ""
263
307
264−#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
308+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:228
265msgid "Return to Call"
309msgid "Return to Call"
266msgstr ""
310msgstr ""
267
311
@@ -269,7 +313,7 @@ msgstr ""
269msgid "Emergency Call"
313msgid "Emergency Call"
270msgstr "Спешно повикване"
314msgstr "Спешно повикване"
271
315
272−#: qml/Components/Lockscreen.qml:244
316+#: qml/Components/Lockscreen.qml:245
273msgid "OK"
317msgid "OK"
274msgstr ""
318msgstr ""
275
319
@@ -283,29 +327,29 @@ msgstr ""
283msgid "%1:%2"
327msgid "%1:%2"
284msgstr ""
328msgstr ""
285
329
286−#: qml/Components/ModeSwitchWarningDialog.qml:32
330+#: qml/Components/ModeSwitchWarningDialog.qml:33
287msgid "Apps may have unsaved data:"
331msgid "Apps may have unsaved data:"
288msgstr ""
332msgstr ""
289
333
290−#: qml/Components/ModeSwitchWarningDialog.qml:57
334+#: qml/Components/ModeSwitchWarningDialog.qml:60
291msgctxt ""
335msgctxt ""
292"Re-dock means connect the device again to an external screen/mouse/keyboard"
336"Re-dock means connect the device again to an external screen/mouse/keyboard"
293msgid "Re-dock, save your work and close these apps to continue."
337msgid "Re-dock, save your work and close these apps to continue."
294msgstr ""
338msgstr ""
295
339
296−#: qml/Components/ModeSwitchWarningDialog.qml:63
340+#: qml/Components/ModeSwitchWarningDialog.qml:67
297msgid "Or force close now (unsaved data will be lost)."
341msgid "Or force close now (unsaved data will be lost)."
298msgstr ""
342msgstr ""
299
343
300−#: qml/Components/ModeSwitchWarningDialog.qml:75
344+#: qml/Components/ModeSwitchWarningDialog.qml:80
301msgid "OK, I will reconnect"
345msgid "OK, I will reconnect"
302msgstr ""
346msgstr ""
303
347
304−#: qml/Components/ModeSwitchWarningDialog.qml:76
348+#: qml/Components/ModeSwitchWarningDialog.qml:81
305msgid "Reconnect now!"
349msgid "Reconnect now!"
306msgstr ""
350msgstr ""
307
351
308−#: qml/Components/ModeSwitchWarningDialog.qml:88
352+#: qml/Components/ModeSwitchWarningDialog.qml:94
309msgid "Close all"
353msgid "Close all"
310msgstr ""
354msgstr ""
311
355
@@ -313,6 +357,28 @@ msgstr ""
313msgid "Preview Share Item"
357msgid "Preview Share Item"
314msgstr ""
358msgstr ""
315
359
360+#: qml/Components/VirtualTouchPad.qml:317
361+msgid ""
362+"Your device is now connected to an external display. Use this screen as a "
363+"touch pad to interact with the pointer."
364+msgstr ""
365+
366+#: qml/Components/VirtualTouchPad.qml:327
367+msgid "Tap left button to click."
368+msgstr ""
369+
370+#: qml/Components/VirtualTouchPad.qml:339
371+msgid "Tap right button to right click."
372+msgstr ""
373+
374+#: qml/Components/VirtualTouchPad.qml:351
375+msgid "Swipe with two fingers to scroll."
376+msgstr ""
377+
378+#: qml/Components/VirtualTouchPad.qml:396
379+msgid "Find more settings in the system settings."
380+msgstr ""
381+
316#: qml/Dash/DashPageHeader.qml:361
382#: qml/Dash/DashPageHeader.qml:361
317msgctxt "Button: Open the Ubuntu Store"
383msgctxt "Button: Open the Ubuntu Store"
318msgid "Store"
384msgid "Store"
@@ -344,24 +410,24 @@ msgstr ""
344msgid "Reset"
410msgid "Reset"
345msgstr ""
411msgstr ""
346
412
347−#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
413+#: qml/Dash/GenericScopeView.qml:547 qml/Dash/GenericScopeView.qml:718
348msgid "Show less"
414msgid "Show less"
349msgstr ""
415msgstr ""
350
416
351−#: qml/Dash/GenericScopeView.qml:545
417+#: qml/Dash/GenericScopeView.qml:547
352msgid "Show all"
418msgid "Show all"
353msgstr ""
419msgstr ""
354
420
355−#: qml/Dash/GenericScopeView.qml:576
421+#: qml/Dash/GenericScopeView.qml:578
356msgctxt "Label: Hint for dash search line edit"
422msgctxt "Label: Hint for dash search line edit"
357msgid "Search"
423msgid "Search"
358msgstr ""
424msgstr ""
359
425
360−#: qml/Dash/PageHeaderExtraPanel.qml:57
426+#: qml/Dash/PageHeaderExtraPanel.qml:67
361msgid "Recent Searches"
427msgid "Recent Searches"
362msgstr ""
428msgstr ""
363
429
364−#: qml/Dash/PageHeaderExtraPanel.qml:68
430+#: qml/Dash/PageHeaderExtraPanel.qml:78
365msgid "Clear All"
431msgid "Clear All"
366msgstr ""
432msgstr ""
367
433
@@ -398,24 +464,18 @@ msgstr ""
398msgid "Enable location data"
464msgid "Enable location data"
399msgstr ""
465msgstr ""
400
466
401−#: qml/Dash/ScopesList.qml:57
467+#: qml/Dash/ScopesList.qml:146
402msgid "Manage"
468msgid "Manage"
403msgstr ""
469msgstr ""
404
470
405−#: qml/Dash/ScopesList.qml:104
471+#: qml/Dash/ScopesList.qml:187
406msgid "Home"
472msgid "Home"
407msgstr ""
473msgstr ""
408
474
409−#: qml/Dash/ScopesList.qml:105
475+#: qml/Dash/ScopesList.qml:188
410msgid "Also installed"
476msgid "Also installed"
411msgstr ""
477msgstr ""
412
478
413−#: qml/DisabledScreenNotice.qml:109
414−msgid ""
415−"Your device is now connected to an external display. Use this screen as a "
416−"touch pad to interact with the pointer."
417−msgstr ""
418−
419#: qml/Greeter/CoverPage.qml:127
479#: qml/Greeter/CoverPage.qml:127
420msgid "Unlock"
480msgid "Unlock"
421msgstr ""
481msgstr ""
@@ -439,32 +499,45 @@ msgid_plural "Please wait %1 minutes and then try again…"
439msgstr[0] ""
499msgstr[0] ""
440msgstr[1] ""
500msgstr[1] ""
441
501
442−#: qml/Greeter/Greeter.qml:596
502+#: qml/Greeter/Greeter.qml:550
443msgid "Try again"
503msgid "Try again"
444msgstr ""
504msgstr ""
445
505
446−#: qml/Greeter/LoginList.qml:70
506+#: qml/Greeter/Greeter.qml:551
507+msgid "Enter passphrase to unlock"
508+msgstr ""
509+
510+#: qml/Greeter/Greeter.qml:552
511+msgid "Enter passcode to unlock"
512+msgstr ""
513+
514+#: qml/Greeter/NarrowView.qml:228
515+msgid "Emergency"
516+msgstr ""
517+
518+#: qml/Greeter/PromptList.qml:126
447msgid "Passphrase"
519msgid "Passphrase"
448msgstr ""
520msgstr ""
449
521
450−#: qml/Greeter/LoginList.qml:71
522+#: qml/Greeter/PromptList.qml:126
451msgid "Passcode"
523msgid "Passcode"
452msgstr ""
524msgstr ""
453
525
454−#: qml/Greeter/LoginList.qml:98
526+#: qml/Greeter/SessionsList.qml:124
455−msgid "Retry"
527+msgid "Select desktop environment"
456msgstr ""
528msgstr ""
457
529
458−#: qml/Greeter/LoginList.qml:99
530+#: qml/Launcher/Drawer.qml:94
459−msgid "Log In"
531+msgid "Search…"
460msgstr ""
532msgstr ""
461
533
462−#: qml/Greeter/NarrowView.qml:252
534+#: qml/Launcher/Drawer.qml:129
535+msgctxt "Apps sorted alphabetically"
463−msgid "Emergency"
536+msgid "A-Z"
464msgstr ""
537msgstr ""
465
538
466−#: qml/Greeter/SessionsList.qml:122
539+#: qml/Launcher/MoreAppsHeader.qml:55
467−msgid "Select desktop environment"
540+msgid "More apps in the store"
468msgstr ""
541msgstr ""
469
542
470#: qml/Notifications/NotificationMenuItemFactory.qml:124
543#: qml/Notifications/NotificationMenuItemFactory.qml:124
@@ -479,62 +552,62 @@ msgstr ""
479msgid "Conference"
552msgid "Conference"
480msgstr ""
553msgstr ""
481
554
482−#: qml/Panel/Indicators/MenuItemFactory.qml:847
555+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:869
483msgid "Nothing is playing"
556msgid "Nothing is playing"
484msgstr ""
557msgstr ""
485
558
486−#: qml/Panel/Indicators/MenuItemFactory.qml:975
559+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:997
487#, qt-format
560#, qt-format
488msgid "%1 hour"
561msgid "%1 hour"
489msgid_plural "%1 hours"
562msgid_plural "%1 hours"
490msgstr[0] ""
563msgstr[0] ""
491msgstr[1] ""
564msgstr[1] ""
492
565
493−#: qml/Panel/Indicators/MenuItemFactory.qml:979
566+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1001
494#, qt-format
567#, qt-format
495msgid "%1 minute"
568msgid "%1 minute"
496msgid_plural "%1 minutes"
569msgid_plural "%1 minutes"
497msgstr[0] ""
570msgstr[0] ""
498msgstr[1] ""
571msgstr[1] ""
499
572
500−#: qml/Panel/Indicators/MenuItemFactory.qml:984
573+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1006
501#, qt-format
574#, qt-format
502msgid "%1 second"
575msgid "%1 second"
503msgid_plural "%1 seconds"
576msgid_plural "%1 seconds"
504msgstr[0] ""
577msgstr[0] ""
505msgstr[1] ""
578msgstr[1] ""
506
579
507−#: qml/Panel/Indicators/MenuItemFactory.qml:987
580+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1009
508msgid "0 seconds"
581msgid "0 seconds"
509msgstr ""
582msgstr ""
510
583
511#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
584#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
512−#: qml/Panel/Indicators/MenuItemFactory.qml:989
585+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1011
513#, qt-format
586#, qt-format
514msgid "%1 remaining"
587msgid "%1 remaining"
515msgstr ""
588msgstr ""
516
589
517−#: qml/Panel/Indicators/MenuItemFactory.qml:995
590+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1017
518msgid "In queue…"
591msgid "In queue…"
519msgstr ""
592msgstr ""
520
593
521−#: qml/Panel/Indicators/MenuItemFactory.qml:999
594+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1021
522msgid "Downloading"
595msgid "Downloading"
523msgstr ""
596msgstr ""
524
597
525−#: qml/Panel/Indicators/MenuItemFactory.qml:1001
598+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1023
526msgid "Paused, tap to resume"
599msgid "Paused, tap to resume"
527msgstr ""
600msgstr ""
528
601
529−#: qml/Panel/Indicators/MenuItemFactory.qml:1003
602+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1025
530msgid "Canceled"
603msgid "Canceled"
531msgstr ""
604msgstr ""
532
605
533−#: qml/Panel/Indicators/MenuItemFactory.qml:1005
606+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1027
534msgid "Finished"
607msgid "Finished"
535msgstr ""
608msgstr ""
536
609
537−#: qml/Panel/Indicators/MenuItemFactory.qml:1007
610+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1029
538msgid "Failed, tap to retry"
611msgid "Failed, tap to retry"
539msgstr ""
612msgstr ""
540
613
@@ -554,12 +627,16 @@ msgctxt "Button: Call back on phone"
554msgid "Call back"
627msgid "Call back"
555msgstr ""
628msgstr ""
556
629
630+#: qml/Panel/PanelMenuPage.qml:92
631+msgid "Back"
632+msgstr ""
633+
557#: qml/Stage/SideStage.qml:76
634#: qml/Stage/SideStage.qml:76
558msgid "Drag using 3 fingers any application from one window to the other"
635msgid "Drag using 3 fingers any application from one window to the other"
559msgstr ""
636msgstr ""
560
637
561#: qml/Tutorial/TutorialLeftLong.qml:49
638#: qml/Tutorial/TutorialLeftLong.qml:49
562−msgid "Long swipe from the left edge to open the Today scope"
639+msgid "Long swipe from the left edge to open the Application Drawer"
563msgstr ""
640msgstr ""
564
641
565#: qml/Tutorial/TutorialLeft.qml:47
642#: qml/Tutorial/TutorialLeft.qml:47
@@ -588,7 +665,7 @@ msgid "Language"
588msgstr ""
665msgstr ""
589
666
590#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
667#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
591−#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
668+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/40-location.qml:271
592#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
669#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
593#: qml/Wizard/Pages/70-passwd-type.qml:145
670#: qml/Wizard/Pages/70-passwd-type.qml:145
594#: qml/Wizard/Pages/75-report-check.qml:84
671#: qml/Wizard/Pages/75-report-check.qml:84
@@ -609,25 +686,24 @@ msgstr ""
609msgid "Keyboard layout"
686msgid "Keyboard layout"
610msgstr ""
687msgstr ""
611
688
612−#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
689+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:206
613−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
690+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/sim.qml:101
614−#: qml/Wizard/Pages/sim.qml:101
615msgid "Skip"
691msgid "Skip"
616msgstr ""
692msgstr ""
617
693
618−#: qml/Wizard/Pages/30-wifi.qml:31
694+#: qml/Wizard/Pages/30-wifi.qml:30
619msgid "Connect to Wi‑Fi"
695msgid "Connect to Wi‑Fi"
620msgstr ""
696msgstr ""
621
697
622−#: qml/Wizard/Pages/30-wifi.qml:132
698+#: qml/Wizard/Pages/30-wifi.qml:131
623msgid "Connected"
699msgid "Connected"
624msgstr ""
700msgstr ""
625
701
626−#: qml/Wizard/Pages/30-wifi.qml:165
702+#: qml/Wizard/Pages/30-wifi.qml:164
627msgid "Available Wi-Fi networks"
703msgid "Available Wi-Fi networks"
628msgstr ""
704msgstr ""
629
705
630−#: qml/Wizard/Pages/30-wifi.qml:166
706+#: qml/Wizard/Pages/30-wifi.qml:165
631msgid "No available Wi-Fi networks"
707msgid "No available Wi-Fi networks"
632msgstr ""
708msgstr ""
633
709
@@ -714,35 +790,6 @@ msgstr ""
714msgid "Privacy policy"
790msgid "Privacy policy"
715msgstr ""
791msgstr ""
716
792
717−#: qml/Wizard/Pages/77-system-update.qml:28
718−msgid "Update Device"
719−msgstr ""
720−
721−#: qml/Wizard/Pages/77-system-update.qml:55
722−msgid ""
723−"There is a system update available and ready to install. Afterwards, the "
724−"device will automatically restart."
725−msgstr ""
726−
727−#: qml/Wizard/Pages/77-system-update.qml:76
728−msgctxt "string identifying name of the update"
729−msgid "Ubuntu system"
730−msgstr ""
731−
732−#: qml/Wizard/Pages/77-system-update.qml:83
733−#, qt-format
734−msgctxt "version of the system update"
735−msgid "Version %1"
736−msgstr ""
737−
738−#: qml/Wizard/Pages/77-system-update.qml:102
739−msgid "This could take a few minutes..."
740−msgstr ""
741−
742−#: qml/Wizard/Pages/77-system-update.qml:116
743−msgid "Install and restart now"
744−msgstr ""
745−
746#: qml/Wizard/Pages/80-finished.qml:89
793#: qml/Wizard/Pages/80-finished.qml:89
747msgid "Welcome to Ubuntu"
794msgid "Welcome to Ubuntu"
748msgstr ""
795msgstr ""
po/bn.po+183−136
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-11-16 10:44+0000\n"
10+"POT-Creation-Date: 2017-04-04 22:56+0000\n"
11"PO-Revision-Date: 2015-11-27 19:38+0000\n"
11"PO-Revision-Date: 2015-11-27 19:38+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Bengali <bn@li.org>\n"
13"Language-Team: Bengali <bn@li.org>\n"
@@ -15,75 +15,103 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-11-23 06:34+0000\n"
18+"X-Launchpad-Export-Date: 2017-04-07 06:29+0000\n"
19−"X-Generator: Launchpad (build 18269)\n"
19+"X-Generator: Launchpad (build 18343)\n"
20
20
21−#: plugins/LightDM/Greeter.cpp:123
21+#: plugins/LightDM/Greeter.cpp:188
22msgid "Password: "
22msgid "Password: "
23msgstr "পাসওয়ার্ড: "
23msgstr "পাসওয়ার্ড: "
24
24
25+#: plugins/LightDM/Greeter.cpp:203
26+msgid "Username"
27+msgstr ""
28+
29+#: plugins/LightDM/Greeter.cpp:242
30+msgid "Failed to authenticate"
31+msgstr ""
32+
33+#: plugins/LightDM/Greeter.cpp:244
34+msgid "Invalid password, please try again"
35+msgstr ""
36+
37+#: plugins/LightDM/Greeter.cpp:254
38+msgid "Log In"
39+msgstr ""
40+
41+#: plugins/LightDM/Greeter.cpp:254
42+msgid "Retry"
43+msgstr ""
44+
45+#: plugins/LightDM/UsersModel.cpp:157
46+msgid "Login"
47+msgstr ""
48+
49+#: plugins/LightDM/UsersModel.cpp:165
50+msgid "Guest Session"
51+msgstr ""
52+
25#: plugins/Unity/Launcher/launcheritem.cpp:49
53#: plugins/Unity/Launcher/launcheritem.cpp:49
26−#: plugins/Unity/Launcher/launcheritem.cpp:108
54+#: plugins/Unity/Launcher/launcheritem.cpp:123
27msgid "Pin shortcut"
55msgid "Pin shortcut"
28msgstr "পিন"
56msgstr "পিন"
29
57
30−#: plugins/Unity/Launcher/launcheritem.cpp:54
58+#: plugins/Unity/Launcher/launcheritem.cpp:55
31msgid "Quit"
59msgid "Quit"
32msgstr ""
60msgstr ""
33
61
34−#: plugins/Unity/Launcher/launcheritem.cpp:108
62+#: plugins/Unity/Launcher/launcheritem.cpp:123
35msgid "Unpin shortcut"
63msgid "Unpin shortcut"
36msgstr "আনপিন"
64msgstr "আনপিন"
37
65
38−#: qml/Components/Dialogs.qml:149
66+#: qml/Components/Dialogs.qml:176
39msgctxt "Title: Lock/Log out dialog"
67msgctxt "Title: Lock/Log out dialog"
40msgid "Log out"
68msgid "Log out"
41msgstr ""
69msgstr ""
42
70
43−#: qml/Components/Dialogs.qml:150
71+#: qml/Components/Dialogs.qml:177
44msgid "Are you sure you want to log out?"
72msgid "Are you sure you want to log out?"
45msgstr "আপনি কি লগ আউট করতে চান?"
73msgstr "আপনি কি লগ আউট করতে চান?"
46
74
47−#: qml/Components/Dialogs.qml:152
75+#: qml/Components/Dialogs.qml:180
48msgctxt "Button: Lock the system"
76msgctxt "Button: Lock the system"
49msgid "Lock"
77msgid "Lock"
50msgstr "লক করুন"
78msgstr "লক করুন"
51
79
52−#: qml/Components/Dialogs.qml:159
80+#: qml/Components/Dialogs.qml:191
53msgctxt "Button: Log out from the system"
81msgctxt "Button: Log out from the system"
54msgid "Log Out"
82msgid "Log Out"
55msgstr ""
83msgstr ""
56
84
57−#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
85+#: qml/Components/Dialogs.qml:199 qml/Components/Dialogs.qml:264
58−#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
86+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:208
59#: qml/Wizard/Pages/passcode-confirm.qml:32
87#: qml/Wizard/Pages/passcode-confirm.qml:32
60#: qml/Wizard/Pages/passcode-set.qml:32
88#: qml/Wizard/Pages/passcode-set.qml:32
61msgid "Cancel"
89msgid "Cancel"
62msgstr "বাতিল"
90msgstr "বাতিল"
63
91
64−#: qml/Components/Dialogs.qml:178
92+#: qml/Components/Dialogs.qml:211
65msgctxt "Title: Reboot dialog"
93msgctxt "Title: Reboot dialog"
66msgid "Reboot"
94msgid "Reboot"
67msgstr "পুনরায় চালু"
95msgstr "পুনরায় চালু"
68
96
69−#: qml/Components/Dialogs.qml:179
97+#: qml/Components/Dialogs.qml:212
70msgid "Are you sure you want to reboot?"
98msgid "Are you sure you want to reboot?"
71msgstr "আপনি কি পুনরায় চালু করতে চান?"
99msgstr "আপনি কি পুনরায় চালু করতে চান?"
72
100
73−#: qml/Components/Dialogs.qml:181
101+#: qml/Components/Dialogs.qml:215
74msgid "No"
102msgid "No"
75msgstr "না"
103msgstr "না"
76
104
77−#: qml/Components/Dialogs.qml:187
105+#: qml/Components/Dialogs.qml:223
78msgid "Yes"
106msgid "Yes"
79msgstr "হ্যাঁ"
107msgstr "হ্যাঁ"
80
108
81−#: qml/Components/Dialogs.qml:202
109+#: qml/Components/Dialogs.qml:239
82msgctxt "Title: Power off/Restart dialog"
110msgctxt "Title: Power off/Restart dialog"
83msgid "Power"
111msgid "Power"
84msgstr ""
112msgstr ""
85
113
86−#: qml/Components/Dialogs.qml:203
114+#: qml/Components/Dialogs.qml:240
87msgid ""
115msgid ""
88"Are you sure you would like\n"
116"Are you sure you would like\n"
89"to power off?"
117"to power off?"
@@ -91,12 +119,12 @@ msgstr ""
91"আপনি নিশ্চিত যে আপনি\n"
119"আপনি নিশ্চিত যে আপনি\n"
92"বন্ধ করতে চান?"
120"বন্ধ করতে চান?"
93
121
94−#: qml/Components/Dialogs.qml:205
122+#: qml/Components/Dialogs.qml:244
95msgctxt "Button: Power off the system"
123msgctxt "Button: Power off the system"
96msgid "Power off"
124msgid "Power off"
97msgstr "বন্ধ করুন"
125msgstr "বন্ধ করুন"
98
126
99−#: qml/Components/Dialogs.qml:214
127+#: qml/Components/Dialogs.qml:255
100msgctxt "Button: Restart the system"
128msgctxt "Button: Restart the system"
101msgid "Restart"
129msgid "Restart"
102msgstr "পুনরায় চালু"
130msgstr "পুনরায় চালু"
@@ -122,7 +150,7 @@ msgid "Alt + PrtScr"
122msgstr ""
150msgstr ""
123
151
124#: qml/Components/KeyboardShortcutsOverlay.qml:80
152#: qml/Components/KeyboardShortcutsOverlay.qml:80
125−msgid "Takes a screenshot of a window."
153+msgid "Takes a screenshot of the current window."
126msgstr ""
154msgstr ""
127
155
128#: qml/Components/KeyboardShortcutsOverlay.qml:88
156#: qml/Components/KeyboardShortcutsOverlay.qml:88
@@ -141,127 +169,143 @@ msgstr ""
141msgid "Switches to previous keyboard layout."
169msgid "Switches to previous keyboard layout."
142msgstr ""
170msgstr ""
143
171
144−#: qml/Components/KeyboardShortcutsOverlay.qml:118
172+#: qml/Components/KeyboardShortcutsOverlay.qml:114
173+msgid "Ctrl + Alt + T"
174+msgstr ""
175+
176+#: qml/Components/KeyboardShortcutsOverlay.qml:119
177+msgid "Starts the Terminal application."
178+msgstr ""
179+
180+#: qml/Components/KeyboardShortcutsOverlay.qml:131
145msgid "Launcher"
181msgid "Launcher"
146msgstr ""
182msgstr ""
147
183
148−#: qml/Components/KeyboardShortcutsOverlay.qml:125
184+#: qml/Components/KeyboardShortcutsOverlay.qml:138
149msgid "Super (Hold)"
185msgid "Super (Hold)"
150msgstr ""
186msgstr ""
151
187
152−#: qml/Components/KeyboardShortcutsOverlay.qml:130
188+#: qml/Components/KeyboardShortcutsOverlay.qml:143
153msgid "Opens the launcher, displays shortcuts."
189msgid "Opens the launcher, displays shortcuts."
154msgstr ""
190msgstr ""
155
191
156−#: qml/Components/KeyboardShortcutsOverlay.qml:138
192+#: qml/Components/KeyboardShortcutsOverlay.qml:151
157msgid "Alt + F1"
193msgid "Alt + F1"
158msgstr ""
194msgstr ""
159
195
160−#: qml/Components/KeyboardShortcutsOverlay.qml:143
196+#: qml/Components/KeyboardShortcutsOverlay.qml:156
161msgid "Opens launcher keyboard navigation mode."
197msgid "Opens launcher keyboard navigation mode."
162msgstr ""
198msgstr ""
163
199
164−#: qml/Components/KeyboardShortcutsOverlay.qml:151
200+#: qml/Components/KeyboardShortcutsOverlay.qml:164
165msgid "Super + Tab"
201msgid "Super + Tab"
166msgstr ""
202msgstr ""
167
203
168−#: qml/Components/KeyboardShortcutsOverlay.qml:156
204+#: qml/Components/KeyboardShortcutsOverlay.qml:169
169msgid "Switches applications via the launcher."
205msgid "Switches applications via the launcher."
170msgstr ""
206msgstr ""
171
207
172−#: qml/Components/KeyboardShortcutsOverlay.qml:164
208+#: qml/Components/KeyboardShortcutsOverlay.qml:177
173−msgid "Super + 0 to 9"
209+msgid "Super + 1 to 0"
174msgstr ""
210msgstr ""
175
211
176−#: qml/Components/KeyboardShortcutsOverlay.qml:169
212+#: qml/Components/KeyboardShortcutsOverlay.qml:182
177msgid "Same as clicking on a launcher icon."
213msgid "Same as clicking on a launcher icon."
178msgstr ""
214msgstr ""
179
215
180−#: qml/Components/KeyboardShortcutsOverlay.qml:181
216+#: qml/Components/KeyboardShortcutsOverlay.qml:190
217+msgid "Super + A"
218+msgstr ""
219+
220+#: qml/Components/KeyboardShortcutsOverlay.qml:195
221+msgid "Opens the Application Drawer."
222+msgstr ""
223+
224+#: qml/Components/KeyboardShortcutsOverlay.qml:207
181msgid "Scopes"
225msgid "Scopes"
182msgstr ""
226msgstr ""
183
227
184−#: qml/Components/KeyboardShortcutsOverlay.qml:188
228+#: qml/Components/KeyboardShortcutsOverlay.qml:214
185msgid "Super (Tap)"
229msgid "Super (Tap)"
186msgstr ""
230msgstr ""
187
231
188−#: qml/Components/KeyboardShortcutsOverlay.qml:193
232+#: qml/Components/KeyboardShortcutsOverlay.qml:219
189msgid "Opens the Scopes home."
233msgid "Opens the Scopes home."
190msgstr ""
234msgstr ""
191
235
192−#: qml/Components/KeyboardShortcutsOverlay.qml:209
236+#: qml/Components/KeyboardShortcutsOverlay.qml:235
193msgid "Switching"
237msgid "Switching"
194msgstr ""
238msgstr ""
195
239
196−#: qml/Components/KeyboardShortcutsOverlay.qml:216
240+#: qml/Components/KeyboardShortcutsOverlay.qml:242
197msgid "Alt + Tab"
241msgid "Alt + Tab"
198msgstr ""
242msgstr ""
199
243
200−#: qml/Components/KeyboardShortcutsOverlay.qml:221
244+#: qml/Components/KeyboardShortcutsOverlay.qml:247
201msgid "Switches between applications."
245msgid "Switches between applications."
202msgstr ""
246msgstr ""
203
247
204−#: qml/Components/KeyboardShortcutsOverlay.qml:229
248+#: qml/Components/KeyboardShortcutsOverlay.qml:255
205msgid "Super + W"
249msgid "Super + W"
206msgstr ""
250msgstr ""
207
251
208−#: qml/Components/KeyboardShortcutsOverlay.qml:234
252+#: qml/Components/KeyboardShortcutsOverlay.qml:260
209msgid "Opens the desktop spread."
253msgid "Opens the desktop spread."
210msgstr ""
254msgstr ""
211
255
212−#: qml/Components/KeyboardShortcutsOverlay.qml:242
256+#: qml/Components/KeyboardShortcutsOverlay.qml:268
213msgid "Cursor Left or Right"
257msgid "Cursor Left or Right"
214msgstr ""
258msgstr ""
215
259
216−#: qml/Components/KeyboardShortcutsOverlay.qml:247
260+#: qml/Components/KeyboardShortcutsOverlay.qml:273
217msgid "Moves the focus."
261msgid "Moves the focus."
218msgstr ""
262msgstr ""
219
263
220−#: qml/Components/KeyboardShortcutsOverlay.qml:259
264+#: qml/Components/KeyboardShortcutsOverlay.qml:285
221msgid "Windows"
265msgid "Windows"
222msgstr ""
266msgstr ""
223
267
224−#: qml/Components/KeyboardShortcutsOverlay.qml:266
268+#: qml/Components/KeyboardShortcutsOverlay.qml:292
225msgid "Ctrl + Super + D"
269msgid "Ctrl + Super + D"
226msgstr ""
270msgstr ""
227
271
228−#: qml/Components/KeyboardShortcutsOverlay.qml:271
272+#: qml/Components/KeyboardShortcutsOverlay.qml:297
229msgid "Minimizes all windows."
273msgid "Minimizes all windows."
230msgstr ""
274msgstr ""
231
275
232−#: qml/Components/KeyboardShortcutsOverlay.qml:279
276+#: qml/Components/KeyboardShortcutsOverlay.qml:305
233msgid "Ctrl + Super + Up"
277msgid "Ctrl + Super + Up"
234msgstr ""
278msgstr ""
235
279
236−#: qml/Components/KeyboardShortcutsOverlay.qml:284
280+#: qml/Components/KeyboardShortcutsOverlay.qml:310
237msgid "Maximizes the current window."
281msgid "Maximizes the current window."
238msgstr ""
282msgstr ""
239
283
240−#: qml/Components/KeyboardShortcutsOverlay.qml:292
284+#: qml/Components/KeyboardShortcutsOverlay.qml:318
241msgid "Ctrl + Super + Down"
285msgid "Ctrl + Super + Down"
242msgstr ""
286msgstr ""
243
287
244−#: qml/Components/KeyboardShortcutsOverlay.qml:297
288+#: qml/Components/KeyboardShortcutsOverlay.qml:323
245msgid "Minimizes or restores the current window."
289msgid "Minimizes or restores the current window."
246msgstr ""
290msgstr ""
247
291
248−#: qml/Components/KeyboardShortcutsOverlay.qml:305
292+#: qml/Components/KeyboardShortcutsOverlay.qml:331
249msgid "Ctrl + Super + Left or Right"
293msgid "Ctrl + Super + Left or Right"
250msgstr ""
294msgstr ""
251
295
252−#: qml/Components/KeyboardShortcutsOverlay.qml:310
296+#: qml/Components/KeyboardShortcutsOverlay.qml:336
253msgid "Semi-maximizes the current window."
297msgid "Semi-maximizes the current window."
254msgstr ""
298msgstr ""
255
299
256−#: qml/Components/KeyboardShortcutsOverlay.qml:318
300+#: qml/Components/KeyboardShortcutsOverlay.qml:344
257msgid "Alt + F4"
301msgid "Alt + F4"
258msgstr ""
302msgstr ""
259
303
260−#: qml/Components/KeyboardShortcutsOverlay.qml:323
304+#: qml/Components/KeyboardShortcutsOverlay.qml:349
261msgid "Closes the current window."
305msgid "Closes the current window."
262msgstr ""
306msgstr ""
263
307
264−#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
308+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:228
265msgid "Return to Call"
309msgid "Return to Call"
266msgstr "কল এ ফিরে যান"
310msgstr "কল এ ফিরে যান"
267
311
@@ -269,7 +313,7 @@ msgstr "কল এ ফিরে যান"
269msgid "Emergency Call"
313msgid "Emergency Call"
270msgstr "জরুরী কল"
314msgstr "জরুরী কল"
271
315
272−#: qml/Components/Lockscreen.qml:244
316+#: qml/Components/Lockscreen.qml:245
273msgid "OK"
317msgid "OK"
274msgstr "ঠিক আছে"
318msgstr "ঠিক আছে"
275
319
@@ -283,29 +327,29 @@ msgstr ""
283msgid "%1:%2"
327msgid "%1:%2"
284msgstr ""
328msgstr ""
285
329
286−#: qml/Components/ModeSwitchWarningDialog.qml:32
330+#: qml/Components/ModeSwitchWarningDialog.qml:33
287msgid "Apps may have unsaved data:"
331msgid "Apps may have unsaved data:"
288msgstr ""
332msgstr ""
289
333
290−#: qml/Components/ModeSwitchWarningDialog.qml:57
334+#: qml/Components/ModeSwitchWarningDialog.qml:60
291msgctxt ""
335msgctxt ""
292"Re-dock means connect the device again to an external screen/mouse/keyboard"
336"Re-dock means connect the device again to an external screen/mouse/keyboard"
293msgid "Re-dock, save your work and close these apps to continue."
337msgid "Re-dock, save your work and close these apps to continue."
294msgstr ""
338msgstr ""
295
339
296−#: qml/Components/ModeSwitchWarningDialog.qml:63
340+#: qml/Components/ModeSwitchWarningDialog.qml:67
297msgid "Or force close now (unsaved data will be lost)."
341msgid "Or force close now (unsaved data will be lost)."
298msgstr ""
342msgstr ""
299
343
300−#: qml/Components/ModeSwitchWarningDialog.qml:75
344+#: qml/Components/ModeSwitchWarningDialog.qml:80
301msgid "OK, I will reconnect"
345msgid "OK, I will reconnect"
302msgstr ""
346msgstr ""
303
347
304−#: qml/Components/ModeSwitchWarningDialog.qml:76
348+#: qml/Components/ModeSwitchWarningDialog.qml:81
305msgid "Reconnect now!"
349msgid "Reconnect now!"
306msgstr ""
350msgstr ""
307
351
308−#: qml/Components/ModeSwitchWarningDialog.qml:88
352+#: qml/Components/ModeSwitchWarningDialog.qml:94
309msgid "Close all"
353msgid "Close all"
310msgstr ""
354msgstr ""
311
355
@@ -313,6 +357,28 @@ msgstr ""
313msgid "Preview Share Item"
357msgid "Preview Share Item"
314msgstr ""
358msgstr ""
315
359
360+#: qml/Components/VirtualTouchPad.qml:317
361+msgid ""
362+"Your device is now connected to an external display. Use this screen as a "
363+"touch pad to interact with the pointer."
364+msgstr ""
365+
366+#: qml/Components/VirtualTouchPad.qml:327
367+msgid "Tap left button to click."
368+msgstr ""
369+
370+#: qml/Components/VirtualTouchPad.qml:339
371+msgid "Tap right button to right click."
372+msgstr ""
373+
374+#: qml/Components/VirtualTouchPad.qml:351
375+msgid "Swipe with two fingers to scroll."
376+msgstr ""
377+
378+#: qml/Components/VirtualTouchPad.qml:396
379+msgid "Find more settings in the system settings."
380+msgstr ""
381+
316#: qml/Dash/DashPageHeader.qml:361
382#: qml/Dash/DashPageHeader.qml:361
317msgctxt "Button: Open the Ubuntu Store"
383msgctxt "Button: Open the Ubuntu Store"
318msgid "Store"
384msgid "Store"
@@ -344,24 +410,24 @@ msgstr ""
344msgid "Reset"
410msgid "Reset"
345msgstr ""
411msgstr ""
346
412
347−#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
413+#: qml/Dash/GenericScopeView.qml:547 qml/Dash/GenericScopeView.qml:718
348msgid "Show less"
414msgid "Show less"
349msgstr ""
415msgstr ""
350
416
351−#: qml/Dash/GenericScopeView.qml:545
417+#: qml/Dash/GenericScopeView.qml:547
352msgid "Show all"
418msgid "Show all"
353msgstr ""
419msgstr ""
354
420
355−#: qml/Dash/GenericScopeView.qml:576
421+#: qml/Dash/GenericScopeView.qml:578
356msgctxt "Label: Hint for dash search line edit"
422msgctxt "Label: Hint for dash search line edit"
357msgid "Search"
423msgid "Search"
358msgstr "খুঁজুন"
424msgstr "খুঁজুন"
359
425
360−#: qml/Dash/PageHeaderExtraPanel.qml:57
426+#: qml/Dash/PageHeaderExtraPanel.qml:67
361msgid "Recent Searches"
427msgid "Recent Searches"
362msgstr ""
428msgstr ""
363
429
364−#: qml/Dash/PageHeaderExtraPanel.qml:68
430+#: qml/Dash/PageHeaderExtraPanel.qml:78
365msgid "Clear All"
431msgid "Clear All"
366msgstr ""
432msgstr ""
367
433
@@ -398,24 +464,18 @@ msgstr "রিফ্রেশ করার জন্য ছেড়ে দিন"
398msgid "Enable location data"
464msgid "Enable location data"
399msgstr "অবস্থান নির্ণয় চালু করুন"
465msgstr "অবস্থান নির্ণয় চালু করুন"
400
466
401−#: qml/Dash/ScopesList.qml:57
467+#: qml/Dash/ScopesList.qml:146
402msgid "Manage"
468msgid "Manage"
403msgstr "ব্যবস্থাপনা"
469msgstr "ব্যবস্থাপনা"
404
470
405−#: qml/Dash/ScopesList.qml:104
471+#: qml/Dash/ScopesList.qml:187
406msgid "Home"
472msgid "Home"
407msgstr ""
473msgstr ""
408
474
409−#: qml/Dash/ScopesList.qml:105
475+#: qml/Dash/ScopesList.qml:188
410msgid "Also installed"
476msgid "Also installed"
411msgstr "আরও ইন্সটল করা রয়েছে..."
477msgstr "আরও ইন্সটল করা রয়েছে..."
412
478
413−#: qml/DisabledScreenNotice.qml:109
414−msgid ""
415−"Your device is now connected to an external display. Use this screen as a "
416−"touch pad to interact with the pointer."
417−msgstr ""
418−
419#: qml/Greeter/CoverPage.qml:127
479#: qml/Greeter/CoverPage.qml:127
420msgid "Unlock"
480msgid "Unlock"
421msgstr "লক খুলুন"
481msgstr "লক খুলুন"
@@ -439,32 +499,45 @@ msgid_plural "Please wait %1 minutes and then try again…"
439msgstr[0] "অনুগ্রহ করে %1 মিনিট অপেক্ষা করুন এবং পরবর্তীতে চেষ্টা করুন..."
499msgstr[0] "অনুগ্রহ করে %1 মিনিট অপেক্ষা করুন এবং পরবর্তীতে চেষ্টা করুন..."
440msgstr[1] "অনুগ্রহ করে %1 মিনিট অপেক্ষা করুন এবং পরবর্তীতে চেষ্টা করুন..."
500msgstr[1] "অনুগ্রহ করে %1 মিনিট অপেক্ষা করুন এবং পরবর্তীতে চেষ্টা করুন..."
441
501
442−#: qml/Greeter/Greeter.qml:596
502+#: qml/Greeter/Greeter.qml:550
443msgid "Try again"
503msgid "Try again"
444msgstr ""
504msgstr ""
445
505
446−#: qml/Greeter/LoginList.qml:70
506+#: qml/Greeter/Greeter.qml:551
507+msgid "Enter passphrase to unlock"
508+msgstr ""
509+
510+#: qml/Greeter/Greeter.qml:552
511+msgid "Enter passcode to unlock"
512+msgstr ""
513+
514+#: qml/Greeter/NarrowView.qml:228
515+msgid "Emergency"
516+msgstr ""
517+
518+#: qml/Greeter/PromptList.qml:126
447msgid "Passphrase"
519msgid "Passphrase"
448msgstr ""
520msgstr ""
449
521
450−#: qml/Greeter/LoginList.qml:71
522+#: qml/Greeter/PromptList.qml:126
451msgid "Passcode"
523msgid "Passcode"
452msgstr ""
524msgstr ""
453
525
454−#: qml/Greeter/LoginList.qml:98
526+#: qml/Greeter/SessionsList.qml:124
455−msgid "Retry"
527+msgid "Select desktop environment"
456msgstr ""
528msgstr ""
457
529
458−#: qml/Greeter/LoginList.qml:99
530+#: qml/Launcher/Drawer.qml:94
459−msgid "Log In"
531+msgid "Search…"
460msgstr ""
532msgstr ""
461
533
462−#: qml/Greeter/NarrowView.qml:252
534+#: qml/Launcher/Drawer.qml:129
535+msgctxt "Apps sorted alphabetically"
463−msgid "Emergency"
536+msgid "A-Z"
464msgstr ""
537msgstr ""
465
538
466−#: qml/Greeter/SessionsList.qml:122
539+#: qml/Launcher/MoreAppsHeader.qml:55
467−msgid "Select desktop environment"
540+msgid "More apps in the store"
468msgstr ""
541msgstr ""
469
542
470#: qml/Notifications/NotificationMenuItemFactory.qml:124
543#: qml/Notifications/NotificationMenuItemFactory.qml:124
@@ -479,62 +552,62 @@ msgstr "কলে ফিরে যেতে চাপ দিন..."
479msgid "Conference"
552msgid "Conference"
480msgstr "কনফারেন্স"
553msgstr "কনফারেন্স"
481
554
482−#: qml/Panel/Indicators/MenuItemFactory.qml:847
555+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:869
483msgid "Nothing is playing"
556msgid "Nothing is playing"
484msgstr "কোন কিছু বাজছে না।"
557msgstr "কোন কিছু বাজছে না।"
485
558
486−#: qml/Panel/Indicators/MenuItemFactory.qml:975
559+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:997
487#, qt-format
560#, qt-format
488msgid "%1 hour"
561msgid "%1 hour"
489msgid_plural "%1 hours"
562msgid_plural "%1 hours"
490msgstr[0] "%1 ঘণ্টা"
563msgstr[0] "%1 ঘণ্টা"
491msgstr[1] "%1 ঘণ্টা"
564msgstr[1] "%1 ঘণ্টা"
492
565
493−#: qml/Panel/Indicators/MenuItemFactory.qml:979
566+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1001
494#, qt-format
567#, qt-format
495msgid "%1 minute"
568msgid "%1 minute"
496msgid_plural "%1 minutes"
569msgid_plural "%1 minutes"
497msgstr[0] "%1 মিনিট"
570msgstr[0] "%1 মিনিট"
498msgstr[1] "%1 মিনিট"
571msgstr[1] "%1 মিনিট"
499
572
500−#: qml/Panel/Indicators/MenuItemFactory.qml:984
573+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1006
501#, qt-format
574#, qt-format
502msgid "%1 second"
575msgid "%1 second"
503msgid_plural "%1 seconds"
576msgid_plural "%1 seconds"
504msgstr[0] "%1 সেকেন্ড"
577msgstr[0] "%1 সেকেন্ড"
505msgstr[1] "%1 সেকেন্ড"
578msgstr[1] "%1 সেকেন্ড"
506
579
507−#: qml/Panel/Indicators/MenuItemFactory.qml:987
580+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1009
508msgid "0 seconds"
581msgid "0 seconds"
509msgstr "0 সেকেন্ড"
582msgstr "0 সেকেন্ড"
510
583
511#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
584#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
512−#: qml/Panel/Indicators/MenuItemFactory.qml:989
585+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1011
513#, qt-format
586#, qt-format
514msgid "%1 remaining"
587msgid "%1 remaining"
515msgstr "%1 বাকি"
588msgstr "%1 বাকি"
516
589
517−#: qml/Panel/Indicators/MenuItemFactory.qml:995
590+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1017
518msgid "In queue…"
591msgid "In queue…"
519msgstr "অপেক্ষায় রয়েছে..."
592msgstr "অপেক্ষায় রয়েছে..."
520
593
521−#: qml/Panel/Indicators/MenuItemFactory.qml:999
594+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1021
522msgid "Downloading"
595msgid "Downloading"
523msgstr "ডাউনলোড হচ্ছে"
596msgstr "ডাউনলোড হচ্ছে"
524
597
525−#: qml/Panel/Indicators/MenuItemFactory.qml:1001
598+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1023
526msgid "Paused, tap to resume"
599msgid "Paused, tap to resume"
527msgstr "থামানো, শুরু করতে চাপ দিন"
600msgstr "থামানো, শুরু করতে চাপ দিন"
528
601
529−#: qml/Panel/Indicators/MenuItemFactory.qml:1003
602+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1025
530msgid "Canceled"
603msgid "Canceled"
531msgstr "বাতিল হয়েছে"
604msgstr "বাতিল হয়েছে"
532
605
533−#: qml/Panel/Indicators/MenuItemFactory.qml:1005
606+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1027
534msgid "Finished"
607msgid "Finished"
535msgstr "শেষ"
608msgstr "শেষ"
536
609
537−#: qml/Panel/Indicators/MenuItemFactory.qml:1007
610+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1029
538msgid "Failed, tap to retry"
611msgid "Failed, tap to retry"
539msgstr "ব্যার্থ হয়েছে, পুনরায় চেষ্টা করতে চাপ দিন"
612msgstr "ব্যার্থ হয়েছে, পুনরায় চেষ্টা করতে চাপ দিন"
540
613
@@ -554,12 +627,16 @@ msgctxt "Button: Call back on phone"
554msgid "Call back"
627msgid "Call back"
555msgstr "কল ব্যাক"
628msgstr "কল ব্যাক"
556
629
630+#: qml/Panel/PanelMenuPage.qml:92
631+msgid "Back"
632+msgstr ""
633+
557#: qml/Stage/SideStage.qml:76
634#: qml/Stage/SideStage.qml:76
558msgid "Drag using 3 fingers any application from one window to the other"
635msgid "Drag using 3 fingers any application from one window to the other"
559msgstr ""
636msgstr ""
560
637
561#: qml/Tutorial/TutorialLeftLong.qml:49
638#: qml/Tutorial/TutorialLeftLong.qml:49
562−msgid "Long swipe from the left edge to open the Today scope"
639+msgid "Long swipe from the left edge to open the Application Drawer"
563msgstr ""
640msgstr ""
564
641
565#: qml/Tutorial/TutorialLeft.qml:47
642#: qml/Tutorial/TutorialLeft.qml:47
@@ -588,7 +665,7 @@ msgid "Language"
588msgstr ""
665msgstr ""
589
666
590#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
667#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
591−#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
668+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/40-location.qml:271
592#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
669#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
593#: qml/Wizard/Pages/70-passwd-type.qml:145
670#: qml/Wizard/Pages/70-passwd-type.qml:145
594#: qml/Wizard/Pages/75-report-check.qml:84
671#: qml/Wizard/Pages/75-report-check.qml:84
@@ -609,25 +686,24 @@ msgstr ""
609msgid "Keyboard layout"
686msgid "Keyboard layout"
610msgstr ""
687msgstr ""
611
688
612−#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
689+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:206
613−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
690+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/sim.qml:101
614−#: qml/Wizard/Pages/sim.qml:101
615msgid "Skip"
691msgid "Skip"
616msgstr "এড়িয়ে যান"
692msgstr "এড়িয়ে যান"
617
693
618−#: qml/Wizard/Pages/30-wifi.qml:31
694+#: qml/Wizard/Pages/30-wifi.qml:30
619msgid "Connect to Wi‑Fi"
695msgid "Connect to Wi‑Fi"
620msgstr ""
696msgstr ""
621
697
622−#: qml/Wizard/Pages/30-wifi.qml:132
698+#: qml/Wizard/Pages/30-wifi.qml:131
623msgid "Connected"
699msgid "Connected"
624msgstr ""
700msgstr ""
625
701
626−#: qml/Wizard/Pages/30-wifi.qml:165
702+#: qml/Wizard/Pages/30-wifi.qml:164
627msgid "Available Wi-Fi networks"
703msgid "Available Wi-Fi networks"
628msgstr ""
704msgstr ""
629
705
630−#: qml/Wizard/Pages/30-wifi.qml:166
706+#: qml/Wizard/Pages/30-wifi.qml:165
631msgid "No available Wi-Fi networks"
707msgid "No available Wi-Fi networks"
632msgstr ""
708msgstr ""
633
709
@@ -714,35 +790,6 @@ msgstr ""
714msgid "Privacy policy"
790msgid "Privacy policy"
715msgstr ""
791msgstr ""
716
792
717−#: qml/Wizard/Pages/77-system-update.qml:28
718−msgid "Update Device"
719−msgstr ""
720−
721−#: qml/Wizard/Pages/77-system-update.qml:55
722−msgid ""
723−"There is a system update available and ready to install. Afterwards, the "
724−"device will automatically restart."
725−msgstr ""
726−
727−#: qml/Wizard/Pages/77-system-update.qml:76
728−msgctxt "string identifying name of the update"
729−msgid "Ubuntu system"
730−msgstr ""
731−
732−#: qml/Wizard/Pages/77-system-update.qml:83
733−#, qt-format
734−msgctxt "version of the system update"
735−msgid "Version %1"
736−msgstr ""
737−
738−#: qml/Wizard/Pages/77-system-update.qml:102
739−msgid "This could take a few minutes..."
740−msgstr ""
741−
742−#: qml/Wizard/Pages/77-system-update.qml:116
743−msgid "Install and restart now"
744−msgstr ""
745−
746#: qml/Wizard/Pages/80-finished.qml:89
793#: qml/Wizard/Pages/80-finished.qml:89
747msgid "Welcome to Ubuntu"
794msgid "Welcome to Ubuntu"
748msgstr ""
795msgstr ""
po/br.po+236−152
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-11-16 10:44+0000\n"
10+"POT-Creation-Date: 2017-04-04 22:56+0000\n"
11"PO-Revision-Date: 2016-08-29 11:37+0000\n"
11"PO-Revision-Date: 2016-08-29 11:37+0000\n"
12"Last-Translator: Fohanno Thierry <thierry.fohanno@ofis-bzh.org>\n"
12"Last-Translator: Fohanno Thierry <thierry.fohanno@ofis-bzh.org>\n"
13"Language-Team: Breton <br@li.org>\n"
13"Language-Team: Breton <br@li.org>\n"
@@ -15,75 +15,103 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
17"Plural-Forms: nplurals=2; plural=n > 1;\n"
18−"X-Launchpad-Export-Date: 2016-11-23 06:34+0000\n"
18+"X-Launchpad-Export-Date: 2017-04-07 06:29+0000\n"
19−"X-Generator: Launchpad (build 18269)\n"
19+"X-Generator: Launchpad (build 18343)\n"
20
20
21−#: plugins/LightDM/Greeter.cpp:123
21+#: plugins/LightDM/Greeter.cpp:188
22msgid "Password: "
22msgid "Password: "
23msgstr "Ger-tremen : "
23msgstr "Ger-tremen : "
24
24
25+#: plugins/LightDM/Greeter.cpp:203
26+msgid "Username"
27+msgstr ""
28+
29+#: plugins/LightDM/Greeter.cpp:242
30+msgid "Failed to authenticate"
31+msgstr ""
32+
33+#: plugins/LightDM/Greeter.cpp:244
34+msgid "Invalid password, please try again"
35+msgstr ""
36+
37+#: plugins/LightDM/Greeter.cpp:254
38+msgid "Log In"
39+msgstr "Kevreañ"
40+
41+#: plugins/LightDM/Greeter.cpp:254
42+msgid "Retry"
43+msgstr "Esaeañ en-dro"
44+
45+#: plugins/LightDM/UsersModel.cpp:157
46+msgid "Login"
47+msgstr ""
48+
49+#: plugins/LightDM/UsersModel.cpp:165
50+msgid "Guest Session"
51+msgstr ""
52+
25#: plugins/Unity/Launcher/launcheritem.cpp:49
53#: plugins/Unity/Launcher/launcheritem.cpp:49
26−#: plugins/Unity/Launcher/launcheritem.cpp:108
54+#: plugins/Unity/Launcher/launcheritem.cpp:123
27msgid "Pin shortcut"
55msgid "Pin shortcut"
28msgstr "Spilhennañ ar verradenn"
56msgstr "Spilhennañ ar verradenn"
29
57
30−#: plugins/Unity/Launcher/launcheritem.cpp:54
58+#: plugins/Unity/Launcher/launcheritem.cpp:55
31msgid "Quit"
59msgid "Quit"
32msgstr "Mont kuit"
60msgstr "Mont kuit"
33
61
34−#: plugins/Unity/Launcher/launcheritem.cpp:108
62+#: plugins/Unity/Launcher/launcheritem.cpp:123
35msgid "Unpin shortcut"
63msgid "Unpin shortcut"
36msgstr "Dispilhennañ ar verradenn"
64msgstr "Dispilhennañ ar verradenn"
37
65
38−#: qml/Components/Dialogs.qml:149
66+#: qml/Components/Dialogs.qml:176
39msgctxt "Title: Lock/Log out dialog"
67msgctxt "Title: Lock/Log out dialog"
40msgid "Log out"
68msgid "Log out"
41msgstr "Digevreañ"
69msgstr "Digevreañ"
42
70
43−#: qml/Components/Dialogs.qml:150
71+#: qml/Components/Dialogs.qml:177
44msgid "Are you sure you want to log out?"
72msgid "Are you sure you want to log out?"
45msgstr "Ha sur oc'h e fell deoc'h digevreañ ?"
73msgstr "Ha sur oc'h e fell deoc'h digevreañ ?"
46
74
47−#: qml/Components/Dialogs.qml:152
75+#: qml/Components/Dialogs.qml:180
48msgctxt "Button: Lock the system"
76msgctxt "Button: Lock the system"
49msgid "Lock"
77msgid "Lock"
50msgstr "Prennañ"
78msgstr "Prennañ"
51
79
52−#: qml/Components/Dialogs.qml:159
80+#: qml/Components/Dialogs.qml:191
53msgctxt "Button: Log out from the system"
81msgctxt "Button: Log out from the system"
54msgid "Log Out"
82msgid "Log Out"
55msgstr "Digevreañ"
83msgstr "Digevreañ"
56
84
57−#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
85+#: qml/Components/Dialogs.qml:199 qml/Components/Dialogs.qml:264
58−#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
86+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:208
59#: qml/Wizard/Pages/passcode-confirm.qml:32
87#: qml/Wizard/Pages/passcode-confirm.qml:32
60#: qml/Wizard/Pages/passcode-set.qml:32
88#: qml/Wizard/Pages/passcode-set.qml:32
61msgid "Cancel"
89msgid "Cancel"
62msgstr "Nullañ"
90msgstr "Nullañ"
63
91
64−#: qml/Components/Dialogs.qml:178
92+#: qml/Components/Dialogs.qml:211
65msgctxt "Title: Reboot dialog"
93msgctxt "Title: Reboot dialog"
66msgid "Reboot"
94msgid "Reboot"
67msgstr "Adloc'hañ"
95msgstr "Adloc'hañ"
68
96
69−#: qml/Components/Dialogs.qml:179
97+#: qml/Components/Dialogs.qml:212
70msgid "Are you sure you want to reboot?"
98msgid "Are you sure you want to reboot?"
71msgstr "Ha sur oc'h e fell deoc'h adloc'hañ ?"
99msgstr "Ha sur oc'h e fell deoc'h adloc'hañ ?"
72
100
73−#: qml/Components/Dialogs.qml:181
101+#: qml/Components/Dialogs.qml:215
74msgid "No"
102msgid "No"
75msgstr "N'on ket"
103msgstr "N'on ket"
76
104
77−#: qml/Components/Dialogs.qml:187
105+#: qml/Components/Dialogs.qml:223
78msgid "Yes"
106msgid "Yes"
79msgstr "Ya"
107msgstr "Ya"
80
108
81−#: qml/Components/Dialogs.qml:202
109+#: qml/Components/Dialogs.qml:239
82msgctxt "Title: Power off/Restart dialog"
110msgctxt "Title: Power off/Restart dialog"
83msgid "Power"
111msgid "Power"
84msgstr "Enaouiñ"
112msgstr "Enaouiñ"
85
113
86−#: qml/Components/Dialogs.qml:203
114+#: qml/Components/Dialogs.qml:240
87msgid ""
115msgid ""
88"Are you sure you would like\n"
116"Are you sure you would like\n"
89"to power off?"
117"to power off?"
@@ -91,12 +119,12 @@ msgstr ""
91"Ha sur oc'h e fell deoc'h\n"
119"Ha sur oc'h e fell deoc'h\n"
92"troc'hañ an tredan ?"
120"troc'hañ an tredan ?"
93
121
94−#: qml/Components/Dialogs.qml:205
122+#: qml/Components/Dialogs.qml:244
95msgctxt "Button: Power off the system"
123msgctxt "Button: Power off the system"
96msgid "Power off"
124msgid "Power off"
97msgstr "Lazhañ"
125msgstr "Lazhañ"
98
126
99−#: qml/Components/Dialogs.qml:214
127+#: qml/Components/Dialogs.qml:255
100msgctxt "Button: Restart the system"
128msgctxt "Button: Restart the system"
101msgid "Restart"
129msgid "Restart"
102msgstr "Adloc'hañ"
130msgstr "Adloc'hañ"
@@ -122,8 +150,8 @@ msgid "Alt + PrtScr"
122msgstr ""
150msgstr ""
123
151
124#: qml/Components/KeyboardShortcutsOverlay.qml:80
152#: qml/Components/KeyboardShortcutsOverlay.qml:80
125−msgid "Takes a screenshot of a window."
153+msgid "Takes a screenshot of the current window."
126−msgstr "Tapout ur skeudenn eus ur prenestr"
154+msgstr ""
127
155
128#: qml/Components/KeyboardShortcutsOverlay.qml:88
156#: qml/Components/KeyboardShortcutsOverlay.qml:88
129msgid "Super + Space"
157msgid "Super + Space"
@@ -131,7 +159,7 @@ msgstr ""
131
159
132#: qml/Components/KeyboardShortcutsOverlay.qml:93
160#: qml/Components/KeyboardShortcutsOverlay.qml:93
133msgid "Switches to next keyboard layout."
161msgid "Switches to next keyboard layout."
134−msgstr ""
162+msgstr "Mont d'ar fichadur klavir war-lerc'h"
135
163
136#: qml/Components/KeyboardShortcutsOverlay.qml:101
164#: qml/Components/KeyboardShortcutsOverlay.qml:101
137msgid "Super + Shift + Space"
165msgid "Super + Shift + Space"
@@ -139,129 +167,145 @@ msgstr ""
139
167
140#: qml/Components/KeyboardShortcutsOverlay.qml:106
168#: qml/Components/KeyboardShortcutsOverlay.qml:106
141msgid "Switches to previous keyboard layout."
169msgid "Switches to previous keyboard layout."
170+msgstr "Mont d'ar fichadur klavier kent"
171+
172+#: qml/Components/KeyboardShortcutsOverlay.qml:114
173+msgid "Ctrl + Alt + T"
174+msgstr ""
175+
176+#: qml/Components/KeyboardShortcutsOverlay.qml:119
177+msgid "Starts the Terminal application."
142msgstr ""
178msgstr ""
143
179
144−#: qml/Components/KeyboardShortcutsOverlay.qml:118
180+#: qml/Components/KeyboardShortcutsOverlay.qml:131
145msgid "Launcher"
181msgid "Launcher"
146msgstr "Lañser"
182msgstr "Lañser"
147
183
148−#: qml/Components/KeyboardShortcutsOverlay.qml:125
184+#: qml/Components/KeyboardShortcutsOverlay.qml:138
149msgid "Super (Hold)"
185msgid "Super (Hold)"
150msgstr ""
186msgstr ""
151
187
152−#: qml/Components/KeyboardShortcutsOverlay.qml:130
188+#: qml/Components/KeyboardShortcutsOverlay.qml:143
153msgid "Opens the launcher, displays shortcuts."
189msgid "Opens the launcher, displays shortcuts."
154msgstr "Digeriñ al lañser, diskouez ar berradurioù"
190msgstr "Digeriñ al lañser, diskouez ar berradurioù"
155
191
156−#: qml/Components/KeyboardShortcutsOverlay.qml:138
192+#: qml/Components/KeyboardShortcutsOverlay.qml:151
157msgid "Alt + F1"
193msgid "Alt + F1"
158msgstr "Erl + F1"
194msgstr "Erl + F1"
159
195
160−#: qml/Components/KeyboardShortcutsOverlay.qml:143
196+#: qml/Components/KeyboardShortcutsOverlay.qml:156
161msgid "Opens launcher keyboard navigation mode."
197msgid "Opens launcher keyboard navigation mode."
162−msgstr ""
198+msgstr "Digeriñ ar mod merdeiñ gant lañser ar c'hlavier"
163
199
164−#: qml/Components/KeyboardShortcutsOverlay.qml:151
200+#: qml/Components/KeyboardShortcutsOverlay.qml:164
165msgid "Super + Tab"
201msgid "Super + Tab"
166msgstr ""
202msgstr ""
167
203
168−#: qml/Components/KeyboardShortcutsOverlay.qml:156
204+#: qml/Components/KeyboardShortcutsOverlay.qml:169
169msgid "Switches applications via the launcher."
205msgid "Switches applications via the launcher."
170−msgstr ""
206+msgstr "Mont d'un arload all dre al lañser."
171
207
172−#: qml/Components/KeyboardShortcutsOverlay.qml:164
208+#: qml/Components/KeyboardShortcutsOverlay.qml:177
173−msgid "Super + 0 to 9"
209+msgid "Super + 1 to 0"
174msgstr ""
210msgstr ""
175
211
176−#: qml/Components/KeyboardShortcutsOverlay.qml:169
212+#: qml/Components/KeyboardShortcutsOverlay.qml:182
177msgid "Same as clicking on a launcher icon."
213msgid "Same as clicking on a launcher icon."
178msgstr "Ar memes tra ha klikañ war un arlun lañser"
214msgstr "Ar memes tra ha klikañ war un arlun lañser"
179
215
180−#: qml/Components/KeyboardShortcutsOverlay.qml:181
216+#: qml/Components/KeyboardShortcutsOverlay.qml:190
217+msgid "Super + A"
218+msgstr ""
219+
220+#: qml/Components/KeyboardShortcutsOverlay.qml:195
221+msgid "Opens the Application Drawer."
222+msgstr ""
223+
224+#: qml/Components/KeyboardShortcutsOverlay.qml:207
181msgid "Scopes"
225msgid "Scopes"
182msgstr "Kefluskerioù enklask"
226msgstr "Kefluskerioù enklask"
183
227
184−#: qml/Components/KeyboardShortcutsOverlay.qml:188
228+#: qml/Components/KeyboardShortcutsOverlay.qml:214
185msgid "Super (Tap)"
229msgid "Super (Tap)"
186msgstr ""
230msgstr ""
187
231
188−#: qml/Components/KeyboardShortcutsOverlay.qml:193
232+#: qml/Components/KeyboardShortcutsOverlay.qml:219
189msgid "Opens the Scopes home."
233msgid "Opens the Scopes home."
190msgstr "Digeriñ pajenn degemer ar c'hefluskerioù enklask."
234msgstr "Digeriñ pajenn degemer ar c'hefluskerioù enklask."
191
235
192−#: qml/Components/KeyboardShortcutsOverlay.qml:209
236+#: qml/Components/KeyboardShortcutsOverlay.qml:235
193msgid "Switching"
237msgid "Switching"
194msgstr "Cheñch"
238msgstr "Cheñch"
195
239
196−#: qml/Components/KeyboardShortcutsOverlay.qml:216
240+#: qml/Components/KeyboardShortcutsOverlay.qml:242
197msgid "Alt + Tab"
241msgid "Alt + Tab"
198msgstr "Erl + Taolenn"
242msgstr "Erl + Taolenn"
199
243
200−#: qml/Components/KeyboardShortcutsOverlay.qml:221
244+#: qml/Components/KeyboardShortcutsOverlay.qml:247
201msgid "Switches between applications."
245msgid "Switches between applications."
202−msgstr ""
246+msgstr "Mont da arloadoù all."
203
247
204−#: qml/Components/KeyboardShortcutsOverlay.qml:229
248+#: qml/Components/KeyboardShortcutsOverlay.qml:255
205msgid "Super + W"
249msgid "Super + W"
206msgstr ""
250msgstr ""
207
251
208−#: qml/Components/KeyboardShortcutsOverlay.qml:234
252+#: qml/Components/KeyboardShortcutsOverlay.qml:260
209msgid "Opens the desktop spread."
253msgid "Opens the desktop spread."
210−msgstr ""
254+msgstr "Digeriñ ar burev astennet"
211
255
212−#: qml/Components/KeyboardShortcutsOverlay.qml:242
256+#: qml/Components/KeyboardShortcutsOverlay.qml:268
213msgid "Cursor Left or Right"
257msgid "Cursor Left or Right"
214−msgstr ""
258+msgstr "Reti kleiz pe dehoù"
215
259
216−#: qml/Components/KeyboardShortcutsOverlay.qml:247
260+#: qml/Components/KeyboardShortcutsOverlay.qml:273
217msgid "Moves the focus."
261msgid "Moves the focus."
218−msgstr ""
262+msgstr "Cheñch an dibab."
219
263
220−#: qml/Components/KeyboardShortcutsOverlay.qml:259
264+#: qml/Components/KeyboardShortcutsOverlay.qml:285
221msgid "Windows"
265msgid "Windows"
222msgstr "Windows"
266msgstr "Windows"
223
267
224−#: qml/Components/KeyboardShortcutsOverlay.qml:266
268+#: qml/Components/KeyboardShortcutsOverlay.qml:292
225msgid "Ctrl + Super + D"
269msgid "Ctrl + Super + D"
226msgstr ""
270msgstr ""
227
271
228−#: qml/Components/KeyboardShortcutsOverlay.qml:271
272+#: qml/Components/KeyboardShortcutsOverlay.qml:297
229msgid "Minimizes all windows."
273msgid "Minimizes all windows."
230msgstr "Bihanaat an holl brenestroù."
274msgstr "Bihanaat an holl brenestroù."
231
275
232−#: qml/Components/KeyboardShortcutsOverlay.qml:279
276+#: qml/Components/KeyboardShortcutsOverlay.qml:305
233msgid "Ctrl + Super + Up"
277msgid "Ctrl + Super + Up"
234msgstr ""
278msgstr ""
235
279
236−#: qml/Components/KeyboardShortcutsOverlay.qml:284
280+#: qml/Components/KeyboardShortcutsOverlay.qml:310
237msgid "Maximizes the current window."
281msgid "Maximizes the current window."
238msgstr ""
282msgstr ""
239
283
240−#: qml/Components/KeyboardShortcutsOverlay.qml:292
284+#: qml/Components/KeyboardShortcutsOverlay.qml:318
241msgid "Ctrl + Super + Down"
285msgid "Ctrl + Super + Down"
242msgstr ""
286msgstr ""
243
287
244−#: qml/Components/KeyboardShortcutsOverlay.qml:297
288+#: qml/Components/KeyboardShortcutsOverlay.qml:323
245msgid "Minimizes or restores the current window."
289msgid "Minimizes or restores the current window."
246msgstr ""
290msgstr ""
247
291
248−#: qml/Components/KeyboardShortcutsOverlay.qml:305
292+#: qml/Components/KeyboardShortcutsOverlay.qml:331
249msgid "Ctrl + Super + Left or Right"
293msgid "Ctrl + Super + Left or Right"
250msgstr ""
294msgstr ""
251
295
252−#: qml/Components/KeyboardShortcutsOverlay.qml:310
296+#: qml/Components/KeyboardShortcutsOverlay.qml:336
253msgid "Semi-maximizes the current window."
297msgid "Semi-maximizes the current window."
254msgstr ""
298msgstr ""
255
299
256−#: qml/Components/KeyboardShortcutsOverlay.qml:318
300+#: qml/Components/KeyboardShortcutsOverlay.qml:344
257msgid "Alt + F4"
301msgid "Alt + F4"
258msgstr "Erl + F4"
302msgstr "Erl + F4"
259
303
260−#: qml/Components/KeyboardShortcutsOverlay.qml:323
304+#: qml/Components/KeyboardShortcutsOverlay.qml:349
261msgid "Closes the current window."
305msgid "Closes the current window."
262−msgstr ""
306+msgstr "Serriñ ar prenestr a vremañ"
263
307
264−#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
308+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:228
265msgid "Return to Call"
309msgid "Return to Call"
266msgstr "Distreiñ d'ar bellgomzadenn"
310msgstr "Distreiñ d'ar bellgomzadenn"
267
311
@@ -269,7 +313,7 @@ msgstr "Distreiñ d'ar bellgomzadenn"
269msgid "Emergency Call"
313msgid "Emergency Call"
270msgstr "Pellgomzadenn vallus"
314msgstr "Pellgomzadenn vallus"
271
315
272−#: qml/Components/Lockscreen.qml:244
316+#: qml/Components/Lockscreen.qml:245
273msgid "OK"
317msgid "OK"
274msgstr "Mat eo"
318msgstr "Mat eo"
275
319
@@ -283,11 +327,11 @@ msgstr "%1:%2:%3"
283msgid "%1:%2"
327msgid "%1:%2"
284msgstr "%1:%2"
328msgstr "%1:%2"
285
329
286−#: qml/Components/ModeSwitchWarningDialog.qml:32
330+#: qml/Components/ModeSwitchWarningDialog.qml:33
287msgid "Apps may have unsaved data:"
331msgid "Apps may have unsaved data:"
288msgstr "Roadennoù ha n'int ket enrollet a c'hall bezañ gant an arloadoù :"
332msgstr "Roadennoù ha n'int ket enrollet a c'hall bezañ gant an arloadoù :"
289
333
290−#: qml/Components/ModeSwitchWarningDialog.qml:57
334+#: qml/Components/ModeSwitchWarningDialog.qml:60
291msgctxt ""
335msgctxt ""
292"Re-dock means connect the device again to an external screen/mouse/keyboard"
336"Re-dock means connect the device again to an external screen/mouse/keyboard"
293msgid "Re-dock, save your work and close these apps to continue."
337msgid "Re-dock, save your work and close these apps to continue."
@@ -295,20 +339,20 @@ msgstr ""
295"Adkevreit ouzh ar savlec'h degemer, enrollot ho labour ha serrit an arloadoù-"
339"Adkevreit ouzh ar savlec'h degemer, enrollot ho labour ha serrit an arloadoù-"
296"mañ evit kenderc'hel."
340"mañ evit kenderc'hel."
297
341
298−#: qml/Components/ModeSwitchWarningDialog.qml:63
342+#: qml/Components/ModeSwitchWarningDialog.qml:67
299msgid "Or force close now (unsaved data will be lost)."
343msgid "Or force close now (unsaved data will be lost)."
300msgstr ""
344msgstr ""
301"Pe rediañ da serriñ bremañ (kollet e vo ar roadennoù n'int ket bet enrollet)."
345"Pe rediañ da serriñ bremañ (kollet e vo ar roadennoù n'int ket bet enrollet)."
302
346
303−#: qml/Components/ModeSwitchWarningDialog.qml:75
347+#: qml/Components/ModeSwitchWarningDialog.qml:80
304msgid "OK, I will reconnect"
348msgid "OK, I will reconnect"
305msgstr "Mat eo, ez an da adkevreañ"
349msgstr "Mat eo, ez an da adkevreañ"
306
350
307−#: qml/Components/ModeSwitchWarningDialog.qml:76
351+#: qml/Components/ModeSwitchWarningDialog.qml:81
308msgid "Reconnect now!"
352msgid "Reconnect now!"
309msgstr "Adkevreañ bremañ !"
353msgstr "Adkevreañ bremañ !"
310
354
311−#: qml/Components/ModeSwitchWarningDialog.qml:88
355+#: qml/Components/ModeSwitchWarningDialog.qml:94
312msgid "Close all"
356msgid "Close all"
313msgstr "Serriñ pep tra"
357msgstr "Serriñ pep tra"
314
358
@@ -316,6 +360,30 @@ msgstr "Serriñ pep tra"
316msgid "Preview Share Item"
360msgid "Preview Share Item"
317msgstr "Rakwelet an elfenn lodet"
361msgstr "Rakwelet an elfenn lodet"
318
362
363+#: qml/Components/VirtualTouchPad.qml:317
364+msgid ""
365+"Your device is now connected to an external display. Use this screen as a "
366+"touch pad to interact with the pointer."
367+msgstr ""
368+"Kevreet eo ho penveg ouzh ur skramm diavaez bremañ. Implijit ar skramm-mañ "
369+"da bavez-touch evit ober gant ar reti."
370+
371+#: qml/Components/VirtualTouchPad.qml:327
372+msgid "Tap left button to click."
373+msgstr ""
374+
375+#: qml/Components/VirtualTouchPad.qml:339
376+msgid "Tap right button to right click."
377+msgstr ""
378+
379+#: qml/Components/VirtualTouchPad.qml:351
380+msgid "Swipe with two fingers to scroll."
381+msgstr ""
382+
383+#: qml/Components/VirtualTouchPad.qml:396
384+msgid "Find more settings in the system settings."
385+msgstr ""
386+
319#: qml/Dash/DashPageHeader.qml:361
387#: qml/Dash/DashPageHeader.qml:361
320msgctxt "Button: Open the Ubuntu Store"
388msgctxt "Button: Open the Ubuntu Store"
321msgid "Store"
389msgid "Store"
@@ -347,24 +415,24 @@ msgstr "Purañ ho tisoc'hoù"
347msgid "Reset"
415msgid "Reset"
348msgstr "Adderaouekaat"
416msgstr "Adderaouekaat"
349
417
350−#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
418+#: qml/Dash/GenericScopeView.qml:547 qml/Dash/GenericScopeView.qml:718
351msgid "Show less"
419msgid "Show less"
352msgstr "Diskouez nebeutoc'h"
420msgstr "Diskouez nebeutoc'h"
353
421
354−#: qml/Dash/GenericScopeView.qml:545
422+#: qml/Dash/GenericScopeView.qml:547
355msgid "Show all"
423msgid "Show all"
356msgstr "Diskouez pep tra"
424msgstr "Diskouez pep tra"
357
425
358−#: qml/Dash/GenericScopeView.qml:576
426+#: qml/Dash/GenericScopeView.qml:578
359msgctxt "Label: Hint for dash search line edit"
427msgctxt "Label: Hint for dash search line edit"
360msgid "Search"
428msgid "Search"
361msgstr "Klask"
429msgstr "Klask"
362
430
363−#: qml/Dash/PageHeaderExtraPanel.qml:57
431+#: qml/Dash/PageHeaderExtraPanel.qml:67
364msgid "Recent Searches"
432msgid "Recent Searches"
365msgstr "Enklaskoù graet nevez zo"
433msgstr "Enklaskoù graet nevez zo"
366
434
367−#: qml/Dash/PageHeaderExtraPanel.qml:68
435+#: qml/Dash/PageHeaderExtraPanel.qml:78
368msgid "Clear All"
436msgid "Clear All"
369msgstr "Diverkañ pep tra"
437msgstr "Diverkañ pep tra"
370
438
@@ -401,24 +469,18 @@ msgstr "Lezel da vont evit freskaat..."
401msgid "Enable location data"
469msgid "Enable location data"
402msgstr "Gweredekaat ar roadennoù lec'hiañ"
470msgstr "Gweredekaat ar roadennoù lec'hiañ"
403
471
404−#: qml/Dash/ScopesList.qml:57
472+#: qml/Dash/ScopesList.qml:146
405msgid "Manage"
473msgid "Manage"
406msgstr "Merañ"
474msgstr "Merañ"
407
475
408−#: qml/Dash/ScopesList.qml:104
476+#: qml/Dash/ScopesList.qml:187
409msgid "Home"
477msgid "Home"
410msgstr "Er gêr"
478msgstr "Er gêr"
411
479
412−#: qml/Dash/ScopesList.qml:105
480+#: qml/Dash/ScopesList.qml:188
413msgid "Also installed"
481msgid "Also installed"
414msgstr "Staliet ivez"
482msgstr "Staliet ivez"
415
483
416−#: qml/DisabledScreenNotice.qml:109
417−msgid ""
418−"Your device is now connected to an external display. Use this screen as a "
419−"touch pad to interact with the pointer."
420−msgstr ""
421−
422#: qml/Greeter/CoverPage.qml:127
484#: qml/Greeter/CoverPage.qml:127
423msgid "Unlock"
485msgid "Unlock"
424msgstr "Dibrennañ"
486msgstr "Dibrennañ"
@@ -446,32 +508,45 @@ msgid_plural "Please wait %1 minutes and then try again…"
446msgstr[0] "Gortozit %1 vunutenn, mar plij, hag esaeit en-dro..."
508msgstr[0] "Gortozit %1 vunutenn, mar plij, hag esaeit en-dro..."
447msgstr[1] "Gortozit %1 a vunutoù, mar plij, hag esaeit en-dro..."
509msgstr[1] "Gortozit %1 a vunutoù, mar plij, hag esaeit en-dro..."
448
510
449−#: qml/Greeter/Greeter.qml:596
511+#: qml/Greeter/Greeter.qml:550
450msgid "Try again"
512msgid "Try again"
451msgstr "Esaeañ adarre"
513msgstr "Esaeañ adarre"
452
514
453−#: qml/Greeter/LoginList.qml:70
515+#: qml/Greeter/Greeter.qml:551
516+msgid "Enter passphrase to unlock"
517+msgstr ""
518+
519+#: qml/Greeter/Greeter.qml:552
520+msgid "Enter passcode to unlock"
521+msgstr ""
522+
523+#: qml/Greeter/NarrowView.qml:228
524+msgid "Emergency"
525+msgstr "Mall"
526+
527+#: qml/Greeter/PromptList.qml:126
454msgid "Passphrase"
528msgid "Passphrase"
455msgstr "Lavarenn-dremen"
529msgstr "Lavarenn-dremen"
456
530
457−#: qml/Greeter/LoginList.qml:71
531+#: qml/Greeter/PromptList.qml:126
458msgid "Passcode"
532msgid "Passcode"
459msgstr "Kod-tremen"
533msgstr "Kod-tremen"
460
534
461−#: qml/Greeter/LoginList.qml:98
535+#: qml/Greeter/SessionsList.qml:124
462−msgid "Retry"
536+msgid "Select desktop environment"
463−msgstr "Esaeañ en-dro"
537+msgstr "Diuzañ endro ar burev"
464
538
465−#: qml/Greeter/LoginList.qml:99
539+#: qml/Launcher/Drawer.qml:94
466−msgid "Log In"
540+msgid "Search…"
467−msgstr "Kevreañ"
541+msgstr ""
468
542
469−#: qml/Greeter/NarrowView.qml:252
543+#: qml/Launcher/Drawer.qml:129
544+msgctxt "Apps sorted alphabetically"
470−msgid "Emergency"
545+msgid "A-Z"
471msgstr ""
546msgstr ""
472
547
473−#: qml/Greeter/SessionsList.qml:122
548+#: qml/Launcher/MoreAppsHeader.qml:55
474−msgid "Select desktop environment"
549+msgid "More apps in the store"
475msgstr ""
550msgstr ""
476
551
477#: qml/Notifications/NotificationMenuItemFactory.qml:124
552#: qml/Notifications/NotificationMenuItemFactory.qml:124
@@ -486,62 +561,62 @@ msgstr "Touchit evit distreiñ d'ar bellgomzadenn..."
486msgid "Conference"
561msgid "Conference"
487msgstr "Kendiviz"
562msgstr "Kendiviz"
488
563
489−#: qml/Panel/Indicators/MenuItemFactory.qml:847
564+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:869
490msgid "Nothing is playing"
565msgid "Nothing is playing"
491msgstr "Ne lenner netra bremañ"
566msgstr "Ne lenner netra bremañ"
492
567
493−#: qml/Panel/Indicators/MenuItemFactory.qml:975
568+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:997
494#, qt-format
569#, qt-format
495msgid "%1 hour"
570msgid "%1 hour"
496msgid_plural "%1 hours"
571msgid_plural "%1 hours"
497msgstr[0] "%1 eur"
572msgstr[0] "%1 eur"
498msgstr[1] "%1 eur"
573msgstr[1] "%1 eur"
499
574
500−#: qml/Panel/Indicators/MenuItemFactory.qml:979
575+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1001
501#, qt-format
576#, qt-format
502msgid "%1 minute"
577msgid "%1 minute"
503msgid_plural "%1 minutes"
578msgid_plural "%1 minutes"
504msgstr[0] "%1 vunutenn"
579msgstr[0] "%1 vunutenn"
505msgstr[1] "%1 vunutenn"
580msgstr[1] "%1 vunutenn"
506
581
507−#: qml/Panel/Indicators/MenuItemFactory.qml:984
582+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1006
508#, qt-format
583#, qt-format
509msgid "%1 second"
584msgid "%1 second"
510msgid_plural "%1 seconds"
585msgid_plural "%1 seconds"
511msgstr[0] "%1 eilenn"
586msgstr[0] "%1 eilenn"
512msgstr[1] "%1 eilenn"
587msgstr[1] "%1 eilenn"
513
588
514−#: qml/Panel/Indicators/MenuItemFactory.qml:987
589+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1009
515msgid "0 seconds"
590msgid "0 seconds"
516msgstr "0 eilenn"
591msgstr "0 eilenn"
517
592
518#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
593#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
519−#: qml/Panel/Indicators/MenuItemFactory.qml:989
594+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1011
520#, qt-format
595#, qt-format
521msgid "%1 remaining"
596msgid "%1 remaining"
522msgstr "%1 o chom"
597msgstr "%1 o chom"
523
598
524−#: qml/Panel/Indicators/MenuItemFactory.qml:995
599+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1017
525msgid "In queue…"
600msgid "In queue…"
526msgstr "El lostennad..."
601msgstr "El lostennad..."
527
602
528−#: qml/Panel/Indicators/MenuItemFactory.qml:999
603+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1021
529msgid "Downloading"
604msgid "Downloading"
530msgstr "O pellgargañ"
605msgstr "O pellgargañ"
531
606
532−#: qml/Panel/Indicators/MenuItemFactory.qml:1001
607+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1023
533msgid "Paused, tap to resume"
608msgid "Paused, tap to resume"
534msgstr "Ehanet, touchit evit adkregiñ"
609msgstr "Ehanet, touchit evit adkregiñ"
535
610
536−#: qml/Panel/Indicators/MenuItemFactory.qml:1003
611+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1025
537msgid "Canceled"
612msgid "Canceled"
538msgstr "Nullet"
613msgstr "Nullet"
539
614
540−#: qml/Panel/Indicators/MenuItemFactory.qml:1005
615+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1027
541msgid "Finished"
616msgid "Finished"
542msgstr "Echu"
617msgstr "Echu"
543
618
544−#: qml/Panel/Indicators/MenuItemFactory.qml:1007
619+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1029
545msgid "Failed, tap to retry"
620msgid "Failed, tap to retry"
546msgstr "C'hwitet, touchit evit adkregiñ"
621msgstr "C'hwitet, touchit evit adkregiñ"
547
622
@@ -561,17 +636,21 @@ msgctxt "Button: Call back on phone"
561msgid "Call back"
636msgid "Call back"
562msgstr "Gervel en-dro"
637msgstr "Gervel en-dro"
563
638
639+#: qml/Panel/PanelMenuPage.qml:92
640+msgid "Back"
641+msgstr ""
642+
564#: qml/Stage/SideStage.qml:76
643#: qml/Stage/SideStage.qml:76
565msgid "Drag using 3 fingers any application from one window to the other"
644msgid "Drag using 3 fingers any application from one window to the other"
566−msgstr ""
645+msgstr "Riklit forzh peseurt arload gant tri biz eus an eil prenestr d'egile"
567
646
568#: qml/Tutorial/TutorialLeftLong.qml:49
647#: qml/Tutorial/TutorialLeftLong.qml:49
569−msgid "Long swipe from the left edge to open the Today scope"
648+msgid "Long swipe from the left edge to open the Application Drawer"
570msgstr ""
649msgstr ""
571
650
572#: qml/Tutorial/TutorialLeft.qml:47
651#: qml/Tutorial/TutorialLeft.qml:47
573msgid "Short swipe from the left edge to open the launcher"
652msgid "Short swipe from the left edge to open the launcher"
574−msgstr ""
653+msgstr "Rikladenn verr adalek ar bord kleiz evit digeriñ al lañser"
575
654
576#: qml/Tutorial/TutorialRight.qml:55
655#: qml/Tutorial/TutorialRight.qml:55
577msgid "Push your mouse against the right edge to view your open apps"
656msgid "Push your mouse against the right edge to view your open apps"
@@ -580,11 +659,12 @@ msgstr ""
580
659
581#: qml/Tutorial/TutorialRight.qml:56
660#: qml/Tutorial/TutorialRight.qml:56
582msgid "Swipe from the right edge to view your open apps"
661msgid "Swipe from the right edge to view your open apps"
583−msgstr ""
662+msgstr "Riklañ adalek ar bord dehoù evit gwelet hoc'h arloadoù digor"
584
663
585#: qml/Tutorial/TutorialTop.qml:53
664#: qml/Tutorial/TutorialTop.qml:53
586msgid "Swipe from the top edge to access notifications and quick settings"
665msgid "Swipe from the top edge to access notifications and quick settings"
587msgstr ""
666msgstr ""
667+"Riklañ adalek an nec'h evit gwelet ar c'hemennoù hag an arventennoù prim"
588
668
589#: qml/Wizard/Page.qml:54
669#: qml/Wizard/Page.qml:54
590msgctxt "Button: Go back one page in the Wizard"
670msgctxt "Button: Go back one page in the Wizard"
@@ -596,7 +676,7 @@ msgid "Language"
596msgstr "Yezh"
676msgstr "Yezh"
597
677
598#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
678#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
599−#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
679+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/40-location.qml:271
600#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
680#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
601#: qml/Wizard/Pages/70-passwd-type.qml:145
681#: qml/Wizard/Pages/70-passwd-type.qml:145
602#: qml/Wizard/Pages/75-report-check.qml:84
682#: qml/Wizard/Pages/75-report-check.qml:84
@@ -617,25 +697,24 @@ msgstr "Yezh ar c'hlavier"
617msgid "Keyboard layout"
697msgid "Keyboard layout"
618msgstr "Aozadur ar c'hlavier"
698msgstr "Aozadur ar c'hlavier"
619
699
620−#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
700+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:206
621−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
701+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/sim.qml:101
622−#: qml/Wizard/Pages/sim.qml:101
623msgid "Skip"
702msgid "Skip"
624msgstr "Tremen hebiou"
703msgstr "Tremen hebiou"
625
704
626−#: qml/Wizard/Pages/30-wifi.qml:31
705+#: qml/Wizard/Pages/30-wifi.qml:30
627msgid "Connect to Wi‑Fi"
706msgid "Connect to Wi‑Fi"
628msgstr "Kevreañ ouzh ar Wi-Fi"
707msgstr "Kevreañ ouzh ar Wi-Fi"
629
708
630−#: qml/Wizard/Pages/30-wifi.qml:132
709+#: qml/Wizard/Pages/30-wifi.qml:131
631msgid "Connected"
710msgid "Connected"
632msgstr "Kevreet"
711msgstr "Kevreet"
633
712
634−#: qml/Wizard/Pages/30-wifi.qml:165
713+#: qml/Wizard/Pages/30-wifi.qml:164
635msgid "Available Wi-Fi networks"
714msgid "Available Wi-Fi networks"
636msgstr "Rouedadoù Wi-Fi da gaout"
715msgstr "Rouedadoù Wi-Fi da gaout"
637
716
638−#: qml/Wizard/Pages/30-wifi.qml:166
717+#: qml/Wizard/Pages/30-wifi.qml:165
639msgid "No available Wi-Fi networks"
718msgid "No available Wi-Fi networks"
640msgstr "N'eus ket rouedadoù Wi-Fi da gaout"
719msgstr "N'eus ket rouedadoù Wi-Fi da gaout"
641
720
@@ -716,41 +795,12 @@ msgstr "Sikourit ac'hanomp da wellaat"
716
795
717#: qml/Wizard/Pages/75-report-check.qml:59
796#: qml/Wizard/Pages/75-report-check.qml:59
718msgid "Improve system performance by sending us crashes and error reports."
797msgid "Improve system performance by sending us crashes and error reports."
719−msgstr ""
798+msgstr "Gwellait ar reizhiad en ur gas deomp an danevelloù fazi."
720
799
721#: qml/Wizard/Pages/75-report-check.qml:60
800#: qml/Wizard/Pages/75-report-check.qml:60
722msgid "Privacy policy"
801msgid "Privacy policy"
723msgstr "Reolennoù buhez prevez"
802msgstr "Reolennoù buhez prevez"
724
803
725−#: qml/Wizard/Pages/77-system-update.qml:28
726−msgid "Update Device"
727−msgstr "Hizivaat ar benveg"
728−
729−#: qml/Wizard/Pages/77-system-update.qml:55
730−msgid ""
731−"There is a system update available and ready to install. Afterwards, the "
732−"device will automatically restart."
733−msgstr ""
734−
735−#: qml/Wizard/Pages/77-system-update.qml:76
736−msgctxt "string identifying name of the update"
737−msgid "Ubuntu system"
738−msgstr "Reizhiad Ubuntu"
739−
740−#: qml/Wizard/Pages/77-system-update.qml:83
741−#, qt-format
742−msgctxt "version of the system update"
743−msgid "Version %1"
744−msgstr "Stumm %1"
745−
746−#: qml/Wizard/Pages/77-system-update.qml:102
747−msgid "This could take a few minutes..."
748−msgstr "Gallout a ra padout un nebeud munutennoù..."
749−
750−#: qml/Wizard/Pages/77-system-update.qml:116
751−msgid "Install and restart now"
752−msgstr "Staliañ hag adloc'hañ bremañ"
753−
754#: qml/Wizard/Pages/80-finished.qml:89
804#: qml/Wizard/Pages/80-finished.qml:89
755msgid "Welcome to Ubuntu"
805msgid "Welcome to Ubuntu"
756msgstr "Donemat en Ubuntu"
806msgstr "Donemat en Ubuntu"
@@ -769,7 +819,7 @@ msgstr "Penndivizoù implij"
769
819
770#: qml/Wizard/Pages/here-terms.qml:69
820#: qml/Wizard/Pages/here-terms.qml:69
771msgid "Your device uses positioning technologies provided by HERE."
821msgid "Your device uses positioning technologies provided by HERE."
772−msgstr ""
822+msgstr "Ho penveg a implij teknologiezhoù lec'hiañ pourchaset gant HERE."
773
823
774#: qml/Wizard/Pages/here-terms.qml:81
824#: qml/Wizard/Pages/here-terms.qml:81
775msgid ""
825msgid ""
@@ -783,6 +833,8 @@ msgid ""
783"The information collected is used to analyze the service and to improve the "
833"The information collected is used to analyze the service and to improve the "
784"use of service, but not to identify you personally."
834"use of service, but not to identify you personally."
785msgstr ""
835msgstr ""
836+"Implijet e vez an titouroù dastumet evit dielfennañ ar servij ha gwellaat an "
837+"implij anezhañ, ha neket evit anavezout ac'hanoc'h."
786
838
787#: qml/Wizard/Pages/here-terms.qml:106
839#: qml/Wizard/Pages/here-terms.qml:106
788#, qt-format
840#, qt-format
@@ -1284,3 +1336,35 @@ msgstr "Ger-tremen diasur-kenañ"
1284
1336
1285#~ msgid "Swipe up to create a message"
1337#~ msgid "Swipe up to create a message"
1286#~ msgstr "Riklit d'an nec'h evit krouiñ ur gemennadenn"
1338#~ msgstr "Riklit d'an nec'h evit krouiñ ur gemennadenn"
1339+
1340+#~ msgid "Takes a screenshot of a window."
1341+#~ msgstr "Tapout ur skeudenn eus ur prenestr"
1342+
1343+#~ msgid "This could take a few minutes..."
1344+#~ msgstr "Gallout a ra padout un nebeud munutennoù..."
1345+
1346+#, qt-format
1347+#~ msgctxt "version of the system update"
1348+#~ msgid "Version %1"
1349+#~ msgstr "Stumm %1"
1350+
1351+#~ msgctxt "string identifying name of the update"
1352+#~ msgid "Ubuntu system"
1353+#~ msgstr "Reizhiad Ubuntu"
1354+
1355+#~ msgid "Update Device"
1356+#~ msgstr "Hizivaat ar benveg"
1357+
1358+#~ msgid "Install and restart now"
1359+#~ msgstr "Staliañ hag adloc'hañ bremañ"
1360+
1361+#~ msgid ""
1362+#~ "There is a system update available and ready to install. Afterwards, the "
1363+#~ "device will automatically restart."
1364+#~ msgstr ""
1365+#~ "Un hizivadenn eus ar reizhiad zo da gaout. Prest eo da vezañ staliet. Goude-"
1366+#~ "se e adloc'ho ho penveg e-unan."
1367+
1368+#~ msgid "Long swipe from the left edge to open the Today scope"
1369+#~ msgstr ""
1370+#~ "Rikladenn hir adalek ar bord kleiz evit digeriñ ar c'heflusker enklask Hiziv"
po/bs.po+184−137
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-11-16 10:44+0000\n"
10+"POT-Creation-Date: 2017-04-04 22:56+0000\n"
11"PO-Revision-Date: 2015-12-01 20:06+0000\n"
11"PO-Revision-Date: 2015-12-01 20:06+0000\n"
12"Last-Translator: Kenan Gutić <Unknown>\n"
12"Last-Translator: Kenan Gutić <Unknown>\n"
13"Language-Team: Bosnian <bs@li.org>\n"
13"Language-Team: Bosnian <bs@li.org>\n"
@@ -16,75 +16,103 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
17"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
18"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
19−"X-Launchpad-Export-Date: 2016-11-23 06:34+0000\n"
19+"X-Launchpad-Export-Date: 2017-04-07 06:29+0000\n"
20−"X-Generator: Launchpad (build 18269)\n"
20+"X-Generator: Launchpad (build 18343)\n"
21
21
22−#: plugins/LightDM/Greeter.cpp:123
22+#: plugins/LightDM/Greeter.cpp:188
23msgid "Password: "
23msgid "Password: "
24msgstr "Šifra: "
24msgstr "Šifra: "
25
25
26+#: plugins/LightDM/Greeter.cpp:203
27+msgid "Username"
28+msgstr ""
29+
30+#: plugins/LightDM/Greeter.cpp:242
31+msgid "Failed to authenticate"
32+msgstr ""
33+
34+#: plugins/LightDM/Greeter.cpp:244
35+msgid "Invalid password, please try again"
36+msgstr ""
37+
38+#: plugins/LightDM/Greeter.cpp:254
39+msgid "Log In"
40+msgstr ""
41+
42+#: plugins/LightDM/Greeter.cpp:254
43+msgid "Retry"
44+msgstr "Ponovi"
45+
46+#: plugins/LightDM/UsersModel.cpp:157
47+msgid "Login"
48+msgstr ""
49+
50+#: plugins/LightDM/UsersModel.cpp:165
51+msgid "Guest Session"
52+msgstr ""
53+
26#: plugins/Unity/Launcher/launcheritem.cpp:49
54#: plugins/Unity/Launcher/launcheritem.cpp:49
27−#: plugins/Unity/Launcher/launcheritem.cpp:108
55+#: plugins/Unity/Launcher/launcheritem.cpp:123
28msgid "Pin shortcut"
56msgid "Pin shortcut"
29msgstr "Prikačite prečicu"
57msgstr "Prikačite prečicu"
30
58
31−#: plugins/Unity/Launcher/launcheritem.cpp:54
59+#: plugins/Unity/Launcher/launcheritem.cpp:55
32msgid "Quit"
60msgid "Quit"
33msgstr "Napusti"
61msgstr "Napusti"
34
62
35−#: plugins/Unity/Launcher/launcheritem.cpp:108
63+#: plugins/Unity/Launcher/launcheritem.cpp:123
36msgid "Unpin shortcut"
64msgid "Unpin shortcut"
37msgstr "Otkačite prečicu"
65msgstr "Otkačite prečicu"
38
66
39−#: qml/Components/Dialogs.qml:149
67+#: qml/Components/Dialogs.qml:176
40msgctxt "Title: Lock/Log out dialog"
68msgctxt "Title: Lock/Log out dialog"
41msgid "Log out"
69msgid "Log out"
42msgstr "Odjavite se"
70msgstr "Odjavite se"
43
71
44−#: qml/Components/Dialogs.qml:150
72+#: qml/Components/Dialogs.qml:177
45msgid "Are you sure you want to log out?"
73msgid "Are you sure you want to log out?"
46msgstr "Da li ste sigurni da se želite odjaviti?"
74msgstr "Da li ste sigurni da se želite odjaviti?"
47
75
48−#: qml/Components/Dialogs.qml:152
76+#: qml/Components/Dialogs.qml:180
49msgctxt "Button: Lock the system"
77msgctxt "Button: Lock the system"
50msgid "Lock"
78msgid "Lock"
51msgstr "Zaključaj"
79msgstr "Zaključaj"
52
80
53−#: qml/Components/Dialogs.qml:159
81+#: qml/Components/Dialogs.qml:191
54msgctxt "Button: Log out from the system"
82msgctxt "Button: Log out from the system"
55msgid "Log Out"
83msgid "Log Out"
56msgstr "Odjavi se"
84msgstr "Odjavi se"
57
85
58−#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
86+#: qml/Components/Dialogs.qml:199 qml/Components/Dialogs.qml:264
59−#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
87+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:208
60#: qml/Wizard/Pages/passcode-confirm.qml:32
88#: qml/Wizard/Pages/passcode-confirm.qml:32
61#: qml/Wizard/Pages/passcode-set.qml:32
89#: qml/Wizard/Pages/passcode-set.qml:32
62msgid "Cancel"
90msgid "Cancel"
63msgstr "Otkaži"
91msgstr "Otkaži"
64
92
65−#: qml/Components/Dialogs.qml:178
93+#: qml/Components/Dialogs.qml:211
66msgctxt "Title: Reboot dialog"
94msgctxt "Title: Reboot dialog"
67msgid "Reboot"
95msgid "Reboot"
68msgstr "Ponovo pokreni"
96msgstr "Ponovo pokreni"
69
97
70−#: qml/Components/Dialogs.qml:179
98+#: qml/Components/Dialogs.qml:212
71msgid "Are you sure you want to reboot?"
99msgid "Are you sure you want to reboot?"
72msgstr "Da li ste sigurni da želite ponovo pokrenuti?"
100msgstr "Da li ste sigurni da želite ponovo pokrenuti?"
73
101
74−#: qml/Components/Dialogs.qml:181
102+#: qml/Components/Dialogs.qml:215
75msgid "No"
103msgid "No"
76msgstr "Ne"
104msgstr "Ne"
77
105
78−#: qml/Components/Dialogs.qml:187
106+#: qml/Components/Dialogs.qml:223
79msgid "Yes"
107msgid "Yes"
80msgstr "Da"
108msgstr "Da"
81
109
82−#: qml/Components/Dialogs.qml:202
110+#: qml/Components/Dialogs.qml:239
83msgctxt "Title: Power off/Restart dialog"
111msgctxt "Title: Power off/Restart dialog"
84msgid "Power"
112msgid "Power"
85msgstr "Napajanje"
113msgstr "Napajanje"
86
114
87−#: qml/Components/Dialogs.qml:203
115+#: qml/Components/Dialogs.qml:240
88msgid ""
116msgid ""
89"Are you sure you would like\n"
117"Are you sure you would like\n"
90"to power off?"
118"to power off?"
@@ -92,12 +120,12 @@ msgstr ""
92"Da li ste sigurni da želite\n"
120"Da li ste sigurni da želite\n"
93"isključiti?"
121"isključiti?"
94
122
95−#: qml/Components/Dialogs.qml:205
123+#: qml/Components/Dialogs.qml:244
96msgctxt "Button: Power off the system"
124msgctxt "Button: Power off the system"
97msgid "Power off"
125msgid "Power off"
98msgstr "Isključi"
126msgstr "Isključi"
99
127
100−#: qml/Components/Dialogs.qml:214
128+#: qml/Components/Dialogs.qml:255
101msgctxt "Button: Restart the system"
129msgctxt "Button: Restart the system"
102msgid "Restart"
130msgid "Restart"
103msgstr "Restartuj"
131msgstr "Restartuj"
@@ -123,7 +151,7 @@ msgid "Alt + PrtScr"
123msgstr ""
151msgstr ""
124
152
125#: qml/Components/KeyboardShortcutsOverlay.qml:80
153#: qml/Components/KeyboardShortcutsOverlay.qml:80
126−msgid "Takes a screenshot of a window."
154+msgid "Takes a screenshot of the current window."
127msgstr ""
155msgstr ""
128
156
129#: qml/Components/KeyboardShortcutsOverlay.qml:88
157#: qml/Components/KeyboardShortcutsOverlay.qml:88
@@ -142,127 +170,143 @@ msgstr ""
142msgid "Switches to previous keyboard layout."
170msgid "Switches to previous keyboard layout."
143msgstr ""
171msgstr ""
144
172
145−#: qml/Components/KeyboardShortcutsOverlay.qml:118
173+#: qml/Components/KeyboardShortcutsOverlay.qml:114
174+msgid "Ctrl + Alt + T"
175+msgstr ""
176+
177+#: qml/Components/KeyboardShortcutsOverlay.qml:119
178+msgid "Starts the Terminal application."
179+msgstr ""
180+
181+#: qml/Components/KeyboardShortcutsOverlay.qml:131
146msgid "Launcher"
182msgid "Launcher"
147msgstr ""
183msgstr ""
148
184
149−#: qml/Components/KeyboardShortcutsOverlay.qml:125
185+#: qml/Components/KeyboardShortcutsOverlay.qml:138
150msgid "Super (Hold)"
186msgid "Super (Hold)"
151msgstr ""
187msgstr ""
152
188
153−#: qml/Components/KeyboardShortcutsOverlay.qml:130
189+#: qml/Components/KeyboardShortcutsOverlay.qml:143
154msgid "Opens the launcher, displays shortcuts."
190msgid "Opens the launcher, displays shortcuts."
155msgstr ""
191msgstr ""
156
192
157−#: qml/Components/KeyboardShortcutsOverlay.qml:138
193+#: qml/Components/KeyboardShortcutsOverlay.qml:151
158msgid "Alt + F1"
194msgid "Alt + F1"
159msgstr ""
195msgstr ""
160
196
161−#: qml/Components/KeyboardShortcutsOverlay.qml:143
197+#: qml/Components/KeyboardShortcutsOverlay.qml:156
162msgid "Opens launcher keyboard navigation mode."
198msgid "Opens launcher keyboard navigation mode."
163msgstr ""
199msgstr ""
164
200
165−#: qml/Components/KeyboardShortcutsOverlay.qml:151
201+#: qml/Components/KeyboardShortcutsOverlay.qml:164
166msgid "Super + Tab"
202msgid "Super + Tab"
167msgstr ""
203msgstr ""
168
204
169−#: qml/Components/KeyboardShortcutsOverlay.qml:156
205+#: qml/Components/KeyboardShortcutsOverlay.qml:169
170msgid "Switches applications via the launcher."
206msgid "Switches applications via the launcher."
171msgstr ""
207msgstr ""
172
208
173−#: qml/Components/KeyboardShortcutsOverlay.qml:164
209+#: qml/Components/KeyboardShortcutsOverlay.qml:177
174−msgid "Super + 0 to 9"
210+msgid "Super + 1 to 0"
175msgstr ""
211msgstr ""
176
212
177−#: qml/Components/KeyboardShortcutsOverlay.qml:169
213+#: qml/Components/KeyboardShortcutsOverlay.qml:182
178msgid "Same as clicking on a launcher icon."
214msgid "Same as clicking on a launcher icon."
179msgstr ""
215msgstr ""
180
216
181−#: qml/Components/KeyboardShortcutsOverlay.qml:181
217+#: qml/Components/KeyboardShortcutsOverlay.qml:190
218+msgid "Super + A"
219+msgstr ""
220+
221+#: qml/Components/KeyboardShortcutsOverlay.qml:195
222+msgid "Opens the Application Drawer."
223+msgstr ""
224+
225+#: qml/Components/KeyboardShortcutsOverlay.qml:207
182msgid "Scopes"
226msgid "Scopes"
183msgstr ""
227msgstr ""
184
228
185−#: qml/Components/KeyboardShortcutsOverlay.qml:188
229+#: qml/Components/KeyboardShortcutsOverlay.qml:214
186msgid "Super (Tap)"
230msgid "Super (Tap)"
187msgstr ""
231msgstr ""
188
232
189−#: qml/Components/KeyboardShortcutsOverlay.qml:193
233+#: qml/Components/KeyboardShortcutsOverlay.qml:219
190msgid "Opens the Scopes home."
234msgid "Opens the Scopes home."
191msgstr ""
235msgstr ""
192
236
193−#: qml/Components/KeyboardShortcutsOverlay.qml:209
237+#: qml/Components/KeyboardShortcutsOverlay.qml:235
194msgid "Switching"
238msgid "Switching"
195msgstr ""
239msgstr ""
196
240
197−#: qml/Components/KeyboardShortcutsOverlay.qml:216
241+#: qml/Components/KeyboardShortcutsOverlay.qml:242
198msgid "Alt + Tab"
242msgid "Alt + Tab"
199msgstr ""
243msgstr ""
200
244
201−#: qml/Components/KeyboardShortcutsOverlay.qml:221
245+#: qml/Components/KeyboardShortcutsOverlay.qml:247
202msgid "Switches between applications."
246msgid "Switches between applications."
203msgstr ""
247msgstr ""
204
248
205−#: qml/Components/KeyboardShortcutsOverlay.qml:229
249+#: qml/Components/KeyboardShortcutsOverlay.qml:255
206msgid "Super + W"
250msgid "Super + W"
207msgstr ""
251msgstr ""
208
252
209−#: qml/Components/KeyboardShortcutsOverlay.qml:234
253+#: qml/Components/KeyboardShortcutsOverlay.qml:260
210msgid "Opens the desktop spread."
254msgid "Opens the desktop spread."
211msgstr ""
255msgstr ""
212
256
213−#: qml/Components/KeyboardShortcutsOverlay.qml:242
257+#: qml/Components/KeyboardShortcutsOverlay.qml:268
214msgid "Cursor Left or Right"
258msgid "Cursor Left or Right"
215msgstr ""
259msgstr ""
216
260
217−#: qml/Components/KeyboardShortcutsOverlay.qml:247
261+#: qml/Components/KeyboardShortcutsOverlay.qml:273
218msgid "Moves the focus."
262msgid "Moves the focus."
219msgstr ""
263msgstr ""
220
264
221−#: qml/Components/KeyboardShortcutsOverlay.qml:259
265+#: qml/Components/KeyboardShortcutsOverlay.qml:285
222msgid "Windows"
266msgid "Windows"
223msgstr ""
267msgstr ""
224
268
225−#: qml/Components/KeyboardShortcutsOverlay.qml:266
269+#: qml/Components/KeyboardShortcutsOverlay.qml:292
226msgid "Ctrl + Super + D"
270msgid "Ctrl + Super + D"
227msgstr ""
271msgstr ""
228
272
229−#: qml/Components/KeyboardShortcutsOverlay.qml:271
273+#: qml/Components/KeyboardShortcutsOverlay.qml:297
230msgid "Minimizes all windows."
274msgid "Minimizes all windows."
231msgstr ""
275msgstr ""
232
276
233−#: qml/Components/KeyboardShortcutsOverlay.qml:279
277+#: qml/Components/KeyboardShortcutsOverlay.qml:305
234msgid "Ctrl + Super + Up"
278msgid "Ctrl + Super + Up"
235msgstr ""
279msgstr ""
236
280
237−#: qml/Components/KeyboardShortcutsOverlay.qml:284
281+#: qml/Components/KeyboardShortcutsOverlay.qml:310
238msgid "Maximizes the current window."
282msgid "Maximizes the current window."
239msgstr ""
283msgstr ""
240
284
241−#: qml/Components/KeyboardShortcutsOverlay.qml:292
285+#: qml/Components/KeyboardShortcutsOverlay.qml:318
242msgid "Ctrl + Super + Down"
286msgid "Ctrl + Super + Down"
243msgstr ""
287msgstr ""
244
288
245−#: qml/Components/KeyboardShortcutsOverlay.qml:297
289+#: qml/Components/KeyboardShortcutsOverlay.qml:323
246msgid "Minimizes or restores the current window."
290msgid "Minimizes or restores the current window."
247msgstr ""
291msgstr ""
248
292
249−#: qml/Components/KeyboardShortcutsOverlay.qml:305
293+#: qml/Components/KeyboardShortcutsOverlay.qml:331
250msgid "Ctrl + Super + Left or Right"
294msgid "Ctrl + Super + Left or Right"
251msgstr ""
295msgstr ""
252
296
253−#: qml/Components/KeyboardShortcutsOverlay.qml:310
297+#: qml/Components/KeyboardShortcutsOverlay.qml:336
254msgid "Semi-maximizes the current window."
298msgid "Semi-maximizes the current window."
255msgstr ""
299msgstr ""
256
300
257−#: qml/Components/KeyboardShortcutsOverlay.qml:318
301+#: qml/Components/KeyboardShortcutsOverlay.qml:344
258msgid "Alt + F4"
302msgid "Alt + F4"
259msgstr ""
303msgstr ""
260
304
261−#: qml/Components/KeyboardShortcutsOverlay.qml:323
305+#: qml/Components/KeyboardShortcutsOverlay.qml:349
262msgid "Closes the current window."
306msgid "Closes the current window."
263msgstr ""
307msgstr ""
264
308
265−#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
309+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:228
266msgid "Return to Call"
310msgid "Return to Call"
267msgstr "Povratak na Poziv"
311msgstr "Povratak na Poziv"
268
312
@@ -270,7 +314,7 @@ msgstr "Povratak na Poziv"
270msgid "Emergency Call"
314msgid "Emergency Call"
271msgstr "Hitan Poziv"
315msgstr "Hitan Poziv"
272
316
273−#: qml/Components/Lockscreen.qml:244
317+#: qml/Components/Lockscreen.qml:245
274msgid "OK"
318msgid "OK"
275msgstr "U redu"
319msgstr "U redu"
276
320
@@ -284,31 +328,31 @@ msgstr ""
284msgid "%1:%2"
328msgid "%1:%2"
285msgstr ""
329msgstr ""
286
330
287−#: qml/Components/ModeSwitchWarningDialog.qml:32
331+#: qml/Components/ModeSwitchWarningDialog.qml:33
288msgid "Apps may have unsaved data:"
332msgid "Apps may have unsaved data:"
289msgstr "Aplikacije možda imaju podataka koji nisu sačuvani:"
333msgstr "Aplikacije možda imaju podataka koji nisu sačuvani:"
290
334
291−#: qml/Components/ModeSwitchWarningDialog.qml:57
335+#: qml/Components/ModeSwitchWarningDialog.qml:60
292msgctxt ""
336msgctxt ""
293"Re-dock means connect the device again to an external screen/mouse/keyboard"
337"Re-dock means connect the device again to an external screen/mouse/keyboard"
294msgid "Re-dock, save your work and close these apps to continue."
338msgid "Re-dock, save your work and close these apps to continue."
295msgstr ""
339msgstr ""
296
340
297−#: qml/Components/ModeSwitchWarningDialog.qml:63
341+#: qml/Components/ModeSwitchWarningDialog.qml:67
298msgid "Or force close now (unsaved data will be lost)."
342msgid "Or force close now (unsaved data will be lost)."
299msgstr ""
343msgstr ""
300"Ili zatvori aplikaciju na silu (podaci koji nisu sačuvani će biti "
344"Ili zatvori aplikaciju na silu (podaci koji nisu sačuvani će biti "
301"izgubljeni)."
345"izgubljeni)."
302
346
303−#: qml/Components/ModeSwitchWarningDialog.qml:75
347+#: qml/Components/ModeSwitchWarningDialog.qml:80
304msgid "OK, I will reconnect"
348msgid "OK, I will reconnect"
305msgstr "Uredu, ponovno ću se povezati"
349msgstr "Uredu, ponovno ću se povezati"
306
350
307−#: qml/Components/ModeSwitchWarningDialog.qml:76
351+#: qml/Components/ModeSwitchWarningDialog.qml:81
308msgid "Reconnect now!"
352msgid "Reconnect now!"
309msgstr "Ponovo poveži sada"
353msgstr "Ponovo poveži sada"
310
354
311−#: qml/Components/ModeSwitchWarningDialog.qml:88
355+#: qml/Components/ModeSwitchWarningDialog.qml:94
312msgid "Close all"
356msgid "Close all"
313msgstr "Zatvori sve"
357msgstr "Zatvori sve"
314
358
@@ -316,6 +360,28 @@ msgstr "Zatvori sve"
316msgid "Preview Share Item"
360msgid "Preview Share Item"
317msgstr "Pogledaj stavku koja se dijeli"
361msgstr "Pogledaj stavku koja se dijeli"
318
362
363+#: qml/Components/VirtualTouchPad.qml:317
364+msgid ""
365+"Your device is now connected to an external display. Use this screen as a "
366+"touch pad to interact with the pointer."
367+msgstr ""
368+
369+#: qml/Components/VirtualTouchPad.qml:327
370+msgid "Tap left button to click."
371+msgstr ""
372+
373+#: qml/Components/VirtualTouchPad.qml:339
374+msgid "Tap right button to right click."
375+msgstr ""
376+
377+#: qml/Components/VirtualTouchPad.qml:351
378+msgid "Swipe with two fingers to scroll."
379+msgstr ""
380+
381+#: qml/Components/VirtualTouchPad.qml:396
382+msgid "Find more settings in the system settings."
383+msgstr ""
384+
319#: qml/Dash/DashPageHeader.qml:361
385#: qml/Dash/DashPageHeader.qml:361
320msgctxt "Button: Open the Ubuntu Store"
386msgctxt "Button: Open the Ubuntu Store"
321msgid "Store"
387msgid "Store"
@@ -347,24 +413,24 @@ msgstr ""
347msgid "Reset"
413msgid "Reset"
348msgstr ""
414msgstr ""
349
415
350−#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
416+#: qml/Dash/GenericScopeView.qml:547 qml/Dash/GenericScopeView.qml:718
351msgid "Show less"
417msgid "Show less"
352msgstr ""
418msgstr ""
353
419
354−#: qml/Dash/GenericScopeView.qml:545
420+#: qml/Dash/GenericScopeView.qml:547
355msgid "Show all"
421msgid "Show all"
356msgstr ""
422msgstr ""
357
423
358−#: qml/Dash/GenericScopeView.qml:576
424+#: qml/Dash/GenericScopeView.qml:578
359msgctxt "Label: Hint for dash search line edit"
425msgctxt "Label: Hint for dash search line edit"
360msgid "Search"
426msgid "Search"
361msgstr "Pretraži"
427msgstr "Pretraži"
362
428
363−#: qml/Dash/PageHeaderExtraPanel.qml:57
429+#: qml/Dash/PageHeaderExtraPanel.qml:67
364msgid "Recent Searches"
430msgid "Recent Searches"
365msgstr ""
431msgstr ""
366
432
367−#: qml/Dash/PageHeaderExtraPanel.qml:68
433+#: qml/Dash/PageHeaderExtraPanel.qml:78
368msgid "Clear All"
434msgid "Clear All"
369msgstr ""
435msgstr ""
370
436
@@ -401,24 +467,18 @@ msgstr "Pustiti za osvježavanje..."
401msgid "Enable location data"
467msgid "Enable location data"
402msgstr "Omogućiti podatke o lokaciji"
468msgstr "Omogućiti podatke o lokaciji"
403
469
404−#: qml/Dash/ScopesList.qml:57
470+#: qml/Dash/ScopesList.qml:146
405msgid "Manage"
471msgid "Manage"
406msgstr "Upravljanje"
472msgstr "Upravljanje"
407
473
408−#: qml/Dash/ScopesList.qml:104
474+#: qml/Dash/ScopesList.qml:187
409msgid "Home"
475msgid "Home"
410msgstr "Početna"
476msgstr "Početna"
411
477
412−#: qml/Dash/ScopesList.qml:105
478+#: qml/Dash/ScopesList.qml:188
413msgid "Also installed"
479msgid "Also installed"
414msgstr "Također instalirano"
480msgstr "Također instalirano"
415
481
416−#: qml/DisabledScreenNotice.qml:109
417−msgid ""
418−"Your device is now connected to an external display. Use this screen as a "
419−"touch pad to interact with the pointer."
420−msgstr ""
421−
422#: qml/Greeter/CoverPage.qml:127
482#: qml/Greeter/CoverPage.qml:127
423msgid "Unlock"
483msgid "Unlock"
424msgstr "Otključaj"
484msgstr "Otključaj"
@@ -443,32 +503,45 @@ msgstr[0] "Molim pričekajte %1 minutu i onda pokušajte ponovo..."
443msgstr[1] "Molim pričekajte %1 minute i onda pokušajte ponovo..."
503msgstr[1] "Molim pričekajte %1 minute i onda pokušajte ponovo..."
444msgstr[2] "Molim pričekajte %1 minuta i onda pokušajte ponovo"
504msgstr[2] "Molim pričekajte %1 minuta i onda pokušajte ponovo"
445
505
446−#: qml/Greeter/Greeter.qml:596
506+#: qml/Greeter/Greeter.qml:550
447msgid "Try again"
507msgid "Try again"
448msgstr ""
508msgstr ""
449
509
450−#: qml/Greeter/LoginList.qml:70
510+#: qml/Greeter/Greeter.qml:551
511+msgid "Enter passphrase to unlock"
512+msgstr ""
513+
514+#: qml/Greeter/Greeter.qml:552
515+msgid "Enter passcode to unlock"
516+msgstr ""
517+
518+#: qml/Greeter/NarrowView.qml:228
519+msgid "Emergency"
520+msgstr ""
521+
522+#: qml/Greeter/PromptList.qml:126
451msgid "Passphrase"
523msgid "Passphrase"
452msgstr ""
524msgstr ""
453
525
454−#: qml/Greeter/LoginList.qml:71
526+#: qml/Greeter/PromptList.qml:126
455msgid "Passcode"
527msgid "Passcode"
456msgstr ""
528msgstr ""
457
529
458−#: qml/Greeter/LoginList.qml:98
530+#: qml/Greeter/SessionsList.qml:124
459−msgid "Retry"
531+msgid "Select desktop environment"
460−msgstr "Ponovi"
532+msgstr ""
461
533
462−#: qml/Greeter/LoginList.qml:99
534+#: qml/Launcher/Drawer.qml:94
463−msgid "Log In"
535+msgid "Search…"
464msgstr ""
536msgstr ""
465
537
466−#: qml/Greeter/NarrowView.qml:252
538+#: qml/Launcher/Drawer.qml:129
539+msgctxt "Apps sorted alphabetically"
467−msgid "Emergency"
540+msgid "A-Z"
468msgstr ""
541msgstr ""
469
542
470−#: qml/Greeter/SessionsList.qml:122
543+#: qml/Launcher/MoreAppsHeader.qml:55
471−msgid "Select desktop environment"
544+msgid "More apps in the store"
472msgstr ""
545msgstr ""
473
546
474#: qml/Notifications/NotificationMenuItemFactory.qml:124
547#: qml/Notifications/NotificationMenuItemFactory.qml:124
@@ -483,11 +556,11 @@ msgstr "Kucnite da uzvratite poziv..."
483msgid "Conference"
556msgid "Conference"
484msgstr "Savjetovanje"
557msgstr "Savjetovanje"
485
558
486−#: qml/Panel/Indicators/MenuItemFactory.qml:847
559+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:869
487msgid "Nothing is playing"
560msgid "Nothing is playing"
488msgstr "Ništa nije pokrenuto"
561msgstr "Ništa nije pokrenuto"
489
562
490−#: qml/Panel/Indicators/MenuItemFactory.qml:975
563+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:997
491#, qt-format
564#, qt-format
492msgid "%1 hour"
565msgid "%1 hour"
493msgid_plural "%1 hours"
566msgid_plural "%1 hours"
@@ -495,7 +568,7 @@ msgstr[0] "%1 sat"
495msgstr[1] "%1 sata"
568msgstr[1] "%1 sata"
496msgstr[2] "%1 sati"
569msgstr[2] "%1 sati"
497
570
498−#: qml/Panel/Indicators/MenuItemFactory.qml:979
571+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1001
499#, qt-format
572#, qt-format
500msgid "%1 minute"
573msgid "%1 minute"
501msgid_plural "%1 minutes"
574msgid_plural "%1 minutes"
@@ -503,7 +576,7 @@ msgstr[0] "%1 minut"
503msgstr[1] "%1 minuta"
576msgstr[1] "%1 minuta"
504msgstr[2] "%1 minuta"
577msgstr[2] "%1 minuta"
505
578
506−#: qml/Panel/Indicators/MenuItemFactory.qml:984
579+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1006
507#, qt-format
580#, qt-format
508msgid "%1 second"
581msgid "%1 second"
509msgid_plural "%1 seconds"
582msgid_plural "%1 seconds"
@@ -511,37 +584,37 @@ msgstr[0] "%1 sekunda"
511msgstr[1] "%1 sekunde"
584msgstr[1] "%1 sekunde"
512msgstr[2] "%1 sekundi"
585msgstr[2] "%1 sekundi"
513
586
514−#: qml/Panel/Indicators/MenuItemFactory.qml:987
587+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1009
515msgid "0 seconds"
588msgid "0 seconds"
516msgstr "0 sekundi"
589msgstr "0 sekundi"
517
590
518#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
591#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
519−#: qml/Panel/Indicators/MenuItemFactory.qml:989
592+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1011
520#, qt-format
593#, qt-format
521msgid "%1 remaining"
594msgid "%1 remaining"
522msgstr "%1 preostalo"
595msgstr "%1 preostalo"
523
596
524−#: qml/Panel/Indicators/MenuItemFactory.qml:995
597+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1017
525msgid "In queue…"
598msgid "In queue…"
526msgstr "U red..."
599msgstr "U red..."
527
600
528−#: qml/Panel/Indicators/MenuItemFactory.qml:999
601+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1021
529msgid "Downloading"
602msgid "Downloading"
530msgstr "Preuzimanje"
603msgstr "Preuzimanje"
531
604
532−#: qml/Panel/Indicators/MenuItemFactory.qml:1001
605+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1023
533msgid "Paused, tap to resume"
606msgid "Paused, tap to resume"
534msgstr "Pauzirano, kucnuti za nastavak"
607msgstr "Pauzirano, kucnuti za nastavak"
535
608
536−#: qml/Panel/Indicators/MenuItemFactory.qml:1003
609+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1025
537msgid "Canceled"
610msgid "Canceled"
538msgstr "Otkazano"
611msgstr "Otkazano"
539
612
540−#: qml/Panel/Indicators/MenuItemFactory.qml:1005
613+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1027
541msgid "Finished"
614msgid "Finished"
542msgstr "Završeno"
615msgstr "Završeno"
543
616
544−#: qml/Panel/Indicators/MenuItemFactory.qml:1007
617+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1029
545msgid "Failed, tap to retry"
618msgid "Failed, tap to retry"
546msgstr "Neuspjelo, kucnuti za ponavljanje"
619msgstr "Neuspjelo, kucnuti za ponavljanje"
547
620
@@ -561,12 +634,16 @@ msgctxt "Button: Call back on phone"
561msgid "Call back"
634msgid "Call back"
562msgstr "Uzvrati poziv"
635msgstr "Uzvrati poziv"
563
636
637+#: qml/Panel/PanelMenuPage.qml:92
638+msgid "Back"
639+msgstr ""
640+
564#: qml/Stage/SideStage.qml:76
641#: qml/Stage/SideStage.qml:76
565msgid "Drag using 3 fingers any application from one window to the other"
642msgid "Drag using 3 fingers any application from one window to the other"
566msgstr ""
643msgstr ""
567
644
568#: qml/Tutorial/TutorialLeftLong.qml:49
645#: qml/Tutorial/TutorialLeftLong.qml:49
569−msgid "Long swipe from the left edge to open the Today scope"
646+msgid "Long swipe from the left edge to open the Application Drawer"
570msgstr ""
647msgstr ""
571
648
572#: qml/Tutorial/TutorialLeft.qml:47
649#: qml/Tutorial/TutorialLeft.qml:47
@@ -595,7 +672,7 @@ msgid "Language"
595msgstr ""
672msgstr ""
596
673
597#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
674#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
598−#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
675+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/40-location.qml:271
599#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
676#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
600#: qml/Wizard/Pages/70-passwd-type.qml:145
677#: qml/Wizard/Pages/70-passwd-type.qml:145
601#: qml/Wizard/Pages/75-report-check.qml:84
678#: qml/Wizard/Pages/75-report-check.qml:84
@@ -616,25 +693,24 @@ msgstr ""
616msgid "Keyboard layout"
693msgid "Keyboard layout"
617msgstr ""
694msgstr ""
618
695
619−#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
696+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:206
620−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
697+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/sim.qml:101
621−#: qml/Wizard/Pages/sim.qml:101
622msgid "Skip"
698msgid "Skip"
623msgstr "Preskočite"
699msgstr "Preskočite"
624
700
625−#: qml/Wizard/Pages/30-wifi.qml:31
701+#: qml/Wizard/Pages/30-wifi.qml:30
626msgid "Connect to Wi‑Fi"
702msgid "Connect to Wi‑Fi"
627msgstr "Povezati na Wi-Fi"
703msgstr "Povezati na Wi-Fi"
628
704
629−#: qml/Wizard/Pages/30-wifi.qml:132
705+#: qml/Wizard/Pages/30-wifi.qml:131
630msgid "Connected"
706msgid "Connected"
631msgstr ""
707msgstr ""
632
708
633−#: qml/Wizard/Pages/30-wifi.qml:165
709+#: qml/Wizard/Pages/30-wifi.qml:164
634msgid "Available Wi-Fi networks"
710msgid "Available Wi-Fi networks"
635msgstr ""
711msgstr ""
636
712
637−#: qml/Wizard/Pages/30-wifi.qml:166
713+#: qml/Wizard/Pages/30-wifi.qml:165
638msgid "No available Wi-Fi networks"
714msgid "No available Wi-Fi networks"
639msgstr ""
715msgstr ""
640
716
@@ -721,35 +797,6 @@ msgstr ""
721msgid "Privacy policy"
797msgid "Privacy policy"
722msgstr ""
798msgstr ""
723
799
724−#: qml/Wizard/Pages/77-system-update.qml:28
725−msgid "Update Device"
726−msgstr ""
727−
728−#: qml/Wizard/Pages/77-system-update.qml:55
729−msgid ""
730−"There is a system update available and ready to install. Afterwards, the "
731−"device will automatically restart."
732−msgstr ""
733−
734−#: qml/Wizard/Pages/77-system-update.qml:76
735−msgctxt "string identifying name of the update"
736−msgid "Ubuntu system"
737−msgstr ""
738−
739−#: qml/Wizard/Pages/77-system-update.qml:83
740−#, qt-format
741−msgctxt "version of the system update"
742−msgid "Version %1"
743−msgstr ""
744−
745−#: qml/Wizard/Pages/77-system-update.qml:102
746−msgid "This could take a few minutes..."
747−msgstr ""
748−
749−#: qml/Wizard/Pages/77-system-update.qml:116
750−msgid "Install and restart now"
751−msgstr ""
752−
753#: qml/Wizard/Pages/80-finished.qml:89
800#: qml/Wizard/Pages/80-finished.qml:89
754msgid "Welcome to Ubuntu"
801msgid "Welcome to Ubuntu"
755msgstr ""
802msgstr ""
po/ca.po+227−147
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-11-16 10:44+0000\n"
10+"POT-Creation-Date: 2017-04-04 22:56+0000\n"
11"PO-Revision-Date: 2016-11-11 06:30+0000\n"
11"PO-Revision-Date: 2016-11-11 06:30+0000\n"
12"Last-Translator: Walter Garcia-Fontes <walter.garcia@upf.edu>\n"
12"Last-Translator: Walter Garcia-Fontes <walter.garcia@upf.edu>\n"
13"Language-Team: Catalan <ca@li.org>\n"
13"Language-Team: Catalan <ca@li.org>\n"
@@ -15,75 +15,103 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-11-23 06:34+0000\n"
18+"X-Launchpad-Export-Date: 2017-04-07 06:29+0000\n"
19−"X-Generator: Launchpad (build 18269)\n"
19+"X-Generator: Launchpad (build 18343)\n"
20
20
21−#: plugins/LightDM/Greeter.cpp:123
21+#: plugins/LightDM/Greeter.cpp:188
22msgid "Password: "
22msgid "Password: "
23msgstr "Contrasenya: "
23msgstr "Contrasenya: "
24
24
25+#: plugins/LightDM/Greeter.cpp:203
26+msgid "Username"
27+msgstr "Nom d'usuari"
28+
29+#: plugins/LightDM/Greeter.cpp:242
30+msgid "Failed to authenticate"
31+msgstr "Ha fallat l'autenticació"
32+
33+#: plugins/LightDM/Greeter.cpp:244
34+msgid "Invalid password, please try again"
35+msgstr "La contrasenya no és vàlida, torneu-ho a provar"
36+
37+#: plugins/LightDM/Greeter.cpp:254
38+msgid "Log In"
39+msgstr "Inici de sessió"
40+
41+#: plugins/LightDM/Greeter.cpp:254
42+msgid "Retry"
43+msgstr "Torna-ho a provar"
44+
45+#: plugins/LightDM/UsersModel.cpp:157
46+msgid "Login"
47+msgstr "Inicia la sessió"
48+
49+#: plugins/LightDM/UsersModel.cpp:165
50+msgid "Guest Session"
51+msgstr "Sessió de convidat"
52+
25#: plugins/Unity/Launcher/launcheritem.cpp:49
53#: plugins/Unity/Launcher/launcheritem.cpp:49
26−#: plugins/Unity/Launcher/launcheritem.cpp:108
54+#: plugins/Unity/Launcher/launcheritem.cpp:123
27msgid "Pin shortcut"
55msgid "Pin shortcut"
28msgstr "Enganxa la drecera"
56msgstr "Enganxa la drecera"
29
57
30−#: plugins/Unity/Launcher/launcheritem.cpp:54
58+#: plugins/Unity/Launcher/launcheritem.cpp:55
31msgid "Quit"
59msgid "Quit"
32msgstr "Surt"
60msgstr "Surt"
33
61
34−#: plugins/Unity/Launcher/launcheritem.cpp:108
62+#: plugins/Unity/Launcher/launcheritem.cpp:123
35msgid "Unpin shortcut"
63msgid "Unpin shortcut"
36msgstr "Desenganxa la drecera"
64msgstr "Desenganxa la drecera"
37
65
38−#: qml/Components/Dialogs.qml:149
66+#: qml/Components/Dialogs.qml:176
39msgctxt "Title: Lock/Log out dialog"
67msgctxt "Title: Lock/Log out dialog"
40msgid "Log out"
68msgid "Log out"
41msgstr "Surt"
69msgstr "Surt"
42
70
43−#: qml/Components/Dialogs.qml:150
71+#: qml/Components/Dialogs.qml:177
44msgid "Are you sure you want to log out?"
72msgid "Are you sure you want to log out?"
45msgstr "Segur que voleu sortir?"
73msgstr "Segur que voleu sortir?"
46
74
47−#: qml/Components/Dialogs.qml:152
75+#: qml/Components/Dialogs.qml:180
48msgctxt "Button: Lock the system"
76msgctxt "Button: Lock the system"
49msgid "Lock"
77msgid "Lock"
50msgstr "Bloca"
78msgstr "Bloca"
51
79
52−#: qml/Components/Dialogs.qml:159
80+#: qml/Components/Dialogs.qml:191
53msgctxt "Button: Log out from the system"
81msgctxt "Button: Log out from the system"
54msgid "Log Out"
82msgid "Log Out"
55msgstr "Surt"
83msgstr "Surt"
56
84
57−#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
85+#: qml/Components/Dialogs.qml:199 qml/Components/Dialogs.qml:264
58−#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
86+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:208
59#: qml/Wizard/Pages/passcode-confirm.qml:32
87#: qml/Wizard/Pages/passcode-confirm.qml:32
60#: qml/Wizard/Pages/passcode-set.qml:32
88#: qml/Wizard/Pages/passcode-set.qml:32
61msgid "Cancel"
89msgid "Cancel"
62msgstr "Cancel·la"
90msgstr "Cancel·la"
63
91
64−#: qml/Components/Dialogs.qml:178
92+#: qml/Components/Dialogs.qml:211
65msgctxt "Title: Reboot dialog"
93msgctxt "Title: Reboot dialog"
66msgid "Reboot"
94msgid "Reboot"
67msgstr "Reinicia"
95msgstr "Reinicia"
68
96
69−#: qml/Components/Dialogs.qml:179
97+#: qml/Components/Dialogs.qml:212
70msgid "Are you sure you want to reboot?"
98msgid "Are you sure you want to reboot?"
71msgstr "Segur que voleu reiniciar?"
99msgstr "Segur que voleu reiniciar?"
72
100
73−#: qml/Components/Dialogs.qml:181
101+#: qml/Components/Dialogs.qml:215
74msgid "No"
102msgid "No"
75msgstr "No"
103msgstr "No"
76
104
77−#: qml/Components/Dialogs.qml:187
105+#: qml/Components/Dialogs.qml:223
78msgid "Yes"
106msgid "Yes"
79msgstr "Sí"
107msgstr "Sí"
80
108
81−#: qml/Components/Dialogs.qml:202
109+#: qml/Components/Dialogs.qml:239
82msgctxt "Title: Power off/Restart dialog"
110msgctxt "Title: Power off/Restart dialog"
83msgid "Power"
111msgid "Power"
84msgstr "Energia"
112msgstr "Energia"
85
113
86−#: qml/Components/Dialogs.qml:203
114+#: qml/Components/Dialogs.qml:240
87msgid ""
115msgid ""
88"Are you sure you would like\n"
116"Are you sure you would like\n"
89"to power off?"
117"to power off?"
@@ -91,12 +119,12 @@ msgstr ""
91"Segur que voleu\n"
119"Segur que voleu\n"
92"apagar?"
120"apagar?"
93
121
94−#: qml/Components/Dialogs.qml:205
122+#: qml/Components/Dialogs.qml:244
95msgctxt "Button: Power off the system"
123msgctxt "Button: Power off the system"
96msgid "Power off"
124msgid "Power off"
97msgstr "Apaga"
125msgstr "Apaga"
98
126
99−#: qml/Components/Dialogs.qml:214
127+#: qml/Components/Dialogs.qml:255
100msgctxt "Button: Restart the system"
128msgctxt "Button: Restart the system"
101msgid "Restart"
129msgid "Restart"
102msgstr "Reinicia"
130msgstr "Reinicia"
@@ -122,8 +150,8 @@ msgid "Alt + PrtScr"
122msgstr "Alt + ImprPant"
150msgstr "Alt + ImprPant"
123
151
124#: qml/Components/KeyboardShortcutsOverlay.qml:80
152#: qml/Components/KeyboardShortcutsOverlay.qml:80
125−msgid "Takes a screenshot of a window."
153+msgid "Takes a screenshot of the current window."
126−msgstr "Crea una captura de pantalla d'una finestra"
154+msgstr "Feu una captura de pantalla de la finestra actual."
127
155
128#: qml/Components/KeyboardShortcutsOverlay.qml:88
156#: qml/Components/KeyboardShortcutsOverlay.qml:88
129msgid "Super + Space"
157msgid "Super + Space"
@@ -141,127 +169,143 @@ msgstr "Super + Maj + Espai"
141msgid "Switches to previous keyboard layout."
169msgid "Switches to previous keyboard layout."
142msgstr "Canvia a la disposició prèvia de teclat."
170msgstr "Canvia a la disposició prèvia de teclat."
143
171
144−#: qml/Components/KeyboardShortcutsOverlay.qml:118
172+#: qml/Components/KeyboardShortcutsOverlay.qml:114
173+msgid "Ctrl + Alt + T"
174+msgstr "Ctrl + Alt + T"
175+
176+#: qml/Components/KeyboardShortcutsOverlay.qml:119
177+msgid "Starts the Terminal application."
178+msgstr "Inicia l'aplicació Terminal"
179+
180+#: qml/Components/KeyboardShortcutsOverlay.qml:131
145msgid "Launcher"
181msgid "Launcher"
146msgstr "Llançador"
182msgstr "Llançador"
147
183
148−#: qml/Components/KeyboardShortcutsOverlay.qml:125
184+#: qml/Components/KeyboardShortcutsOverlay.qml:138
149msgid "Super (Hold)"
185msgid "Super (Hold)"
150msgstr "Super (Mantingut)"
186msgstr "Super (Mantingut)"
151
187
152−#: qml/Components/KeyboardShortcutsOverlay.qml:130
188+#: qml/Components/KeyboardShortcutsOverlay.qml:143
153msgid "Opens the launcher, displays shortcuts."
189msgid "Opens the launcher, displays shortcuts."
154msgstr "Obre el llançador, mostre les dreceres."
190msgstr "Obre el llançador, mostre les dreceres."
155
191
156−#: qml/Components/KeyboardShortcutsOverlay.qml:138
192+#: qml/Components/KeyboardShortcutsOverlay.qml:151
157msgid "Alt + F1"
193msgid "Alt + F1"
158msgstr "Alt + F1"
194msgstr "Alt + F1"
159
195
160−#: qml/Components/KeyboardShortcutsOverlay.qml:143
196+#: qml/Components/KeyboardShortcutsOverlay.qml:156
161msgid "Opens launcher keyboard navigation mode."
197msgid "Opens launcher keyboard navigation mode."
162msgstr "Obre el mode de navegació de teclat del llançador."
198msgstr "Obre el mode de navegació de teclat del llançador."
163
199
164−#: qml/Components/KeyboardShortcutsOverlay.qml:151
200+#: qml/Components/KeyboardShortcutsOverlay.qml:164
165msgid "Super + Tab"
201msgid "Super + Tab"
166msgstr "Super + Tab"
202msgstr "Super + Tab"
167
203
168−#: qml/Components/KeyboardShortcutsOverlay.qml:156
204+#: qml/Components/KeyboardShortcutsOverlay.qml:169
169msgid "Switches applications via the launcher."
205msgid "Switches applications via the launcher."
170msgstr "Commuta les aplicacions mitjançant el llançador."
206msgstr "Commuta les aplicacions mitjançant el llançador."
171
207
172−#: qml/Components/KeyboardShortcutsOverlay.qml:164
208+#: qml/Components/KeyboardShortcutsOverlay.qml:177
173−msgid "Super + 0 to 9"
209+msgid "Super + 1 to 0"
174−msgstr "Super + 0 a 9"
210+msgstr "Súper +1 a 0"
175
211
176−#: qml/Components/KeyboardShortcutsOverlay.qml:169
212+#: qml/Components/KeyboardShortcutsOverlay.qml:182
177msgid "Same as clicking on a launcher icon."
213msgid "Same as clicking on a launcher icon."
178msgstr "El mateix que clicar sobre una icona del llançador."
214msgstr "El mateix que clicar sobre una icona del llançador."
179
215
180−#: qml/Components/KeyboardShortcutsOverlay.qml:181
216+#: qml/Components/KeyboardShortcutsOverlay.qml:190
217+msgid "Super + A"
218+msgstr "Súper + A"
219+
220+#: qml/Components/KeyboardShortcutsOverlay.qml:195
221+msgid "Opens the Application Drawer."
222+msgstr "Obre el calaix d'aplicacions."
223+
224+#: qml/Components/KeyboardShortcutsOverlay.qml:207
181msgid "Scopes"
225msgid "Scopes"
182msgstr "Lents"
226msgstr "Lents"
183
227
184−#: qml/Components/KeyboardShortcutsOverlay.qml:188
228+#: qml/Components/KeyboardShortcutsOverlay.qml:214
185msgid "Super (Tap)"
229msgid "Super (Tap)"
186msgstr "Super (Toc)"
230msgstr "Super (Toc)"
187
231
188−#: qml/Components/KeyboardShortcutsOverlay.qml:193
232+#: qml/Components/KeyboardShortcutsOverlay.qml:219
189msgid "Opens the Scopes home."
233msgid "Opens the Scopes home."
190msgstr "Obre la pàgina d'inici dels lents."
234msgstr "Obre la pàgina d'inici dels lents."
191
235
192−#: qml/Components/KeyboardShortcutsOverlay.qml:209
236+#: qml/Components/KeyboardShortcutsOverlay.qml:235
193msgid "Switching"
237msgid "Switching"
194msgstr "Commutació"
238msgstr "Commutació"
195
239
196−#: qml/Components/KeyboardShortcutsOverlay.qml:216
240+#: qml/Components/KeyboardShortcutsOverlay.qml:242
197msgid "Alt + Tab"
241msgid "Alt + Tab"
198msgstr "Alt + Tab"
242msgstr "Alt + Tab"
199
243
200−#: qml/Components/KeyboardShortcutsOverlay.qml:221
244+#: qml/Components/KeyboardShortcutsOverlay.qml:247
201msgid "Switches between applications."
245msgid "Switches between applications."
202msgstr "Commuta entre aplicacions."
246msgstr "Commuta entre aplicacions."
203
247
204−#: qml/Components/KeyboardShortcutsOverlay.qml:229
248+#: qml/Components/KeyboardShortcutsOverlay.qml:255
205msgid "Super + W"
249msgid "Super + W"
206msgstr "Super + W"
250msgstr "Super + W"
207
251
208−#: qml/Components/KeyboardShortcutsOverlay.qml:234
252+#: qml/Components/KeyboardShortcutsOverlay.qml:260
209msgid "Opens the desktop spread."
253msgid "Opens the desktop spread."
210msgstr "Obre la distribució de l'escriptori."
254msgstr "Obre la distribució de l'escriptori."
211
255
212−#: qml/Components/KeyboardShortcutsOverlay.qml:242
256+#: qml/Components/KeyboardShortcutsOverlay.qml:268
213msgid "Cursor Left or Right"
257msgid "Cursor Left or Right"
214msgstr "Cursor dreta o esquerra"
258msgstr "Cursor dreta o esquerra"
215
259
216−#: qml/Components/KeyboardShortcutsOverlay.qml:247
260+#: qml/Components/KeyboardShortcutsOverlay.qml:273
217msgid "Moves the focus."
261msgid "Moves the focus."
218msgstr "Mou el focus"
262msgstr "Mou el focus"
219
263
220−#: qml/Components/KeyboardShortcutsOverlay.qml:259
264+#: qml/Components/KeyboardShortcutsOverlay.qml:285
221msgid "Windows"
265msgid "Windows"
222msgstr "Finestres"
266msgstr "Finestres"
223
267
224−#: qml/Components/KeyboardShortcutsOverlay.qml:266
268+#: qml/Components/KeyboardShortcutsOverlay.qml:292
225msgid "Ctrl + Super + D"
269msgid "Ctrl + Super + D"
226msgstr "Ctrl + Super + D"
270msgstr "Ctrl + Super + D"
227
271
228−#: qml/Components/KeyboardShortcutsOverlay.qml:271
272+#: qml/Components/KeyboardShortcutsOverlay.qml:297
229msgid "Minimizes all windows."
273msgid "Minimizes all windows."
230msgstr "Minimitza totes les finestres."
274msgstr "Minimitza totes les finestres."
231
275
232−#: qml/Components/KeyboardShortcutsOverlay.qml:279
276+#: qml/Components/KeyboardShortcutsOverlay.qml:305
233msgid "Ctrl + Super + Up"
277msgid "Ctrl + Super + Up"
234msgstr "Ctrl + Super + Amunt"
278msgstr "Ctrl + Super + Amunt"
235
279
236−#: qml/Components/KeyboardShortcutsOverlay.qml:284
280+#: qml/Components/KeyboardShortcutsOverlay.qml:310
237msgid "Maximizes the current window."
281msgid "Maximizes the current window."
238msgstr "Maximitza la finestra actual."
282msgstr "Maximitza la finestra actual."
239
283
240−#: qml/Components/KeyboardShortcutsOverlay.qml:292
284+#: qml/Components/KeyboardShortcutsOverlay.qml:318
241msgid "Ctrl + Super + Down"
285msgid "Ctrl + Super + Down"
242msgstr "Ctrl + Super + Avall"
286msgstr "Ctrl + Super + Avall"
243
287
244−#: qml/Components/KeyboardShortcutsOverlay.qml:297
288+#: qml/Components/KeyboardShortcutsOverlay.qml:323
245msgid "Minimizes or restores the current window."
289msgid "Minimizes or restores the current window."
246msgstr "Minimitza o restaura la finestra actual."
290msgstr "Minimitza o restaura la finestra actual."
247
291
248−#: qml/Components/KeyboardShortcutsOverlay.qml:305
292+#: qml/Components/KeyboardShortcutsOverlay.qml:331
249msgid "Ctrl + Super + Left or Right"
293msgid "Ctrl + Super + Left or Right"
250msgstr "Ctrl + Super + Esquerra o Dreta"
294msgstr "Ctrl + Super + Esquerra o Dreta"
251
295
252−#: qml/Components/KeyboardShortcutsOverlay.qml:310
296+#: qml/Components/KeyboardShortcutsOverlay.qml:336
253msgid "Semi-maximizes the current window."
297msgid "Semi-maximizes the current window."
254msgstr "Semi-maximitza la finestra actual."
298msgstr "Semi-maximitza la finestra actual."
255
299
256−#: qml/Components/KeyboardShortcutsOverlay.qml:318
300+#: qml/Components/KeyboardShortcutsOverlay.qml:344
257msgid "Alt + F4"
301msgid "Alt + F4"
258msgstr "Alt + F4"
302msgstr "Alt + F4"
259
303
260−#: qml/Components/KeyboardShortcutsOverlay.qml:323
304+#: qml/Components/KeyboardShortcutsOverlay.qml:349
261msgid "Closes the current window."
305msgid "Closes the current window."
262msgstr "Tanca la finestra actual."
306msgstr "Tanca la finestra actual."
263
307
264−#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
308+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:228
265msgid "Return to Call"
309msgid "Return to Call"
266msgstr "Torna a la trucada"
310msgstr "Torna a la trucada"
267
311
@@ -269,7 +313,7 @@ msgstr "Torna a la trucada"
269msgid "Emergency Call"
313msgid "Emergency Call"
270msgstr "Trucada d'emergència"
314msgstr "Trucada d'emergència"
271
315
272−#: qml/Components/Lockscreen.qml:244
316+#: qml/Components/Lockscreen.qml:245
273msgid "OK"
317msgid "OK"
274msgstr "D'acord"
318msgstr "D'acord"
275
319
@@ -283,11 +327,11 @@ msgstr "%1:%2:%3"
283msgid "%1:%2"
327msgid "%1:%2"
284msgstr "%1:%2"
328msgstr "%1:%2"
285
329
286−#: qml/Components/ModeSwitchWarningDialog.qml:32
330+#: qml/Components/ModeSwitchWarningDialog.qml:33
287msgid "Apps may have unsaved data:"
331msgid "Apps may have unsaved data:"
288msgstr "Pot ser que aquestes aplicacions no hagin desat les dades:"
332msgstr "Pot ser que aquestes aplicacions no hagin desat les dades:"
289
333
290−#: qml/Components/ModeSwitchWarningDialog.qml:57
334+#: qml/Components/ModeSwitchWarningDialog.qml:60
291msgctxt ""
335msgctxt ""
292"Re-dock means connect the device again to an external screen/mouse/keyboard"
336"Re-dock means connect the device again to an external screen/mouse/keyboard"
293msgid "Re-dock, save your work and close these apps to continue."
337msgid "Re-dock, save your work and close these apps to continue."
@@ -295,19 +339,19 @@ msgstr ""
295"Torneu a acoblar, deseu la vostra feina i tanqueu aquestes aplicacions abans "
339"Torneu a acoblar, deseu la vostra feina i tanqueu aquestes aplicacions abans "
296"de continuar."
340"de continuar."
297
341
298−#: qml/Components/ModeSwitchWarningDialog.qml:63
342+#: qml/Components/ModeSwitchWarningDialog.qml:67
299msgid "Or force close now (unsaved data will be lost)."
343msgid "Or force close now (unsaved data will be lost)."
300msgstr "O força el tancament (les dades no desades es perdran)."
344msgstr "O força el tancament (les dades no desades es perdran)."
301
345
302−#: qml/Components/ModeSwitchWarningDialog.qml:75
346+#: qml/Components/ModeSwitchWarningDialog.qml:80
303msgid "OK, I will reconnect"
347msgid "OK, I will reconnect"
304msgstr "D'acord, tornaré a connectar"
348msgstr "D'acord, tornaré a connectar"
305
349
306−#: qml/Components/ModeSwitchWarningDialog.qml:76
350+#: qml/Components/ModeSwitchWarningDialog.qml:81
307msgid "Reconnect now!"
351msgid "Reconnect now!"
308msgstr "Torna a connectar"
352msgstr "Torna a connectar"
309
353
310−#: qml/Components/ModeSwitchWarningDialog.qml:88
354+#: qml/Components/ModeSwitchWarningDialog.qml:94
311msgid "Close all"
355msgid "Close all"
312msgstr "Tanca-ho tot"
356msgstr "Tanca-ho tot"
313
357
@@ -315,6 +359,30 @@ msgstr "Tanca-ho tot"
315msgid "Preview Share Item"
359msgid "Preview Share Item"
316msgstr "Previsualitzeu l'element a compartir"
360msgstr "Previsualitzeu l'element a compartir"
317
361
362+#: qml/Components/VirtualTouchPad.qml:317
363+msgid ""
364+"Your device is now connected to an external display. Use this screen as a "
365+"touch pad to interact with the pointer."
366+msgstr ""
367+"El vostre dispositiu està ara connectat a un monitor extern. Useu aquesta "
368+"pantalla com a ratolí tàctil per interaccionar amb el cursor."
369+
370+#: qml/Components/VirtualTouchPad.qml:327
371+msgid "Tap left button to click."
372+msgstr "Feu un toc al botó esquerre per clicar."
373+
374+#: qml/Components/VirtualTouchPad.qml:339
375+msgid "Tap right button to right click."
376+msgstr "Feu un toc al botó dret per clicar amb el botó dret."
377+
378+#: qml/Components/VirtualTouchPad.qml:351
379+msgid "Swipe with two fingers to scroll."
380+msgstr "Llisqueu amb dos dites per fer un desplaçament."
381+
382+#: qml/Components/VirtualTouchPad.qml:396
383+msgid "Find more settings in the system settings."
384+msgstr "Trobeu més configuracions als paràmetres del sistema."
385+
318#: qml/Dash/DashPageHeader.qml:361
386#: qml/Dash/DashPageHeader.qml:361
319msgctxt "Button: Open the Ubuntu Store"
387msgctxt "Button: Open the Ubuntu Store"
320msgid "Store"
388msgid "Store"
@@ -346,24 +414,24 @@ msgstr "Refineu els resultats"
346msgid "Reset"
414msgid "Reset"
347msgstr "Restableix"
415msgstr "Restableix"
348
416
349−#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
417+#: qml/Dash/GenericScopeView.qml:547 qml/Dash/GenericScopeView.qml:718
350msgid "Show less"
418msgid "Show less"
351msgstr "Mostra menys"
419msgstr "Mostra menys"
352
420
353−#: qml/Dash/GenericScopeView.qml:545
421+#: qml/Dash/GenericScopeView.qml:547
354msgid "Show all"
422msgid "Show all"
355msgstr "Mostra-ho tot"
423msgstr "Mostra-ho tot"
356
424
357−#: qml/Dash/GenericScopeView.qml:576
425+#: qml/Dash/GenericScopeView.qml:578
358msgctxt "Label: Hint for dash search line edit"
426msgctxt "Label: Hint for dash search line edit"
359msgid "Search"
427msgid "Search"
360msgstr "Cerca"
428msgstr "Cerca"
361
429
362−#: qml/Dash/PageHeaderExtraPanel.qml:57
430+#: qml/Dash/PageHeaderExtraPanel.qml:67
363msgid "Recent Searches"
431msgid "Recent Searches"
364msgstr "Cerques recents"
432msgstr "Cerques recents"
365
433
366−#: qml/Dash/PageHeaderExtraPanel.qml:68
434+#: qml/Dash/PageHeaderExtraPanel.qml:78
367msgid "Clear All"
435msgid "Clear All"
368msgstr "Neteja-ho tot"
436msgstr "Neteja-ho tot"
369
437
@@ -400,26 +468,18 @@ msgstr "Deixeu anar per actualitzar..."
400msgid "Enable location data"
468msgid "Enable location data"
401msgstr "Habilita les dades d'ubicació"
469msgstr "Habilita les dades d'ubicació"
402
470
403−#: qml/Dash/ScopesList.qml:57
471+#: qml/Dash/ScopesList.qml:146
404msgid "Manage"
472msgid "Manage"
405msgstr "Gestiona"
473msgstr "Gestiona"
406
474
407−#: qml/Dash/ScopesList.qml:104
475+#: qml/Dash/ScopesList.qml:187
408msgid "Home"
476msgid "Home"
409msgstr "Inici"
477msgstr "Inici"
410
478
411−#: qml/Dash/ScopesList.qml:105
479+#: qml/Dash/ScopesList.qml:188
412msgid "Also installed"
480msgid "Also installed"
413msgstr "També instal·lat"
481msgstr "També instal·lat"
414
482
415−#: qml/DisabledScreenNotice.qml:109
416−msgid ""
417−"Your device is now connected to an external display. Use this screen as a "
418−"touch pad to interact with the pointer."
419−msgstr ""
420−"El vostre dispositiu està ara connectat a un monitor extern. Useu aquesta "
421−"pantalla com a ratolí tàctil per interaccionar amb el cursor."
422−
423#: qml/Greeter/CoverPage.qml:127
483#: qml/Greeter/CoverPage.qml:127
424msgid "Unlock"
484msgid "Unlock"
425msgstr "Desbloca"
485msgstr "Desbloca"
@@ -447,33 +507,46 @@ msgid_plural "Please wait %1 minutes and then try again…"
447msgstr[0] "Espereu %1 minut i torneu-ho a intentar..."
507msgstr[0] "Espereu %1 minut i torneu-ho a intentar..."
448msgstr[1] "Espereu %1 minuts i torneu-ho a intentar..."
508msgstr[1] "Espereu %1 minuts i torneu-ho a intentar..."
449
509
450−#: qml/Greeter/Greeter.qml:596
510+#: qml/Greeter/Greeter.qml:550
451msgid "Try again"
511msgid "Try again"
452msgstr "Torna-ho a provar"
512msgstr "Torna-ho a provar"
453
513
454−#: qml/Greeter/LoginList.qml:70
514+#: qml/Greeter/Greeter.qml:551
515+msgid "Enter passphrase to unlock"
516+msgstr "Introduïu la contrasenya per desbloquejar"
517+
518+#: qml/Greeter/Greeter.qml:552
519+msgid "Enter passcode to unlock"
520+msgstr "Entreu el codi per desbloquejar"
521+
522+#: qml/Greeter/NarrowView.qml:228
523+msgid "Emergency"
524+msgstr "Emergència"
525+
526+#: qml/Greeter/PromptList.qml:126
455msgid "Passphrase"
527msgid "Passphrase"
456msgstr "Contrasenya"
528msgstr "Contrasenya"
457
529
458−#: qml/Greeter/LoginList.qml:71
530+#: qml/Greeter/PromptList.qml:126
459msgid "Passcode"
531msgid "Passcode"
460msgstr "Codi d'accés"
532msgstr "Codi d'accés"
461
533
462−#: qml/Greeter/LoginList.qml:98
534+#: qml/Greeter/SessionsList.qml:124
463−msgid "Retry"
535+msgid "Select desktop environment"
464−msgstr "Torna-ho a provar"
536+msgstr "Seleccioneu l'entorn d'escriptori"
465
537
466−#: qml/Greeter/LoginList.qml:99
538+#: qml/Launcher/Drawer.qml:94
467−msgid "Log In"
539+msgid "Search…"
468−msgstr "Inici de sessió"
540+msgstr "Cerca…"
469
541
470−#: qml/Greeter/NarrowView.qml:252
542+#: qml/Launcher/Drawer.qml:129
543+msgctxt "Apps sorted alphabetically"
471−msgid "Emergency"
544+msgid "A-Z"
472−msgstr "Emergència"
545+msgstr "A-Z"
473
546
474−#: qml/Greeter/SessionsList.qml:122
547+#: qml/Launcher/MoreAppsHeader.qml:55
475−msgid "Select desktop environment"
548+msgid "More apps in the store"
476−msgstr "Seleccioneu l'entorn d'escriptori"
549+msgstr "Més aplicacions a la botiga"
477
550
478#: qml/Notifications/NotificationMenuItemFactory.qml:124
551#: qml/Notifications/NotificationMenuItemFactory.qml:124
479msgid "Show password"
552msgid "Show password"
@@ -487,62 +560,62 @@ msgstr "Feu un toc per tornar a la trucada..."
487msgid "Conference"
560msgid "Conference"
488msgstr "Conferència"
561msgstr "Conferència"
489
562
490−#: qml/Panel/Indicators/MenuItemFactory.qml:847
563+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:869
491msgid "Nothing is playing"
564msgid "Nothing is playing"
492msgstr "No s'està reproduint res"
565msgstr "No s'està reproduint res"
493
566
494−#: qml/Panel/Indicators/MenuItemFactory.qml:975
567+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:997
495#, qt-format
568#, qt-format
496msgid "%1 hour"
569msgid "%1 hour"
497msgid_plural "%1 hours"
570msgid_plural "%1 hours"
498msgstr[0] "%1 hora"
571msgstr[0] "%1 hora"
499msgstr[1] "%1 hores"
572msgstr[1] "%1 hores"
500
573
501−#: qml/Panel/Indicators/MenuItemFactory.qml:979
574+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1001
502#, qt-format
575#, qt-format
503msgid "%1 minute"
576msgid "%1 minute"
504msgid_plural "%1 minutes"
577msgid_plural "%1 minutes"
505msgstr[0] "%1 minut"
578msgstr[0] "%1 minut"
506msgstr[1] "%1 minuts"
579msgstr[1] "%1 minuts"
507
580
508−#: qml/Panel/Indicators/MenuItemFactory.qml:984
581+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1006
509#, qt-format
582#, qt-format
510msgid "%1 second"
583msgid "%1 second"
511msgid_plural "%1 seconds"
584msgid_plural "%1 seconds"
512msgstr[0] "%1 segon"
585msgstr[0] "%1 segon"
513msgstr[1] "%1 segons"
586msgstr[1] "%1 segons"
514
587
515−#: qml/Panel/Indicators/MenuItemFactory.qml:987
588+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1009
516msgid "0 seconds"
589msgid "0 seconds"
517msgstr "0 segons"
590msgstr "0 segons"
518
591
519#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
592#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
520−#: qml/Panel/Indicators/MenuItemFactory.qml:989
593+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1011
521#, qt-format
594#, qt-format
522msgid "%1 remaining"
595msgid "%1 remaining"
523msgstr "Resta %1"
596msgstr "Resta %1"
524
597
525−#: qml/Panel/Indicators/MenuItemFactory.qml:995
598+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1017
526msgid "In queue…"
599msgid "In queue…"
527msgstr "A la cua..."
600msgstr "A la cua..."
528
601
529−#: qml/Panel/Indicators/MenuItemFactory.qml:999
602+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1021
530msgid "Downloading"
603msgid "Downloading"
531msgstr "S'està baixant"
604msgstr "S'està baixant"
532
605
533−#: qml/Panel/Indicators/MenuItemFactory.qml:1001
606+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1023
534msgid "Paused, tap to resume"
607msgid "Paused, tap to resume"
535msgstr "En pausa, feu un toc per continuar"
608msgstr "En pausa, feu un toc per continuar"
536
609
537−#: qml/Panel/Indicators/MenuItemFactory.qml:1003
610+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1025
538msgid "Canceled"
611msgid "Canceled"
539msgstr "S'ha cancel·lat"
612msgstr "S'ha cancel·lat"
540
613
541−#: qml/Panel/Indicators/MenuItemFactory.qml:1005
614+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1027
542msgid "Finished"
615msgid "Finished"
543msgstr "S'ha finalitzat"
616msgstr "S'ha finalitzat"
544
617
545−#: qml/Panel/Indicators/MenuItemFactory.qml:1007
618+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1029
546msgid "Failed, tap to retry"
619msgid "Failed, tap to retry"
547msgstr "Ha fallat, feu un toc per tornar-ho a intentar"
620msgstr "Ha fallat, feu un toc per tornar-ho a intentar"
548
621
@@ -562,15 +635,19 @@ msgctxt "Button: Call back on phone"
562msgid "Call back"
635msgid "Call back"
563msgstr "Retorna la trucada"
636msgstr "Retorna la trucada"
564
637
638+#: qml/Panel/PanelMenuPage.qml:92
639+msgid "Back"
640+msgstr "Enrere"
641+
565#: qml/Stage/SideStage.qml:76
642#: qml/Stage/SideStage.qml:76
566msgid "Drag using 3 fingers any application from one window to the other"
643msgid "Drag using 3 fingers any application from one window to the other"
567msgstr ""
644msgstr ""
568"Arrossegueu usant 3 dits qualsevol aplicació d'una finestra a una altra"
645"Arrossegueu usant 3 dits qualsevol aplicació d'una finestra a una altra"
569
646
570#: qml/Tutorial/TutorialLeftLong.qml:49
647#: qml/Tutorial/TutorialLeftLong.qml:49
571−msgid "Long swipe from the left edge to open the Today scope"
648+msgid "Long swipe from the left edge to open the Application Drawer"
572msgstr ""
649msgstr ""
573−"Feu una lliscada llarga des de la vora esquerra per obrir l'àmbit Avui"
650+"Llisqueu llarg des de la vora esquerra per obrir al Calaix d'aplicacions"
574
651
575#: qml/Tutorial/TutorialLeft.qml:47
652#: qml/Tutorial/TutorialLeft.qml:47
576msgid "Short swipe from the left edge to open the launcher"
653msgid "Short swipe from the left edge to open the launcher"
@@ -604,7 +681,7 @@ msgid "Language"
604msgstr "Llengua"
681msgstr "Llengua"
605
682
606#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
683#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
607−#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
684+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/40-location.qml:271
608#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
685#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
609#: qml/Wizard/Pages/70-passwd-type.qml:145
686#: qml/Wizard/Pages/70-passwd-type.qml:145
610#: qml/Wizard/Pages/75-report-check.qml:84
687#: qml/Wizard/Pages/75-report-check.qml:84
@@ -625,25 +702,24 @@ msgstr "Llengua del teclat"
625msgid "Keyboard layout"
702msgid "Keyboard layout"
626msgstr "Disposició del teclat"
703msgstr "Disposició del teclat"
627
704
628−#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
705+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:206
629−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
706+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/sim.qml:101
630−#: qml/Wizard/Pages/sim.qml:101
631msgid "Skip"
707msgid "Skip"
632msgstr "Omet"
708msgstr "Omet"
633
709
634−#: qml/Wizard/Pages/30-wifi.qml:31
710+#: qml/Wizard/Pages/30-wifi.qml:30
635msgid "Connect to Wi‑Fi"
711msgid "Connect to Wi‑Fi"
636msgstr "Connecta't a la Wi-Fi"
712msgstr "Connecta't a la Wi-Fi"
637
713
638−#: qml/Wizard/Pages/30-wifi.qml:132
714+#: qml/Wizard/Pages/30-wifi.qml:131
639msgid "Connected"
715msgid "Connected"
640msgstr "Connectat"
716msgstr "Connectat"
641
717
642−#: qml/Wizard/Pages/30-wifi.qml:165
718+#: qml/Wizard/Pages/30-wifi.qml:164
643msgid "Available Wi-Fi networks"
719msgid "Available Wi-Fi networks"
644msgstr "Xarxes Wi-Fi disponibles"
720msgstr "Xarxes Wi-Fi disponibles"
645
721
646−#: qml/Wizard/Pages/30-wifi.qml:166
722+#: qml/Wizard/Pages/30-wifi.qml:165
647msgid "No available Wi-Fi networks"
723msgid "No available Wi-Fi networks"
648msgstr "No hi ha xarxes Wi-Fi disponibles"
724msgstr "No hi ha xarxes Wi-Fi disponibles"
649
725
@@ -733,37 +809,6 @@ msgstr ""
733msgid "Privacy policy"
809msgid "Privacy policy"
734msgstr "Política de privacitat"
810msgstr "Política de privacitat"
735
811
736−#: qml/Wizard/Pages/77-system-update.qml:28
737−msgid "Update Device"
738−msgstr "Actualitza el dispositiu"
739−
740−#: qml/Wizard/Pages/77-system-update.qml:55
741−msgid ""
742−"There is a system update available and ready to install. Afterwards, the "
743−"device will automatically restart."
744−msgstr ""
745−"Hi ha una actualització del sistema disponible i llesta per instal·lar. "
746−"Després, el dispositiu es reiniciarà automàticament."
747−
748−#: qml/Wizard/Pages/77-system-update.qml:76
749−msgctxt "string identifying name of the update"
750−msgid "Ubuntu system"
751−msgstr "Sistema de l'Ubuntu"
752−
753−#: qml/Wizard/Pages/77-system-update.qml:83
754−#, qt-format
755−msgctxt "version of the system update"
756−msgid "Version %1"
757−msgstr "Versió %1"
758−
759−#: qml/Wizard/Pages/77-system-update.qml:102
760−msgid "This could take a few minutes..."
761−msgstr "Això pot trigar uns pocs minuts..."
762−
763−#: qml/Wizard/Pages/77-system-update.qml:116
764−msgid "Install and restart now"
765−msgstr "Instal·la i reinicia ara"
766−
767#: qml/Wizard/Pages/80-finished.qml:89
812#: qml/Wizard/Pages/80-finished.qml:89
768msgid "Welcome to Ubuntu"
813msgid "Welcome to Ubuntu"
769msgstr "Us donem la benvinguda a l'Ubuntu"
814msgstr "Us donem la benvinguda a l'Ubuntu"
@@ -1333,5 +1378,40 @@ msgstr "La contrasenya és molt dèbil"
1333#~ msgid "Swipe up to manage the app"
1378#~ msgid "Swipe up to manage the app"
1334#~ msgstr "Llisqueu cap amunt per gestionar l'aplicació"
1379#~ msgstr "Llisqueu cap amunt per gestionar l'aplicació"
1335
1380
1381+#~ msgid "Long swipe from the left edge to open the Today scope"
1382+#~ msgstr ""
1383+#~ "Feu una lliscada llarga des de la vora esquerra per obrir l'àmbit Avui"
1384+
1336#~ msgid "Swipe up to add a contact"
1385#~ msgid "Swipe up to add a contact"
1337#~ msgstr "Llisqueu per afegir un contacte"
1386#~ msgstr "Llisqueu per afegir un contacte"
1387+
1388+#~ msgid "Takes a screenshot of a window."
1389+#~ msgstr "Crea una captura de pantalla d'una finestra"
1390+
1391+#~ msgid "Super + 0 to 9"
1392+#~ msgstr "Super + 0 a 9"
1393+
1394+#~ msgctxt "string identifying name of the update"
1395+#~ msgid "Ubuntu system"
1396+#~ msgstr "Sistema de l'Ubuntu"
1397+
1398+#~ msgid "Update Device"
1399+#~ msgstr "Actualitza el dispositiu"
1400+
1401+#~ msgid "Install and restart now"
1402+#~ msgstr "Instal·la i reinicia ara"
1403+
1404+#~ msgid "This could take a few minutes..."
1405+#~ msgstr "Això pot trigar uns pocs minuts..."
1406+
1407+#, qt-format
1408+#~ msgctxt "version of the system update"
1409+#~ msgid "Version %1"
1410+#~ msgstr "Versió %1"
1411+
1412+#~ msgid ""
1413+#~ "There is a system update available and ready to install. Afterwards, the "
1414+#~ "device will automatically restart."
1415+#~ msgstr ""
1416+#~ "Hi ha una actualització del sistema disponible i llesta per instal·lar. "
1417+#~ "Després, el dispositiu es reiniciarà automàticament."
po/ca@valencia.po+183−136
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity\n"
8"Project-Id-Version: unity\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-11-16 10:44+0000\n"
10+"POT-Creation-Date: 2017-04-04 22:56+0000\n"
11"PO-Revision-Date: 2015-02-22 15:22+0000\n"
11"PO-Revision-Date: 2015-02-22 15:22+0000\n"
12"Last-Translator: David Planella <david.planella@gmail.com>\n"
12"Last-Translator: David Planella <david.planella@gmail.com>\n"
13"Language-Team: Catalan <ca@li.org>\n"
13"Language-Team: Catalan <ca@li.org>\n"
@@ -15,75 +15,103 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-11-23 06:36+0000\n"
18+"X-Launchpad-Export-Date: 2017-04-07 06:31+0000\n"
19−"X-Generator: Launchpad (build 18269)\n"
19+"X-Generator: Launchpad (build 18343)\n"
20
20
21−#: plugins/LightDM/Greeter.cpp:123
21+#: plugins/LightDM/Greeter.cpp:188
22msgid "Password: "
22msgid "Password: "
23msgstr "Contrasenya: "
23msgstr "Contrasenya: "
24
24
25+#: plugins/LightDM/Greeter.cpp:203
26+msgid "Username"
27+msgstr ""
28+
29+#: plugins/LightDM/Greeter.cpp:242
30+msgid "Failed to authenticate"
31+msgstr ""
32+
33+#: plugins/LightDM/Greeter.cpp:244
34+msgid "Invalid password, please try again"
35+msgstr ""
36+
37+#: plugins/LightDM/Greeter.cpp:254
38+msgid "Log In"
39+msgstr ""
40+
41+#: plugins/LightDM/Greeter.cpp:254
42+msgid "Retry"
43+msgstr ""
44+
45+#: plugins/LightDM/UsersModel.cpp:157
46+msgid "Login"
47+msgstr ""
48+
49+#: plugins/LightDM/UsersModel.cpp:165
50+msgid "Guest Session"
51+msgstr ""
52+
25#: plugins/Unity/Launcher/launcheritem.cpp:49
53#: plugins/Unity/Launcher/launcheritem.cpp:49
26−#: plugins/Unity/Launcher/launcheritem.cpp:108
54+#: plugins/Unity/Launcher/launcheritem.cpp:123
27msgid "Pin shortcut"
55msgid "Pin shortcut"
28msgstr "Apega la drecera"
56msgstr "Apega la drecera"
29
57
30−#: plugins/Unity/Launcher/launcheritem.cpp:54
58+#: plugins/Unity/Launcher/launcheritem.cpp:55
31msgid "Quit"
59msgid "Quit"
32msgstr ""
60msgstr ""
33
61
34−#: plugins/Unity/Launcher/launcheritem.cpp:108
62+#: plugins/Unity/Launcher/launcheritem.cpp:123
35msgid "Unpin shortcut"
63msgid "Unpin shortcut"
36msgstr "Desenganxa la drecera"
64msgstr "Desenganxa la drecera"
37
65
38−#: qml/Components/Dialogs.qml:149
66+#: qml/Components/Dialogs.qml:176
39msgctxt "Title: Lock/Log out dialog"
67msgctxt "Title: Lock/Log out dialog"
40msgid "Log out"
68msgid "Log out"
41msgstr ""
69msgstr ""
42
70
43−#: qml/Components/Dialogs.qml:150
71+#: qml/Components/Dialogs.qml:177
44msgid "Are you sure you want to log out?"
72msgid "Are you sure you want to log out?"
45msgstr "Segur que voleu eixir?"
73msgstr "Segur que voleu eixir?"
46
74
47−#: qml/Components/Dialogs.qml:152
75+#: qml/Components/Dialogs.qml:180
48msgctxt "Button: Lock the system"
76msgctxt "Button: Lock the system"
49msgid "Lock"
77msgid "Lock"
50msgstr ""
78msgstr ""
51
79
52−#: qml/Components/Dialogs.qml:159
80+#: qml/Components/Dialogs.qml:191
53msgctxt "Button: Log out from the system"
81msgctxt "Button: Log out from the system"
54msgid "Log Out"
82msgid "Log Out"
55msgstr ""
83msgstr ""
56
84
57−#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
85+#: qml/Components/Dialogs.qml:199 qml/Components/Dialogs.qml:264
58−#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
86+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:208
59#: qml/Wizard/Pages/passcode-confirm.qml:32
87#: qml/Wizard/Pages/passcode-confirm.qml:32
60#: qml/Wizard/Pages/passcode-set.qml:32
88#: qml/Wizard/Pages/passcode-set.qml:32
61msgid "Cancel"
89msgid "Cancel"
62msgstr "Cancel·la"
90msgstr "Cancel·la"
63
91
64−#: qml/Components/Dialogs.qml:178
92+#: qml/Components/Dialogs.qml:211
65msgctxt "Title: Reboot dialog"
93msgctxt "Title: Reboot dialog"
66msgid "Reboot"
94msgid "Reboot"
67msgstr ""
95msgstr ""
68
96
69−#: qml/Components/Dialogs.qml:179
97+#: qml/Components/Dialogs.qml:212
70msgid "Are you sure you want to reboot?"
98msgid "Are you sure you want to reboot?"
71msgstr "Segur que voleu reiniciar?"
99msgstr "Segur que voleu reiniciar?"
72
100
73−#: qml/Components/Dialogs.qml:181
101+#: qml/Components/Dialogs.qml:215
74msgid "No"
102msgid "No"
75msgstr "No"
103msgstr "No"
76
104
77−#: qml/Components/Dialogs.qml:187
105+#: qml/Components/Dialogs.qml:223
78msgid "Yes"
106msgid "Yes"
79msgstr "Sí"
107msgstr "Sí"
80
108
81−#: qml/Components/Dialogs.qml:202
109+#: qml/Components/Dialogs.qml:239
82msgctxt "Title: Power off/Restart dialog"
110msgctxt "Title: Power off/Restart dialog"
83msgid "Power"
111msgid "Power"
84msgstr ""
112msgstr ""
85
113
86−#: qml/Components/Dialogs.qml:203
114+#: qml/Components/Dialogs.qml:240
87msgid ""
115msgid ""
88"Are you sure you would like\n"
116"Are you sure you would like\n"
89"to power off?"
117"to power off?"
@@ -91,12 +119,12 @@ msgstr ""
91"Segur que voleu\n"
119"Segur que voleu\n"
92"apagar?"
120"apagar?"
93
121
94−#: qml/Components/Dialogs.qml:205
122+#: qml/Components/Dialogs.qml:244
95msgctxt "Button: Power off the system"
123msgctxt "Button: Power off the system"
96msgid "Power off"
124msgid "Power off"
97msgstr ""
125msgstr ""
98
126
99−#: qml/Components/Dialogs.qml:214
127+#: qml/Components/Dialogs.qml:255
100msgctxt "Button: Restart the system"
128msgctxt "Button: Restart the system"
101msgid "Restart"
129msgid "Restart"
102msgstr ""
130msgstr ""
@@ -122,7 +150,7 @@ msgid "Alt + PrtScr"
122msgstr ""
150msgstr ""
123
151
124#: qml/Components/KeyboardShortcutsOverlay.qml:80
152#: qml/Components/KeyboardShortcutsOverlay.qml:80
125−msgid "Takes a screenshot of a window."
153+msgid "Takes a screenshot of the current window."
126msgstr ""
154msgstr ""
127
155
128#: qml/Components/KeyboardShortcutsOverlay.qml:88
156#: qml/Components/KeyboardShortcutsOverlay.qml:88
@@ -141,127 +169,143 @@ msgstr ""
141msgid "Switches to previous keyboard layout."
169msgid "Switches to previous keyboard layout."
142msgstr ""
170msgstr ""
143
171
144−#: qml/Components/KeyboardShortcutsOverlay.qml:118
172+#: qml/Components/KeyboardShortcutsOverlay.qml:114
173+msgid "Ctrl + Alt + T"
174+msgstr ""
175+
176+#: qml/Components/KeyboardShortcutsOverlay.qml:119
177+msgid "Starts the Terminal application."
178+msgstr ""
179+
180+#: qml/Components/KeyboardShortcutsOverlay.qml:131
145msgid "Launcher"
181msgid "Launcher"
146msgstr ""
182msgstr ""
147
183
148−#: qml/Components/KeyboardShortcutsOverlay.qml:125
184+#: qml/Components/KeyboardShortcutsOverlay.qml:138
149msgid "Super (Hold)"
185msgid "Super (Hold)"
150msgstr ""
186msgstr ""
151
187
152−#: qml/Components/KeyboardShortcutsOverlay.qml:130
188+#: qml/Components/KeyboardShortcutsOverlay.qml:143
153msgid "Opens the launcher, displays shortcuts."
189msgid "Opens the launcher, displays shortcuts."
154msgstr ""
190msgstr ""
155
191
156−#: qml/Components/KeyboardShortcutsOverlay.qml:138
192+#: qml/Components/KeyboardShortcutsOverlay.qml:151
157msgid "Alt + F1"
193msgid "Alt + F1"
158msgstr ""
194msgstr ""
159
195
160−#: qml/Components/KeyboardShortcutsOverlay.qml:143
196+#: qml/Components/KeyboardShortcutsOverlay.qml:156
161msgid "Opens launcher keyboard navigation mode."
197msgid "Opens launcher keyboard navigation mode."
162msgstr ""
198msgstr ""
163
199
164−#: qml/Components/KeyboardShortcutsOverlay.qml:151
200+#: qml/Components/KeyboardShortcutsOverlay.qml:164
165msgid "Super + Tab"
201msgid "Super + Tab"
166msgstr ""
202msgstr ""
167
203
168−#: qml/Components/KeyboardShortcutsOverlay.qml:156
204+#: qml/Components/KeyboardShortcutsOverlay.qml:169
169msgid "Switches applications via the launcher."
205msgid "Switches applications via the launcher."
170msgstr ""
206msgstr ""
171
207
172−#: qml/Components/KeyboardShortcutsOverlay.qml:164
208+#: qml/Components/KeyboardShortcutsOverlay.qml:177
173−msgid "Super + 0 to 9"
209+msgid "Super + 1 to 0"
174msgstr ""
210msgstr ""
175
211
176−#: qml/Components/KeyboardShortcutsOverlay.qml:169
212+#: qml/Components/KeyboardShortcutsOverlay.qml:182
177msgid "Same as clicking on a launcher icon."
213msgid "Same as clicking on a launcher icon."
178msgstr ""
214msgstr ""
179
215
180−#: qml/Components/KeyboardShortcutsOverlay.qml:181
216+#: qml/Components/KeyboardShortcutsOverlay.qml:190
217+msgid "Super + A"
218+msgstr ""
219+
220+#: qml/Components/KeyboardShortcutsOverlay.qml:195
221+msgid "Opens the Application Drawer."
222+msgstr ""
223+
224+#: qml/Components/KeyboardShortcutsOverlay.qml:207
181msgid "Scopes"
225msgid "Scopes"
182msgstr ""
226msgstr ""
183
227
184−#: qml/Components/KeyboardShortcutsOverlay.qml:188
228+#: qml/Components/KeyboardShortcutsOverlay.qml:214
185msgid "Super (Tap)"
229msgid "Super (Tap)"
186msgstr ""
230msgstr ""
187
231
188−#: qml/Components/KeyboardShortcutsOverlay.qml:193
232+#: qml/Components/KeyboardShortcutsOverlay.qml:219
189msgid "Opens the Scopes home."
233msgid "Opens the Scopes home."
190msgstr ""
234msgstr ""
191
235
192−#: qml/Components/KeyboardShortcutsOverlay.qml:209
236+#: qml/Components/KeyboardShortcutsOverlay.qml:235
193msgid "Switching"
237msgid "Switching"
194msgstr ""
238msgstr ""
195
239
196−#: qml/Components/KeyboardShortcutsOverlay.qml:216
240+#: qml/Components/KeyboardShortcutsOverlay.qml:242
197msgid "Alt + Tab"
241msgid "Alt + Tab"
198msgstr ""
242msgstr ""
199
243
200−#: qml/Components/KeyboardShortcutsOverlay.qml:221
244+#: qml/Components/KeyboardShortcutsOverlay.qml:247
201msgid "Switches between applications."
245msgid "Switches between applications."
202msgstr ""
246msgstr ""
203
247
204−#: qml/Components/KeyboardShortcutsOverlay.qml:229
248+#: qml/Components/KeyboardShortcutsOverlay.qml:255
205msgid "Super + W"
249msgid "Super + W"
206msgstr ""
250msgstr ""
207
251
208−#: qml/Components/KeyboardShortcutsOverlay.qml:234
252+#: qml/Components/KeyboardShortcutsOverlay.qml:260
209msgid "Opens the desktop spread."
253msgid "Opens the desktop spread."
210msgstr ""
254msgstr ""
211
255
212−#: qml/Components/KeyboardShortcutsOverlay.qml:242
256+#: qml/Components/KeyboardShortcutsOverlay.qml:268
213msgid "Cursor Left or Right"
257msgid "Cursor Left or Right"
214msgstr ""
258msgstr ""
215
259
216−#: qml/Components/KeyboardShortcutsOverlay.qml:247
260+#: qml/Components/KeyboardShortcutsOverlay.qml:273
217msgid "Moves the focus."
261msgid "Moves the focus."
218msgstr ""
262msgstr ""
219
263
220−#: qml/Components/KeyboardShortcutsOverlay.qml:259
264+#: qml/Components/KeyboardShortcutsOverlay.qml:285
221msgid "Windows"
265msgid "Windows"
222msgstr ""
266msgstr ""
223
267
224−#: qml/Components/KeyboardShortcutsOverlay.qml:266
268+#: qml/Components/KeyboardShortcutsOverlay.qml:292
225msgid "Ctrl + Super + D"
269msgid "Ctrl + Super + D"
226msgstr ""
270msgstr ""
227
271
228−#: qml/Components/KeyboardShortcutsOverlay.qml:271
272+#: qml/Components/KeyboardShortcutsOverlay.qml:297
229msgid "Minimizes all windows."
273msgid "Minimizes all windows."
230msgstr ""
274msgstr ""
231
275
232−#: qml/Components/KeyboardShortcutsOverlay.qml:279
276+#: qml/Components/KeyboardShortcutsOverlay.qml:305
233msgid "Ctrl + Super + Up"
277msgid "Ctrl + Super + Up"
234msgstr ""
278msgstr ""
235
279
236−#: qml/Components/KeyboardShortcutsOverlay.qml:284
280+#: qml/Components/KeyboardShortcutsOverlay.qml:310
237msgid "Maximizes the current window."
281msgid "Maximizes the current window."
238msgstr ""
282msgstr ""
239
283
240−#: qml/Components/KeyboardShortcutsOverlay.qml:292
284+#: qml/Components/KeyboardShortcutsOverlay.qml:318
241msgid "Ctrl + Super + Down"
285msgid "Ctrl + Super + Down"
242msgstr ""
286msgstr ""
243
287
244−#: qml/Components/KeyboardShortcutsOverlay.qml:297
288+#: qml/Components/KeyboardShortcutsOverlay.qml:323
245msgid "Minimizes or restores the current window."
289msgid "Minimizes or restores the current window."
246msgstr ""
290msgstr ""
247
291
248−#: qml/Components/KeyboardShortcutsOverlay.qml:305
292+#: qml/Components/KeyboardShortcutsOverlay.qml:331
249msgid "Ctrl + Super + Left or Right"
293msgid "Ctrl + Super + Left or Right"
250msgstr ""
294msgstr ""
251
295
252−#: qml/Components/KeyboardShortcutsOverlay.qml:310
296+#: qml/Components/KeyboardShortcutsOverlay.qml:336
253msgid "Semi-maximizes the current window."
297msgid "Semi-maximizes the current window."
254msgstr ""
298msgstr ""
255
299
256−#: qml/Components/KeyboardShortcutsOverlay.qml:318
300+#: qml/Components/KeyboardShortcutsOverlay.qml:344
257msgid "Alt + F4"
301msgid "Alt + F4"
258msgstr ""
302msgstr ""
259
303
260−#: qml/Components/KeyboardShortcutsOverlay.qml:323
304+#: qml/Components/KeyboardShortcutsOverlay.qml:349
261msgid "Closes the current window."
305msgid "Closes the current window."
262msgstr ""
306msgstr ""
263
307
264−#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
308+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:228
265msgid "Return to Call"
309msgid "Return to Call"
266msgstr "Torna a la cridada"
310msgstr "Torna a la cridada"
267
311
@@ -269,7 +313,7 @@ msgstr "Torna a la cridada"
269msgid "Emergency Call"
313msgid "Emergency Call"
270msgstr "Cridada d'emergència"
314msgstr "Cridada d'emergència"
271
315
272−#: qml/Components/Lockscreen.qml:244
316+#: qml/Components/Lockscreen.qml:245
273msgid "OK"
317msgid "OK"
274msgstr "D'acord"
318msgstr "D'acord"
275
319
@@ -283,29 +327,29 @@ msgstr ""
283msgid "%1:%2"
327msgid "%1:%2"
284msgstr ""
328msgstr ""
285
329
286−#: qml/Components/ModeSwitchWarningDialog.qml:32
330+#: qml/Components/ModeSwitchWarningDialog.qml:33
287msgid "Apps may have unsaved data:"
331msgid "Apps may have unsaved data:"
288msgstr ""
332msgstr ""
289
333
290−#: qml/Components/ModeSwitchWarningDialog.qml:57
334+#: qml/Components/ModeSwitchWarningDialog.qml:60
291msgctxt ""
335msgctxt ""
292"Re-dock means connect the device again to an external screen/mouse/keyboard"
336"Re-dock means connect the device again to an external screen/mouse/keyboard"
293msgid "Re-dock, save your work and close these apps to continue."
337msgid "Re-dock, save your work and close these apps to continue."
294msgstr ""
338msgstr ""
295
339
296−#: qml/Components/ModeSwitchWarningDialog.qml:63
340+#: qml/Components/ModeSwitchWarningDialog.qml:67
297msgid "Or force close now (unsaved data will be lost)."
341msgid "Or force close now (unsaved data will be lost)."
298msgstr ""
342msgstr ""
299
343
300−#: qml/Components/ModeSwitchWarningDialog.qml:75
344+#: qml/Components/ModeSwitchWarningDialog.qml:80
301msgid "OK, I will reconnect"
345msgid "OK, I will reconnect"
302msgstr ""
346msgstr ""
303
347
304−#: qml/Components/ModeSwitchWarningDialog.qml:76
348+#: qml/Components/ModeSwitchWarningDialog.qml:81
305msgid "Reconnect now!"
349msgid "Reconnect now!"
306msgstr ""
350msgstr ""
307
351
308−#: qml/Components/ModeSwitchWarningDialog.qml:88
352+#: qml/Components/ModeSwitchWarningDialog.qml:94
309msgid "Close all"
353msgid "Close all"
310msgstr ""
354msgstr ""
311
355
@@ -313,6 +357,28 @@ msgstr ""
313msgid "Preview Share Item"
357msgid "Preview Share Item"
314msgstr ""
358msgstr ""
315
359
360+#: qml/Components/VirtualTouchPad.qml:317
361+msgid ""
362+"Your device is now connected to an external display. Use this screen as a "
363+"touch pad to interact with the pointer."
364+msgstr ""
365+
366+#: qml/Components/VirtualTouchPad.qml:327
367+msgid "Tap left button to click."
368+msgstr ""
369+
370+#: qml/Components/VirtualTouchPad.qml:339
371+msgid "Tap right button to right click."
372+msgstr ""
373+
374+#: qml/Components/VirtualTouchPad.qml:351
375+msgid "Swipe with two fingers to scroll."
376+msgstr ""
377+
378+#: qml/Components/VirtualTouchPad.qml:396
379+msgid "Find more settings in the system settings."
380+msgstr ""
381+
316#: qml/Dash/DashPageHeader.qml:361
382#: qml/Dash/DashPageHeader.qml:361
317msgctxt "Button: Open the Ubuntu Store"
383msgctxt "Button: Open the Ubuntu Store"
318msgid "Store"
384msgid "Store"
@@ -344,24 +410,24 @@ msgstr ""
344msgid "Reset"
410msgid "Reset"
345msgstr ""
411msgstr ""
346
412
347−#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
413+#: qml/Dash/GenericScopeView.qml:547 qml/Dash/GenericScopeView.qml:718
348msgid "Show less"
414msgid "Show less"
349msgstr ""
415msgstr ""
350
416
351−#: qml/Dash/GenericScopeView.qml:545
417+#: qml/Dash/GenericScopeView.qml:547
352msgid "Show all"
418msgid "Show all"
353msgstr ""
419msgstr ""
354
420
355−#: qml/Dash/GenericScopeView.qml:576
421+#: qml/Dash/GenericScopeView.qml:578
356msgctxt "Label: Hint for dash search line edit"
422msgctxt "Label: Hint for dash search line edit"
357msgid "Search"
423msgid "Search"
358msgstr ""
424msgstr ""
359
425
360−#: qml/Dash/PageHeaderExtraPanel.qml:57
426+#: qml/Dash/PageHeaderExtraPanel.qml:67
361msgid "Recent Searches"
427msgid "Recent Searches"
362msgstr ""
428msgstr ""
363
429
364−#: qml/Dash/PageHeaderExtraPanel.qml:68
430+#: qml/Dash/PageHeaderExtraPanel.qml:78
365msgid "Clear All"
431msgid "Clear All"
366msgstr ""
432msgstr ""
367
433
@@ -398,24 +464,18 @@ msgstr "Deixeu anar per actualitzar..."
398msgid "Enable location data"
464msgid "Enable location data"
399msgstr "Habilita les dades d'ubicació"
465msgstr "Habilita les dades d'ubicació"
400
466
401−#: qml/Dash/ScopesList.qml:57
467+#: qml/Dash/ScopesList.qml:146
402msgid "Manage"
468msgid "Manage"
403msgstr "Gestiona"
469msgstr "Gestiona"
404
470
405−#: qml/Dash/ScopesList.qml:104
471+#: qml/Dash/ScopesList.qml:187
406msgid "Home"
472msgid "Home"
407msgstr "Inici"
473msgstr "Inici"
408
474
409−#: qml/Dash/ScopesList.qml:105
475+#: qml/Dash/ScopesList.qml:188
410msgid "Also installed"
476msgid "Also installed"
411msgstr "També instal·lat"
477msgstr "També instal·lat"
412
478
413−#: qml/DisabledScreenNotice.qml:109
414−msgid ""
415−"Your device is now connected to an external display. Use this screen as a "
416−"touch pad to interact with the pointer."
417−msgstr ""
418−
419#: qml/Greeter/CoverPage.qml:127
479#: qml/Greeter/CoverPage.qml:127
420msgid "Unlock"
480msgid "Unlock"
421msgstr "Desbloca"
481msgstr "Desbloca"
@@ -443,32 +503,45 @@ msgid_plural "Please wait %1 minutes and then try again…"
443msgstr[0] "Espereu %1 minut i torneu-ho a intentar..."
503msgstr[0] "Espereu %1 minut i torneu-ho a intentar..."
444msgstr[1] "Espereu %1 minuts i torneu-ho a intentar..."
504msgstr[1] "Espereu %1 minuts i torneu-ho a intentar..."
445
505
446−#: qml/Greeter/Greeter.qml:596
506+#: qml/Greeter/Greeter.qml:550
447msgid "Try again"
507msgid "Try again"
448msgstr ""
508msgstr ""
449
509
450−#: qml/Greeter/LoginList.qml:70
510+#: qml/Greeter/Greeter.qml:551
511+msgid "Enter passphrase to unlock"
512+msgstr ""
513+
514+#: qml/Greeter/Greeter.qml:552
515+msgid "Enter passcode to unlock"
516+msgstr ""
517+
518+#: qml/Greeter/NarrowView.qml:228
519+msgid "Emergency"
520+msgstr ""
521+
522+#: qml/Greeter/PromptList.qml:126
451msgid "Passphrase"
523msgid "Passphrase"
452msgstr ""
524msgstr ""
453
525
454−#: qml/Greeter/LoginList.qml:71
526+#: qml/Greeter/PromptList.qml:126
455msgid "Passcode"
527msgid "Passcode"
456msgstr ""
528msgstr ""
457
529
458−#: qml/Greeter/LoginList.qml:98
530+#: qml/Greeter/SessionsList.qml:124
459−msgid "Retry"
531+msgid "Select desktop environment"
460msgstr ""
532msgstr ""
461
533
462−#: qml/Greeter/LoginList.qml:99
534+#: qml/Launcher/Drawer.qml:94
463−msgid "Log In"
535+msgid "Search…"
464msgstr ""
536msgstr ""
465
537
466−#: qml/Greeter/NarrowView.qml:252
538+#: qml/Launcher/Drawer.qml:129
539+msgctxt "Apps sorted alphabetically"
467−msgid "Emergency"
540+msgid "A-Z"
468msgstr ""
541msgstr ""
469
542
470−#: qml/Greeter/SessionsList.qml:122
543+#: qml/Launcher/MoreAppsHeader.qml:55
471−msgid "Select desktop environment"
544+msgid "More apps in the store"
472msgstr ""
545msgstr ""
473
546
474#: qml/Notifications/NotificationMenuItemFactory.qml:124
547#: qml/Notifications/NotificationMenuItemFactory.qml:124
@@ -483,62 +556,62 @@ msgstr "Feu un toc per tornar a la cridada..."
483msgid "Conference"
556msgid "Conference"
484msgstr "Conferència"
557msgstr "Conferència"
485
558
486−#: qml/Panel/Indicators/MenuItemFactory.qml:847
559+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:869
487msgid "Nothing is playing"
560msgid "Nothing is playing"
488msgstr "No s'està reproduint res"
561msgstr "No s'està reproduint res"
489
562
490−#: qml/Panel/Indicators/MenuItemFactory.qml:975
563+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:997
491#, qt-format
564#, qt-format
492msgid "%1 hour"
565msgid "%1 hour"
493msgid_plural "%1 hours"
566msgid_plural "%1 hours"
494msgstr[0] ""
567msgstr[0] ""
495msgstr[1] ""
568msgstr[1] ""
496
569
497−#: qml/Panel/Indicators/MenuItemFactory.qml:979
570+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1001
498#, qt-format
571#, qt-format
499msgid "%1 minute"
572msgid "%1 minute"
500msgid_plural "%1 minutes"
573msgid_plural "%1 minutes"
501msgstr[0] ""
574msgstr[0] ""
502msgstr[1] ""
575msgstr[1] ""
503
576
504−#: qml/Panel/Indicators/MenuItemFactory.qml:984
577+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1006
505#, qt-format
578#, qt-format
506msgid "%1 second"
579msgid "%1 second"
507msgid_plural "%1 seconds"
580msgid_plural "%1 seconds"
508msgstr[0] ""
581msgstr[0] ""
509msgstr[1] ""
582msgstr[1] ""
510
583
511−#: qml/Panel/Indicators/MenuItemFactory.qml:987
584+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1009
512msgid "0 seconds"
585msgid "0 seconds"
513msgstr ""
586msgstr ""
514
587
515#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
588#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
516−#: qml/Panel/Indicators/MenuItemFactory.qml:989
589+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1011
517#, qt-format
590#, qt-format
518msgid "%1 remaining"
591msgid "%1 remaining"
519msgstr ""
592msgstr ""
520
593
521−#: qml/Panel/Indicators/MenuItemFactory.qml:995
594+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1017
522msgid "In queue…"
595msgid "In queue…"
523msgstr "A la cua..."
596msgstr "A la cua..."
524
597
525−#: qml/Panel/Indicators/MenuItemFactory.qml:999
598+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1021
526msgid "Downloading"
599msgid "Downloading"
527msgstr "S'està baixant"
600msgstr "S'està baixant"
528
601
529−#: qml/Panel/Indicators/MenuItemFactory.qml:1001
602+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1023
530msgid "Paused, tap to resume"
603msgid "Paused, tap to resume"
531msgstr "En pausa, feu un toc per continuar"
604msgstr "En pausa, feu un toc per continuar"
532
605
533−#: qml/Panel/Indicators/MenuItemFactory.qml:1003
606+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1025
534msgid "Canceled"
607msgid "Canceled"
535msgstr "S'ha cancel·lat"
608msgstr "S'ha cancel·lat"
536
609
537−#: qml/Panel/Indicators/MenuItemFactory.qml:1005
610+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1027
538msgid "Finished"
611msgid "Finished"
539msgstr "S'ha finalitzat"
612msgstr "S'ha finalitzat"
540
613
541−#: qml/Panel/Indicators/MenuItemFactory.qml:1007
614+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1029
542msgid "Failed, tap to retry"
615msgid "Failed, tap to retry"
543msgstr "Ha fallat, feu un toc per tornar-ho a intentar"
616msgstr "Ha fallat, feu un toc per tornar-ho a intentar"
544
617
@@ -558,12 +631,16 @@ msgctxt "Button: Call back on phone"
558msgid "Call back"
631msgid "Call back"
559msgstr ""
632msgstr ""
560
633
634+#: qml/Panel/PanelMenuPage.qml:92
635+msgid "Back"
636+msgstr ""
637+
561#: qml/Stage/SideStage.qml:76
638#: qml/Stage/SideStage.qml:76
562msgid "Drag using 3 fingers any application from one window to the other"
639msgid "Drag using 3 fingers any application from one window to the other"
563msgstr ""
640msgstr ""
564
641
565#: qml/Tutorial/TutorialLeftLong.qml:49
642#: qml/Tutorial/TutorialLeftLong.qml:49
566−msgid "Long swipe from the left edge to open the Today scope"
643+msgid "Long swipe from the left edge to open the Application Drawer"
567msgstr ""
644msgstr ""
568
645
569#: qml/Tutorial/TutorialLeft.qml:47
646#: qml/Tutorial/TutorialLeft.qml:47
@@ -592,7 +669,7 @@ msgid "Language"
592msgstr ""
669msgstr ""
593
670
594#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
671#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
595−#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
672+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/40-location.qml:271
596#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
673#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
597#: qml/Wizard/Pages/70-passwd-type.qml:145
674#: qml/Wizard/Pages/70-passwd-type.qml:145
598#: qml/Wizard/Pages/75-report-check.qml:84
675#: qml/Wizard/Pages/75-report-check.qml:84
@@ -613,25 +690,24 @@ msgstr ""
613msgid "Keyboard layout"
690msgid "Keyboard layout"
614msgstr ""
691msgstr ""
615
692
616−#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
693+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:206
617−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
694+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/sim.qml:101
618−#: qml/Wizard/Pages/sim.qml:101
619msgid "Skip"
695msgid "Skip"
620msgstr "Omet"
696msgstr "Omet"
621
697
622−#: qml/Wizard/Pages/30-wifi.qml:31
698+#: qml/Wizard/Pages/30-wifi.qml:30
623msgid "Connect to Wi‑Fi"
699msgid "Connect to Wi‑Fi"
624msgstr "Connecta't a la Wi-Fi"
700msgstr "Connecta't a la Wi-Fi"
625
701
626−#: qml/Wizard/Pages/30-wifi.qml:132
702+#: qml/Wizard/Pages/30-wifi.qml:131
627msgid "Connected"
703msgid "Connected"
628msgstr ""
704msgstr ""
629
705
630−#: qml/Wizard/Pages/30-wifi.qml:165
706+#: qml/Wizard/Pages/30-wifi.qml:164
631msgid "Available Wi-Fi networks"
707msgid "Available Wi-Fi networks"
632msgstr ""
708msgstr ""
633
709
634−#: qml/Wizard/Pages/30-wifi.qml:166
710+#: qml/Wizard/Pages/30-wifi.qml:165
635msgid "No available Wi-Fi networks"
711msgid "No available Wi-Fi networks"
636msgstr ""
712msgstr ""
637
713
@@ -718,35 +794,6 @@ msgstr ""
718msgid "Privacy policy"
794msgid "Privacy policy"
719msgstr ""
795msgstr ""
720
796
721−#: qml/Wizard/Pages/77-system-update.qml:28
722−msgid "Update Device"
723−msgstr ""
724−
725−#: qml/Wizard/Pages/77-system-update.qml:55
726−msgid ""
727−"There is a system update available and ready to install. Afterwards, the "
728−"device will automatically restart."
729−msgstr ""
730−
731−#: qml/Wizard/Pages/77-system-update.qml:76
732−msgctxt "string identifying name of the update"
733−msgid "Ubuntu system"
734−msgstr ""
735−
736−#: qml/Wizard/Pages/77-system-update.qml:83
737−#, qt-format
738−msgctxt "version of the system update"
739−msgid "Version %1"
740−msgstr ""
741−
742−#: qml/Wizard/Pages/77-system-update.qml:102
743−msgid "This could take a few minutes..."
744−msgstr ""
745−
746−#: qml/Wizard/Pages/77-system-update.qml:116
747−msgid "Install and restart now"
748−msgstr ""
749−
750#: qml/Wizard/Pages/80-finished.qml:89
797#: qml/Wizard/Pages/80-finished.qml:89
751msgid "Welcome to Ubuntu"
798msgid "Welcome to Ubuntu"
752msgstr ""
799msgstr ""
po/ce.po+183−136
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-11-16 10:44+0000\n"
10+"POT-Creation-Date: 2017-04-04 22:56+0000\n"
11"PO-Revision-Date: 2015-02-15 04:01+0000\n"
11"PO-Revision-Date: 2015-02-15 04:01+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Chechen <ce@li.org>\n"
13"Language-Team: Chechen <ce@li.org>\n"
@@ -15,86 +15,114 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-11-23 06:34+0000\n"
18+"X-Launchpad-Export-Date: 2017-04-07 06:29+0000\n"
19−"X-Generator: Launchpad (build 18269)\n"
19+"X-Generator: Launchpad (build 18343)\n"
20
20
21−#: plugins/LightDM/Greeter.cpp:123
21+#: plugins/LightDM/Greeter.cpp:188
22msgid "Password: "
22msgid "Password: "
23msgstr ""
23msgstr ""
24
24
25+#: plugins/LightDM/Greeter.cpp:203
26+msgid "Username"
27+msgstr ""
28+
29+#: plugins/LightDM/Greeter.cpp:242
30+msgid "Failed to authenticate"
31+msgstr ""
32+
33+#: plugins/LightDM/Greeter.cpp:244
34+msgid "Invalid password, please try again"
35+msgstr ""
36+
37+#: plugins/LightDM/Greeter.cpp:254
38+msgid "Log In"
39+msgstr ""
40+
41+#: plugins/LightDM/Greeter.cpp:254
42+msgid "Retry"
43+msgstr ""
44+
45+#: plugins/LightDM/UsersModel.cpp:157
46+msgid "Login"
47+msgstr ""
48+
49+#: plugins/LightDM/UsersModel.cpp:165
50+msgid "Guest Session"
51+msgstr ""
52+
25#: plugins/Unity/Launcher/launcheritem.cpp:49
53#: plugins/Unity/Launcher/launcheritem.cpp:49
26−#: plugins/Unity/Launcher/launcheritem.cpp:108
54+#: plugins/Unity/Launcher/launcheritem.cpp:123
27msgid "Pin shortcut"
55msgid "Pin shortcut"
28msgstr ""
56msgstr ""
29
57
30−#: plugins/Unity/Launcher/launcheritem.cpp:54
58+#: plugins/Unity/Launcher/launcheritem.cpp:55
31msgid "Quit"
59msgid "Quit"
32msgstr ""
60msgstr ""
33
61
34−#: plugins/Unity/Launcher/launcheritem.cpp:108
62+#: plugins/Unity/Launcher/launcheritem.cpp:123
35msgid "Unpin shortcut"
63msgid "Unpin shortcut"
36msgstr ""
64msgstr ""
37
65
38−#: qml/Components/Dialogs.qml:149
66+#: qml/Components/Dialogs.qml:176
39msgctxt "Title: Lock/Log out dialog"
67msgctxt "Title: Lock/Log out dialog"
40msgid "Log out"
68msgid "Log out"
41msgstr ""
69msgstr ""
42
70
43−#: qml/Components/Dialogs.qml:150
71+#: qml/Components/Dialogs.qml:177
44msgid "Are you sure you want to log out?"
72msgid "Are you sure you want to log out?"
45msgstr ""
73msgstr ""
46
74
47−#: qml/Components/Dialogs.qml:152
75+#: qml/Components/Dialogs.qml:180
48msgctxt "Button: Lock the system"
76msgctxt "Button: Lock the system"
49msgid "Lock"
77msgid "Lock"
50msgstr ""
78msgstr ""
51
79
52−#: qml/Components/Dialogs.qml:159
80+#: qml/Components/Dialogs.qml:191
53msgctxt "Button: Log out from the system"
81msgctxt "Button: Log out from the system"
54msgid "Log Out"
82msgid "Log Out"
55msgstr ""
83msgstr ""
56
84
57−#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
85+#: qml/Components/Dialogs.qml:199 qml/Components/Dialogs.qml:264
58−#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
86+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:208
59#: qml/Wizard/Pages/passcode-confirm.qml:32
87#: qml/Wizard/Pages/passcode-confirm.qml:32
60#: qml/Wizard/Pages/passcode-set.qml:32
88#: qml/Wizard/Pages/passcode-set.qml:32
61msgid "Cancel"
89msgid "Cancel"
62msgstr ""
90msgstr ""
63
91
64−#: qml/Components/Dialogs.qml:178
92+#: qml/Components/Dialogs.qml:211
65msgctxt "Title: Reboot dialog"
93msgctxt "Title: Reboot dialog"
66msgid "Reboot"
94msgid "Reboot"
67msgstr ""
95msgstr ""
68
96
69−#: qml/Components/Dialogs.qml:179
97+#: qml/Components/Dialogs.qml:212
70msgid "Are you sure you want to reboot?"
98msgid "Are you sure you want to reboot?"
71msgstr ""
99msgstr ""
72
100
73−#: qml/Components/Dialogs.qml:181
101+#: qml/Components/Dialogs.qml:215
74msgid "No"
102msgid "No"
75msgstr ""
103msgstr ""
76
104
77−#: qml/Components/Dialogs.qml:187
105+#: qml/Components/Dialogs.qml:223
78msgid "Yes"
106msgid "Yes"
79msgstr ""
107msgstr ""
80
108
81−#: qml/Components/Dialogs.qml:202
109+#: qml/Components/Dialogs.qml:239
82msgctxt "Title: Power off/Restart dialog"
110msgctxt "Title: Power off/Restart dialog"
83msgid "Power"
111msgid "Power"
84msgstr ""
112msgstr ""
85
113
86−#: qml/Components/Dialogs.qml:203
114+#: qml/Components/Dialogs.qml:240
87msgid ""
115msgid ""
88"Are you sure you would like\n"
116"Are you sure you would like\n"
89"to power off?"
117"to power off?"
90msgstr ""
118msgstr ""
91
119
92−#: qml/Components/Dialogs.qml:205
120+#: qml/Components/Dialogs.qml:244
93msgctxt "Button: Power off the system"
121msgctxt "Button: Power off the system"
94msgid "Power off"
122msgid "Power off"
95msgstr ""
123msgstr ""
96
124
97−#: qml/Components/Dialogs.qml:214
125+#: qml/Components/Dialogs.qml:255
98msgctxt "Button: Restart the system"
126msgctxt "Button: Restart the system"
99msgid "Restart"
127msgid "Restart"
100msgstr ""
128msgstr ""
@@ -120,7 +148,7 @@ msgid "Alt + PrtScr"
120msgstr ""
148msgstr ""
121
149
122#: qml/Components/KeyboardShortcutsOverlay.qml:80
150#: qml/Components/KeyboardShortcutsOverlay.qml:80
123−msgid "Takes a screenshot of a window."
151+msgid "Takes a screenshot of the current window."
124msgstr ""
152msgstr ""
125
153
126#: qml/Components/KeyboardShortcutsOverlay.qml:88
154#: qml/Components/KeyboardShortcutsOverlay.qml:88
@@ -139,127 +167,143 @@ msgstr ""
139msgid "Switches to previous keyboard layout."
167msgid "Switches to previous keyboard layout."
140msgstr ""
168msgstr ""
141
169
142−#: qml/Components/KeyboardShortcutsOverlay.qml:118
170+#: qml/Components/KeyboardShortcutsOverlay.qml:114
171+msgid "Ctrl + Alt + T"
172+msgstr ""
173+
174+#: qml/Components/KeyboardShortcutsOverlay.qml:119
175+msgid "Starts the Terminal application."
176+msgstr ""
177+
178+#: qml/Components/KeyboardShortcutsOverlay.qml:131
143msgid "Launcher"
179msgid "Launcher"
144msgstr ""
180msgstr ""
145
181
146−#: qml/Components/KeyboardShortcutsOverlay.qml:125
182+#: qml/Components/KeyboardShortcutsOverlay.qml:138
147msgid "Super (Hold)"
183msgid "Super (Hold)"
148msgstr ""
184msgstr ""
149
185
150−#: qml/Components/KeyboardShortcutsOverlay.qml:130
186+#: qml/Components/KeyboardShortcutsOverlay.qml:143
151msgid "Opens the launcher, displays shortcuts."
187msgid "Opens the launcher, displays shortcuts."
152msgstr ""
188msgstr ""
153
189
154−#: qml/Components/KeyboardShortcutsOverlay.qml:138
190+#: qml/Components/KeyboardShortcutsOverlay.qml:151
155msgid "Alt + F1"
191msgid "Alt + F1"
156msgstr ""
192msgstr ""
157
193
158−#: qml/Components/KeyboardShortcutsOverlay.qml:143
194+#: qml/Components/KeyboardShortcutsOverlay.qml:156
159msgid "Opens launcher keyboard navigation mode."
195msgid "Opens launcher keyboard navigation mode."
160msgstr ""
196msgstr ""
161
197
162−#: qml/Components/KeyboardShortcutsOverlay.qml:151
198+#: qml/Components/KeyboardShortcutsOverlay.qml:164
163msgid "Super + Tab"
199msgid "Super + Tab"
164msgstr ""
200msgstr ""
165
201
166−#: qml/Components/KeyboardShortcutsOverlay.qml:156
202+#: qml/Components/KeyboardShortcutsOverlay.qml:169
167msgid "Switches applications via the launcher."
203msgid "Switches applications via the launcher."
168msgstr ""
204msgstr ""
169
205
170−#: qml/Components/KeyboardShortcutsOverlay.qml:164
206+#: qml/Components/KeyboardShortcutsOverlay.qml:177
171−msgid "Super + 0 to 9"
207+msgid "Super + 1 to 0"
172msgstr ""
208msgstr ""
173
209
174−#: qml/Components/KeyboardShortcutsOverlay.qml:169
210+#: qml/Components/KeyboardShortcutsOverlay.qml:182
175msgid "Same as clicking on a launcher icon."
211msgid "Same as clicking on a launcher icon."
176msgstr ""
212msgstr ""
177
213
178−#: qml/Components/KeyboardShortcutsOverlay.qml:181
214+#: qml/Components/KeyboardShortcutsOverlay.qml:190
215+msgid "Super + A"
216+msgstr ""
217+
218+#: qml/Components/KeyboardShortcutsOverlay.qml:195
219+msgid "Opens the Application Drawer."
220+msgstr ""
221+
222+#: qml/Components/KeyboardShortcutsOverlay.qml:207
179msgid "Scopes"
223msgid "Scopes"
180msgstr ""
224msgstr ""
181
225
182−#: qml/Components/KeyboardShortcutsOverlay.qml:188
226+#: qml/Components/KeyboardShortcutsOverlay.qml:214
183msgid "Super (Tap)"
227msgid "Super (Tap)"
184msgstr ""
228msgstr ""
185
229
186−#: qml/Components/KeyboardShortcutsOverlay.qml:193
230+#: qml/Components/KeyboardShortcutsOverlay.qml:219
187msgid "Opens the Scopes home."
231msgid "Opens the Scopes home."
188msgstr ""
232msgstr ""
189
233
190−#: qml/Components/KeyboardShortcutsOverlay.qml:209
234+#: qml/Components/KeyboardShortcutsOverlay.qml:235
191msgid "Switching"
235msgid "Switching"
192msgstr ""
236msgstr ""
193
237
194−#: qml/Components/KeyboardShortcutsOverlay.qml:216
238+#: qml/Components/KeyboardShortcutsOverlay.qml:242
195msgid "Alt + Tab"
239msgid "Alt + Tab"
196msgstr ""
240msgstr ""
197
241
198−#: qml/Components/KeyboardShortcutsOverlay.qml:221
242+#: qml/Components/KeyboardShortcutsOverlay.qml:247
199msgid "Switches between applications."
243msgid "Switches between applications."
200msgstr ""
244msgstr ""
201
245
202−#: qml/Components/KeyboardShortcutsOverlay.qml:229
246+#: qml/Components/KeyboardShortcutsOverlay.qml:255
203msgid "Super + W"
247msgid "Super + W"
204msgstr ""
248msgstr ""
205
249
206−#: qml/Components/KeyboardShortcutsOverlay.qml:234
250+#: qml/Components/KeyboardShortcutsOverlay.qml:260
207msgid "Opens the desktop spread."
251msgid "Opens the desktop spread."
208msgstr ""
252msgstr ""
209
253
210−#: qml/Components/KeyboardShortcutsOverlay.qml:242
254+#: qml/Components/KeyboardShortcutsOverlay.qml:268
211msgid "Cursor Left or Right"
255msgid "Cursor Left or Right"
212msgstr ""
256msgstr ""
213
257
214−#: qml/Components/KeyboardShortcutsOverlay.qml:247
258+#: qml/Components/KeyboardShortcutsOverlay.qml:273
215msgid "Moves the focus."
259msgid "Moves the focus."
216msgstr ""
260msgstr ""
217
261
218−#: qml/Components/KeyboardShortcutsOverlay.qml:259
262+#: qml/Components/KeyboardShortcutsOverlay.qml:285
219msgid "Windows"
263msgid "Windows"
220msgstr ""
264msgstr ""
221
265
222−#: qml/Components/KeyboardShortcutsOverlay.qml:266
266+#: qml/Components/KeyboardShortcutsOverlay.qml:292
223msgid "Ctrl + Super + D"
267msgid "Ctrl + Super + D"
224msgstr ""
268msgstr ""
225
269
226−#: qml/Components/KeyboardShortcutsOverlay.qml:271
270+#: qml/Components/KeyboardShortcutsOverlay.qml:297
227msgid "Minimizes all windows."
271msgid "Minimizes all windows."
228msgstr ""
272msgstr ""
229
273
230−#: qml/Components/KeyboardShortcutsOverlay.qml:279
274+#: qml/Components/KeyboardShortcutsOverlay.qml:305
231msgid "Ctrl + Super + Up"
275msgid "Ctrl + Super + Up"
232msgstr ""
276msgstr ""
233
277
234−#: qml/Components/KeyboardShortcutsOverlay.qml:284
278+#: qml/Components/KeyboardShortcutsOverlay.qml:310
235msgid "Maximizes the current window."
279msgid "Maximizes the current window."
236msgstr ""
280msgstr ""
237
281
238−#: qml/Components/KeyboardShortcutsOverlay.qml:292
282+#: qml/Components/KeyboardShortcutsOverlay.qml:318
239msgid "Ctrl + Super + Down"
283msgid "Ctrl + Super + Down"
240msgstr ""
284msgstr ""
241
285
242−#: qml/Components/KeyboardShortcutsOverlay.qml:297
286+#: qml/Components/KeyboardShortcutsOverlay.qml:323
243msgid "Minimizes or restores the current window."
287msgid "Minimizes or restores the current window."
244msgstr ""
288msgstr ""
245
289
246−#: qml/Components/KeyboardShortcutsOverlay.qml:305
290+#: qml/Components/KeyboardShortcutsOverlay.qml:331
247msgid "Ctrl + Super + Left or Right"
291msgid "Ctrl + Super + Left or Right"
248msgstr ""
292msgstr ""
249
293
250−#: qml/Components/KeyboardShortcutsOverlay.qml:310
294+#: qml/Components/KeyboardShortcutsOverlay.qml:336
251msgid "Semi-maximizes the current window."
295msgid "Semi-maximizes the current window."
252msgstr ""
296msgstr ""
253
297
254−#: qml/Components/KeyboardShortcutsOverlay.qml:318
298+#: qml/Components/KeyboardShortcutsOverlay.qml:344
255msgid "Alt + F4"
299msgid "Alt + F4"
256msgstr ""
300msgstr ""
257
301
258−#: qml/Components/KeyboardShortcutsOverlay.qml:323
302+#: qml/Components/KeyboardShortcutsOverlay.qml:349
259msgid "Closes the current window."
303msgid "Closes the current window."
260msgstr ""
304msgstr ""
261
305
262−#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
306+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:228
263msgid "Return to Call"
307msgid "Return to Call"
264msgstr ""
308msgstr ""
265
309
@@ -267,7 +311,7 @@ msgstr ""
267msgid "Emergency Call"
311msgid "Emergency Call"
268msgstr ""
312msgstr ""
269
313
270−#: qml/Components/Lockscreen.qml:244
314+#: qml/Components/Lockscreen.qml:245
271msgid "OK"
315msgid "OK"
272msgstr ""
316msgstr ""
273
317
@@ -281,29 +325,29 @@ msgstr ""
281msgid "%1:%2"
325msgid "%1:%2"
282msgstr ""
326msgstr ""
283
327
284−#: qml/Components/ModeSwitchWarningDialog.qml:32
328+#: qml/Components/ModeSwitchWarningDialog.qml:33
285msgid "Apps may have unsaved data:"
329msgid "Apps may have unsaved data:"
286msgstr ""
330msgstr ""
287
331
288−#: qml/Components/ModeSwitchWarningDialog.qml:57
332+#: qml/Components/ModeSwitchWarningDialog.qml:60
289msgctxt ""
333msgctxt ""
290"Re-dock means connect the device again to an external screen/mouse/keyboard"
334"Re-dock means connect the device again to an external screen/mouse/keyboard"
291msgid "Re-dock, save your work and close these apps to continue."
335msgid "Re-dock, save your work and close these apps to continue."
292msgstr ""
336msgstr ""
293
337
294−#: qml/Components/ModeSwitchWarningDialog.qml:63
338+#: qml/Components/ModeSwitchWarningDialog.qml:67
295msgid "Or force close now (unsaved data will be lost)."
339msgid "Or force close now (unsaved data will be lost)."
296msgstr ""
340msgstr ""
297
341
298−#: qml/Components/ModeSwitchWarningDialog.qml:75
342+#: qml/Components/ModeSwitchWarningDialog.qml:80
299msgid "OK, I will reconnect"
343msgid "OK, I will reconnect"
300msgstr ""
344msgstr ""
301
345
302−#: qml/Components/ModeSwitchWarningDialog.qml:76
346+#: qml/Components/ModeSwitchWarningDialog.qml:81
303msgid "Reconnect now!"
347msgid "Reconnect now!"
304msgstr ""
348msgstr ""
305
349
306−#: qml/Components/ModeSwitchWarningDialog.qml:88
350+#: qml/Components/ModeSwitchWarningDialog.qml:94
307msgid "Close all"
351msgid "Close all"
308msgstr ""
352msgstr ""
309
353
@@ -311,6 +355,28 @@ msgstr ""
311msgid "Preview Share Item"
355msgid "Preview Share Item"
312msgstr ""
356msgstr ""
313
357
358+#: qml/Components/VirtualTouchPad.qml:317
359+msgid ""
360+"Your device is now connected to an external display. Use this screen as a "
361+"touch pad to interact with the pointer."
362+msgstr ""
363+
364+#: qml/Components/VirtualTouchPad.qml:327
365+msgid "Tap left button to click."
366+msgstr ""
367+
368+#: qml/Components/VirtualTouchPad.qml:339
369+msgid "Tap right button to right click."
370+msgstr ""
371+
372+#: qml/Components/VirtualTouchPad.qml:351
373+msgid "Swipe with two fingers to scroll."
374+msgstr ""
375+
376+#: qml/Components/VirtualTouchPad.qml:396
377+msgid "Find more settings in the system settings."
378+msgstr ""
379+
314#: qml/Dash/DashPageHeader.qml:361
380#: qml/Dash/DashPageHeader.qml:361
315msgctxt "Button: Open the Ubuntu Store"
381msgctxt "Button: Open the Ubuntu Store"
316msgid "Store"
382msgid "Store"
@@ -342,24 +408,24 @@ msgstr ""
342msgid "Reset"
408msgid "Reset"
343msgstr ""
409msgstr ""
344
410
345−#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
411+#: qml/Dash/GenericScopeView.qml:547 qml/Dash/GenericScopeView.qml:718
346msgid "Show less"
412msgid "Show less"
347msgstr ""
413msgstr ""
348
414
349−#: qml/Dash/GenericScopeView.qml:545
415+#: qml/Dash/GenericScopeView.qml:547
350msgid "Show all"
416msgid "Show all"
351msgstr ""
417msgstr ""
352
418
353−#: qml/Dash/GenericScopeView.qml:576
419+#: qml/Dash/GenericScopeView.qml:578
354msgctxt "Label: Hint for dash search line edit"
420msgctxt "Label: Hint for dash search line edit"
355msgid "Search"
421msgid "Search"
356msgstr ""
422msgstr ""
357
423
358−#: qml/Dash/PageHeaderExtraPanel.qml:57
424+#: qml/Dash/PageHeaderExtraPanel.qml:67
359msgid "Recent Searches"
425msgid "Recent Searches"
360msgstr ""
426msgstr ""
361
427
362−#: qml/Dash/PageHeaderExtraPanel.qml:68
428+#: qml/Dash/PageHeaderExtraPanel.qml:78
363msgid "Clear All"
429msgid "Clear All"
364msgstr ""
430msgstr ""
365
431
@@ -396,24 +462,18 @@ msgstr ""
396msgid "Enable location data"
462msgid "Enable location data"
397msgstr ""
463msgstr ""
398
464
399−#: qml/Dash/ScopesList.qml:57
465+#: qml/Dash/ScopesList.qml:146
400msgid "Manage"
466msgid "Manage"
401msgstr ""
467msgstr ""
402
468
403−#: qml/Dash/ScopesList.qml:104
469+#: qml/Dash/ScopesList.qml:187
404msgid "Home"
470msgid "Home"
405msgstr ""
471msgstr ""
406
472
407−#: qml/Dash/ScopesList.qml:105
473+#: qml/Dash/ScopesList.qml:188
408msgid "Also installed"
474msgid "Also installed"
409msgstr ""
475msgstr ""
410
476
411−#: qml/DisabledScreenNotice.qml:109
412−msgid ""
413−"Your device is now connected to an external display. Use this screen as a "
414−"touch pad to interact with the pointer."
415−msgstr ""
416−
417#: qml/Greeter/CoverPage.qml:127
477#: qml/Greeter/CoverPage.qml:127
418msgid "Unlock"
478msgid "Unlock"
419msgstr ""
479msgstr ""
@@ -437,32 +497,45 @@ msgid_plural "Please wait %1 minutes and then try again…"
437msgstr[0] ""
497msgstr[0] ""
438msgstr[1] ""
498msgstr[1] ""
439
499
440−#: qml/Greeter/Greeter.qml:596
500+#: qml/Greeter/Greeter.qml:550
441msgid "Try again"
501msgid "Try again"
442msgstr ""
502msgstr ""
443
503
444−#: qml/Greeter/LoginList.qml:70
504+#: qml/Greeter/Greeter.qml:551
505+msgid "Enter passphrase to unlock"
506+msgstr ""
507+
508+#: qml/Greeter/Greeter.qml:552
509+msgid "Enter passcode to unlock"
510+msgstr ""
511+
512+#: qml/Greeter/NarrowView.qml:228
513+msgid "Emergency"
514+msgstr ""
515+
516+#: qml/Greeter/PromptList.qml:126
445msgid "Passphrase"
517msgid "Passphrase"
446msgstr ""
518msgstr ""
447
519
448−#: qml/Greeter/LoginList.qml:71
520+#: qml/Greeter/PromptList.qml:126
449msgid "Passcode"
521msgid "Passcode"
450msgstr ""
522msgstr ""
451
523
452−#: qml/Greeter/LoginList.qml:98
524+#: qml/Greeter/SessionsList.qml:124
453−msgid "Retry"
525+msgid "Select desktop environment"
454msgstr ""
526msgstr ""
455
527
456−#: qml/Greeter/LoginList.qml:99
528+#: qml/Launcher/Drawer.qml:94
457−msgid "Log In"
529+msgid "Search…"
458msgstr ""
530msgstr ""
459
531
460−#: qml/Greeter/NarrowView.qml:252
532+#: qml/Launcher/Drawer.qml:129
533+msgctxt "Apps sorted alphabetically"
461−msgid "Emergency"
534+msgid "A-Z"
462msgstr ""
535msgstr ""
463
536
464−#: qml/Greeter/SessionsList.qml:122
537+#: qml/Launcher/MoreAppsHeader.qml:55
465−msgid "Select desktop environment"
538+msgid "More apps in the store"
466msgstr ""
539msgstr ""
467
540
468#: qml/Notifications/NotificationMenuItemFactory.qml:124
541#: qml/Notifications/NotificationMenuItemFactory.qml:124
@@ -477,62 +550,62 @@ msgstr ""
477msgid "Conference"
550msgid "Conference"
478msgstr ""
551msgstr ""
479
552
480−#: qml/Panel/Indicators/MenuItemFactory.qml:847
553+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:869
481msgid "Nothing is playing"
554msgid "Nothing is playing"
482msgstr ""
555msgstr ""
483
556
484−#: qml/Panel/Indicators/MenuItemFactory.qml:975
557+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:997
485#, qt-format
558#, qt-format
486msgid "%1 hour"
559msgid "%1 hour"
487msgid_plural "%1 hours"
560msgid_plural "%1 hours"
488msgstr[0] ""
561msgstr[0] ""
489msgstr[1] ""
562msgstr[1] ""
490
563
491−#: qml/Panel/Indicators/MenuItemFactory.qml:979
564+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1001
492#, qt-format
565#, qt-format
493msgid "%1 minute"
566msgid "%1 minute"
494msgid_plural "%1 minutes"
567msgid_plural "%1 minutes"
495msgstr[0] ""
568msgstr[0] ""
496msgstr[1] ""
569msgstr[1] ""
497
570
498−#: qml/Panel/Indicators/MenuItemFactory.qml:984
571+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1006
499#, qt-format
572#, qt-format
500msgid "%1 second"
573msgid "%1 second"
501msgid_plural "%1 seconds"
574msgid_plural "%1 seconds"
502msgstr[0] ""
575msgstr[0] ""
503msgstr[1] ""
576msgstr[1] ""
504
577
505−#: qml/Panel/Indicators/MenuItemFactory.qml:987
578+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1009
506msgid "0 seconds"
579msgid "0 seconds"
507msgstr ""
580msgstr ""
508
581
509#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
582#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
510−#: qml/Panel/Indicators/MenuItemFactory.qml:989
583+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1011
511#, qt-format
584#, qt-format
512msgid "%1 remaining"
585msgid "%1 remaining"
513msgstr ""
586msgstr ""
514
587
515−#: qml/Panel/Indicators/MenuItemFactory.qml:995
588+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1017
516msgid "In queue…"
589msgid "In queue…"
517msgstr ""
590msgstr ""
518
591
519−#: qml/Panel/Indicators/MenuItemFactory.qml:999
592+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1021
520msgid "Downloading"
593msgid "Downloading"
521msgstr ""
594msgstr ""
522
595
523−#: qml/Panel/Indicators/MenuItemFactory.qml:1001
596+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1023
524msgid "Paused, tap to resume"
597msgid "Paused, tap to resume"
525msgstr ""
598msgstr ""
526
599
527−#: qml/Panel/Indicators/MenuItemFactory.qml:1003
600+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1025
528msgid "Canceled"
601msgid "Canceled"
529msgstr ""
602msgstr ""
530
603
531−#: qml/Panel/Indicators/MenuItemFactory.qml:1005
604+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1027
532msgid "Finished"
605msgid "Finished"
533msgstr ""
606msgstr ""
534
607
535−#: qml/Panel/Indicators/MenuItemFactory.qml:1007
608+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1029
536msgid "Failed, tap to retry"
609msgid "Failed, tap to retry"
537msgstr ""
610msgstr ""
538
611
@@ -552,12 +625,16 @@ msgctxt "Button: Call back on phone"
552msgid "Call back"
625msgid "Call back"
553msgstr ""
626msgstr ""
554
627
628+#: qml/Panel/PanelMenuPage.qml:92
629+msgid "Back"
630+msgstr ""
631+
555#: qml/Stage/SideStage.qml:76
632#: qml/Stage/SideStage.qml:76
556msgid "Drag using 3 fingers any application from one window to the other"
633msgid "Drag using 3 fingers any application from one window to the other"
557msgstr ""
634msgstr ""
558
635
559#: qml/Tutorial/TutorialLeftLong.qml:49
636#: qml/Tutorial/TutorialLeftLong.qml:49
560−msgid "Long swipe from the left edge to open the Today scope"
637+msgid "Long swipe from the left edge to open the Application Drawer"
561msgstr ""
638msgstr ""
562
639
563#: qml/Tutorial/TutorialLeft.qml:47
640#: qml/Tutorial/TutorialLeft.qml:47
@@ -586,7 +663,7 @@ msgid "Language"
586msgstr ""
663msgstr ""
587
664
588#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
665#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
589−#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
666+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/40-location.qml:271
590#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
667#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
591#: qml/Wizard/Pages/70-passwd-type.qml:145
668#: qml/Wizard/Pages/70-passwd-type.qml:145
592#: qml/Wizard/Pages/75-report-check.qml:84
669#: qml/Wizard/Pages/75-report-check.qml:84
@@ -607,25 +684,24 @@ msgstr ""
607msgid "Keyboard layout"
684msgid "Keyboard layout"
608msgstr ""
685msgstr ""
609
686
610−#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
687+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:206
611−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
688+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/sim.qml:101
612−#: qml/Wizard/Pages/sim.qml:101
613msgid "Skip"
689msgid "Skip"
614msgstr ""
690msgstr ""
615
691
616−#: qml/Wizard/Pages/30-wifi.qml:31
692+#: qml/Wizard/Pages/30-wifi.qml:30
617msgid "Connect to Wi‑Fi"
693msgid "Connect to Wi‑Fi"
618msgstr ""
694msgstr ""
619
695
620−#: qml/Wizard/Pages/30-wifi.qml:132
696+#: qml/Wizard/Pages/30-wifi.qml:131
621msgid "Connected"
697msgid "Connected"
622msgstr ""
698msgstr ""
623
699
624−#: qml/Wizard/Pages/30-wifi.qml:165
700+#: qml/Wizard/Pages/30-wifi.qml:164
625msgid "Available Wi-Fi networks"
701msgid "Available Wi-Fi networks"
626msgstr ""
702msgstr ""
627
703
628−#: qml/Wizard/Pages/30-wifi.qml:166
704+#: qml/Wizard/Pages/30-wifi.qml:165
629msgid "No available Wi-Fi networks"
705msgid "No available Wi-Fi networks"
630msgstr ""
706msgstr ""
631
707
@@ -712,35 +788,6 @@ msgstr ""
712msgid "Privacy policy"
788msgid "Privacy policy"
713msgstr ""
789msgstr ""
714
790
715−#: qml/Wizard/Pages/77-system-update.qml:28
716−msgid "Update Device"
717−msgstr ""
718−
719−#: qml/Wizard/Pages/77-system-update.qml:55
720−msgid ""
721−"There is a system update available and ready to install. Afterwards, the "
722−"device will automatically restart."
723−msgstr ""
724−
725−#: qml/Wizard/Pages/77-system-update.qml:76
726−msgctxt "string identifying name of the update"
727−msgid "Ubuntu system"
728−msgstr ""
729−
730−#: qml/Wizard/Pages/77-system-update.qml:83
731−#, qt-format
732−msgctxt "version of the system update"
733−msgid "Version %1"
734−msgstr ""
735−
736−#: qml/Wizard/Pages/77-system-update.qml:102
737−msgid "This could take a few minutes..."
738−msgstr ""
739−
740−#: qml/Wizard/Pages/77-system-update.qml:116
741−msgid "Install and restart now"
742−msgstr ""
743−
744#: qml/Wizard/Pages/80-finished.qml:89
791#: qml/Wizard/Pages/80-finished.qml:89
745msgid "Welcome to Ubuntu"
792msgid "Welcome to Ubuntu"
746msgstr ""
793msgstr ""
po/ckb.po+183−136
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-11-16 10:44+0000\n"
10+"POT-Creation-Date: 2017-04-04 22:56+0000\n"
11"PO-Revision-Date: 2014-01-21 11:05+0000\n"
11"PO-Revision-Date: 2014-01-21 11:05+0000\n"
12"Last-Translator: Aras <aras.noori@gmail.com>\n"
12"Last-Translator: Aras <aras.noori@gmail.com>\n"
13"Language-Team: Kurdish (Sorani) <ckb@li.org>\n"
13"Language-Team: Kurdish (Sorani) <ckb@li.org>\n"
@@ -15,86 +15,114 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-11-23 06:36+0000\n"
18+"X-Launchpad-Export-Date: 2017-04-07 06:31+0000\n"
19−"X-Generator: Launchpad (build 18269)\n"
19+"X-Generator: Launchpad (build 18343)\n"
20
20
21−#: plugins/LightDM/Greeter.cpp:123
21+#: plugins/LightDM/Greeter.cpp:188
22msgid "Password: "
22msgid "Password: "
23msgstr ""
23msgstr ""
24
24
25+#: plugins/LightDM/Greeter.cpp:203
26+msgid "Username"
27+msgstr ""
28+
29+#: plugins/LightDM/Greeter.cpp:242
30+msgid "Failed to authenticate"
31+msgstr ""
32+
33+#: plugins/LightDM/Greeter.cpp:244
34+msgid "Invalid password, please try again"
35+msgstr ""
36+
37+#: plugins/LightDM/Greeter.cpp:254
38+msgid "Log In"
39+msgstr ""
40+
41+#: plugins/LightDM/Greeter.cpp:254
42+msgid "Retry"
43+msgstr ""
44+
45+#: plugins/LightDM/UsersModel.cpp:157
46+msgid "Login"
47+msgstr ""
48+
49+#: plugins/LightDM/UsersModel.cpp:165
50+msgid "Guest Session"
51+msgstr ""
52+
25#: plugins/Unity/Launcher/launcheritem.cpp:49
53#: plugins/Unity/Launcher/launcheritem.cpp:49
26−#: plugins/Unity/Launcher/launcheritem.cpp:108
54+#: plugins/Unity/Launcher/launcheritem.cpp:123
27msgid "Pin shortcut"
55msgid "Pin shortcut"
28msgstr ""
56msgstr ""
29
57
30−#: plugins/Unity/Launcher/launcheritem.cpp:54
58+#: plugins/Unity/Launcher/launcheritem.cpp:55
31msgid "Quit"
59msgid "Quit"
32msgstr ""
60msgstr ""
33
61
34−#: plugins/Unity/Launcher/launcheritem.cpp:108
62+#: plugins/Unity/Launcher/launcheritem.cpp:123
35msgid "Unpin shortcut"
63msgid "Unpin shortcut"
36msgstr ""
64msgstr ""
37
65
38−#: qml/Components/Dialogs.qml:149
66+#: qml/Components/Dialogs.qml:176
39msgctxt "Title: Lock/Log out dialog"
67msgctxt "Title: Lock/Log out dialog"
40msgid "Log out"
68msgid "Log out"
41msgstr ""
69msgstr ""
42
70
43−#: qml/Components/Dialogs.qml:150
71+#: qml/Components/Dialogs.qml:177
44msgid "Are you sure you want to log out?"
72msgid "Are you sure you want to log out?"
45msgstr ""
73msgstr ""
46
74
47−#: qml/Components/Dialogs.qml:152
75+#: qml/Components/Dialogs.qml:180
48msgctxt "Button: Lock the system"
76msgctxt "Button: Lock the system"
49msgid "Lock"
77msgid "Lock"
50msgstr ""
78msgstr ""
51
79
52−#: qml/Components/Dialogs.qml:159
80+#: qml/Components/Dialogs.qml:191
53msgctxt "Button: Log out from the system"
81msgctxt "Button: Log out from the system"
54msgid "Log Out"
82msgid "Log Out"
55msgstr ""
83msgstr ""
56
84
57−#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
85+#: qml/Components/Dialogs.qml:199 qml/Components/Dialogs.qml:264
58−#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
86+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:208
59#: qml/Wizard/Pages/passcode-confirm.qml:32
87#: qml/Wizard/Pages/passcode-confirm.qml:32
60#: qml/Wizard/Pages/passcode-set.qml:32
88#: qml/Wizard/Pages/passcode-set.qml:32
61msgid "Cancel"
89msgid "Cancel"
62msgstr ""
90msgstr ""
63
91
64−#: qml/Components/Dialogs.qml:178
92+#: qml/Components/Dialogs.qml:211
65msgctxt "Title: Reboot dialog"
93msgctxt "Title: Reboot dialog"
66msgid "Reboot"
94msgid "Reboot"
67msgstr ""
95msgstr ""
68
96
69−#: qml/Components/Dialogs.qml:179
97+#: qml/Components/Dialogs.qml:212
70msgid "Are you sure you want to reboot?"
98msgid "Are you sure you want to reboot?"
71msgstr ""
99msgstr ""
72
100
73−#: qml/Components/Dialogs.qml:181
101+#: qml/Components/Dialogs.qml:215
74msgid "No"
102msgid "No"
75msgstr ""
103msgstr ""
76
104
77−#: qml/Components/Dialogs.qml:187
105+#: qml/Components/Dialogs.qml:223
78msgid "Yes"
106msgid "Yes"
79msgstr ""
107msgstr ""
80
108
81−#: qml/Components/Dialogs.qml:202
109+#: qml/Components/Dialogs.qml:239
82msgctxt "Title: Power off/Restart dialog"
110msgctxt "Title: Power off/Restart dialog"
83msgid "Power"
111msgid "Power"
84msgstr ""
112msgstr ""
85
113
86−#: qml/Components/Dialogs.qml:203
114+#: qml/Components/Dialogs.qml:240
87msgid ""
115msgid ""
88"Are you sure you would like\n"
116"Are you sure you would like\n"
89"to power off?"
117"to power off?"
90msgstr ""
118msgstr ""
91
119
92−#: qml/Components/Dialogs.qml:205
120+#: qml/Components/Dialogs.qml:244
93msgctxt "Button: Power off the system"
121msgctxt "Button: Power off the system"
94msgid "Power off"
122msgid "Power off"
95msgstr ""
123msgstr ""
96
124
97−#: qml/Components/Dialogs.qml:214
125+#: qml/Components/Dialogs.qml:255
98msgctxt "Button: Restart the system"
126msgctxt "Button: Restart the system"
99msgid "Restart"
127msgid "Restart"
100msgstr ""
128msgstr ""
@@ -120,7 +148,7 @@ msgid "Alt + PrtScr"
120msgstr ""
148msgstr ""
121
149
122#: qml/Components/KeyboardShortcutsOverlay.qml:80
150#: qml/Components/KeyboardShortcutsOverlay.qml:80
123−msgid "Takes a screenshot of a window."
151+msgid "Takes a screenshot of the current window."
124msgstr ""
152msgstr ""
125
153
126#: qml/Components/KeyboardShortcutsOverlay.qml:88
154#: qml/Components/KeyboardShortcutsOverlay.qml:88
@@ -139,127 +167,143 @@ msgstr ""
139msgid "Switches to previous keyboard layout."
167msgid "Switches to previous keyboard layout."
140msgstr ""
168msgstr ""
141
169
142−#: qml/Components/KeyboardShortcutsOverlay.qml:118
170+#: qml/Components/KeyboardShortcutsOverlay.qml:114
171+msgid "Ctrl + Alt + T"
172+msgstr ""
173+
174+#: qml/Components/KeyboardShortcutsOverlay.qml:119
175+msgid "Starts the Terminal application."
176+msgstr ""
177+
178+#: qml/Components/KeyboardShortcutsOverlay.qml:131
143msgid "Launcher"
179msgid "Launcher"
144msgstr ""
180msgstr ""
145
181
146−#: qml/Components/KeyboardShortcutsOverlay.qml:125
182+#: qml/Components/KeyboardShortcutsOverlay.qml:138
147msgid "Super (Hold)"
183msgid "Super (Hold)"
148msgstr ""
184msgstr ""
149
185
150−#: qml/Components/KeyboardShortcutsOverlay.qml:130
186+#: qml/Components/KeyboardShortcutsOverlay.qml:143
151msgid "Opens the launcher, displays shortcuts."
187msgid "Opens the launcher, displays shortcuts."
152msgstr ""
188msgstr ""
153
189
154−#: qml/Components/KeyboardShortcutsOverlay.qml:138
190+#: qml/Components/KeyboardShortcutsOverlay.qml:151
155msgid "Alt + F1"
191msgid "Alt + F1"
156msgstr ""
192msgstr ""
157
193
158−#: qml/Components/KeyboardShortcutsOverlay.qml:143
194+#: qml/Components/KeyboardShortcutsOverlay.qml:156
159msgid "Opens launcher keyboard navigation mode."
195msgid "Opens launcher keyboard navigation mode."
160msgstr ""
196msgstr ""
161
197
162−#: qml/Components/KeyboardShortcutsOverlay.qml:151
198+#: qml/Components/KeyboardShortcutsOverlay.qml:164
163msgid "Super + Tab"
199msgid "Super + Tab"
164msgstr ""
200msgstr ""
165
201
166−#: qml/Components/KeyboardShortcutsOverlay.qml:156
202+#: qml/Components/KeyboardShortcutsOverlay.qml:169
167msgid "Switches applications via the launcher."
203msgid "Switches applications via the launcher."
168msgstr ""
204msgstr ""
169
205
170−#: qml/Components/KeyboardShortcutsOverlay.qml:164
206+#: qml/Components/KeyboardShortcutsOverlay.qml:177
171−msgid "Super + 0 to 9"
207+msgid "Super + 1 to 0"
172msgstr ""
208msgstr ""
173
209
174−#: qml/Components/KeyboardShortcutsOverlay.qml:169
210+#: qml/Components/KeyboardShortcutsOverlay.qml:182
175msgid "Same as clicking on a launcher icon."
211msgid "Same as clicking on a launcher icon."
176msgstr ""
212msgstr ""
177
213
178−#: qml/Components/KeyboardShortcutsOverlay.qml:181
214+#: qml/Components/KeyboardShortcutsOverlay.qml:190
215+msgid "Super + A"
216+msgstr ""
217+
218+#: qml/Components/KeyboardShortcutsOverlay.qml:195
219+msgid "Opens the Application Drawer."
220+msgstr ""
221+
222+#: qml/Components/KeyboardShortcutsOverlay.qml:207
179msgid "Scopes"
223msgid "Scopes"
180msgstr ""
224msgstr ""
181
225
182−#: qml/Components/KeyboardShortcutsOverlay.qml:188
226+#: qml/Components/KeyboardShortcutsOverlay.qml:214
183msgid "Super (Tap)"
227msgid "Super (Tap)"
184msgstr ""
228msgstr ""
185
229
186−#: qml/Components/KeyboardShortcutsOverlay.qml:193
230+#: qml/Components/KeyboardShortcutsOverlay.qml:219
187msgid "Opens the Scopes home."
231msgid "Opens the Scopes home."
188msgstr ""
232msgstr ""
189
233
190−#: qml/Components/KeyboardShortcutsOverlay.qml:209
234+#: qml/Components/KeyboardShortcutsOverlay.qml:235
191msgid "Switching"
235msgid "Switching"
192msgstr ""
236msgstr ""
193
237
194−#: qml/Components/KeyboardShortcutsOverlay.qml:216
238+#: qml/Components/KeyboardShortcutsOverlay.qml:242
195msgid "Alt + Tab"
239msgid "Alt + Tab"
196msgstr ""
240msgstr ""
197
241
198−#: qml/Components/KeyboardShortcutsOverlay.qml:221
242+#: qml/Components/KeyboardShortcutsOverlay.qml:247
199msgid "Switches between applications."
243msgid "Switches between applications."
200msgstr ""
244msgstr ""
201
245
202−#: qml/Components/KeyboardShortcutsOverlay.qml:229
246+#: qml/Components/KeyboardShortcutsOverlay.qml:255
203msgid "Super + W"
247msgid "Super + W"
204msgstr ""
248msgstr ""
205
249
206−#: qml/Components/KeyboardShortcutsOverlay.qml:234
250+#: qml/Components/KeyboardShortcutsOverlay.qml:260
207msgid "Opens the desktop spread."
251msgid "Opens the desktop spread."
208msgstr ""
252msgstr ""
209
253
210−#: qml/Components/KeyboardShortcutsOverlay.qml:242
254+#: qml/Components/KeyboardShortcutsOverlay.qml:268
211msgid "Cursor Left or Right"
255msgid "Cursor Left or Right"
212msgstr ""
256msgstr ""
213
257
214−#: qml/Components/KeyboardShortcutsOverlay.qml:247
258+#: qml/Components/KeyboardShortcutsOverlay.qml:273
215msgid "Moves the focus."
259msgid "Moves the focus."
216msgstr ""
260msgstr ""
217
261
218−#: qml/Components/KeyboardShortcutsOverlay.qml:259
262+#: qml/Components/KeyboardShortcutsOverlay.qml:285
219msgid "Windows"
263msgid "Windows"
220msgstr ""
264msgstr ""
221
265
222−#: qml/Components/KeyboardShortcutsOverlay.qml:266
266+#: qml/Components/KeyboardShortcutsOverlay.qml:292
223msgid "Ctrl + Super + D"
267msgid "Ctrl + Super + D"
224msgstr ""
268msgstr ""
225
269
226−#: qml/Components/KeyboardShortcutsOverlay.qml:271
270+#: qml/Components/KeyboardShortcutsOverlay.qml:297
227msgid "Minimizes all windows."
271msgid "Minimizes all windows."
228msgstr ""
272msgstr ""
229
273
230−#: qml/Components/KeyboardShortcutsOverlay.qml:279
274+#: qml/Components/KeyboardShortcutsOverlay.qml:305
231msgid "Ctrl + Super + Up"
275msgid "Ctrl + Super + Up"
232msgstr ""
276msgstr ""
233
277
234−#: qml/Components/KeyboardShortcutsOverlay.qml:284
278+#: qml/Components/KeyboardShortcutsOverlay.qml:310
235msgid "Maximizes the current window."
279msgid "Maximizes the current window."
236msgstr ""
280msgstr ""
237
281
238−#: qml/Components/KeyboardShortcutsOverlay.qml:292
282+#: qml/Components/KeyboardShortcutsOverlay.qml:318
239msgid "Ctrl + Super + Down"
283msgid "Ctrl + Super + Down"
240msgstr ""
284msgstr ""
241
285
242−#: qml/Components/KeyboardShortcutsOverlay.qml:297
286+#: qml/Components/KeyboardShortcutsOverlay.qml:323
243msgid "Minimizes or restores the current window."
287msgid "Minimizes or restores the current window."
244msgstr ""
288msgstr ""
245
289
246−#: qml/Components/KeyboardShortcutsOverlay.qml:305
290+#: qml/Components/KeyboardShortcutsOverlay.qml:331
247msgid "Ctrl + Super + Left or Right"
291msgid "Ctrl + Super + Left or Right"
248msgstr ""
292msgstr ""
249
293
250−#: qml/Components/KeyboardShortcutsOverlay.qml:310
294+#: qml/Components/KeyboardShortcutsOverlay.qml:336
251msgid "Semi-maximizes the current window."
295msgid "Semi-maximizes the current window."
252msgstr ""
296msgstr ""
253
297
254−#: qml/Components/KeyboardShortcutsOverlay.qml:318
298+#: qml/Components/KeyboardShortcutsOverlay.qml:344
255msgid "Alt + F4"
299msgid "Alt + F4"
256msgstr ""
300msgstr ""
257
301
258−#: qml/Components/KeyboardShortcutsOverlay.qml:323
302+#: qml/Components/KeyboardShortcutsOverlay.qml:349
259msgid "Closes the current window."
303msgid "Closes the current window."
260msgstr ""
304msgstr ""
261
305
262−#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
306+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:228
263msgid "Return to Call"
307msgid "Return to Call"
264msgstr ""
308msgstr ""
265
309
@@ -267,7 +311,7 @@ msgstr ""
267msgid "Emergency Call"
311msgid "Emergency Call"
268msgstr "هێڵی فریاگوزاری"
312msgstr "هێڵی فریاگوزاری"
269
313
270−#: qml/Components/Lockscreen.qml:244
314+#: qml/Components/Lockscreen.qml:245
271msgid "OK"
315msgid "OK"
272msgstr ""
316msgstr ""
273
317
@@ -281,29 +325,29 @@ msgstr ""
281msgid "%1:%2"
325msgid "%1:%2"
282msgstr ""
326msgstr ""
283
327
284−#: qml/Components/ModeSwitchWarningDialog.qml:32
328+#: qml/Components/ModeSwitchWarningDialog.qml:33
285msgid "Apps may have unsaved data:"
329msgid "Apps may have unsaved data:"
286msgstr ""
330msgstr ""
287
331
288−#: qml/Components/ModeSwitchWarningDialog.qml:57
332+#: qml/Components/ModeSwitchWarningDialog.qml:60
289msgctxt ""
333msgctxt ""
290"Re-dock means connect the device again to an external screen/mouse/keyboard"
334"Re-dock means connect the device again to an external screen/mouse/keyboard"
291msgid "Re-dock, save your work and close these apps to continue."
335msgid "Re-dock, save your work and close these apps to continue."
292msgstr ""
336msgstr ""
293
337
294−#: qml/Components/ModeSwitchWarningDialog.qml:63
338+#: qml/Components/ModeSwitchWarningDialog.qml:67
295msgid "Or force close now (unsaved data will be lost)."
339msgid "Or force close now (unsaved data will be lost)."
296msgstr ""
340msgstr ""
297
341
298−#: qml/Components/ModeSwitchWarningDialog.qml:75
342+#: qml/Components/ModeSwitchWarningDialog.qml:80
299msgid "OK, I will reconnect"
343msgid "OK, I will reconnect"
300msgstr ""
344msgstr ""
301
345
302−#: qml/Components/ModeSwitchWarningDialog.qml:76
346+#: qml/Components/ModeSwitchWarningDialog.qml:81
303msgid "Reconnect now!"
347msgid "Reconnect now!"
304msgstr ""
348msgstr ""
305
349
306−#: qml/Components/ModeSwitchWarningDialog.qml:88
350+#: qml/Components/ModeSwitchWarningDialog.qml:94
307msgid "Close all"
351msgid "Close all"
308msgstr ""
352msgstr ""
309
353
@@ -311,6 +355,28 @@ msgstr ""
311msgid "Preview Share Item"
355msgid "Preview Share Item"
312msgstr ""
356msgstr ""
313
357
358+#: qml/Components/VirtualTouchPad.qml:317
359+msgid ""
360+"Your device is now connected to an external display. Use this screen as a "
361+"touch pad to interact with the pointer."
362+msgstr ""
363+
364+#: qml/Components/VirtualTouchPad.qml:327
365+msgid "Tap left button to click."
366+msgstr ""
367+
368+#: qml/Components/VirtualTouchPad.qml:339
369+msgid "Tap right button to right click."
370+msgstr ""
371+
372+#: qml/Components/VirtualTouchPad.qml:351
373+msgid "Swipe with two fingers to scroll."
374+msgstr ""
375+
376+#: qml/Components/VirtualTouchPad.qml:396
377+msgid "Find more settings in the system settings."
378+msgstr ""
379+
314#: qml/Dash/DashPageHeader.qml:361
380#: qml/Dash/DashPageHeader.qml:361
315msgctxt "Button: Open the Ubuntu Store"
381msgctxt "Button: Open the Ubuntu Store"
316msgid "Store"
382msgid "Store"
@@ -342,24 +408,24 @@ msgstr ""
342msgid "Reset"
408msgid "Reset"
343msgstr ""
409msgstr ""
344
410
345−#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
411+#: qml/Dash/GenericScopeView.qml:547 qml/Dash/GenericScopeView.qml:718
346msgid "Show less"
412msgid "Show less"
347msgstr ""
413msgstr ""
348
414
349−#: qml/Dash/GenericScopeView.qml:545
415+#: qml/Dash/GenericScopeView.qml:547
350msgid "Show all"
416msgid "Show all"
351msgstr ""
417msgstr ""
352
418
353−#: qml/Dash/GenericScopeView.qml:576
419+#: qml/Dash/GenericScopeView.qml:578
354msgctxt "Label: Hint for dash search line edit"
420msgctxt "Label: Hint for dash search line edit"
355msgid "Search"
421msgid "Search"
356msgstr ""
422msgstr ""
357
423
358−#: qml/Dash/PageHeaderExtraPanel.qml:57
424+#: qml/Dash/PageHeaderExtraPanel.qml:67
359msgid "Recent Searches"
425msgid "Recent Searches"
360msgstr ""
426msgstr ""
361
427
362−#: qml/Dash/PageHeaderExtraPanel.qml:68
428+#: qml/Dash/PageHeaderExtraPanel.qml:78
363msgid "Clear All"
429msgid "Clear All"
364msgstr ""
430msgstr ""
365
431
@@ -396,24 +462,18 @@ msgstr ""
396msgid "Enable location data"
462msgid "Enable location data"
397msgstr ""
463msgstr ""
398
464
399−#: qml/Dash/ScopesList.qml:57
465+#: qml/Dash/ScopesList.qml:146
400msgid "Manage"
466msgid "Manage"
401msgstr ""
467msgstr ""
402
468
403−#: qml/Dash/ScopesList.qml:104
469+#: qml/Dash/ScopesList.qml:187
404msgid "Home"
470msgid "Home"
405msgstr ""
471msgstr ""
406
472
407−#: qml/Dash/ScopesList.qml:105
473+#: qml/Dash/ScopesList.qml:188
408msgid "Also installed"
474msgid "Also installed"
409msgstr ""
475msgstr ""
410
476
411−#: qml/DisabledScreenNotice.qml:109
412−msgid ""
413−"Your device is now connected to an external display. Use this screen as a "
414−"touch pad to interact with the pointer."
415−msgstr ""
416−
417#: qml/Greeter/CoverPage.qml:127
477#: qml/Greeter/CoverPage.qml:127
418msgid "Unlock"
478msgid "Unlock"
419msgstr ""
479msgstr ""
@@ -437,32 +497,45 @@ msgid_plural "Please wait %1 minutes and then try again…"
437msgstr[0] ""
497msgstr[0] ""
438msgstr[1] ""
498msgstr[1] ""
439
499
440−#: qml/Greeter/Greeter.qml:596
500+#: qml/Greeter/Greeter.qml:550
441msgid "Try again"
501msgid "Try again"
442msgstr ""
502msgstr ""
443
503
444−#: qml/Greeter/LoginList.qml:70
504+#: qml/Greeter/Greeter.qml:551
505+msgid "Enter passphrase to unlock"
506+msgstr ""
507+
508+#: qml/Greeter/Greeter.qml:552
509+msgid "Enter passcode to unlock"
510+msgstr ""
511+
512+#: qml/Greeter/NarrowView.qml:228
513+msgid "Emergency"
514+msgstr ""
515+
516+#: qml/Greeter/PromptList.qml:126
445msgid "Passphrase"
517msgid "Passphrase"
446msgstr ""
518msgstr ""
447
519
448−#: qml/Greeter/LoginList.qml:71
520+#: qml/Greeter/PromptList.qml:126
449msgid "Passcode"
521msgid "Passcode"
450msgstr ""
522msgstr ""
451
523
452−#: qml/Greeter/LoginList.qml:98
524+#: qml/Greeter/SessionsList.qml:124
453−msgid "Retry"
525+msgid "Select desktop environment"
454msgstr ""
526msgstr ""
455
527
456−#: qml/Greeter/LoginList.qml:99
528+#: qml/Launcher/Drawer.qml:94
457−msgid "Log In"
529+msgid "Search…"
458msgstr ""
530msgstr ""
459
531
460−#: qml/Greeter/NarrowView.qml:252
532+#: qml/Launcher/Drawer.qml:129
533+msgctxt "Apps sorted alphabetically"
461−msgid "Emergency"
534+msgid "A-Z"
462msgstr ""
535msgstr ""
463
536
464−#: qml/Greeter/SessionsList.qml:122
537+#: qml/Launcher/MoreAppsHeader.qml:55
465−msgid "Select desktop environment"
538+msgid "More apps in the store"
466msgstr ""
539msgstr ""
467
540
468#: qml/Notifications/NotificationMenuItemFactory.qml:124
541#: qml/Notifications/NotificationMenuItemFactory.qml:124
@@ -477,62 +550,62 @@ msgstr ""
477msgid "Conference"
550msgid "Conference"
478msgstr ""
551msgstr ""
479
552
480−#: qml/Panel/Indicators/MenuItemFactory.qml:847
553+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:869
481msgid "Nothing is playing"
554msgid "Nothing is playing"
482msgstr ""
555msgstr ""
483
556
484−#: qml/Panel/Indicators/MenuItemFactory.qml:975
557+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:997
485#, qt-format
558#, qt-format
486msgid "%1 hour"
559msgid "%1 hour"
487msgid_plural "%1 hours"
560msgid_plural "%1 hours"
488msgstr[0] ""
561msgstr[0] ""
489msgstr[1] ""
562msgstr[1] ""
490
563
491−#: qml/Panel/Indicators/MenuItemFactory.qml:979
564+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1001
492#, qt-format
565#, qt-format
493msgid "%1 minute"
566msgid "%1 minute"
494msgid_plural "%1 minutes"
567msgid_plural "%1 minutes"
495msgstr[0] ""
568msgstr[0] ""
496msgstr[1] ""
569msgstr[1] ""
497
570
498−#: qml/Panel/Indicators/MenuItemFactory.qml:984
571+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1006
499#, qt-format
572#, qt-format
500msgid "%1 second"
573msgid "%1 second"
501msgid_plural "%1 seconds"
574msgid_plural "%1 seconds"
502msgstr[0] ""
575msgstr[0] ""
503msgstr[1] ""
576msgstr[1] ""
504
577
505−#: qml/Panel/Indicators/MenuItemFactory.qml:987
578+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1009
506msgid "0 seconds"
579msgid "0 seconds"
507msgstr ""
580msgstr ""
508
581
509#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
582#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
510−#: qml/Panel/Indicators/MenuItemFactory.qml:989
583+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1011
511#, qt-format
584#, qt-format
512msgid "%1 remaining"
585msgid "%1 remaining"
513msgstr ""
586msgstr ""
514
587
515−#: qml/Panel/Indicators/MenuItemFactory.qml:995
588+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1017
516msgid "In queue…"
589msgid "In queue…"
517msgstr ""
590msgstr ""
518
591
519−#: qml/Panel/Indicators/MenuItemFactory.qml:999
592+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1021
520msgid "Downloading"
593msgid "Downloading"
521msgstr ""
594msgstr ""
522
595
523−#: qml/Panel/Indicators/MenuItemFactory.qml:1001
596+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1023
524msgid "Paused, tap to resume"
597msgid "Paused, tap to resume"
525msgstr ""
598msgstr ""
526
599
527−#: qml/Panel/Indicators/MenuItemFactory.qml:1003
600+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1025
528msgid "Canceled"
601msgid "Canceled"
529msgstr ""
602msgstr ""
530
603
531−#: qml/Panel/Indicators/MenuItemFactory.qml:1005
604+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1027
532msgid "Finished"
605msgid "Finished"
533msgstr ""
606msgstr ""
534
607
535−#: qml/Panel/Indicators/MenuItemFactory.qml:1007
608+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1029
536msgid "Failed, tap to retry"
609msgid "Failed, tap to retry"
537msgstr ""
610msgstr ""
538
611
@@ -552,12 +625,16 @@ msgctxt "Button: Call back on phone"
552msgid "Call back"
625msgid "Call back"
553msgstr ""
626msgstr ""
554
627
628+#: qml/Panel/PanelMenuPage.qml:92
629+msgid "Back"
630+msgstr ""
631+
555#: qml/Stage/SideStage.qml:76
632#: qml/Stage/SideStage.qml:76
556msgid "Drag using 3 fingers any application from one window to the other"
633msgid "Drag using 3 fingers any application from one window to the other"
557msgstr ""
634msgstr ""
558
635
559#: qml/Tutorial/TutorialLeftLong.qml:49
636#: qml/Tutorial/TutorialLeftLong.qml:49
560−msgid "Long swipe from the left edge to open the Today scope"
637+msgid "Long swipe from the left edge to open the Application Drawer"
561msgstr ""
638msgstr ""
562
639
563#: qml/Tutorial/TutorialLeft.qml:47
640#: qml/Tutorial/TutorialLeft.qml:47
@@ -586,7 +663,7 @@ msgid "Language"
586msgstr ""
663msgstr ""
587
664
588#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
665#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
589−#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
666+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/40-location.qml:271
590#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
667#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
591#: qml/Wizard/Pages/70-passwd-type.qml:145
668#: qml/Wizard/Pages/70-passwd-type.qml:145
592#: qml/Wizard/Pages/75-report-check.qml:84
669#: qml/Wizard/Pages/75-report-check.qml:84
@@ -607,25 +684,24 @@ msgstr ""
607msgid "Keyboard layout"
684msgid "Keyboard layout"
608msgstr ""
685msgstr ""
609
686
610−#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
687+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:206
611−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
688+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/sim.qml:101
612−#: qml/Wizard/Pages/sim.qml:101
613msgid "Skip"
689msgid "Skip"
614msgstr ""
690msgstr ""
615
691
616−#: qml/Wizard/Pages/30-wifi.qml:31
692+#: qml/Wizard/Pages/30-wifi.qml:30
617msgid "Connect to Wi‑Fi"
693msgid "Connect to Wi‑Fi"
618msgstr ""
694msgstr ""
619
695
620−#: qml/Wizard/Pages/30-wifi.qml:132
696+#: qml/Wizard/Pages/30-wifi.qml:131
621msgid "Connected"
697msgid "Connected"
622msgstr ""
698msgstr ""
623
699
624−#: qml/Wizard/Pages/30-wifi.qml:165
700+#: qml/Wizard/Pages/30-wifi.qml:164
625msgid "Available Wi-Fi networks"
701msgid "Available Wi-Fi networks"
626msgstr ""
702msgstr ""
627
703
628−#: qml/Wizard/Pages/30-wifi.qml:166
704+#: qml/Wizard/Pages/30-wifi.qml:165
629msgid "No available Wi-Fi networks"
705msgid "No available Wi-Fi networks"
630msgstr ""
706msgstr ""
631
707
@@ -712,35 +788,6 @@ msgstr ""
712msgid "Privacy policy"
788msgid "Privacy policy"
713msgstr ""
789msgstr ""
714
790
715−#: qml/Wizard/Pages/77-system-update.qml:28
716−msgid "Update Device"
717−msgstr ""
718−
719−#: qml/Wizard/Pages/77-system-update.qml:55
720−msgid ""
721−"There is a system update available and ready to install. Afterwards, the "
722−"device will automatically restart."
723−msgstr ""
724−
725−#: qml/Wizard/Pages/77-system-update.qml:76
726−msgctxt "string identifying name of the update"
727−msgid "Ubuntu system"
728−msgstr ""
729−
730−#: qml/Wizard/Pages/77-system-update.qml:83
731−#, qt-format
732−msgctxt "version of the system update"
733−msgid "Version %1"
734−msgstr ""
735−
736−#: qml/Wizard/Pages/77-system-update.qml:102
737−msgid "This could take a few minutes..."
738−msgstr ""
739−
740−#: qml/Wizard/Pages/77-system-update.qml:116
741−msgid "Install and restart now"
742−msgstr ""
743−
744#: qml/Wizard/Pages/80-finished.qml:89
791#: qml/Wizard/Pages/80-finished.qml:89
745msgid "Welcome to Ubuntu"
792msgid "Welcome to Ubuntu"
746msgstr ""
793msgstr ""
po/co.po+190−140
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-11-16 10:44+0000\n"
10+"POT-Creation-Date: 2017-04-04 22:56+0000\n"
11"PO-Revision-Date: 2016-05-24 10:40+0000\n"
11"PO-Revision-Date: 2016-05-24 10:40+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Corsican <co@li.org>\n"
13"Language-Team: Corsican <co@li.org>\n"
@@ -15,75 +15,103 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
17"Plural-Forms: nplurals=2; plural=n != 1;\n"
18−"X-Launchpad-Export-Date: 2016-11-23 06:34+0000\n"
18+"X-Launchpad-Export-Date: 2017-04-07 06:29+0000\n"
19−"X-Generator: Launchpad (build 18269)\n"
19+"X-Generator: Launchpad (build 18343)\n"
20
20
21−#: plugins/LightDM/Greeter.cpp:123
21+#: plugins/LightDM/Greeter.cpp:188
22msgid "Password: "
22msgid "Password: "
23msgstr "Parolla d'ordine: "
23msgstr "Parolla d'ordine: "
24
24
25+#: plugins/LightDM/Greeter.cpp:203
26+msgid "Username"
27+msgstr ""
28+
29+#: plugins/LightDM/Greeter.cpp:242
30+msgid "Failed to authenticate"
31+msgstr ""
32+
33+#: plugins/LightDM/Greeter.cpp:244
34+msgid "Invalid password, please try again"
35+msgstr ""
36+
37+#: plugins/LightDM/Greeter.cpp:254
38+msgid "Log In"
39+msgstr ""
40+
41+#: plugins/LightDM/Greeter.cpp:254
42+msgid "Retry"
43+msgstr "Turnà à pruvà"
44+
45+#: plugins/LightDM/UsersModel.cpp:157
46+msgid "Login"
47+msgstr ""
48+
49+#: plugins/LightDM/UsersModel.cpp:165
50+msgid "Guest Session"
51+msgstr ""
52+
25#: plugins/Unity/Launcher/launcheritem.cpp:49
53#: plugins/Unity/Launcher/launcheritem.cpp:49
26−#: plugins/Unity/Launcher/launcheritem.cpp:108
54+#: plugins/Unity/Launcher/launcheritem.cpp:123
27msgid "Pin shortcut"
55msgid "Pin shortcut"
28msgstr "Fissà l'accurtatoghju"
56msgstr "Fissà l'accurtatoghju"
29
57
30−#: plugins/Unity/Launcher/launcheritem.cpp:54
58+#: plugins/Unity/Launcher/launcheritem.cpp:55
31msgid "Quit"
59msgid "Quit"
32msgstr "Abbandunà"
60msgstr "Abbandunà"
33
61
34−#: plugins/Unity/Launcher/launcheritem.cpp:108
62+#: plugins/Unity/Launcher/launcheritem.cpp:123
35msgid "Unpin shortcut"
63msgid "Unpin shortcut"
36msgstr "Toglie l'accurtatoghju"
64msgstr "Toglie l'accurtatoghju"
37
65
38−#: qml/Components/Dialogs.qml:149
66+#: qml/Components/Dialogs.qml:176
39msgctxt "Title: Lock/Log out dialog"
67msgctxt "Title: Lock/Log out dialog"
40msgid "Log out"
68msgid "Log out"
41msgstr "Escì"
69msgstr "Escì"
42
70
43−#: qml/Components/Dialogs.qml:150
71+#: qml/Components/Dialogs.qml:177
44msgid "Are you sure you want to log out?"
72msgid "Are you sure you want to log out?"
45msgstr "Site sicuri di vulè escì?"
73msgstr "Site sicuri di vulè escì?"
46
74
47−#: qml/Components/Dialogs.qml:152
75+#: qml/Components/Dialogs.qml:180
48msgctxt "Button: Lock the system"
76msgctxt "Button: Lock the system"
49msgid "Lock"
77msgid "Lock"
50msgstr "Bluccà"
78msgstr "Bluccà"
51
79
52−#: qml/Components/Dialogs.qml:159
80+#: qml/Components/Dialogs.qml:191
53msgctxt "Button: Log out from the system"
81msgctxt "Button: Log out from the system"
54msgid "Log Out"
82msgid "Log Out"
55msgstr "Escì"
83msgstr "Escì"
56
84
57−#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
85+#: qml/Components/Dialogs.qml:199 qml/Components/Dialogs.qml:264
58−#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
86+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:208
59#: qml/Wizard/Pages/passcode-confirm.qml:32
87#: qml/Wizard/Pages/passcode-confirm.qml:32
60#: qml/Wizard/Pages/passcode-set.qml:32
88#: qml/Wizard/Pages/passcode-set.qml:32
61msgid "Cancel"
89msgid "Cancel"
62msgstr "Annullà"
90msgstr "Annullà"
63
91
64−#: qml/Components/Dialogs.qml:178
92+#: qml/Components/Dialogs.qml:211
65msgctxt "Title: Reboot dialog"
93msgctxt "Title: Reboot dialog"
66msgid "Reboot"
94msgid "Reboot"
67msgstr "Turnà ad avvià"
95msgstr "Turnà ad avvià"
68
96
69−#: qml/Components/Dialogs.qml:179
97+#: qml/Components/Dialogs.qml:212
70msgid "Are you sure you want to reboot?"
98msgid "Are you sure you want to reboot?"
71msgstr "Site sicuri di vulè turnà ad avvià?"
99msgstr "Site sicuri di vulè turnà ad avvià?"
72
100
73−#: qml/Components/Dialogs.qml:181
101+#: qml/Components/Dialogs.qml:215
74msgid "No"
102msgid "No"
75msgstr "Nò"
103msgstr "Nò"
76
104
77−#: qml/Components/Dialogs.qml:187
105+#: qml/Components/Dialogs.qml:223
78msgid "Yes"
106msgid "Yes"
79msgstr "Iè"
107msgstr "Iè"
80
108
81−#: qml/Components/Dialogs.qml:202
109+#: qml/Components/Dialogs.qml:239
82msgctxt "Title: Power off/Restart dialog"
110msgctxt "Title: Power off/Restart dialog"
83msgid "Power"
111msgid "Power"
84msgstr "Alimentazione"
112msgstr "Alimentazione"
85
113
86−#: qml/Components/Dialogs.qml:203
114+#: qml/Components/Dialogs.qml:240
87msgid ""
115msgid ""
88"Are you sure you would like\n"
116"Are you sure you would like\n"
89"to power off?"
117"to power off?"
@@ -91,12 +119,12 @@ msgstr ""
91"Site sicuri di vulè\n"
119"Site sicuri di vulè\n"
92"spenghje?"
120"spenghje?"
93
121
94−#: qml/Components/Dialogs.qml:205
122+#: qml/Components/Dialogs.qml:244
95msgctxt "Button: Power off the system"
123msgctxt "Button: Power off the system"
96msgid "Power off"
124msgid "Power off"
97msgstr "Spenghje"
125msgstr "Spenghje"
98
126
99−#: qml/Components/Dialogs.qml:214
127+#: qml/Components/Dialogs.qml:255
100msgctxt "Button: Restart the system"
128msgctxt "Button: Restart the system"
101msgid "Restart"
129msgid "Restart"
102msgstr "Turnà ad avvià"
130msgstr "Turnà ad avvià"
@@ -122,7 +150,7 @@ msgid "Alt + PrtScr"
122msgstr ""
150msgstr ""
123
151
124#: qml/Components/KeyboardShortcutsOverlay.qml:80
152#: qml/Components/KeyboardShortcutsOverlay.qml:80
125−msgid "Takes a screenshot of a window."
153+msgid "Takes a screenshot of the current window."
126msgstr ""
154msgstr ""
127
155
128#: qml/Components/KeyboardShortcutsOverlay.qml:88
156#: qml/Components/KeyboardShortcutsOverlay.qml:88
@@ -141,127 +169,143 @@ msgstr ""
141msgid "Switches to previous keyboard layout."
169msgid "Switches to previous keyboard layout."
142msgstr ""
170msgstr ""
143
171
144−#: qml/Components/KeyboardShortcutsOverlay.qml:118
172+#: qml/Components/KeyboardShortcutsOverlay.qml:114
173+msgid "Ctrl + Alt + T"
174+msgstr ""
175+
176+#: qml/Components/KeyboardShortcutsOverlay.qml:119
177+msgid "Starts the Terminal application."
178+msgstr ""
179+
180+#: qml/Components/KeyboardShortcutsOverlay.qml:131
145msgid "Launcher"
181msgid "Launcher"
146msgstr ""
182msgstr ""
147
183
148−#: qml/Components/KeyboardShortcutsOverlay.qml:125
184+#: qml/Components/KeyboardShortcutsOverlay.qml:138
149msgid "Super (Hold)"
185msgid "Super (Hold)"
150msgstr ""
186msgstr ""
151
187
152−#: qml/Components/KeyboardShortcutsOverlay.qml:130
188+#: qml/Components/KeyboardShortcutsOverlay.qml:143
153msgid "Opens the launcher, displays shortcuts."
189msgid "Opens the launcher, displays shortcuts."
154msgstr ""
190msgstr ""
155
191
156−#: qml/Components/KeyboardShortcutsOverlay.qml:138
192+#: qml/Components/KeyboardShortcutsOverlay.qml:151
157msgid "Alt + F1"
193msgid "Alt + F1"
158msgstr ""
194msgstr ""
159
195
160−#: qml/Components/KeyboardShortcutsOverlay.qml:143
196+#: qml/Components/KeyboardShortcutsOverlay.qml:156
161msgid "Opens launcher keyboard navigation mode."
197msgid "Opens launcher keyboard navigation mode."
162msgstr ""
198msgstr ""
163
199
164−#: qml/Components/KeyboardShortcutsOverlay.qml:151
200+#: qml/Components/KeyboardShortcutsOverlay.qml:164
165msgid "Super + Tab"
201msgid "Super + Tab"
166msgstr ""
202msgstr ""
167
203
168−#: qml/Components/KeyboardShortcutsOverlay.qml:156
204+#: qml/Components/KeyboardShortcutsOverlay.qml:169
169msgid "Switches applications via the launcher."
205msgid "Switches applications via the launcher."
170msgstr ""
206msgstr ""
171
207
172−#: qml/Components/KeyboardShortcutsOverlay.qml:164
208+#: qml/Components/KeyboardShortcutsOverlay.qml:177
173−msgid "Super + 0 to 9"
209+msgid "Super + 1 to 0"
174msgstr ""
210msgstr ""
175
211
176−#: qml/Components/KeyboardShortcutsOverlay.qml:169
212+#: qml/Components/KeyboardShortcutsOverlay.qml:182
177msgid "Same as clicking on a launcher icon."
213msgid "Same as clicking on a launcher icon."
178msgstr ""
214msgstr ""
179
215
180−#: qml/Components/KeyboardShortcutsOverlay.qml:181
216+#: qml/Components/KeyboardShortcutsOverlay.qml:190
217+msgid "Super + A"
218+msgstr ""
219+
220+#: qml/Components/KeyboardShortcutsOverlay.qml:195
221+msgid "Opens the Application Drawer."
222+msgstr ""
223+
224+#: qml/Components/KeyboardShortcutsOverlay.qml:207
181msgid "Scopes"
225msgid "Scopes"
182msgstr ""
226msgstr ""
183
227
184−#: qml/Components/KeyboardShortcutsOverlay.qml:188
228+#: qml/Components/KeyboardShortcutsOverlay.qml:214
185msgid "Super (Tap)"
229msgid "Super (Tap)"
186msgstr ""
230msgstr ""
187
231
188−#: qml/Components/KeyboardShortcutsOverlay.qml:193
232+#: qml/Components/KeyboardShortcutsOverlay.qml:219
189msgid "Opens the Scopes home."
233msgid "Opens the Scopes home."
190msgstr ""
234msgstr ""
191
235
192−#: qml/Components/KeyboardShortcutsOverlay.qml:209
236+#: qml/Components/KeyboardShortcutsOverlay.qml:235
193msgid "Switching"
237msgid "Switching"
194msgstr ""
238msgstr ""
195
239
196−#: qml/Components/KeyboardShortcutsOverlay.qml:216
240+#: qml/Components/KeyboardShortcutsOverlay.qml:242
197msgid "Alt + Tab"
241msgid "Alt + Tab"
198msgstr ""
242msgstr ""
199
243
200−#: qml/Components/KeyboardShortcutsOverlay.qml:221
244+#: qml/Components/KeyboardShortcutsOverlay.qml:247
201msgid "Switches between applications."
245msgid "Switches between applications."
202msgstr ""
246msgstr ""
203
247
204−#: qml/Components/KeyboardShortcutsOverlay.qml:229
248+#: qml/Components/KeyboardShortcutsOverlay.qml:255
205msgid "Super + W"
249msgid "Super + W"
206msgstr ""
250msgstr ""
207
251
208−#: qml/Components/KeyboardShortcutsOverlay.qml:234
252+#: qml/Components/KeyboardShortcutsOverlay.qml:260
209msgid "Opens the desktop spread."
253msgid "Opens the desktop spread."
210msgstr ""
254msgstr ""
211
255
212−#: qml/Components/KeyboardShortcutsOverlay.qml:242
256+#: qml/Components/KeyboardShortcutsOverlay.qml:268
213msgid "Cursor Left or Right"
257msgid "Cursor Left or Right"
214msgstr ""
258msgstr ""
215
259
216−#: qml/Components/KeyboardShortcutsOverlay.qml:247
260+#: qml/Components/KeyboardShortcutsOverlay.qml:273
217msgid "Moves the focus."
261msgid "Moves the focus."
218msgstr ""
262msgstr ""
219
263
220−#: qml/Components/KeyboardShortcutsOverlay.qml:259
264+#: qml/Components/KeyboardShortcutsOverlay.qml:285
221msgid "Windows"
265msgid "Windows"
222msgstr ""
266msgstr ""
223
267
224−#: qml/Components/KeyboardShortcutsOverlay.qml:266
268+#: qml/Components/KeyboardShortcutsOverlay.qml:292
225msgid "Ctrl + Super + D"
269msgid "Ctrl + Super + D"
226msgstr ""
270msgstr ""
227
271
228−#: qml/Components/KeyboardShortcutsOverlay.qml:271
272+#: qml/Components/KeyboardShortcutsOverlay.qml:297
229msgid "Minimizes all windows."
273msgid "Minimizes all windows."
230msgstr ""
274msgstr ""
231
275
232−#: qml/Components/KeyboardShortcutsOverlay.qml:279
276+#: qml/Components/KeyboardShortcutsOverlay.qml:305
233msgid "Ctrl + Super + Up"
277msgid "Ctrl + Super + Up"
234msgstr ""
278msgstr ""
235
279
236−#: qml/Components/KeyboardShortcutsOverlay.qml:284
280+#: qml/Components/KeyboardShortcutsOverlay.qml:310
237msgid "Maximizes the current window."
281msgid "Maximizes the current window."
238msgstr ""
282msgstr ""
239
283
240−#: qml/Components/KeyboardShortcutsOverlay.qml:292
284+#: qml/Components/KeyboardShortcutsOverlay.qml:318
241msgid "Ctrl + Super + Down"
285msgid "Ctrl + Super + Down"
242msgstr ""
286msgstr ""
243
287
244−#: qml/Components/KeyboardShortcutsOverlay.qml:297
288+#: qml/Components/KeyboardShortcutsOverlay.qml:323
245msgid "Minimizes or restores the current window."
289msgid "Minimizes or restores the current window."
246msgstr ""
290msgstr ""
247
291
248−#: qml/Components/KeyboardShortcutsOverlay.qml:305
292+#: qml/Components/KeyboardShortcutsOverlay.qml:331
249msgid "Ctrl + Super + Left or Right"
293msgid "Ctrl + Super + Left or Right"
250msgstr ""
294msgstr ""
251
295
252−#: qml/Components/KeyboardShortcutsOverlay.qml:310
296+#: qml/Components/KeyboardShortcutsOverlay.qml:336
253msgid "Semi-maximizes the current window."
297msgid "Semi-maximizes the current window."
254msgstr ""
298msgstr ""
255
299
256−#: qml/Components/KeyboardShortcutsOverlay.qml:318
300+#: qml/Components/KeyboardShortcutsOverlay.qml:344
257msgid "Alt + F4"
301msgid "Alt + F4"
258msgstr ""
302msgstr ""
259
303
260−#: qml/Components/KeyboardShortcutsOverlay.qml:323
304+#: qml/Components/KeyboardShortcutsOverlay.qml:349
261msgid "Closes the current window."
305msgid "Closes the current window."
262msgstr ""
306msgstr ""
263
307
264−#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
308+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:228
265msgid "Return to Call"
309msgid "Return to Call"
266msgstr "Turnà à a Chjamata"
310msgstr "Turnà à a Chjamata"
267
311
@@ -269,7 +313,7 @@ msgstr "Turnà à a Chjamata"
269msgid "Emergency Call"
313msgid "Emergency Call"
270msgstr "Chjamata d'emergenza"
314msgstr "Chjamata d'emergenza"
271
315
272−#: qml/Components/Lockscreen.qml:244
316+#: qml/Components/Lockscreen.qml:245
273msgid "OK"
317msgid "OK"
274msgstr "OK"
318msgstr "OK"
275
319
@@ -283,11 +327,11 @@ msgstr ""
283msgid "%1:%2"
327msgid "%1:%2"
284msgstr ""
328msgstr ""
285
329
286−#: qml/Components/ModeSwitchWarningDialog.qml:32
330+#: qml/Components/ModeSwitchWarningDialog.qml:33
287msgid "Apps may have unsaved data:"
331msgid "Apps may have unsaved data:"
288msgstr "E app puderebbenu avè dati micca salvati:"
332msgstr "E app puderebbenu avè dati micca salvati:"
289
333
290−#: qml/Components/ModeSwitchWarningDialog.qml:57
334+#: qml/Components/ModeSwitchWarningDialog.qml:60
291msgctxt ""
335msgctxt ""
292"Re-dock means connect the device again to an external screen/mouse/keyboard"
336"Re-dock means connect the device again to an external screen/mouse/keyboard"
293msgid "Re-dock, save your work and close these apps to continue."
337msgid "Re-dock, save your work and close these apps to continue."
@@ -295,19 +339,19 @@ msgstr ""
295"Turnà à cullegà, salvà u travagliu fattu è chjode sse applicazioni per "
339"Turnà à cullegà, salvà u travagliu fattu è chjode sse applicazioni per "
296"continuà."
340"continuà."
297
341
298−#: qml/Components/ModeSwitchWarningDialog.qml:63
342+#: qml/Components/ModeSwitchWarningDialog.qml:67
299msgid "Or force close now (unsaved data will be lost)."
343msgid "Or force close now (unsaved data will be lost)."
300msgstr "O furzà a chjusura avà (i dati micca salvati seranu perduti)."
344msgstr "O furzà a chjusura avà (i dati micca salvati seranu perduti)."
301
345
302−#: qml/Components/ModeSwitchWarningDialog.qml:75
346+#: qml/Components/ModeSwitchWarningDialog.qml:80
303msgid "OK, I will reconnect"
347msgid "OK, I will reconnect"
304msgstr "OK, sto cunnettendumi..."
348msgstr "OK, sto cunnettendumi..."
305
349
306−#: qml/Components/ModeSwitchWarningDialog.qml:76
350+#: qml/Components/ModeSwitchWarningDialog.qml:81
307msgid "Reconnect now!"
351msgid "Reconnect now!"
308msgstr "Turnà à cunnettesi avà!"
352msgstr "Turnà à cunnettesi avà!"
309
353
310−#: qml/Components/ModeSwitchWarningDialog.qml:88
354+#: qml/Components/ModeSwitchWarningDialog.qml:94
311msgid "Close all"
355msgid "Close all"
312msgstr "Chjode tuttu"
356msgstr "Chjode tuttu"
313
357
@@ -315,6 +359,30 @@ msgstr "Chjode tuttu"
315msgid "Preview Share Item"
359msgid "Preview Share Item"
316msgstr "Anteprima elementi da sparte"
360msgstr "Anteprima elementi da sparte"
317
361
362+#: qml/Components/VirtualTouchPad.qml:317
363+msgid ""
364+"Your device is now connected to an external display. Use this screen as a "
365+"touch pad to interact with the pointer."
366+msgstr ""
367+"U vostru dispusitivu avà hè cunnessu à unu screnu esternu. Usà u screnu di "
368+"ssu dispusitivu cum'è un tappettu tattile per guvernà u puntatore."
369+
370+#: qml/Components/VirtualTouchPad.qml:327
371+msgid "Tap left button to click."
372+msgstr ""
373+
374+#: qml/Components/VirtualTouchPad.qml:339
375+msgid "Tap right button to right click."
376+msgstr ""
377+
378+#: qml/Components/VirtualTouchPad.qml:351
379+msgid "Swipe with two fingers to scroll."
380+msgstr ""
381+
382+#: qml/Components/VirtualTouchPad.qml:396
383+msgid "Find more settings in the system settings."
384+msgstr ""
385+
318#: qml/Dash/DashPageHeader.qml:361
386#: qml/Dash/DashPageHeader.qml:361
319msgctxt "Button: Open the Ubuntu Store"
387msgctxt "Button: Open the Ubuntu Store"
320msgid "Store"
388msgid "Store"
@@ -346,24 +414,24 @@ msgstr "Raffinà i risultati"
346msgid "Reset"
414msgid "Reset"
347msgstr "Re-inizializzà"
415msgstr "Re-inizializzà"
348
416
349−#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
417+#: qml/Dash/GenericScopeView.qml:547 qml/Dash/GenericScopeView.qml:718
350msgid "Show less"
418msgid "Show less"
351msgstr ""
419msgstr ""
352
420
353−#: qml/Dash/GenericScopeView.qml:545
421+#: qml/Dash/GenericScopeView.qml:547
354msgid "Show all"
422msgid "Show all"
355msgstr ""
423msgstr ""
356
424
357−#: qml/Dash/GenericScopeView.qml:576
425+#: qml/Dash/GenericScopeView.qml:578
358msgctxt "Label: Hint for dash search line edit"
426msgctxt "Label: Hint for dash search line edit"
359msgid "Search"
427msgid "Search"
360msgstr "Circà"
428msgstr "Circà"
361
429
362−#: qml/Dash/PageHeaderExtraPanel.qml:57
430+#: qml/Dash/PageHeaderExtraPanel.qml:67
363msgid "Recent Searches"
431msgid "Recent Searches"
364msgstr "Ricerche recente"
432msgstr "Ricerche recente"
365
433
366−#: qml/Dash/PageHeaderExtraPanel.qml:68
434+#: qml/Dash/PageHeaderExtraPanel.qml:78
367msgid "Clear All"
435msgid "Clear All"
368msgstr "Squassà tuttu"
436msgstr "Squassà tuttu"
369
437
@@ -400,26 +468,18 @@ msgstr "Lascià andà per rinnuvà..."
400msgid "Enable location data"
468msgid "Enable location data"
401msgstr "Abilità i dati nant'à u locu"
469msgstr "Abilità i dati nant'à u locu"
402
470
403−#: qml/Dash/ScopesList.qml:57
471+#: qml/Dash/ScopesList.qml:146
404msgid "Manage"
472msgid "Manage"
405msgstr "Gestì"
473msgstr "Gestì"
406
474
407−#: qml/Dash/ScopesList.qml:104
475+#: qml/Dash/ScopesList.qml:187
408msgid "Home"
476msgid "Home"
409msgstr "Accolta"
477msgstr "Accolta"
410
478
411−#: qml/Dash/ScopesList.qml:105
479+#: qml/Dash/ScopesList.qml:188
412msgid "Also installed"
480msgid "Also installed"
413msgstr "Anu dinù installatu..."
481msgstr "Anu dinù installatu..."
414
482
415−#: qml/DisabledScreenNotice.qml:109
416−msgid ""
417−"Your device is now connected to an external display. Use this screen as a "
418−"touch pad to interact with the pointer."
419−msgstr ""
420−"U vostru dispusitivu avà hè cunnessu à unu screnu esternu. Usà u screnu di "
421−"ssu dispusitivu cum'è un tappettu tattile per guvernà u puntatore."
422−
423#: qml/Greeter/CoverPage.qml:127
483#: qml/Greeter/CoverPage.qml:127
424msgid "Unlock"
484msgid "Unlock"
425msgstr "Sbluccà"
485msgstr "Sbluccà"
@@ -447,32 +507,45 @@ msgid_plural "Please wait %1 minutes and then try again…"
447msgstr[0] "Aspettà %1 minutu è po turnà à pruvà…"
507msgstr[0] "Aspettà %1 minutu è po turnà à pruvà…"
448msgstr[1] "Aspettà %1 minuti è po turnà à pruvà…"
508msgstr[1] "Aspettà %1 minuti è po turnà à pruvà…"
449
509
450−#: qml/Greeter/Greeter.qml:596
510+#: qml/Greeter/Greeter.qml:550
451msgid "Try again"
511msgid "Try again"
452msgstr ""
512msgstr ""
453
513
454−#: qml/Greeter/LoginList.qml:70
514+#: qml/Greeter/Greeter.qml:551
515+msgid "Enter passphrase to unlock"
516+msgstr ""
517+
518+#: qml/Greeter/Greeter.qml:552
519+msgid "Enter passcode to unlock"
520+msgstr ""
521+
522+#: qml/Greeter/NarrowView.qml:228
523+msgid "Emergency"
524+msgstr ""
525+
526+#: qml/Greeter/PromptList.qml:126
455msgid "Passphrase"
527msgid "Passphrase"
456msgstr ""
528msgstr ""
457
529
458−#: qml/Greeter/LoginList.qml:71
530+#: qml/Greeter/PromptList.qml:126
459msgid "Passcode"
531msgid "Passcode"
460msgstr ""
532msgstr ""
461
533
462−#: qml/Greeter/LoginList.qml:98
534+#: qml/Greeter/SessionsList.qml:124
463−msgid "Retry"
535+msgid "Select desktop environment"
464−msgstr "Turnà à pruvà"
536+msgstr ""
465
537
466−#: qml/Greeter/LoginList.qml:99
538+#: qml/Launcher/Drawer.qml:94
467−msgid "Log In"
539+msgid "Search…"
468msgstr ""
540msgstr ""
469
541
470−#: qml/Greeter/NarrowView.qml:252
542+#: qml/Launcher/Drawer.qml:129
543+msgctxt "Apps sorted alphabetically"
471−msgid "Emergency"
544+msgid "A-Z"
472msgstr ""
545msgstr ""
473
546
474−#: qml/Greeter/SessionsList.qml:122
547+#: qml/Launcher/MoreAppsHeader.qml:55
475−msgid "Select desktop environment"
548+msgid "More apps in the store"
476msgstr ""
549msgstr ""
477
550
478#: qml/Notifications/NotificationMenuItemFactory.qml:124
551#: qml/Notifications/NotificationMenuItemFactory.qml:124
@@ -487,62 +560,62 @@ msgstr "Tuccà per riturnà à a chjamata..."
487msgid "Conference"
560msgid "Conference"
488msgstr "Cunferenza"
561msgstr "Cunferenza"
489
562
490−#: qml/Panel/Indicators/MenuItemFactory.qml:847
563+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:869
491msgid "Nothing is playing"
564msgid "Nothing is playing"
492msgstr "Nunda in ripruduzione..."
565msgstr "Nunda in ripruduzione..."
493
566
494−#: qml/Panel/Indicators/MenuItemFactory.qml:975
567+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:997
495#, qt-format
568#, qt-format
496msgid "%1 hour"
569msgid "%1 hour"
497msgid_plural "%1 hours"
570msgid_plural "%1 hours"
498msgstr[0] "%1 ora"
571msgstr[0] "%1 ora"
499msgstr[1] "%1 ore"
572msgstr[1] "%1 ore"
500
573
501−#: qml/Panel/Indicators/MenuItemFactory.qml:979
574+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1001
502#, qt-format
575#, qt-format
503msgid "%1 minute"
576msgid "%1 minute"
504msgid_plural "%1 minutes"
577msgid_plural "%1 minutes"
505msgstr[0] "%1 minutu"
578msgstr[0] "%1 minutu"
506msgstr[1] "%1 minuti"
579msgstr[1] "%1 minuti"
507
580
508−#: qml/Panel/Indicators/MenuItemFactory.qml:984
581+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1006
509#, qt-format
582#, qt-format
510msgid "%1 second"
583msgid "%1 second"
511msgid_plural "%1 seconds"
584msgid_plural "%1 seconds"
512msgstr[0] "%1 seconda"
585msgstr[0] "%1 seconda"
513msgstr[1] "%1 seconde"
586msgstr[1] "%1 seconde"
514
587
515−#: qml/Panel/Indicators/MenuItemFactory.qml:987
588+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1009
516msgid "0 seconds"
589msgid "0 seconds"
517msgstr "0 seconde"
590msgstr "0 seconde"
518
591
519#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
592#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
520−#: qml/Panel/Indicators/MenuItemFactory.qml:989
593+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1011
521#, qt-format
594#, qt-format
522msgid "%1 remaining"
595msgid "%1 remaining"
523msgstr "%1 rimanente"
596msgstr "%1 rimanente"
524
597
525−#: qml/Panel/Indicators/MenuItemFactory.qml:995
598+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1017
526msgid "In queue…"
599msgid "In queue…"
527msgstr "In coda..."
600msgstr "In coda..."
528
601
529−#: qml/Panel/Indicators/MenuItemFactory.qml:999
602+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1021
530msgid "Downloading"
603msgid "Downloading"
531msgstr "Scaricamentu..."
604msgstr "Scaricamentu..."
532
605
533−#: qml/Panel/Indicators/MenuItemFactory.qml:1001
606+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1023
534msgid "Paused, tap to resume"
607msgid "Paused, tap to resume"
535msgstr "In sosta, tuccà pè riprende"
608msgstr "In sosta, tuccà pè riprende"
536
609
537−#: qml/Panel/Indicators/MenuItemFactory.qml:1003
610+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1025
538msgid "Canceled"
611msgid "Canceled"
539msgstr "Annullatu"
612msgstr "Annullatu"
540
613
541−#: qml/Panel/Indicators/MenuItemFactory.qml:1005
614+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1027
542msgid "Finished"
615msgid "Finished"
543msgstr "Cumpletu"
616msgstr "Cumpletu"
544
617
545−#: qml/Panel/Indicators/MenuItemFactory.qml:1007
618+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1029
546msgid "Failed, tap to retry"
619msgid "Failed, tap to retry"
547msgstr "Fallatu, tocca per turnà à pruvà"
620msgstr "Fallatu, tocca per turnà à pruvà"
548
621
@@ -562,14 +635,18 @@ msgctxt "Button: Call back on phone"
562msgid "Call back"
635msgid "Call back"
563msgstr "Richjamà"
636msgstr "Richjamà"
564
637
638+#: qml/Panel/PanelMenuPage.qml:92
639+msgid "Back"
640+msgstr ""
641+
565#: qml/Stage/SideStage.qml:76
642#: qml/Stage/SideStage.qml:76
566msgid "Drag using 3 fingers any application from one window to the other"
643msgid "Drag using 3 fingers any application from one window to the other"
567msgstr ""
644msgstr ""
568"Trascinà cù 3 dite qualichissia applicazione da una finestra à un'antra"
645"Trascinà cù 3 dite qualichissia applicazione da una finestra à un'antra"
569
646
570#: qml/Tutorial/TutorialLeftLong.qml:49
647#: qml/Tutorial/TutorialLeftLong.qml:49
571−msgid "Long swipe from the left edge to open the Today scope"
648+msgid "Long swipe from the left edge to open the Application Drawer"
572−msgstr "Scorre longu da mancina versu diritta per aprì u pannellu Oghje"
649+msgstr ""
573
650
574#: qml/Tutorial/TutorialLeft.qml:47
651#: qml/Tutorial/TutorialLeft.qml:47
575msgid "Short swipe from the left edge to open the launcher"
652msgid "Short swipe from the left edge to open the launcher"
@@ -597,7 +674,7 @@ msgid "Language"
597msgstr "Lingua"
674msgstr "Lingua"
598
675
599#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
676#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
600−#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
677+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/40-location.qml:271
601#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
678#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
602#: qml/Wizard/Pages/70-passwd-type.qml:145
679#: qml/Wizard/Pages/70-passwd-type.qml:145
603#: qml/Wizard/Pages/75-report-check.qml:84
680#: qml/Wizard/Pages/75-report-check.qml:84
@@ -618,25 +695,24 @@ msgstr ""
618msgid "Keyboard layout"
695msgid "Keyboard layout"
619msgstr ""
696msgstr ""
620
697
621−#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
698+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:206
622−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
699+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/sim.qml:101
623−#: qml/Wizard/Pages/sim.qml:101
624msgid "Skip"
700msgid "Skip"
625msgstr "Ignurà"
701msgstr "Ignurà"
626
702
627−#: qml/Wizard/Pages/30-wifi.qml:31
703+#: qml/Wizard/Pages/30-wifi.qml:30
628msgid "Connect to Wi‑Fi"
704msgid "Connect to Wi‑Fi"
629msgstr "Cunnettesi à u Wi-Fi"
705msgstr "Cunnettesi à u Wi-Fi"
630
706
631−#: qml/Wizard/Pages/30-wifi.qml:132
707+#: qml/Wizard/Pages/30-wifi.qml:131
632msgid "Connected"
708msgid "Connected"
633msgstr "Cunnessu"
709msgstr "Cunnessu"
634
710
635−#: qml/Wizard/Pages/30-wifi.qml:165
711+#: qml/Wizard/Pages/30-wifi.qml:164
636msgid "Available Wi-Fi networks"
712msgid "Available Wi-Fi networks"
637msgstr "Rete Wi-Fi dispunibili"
713msgstr "Rete Wi-Fi dispunibili"
638
714
639−#: qml/Wizard/Pages/30-wifi.qml:166
715+#: qml/Wizard/Pages/30-wifi.qml:165
640msgid "No available Wi-Fi networks"
716msgid "No available Wi-Fi networks"
641msgstr "Nisuna reta Wi-Fi hè dispunibile"
717msgstr "Nisuna reta Wi-Fi hè dispunibile"
642
718
@@ -727,35 +803,6 @@ msgstr ""
727msgid "Privacy policy"
803msgid "Privacy policy"
728msgstr "Pulitica di Riservatezza"
804msgstr "Pulitica di Riservatezza"
729
805
730−#: qml/Wizard/Pages/77-system-update.qml:28
731−msgid "Update Device"
732−msgstr ""
733−
734−#: qml/Wizard/Pages/77-system-update.qml:55
735−msgid ""
736−"There is a system update available and ready to install. Afterwards, the "
737−"device will automatically restart."
738−msgstr ""
739−
740−#: qml/Wizard/Pages/77-system-update.qml:76
741−msgctxt "string identifying name of the update"
742−msgid "Ubuntu system"
743−msgstr ""
744−
745−#: qml/Wizard/Pages/77-system-update.qml:83
746−#, qt-format
747−msgctxt "version of the system update"
748−msgid "Version %1"
749−msgstr ""
750−
751−#: qml/Wizard/Pages/77-system-update.qml:102
752−msgid "This could take a few minutes..."
753−msgstr ""
754−
755−#: qml/Wizard/Pages/77-system-update.qml:116
756−msgid "Install and restart now"
757−msgstr ""
758−
759#: qml/Wizard/Pages/80-finished.qml:89
806#: qml/Wizard/Pages/80-finished.qml:89
760msgid "Welcome to Ubuntu"
807msgid "Welcome to Ubuntu"
761msgstr "Benvenuti in Ubuntu"
808msgstr "Benvenuti in Ubuntu"
@@ -954,6 +1001,9 @@ msgstr "Parolla d'ordine moltu debule"
954#~ msgid "Swipe up to create a message"
1001#~ msgid "Swipe up to create a message"
955#~ msgstr "Scorre versu l'altu per creà un messaggiu"
1002#~ msgstr "Scorre versu l'altu per creà un messaggiu"
956
1003
1004+#~ msgid "Long swipe from the left edge to open the Today scope"
1005+#~ msgstr "Scorre longu da mancina versu diritta per aprì u pannellu Oghje"
1006+
957#~ msgid "Short or long swipe from the right edge to view your open apps"
1007#~ msgid "Short or long swipe from the right edge to view your open apps"
958#~ msgstr ""
1008#~ msgstr ""
959#~ "Scorre cortu o longu da diritta versu mancina per vede e applicazioni aperte"
1009#~ "Scorre cortu o longu da diritta versu mancina per vede e applicazioni aperte"
po/cs.po+184−137
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-11-16 10:44+0000\n"
10+"POT-Creation-Date: 2017-04-04 22:56+0000\n"
11"PO-Revision-Date: 2015-07-07 10:44+0000\n"
11"PO-Revision-Date: 2015-07-07 10:44+0000\n"
12"Last-Translator: Vojtěch Daněk <vdanek@outlook.com>\n"
12"Last-Translator: Vojtěch Daněk <vdanek@outlook.com>\n"
13"Language-Team: Czech <cs@li.org>\n"
13"Language-Team: Czech <cs@li.org>\n"
@@ -15,76 +15,104 @@ msgstr ""
15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
17"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
18−"X-Launchpad-Export-Date: 2016-11-23 06:35+0000\n"
18+"X-Launchpad-Export-Date: 2017-04-07 06:29+0000\n"
19−"X-Generator: Launchpad (build 18269)\n"
19+"X-Generator: Launchpad (build 18343)\n"
20"Language: cs\n"
20"Language: cs\n"
21
21
22−#: plugins/LightDM/Greeter.cpp:123
22+#: plugins/LightDM/Greeter.cpp:188
23msgid "Password: "
23msgid "Password: "
24msgstr "Heslo: "
24msgstr "Heslo: "
25
25
26+#: plugins/LightDM/Greeter.cpp:203
27+msgid "Username"
28+msgstr ""
29+
30+#: plugins/LightDM/Greeter.cpp:242
31+msgid "Failed to authenticate"
32+msgstr ""
33+
34+#: plugins/LightDM/Greeter.cpp:244
35+msgid "Invalid password, please try again"
36+msgstr ""
37+
38+#: plugins/LightDM/Greeter.cpp:254
39+msgid "Log In"
40+msgstr ""
41+
42+#: plugins/LightDM/Greeter.cpp:254
43+msgid "Retry"
44+msgstr "Znovu"
45+
46+#: plugins/LightDM/UsersModel.cpp:157
47+msgid "Login"
48+msgstr ""
49+
50+#: plugins/LightDM/UsersModel.cpp:165
51+msgid "Guest Session"
52+msgstr ""
53+
26#: plugins/Unity/Launcher/launcheritem.cpp:49
54#: plugins/Unity/Launcher/launcheritem.cpp:49
27−#: plugins/Unity/Launcher/launcheritem.cpp:108
55+#: plugins/Unity/Launcher/launcheritem.cpp:123
28msgid "Pin shortcut"
56msgid "Pin shortcut"
29msgstr "Připíchnout zkratku"
57msgstr "Připíchnout zkratku"
30
58
31−#: plugins/Unity/Launcher/launcheritem.cpp:54
59+#: plugins/Unity/Launcher/launcheritem.cpp:55
32msgid "Quit"
60msgid "Quit"
33msgstr ""
61msgstr ""
34
62
35−#: plugins/Unity/Launcher/launcheritem.cpp:108
63+#: plugins/Unity/Launcher/launcheritem.cpp:123
36msgid "Unpin shortcut"
64msgid "Unpin shortcut"
37msgstr "Odpíchnout zkratku"
65msgstr "Odpíchnout zkratku"
38
66
39−#: qml/Components/Dialogs.qml:149
67+#: qml/Components/Dialogs.qml:176
40msgctxt "Title: Lock/Log out dialog"
68msgctxt "Title: Lock/Log out dialog"
41msgid "Log out"
69msgid "Log out"
42msgstr "Odhlásit se"
70msgstr "Odhlásit se"
43
71
44−#: qml/Components/Dialogs.qml:150
72+#: qml/Components/Dialogs.qml:177
45msgid "Are you sure you want to log out?"
73msgid "Are you sure you want to log out?"
46msgstr "Jste si jistí, že se chcete odhlásit?"
74msgstr "Jste si jistí, že se chcete odhlásit?"
47
75
48−#: qml/Components/Dialogs.qml:152
76+#: qml/Components/Dialogs.qml:180
49msgctxt "Button: Lock the system"
77msgctxt "Button: Lock the system"
50msgid "Lock"
78msgid "Lock"
51msgstr "Uzamknout"
79msgstr "Uzamknout"
52
80
53−#: qml/Components/Dialogs.qml:159
81+#: qml/Components/Dialogs.qml:191
54msgctxt "Button: Log out from the system"
82msgctxt "Button: Log out from the system"
55msgid "Log Out"
83msgid "Log Out"
56msgstr "Odhlásit"
84msgstr "Odhlásit"
57
85
58−#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
86+#: qml/Components/Dialogs.qml:199 qml/Components/Dialogs.qml:264
59−#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
87+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:208
60#: qml/Wizard/Pages/passcode-confirm.qml:32
88#: qml/Wizard/Pages/passcode-confirm.qml:32
61#: qml/Wizard/Pages/passcode-set.qml:32
89#: qml/Wizard/Pages/passcode-set.qml:32
62msgid "Cancel"
90msgid "Cancel"
63msgstr "Zrušit"
91msgstr "Zrušit"
64
92
65−#: qml/Components/Dialogs.qml:178
93+#: qml/Components/Dialogs.qml:211
66msgctxt "Title: Reboot dialog"
94msgctxt "Title: Reboot dialog"
67msgid "Reboot"
95msgid "Reboot"
68msgstr "Restartovat"
96msgstr "Restartovat"
69
97
70−#: qml/Components/Dialogs.qml:179
98+#: qml/Components/Dialogs.qml:212
71msgid "Are you sure you want to reboot?"
99msgid "Are you sure you want to reboot?"
72msgstr "Jste si jistí, že chcete zařízení restartovat?"
100msgstr "Jste si jistí, že chcete zařízení restartovat?"
73
101
74−#: qml/Components/Dialogs.qml:181
102+#: qml/Components/Dialogs.qml:215
75msgid "No"
103msgid "No"
76msgstr "Ne"
104msgstr "Ne"
77
105
78−#: qml/Components/Dialogs.qml:187
106+#: qml/Components/Dialogs.qml:223
79msgid "Yes"
107msgid "Yes"
80msgstr "Ano"
108msgstr "Ano"
81
109
82−#: qml/Components/Dialogs.qml:202
110+#: qml/Components/Dialogs.qml:239
83msgctxt "Title: Power off/Restart dialog"
111msgctxt "Title: Power off/Restart dialog"
84msgid "Power"
112msgid "Power"
85msgstr "Vypnutí"
113msgstr "Vypnutí"
86
114
87−#: qml/Components/Dialogs.qml:203
115+#: qml/Components/Dialogs.qml:240
88msgid ""
116msgid ""
89"Are you sure you would like\n"
117"Are you sure you would like\n"
90"to power off?"
118"to power off?"
@@ -92,12 +120,12 @@ msgstr ""
92"Jste si jistí, že chcete\n"
120"Jste si jistí, že chcete\n"
93"telefon vypnout?"
121"telefon vypnout?"
94
122
95−#: qml/Components/Dialogs.qml:205
123+#: qml/Components/Dialogs.qml:244
96msgctxt "Button: Power off the system"
124msgctxt "Button: Power off the system"
97msgid "Power off"
125msgid "Power off"
98msgstr "Vypnutí"
126msgstr "Vypnutí"
99
127
100−#: qml/Components/Dialogs.qml:214
128+#: qml/Components/Dialogs.qml:255
101msgctxt "Button: Restart the system"
129msgctxt "Button: Restart the system"
102msgid "Restart"
130msgid "Restart"
103msgstr "Reboot"
131msgstr "Reboot"
@@ -123,7 +151,7 @@ msgid "Alt + PrtScr"
123msgstr ""
151msgstr ""
124
152
125#: qml/Components/KeyboardShortcutsOverlay.qml:80
153#: qml/Components/KeyboardShortcutsOverlay.qml:80
126−msgid "Takes a screenshot of a window."
154+msgid "Takes a screenshot of the current window."
127msgstr ""
155msgstr ""
128
156
129#: qml/Components/KeyboardShortcutsOverlay.qml:88
157#: qml/Components/KeyboardShortcutsOverlay.qml:88
@@ -142,127 +170,143 @@ msgstr ""
142msgid "Switches to previous keyboard layout."
170msgid "Switches to previous keyboard layout."
143msgstr ""
171msgstr ""
144
172
145−#: qml/Components/KeyboardShortcutsOverlay.qml:118
173+#: qml/Components/KeyboardShortcutsOverlay.qml:114
174+msgid "Ctrl + Alt + T"
175+msgstr ""
176+
177+#: qml/Components/KeyboardShortcutsOverlay.qml:119
178+msgid "Starts the Terminal application."
179+msgstr ""
180+
181+#: qml/Components/KeyboardShortcutsOverlay.qml:131
146msgid "Launcher"
182msgid "Launcher"
147msgstr ""
183msgstr ""
148
184
149−#: qml/Components/KeyboardShortcutsOverlay.qml:125
185+#: qml/Components/KeyboardShortcutsOverlay.qml:138
150msgid "Super (Hold)"
186msgid "Super (Hold)"
151msgstr ""
187msgstr ""
152
188
153−#: qml/Components/KeyboardShortcutsOverlay.qml:130
189+#: qml/Components/KeyboardShortcutsOverlay.qml:143
154msgid "Opens the launcher, displays shortcuts."
190msgid "Opens the launcher, displays shortcuts."
155msgstr ""
191msgstr ""
156
192
157−#: qml/Components/KeyboardShortcutsOverlay.qml:138
193+#: qml/Components/KeyboardShortcutsOverlay.qml:151
158msgid "Alt + F1"
194msgid "Alt + F1"
159msgstr ""
195msgstr ""
160
196
161−#: qml/Components/KeyboardShortcutsOverlay.qml:143
197+#: qml/Components/KeyboardShortcutsOverlay.qml:156
162msgid "Opens launcher keyboard navigation mode."
198msgid "Opens launcher keyboard navigation mode."
163msgstr ""
199msgstr ""
164
200
165−#: qml/Components/KeyboardShortcutsOverlay.qml:151
201+#: qml/Components/KeyboardShortcutsOverlay.qml:164
166msgid "Super + Tab"
202msgid "Super + Tab"
167msgstr ""
203msgstr ""
168
204
169−#: qml/Components/KeyboardShortcutsOverlay.qml:156
205+#: qml/Components/KeyboardShortcutsOverlay.qml:169
170msgid "Switches applications via the launcher."
206msgid "Switches applications via the launcher."
171msgstr ""
207msgstr ""
172
208
173−#: qml/Components/KeyboardShortcutsOverlay.qml:164
209+#: qml/Components/KeyboardShortcutsOverlay.qml:177
174−msgid "Super + 0 to 9"
210+msgid "Super + 1 to 0"
175msgstr ""
211msgstr ""
176
212
177−#: qml/Components/KeyboardShortcutsOverlay.qml:169
213+#: qml/Components/KeyboardShortcutsOverlay.qml:182
178msgid "Same as clicking on a launcher icon."
214msgid "Same as clicking on a launcher icon."
179msgstr ""
215msgstr ""
180
216
181−#: qml/Components/KeyboardShortcutsOverlay.qml:181
217+#: qml/Components/KeyboardShortcutsOverlay.qml:190
218+msgid "Super + A"
219+msgstr ""
220+
221+#: qml/Components/KeyboardShortcutsOverlay.qml:195
222+msgid "Opens the Application Drawer."
223+msgstr ""
224+
225+#: qml/Components/KeyboardShortcutsOverlay.qml:207
182msgid "Scopes"
226msgid "Scopes"
183msgstr ""
227msgstr ""
184
228
185−#: qml/Components/KeyboardShortcutsOverlay.qml:188
229+#: qml/Components/KeyboardShortcutsOverlay.qml:214
186msgid "Super (Tap)"
230msgid "Super (Tap)"
187msgstr ""
231msgstr ""
188
232
189−#: qml/Components/KeyboardShortcutsOverlay.qml:193
233+#: qml/Components/KeyboardShortcutsOverlay.qml:219
190msgid "Opens the Scopes home."
234msgid "Opens the Scopes home."
191msgstr ""
235msgstr ""
192
236
193−#: qml/Components/KeyboardShortcutsOverlay.qml:209
237+#: qml/Components/KeyboardShortcutsOverlay.qml:235
194msgid "Switching"
238msgid "Switching"
195msgstr ""
239msgstr ""
196
240
197−#: qml/Components/KeyboardShortcutsOverlay.qml:216
241+#: qml/Components/KeyboardShortcutsOverlay.qml:242
198msgid "Alt + Tab"
242msgid "Alt + Tab"
199msgstr ""
243msgstr ""
200
244
201−#: qml/Components/KeyboardShortcutsOverlay.qml:221
245+#: qml/Components/KeyboardShortcutsOverlay.qml:247
202msgid "Switches between applications."
246msgid "Switches between applications."
203msgstr ""
247msgstr ""
204
248
205−#: qml/Components/KeyboardShortcutsOverlay.qml:229
249+#: qml/Components/KeyboardShortcutsOverlay.qml:255
206msgid "Super + W"
250msgid "Super + W"
207msgstr ""
251msgstr ""
208
252
209−#: qml/Components/KeyboardShortcutsOverlay.qml:234
253+#: qml/Components/KeyboardShortcutsOverlay.qml:260
210msgid "Opens the desktop spread."
254msgid "Opens the desktop spread."
211msgstr ""
255msgstr ""
212
256
213−#: qml/Components/KeyboardShortcutsOverlay.qml:242
257+#: qml/Components/KeyboardShortcutsOverlay.qml:268
214msgid "Cursor Left or Right"
258msgid "Cursor Left or Right"
215msgstr ""
259msgstr ""
216
260
217−#: qml/Components/KeyboardShortcutsOverlay.qml:247
261+#: qml/Components/KeyboardShortcutsOverlay.qml:273
218msgid "Moves the focus."
262msgid "Moves the focus."
219msgstr ""
263msgstr ""
220
264
221−#: qml/Components/KeyboardShortcutsOverlay.qml:259
265+#: qml/Components/KeyboardShortcutsOverlay.qml:285
222msgid "Windows"
266msgid "Windows"
223msgstr ""
267msgstr ""
224
268
225−#: qml/Components/KeyboardShortcutsOverlay.qml:266
269+#: qml/Components/KeyboardShortcutsOverlay.qml:292
226msgid "Ctrl + Super + D"
270msgid "Ctrl + Super + D"
227msgstr ""
271msgstr ""
228
272
229−#: qml/Components/KeyboardShortcutsOverlay.qml:271
273+#: qml/Components/KeyboardShortcutsOverlay.qml:297
230msgid "Minimizes all windows."
274msgid "Minimizes all windows."
231msgstr ""
275msgstr ""
232
276
233−#: qml/Components/KeyboardShortcutsOverlay.qml:279
277+#: qml/Components/KeyboardShortcutsOverlay.qml:305
234msgid "Ctrl + Super + Up"
278msgid "Ctrl + Super + Up"
235msgstr ""
279msgstr ""
236
280
237−#: qml/Components/KeyboardShortcutsOverlay.qml:284
281+#: qml/Components/KeyboardShortcutsOverlay.qml:310
238msgid "Maximizes the current window."
282msgid "Maximizes the current window."
239msgstr ""
283msgstr ""
240
284
241−#: qml/Components/KeyboardShortcutsOverlay.qml:292
285+#: qml/Components/KeyboardShortcutsOverlay.qml:318
242msgid "Ctrl + Super + Down"
286msgid "Ctrl + Super + Down"
243msgstr ""
287msgstr ""
244
288
245−#: qml/Components/KeyboardShortcutsOverlay.qml:297
289+#: qml/Components/KeyboardShortcutsOverlay.qml:323
246msgid "Minimizes or restores the current window."
290msgid "Minimizes or restores the current window."
247msgstr ""
291msgstr ""
248
292
249−#: qml/Components/KeyboardShortcutsOverlay.qml:305
293+#: qml/Components/KeyboardShortcutsOverlay.qml:331
250msgid "Ctrl + Super + Left or Right"
294msgid "Ctrl + Super + Left or Right"
251msgstr ""
295msgstr ""
252
296
253−#: qml/Components/KeyboardShortcutsOverlay.qml:310
297+#: qml/Components/KeyboardShortcutsOverlay.qml:336
254msgid "Semi-maximizes the current window."
298msgid "Semi-maximizes the current window."
255msgstr ""
299msgstr ""
256
300
257−#: qml/Components/KeyboardShortcutsOverlay.qml:318
301+#: qml/Components/KeyboardShortcutsOverlay.qml:344
258msgid "Alt + F4"
302msgid "Alt + F4"
259msgstr ""
303msgstr ""
260
304
261−#: qml/Components/KeyboardShortcutsOverlay.qml:323
305+#: qml/Components/KeyboardShortcutsOverlay.qml:349
262msgid "Closes the current window."
306msgid "Closes the current window."
263msgstr ""
307msgstr ""
264
308
265−#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
309+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:228
266msgid "Return to Call"
310msgid "Return to Call"
267msgstr "Vrátit se k hovoru"
311msgstr "Vrátit se k hovoru"
268
312
@@ -270,7 +314,7 @@ msgstr "Vrátit se k hovoru"
270msgid "Emergency Call"
314msgid "Emergency Call"
271msgstr "Tísňové volání"
315msgstr "Tísňové volání"
272
316
273−#: qml/Components/Lockscreen.qml:244
317+#: qml/Components/Lockscreen.qml:245
274msgid "OK"
318msgid "OK"
275msgstr "OK"
319msgstr "OK"
276
320
@@ -284,29 +328,29 @@ msgstr ""
284msgid "%1:%2"
328msgid "%1:%2"
285msgstr ""
329msgstr ""
286
330
287−#: qml/Components/ModeSwitchWarningDialog.qml:32
331+#: qml/Components/ModeSwitchWarningDialog.qml:33
288msgid "Apps may have unsaved data:"
332msgid "Apps may have unsaved data:"
289msgstr ""
333msgstr ""
290
334
291−#: qml/Components/ModeSwitchWarningDialog.qml:57
335+#: qml/Components/ModeSwitchWarningDialog.qml:60
292msgctxt ""
336msgctxt ""
293"Re-dock means connect the device again to an external screen/mouse/keyboard"
337"Re-dock means connect the device again to an external screen/mouse/keyboard"
294msgid "Re-dock, save your work and close these apps to continue."
338msgid "Re-dock, save your work and close these apps to continue."
295msgstr ""
339msgstr ""
296
340
297−#: qml/Components/ModeSwitchWarningDialog.qml:63
341+#: qml/Components/ModeSwitchWarningDialog.qml:67
298msgid "Or force close now (unsaved data will be lost)."
342msgid "Or force close now (unsaved data will be lost)."
299msgstr ""
343msgstr ""
300
344
301−#: qml/Components/ModeSwitchWarningDialog.qml:75
345+#: qml/Components/ModeSwitchWarningDialog.qml:80
302msgid "OK, I will reconnect"
346msgid "OK, I will reconnect"
303msgstr ""
347msgstr ""
304
348
305−#: qml/Components/ModeSwitchWarningDialog.qml:76
349+#: qml/Components/ModeSwitchWarningDialog.qml:81
306msgid "Reconnect now!"
350msgid "Reconnect now!"
307msgstr ""
351msgstr ""
308
352
309−#: qml/Components/ModeSwitchWarningDialog.qml:88
353+#: qml/Components/ModeSwitchWarningDialog.qml:94
310msgid "Close all"
354msgid "Close all"
311msgstr ""
355msgstr ""
312
356
@@ -314,6 +358,28 @@ msgstr ""
314msgid "Preview Share Item"
358msgid "Preview Share Item"
315msgstr ""
359msgstr ""
316
360
361+#: qml/Components/VirtualTouchPad.qml:317
362+msgid ""
363+"Your device is now connected to an external display. Use this screen as a "
364+"touch pad to interact with the pointer."
365+msgstr ""
366+
367+#: qml/Components/VirtualTouchPad.qml:327
368+msgid "Tap left button to click."
369+msgstr ""
370+
371+#: qml/Components/VirtualTouchPad.qml:339
372+msgid "Tap right button to right click."
373+msgstr ""
374+
375+#: qml/Components/VirtualTouchPad.qml:351
376+msgid "Swipe with two fingers to scroll."
377+msgstr ""
378+
379+#: qml/Components/VirtualTouchPad.qml:396
380+msgid "Find more settings in the system settings."
381+msgstr ""
382+
317#: qml/Dash/DashPageHeader.qml:361
383#: qml/Dash/DashPageHeader.qml:361
318msgctxt "Button: Open the Ubuntu Store"
384msgctxt "Button: Open the Ubuntu Store"
319msgid "Store"
385msgid "Store"
@@ -345,24 +411,24 @@ msgstr ""
345msgid "Reset"
411msgid "Reset"
346msgstr ""
412msgstr ""
347
413
348−#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
414+#: qml/Dash/GenericScopeView.qml:547 qml/Dash/GenericScopeView.qml:718
349msgid "Show less"
415msgid "Show less"
350msgstr ""
416msgstr ""
351
417
352−#: qml/Dash/GenericScopeView.qml:545
418+#: qml/Dash/GenericScopeView.qml:547
353msgid "Show all"
419msgid "Show all"
354msgstr ""
420msgstr ""
355
421
356−#: qml/Dash/GenericScopeView.qml:576
422+#: qml/Dash/GenericScopeView.qml:578
357msgctxt "Label: Hint for dash search line edit"
423msgctxt "Label: Hint for dash search line edit"
358msgid "Search"
424msgid "Search"
359msgstr "Hledat"
425msgstr "Hledat"
360
426
361−#: qml/Dash/PageHeaderExtraPanel.qml:57
427+#: qml/Dash/PageHeaderExtraPanel.qml:67
362msgid "Recent Searches"
428msgid "Recent Searches"
363msgstr ""
429msgstr ""
364
430
365−#: qml/Dash/PageHeaderExtraPanel.qml:68
431+#: qml/Dash/PageHeaderExtraPanel.qml:78
366msgid "Clear All"
432msgid "Clear All"
367msgstr ""
433msgstr ""
368
434
@@ -399,24 +465,18 @@ msgstr "Pusťte pro obnovení..."
399msgid "Enable location data"
465msgid "Enable location data"
400msgstr "Povolit údaje umístění"
466msgstr "Povolit údaje umístění"
401
467
402−#: qml/Dash/ScopesList.qml:57
468+#: qml/Dash/ScopesList.qml:146
403msgid "Manage"
469msgid "Manage"
404msgstr "Spravovat"
470msgstr "Spravovat"
405
471
406−#: qml/Dash/ScopesList.qml:104
472+#: qml/Dash/ScopesList.qml:187
407msgid "Home"
473msgid "Home"
408msgstr "Domů"
474msgstr "Domů"
409
475
410−#: qml/Dash/ScopesList.qml:105
476+#: qml/Dash/ScopesList.qml:188
411msgid "Also installed"
477msgid "Also installed"
412msgstr "Také nainstalováno"
478msgstr "Také nainstalováno"
413
479
414−#: qml/DisabledScreenNotice.qml:109
415−msgid ""
416−"Your device is now connected to an external display. Use this screen as a "
417−"touch pad to interact with the pointer."
418−msgstr ""
419−
420#: qml/Greeter/CoverPage.qml:127
480#: qml/Greeter/CoverPage.qml:127
421msgid "Unlock"
481msgid "Unlock"
422msgstr "Odemknout"
482msgstr "Odemknout"
@@ -443,32 +503,45 @@ msgstr[0] "Počkejte, prosím, %1 minut a poté to zkuste znovu..."
443msgstr[1] "Počkejte, prosím, %1 minuty a poté to zkuste znovu..."
503msgstr[1] "Počkejte, prosím, %1 minuty a poté to zkuste znovu..."
444msgstr[2] "Počkejte, prosím, %1 minut a poté to zkuste znovu..."
504msgstr[2] "Počkejte, prosím, %1 minut a poté to zkuste znovu..."
445
505
446−#: qml/Greeter/Greeter.qml:596
506+#: qml/Greeter/Greeter.qml:550
447msgid "Try again"
507msgid "Try again"
448msgstr ""
508msgstr ""
449
509
450−#: qml/Greeter/LoginList.qml:70
510+#: qml/Greeter/Greeter.qml:551
511+msgid "Enter passphrase to unlock"
512+msgstr ""
513+
514+#: qml/Greeter/Greeter.qml:552
515+msgid "Enter passcode to unlock"
516+msgstr ""
517+
518+#: qml/Greeter/NarrowView.qml:228
519+msgid "Emergency"
520+msgstr ""
521+
522+#: qml/Greeter/PromptList.qml:126
451msgid "Passphrase"
523msgid "Passphrase"
452msgstr ""
524msgstr ""
453
525
454−#: qml/Greeter/LoginList.qml:71
526+#: qml/Greeter/PromptList.qml:126
455msgid "Passcode"
527msgid "Passcode"
456msgstr ""
528msgstr ""
457
529
458−#: qml/Greeter/LoginList.qml:98
530+#: qml/Greeter/SessionsList.qml:124
459−msgid "Retry"
531+msgid "Select desktop environment"
460−msgstr "Znovu"
532+msgstr ""
461
533
462−#: qml/Greeter/LoginList.qml:99
534+#: qml/Launcher/Drawer.qml:94
463−msgid "Log In"
535+msgid "Search…"
464msgstr ""
536msgstr ""
465
537
466−#: qml/Greeter/NarrowView.qml:252
538+#: qml/Launcher/Drawer.qml:129
539+msgctxt "Apps sorted alphabetically"
467−msgid "Emergency"
540+msgid "A-Z"
468msgstr ""
541msgstr ""
469
542
470−#: qml/Greeter/SessionsList.qml:122
543+#: qml/Launcher/MoreAppsHeader.qml:55
471−msgid "Select desktop environment"
544+msgid "More apps in the store"
472msgstr ""
545msgstr ""
473
546
474#: qml/Notifications/NotificationMenuItemFactory.qml:124
547#: qml/Notifications/NotificationMenuItemFactory.qml:124
@@ -483,11 +556,11 @@ msgstr "Klepnutím se vrátíte k hovoru..."
483msgid "Conference"
556msgid "Conference"
484msgstr "Konferenční hovor"
557msgstr "Konferenční hovor"
485
558
486−#: qml/Panel/Indicators/MenuItemFactory.qml:847
559+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:869
487msgid "Nothing is playing"
560msgid "Nothing is playing"
488msgstr "Nic se nepřehrává"
561msgstr "Nic se nepřehrává"
489
562
490−#: qml/Panel/Indicators/MenuItemFactory.qml:975
563+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:997
491#, qt-format
564#, qt-format
492msgid "%1 hour"
565msgid "%1 hour"
493msgid_plural "%1 hours"
566msgid_plural "%1 hours"
@@ -495,7 +568,7 @@ msgstr[0] "%1 hodina"
495msgstr[1] "%1 hodiny"
568msgstr[1] "%1 hodiny"
496msgstr[2] "%1 hodin"
569msgstr[2] "%1 hodin"
497
570
498−#: qml/Panel/Indicators/MenuItemFactory.qml:979
571+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1001
499#, qt-format
572#, qt-format
500msgid "%1 minute"
573msgid "%1 minute"
501msgid_plural "%1 minutes"
574msgid_plural "%1 minutes"
@@ -503,7 +576,7 @@ msgstr[0] "%1 minuta"
503msgstr[1] "%1 minuty"
576msgstr[1] "%1 minuty"
504msgstr[2] "%1 minut"
577msgstr[2] "%1 minut"
505
578
506−#: qml/Panel/Indicators/MenuItemFactory.qml:984
579+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1006
507#, qt-format
580#, qt-format
508msgid "%1 second"
581msgid "%1 second"
509msgid_plural "%1 seconds"
582msgid_plural "%1 seconds"
@@ -511,37 +584,37 @@ msgstr[0] "%1 sekunda"
511msgstr[1] "%1 sekundy"
584msgstr[1] "%1 sekundy"
512msgstr[2] "%1 sekund"
585msgstr[2] "%1 sekund"
513
586
514−#: qml/Panel/Indicators/MenuItemFactory.qml:987
587+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1009
515msgid "0 seconds"
588msgid "0 seconds"
516msgstr "0 sekund"
589msgstr "0 sekund"
517
590
518#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
591#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
519−#: qml/Panel/Indicators/MenuItemFactory.qml:989
592+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1011
520#, qt-format
593#, qt-format
521msgid "%1 remaining"
594msgid "%1 remaining"
522msgstr "Zbývá %1"
595msgstr "Zbývá %1"
523
596
524−#: qml/Panel/Indicators/MenuItemFactory.qml:995
597+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1017
525msgid "In queue…"
598msgid "In queue…"
526msgstr "Ve frontě..."
599msgstr "Ve frontě..."
527
600
528−#: qml/Panel/Indicators/MenuItemFactory.qml:999
601+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1021
529msgid "Downloading"
602msgid "Downloading"
530msgstr "Stahování"
603msgstr "Stahování"
531
604
532−#: qml/Panel/Indicators/MenuItemFactory.qml:1001
605+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1023
533msgid "Paused, tap to resume"
606msgid "Paused, tap to resume"
534msgstr "Pauza, pro pokračování klepněte"
607msgstr "Pauza, pro pokračování klepněte"
535
608
536−#: qml/Panel/Indicators/MenuItemFactory.qml:1003
609+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1025
537msgid "Canceled"
610msgid "Canceled"
538msgstr "Zrušeno"
611msgstr "Zrušeno"
539
612
540−#: qml/Panel/Indicators/MenuItemFactory.qml:1005
613+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1027
541msgid "Finished"
614msgid "Finished"
542msgstr "Dokončeno"
615msgstr "Dokončeno"
543
616
544−#: qml/Panel/Indicators/MenuItemFactory.qml:1007
617+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1029
545msgid "Failed, tap to retry"
618msgid "Failed, tap to retry"
546msgstr "Nezdařilo se, opakujte klepnutím"
619msgstr "Nezdařilo se, opakujte klepnutím"
547
620
@@ -561,12 +634,16 @@ msgctxt "Button: Call back on phone"
561msgid "Call back"
634msgid "Call back"
562msgstr ""
635msgstr ""
563
636
637+#: qml/Panel/PanelMenuPage.qml:92
638+msgid "Back"
639+msgstr ""
640+
564#: qml/Stage/SideStage.qml:76
641#: qml/Stage/SideStage.qml:76
565msgid "Drag using 3 fingers any application from one window to the other"
642msgid "Drag using 3 fingers any application from one window to the other"
566msgstr ""
643msgstr ""
567
644
568#: qml/Tutorial/TutorialLeftLong.qml:49
645#: qml/Tutorial/TutorialLeftLong.qml:49
569−msgid "Long swipe from the left edge to open the Today scope"
646+msgid "Long swipe from the left edge to open the Application Drawer"
570msgstr ""
647msgstr ""
571
648
572#: qml/Tutorial/TutorialLeft.qml:47
649#: qml/Tutorial/TutorialLeft.qml:47
@@ -595,7 +672,7 @@ msgid "Language"
595msgstr ""
672msgstr ""
596
673
597#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
674#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
598−#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
675+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/40-location.qml:271
599#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
676#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
600#: qml/Wizard/Pages/70-passwd-type.qml:145
677#: qml/Wizard/Pages/70-passwd-type.qml:145
601#: qml/Wizard/Pages/75-report-check.qml:84
678#: qml/Wizard/Pages/75-report-check.qml:84
@@ -616,25 +693,24 @@ msgstr ""
616msgid "Keyboard layout"
693msgid "Keyboard layout"
617msgstr ""
694msgstr ""
618
695
619−#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
696+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:206
620−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
697+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/sim.qml:101
621−#: qml/Wizard/Pages/sim.qml:101
622msgid "Skip"
698msgid "Skip"
623msgstr "Přeskočit"
699msgstr "Přeskočit"
624
700
625−#: qml/Wizard/Pages/30-wifi.qml:31
701+#: qml/Wizard/Pages/30-wifi.qml:30
626msgid "Connect to Wi‑Fi"
702msgid "Connect to Wi‑Fi"
627msgstr "Připojte se k Wi-Fi"
703msgstr "Připojte se k Wi-Fi"
628
704
629−#: qml/Wizard/Pages/30-wifi.qml:132
705+#: qml/Wizard/Pages/30-wifi.qml:131
630msgid "Connected"
706msgid "Connected"
631msgstr ""
707msgstr ""
632
708
633−#: qml/Wizard/Pages/30-wifi.qml:165
709+#: qml/Wizard/Pages/30-wifi.qml:164
634msgid "Available Wi-Fi networks"
710msgid "Available Wi-Fi networks"
635msgstr ""
711msgstr ""
636
712
637−#: qml/Wizard/Pages/30-wifi.qml:166
713+#: qml/Wizard/Pages/30-wifi.qml:165
638msgid "No available Wi-Fi networks"
714msgid "No available Wi-Fi networks"
639msgstr ""
715msgstr ""
640
716
@@ -721,35 +797,6 @@ msgstr ""
721msgid "Privacy policy"
797msgid "Privacy policy"
722msgstr ""
798msgstr ""
723
799
724−#: qml/Wizard/Pages/77-system-update.qml:28
725−msgid "Update Device"
726−msgstr ""
727−
728−#: qml/Wizard/Pages/77-system-update.qml:55
729−msgid ""
730−"There is a system update available and ready to install. Afterwards, the "
731−"device will automatically restart."
732−msgstr ""
733−
734−#: qml/Wizard/Pages/77-system-update.qml:76
735−msgctxt "string identifying name of the update"
736−msgid "Ubuntu system"
737−msgstr ""
738−
739−#: qml/Wizard/Pages/77-system-update.qml:83
740−#, qt-format
741−msgctxt "version of the system update"
742−msgid "Version %1"
743−msgstr ""
744−
745−#: qml/Wizard/Pages/77-system-update.qml:102
746−msgid "This could take a few minutes..."
747−msgstr ""
748−
749−#: qml/Wizard/Pages/77-system-update.qml:116
750−msgid "Install and restart now"
751−msgstr ""
752−
753#: qml/Wizard/Pages/80-finished.qml:89
800#: qml/Wizard/Pages/80-finished.qml:89
754msgid "Welcome to Ubuntu"
801msgid "Welcome to Ubuntu"
755msgstr ""
802msgstr ""
po/cy.po+184−137
@@ -7,7 +7,7 @@ msgid ""
7msgstr ""
7msgstr ""
8"Project-Id-Version: unity8\n"
8"Project-Id-Version: unity8\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
10−"POT-Creation-Date: 2016-11-16 10:44+0000\n"
10+"POT-Creation-Date: 2017-04-04 22:56+0000\n"
11"PO-Revision-Date: 2015-07-31 13:21+0000\n"
11"PO-Revision-Date: 2015-07-31 13:21+0000\n"
12"Last-Translator: Owen Llywelyn <owen.llywelyn@gmail.com>\n"
12"Last-Translator: Owen Llywelyn <owen.llywelyn@gmail.com>\n"
13"Language-Team: Welsh <cy@li.org>\n"
13"Language-Team: Welsh <cy@li.org>\n"
@@ -16,75 +16,103 @@ msgstr ""
16"Content-Transfer-Encoding: 8bit\n"
16"Content-Transfer-Encoding: 8bit\n"
17"Plural-Forms: nplurals=4; plural=n==1 ? 0 : n==2 ? 1 : (n != 8 && n != 11) ? "
17"Plural-Forms: nplurals=4; plural=n==1 ? 0 : n==2 ? 1 : (n != 8 && n != 11) ? "
18"2 : 3;\n"
18"2 : 3;\n"
19−"X-Launchpad-Export-Date: 2016-11-23 06:36+0000\n"
19+"X-Launchpad-Export-Date: 2017-04-07 06:31+0000\n"
20−"X-Generator: Launchpad (build 18269)\n"
20+"X-Generator: Launchpad (build 18343)\n"
21
21
22−#: plugins/LightDM/Greeter.cpp:123
22+#: plugins/LightDM/Greeter.cpp:188
23msgid "Password: "
23msgid "Password: "
24msgstr "Cyfrinair: "
24msgstr "Cyfrinair: "
25
25
26+#: plugins/LightDM/Greeter.cpp:203
27+msgid "Username"
28+msgstr ""
29+
30+#: plugins/LightDM/Greeter.cpp:242
31+msgid "Failed to authenticate"
32+msgstr ""
33+
34+#: plugins/LightDM/Greeter.cpp:244
35+msgid "Invalid password, please try again"
36+msgstr ""
37+
38+#: plugins/LightDM/Greeter.cpp:254
39+msgid "Log In"
40+msgstr ""
41+
42+#: plugins/LightDM/Greeter.cpp:254
43+msgid "Retry"
44+msgstr "Ailgynnig"
45+
46+#: plugins/LightDM/UsersModel.cpp:157
47+msgid "Login"
48+msgstr ""
49+
50+#: plugins/LightDM/UsersModel.cpp:165
51+msgid "Guest Session"
52+msgstr ""
53+
26#: plugins/Unity/Launcher/launcheritem.cpp:49
54#: plugins/Unity/Launcher/launcheritem.cpp:49
27−#: plugins/Unity/Launcher/launcheritem.cpp:108
55+#: plugins/Unity/Launcher/launcheritem.cpp:123
28msgid "Pin shortcut"
56msgid "Pin shortcut"
29msgstr "Pinio llwybr byr"
57msgstr "Pinio llwybr byr"
30
58
31−#: plugins/Unity/Launcher/launcheritem.cpp:54
59+#: plugins/Unity/Launcher/launcheritem.cpp:55
32msgid "Quit"
60msgid "Quit"
33msgstr ""
61msgstr ""
34
62
35−#: plugins/Unity/Launcher/launcheritem.cpp:108
63+#: plugins/Unity/Launcher/launcheritem.cpp:123
36msgid "Unpin shortcut"
64msgid "Unpin shortcut"
37msgstr "Dadbinio llwybr byr"
65msgstr "Dadbinio llwybr byr"
38
66
39−#: qml/Components/Dialogs.qml:149
67+#: qml/Components/Dialogs.qml:176
40msgctxt "Title: Lock/Log out dialog"
68msgctxt "Title: Lock/Log out dialog"
41msgid "Log out"
69msgid "Log out"
42msgstr "Allgofnodi"
70msgstr "Allgofnodi"
43
71
44−#: qml/Components/Dialogs.qml:150
72+#: qml/Components/Dialogs.qml:177
45msgid "Are you sure you want to log out?"
73msgid "Are you sure you want to log out?"
46msgstr "Ydych chi'n sicr eich bod am allgofnodi?"
74msgstr "Ydych chi'n sicr eich bod am allgofnodi?"
47
75
48−#: qml/Components/Dialogs.qml:152
76+#: qml/Components/Dialogs.qml:180
49msgctxt "Button: Lock the system"
77msgctxt "Button: Lock the system"
50msgid "Lock"
78msgid "Lock"
51msgstr "Cloi"
79msgstr "Cloi"
52
80
53−#: qml/Components/Dialogs.qml:159
81+#: qml/Components/Dialogs.qml:191
54msgctxt "Button: Log out from the system"
82msgctxt "Button: Log out from the system"
55msgid "Log Out"
83msgid "Log Out"
56msgstr "Allgofnodi"
84msgstr "Allgofnodi"
57
85
58−#: qml/Components/Dialogs.qml:166 qml/Components/Dialogs.qml:222
86+#: qml/Components/Dialogs.qml:199 qml/Components/Dialogs.qml:264
59−#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:232
87+#: qml/Dash/DashPageHeader.qml:324 qml/Greeter/NarrowView.qml:208
60#: qml/Wizard/Pages/passcode-confirm.qml:32
88#: qml/Wizard/Pages/passcode-confirm.qml:32
61#: qml/Wizard/Pages/passcode-set.qml:32
89#: qml/Wizard/Pages/passcode-set.qml:32
62msgid "Cancel"
90msgid "Cancel"
63msgstr "Diddymu"
91msgstr "Diddymu"
64
92
65−#: qml/Components/Dialogs.qml:178
93+#: qml/Components/Dialogs.qml:211
66msgctxt "Title: Reboot dialog"
94msgctxt "Title: Reboot dialog"
67msgid "Reboot"
95msgid "Reboot"
68msgstr "Ailgychwyn"
96msgstr "Ailgychwyn"
69
97
70−#: qml/Components/Dialogs.qml:179
98+#: qml/Components/Dialogs.qml:212
71msgid "Are you sure you want to reboot?"
99msgid "Are you sure you want to reboot?"
72msgstr "Ydych chi'n sicr eich bod am ailgychwyn?"
100msgstr "Ydych chi'n sicr eich bod am ailgychwyn?"
73
101
74−#: qml/Components/Dialogs.qml:181
102+#: qml/Components/Dialogs.qml:215
75msgid "No"
103msgid "No"
76msgstr "Na"
104msgstr "Na"
77
105
78−#: qml/Components/Dialogs.qml:187
106+#: qml/Components/Dialogs.qml:223
79msgid "Yes"
107msgid "Yes"
80msgstr "Ydw"
108msgstr "Ydw"
81
109
82−#: qml/Components/Dialogs.qml:202
110+#: qml/Components/Dialogs.qml:239
83msgctxt "Title: Power off/Restart dialog"
111msgctxt "Title: Power off/Restart dialog"
84msgid "Power"
112msgid "Power"
85msgstr "Pŵer"
113msgstr "Pŵer"
86
114
87−#: qml/Components/Dialogs.qml:203
115+#: qml/Components/Dialogs.qml:240
88msgid ""
116msgid ""
89"Are you sure you would like\n"
117"Are you sure you would like\n"
90"to power off?"
118"to power off?"
@@ -92,12 +120,12 @@ msgstr ""
92"Ydych chi'n sicr eich bod am\n"
120"Ydych chi'n sicr eich bod am\n"
93"ddiffodd y pŵer?"
121"ddiffodd y pŵer?"
94
122
95−#: qml/Components/Dialogs.qml:205
123+#: qml/Components/Dialogs.qml:244
96msgctxt "Button: Power off the system"
124msgctxt "Button: Power off the system"
97msgid "Power off"
125msgid "Power off"
98msgstr "Diffodd y pŵer"
126msgstr "Diffodd y pŵer"
99
127
100−#: qml/Components/Dialogs.qml:214
128+#: qml/Components/Dialogs.qml:255
101msgctxt "Button: Restart the system"
129msgctxt "Button: Restart the system"
102msgid "Restart"
130msgid "Restart"
103msgstr "Ailgychwyn"
131msgstr "Ailgychwyn"
@@ -123,7 +151,7 @@ msgid "Alt + PrtScr"
123msgstr ""
151msgstr ""
124
152
125#: qml/Components/KeyboardShortcutsOverlay.qml:80
153#: qml/Components/KeyboardShortcutsOverlay.qml:80
126−msgid "Takes a screenshot of a window."
154+msgid "Takes a screenshot of the current window."
127msgstr ""
155msgstr ""
128
156
129#: qml/Components/KeyboardShortcutsOverlay.qml:88
157#: qml/Components/KeyboardShortcutsOverlay.qml:88
@@ -142,127 +170,143 @@ msgstr ""
142msgid "Switches to previous keyboard layout."
170msgid "Switches to previous keyboard layout."
143msgstr ""
171msgstr ""
144
172
145−#: qml/Components/KeyboardShortcutsOverlay.qml:118
173+#: qml/Components/KeyboardShortcutsOverlay.qml:114
174+msgid "Ctrl + Alt + T"
175+msgstr ""
176+
177+#: qml/Components/KeyboardShortcutsOverlay.qml:119
178+msgid "Starts the Terminal application."
179+msgstr ""
180+
181+#: qml/Components/KeyboardShortcutsOverlay.qml:131
146msgid "Launcher"
182msgid "Launcher"
147msgstr ""
183msgstr ""
148
184
149−#: qml/Components/KeyboardShortcutsOverlay.qml:125
185+#: qml/Components/KeyboardShortcutsOverlay.qml:138
150msgid "Super (Hold)"
186msgid "Super (Hold)"
151msgstr ""
187msgstr ""
152
188
153−#: qml/Components/KeyboardShortcutsOverlay.qml:130
189+#: qml/Components/KeyboardShortcutsOverlay.qml:143
154msgid "Opens the launcher, displays shortcuts."
190msgid "Opens the launcher, displays shortcuts."
155msgstr ""
191msgstr ""
156
192
157−#: qml/Components/KeyboardShortcutsOverlay.qml:138
193+#: qml/Components/KeyboardShortcutsOverlay.qml:151
158msgid "Alt + F1"
194msgid "Alt + F1"
159msgstr ""
195msgstr ""
160
196
161−#: qml/Components/KeyboardShortcutsOverlay.qml:143
197+#: qml/Components/KeyboardShortcutsOverlay.qml:156
162msgid "Opens launcher keyboard navigation mode."
198msgid "Opens launcher keyboard navigation mode."
163msgstr ""
199msgstr ""
164
200
165−#: qml/Components/KeyboardShortcutsOverlay.qml:151
201+#: qml/Components/KeyboardShortcutsOverlay.qml:164
166msgid "Super + Tab"
202msgid "Super + Tab"
167msgstr ""
203msgstr ""
168
204
169−#: qml/Components/KeyboardShortcutsOverlay.qml:156
205+#: qml/Components/KeyboardShortcutsOverlay.qml:169
170msgid "Switches applications via the launcher."
206msgid "Switches applications via the launcher."
171msgstr ""
207msgstr ""
172
208
173−#: qml/Components/KeyboardShortcutsOverlay.qml:164
209+#: qml/Components/KeyboardShortcutsOverlay.qml:177
174−msgid "Super + 0 to 9"
210+msgid "Super + 1 to 0"
175msgstr ""
211msgstr ""
176
212
177−#: qml/Components/KeyboardShortcutsOverlay.qml:169
213+#: qml/Components/KeyboardShortcutsOverlay.qml:182
178msgid "Same as clicking on a launcher icon."
214msgid "Same as clicking on a launcher icon."
179msgstr ""
215msgstr ""
180
216
181−#: qml/Components/KeyboardShortcutsOverlay.qml:181
217+#: qml/Components/KeyboardShortcutsOverlay.qml:190
218+msgid "Super + A"
219+msgstr ""
220+
221+#: qml/Components/KeyboardShortcutsOverlay.qml:195
222+msgid "Opens the Application Drawer."
223+msgstr ""
224+
225+#: qml/Components/KeyboardShortcutsOverlay.qml:207
182msgid "Scopes"
226msgid "Scopes"
183msgstr ""
227msgstr ""
184
228
185−#: qml/Components/KeyboardShortcutsOverlay.qml:188
229+#: qml/Components/KeyboardShortcutsOverlay.qml:214
186msgid "Super (Tap)"
230msgid "Super (Tap)"
187msgstr ""
231msgstr ""
188
232
189−#: qml/Components/KeyboardShortcutsOverlay.qml:193
233+#: qml/Components/KeyboardShortcutsOverlay.qml:219
190msgid "Opens the Scopes home."
234msgid "Opens the Scopes home."
191msgstr ""
235msgstr ""
192
236
193−#: qml/Components/KeyboardShortcutsOverlay.qml:209
237+#: qml/Components/KeyboardShortcutsOverlay.qml:235
194msgid "Switching"
238msgid "Switching"
195msgstr ""
239msgstr ""
196
240
197−#: qml/Components/KeyboardShortcutsOverlay.qml:216
241+#: qml/Components/KeyboardShortcutsOverlay.qml:242
198msgid "Alt + Tab"
242msgid "Alt + Tab"
199msgstr ""
243msgstr ""
200
244
201−#: qml/Components/KeyboardShortcutsOverlay.qml:221
245+#: qml/Components/KeyboardShortcutsOverlay.qml:247
202msgid "Switches between applications."
246msgid "Switches between applications."
203msgstr ""
247msgstr ""
204
248
205−#: qml/Components/KeyboardShortcutsOverlay.qml:229
249+#: qml/Components/KeyboardShortcutsOverlay.qml:255
206msgid "Super + W"
250msgid "Super + W"
207msgstr ""
251msgstr ""
208
252
209−#: qml/Components/KeyboardShortcutsOverlay.qml:234
253+#: qml/Components/KeyboardShortcutsOverlay.qml:260
210msgid "Opens the desktop spread."
254msgid "Opens the desktop spread."
211msgstr ""
255msgstr ""
212
256
213−#: qml/Components/KeyboardShortcutsOverlay.qml:242
257+#: qml/Components/KeyboardShortcutsOverlay.qml:268
214msgid "Cursor Left or Right"
258msgid "Cursor Left or Right"
215msgstr ""
259msgstr ""
216
260
217−#: qml/Components/KeyboardShortcutsOverlay.qml:247
261+#: qml/Components/KeyboardShortcutsOverlay.qml:273
218msgid "Moves the focus."
262msgid "Moves the focus."
219msgstr ""
263msgstr ""
220
264
221−#: qml/Components/KeyboardShortcutsOverlay.qml:259
265+#: qml/Components/KeyboardShortcutsOverlay.qml:285
222msgid "Windows"
266msgid "Windows"
223msgstr ""
267msgstr ""
224
268
225−#: qml/Components/KeyboardShortcutsOverlay.qml:266
269+#: qml/Components/KeyboardShortcutsOverlay.qml:292
226msgid "Ctrl + Super + D"
270msgid "Ctrl + Super + D"
227msgstr ""
271msgstr ""
228
272
229−#: qml/Components/KeyboardShortcutsOverlay.qml:271
273+#: qml/Components/KeyboardShortcutsOverlay.qml:297
230msgid "Minimizes all windows."
274msgid "Minimizes all windows."
231msgstr ""
275msgstr ""
232
276
233−#: qml/Components/KeyboardShortcutsOverlay.qml:279
277+#: qml/Components/KeyboardShortcutsOverlay.qml:305
234msgid "Ctrl + Super + Up"
278msgid "Ctrl + Super + Up"
235msgstr ""
279msgstr ""
236
280
237−#: qml/Components/KeyboardShortcutsOverlay.qml:284
281+#: qml/Components/KeyboardShortcutsOverlay.qml:310
238msgid "Maximizes the current window."
282msgid "Maximizes the current window."
239msgstr ""
283msgstr ""
240
284
241−#: qml/Components/KeyboardShortcutsOverlay.qml:292
285+#: qml/Components/KeyboardShortcutsOverlay.qml:318
242msgid "Ctrl + Super + Down"
286msgid "Ctrl + Super + Down"
243msgstr ""
287msgstr ""
244
288
245−#: qml/Components/KeyboardShortcutsOverlay.qml:297
289+#: qml/Components/KeyboardShortcutsOverlay.qml:323
246msgid "Minimizes or restores the current window."
290msgid "Minimizes or restores the current window."
247msgstr ""
291msgstr ""
248
292
249−#: qml/Components/KeyboardShortcutsOverlay.qml:305
293+#: qml/Components/KeyboardShortcutsOverlay.qml:331
250msgid "Ctrl + Super + Left or Right"
294msgid "Ctrl + Super + Left or Right"
251msgstr ""
295msgstr ""
252
296
253−#: qml/Components/KeyboardShortcutsOverlay.qml:310
297+#: qml/Components/KeyboardShortcutsOverlay.qml:336
254msgid "Semi-maximizes the current window."
298msgid "Semi-maximizes the current window."
255msgstr ""
299msgstr ""
256
300
257−#: qml/Components/KeyboardShortcutsOverlay.qml:318
301+#: qml/Components/KeyboardShortcutsOverlay.qml:344
258msgid "Alt + F4"
302msgid "Alt + F4"
259msgstr ""
303msgstr ""
260
304
261−#: qml/Components/KeyboardShortcutsOverlay.qml:323
305+#: qml/Components/KeyboardShortcutsOverlay.qml:349
262msgid "Closes the current window."
306msgid "Closes the current window."
263msgstr ""
307msgstr ""
264
308
265−#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:252
309+#: qml/Components/Lockscreen.qml:212 qml/Greeter/NarrowView.qml:228
266msgid "Return to Call"
310msgid "Return to Call"
267msgstr "Nôl i'r alwad"
311msgstr "Nôl i'r alwad"
268
312
@@ -270,7 +314,7 @@ msgstr "Nôl i'r alwad"
270msgid "Emergency Call"
314msgid "Emergency Call"
271msgstr "Galwad Frys"
315msgstr "Galwad Frys"
272
316
273−#: qml/Components/Lockscreen.qml:244
317+#: qml/Components/Lockscreen.qml:245
274msgid "OK"
318msgid "OK"
275msgstr "Iawn"
319msgstr "Iawn"
276
320
@@ -284,29 +328,29 @@ msgstr ""
284msgid "%1:%2"
328msgid "%1:%2"
285msgstr ""
329msgstr ""
286
330
287−#: qml/Components/ModeSwitchWarningDialog.qml:32
331+#: qml/Components/ModeSwitchWarningDialog.qml:33
288msgid "Apps may have unsaved data:"
332msgid "Apps may have unsaved data:"
289msgstr ""
333msgstr ""
290
334
291−#: qml/Components/ModeSwitchWarningDialog.qml:57
335+#: qml/Components/ModeSwitchWarningDialog.qml:60
292msgctxt ""
336msgctxt ""
293"Re-dock means connect the device again to an external screen/mouse/keyboard"
337"Re-dock means connect the device again to an external screen/mouse/keyboard"
294msgid "Re-dock, save your work and close these apps to continue."
338msgid "Re-dock, save your work and close these apps to continue."
295msgstr ""
339msgstr ""
296
340
297−#: qml/Components/ModeSwitchWarningDialog.qml:63
341+#: qml/Components/ModeSwitchWarningDialog.qml:67
298msgid "Or force close now (unsaved data will be lost)."
342msgid "Or force close now (unsaved data will be lost)."
299msgstr ""
343msgstr ""
300
344
301−#: qml/Components/ModeSwitchWarningDialog.qml:75
345+#: qml/Components/ModeSwitchWarningDialog.qml:80
302msgid "OK, I will reconnect"
346msgid "OK, I will reconnect"
303msgstr ""
347msgstr ""
304
348
305−#: qml/Components/ModeSwitchWarningDialog.qml:76
349+#: qml/Components/ModeSwitchWarningDialog.qml:81
306msgid "Reconnect now!"
350msgid "Reconnect now!"
307msgstr ""
351msgstr ""
308
352
309−#: qml/Components/ModeSwitchWarningDialog.qml:88
353+#: qml/Components/ModeSwitchWarningDialog.qml:94
310msgid "Close all"
354msgid "Close all"
311msgstr ""
355msgstr ""
312
356
@@ -314,6 +358,28 @@ msgstr ""
314msgid "Preview Share Item"
358msgid "Preview Share Item"
315msgstr ""
359msgstr ""
316
360
361+#: qml/Components/VirtualTouchPad.qml:317
362+msgid ""
363+"Your device is now connected to an external display. Use this screen as a "
364+"touch pad to interact with the pointer."
365+msgstr ""
366+
367+#: qml/Components/VirtualTouchPad.qml:327
368+msgid "Tap left button to click."
369+msgstr ""
370+
371+#: qml/Components/VirtualTouchPad.qml:339
372+msgid "Tap right button to right click."
373+msgstr ""
374+
375+#: qml/Components/VirtualTouchPad.qml:351
376+msgid "Swipe with two fingers to scroll."
377+msgstr ""
378+
379+#: qml/Components/VirtualTouchPad.qml:396
380+msgid "Find more settings in the system settings."
381+msgstr ""
382+
317#: qml/Dash/DashPageHeader.qml:361
383#: qml/Dash/DashPageHeader.qml:361
318msgctxt "Button: Open the Ubuntu Store"
384msgctxt "Button: Open the Ubuntu Store"
319msgid "Store"
385msgid "Store"
@@ -345,24 +411,24 @@ msgstr ""
345msgid "Reset"
411msgid "Reset"
346msgstr ""
412msgstr ""
347
413
348−#: qml/Dash/GenericScopeView.qml:545 qml/Dash/GenericScopeView.qml:716
414+#: qml/Dash/GenericScopeView.qml:547 qml/Dash/GenericScopeView.qml:718
349msgid "Show less"
415msgid "Show less"
350msgstr ""
416msgstr ""
351
417
352−#: qml/Dash/GenericScopeView.qml:545
418+#: qml/Dash/GenericScopeView.qml:547
353msgid "Show all"
419msgid "Show all"
354msgstr ""
420msgstr ""
355
421
356−#: qml/Dash/GenericScopeView.qml:576
422+#: qml/Dash/GenericScopeView.qml:578
357msgctxt "Label: Hint for dash search line edit"
423msgctxt "Label: Hint for dash search line edit"
358msgid "Search"
424msgid "Search"
359msgstr "Chwilio"
425msgstr "Chwilio"
360
426
361−#: qml/Dash/PageHeaderExtraPanel.qml:57
427+#: qml/Dash/PageHeaderExtraPanel.qml:67
362msgid "Recent Searches"
428msgid "Recent Searches"
363msgstr ""
429msgstr ""
364
430
365−#: qml/Dash/PageHeaderExtraPanel.qml:68
431+#: qml/Dash/PageHeaderExtraPanel.qml:78
366msgid "Clear All"
432msgid "Clear All"
367msgstr ""
433msgstr ""
368
434
@@ -399,24 +465,18 @@ msgstr "Rhyddhewch i adnewyddu..."
399msgid "Enable location data"
465msgid "Enable location data"
400msgstr "Galluogi data lleoliad"
466msgstr "Galluogi data lleoliad"
401
467
402−#: qml/Dash/ScopesList.qml:57
468+#: qml/Dash/ScopesList.qml:146
403msgid "Manage"
469msgid "Manage"
404msgstr "Rheoli"
470msgstr "Rheoli"
405
471
406−#: qml/Dash/ScopesList.qml:104
472+#: qml/Dash/ScopesList.qml:187
407msgid "Home"
473msgid "Home"
408msgstr "Cartref"
474msgstr "Cartref"
409
475
410−#: qml/Dash/ScopesList.qml:105
476+#: qml/Dash/ScopesList.qml:188
411msgid "Also installed"
477msgid "Also installed"
412msgstr "Hefyd wedi gosod"
478msgstr "Hefyd wedi gosod"
413
479
414−#: qml/DisabledScreenNotice.qml:109
415−msgid ""
416−"Your device is now connected to an external display. Use this screen as a "
417−"touch pad to interact with the pointer."
418−msgstr ""
419−
420#: qml/Greeter/CoverPage.qml:127
480#: qml/Greeter/CoverPage.qml:127
421msgid "Unlock"
481msgid "Unlock"
422msgstr "Datgloi"
482msgstr "Datgloi"
@@ -444,32 +504,45 @@ msgstr[1] "Arhoswch am %1 munud cyn cynnig eto..."
444msgstr[2] "Arhoswch am %1 munud cyn cynnig eto..."
504msgstr[2] "Arhoswch am %1 munud cyn cynnig eto..."
445msgstr[3] "Arhoswch am %1 munud cyn cynnig eto..."
505msgstr[3] "Arhoswch am %1 munud cyn cynnig eto..."
446
506
447−#: qml/Greeter/Greeter.qml:596
507+#: qml/Greeter/Greeter.qml:550
448msgid "Try again"
508msgid "Try again"
449msgstr ""
509msgstr ""
450
510
451−#: qml/Greeter/LoginList.qml:70
511+#: qml/Greeter/Greeter.qml:551
512+msgid "Enter passphrase to unlock"
513+msgstr ""
514+
515+#: qml/Greeter/Greeter.qml:552
516+msgid "Enter passcode to unlock"
517+msgstr ""
518+
519+#: qml/Greeter/NarrowView.qml:228
520+msgid "Emergency"
521+msgstr ""
522+
523+#: qml/Greeter/PromptList.qml:126
452msgid "Passphrase"
524msgid "Passphrase"
453msgstr ""
525msgstr ""
454
526
455−#: qml/Greeter/LoginList.qml:71
527+#: qml/Greeter/PromptList.qml:126
456msgid "Passcode"
528msgid "Passcode"
457msgstr ""
529msgstr ""
458
530
459−#: qml/Greeter/LoginList.qml:98
531+#: qml/Greeter/SessionsList.qml:124
460−msgid "Retry"
532+msgid "Select desktop environment"
461−msgstr "Ailgynnig"
533+msgstr ""
462
534
463−#: qml/Greeter/LoginList.qml:99
535+#: qml/Launcher/Drawer.qml:94
464−msgid "Log In"
536+msgid "Search…"
465msgstr ""
537msgstr ""
466
538
467−#: qml/Greeter/NarrowView.qml:252
539+#: qml/Launcher/Drawer.qml:129
540+msgctxt "Apps sorted alphabetically"
468−msgid "Emergency"
541+msgid "A-Z"
469msgstr ""
542msgstr ""
470
543
471−#: qml/Greeter/SessionsList.qml:122
544+#: qml/Launcher/MoreAppsHeader.qml:55
472−msgid "Select desktop environment"
545+msgid "More apps in the store"
473msgstr ""
546msgstr ""
474
547
475#: qml/Notifications/NotificationMenuItemFactory.qml:124
548#: qml/Notifications/NotificationMenuItemFactory.qml:124
@@ -484,11 +557,11 @@ msgstr "Tapiwch i ffonio nôl"
484msgid "Conference"
557msgid "Conference"
485msgstr "Cydalwad"
558msgstr "Cydalwad"
486
559
487−#: qml/Panel/Indicators/MenuItemFactory.qml:847
560+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:869
488msgid "Nothing is playing"
561msgid "Nothing is playing"
489msgstr "Dim byd yn chwarae"
562msgstr "Dim byd yn chwarae"
490
563
491−#: qml/Panel/Indicators/MenuItemFactory.qml:975
564+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:997
492#, qt-format
565#, qt-format
493msgid "%1 hour"
566msgid "%1 hour"
494msgid_plural "%1 hours"
567msgid_plural "%1 hours"
@@ -497,7 +570,7 @@ msgstr[1] "%1 awr"
497msgstr[2] "%1 awr"
570msgstr[2] "%1 awr"
498msgstr[3] "%1 awr"
571msgstr[3] "%1 awr"
499
572
500−#: qml/Panel/Indicators/MenuItemFactory.qml:979
573+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1001
501#, qt-format
574#, qt-format
502msgid "%1 minute"
575msgid "%1 minute"
503msgid_plural "%1 minutes"
576msgid_plural "%1 minutes"
@@ -506,7 +579,7 @@ msgstr[1] "%1 munud"
506msgstr[2] "%1 munud"
579msgstr[2] "%1 munud"
507msgstr[3] "%1 munud"
580msgstr[3] "%1 munud"
508
581
509−#: qml/Panel/Indicators/MenuItemFactory.qml:984
582+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1006
510#, qt-format
583#, qt-format
511msgid "%1 second"
584msgid "%1 second"
512msgid_plural "%1 seconds"
585msgid_plural "%1 seconds"
@@ -515,37 +588,37 @@ msgstr[1] "%1 eiliad"
515msgstr[2] "%1 eiliad"
588msgstr[2] "%1 eiliad"
516msgstr[3] "%1 eiliad"
589msgstr[3] "%1 eiliad"
517
590
518−#: qml/Panel/Indicators/MenuItemFactory.qml:987
591+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1009
519msgid "0 seconds"
592msgid "0 seconds"
520msgstr "0 eiliad"
593msgstr "0 eiliad"
521
594
522#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
595#. Translators: String like "1 hour, 2 minutes, 3 seconds remaining"
523−#: qml/Panel/Indicators/MenuItemFactory.qml:989
596+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1011
524#, qt-format
597#, qt-format
525msgid "%1 remaining"
598msgid "%1 remaining"
526msgstr "%1 yn weddill"
599msgstr "%1 yn weddill"
527
600
528−#: qml/Panel/Indicators/MenuItemFactory.qml:995
601+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1017
529msgid "In queue…"
602msgid "In queue…"
530msgstr "Mewn ciw..."
603msgstr "Mewn ciw..."
531
604
532−#: qml/Panel/Indicators/MenuItemFactory.qml:999
605+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1021
533msgid "Downloading"
606msgid "Downloading"
534msgstr "Yn llwytho i lawr"
607msgstr "Yn llwytho i lawr"
535
608
536−#: qml/Panel/Indicators/MenuItemFactory.qml:1001
609+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1023
537msgid "Paused, tap to resume"
610msgid "Paused, tap to resume"
538msgstr "Seibiwyd, tapiwch i ailafael ynddi"
611msgstr "Seibiwyd, tapiwch i ailafael ynddi"
539
612
540−#: qml/Panel/Indicators/MenuItemFactory.qml:1003
613+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1025
541msgid "Canceled"
614msgid "Canceled"
542msgstr "Diddymwyd"
615msgstr "Diddymwyd"
543
616
544−#: qml/Panel/Indicators/MenuItemFactory.qml:1005
617+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1027
545msgid "Finished"
618msgid "Finished"
546msgstr "Wedi gorffen"
619msgstr "Wedi gorffen"
547
620
548−#: qml/Panel/Indicators/MenuItemFactory.qml:1007
621+#: qml/Panel/Indicators/IndicatorMenuItemFactory.qml:1029
549msgid "Failed, tap to retry"
622msgid "Failed, tap to retry"
550msgstr "Methwyd, tapiwch i geisio eto"
623msgstr "Methwyd, tapiwch i geisio eto"
551
624
@@ -565,12 +638,16 @@ msgctxt "Button: Call back on phone"
565msgid "Call back"
638msgid "Call back"
566msgstr ""
639msgstr ""
567
640
641+#: qml/Panel/PanelMenuPage.qml:92
642+msgid "Back"
643+msgstr ""
644+
568#: qml/Stage/SideStage.qml:76
645#: qml/Stage/SideStage.qml:76
569msgid "Drag using 3 fingers any application from one window to the other"
646msgid "Drag using 3 fingers any application from one window to the other"
570msgstr ""
647msgstr ""
571
648
572#: qml/Tutorial/TutorialLeftLong.qml:49
649#: qml/Tutorial/TutorialLeftLong.qml:49
573−msgid "Long swipe from the left edge to open the Today scope"
650+msgid "Long swipe from the left edge to open the Application Drawer"
574msgstr ""
651msgstr ""
575
652
576#: qml/Tutorial/TutorialLeft.qml:47
653#: qml/Tutorial/TutorialLeft.qml:47
@@ -599,7 +676,7 @@ msgid "Language"
599msgstr ""
676msgstr ""
600
677
601#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
678#: qml/Wizard/Pages/10-welcome.qml:173 qml/Wizard/Pages/20-keyboard.qml:152
602−#: qml/Wizard/Pages/30-wifi.qml:207 qml/Wizard/Pages/40-location.qml:271
679+#: qml/Wizard/Pages/30-wifi.qml:206 qml/Wizard/Pages/40-location.qml:271
603#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
680#: qml/Wizard/Pages/50-timezone.qml:271 qml/Wizard/Pages/60-account.qml:65
604#: qml/Wizard/Pages/70-passwd-type.qml:145
681#: qml/Wizard/Pages/70-passwd-type.qml:145
605#: qml/Wizard/Pages/75-report-check.qml:84
682#: qml/Wizard/Pages/75-report-check.qml:84
@@ -620,25 +697,24 @@ msgstr ""
620msgid "Keyboard layout"
697msgid "Keyboard layout"
621msgstr ""
698msgstr ""
622
699
623−#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:207
700+#: qml/Wizard/Pages/20-keyboard.qml:152 qml/Wizard/Pages/30-wifi.qml:206
624−#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/77-system-update.qml:152
701+#: qml/Wizard/Pages/60-account.qml:65 qml/Wizard/Pages/sim.qml:101
625−#: qml/Wizard/Pages/sim.qml:101
626msgid "Skip"
702msgid "Skip"
627msgstr "Neidio"
703msgstr "Neidio"
628
704
629−#: qml/Wizard/Pages/30-wifi.qml:31
705+#: qml/Wizard/Pages/30-wifi.qml:30
630msgid "Connect to Wi‑Fi"
706msgid "Connect to Wi‑Fi"
631msgstr "Cysylltu â diwifr"
707msgstr "Cysylltu â diwifr"
632
708
633−#: qml/Wizard/Pages/30-wifi.qml:132
709+#: qml/Wizard/Pages/30-wifi.qml:131
634msgid "Connected"
710msgid "Connected"
635msgstr ""
711msgstr ""
636
712
637−#: qml/Wizard/Pages/30-wifi.qml:165
713+#: qml/Wizard/Pages/30-wifi.qml:164
638msgid "Available Wi-Fi networks"
714msgid "Available Wi-Fi networks"
639msgstr ""
715msgstr ""
640
716
641−#: qml/Wizard/Pages/30-wifi.qml:166
717+#: qml/Wizard/Pages/30-wifi.qml:165
642msgid "No available Wi-Fi networks"
718msgid "No available Wi-Fi networks"
643msgstr ""
719msgstr ""
644
720
@@ -725,35 +801,6 @@ msgstr ""
725msgid "Privacy policy"
801msgid "Privacy policy"
726msgstr ""
802msgstr ""
727
803
728−#: qml/Wizard/Pages/77-system-update.qml:28
729−msgid "Update Device"
730−msgstr ""
731−
732−#: qml/Wizard/Pages/77-system-update.qml:55
733−msgid ""
734−"There is a system update available and ready to install. Afterwards, the "
735−"device will automatically restart."
736−msgstr ""
737−
738−#: qml/Wizard/Pages/77-system-update.qml:76
739−msgctxt "string identifying name of the update"
740−msgid "Ubuntu system"
741−msgstr ""
742−
743−#: qml/Wizard/Pages/77-system-update.qml:83
744−#, qt-format
745−msgctxt "version of the system update"
746−msgid "Version %1"
747−msgstr ""
748−
749−#: qml/Wizard/Pages/77-system-update.qml:102
750−msgid "This could take a few minutes..."
751−msgstr ""
752−
753−#: qml/Wizard/Pages/77-system-update.qml:116
754−msgid "Install and restart now"
755−msgstr ""
756−
757#: qml/Wizard/Pages/80-finished.qml:89
804#: qml/Wizard/Pages/80-finished.qml:89
758msgid "Welcome to Ubuntu"
805msgid "Welcome to Ubuntu"
759msgstr ""
806msgstr ""
po/da.po+184−137

This diff is too big to show here.

po/de.po+229−150

This diff is too big to show here.

po/el.po+253−168

This diff is too big to show here.

po/en_AU.po+190−140

This diff is too big to show here.

po/en_GB.po+226−147

This diff is too big to show here.

po/eo.po+184−137

This diff is too big to show here.

po/es.po+232−151

This diff is too big to show here.

po/et.ponew file+942

This diff is too big to show here.

po/eu.po+184−137

This diff is too big to show here.

po/fa.po+226−147

This diff is too big to show here.

po/fi.po+226−147

This diff is too big to show here.

po/fo.po+184−137

This diff is too big to show here.

po/fr.po+231−150

This diff is too big to show here.

po/ga.po+184−137

This diff is too big to show here.

po/gd.po+228−149

This diff is too big to show here.

po/gl.po+231−151

This diff is too big to show here.

po/gv.po+183−136

This diff is too big to show here.

po/he.po+184−137

This diff is too big to show here.

po/hi.po+183−136

This diff is too big to show here.

po/hr.po+226−147

This diff is too big to show here.

po/hu.po+226−147

This diff is too big to show here.

po/hy.po+183−136

This diff is too big to show here.

po/ia.po+226−147

This diff is too big to show here.

po/id.po+183−136

This diff is too big to show here.

po/is.po+183−136

This diff is too big to show here.

po/it.po+230−149

This diff is too big to show here.

po/ja.po+183−136

This diff is too big to show here.

po/km.po+184−137

This diff is too big to show here.

po/kn.po+183−136

This diff is too big to show here.

po/ko.po+184−137

This diff is too big to show here.

po/ku.po+211−164

This diff is too big to show here.

po/ky.po+183−136

This diff is too big to show here.

po/lo.po+183−136

This diff is too big to show here.

po/lt.po+183−136

This diff is too big to show here.

po/lv.po+184−137

This diff is too big to show here.

po/ml.po+183−136

This diff is too big to show here.

po/mr.po+183−136

This diff is too big to show here.

po/ms.po+274−191

This diff is too big to show here.

po/my.po+184−137

This diff is too big to show here.

po/nb.po+227−148

This diff is too big to show here.

po/ne.po+184−137

This diff is too big to show here.

po/nl.po+226−147

This diff is too big to show here.

po/nn.po+183−136

This diff is too big to show here.

po/oc.po+220−146

This diff is too big to show here.

po/or.po+183−136

This diff is too big to show here.

po/pa.po+184−137

This diff is too big to show here.

po/pl.po+225−146

This diff is too big to show here.

po/pt.po+227−147

This diff is too big to show here.

po/pt_BR.po+184−137

This diff is too big to show here.

po/ro.po+184−137

This diff is too big to show here.

po/ru.po+222−146

This diff is too big to show here.

po/shn.po+183−136

This diff is too big to show here.

po/si.po+183−136

This diff is too big to show here.

po/sk.po+226−147

This diff is too big to show here.

po/sl.po+216−145

This diff is too big to show here.

po/sq.po+184−137

This diff is too big to show here.

po/sr.po+224−145

This diff is too big to show here.

po/sv.po+226−147

This diff is too big to show here.

po/sw.po+184−137

This diff is too big to show here.

po/ta.po+200−151

This diff is too big to show here.

po/te.po+183−136

This diff is too big to show here.

po/th.po+200−151

This diff is too big to show here.

po/tr.po+226−147

This diff is too big to show here.

po/ug.po+189−139

This diff is too big to show here.

po/uk.po+227−148

This diff is too big to show here.

po/unity8.pot+176−129

This diff is too big to show here.

po/update-unity-pot+17

This diff is too big to show here.

po/ur.po+183−136

This diff is too big to show here.

po/uz.po+183−136

This diff is too big to show here.

po/vi.po+183−136

This diff is too big to show here.

po/wo.po+184−137

This diff is too big to show here.

po/xh.po+183−136

This diff is too big to show here.

po/zh_CN.po+197−141

This diff is too big to show here.

po/zh_HK.po+183−136

This diff is too big to show here.

po/zh_TW.po+207−147

This diff is too big to show here.

qml/ApplicationMenus/ApplicationMenuItemFactory.qmlnew file+135

This diff is too big to show here.

tests/mocks/LightDM/IntegratedLightDM/QLightDM/SessionsModel → qml/ApplicationMenus/ApplicationMenusLimits.qmlrenamed+9−2

This diff is too big to show here.

qml/ApplicationMenus/MenuBar.qmlnew file+513

This diff is too big to show here.

qml/ApplicationMenus/MenuItem.qmlnew file+146

This diff is too big to show here.

qml/ApplicationMenus/MenuNavigator.qmlnew file+101

This diff is too big to show here.

qml/ApplicationMenus/MenuPopup.qmlnew file+510

This diff is too big to show here.

qml/ApplicationMenus/RegisteredApplicationMenuModel.qmlnew file+56

This diff is too big to show here.

qml/ApplicationMenus/qmldirnew file+1

This diff is too big to show here.

qml/CMakeLists.txt+1

This diff is too big to show here.

qml/Components/Dialogs.qml+49−7

This diff is too big to show here.

qml/Components/DragHandle.qml+1

This diff is too big to show here.

qml/Components/EdgeBarrier.qml+1

This diff is too big to show here.

qml/Components/EdgeBarrierController.qml+1

This diff is too big to show here.

qml/Components/InputMethod.qml+5−4

This diff is too big to show here.

qml/Components/KeyboardShortcutsOverlay.qml+28−2

This diff is too big to show here.

qml/Components/KeymapSwitcher.qml+19−8

This diff is too big to show here.

qml/Components/Lockscreen.qml+3−1

This diff is too big to show here.

qml/Components/ModeSwitchWarningDialog.qml+8−2

This diff is too big to show here.

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

This diff is too big to show here.

qml/Components/ScrollCalculator.qml+21−2

This diff is too big to show here.

qml/Components/ShellDialog.qml+21−3

This diff is too big to show here.

qml/Components/VirtualTouchPad.qml+269−1

This diff is too big to show here.

qml/Components/WindowControlButtons.qml+2

This diff is too big to show here.

qml/Dash/CardGrid.qml+2−3

This diff is too big to show here.

qml/Dash/CardTool.qml+2−26

This diff is too big to show here.

qml/Dash/GenericScopeView.qml+1−1

This diff is too big to show here.

qml/Dash/Previews/PreviewAudioPlayback.qml+1

This diff is too big to show here.

qml/Dash/Previews/PreviewPayments.qmldeleted−81

This diff is too big to show here.

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

This diff is too big to show here.

qml/Dash/Previews/PreviewWidgetFactory.qml−1

This diff is too big to show here.

qml/Dash/ScopesList.qml+120−39

This diff is too big to show here.

qml/Dash/ScopesListCategory.qml+4−1

This diff is too big to show here.

qml/DisabledScreenNotice.qml+3−55

This diff is too big to show here.

qml/Greeter/Circle.qml+1−1

This diff is too big to show here.

qml/Greeter/FullLightDMImpl.qml+1

This diff is too big to show here.

qml/Greeter/Greeter.qml+29−74

This diff is too big to show here.

qml/Greeter/GreeterPrompt.qml+61−41

This diff is too big to show here.

qml/Greeter/IntegratedLightDMImpl.qml+1

This diff is too big to show here.

qml/Greeter/LightDMService.qml+4−4

This diff is too big to show here.

qml/Greeter/LoginList.qml+44−113

This diff is too big to show here.

qml/Greeter/NarrowView.qml+11−35

This diff is too big to show here.

qml/Greeter/PromptList.qmlnew file+148

This diff is too big to show here.

qml/Greeter/SessionsList.qml+34−17

This diff is too big to show here.

qml/Greeter/WideView.qml+19−25

This diff is too big to show here.

qml/Launcher/BackgroundBlur.qmlnew file+81

This diff is too big to show here.

qml/Launcher/Drawer.qmlnew file+438

This diff is too big to show here.

qml/Launcher/DrawerGridView.qmlnew file+49

This diff is too big to show here.

tests/mocks/Ubuntu/Payments/plugin.cpp → qml/Launcher/DrawerListView.qmlrenamed+19−9

This diff is too big to show here.

qml/Launcher/Launcher.qml+214−48

This diff is too big to show here.

qml/Launcher/LauncherDelegate.qml+8−9

This diff is too big to show here.

qml/Launcher/LauncherPanel.qml+77−28

This diff is too big to show here.

qml/Launcher/MoreAppsHeader.qmlnew file+69

This diff is too big to show here.

qml/Launcher/graphics/home.svgnew file+243

This diff is too big to show here.

qml/Launcher/graphics/home@18.pngdeleted

Binary file not shown.

qml/Launcher/graphics/launcher-app-focus-ring.svgdeleted−12

This diff is too big to show here.

qml/OrientedShell.qml+16−7

This diff is too big to show here.

plugins/Ubuntu/Payments/plugin.cpp → qml/Panel/FakePanelMenu.qmlrenamed+8−10

This diff is too big to show here.

qml/Panel/IndicatorPage.qmldeleted−188

This diff is too big to show here.

qml/Panel/IndicatorItem.qml → qml/Panel/Indicators/IndicatorItem.qmlrenamed+2−1

This diff is too big to show here.

qml/Panel/Indicators/MenuItemFactory.qml → qml/Panel/Indicators/IndicatorMenuItemFactory.qmlrenamed+29−11

This diff is too big to show here.

qml/Panel/Indicators/client/IndicatorRepresentation.qml+18−5

This diff is too big to show here.

qml/Panel/MenuContent.qml+9−12

This diff is too big to show here.

qml/Panel/Panel.qml+330−91

This diff is too big to show here.

qml/Panel/IndicatorsBar.qml → qml/Panel/PanelBar.qmlrenamed+85−36

This diff is too big to show here.

qml/Panel/IndicatorItemRow.qml → qml/Panel/PanelItemRow.qmlrenamed+61−104

This diff is too big to show here.

qml/Panel/IndicatorsMenu.qml → qml/Panel/PanelMenu.qmlrenamed+71−33

This diff is too big to show here.

qml/Panel/PanelMenuPage.qmlnew file+226

This diff is too big to show here.

qml/Rotation/RotationStates.qml+2−2

This diff is too big to show here.

qml/Shell.qml+150−64

This diff is too big to show here.

qml/Stage/ApplicationWindow.qml+1

This diff is too big to show here.

qml/Stage/ChildWindow.qmlnew file+203

This diff is too big to show here.

qml/Stage/ChildWindowRepeater.qmlnew file+39

This diff is too big to show here.

qml/Stage/ChildWindowTree.qmlnew file+138

This diff is too big to show here.

qml/Stage/DecoratedWindow.qml+97−44

This diff is too big to show here.

qml/Stage/FakeMaximizeDelegate.qml+7−7

This diff is too big to show here.

qml/Stage/MoveHandler.qml+39−26

This diff is too big to show here.

qml/Stage/Spread/Spread.qml+11

This diff is too big to show here.

qml/Stage/Spread/WindowedRightEdgeMaths.qml+19−4

This diff is too big to show here.

qml/Stage/Stage.qml+444−285

This diff is too big to show here.

qml/Stage/StageMaths.qml+18−7

This diff is too big to show here.

qml/Stage/StagedFullscreenPolicy.qml+7−13

This diff is too big to show here.

qml/Stage/TopLevelSurfaceRepeater.qmldeleted−67

This diff is too big to show here.

qml/Stage/WindowControlsOverlay.qml+23−26

This diff is too big to show here.

qml/Stage/WindowDecoration.qml+84−19

This diff is too big to show here.

qml/Stage/WindowInfoItem.qml+16

This diff is too big to show here.

qml/Stage/WindowResizeArea.qml+15−70

This diff is too big to show here.

qml/Stage/WindowStateSaver.qmlnew file+64

This diff is too big to show here.

qml/Stage/WindowedFullscreenPolicy.qml+4−12

This diff is too big to show here.

qml/Tutorial/TutorialContent.qml+1−2

This diff is too big to show here.

qml/Tutorial/TutorialLeftLong.qml+2−2

This diff is too big to show here.

qml/Wizard/Pages/30-wifi.qml−4

This diff is too big to show here.

qml/Wizard/Pages/77-system-update.qmldeleted−156

This diff is too big to show here.

src/CMakeLists.txt+11−3

This diff is too big to show here.

src/DebuggingController.cppnew file+92

This diff is too big to show here.

src/DebuggingController.hnew file+57

This diff is too big to show here.

src/MouseTouchAdaptor.cpp+28−1

This diff is too big to show here.

src/MouseTouchAdaptor.h+1

This diff is too big to show here.

src/Panel/CMakeLists.txtdeleted−3

This diff is too big to show here.

src/Panel/Indicators/CMakeLists.txtdeleted−1

This diff is too big to show here.

src/ShellApplication.cpp+8−1

This diff is too big to show here.

src/ShellView.cpp+22

This diff is too big to show here.

src/libunity8-private/abstractdbusservicemonitor.h+1−1

This diff is too big to show here.

src/main.cpp+2−2

This diff is too big to show here.

tests/CMakeLists.txt+21−9

This diff is too big to show here.

tests/autopilot/unity8/dash.py+1−17

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/autopilot/unity8/shell/tests/test_helpers.py−49

This diff is too big to show here.

tests/copyright/check_copyright.sh+33−4

This diff is too big to show here.

tests/graphics/screenshots/gallery@12.pngnew file

Binary file not shown.

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

This diff is too big to show here.

tests/mocks/AccountsService/AccountsService.h+4−7

This diff is too big to show here.

tests/mocks/AccountsService/CMakeLists.txt+3−3

This diff is too big to show here.

tests/mocks/Biometryd/MockOperation.h−1

This diff is too big to show here.

tests/mocks/CMakeLists.txt+15−15

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/LightDM/CMakeLists.txtdeleted−1

This diff is too big to show here.

tests/mocks/LightDM/IntegratedLightDM/CMakeLists.txtdeleted−51

This diff is too big to show here.

tests/mocks/LightDM/IntegratedLightDM/MockGreeter.cppdeleted−51

This diff is too big to show here.

tests/mocks/LightDM/IntegratedLightDM/MockGreeter.hdeleted−42

This diff is too big to show here.

tests/mocks/LightDM/IntegratedLightDM/MockSessionsModel.cppdeleted−66

This diff is too big to show here.

tests/mocks/LightDM/IntegratedLightDM/MockSessionsModel.hdeleted−44

This diff is too big to show here.

tests/mocks/LightDM/IntegratedLightDM/MockUsersModel.cppdeleted−44

This diff is too big to show here.

tests/mocks/LightDM/IntegratedLightDM/liblightdm/CMakeLists.txtdeleted−20

This diff is too big to show here.

tests/mocks/LightDM/IntegratedLightDM/liblightdm/Greeter.cppdeleted−201

This diff is too big to show here.

tests/mocks/LightDM/IntegratedLightDM/liblightdm/UsersModel.cppdeleted−123

This diff is too big to show here.

tests/mocks/LightDM/IntegratedLightDM/plugin.cppdeleted−79

This diff is too big to show here.

tests/mocks/LightDM/IntegratedLightDM/qmldirdeleted−2

This diff is too big to show here.

tests/mocks/LightDMController/CMakeLists.txtnew file+15

This diff is too big to show here.

tests/mocks/Ubuntu/SystemImage/plugin.cpp → tests/mocks/LightDMController/plugin.cpprenamed+11−10

This diff is too big to show here.

tests/mocks/Ubuntu/Payments/plugin.h → tests/mocks/LightDMController/plugin.hrenamed+4−6

This diff is too big to show here.

tests/mocks/LightDMController/qmldirnew file+2

This diff is too big to show here.

tests/mocks/Lights/Lights.h+1−1

This diff is too big to show here.

tests/mocks/Powerd/Powerd.h+2−2

This diff is too big to show here.

tests/mocks/QMenuModel/dbus-enums.h+2−3

This diff is too big to show here.

tests/mocks/QMenuModel/unitymenumodel.cpp+78−13

This diff is too big to show here.

tests/mocks/QMenuModel/unitymenumodel.h+12−1

This diff is too big to show here.

tests/mocks/QtMultimedia/mediaplayer.cpp+2−2

This diff is too big to show here.

tests/mocks/QtMultimedia/mediaplayer.h+6−6

This diff is too big to show here.

tests/mocks/QtMultimedia/videooutput.h+1−1

This diff is too big to show here.

tests/mocks/UInput/mockuinput.h+1−1

This diff is too big to show here.

tests/mocks/Ubuntu/CMakeLists.txt−2

This diff is too big to show here.

tests/mocks/Ubuntu/Connectivity/networking-status.h+2−3

This diff is too big to show here.

tests/mocks/Ubuntu/Payments/CMakeLists.txtdeleted−10

This diff is too big to show here.

tests/mocks/Ubuntu/Payments/MockPayments.cppdeleted−95

This diff is too big to show here.

tests/mocks/Ubuntu/Payments/MockPayments.hdeleted−62

This diff is too big to show here.

tests/mocks/Ubuntu/Payments/qmldirdeleted−3

This diff is too big to show here.

tests/mocks/Ubuntu/SystemImage/CMakeLists.txtdeleted−10

This diff is too big to show here.

tests/mocks/Ubuntu/SystemImage/MockSystemImage.cppdeleted−50

This diff is too big to show here.

tests/mocks/Ubuntu/SystemImage/MockSystemImage.hdeleted−56

This diff is too big to show here.

tests/mocks/Ubuntu/SystemImage/qmldirdeleted−3

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Ubuntu/SystemSettings/SecurityPrivacy/MockSecurityPrivacy.h+1−1

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Unity/Application/ApplicationManager.cpp+100−63

This diff is too big to show here.

tests/mocks/Unity/Application/ApplicationManager.h+32−10

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Unity/Application/MirMock.cpp+13

This diff is too big to show here.

tests/mocks/Unity/Application/MirMock.h+4

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurface.cpp+121−82

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurface.h+44−27

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurfaceItem.cpp+24−9

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurfaceListModel.cpp+17−39

This diff is too big to show here.

tests/mocks/Unity/Application/MirSurfaceListModel.h+7−15

This diff is too big to show here.

tests/mocks/Unity/Application/SurfaceManager.cpp+186−31

This diff is too big to show here.

tests/mocks/Unity/Application/SurfaceManager.h+32−10

This diff is too big to show here.

tests/mocks/Unity/Application/VirtualKeyboard.cpp+5−4

This diff is too big to show here.

tests/mocks/Unity/Application/plugin.cpp+3−33

This diff is too big to show here.

tests/mocks/Unity/Application/resources/Kate.qmlnew file+49

This diff is too big to show here.

tests/mocks/Unity/Application/resources/KateDialog.qmlnew file+48

This diff is too big to show here.

tests/mocks/Unity/Application/resources/KateMenu.qmlnew file+41

This diff is too big to show here.

tests/mocks/Unity/Application/resources/surfaces.qrc+3

This diff is too big to show here.

tests/mocks/Unity/ApplicationMenu/CMakeLists.txtnew file+18

This diff is too big to show here.

tests/mocks/Unity/ApplicationMenu/mockapplicationmenuregistry.cppnew file+47

This diff is too big to show here.

tests/mocks/Unity/ApplicationMenu/mockapplicationmenuregistry.hnew file+41

This diff is too big to show here.

tests/mocks/Unity/ApplicationMenu/plugin.cppnew file+42

This diff is too big to show here.

tests/mocks/Ubuntu/SystemImage/plugin.h → tests/mocks/Unity/ApplicationMenu/plugin.hrenamed+6−5

This diff is too big to show here.

tests/mocks/Unity/ApplicationMenu/qmldirnew file+3

This diff is too big to show here.

tests/mocks/Unity/CMakeLists.txt+11

This diff is too big to show here.

tests/mocks/Unity/Indicators/CMakeLists.txt+4

This diff is too big to show here.

tests/mocks/Unity/Indicators/fakeindicatorsmodel.h−1

This diff is too big to show here.

tests/mocks/Unity/Indicators/fakeindicatorsmodeldata.js+20−4

This diff is too big to show here.

tests/mocks/Unity/InputInfo/qinputdeviceinfo_mock.cpp+6−2

This diff is too big to show here.

tests/mocks/Unity/Launcher/CMakeLists.txt+4−2

This diff is too big to show here.

tests/mocks/Unity/Launcher/MockAppDrawerModel.cppnew file+74

This diff is too big to show here.

tests/mocks/Unity/Launcher/MockAppDrawerModel.hnew file+32

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Unity/Launcher/MockQuickListModel.cpp+3−1

This diff is too big to show here.

tests/mocks/Unity/Launcher/MockQuickListModel.h+2

This diff is too big to show here.

tests/mocks/Unity/Launcher/plugin.cpp+4

This diff is too big to show here.

tests/mocks/Unity/Notifications/MockActionModel.h+1−1

This diff is too big to show here.

tests/mocks/Unity/Notifications/MockNotification.h+2−1

This diff is too big to show here.

tests/mocks/Unity/Platform/CMakeLists.txtnew file+1

This diff is too big to show here.

tests/mocks/LightDM/IntegratedLightDM/QLightDM/UsersModel → tests/mocks/Unity/Platform/MockPlatform.qmlrenamed+10−2

This diff is too big to show here.

tests/mocks/Unity/Platform/qmldirnew file+2

This diff is too big to show here.

tests/mocks/Unity/Screens/screens.cpp+1−1

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Unity/fake_previewwidgetmodel.h+1−1

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/Unity/fake_scopesoverview.h+2

This diff is too big to show here.

tests/mocks/Utils/CMakeLists.txt+8

This diff is too big to show here.

tests/mocks/Utils/plugin.cpp+9−1

This diff is too big to show here.

tests/mocks/Utils/windowstatestorage.cpp+23

This diff is too big to show here.

tests/mocks/Utils/windowstatestorage.h+6−3

This diff is too big to show here.

tests/mocks/liblightdm/CMakeLists.txtnew file+18

This diff is too big to show here.

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

The content is the same.

tests/mocks/LightDM/IntegratedLightDM/liblightdm/GreeterPrivate.h → tests/mocks/liblightdm/GreeterPrivate.hrenamed

The content is the same.

tests/mocks/liblightdm/MockController.cppnew file+192

This diff is too big to show here.

tests/mocks/liblightdm/MockController.hnew file+106

This diff is too big to show here.

tests/mocks/liblightdm/MockGreeter.cppnew file+316

This diff is too big to show here.

tests/mocks/LightDM/IntegratedLightDM/liblightdm/Greeter.h → tests/mocks/liblightdm/MockGreeter.hrenamed+10−23

This diff is too big to show here.

tests/mocks/LightDM/IntegratedLightDM/liblightdm/SessionsModel.cpp → tests/mocks/liblightdm/MockSessionsModel.cpprenamed+39−42

This diff is too big to show here.

tests/mocks/LightDM/IntegratedLightDM/liblightdm/SessionsModel.h → tests/mocks/liblightdm/MockSessionsModel.hrenamed+11−19

This diff is too big to show here.

tests/mocks/liblightdm/MockUsersModel.cppnew file+220

This diff is too big to show here.

tests/mocks/LightDM/IntegratedLightDM/liblightdm/UsersModel.h → tests/mocks/liblightdm/MockUsersModel.hrenamed+9−18

This diff is too big to show here.

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

This diff is too big to show here.

tests/mocks/LightDM/IntegratedLightDM/liblightdm/SessionsModelPrivate.h → tests/mocks/liblightdm/SessionsModelPrivate.hrenamed

The content is the same.

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

This diff is too big to show here.

tests/mocks/LightDM/IntegratedLightDM/liblightdm/UsersModelPrivate.h → tests/mocks/liblightdm/UsersModelPrivate.hrenamed

The content is the same.

tests/mocks/libusermetrics/CMakeLists.txt+1

This diff is too big to show here.

tests/mocks/libusermetrics/ColorTheme.cpp+4

This diff is too big to show here.

tests/mocks/libusermetrics/UserMetrics.cpp+5

This diff is too big to show here.

tests/plugins/AccountsService/CMakeLists.txt+6

This diff is too big to show here.

tests/plugins/CMakeLists.txt+1

This diff is too big to show here.

tests/plugins/Dash/CMakeLists.txt+26−1

This diff is too big to show here.

tests/plugins/Dash/cardcreatortest.cpp+7−2

This diff is too big to show here.

tests/plugins/Dash/horizontaljournaltest.cpp+5−2

This diff is too big to show here.

tests/plugins/Dash/horizontaljournaltry.cpp+3−1

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Dash/listviewwithpageheadersectiontest.cpp+3−1

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Dash/organicgridtry.cpp+3−1

This diff is too big to show here.

tests/plugins/Dash/verticaljournaltest.cpp+5−2

This diff is too big to show here.

tests/plugins/Dash/verticaljournaltry.cpp+3−1

This diff is too big to show here.

tests/plugins/GlobalShortcut/CMakeLists.txt+11−5

This diff is too big to show here.

tests/plugins/GlobalShortcut/GlobalShortcutTest.cpp+3−2

This diff is too big to show here.

tests/plugins/Greeter/Unity/Launcher/CMakeLists.txt+5−22

This diff is too big to show here.

tests/plugins/Greeter/Unity/Launcher/launchermodelastest.cpp+4−1

This diff is too big to show here.

tests/plugins/ImageCache/CMakeLists.txt+10

This diff is too big to show here.

tests/plugins/ImageCache/test.cpp+4−2

This diff is too big to show here.

tests/plugins/LightDM/IntegratedLightDM/CMakeLists.txt+53−9

This diff is too big to show here.

tests/plugins/LightDM/IntegratedLightDM/dbus.cpp+9−12

This diff is too big to show here.

tests/plugins/LightDM/IntegratedLightDM/greeter.qml+2−7

This diff is too big to show here.

tests/plugins/LightDM/IntegratedLightDM/promptsmodel.cppnew file+175

This diff is too big to show here.

tests/plugins/LightDM/IntegratedLightDM/sessionsmodel.cpp+15−13

This diff is too big to show here.

tests/plugins/LightDM/IntegratedLightDM/usersmodel.cpp+100−16

This diff is too big to show here.

tests/plugins/SessionBroadcast/CMakeLists.txt+6

This diff is too big to show here.

tests/plugins/Ubuntu/Gestures/CMakeLists.txt+8−4

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Unity/CMakeLists.txt+1

This diff is too big to show here.

tests/plugins/Unity/Indicators/CMakeLists.txt+11−1

This diff is too big to show here.

tests/plugins/Unity/Indicators/IndicatorsManagerTest.cpp+1−1

This diff is too big to show here.

tests/plugins/Unity/Indicators/IndicatorsModelTest.cpp+1−1

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Unity/Launcher/launchermodeltest.cpp+112−11

This diff is too big to show here.

tests/plugins/Unity/Platform/CMakeLists.txtnew file+30

This diff is too big to show here.

tests/plugins/Unity/Platform/platformtest.cppnew file+142

This diff is too big to show here.

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

This diff is too big to show here.

tests/plugins/Unity/Session/LogindServer.cpp+10

This diff is too big to show here.

tests/plugins/Unity/Session/LogindServer.h+5

This diff is too big to show here.

tests/plugins/Unity/Session/interfaces.xml+12

This diff is too big to show here.

tests/plugins/Unity/Session/preload.cnew file+43

This diff is too big to show here.

tests/plugins/Unity/Session/sessionbackendtest.cpp+130−11

This diff is too big to show here.

tests/plugins/Utils/CMakeLists.txt+11−1

This diff is too big to show here.

tests/plugins/Utils/DeviceConfigParserTest.cpp+4−1

This diff is too big to show here.

tests/plugins/Utils/WindowInputMonitorTest.cpp+107−10

This diff is too big to show here.

tests/plugins/Utils/WindowStateStorageTest.cppnew file+73

This diff is too big to show here.

tests/plugins/WindowManager/CMakeLists.txtnew file+34

This diff is too big to show here.

tests/plugins/WindowManager/UnityApplicationMocks.hnew file+210

This diff is too big to show here.

tests/plugins/WindowManager/tst_TopLevelWindowModel.cppnew file+130

This diff is too big to show here.

tests/plugins/Wizard/CMakeLists.txt+6

This diff is too big to show here.

tests/qmltests/ApplicationMenuDataLoader.qmlnew file+99

This diff is too big to show here.

tests/qmltests/ApplicationMenus/tst_MenuBar.qmlnew file+409

This diff is too big to show here.

tests/qmltests/ApplicationMenus/tst_MenuPopup.qmlnew file+360

This diff is too big to show here.

tests/qmltests/CMakeLists.txt+28−7

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/Components/tst_VirtualTouchPad.qml+55−1

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewExpandable.qml−5

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewPayments.qmldeleted−203

This diff is too big to show here.

tests/qmltests/Dash/Previews/tst_PreviewZoomableImage.qml+5−5

This diff is too big to show here.

tests/qmltests/Dash/tst_Dash.qml+9−54

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/Dash/tst_DashShell.qml+9−70

This diff is too big to show here.

tests/qmltests/Dash/tst_GenericScopeView.qml+6−22

This diff is too big to show here.

tests/qmltests/Greeter/TestView.qml+7−21

This diff is too big to show here.

tests/qmltests/Greeter/tst_Greeter.qml+62−117

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/Greeter/tst_NarrowView.qml+20−43

This diff is too big to show here.

tests/qmltests/Greeter/tst_WideView.qml+145−122

This diff is too big to show here.

tests/qmltests/Launcher/tst_Drawer.qmlnew file+385

This diff is too big to show here.

tests/qmltests/Launcher/tst_Launcher.qml+117−15

This diff is too big to show here.

tests/qmltests/Notifications/tst_Notifications.qml+11−11

This diff is too big to show here.

tests/qmltests/Notifications/tst_SwipeToAct.qml+5−5

This diff is too big to show here.

tests/qmltests/Panel/tst_IndicatorItem.qml → tests/qmltests/Panel/Indicators/tst_IndicatorItem.qmlrenamed+1−1

This diff is too big to show here.

tests/qmltests/Panel/Indicators/tst_MenuItemFactory.qml → tests/qmltests/Panel/Indicators/tst_IndicatorMenuItemFactory.qmlrenamed+8−3

This diff is too big to show here.

tests/qmltests/Panel/IndicatorTest.qml → tests/qmltests/Panel/PanelTest.qmlrenamed−5

This diff is too big to show here.

tests/qmltests/Panel/tst_ActiveCallHint.qml+16−2

This diff is too big to show here.

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

This diff is too big to show here.

tests/qmltests/Panel/tst_Panel.qml+469−103

This diff is too big to show here.

tests/qmltests/Panel/tst_IndicatorsBar.qml → tests/qmltests/Panel/tst_PanelBar.qmlrenamed+24−33

This diff is too big to show here.

tests/qmltests/Panel/tst_IndicatorItemRow.qml → tests/qmltests/Panel/tst_PanelItemRow.qmlrenamed+36−32

This diff is too big to show here.

tests/qmltests/Panel/tst_IndicatorsMenu.qml → tests/qmltests/Panel/tst_PanelMenu.qmlrenamed+32−14

This diff is too big to show here.

tests/qmltests/Panel/tst_IndicatorPage.qml → tests/qmltests/Panel/tst_PanelMenuPage.qmlrenamed+53−47

This diff is too big to show here.

tests/qmltests/Stage/ApplicationCheckBox.qml+2−2

This diff is too big to show here.

tests/qmltests/Stage/tst_ApplicationWindow.qml+12−30

This diff is too big to show here.

tests/qmltests/Stage/tst_DecoratedWindow.qml+40−5

This diff is too big to show here.

tests/qmltests/Stage/tst_DesktopStage.qml+395−137

This diff is too big to show here.

tests/qmltests/Stage/tst_PhoneStage.qml+32−43

This diff is too big to show here.

tests/qmltests/Stage/tst_SurfaceContainer.qml+4

This diff is too big to show here.

tests/qmltests/Stage/tst_TabletStage.qml+60−11

This diff is too big to show here.

tests/qmltests/Stage/tst_WindowDecoration.qmlnew file+244

This diff is too big to show here.

tests/qmltests/Stage/tst_WindowResizeArea.qml+18−75

This diff is too big to show here.

tests/qmltests/Tutorial/tst_Tutorial.qml+36−13

This diff is too big to show here.

tests/qmltests/Wizard/tst_Wizard.qml−6

This diff is too big to show here.

tests/qmltests/tst_DisabledScreenNotice.qml+23−9

This diff is too big to show here.

tests/qmltests/tst_OrientedShell.qml+115−25

This diff is too big to show here.

tests/qmltests/tst_Shell.qml+843−368

This diff is too big to show here.

tests/qmltests/tst_ShellWithPin.qml+37−122

This diff is too big to show here.

tests/scripts/alert-launcher-icon.sh+16

This diff is too big to show here.

tests/scripts/get-progress.sh+16

This diff is too big to show here.

tests/scripts/list-launcher-icons.sh+16

This diff is too big to show here.

tests/scripts/set-count-visible.sh+16

This diff is too big to show here.

tests/scripts/set-count.sh+16

This diff is too big to show here.

tests/scripts/set-progress.sh+16

This diff is too big to show here.

tests/uqmlscene/CMakeLists.txt+14−2

This diff is too big to show here.

tests/uqmlscene/main.cpp+7−3

This diff is too big to show here.

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

This diff is too big to show here.

tests/utils/modules/Unity/Test/StageTestCase.qmlnew file+68

This diff is too big to show here.

tests/utils/modules/Unity/Test/UnityTestCase.qml+8−18

This diff is too big to show here.

tests/utils/modules/Unity/Test/qmldir+2−1

This diff is too big to show here.

tests/utils/modules/Unity/Test/testutil.cpp+1−1

This diff is too big to show here.

tools/CMakeLists.txt+3−12

This diff is too big to show here.

src/Panel/Indicators/client/CMakeLists.txt → tools/indicatorsclient/CMakeLists.txtrenamed

The content is the same.

src/Panel/Indicators/client/indicatorsclient.cpp → tools/indicatorsclient/indicatorsclient.cpprenamed

The content is the same.

src/Panel/Indicators/client/indicatorsclient.h → tools/indicatorsclient/indicatorsclient.hrenamed

The content is the same.

src/Panel/Indicators/client/main.cpp → tools/indicatorsclient/main.cpprenamed

The content is the same.

tools/menutool/CMakeLists.txtnew file+5

This diff is too big to show here.

tools/menutool/READMEnew file+11

This diff is too big to show here.

tools/menutool/menutool.cppnew file+62

This diff is too big to show here.

tools/menutool/menutool.qmlnew file+118

This diff is too big to show here.

tools/scopetool/CMakeLists.txtnew file+12

This diff is too big to show here.

tools/registry-tracker.cpp → tools/scopetool/registry-tracker.cpprenamed

The content is the same.

tools/registry-tracker.h → tools/scopetool/registry-tracker.hrenamed

The content is the same.

tools/scopetool.cpp → tools/scopetool/scopetool.cpprenamed

The content is the same.

tools/unlock-device+16

This diff is too big to show here.